Замена модуля удаленных входов/выходов WAGO750-315 на контроллер ПЛК210
Добрый день!
Прошу проконсультировать по следующей задаче:
Имеется ПЛК (будем его называть Мастер ПЛК), использующий в качестве 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.
https://disk.yandex.ru/i/NQnu44gU-HUfkg
Стандартными средствами 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 выбирается нужная область памяти.
https://disk.yandex.ru/i/_K3GtLeOb4wPog
А в ПЛК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. Ниже приведена предполагаемая примерная конструкция:
https://disk.yandex.ru/i/2r48pUmR4hrYFQ