Вопрос: контроллер настроен в режиме Modbus TCP Master. Необходимо реализовать опрос устройств на шине RS-485, подключенных к контроллеру через конвертер протоколов МКОН. Для каждого slave-устройства в проект добавлен компонент Modbus TCP Slave. Во всех компонентах указан и один и тот же IP-адрес и порт, и разные Unit ID, соответствующие адресам слэйвов на шине RS-485. Проблема в том, что в CODESYS каждый компонент Modbus TCP Slave создает отдельное подключение, а МКОН поддерживает только два одновременных подключения, то есть опросить больше двух слэйвов таким образом невозможно. Как можно решить эту проблему?
28-08-2020 11-13-04.png
Ответ: при работе с преобразователями протоколов Modbus TCP/Modbus RTU необходимо добавлять в проект только один компонент Modbus TCP Slave, а уже в него - нужное количество компонентов Modbus Slave COM Port. В этом случае контроллер установит с конвертером протоколов только одно соединение.
28-08-2020 11-08-11.png
См. видеопример.
Обратите внимание: в текущих версиях CODESYS присутствует баг, из-за которого при возникновении любой ошибки обмена с устройством Modbus Slave COM Port, добавленным в компонент Modbus TCP Slave, его опрос больше не производится.
Для решения проблемы необходимо реализовать сброс ошибок в коде:
Код:
PROGRAM PLC_PRG
VAR
fbConfirmError: R_TRIG;
fbConfirmError1: R_TRIG;
fbConfirmError2: R_TRIG;
END_VAR
// Modbus_Slave_COM_Port, Modbus_Slave_COM_Port_1, Modbus_Slave_COM_Port_2 - имена компонентов из дерева проекта (см. скриншот выше)
fbConfirmError(CLK := Modbus_Slave_COM_Port.xError, Q => Modbus_Slave_COM_Port.xConfirmError);
fbConfirmError1(CLK := Modbus_Slave_COM_Port_1.xError, Q => Modbus_Slave_COM_Port_1.xConfirmError);
fbConfirmError2(CLK := Modbus_Slave_COM_Port_2.xError, Q => Modbus_Slave_COM_Port_2.xConfirmError);
Ошибка исправлена в CODESYS V3.5 SP17.
2021-09-02_15-07-04.png