Вопрос: как настроить обмен данными между несколькими ПЛК, программируемыми в CODESYS V3.5?
Очевидно, что это можно сделать с помощью протокола Modbus TCP, но этот вариант является довольно трудоемким (настройка мастера и слэйвов, размещение данных в регистрах и т.д.)
Нет ли более простых способов?
Ответ: такие способы есть.
1. Если один ПЛК должен передавать одни и те же данные на несколько других ПЛК, то можно использовать сетевые переменные (Network Variables).
См. документацию (п. 3) и видеопример.
2. Если один ПЛК должен считывать/записывать разные данные с одного или нескольких ПЛК, то можно использовать Менеджер источников данных (Data Source Manager).
См. видеопример, доп. информацию для ПЛК2хх и информацию в онлайн-справке CODESYS:
https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
Вопрос: Как в коде контролировать наличие связи через Data Source Manager?
Ответ: это можно сделать с помощью глобальных переменных диагностики:
- g_Datasources.<имя_источника_данных>Error (тип - Datasources.DataSourceError)
- g_Datasources.<имя_источника_данных>State (тип - Datasources.DataSourceMonitoringState)
Имя источника данных можно увидеть в дереве проекта (по умолчанию для первого источника данных это имя - Datasource).
2021-10-01_8-49-33.png
Перечисления для этих переменных объявлены в библиотеке Datasources, которая автоматически добавляется в проект вместе с менеджером источников данных:
2021-10-01_8-55-53.png
Вопрос: Как в коде контролировать наличие связи при использовании сетевых переменных?
Ответ: это можно сделать с помощью глобальных переменных диагностики, которые автоматически генерируются в списке сетевых переменных.
Для диагностики на стороне отправителя:
необходимо в свойствах списка сетевых переменных на вкладке Свойства сети установить галочку Подтверждение для ожидания подтверждений от получателя.
2021-10-01_9-21-43.png
В случае обрыва связи в структуре NetVarTxDiag_UDP поле sLastError примет значение NetVarUDPError_NOACKNOWLEDGEMENT, а поле nErrorCount будет постоянно увеличиваться.
2021-10-01_9-14-37.png
Для диагностики на стороне получателя:
В случае обрыва связи в структуре NetVarRxDiag_UDP значение полей nReceiveCount и tLastReceive "застынут" и перестанут изменяться.
2021-10-01_9-17-44.png