Вход

Просмотр полной версии : Связь с Modbus-Slave, но этот Modbus-Slave он сам контроллер



aaaSashaMGGU
01.11.2025, 21:59
Добрый день!
Заранее прошу прощения, если всё это уже есть где-то в FAQ-ах

Есть контроллер Delta DVP. Он сам себе Modbus-хранилище данных
К нему подключено панель Weintek
Вот я объявляю в Weintek float32-переменную, говорю, что она сидит на регистрах D125-D126
Вывожу переменную на мнемосхему. Теперь она читается с контроллера двумя регистрами и корректно отображается как float32. Если переменная изменяется изнутри на стороне контроллера - её значение обновляется на мнемосхеме. Т.е., чтение регистров D от Delta происходит ПОСТОЯННО
Теперь я могу тыкнуть на неё прямо на мнемосхеме - и изменить ей значение. После этого Weintek отправит ОДИН запрос на контроллер для изменения значения.

Теперь хотим вместо Weintek-а использовать ОВЕН. Так как быть?
Можно создать канал для чтения этих двух регистров, результат двух WORD-ов преобразовать в Real, вывести всё это на мнемосхему.
А как записывать? Создавать отдельный канал на запись двух регистров и писать их по биту, который выставлять при изменении значения с экрана?
А если таких переменных сотня? Сто каналов? Сто разных битов?
Как сделать красиво? Может, через структуры?

P.S. В данном примере вместо Delta может выступать, например, другой контроллер ОВЕН, или даже ещё один другой Weintek, без разницы. Лишь бы было Modbus-пространство, где можно читать и писать по одним и тем же Modbus-адресам
Спасибо за подсказки

Cs-Cs
01.11.2025, 23:21
А если таких переменных сотня? Сто каналов? Сто разных битов?
Как сделать красиво? Может, через структуры?
Я бы тогда взял бы библиотеку OCL и создал бы свой FB, который отслеживал бы изменения и решал - надо ли записать или нет.
И закрутил это реально в массив FB в цикл. Ща, под ночь плохо поясняю, буду писать криво.

1. Массив FB - чтобы окучивать их в цикле последовательно и, если FB нам говорит, что значение изменилось - то тогда его и писать в OCL.
Пусть бы FB имел внутри Текущее и Предыдущее значения. Если они не равны - выдавал некий флаг.
И на входе у него тоже был бы флаг типа Reset, который скидывал бы выходной флаг.
Смысл в том, что Modbus - медленная хреновина. И если все FB сразу обновятся - он этого не отловит.
Поэтому FB, как обновился, ставит какой-то флаг.
А наш цикл идёт по каждому FB и выдаёт его в OCL для записи в Modbus и только потом этот флаг скидывает.

2. Чтобы в коде красиво обращаться к массиву FB - забахать для его индексов константы. Чтобы было типа arrValues[PRESSURE_AIR_OUTDOOR].Value, а не arrValues[322].Value

FPavel
01.11.2025, 23:31
А кастомизация Codesys 3.5 для Овен разве не имеет сетевых переменных, которые и в обмене с вышестоящей системой (например, панелью) участвуют и в алгоритме? Такие переменные есть у Owen Logic и у Codesys 2.3.
Просто работаю с кастомизацией CDS 3.5 для другого производителя - имеется такая сущность "сетевые переменные". Хотя, возможно переменными обмениваться и по отдельности и групповыми запросами с дальнейшей постобработкой полученного массива.

FPavel
01.11.2025, 23:49
Затрудняюсь с организацией Modbus в CDS 3.5 для Овен ПЛК2хх, скажу за панели Weintek - они позволяют в простейшем случае описать все переменные и обмениваться с ПЛК в описанном Вами режиме - непрерывное чтение и запись по изменению в поле ввода. Для описания в Weintek я бы воспользовался экспортом переменных из ПЛК (настоящим или импровизированным), скриптом для преобразования файла в формат импорта в Weintek и, собственно, импортом переменных.

А в более сложном случае, можно организовать чтение и запись по нужным адресам при помощи скриптов. Единственное ограничение - память для группового чтения сильно ограничена, т.е. невозможно одним скриптом считать 100+ переменных и обработать их.
Мне даже попадались скрипты с настройкой адресов Modbus, которые вызывались при нажатии на элементы мнемосхем - кнопки, поля ввода и прочее.

melky
02.11.2025, 07:40
Вообще не ясен вопрос. Есть ПРОТОКОЛ. какая разница, какая панель или ПЛК? Если производителем заявлена работа с этим протоколом, смотрите документацию на панель или ПЛК по настройке.

Если вам производитель пишет, что для сборки float, вы должны лечить зубы через ж... Там возникает другой вопрос. Об адекватности производителя. Или импортозамещение так прижало, что вы к проктологу зубы пошли лечить?