PDA

Просмотр полной версии : Как достучаться до Master в Slave



sea
30.09.2014, 20:45
Конфигурация ПЛК150-У-М:

14562

Пытаюсь по TCP/IP считать данные с ПЛК, который по Ethernet является Slave. ПЛК через RS485 опрашивает успешно (на скрине ошибки при отключении устройств показаны) МДВВ и СП270.
Пытаюсь по Ethernet прочитать данные по МДВВ и СП270. Все по нулям.
Программой Modbus Poll (SCADA-системой тоже) считываются значения только 7 регистров:

14564

При считывании 8 и более регистров имеем:

14565

Первые три - понятно, что последний адрес и ошибка в модуле Modbas (Master). Остальные считываемые 4 - ?
По моим расчетам (с учетом распределения памяти) получаем 10 регистров в Slave (на скрине пронумерованы).
Чтение производил и по 03, и по 04 функциям и отдельно по регистрам, и групповым запросом. Результат один.
Соединение с CoDeSys по RS232.

Как для представленной конфигурации определить адреса Modbus? Что сделано не так?

приборист
30.09.2014, 21:08
Либо я что-то не понимаю, либо что это за Мастер у вас в модуле Slave?
Создайте обычный Modbus (Master) и там опрашивайте МДВВ и СП
И создайте Modbus (Slave) - в нем опрашивайте ПЛК с чего-то.
В этот же слейв копируйте данные полученные при опросе МДВВ и СП.

lara197a
30.09.2014, 21:24
Вам нужно использовать промежуточные переменные.
Получаете данные мастером от СП И МВ, копируете их в промежуточные переменные.
Данные из них копируете в переменные слейва, который и опрашиваете по ТСР др. мастером.

sea
30.09.2014, 21:42
Мы не ищем легких путей :)

Хотел именно такой подход протестировать. Вроде как позволяет память сократить.
Здесь 14568 на стр. 48 (п. 3.1.3.2). Хотелось бы знать данная функциональность поддерживается или нет? Может кто-то уже использовал или пробовал?

petera
01.10.2014, 00:53
Конфигурация ПЛК150-У-М:

14562

Пытаюсь по TCP/IP считать данные с ПЛК, который по Ethernet является Slave. ПЛК через RS485 опрашивает успешно (на скрине ошибки при отключении устройств показаны) МДВВ и СП270.
Пытаюсь по Ethernet прочитать данные по МДВВ и СП270. Все по нулям.
Программой Modbus Poll (SCADA-системой тоже) считываются значения только 7 регистров:

14564

При считывании 8 и более регистров имеем:

14565

Первые три - понятно, что последний адрес и ошибка в модуле Modbas (Master). Остальные считываемые 4 - ?
По моим расчетам (с учетом распределения памяти) получаем 10 регистров в Slave (на скрине пронумерованы).
Чтение производил и по 03, и по 04 функциям и отдельно по регистрам, и групповым запросом. Результат один.
Соединение с CoDeSys по RS232.

Как для представленной конфигурации определить адреса Modbus? Что сделано не так?
Может так?
14570

sea
01.10.2014, 07:47
Может так?
14570

Так у Вас всего 8 регистров (0-7). А считываются 7 (0-6). Кое-что уже стало проясняться в ходе экспериментов, но вопросы остались...

sea
02.10.2014, 17:21
Результаты экспериментов.
Для данной конфигурации получаем следующий порядок регистров Modbus:

14592

Как видно регистр 3 отсутствует, хотя доступен на чтение. Будем считать, что он зарезервирован для протокола OWEN (в нем 4 регистра параметров модуля).
Последний регистр REG_6 в данной конфигурации не доступен для чтения, а для записи существует. Данное обстоятельство исправляется добавлением в Modbus (slave) дополнительного регистра REG_7.

14593

Однако, в любом случае регистры типа input в Modbus (Master) для Modbus (slave) вообще не существуют для записи/чтения. Хотелось бы полной прозрачности Master. Был бы разумен для данных регистров доступ на считывание.

lara197a
02.10.2014, 19:27
в инструкции по программированию есть описание выравнивания адресного пространства.
прочтите все сразу станет понятно.
нет там ни какого резервирования. это вы так криво обмен организовали, без учета выравнивания адресного пространства.

sea
02.10.2014, 21:49
в инструкции по программированию есть описание выравнивания адресного пространства.
прочтите все сразу станет понятно.
нет там ни какого резервирования. это вы так криво обмен организовали, без учета выравнивания адресного пространства.

Вы сами пробовали такой "механизм" реализации связи?!
Есть опыт, сообщите как правильно определить расчет номера регистра.
Про выравнивание адресов мне известно, с этим учетом и производил определение адреса.
Для последнего скрина прономеруйте сами все регистры (много времени это не займет). И поясните, какой номер регистра будет у Register input module. При этом внимательно рассмотрите картинку справа, где указаны адреса регистров и их значения. Обмен реализован просто - подряд считываются несколько регистров (указан начальный адрес и кол-ко регистров).
Можно вводить адрес регистр 5,5?

amn
02.10.2014, 22:03
у Вас REG_4 занимает 1 байт. Логично было бы сразу после него поставить 8 бит для выравнивания. Может в этом причина?

sea
02.10.2014, 22:17
у Вас REG_4 занимает 1 байт. Логично было бы сразу после него поставить 8 бит для выравнивания. Может в этом причина?

Пробовал, результат тот же. Вариантов много перебрал, сейчас все уже точно не вспомнить. В этом случае видно было бы значение регистров со смещением байта, однако в регистре REG_5 значение 5.
Если, что можно попробовать, если у кого есть какие мысли.
А где REG_3?

sea
03.10.2014, 05:56
Вот с выравниванием:

14594

capzap
03.10.2014, 07:06
Вы сами пробовали такой "механизм" реализации связи?!
Есть опыт, сообщите как правильно определить расчет номера регистра.


Такая тема уже поднималась несколько лет назад, совет Вам был дан создать отдельные мастер и слейв,а в проге копировать из одного в другое,много памяти это не займет. А то что в конфигураторе имеется такая возможность,так тут такая же ситуация как с шаблонами,создать создали,но поддерживать не стали,поэтому глюки и непонятки не избежны, ищите легкие пути

lara197a
03.10.2014, 09:39
Я не обратил внимания, что у Вас мастер внутри слейва.
Как-то и в голову не приходила такая конструкция.
Создайте отдельно.
У меня при связи с несколькими слейвами и мастерами на др. портах, с десятками переменных, биты-байты-DW, работает много лет и без проблем.
Причем из конфигуратора.

sea
03.10.2014, 19:27
Тоже всегда разделение делал. Просто решил такой подход попробовать, а кроме упоминания в описании конфигурирования ПЛК больше информации не нашел. Теперь ясно, что данная возможность до конца не реализована

capzap
03.10.2014, 20:08
Тоже всегда разделение делал. Просто решил такой подход попробовать, а кроме упоминания в описании конфигурирования ПЛК больше информации не нашел. Теперь ясно, что данная возможность до конца не реализована

поиск на форуме достаточно быстро найдет ответы на поднятую тему, вот к примеру http://www.owen.ru/forum/showthread.php?t=10555&p=72391&viewfull=1#post72391
самое смешное мой ответы и там и здесь идентичны)))