Добрый день!
Прошу проконсультировать по следующей задаче:
Имеется ПЛК (будем его называть Мастер ПЛК), использующий в качестве REMOTE I/O – Wago 750-315 (документацию другую сопутствующую информацию по вопросу можно скачать по ссылке - https://disk.yandex.ru/d/vOF5Md6hXIZyCw ). Мы хотели заменить удаленный модуль Wago 750-315 на какой-нибудь ПЛК, чтобы впоследствии написать на этом ПЛК программу и имитировать работу системы. При этом программу Мастер ПЛК менять нельзя. Он должна работать именно, так как работает с – Wago 750-315.
Wago 750-315 использует первые 256 регистров для приема передачи технологической информации. Кроме того, еще 9 регистров начиная с 4096 используются для диагностики исправности сети Modbus. Ниже приведен фрагмент лога телеграмм, посылаемых мастером на компьютер. Логи сняты программой MbSlave.
Стандартными средствами Codesys выделить нужное количество регистров не получиться ни для ПЛК210 (максимум – 4096 регистров), ни для ПЛК110 (максимум – 500 регистров). Поэтому я пытался использовать библиотеки:
ПЛК110 – OwenModbusSlave_v2.3.9.4
ПЛК210 – OwenCommunication_3.5.11.7
Изначально я пытался настроить связь с ПЛК210, но не смог добиться получения данных от Мастера на ПЛК210. Хотя с другими контроллерами (СПК107, Modicon TM221), которые у нас имеются в наличии, связь установить удалось. И у меня получилось записать и считать нужные регистры во всем диапазоне от 0 до 4104.
Тогда я предположил, что проблема с задержками. Точнее с задержкой ответа устройства Slave. Я заметил, что в функциональном блоке MB_RTU_SLAVE библиотеки OwenModbusSlave_v2.3.9.4 существует возможность регулировки параметра timResponseDelay. Так вот если я устанавливаю это значение ниже 10 мс обмен данными работает. Если 100 мс, то обмена нет (интервал между 10 и 100 мс не испытывал).
Но теперь я столкнулся с другой проблемой. Если я правильно понимаю, то у Wago 750-315 выделены отдельные области памяти для функций 03 и 16. Но при этом к этим областям можно обратиться по одному и тому же адресу регистра. То есть в зависимости от функции 03 или 16 выбирается нужная область памяти.
А в ПЛК110 при использовании библиотеки я имею одну структуру, в которой я должен выделить переменные для записи и отдельные переменные для чтения. Но мастер контроллер мне отправляет, например, запрос записать в 16 регистров начиная с 0 такие-то значения. А следующая телеграмма будет считать 64 регистра, начиная с 0. И в моей структуре 16 первых регистров это одни и те же ячейки памяти.
Исходя из вышеуказанного возникло несколько вопросов:
1) Существует ли возможность использования двух разных структур для функционального блока MB_RTU_SLAVE? Может как-то можно переключать две структуры в зависимости от типа команды Modbus?
2) Можно ли в функциональном блоке MB_SerialSlave библиотеки OwenCommunication каким-нибудь образом изменять параметр timResponseDelay?
3) Можно ли задействовать поле eFuncCode структуры stRequestInfo функционального блока MB_SerialSlave библиотеки OwenCommunication для переключения массивов для чтения и записи информации? То есть создаем два массива (один для чтения, другой для записи) и переключаем pData и szSize функционального блока MB_SerialSlave. Ниже приведена предполагаемая примерная конструкция:
![]()


Ответить с цитированием
