С удивлением и сожалением не обнаружил поддержки Modbus TCP в выложенных библиотеках. Может быть есть какие нибудь сырые образцы, или хотя бы библиотека работы с ethernet портом?.. Или я не там ищу?
UPD:
Может быть есть возможность произвести импорт библиотеки из CoDeSys v2?
Последний раз редактировалось Солнечный заяц; 07.07.2011 в 14:02.
2capzap
Это стандартная библиотека Codesysv3 или одна из ее версий.
2Евгений Сергеевич
Пробую разобраться с Modbus TCP Slave. Настроил на ПЛК110 Modbus TCP Master. Параметр Losterror==0, значит запись и чтение производится нормально, но видать не в те регистры. В справке к Codesysv3 написано про Modbus TCP Slave: ID входных параметров начинаются с 1000 (таким образом, второй входной параметр “I1” будет иметь ID 1001), ID выходных параметров начинаются с 2000
Делаю все как написано, но результата нет.
На сколько я понял Unit ID в Codesysv3 соответствует ModuleSlaveAddress в Codesysv2
На всякий случай прикладываю проекты.
П.С.
Про Modbus TCP Master в Codesysv3 я вообще молчу. Даже в справке про него ничего не нашел...
2Евгений Сергеевич
1.Спасибо за пример. Очень помогло с Modbus TCP Master в Codesysv3.
Хотелось бы отметить что чтение регистров не происходит, если они не используются в тексте программы. Уверен что не все пользователи это знают.
2.Столкнулся еще с одной неприятной особенностью: при обрыве соединения (передергивание интерфейсного кабеля, обновление программы на ведомом контроллере) и его последующем восстановлении обмен не возобновляется. Выдается ошибка (см. вложение) и перезапустить обмен можно только сделав Online -> Reset Warm. Может есть какие нибудь программные способы перезапуска обмена, или особые настройки?
3.Удалось разобраться с адресацией в Modbus TCP Slave в Codesysv3: входные регистры начинаются с нуля. А вот с адресацией выходных разобраться не удалось. Пробовал использовать адреса: последний_входной+1, 10х1000, 10х2000, 0х1000, 0х2000.
Еще одна неприятная ситуация:
При настройке СПК207 как мастера сети и создания визуализации происходит прекращение обмена после нескольких секунд работы. Долго разбирался в чем дело - нашел: Увеличил время цикла СПК207 до 100мс.
Как восстанавливать обмен после обрыва соединения так и не придумал. Нет ли возможности производить программную перезагрузку CoDeSys, без перезагрузки СПК207 (для сокращения времени перезагрузки и самостоятельного восстановления канала связи).
Последний раз редактировалось Солнечный заяц; 18.07.2011 в 09:34.
1) в приложение пример (использованы ПЛК 304 и Win v3)
2) (режим slave)адреса регистров входов и выходов одинаковые но относятся к разным областям памяти:
есть переменная на запись "А" с адресом 0
есть переменная на чтение "В" также с адресом 0
функция чтения 03 обратится к переменной А
функция чтения 04 обратится к переменной В
3) Так же в примере есть блок возобновления связи (в программе для Win v3)
2Евгений Сергеевич
Что-то у меня не выходит. Возможно из-за того что я объявил Modbus_TCP_Master_Instance и Modbus_TCP_Slave_Instance как глобальные переменные каталога Application. Кажется Вы объявили их как-то по-другому. Но я не понял как.