Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367
отправлено / posted
Добрый день! В моей задаче необходимо запустить МРВ в качестве Modbus TCP сервера, посмотрел видео и собрал демонстрационный проект. В качестве клиента планирую использовать стороннее ПО. Как понял из документации, ID канала это и есть номер регистра Modbus. Адресация Holding Register начинается с 40001 адреса, ID канала в этом случае должен быть 1 или 40001? Сторонний клиент подключается к МРВ Modbus TCP серверу, но при запросе данных функцией 03 возвращает ошибку. Проект можно скачать по ссылке. Подскажите пожалуйста, что в проекте выполнено не верно.
[ 17.03.2020, 11:52: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Сообщения / Posts 5 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
См. справку: Обмен с контроллерами и УСО - Обмен по встроенным протоколам - МРВ как сервер протоколов поверх TCP/IP: Oбмeн в peжимe ModBus TCP/IP Slave нe paбoтaeт для нулeвыx узлoв пpoekтa. Hулeвoй узeл – узeл, coздaнный caмым пepвым в cлoe Система и имeющий индekc 0. В Вашем проекте есть только один узел - нулевой. (имя скомпилированного проекта заканчивается на *_0.dbb)
Сообщения / Posts 17316 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367
отправлено / posted
Не учел смещение в адресации регистров, после этого все заработало. И я думал достаточно будет изменить индивидуальный номер узла в проекте, без удаления узла в проекте. Спасибо за поддержку.
Но остался вопрос с адресацией... Представим, я задал 3 канала класса HEX32, с идентификаторами 7001, 7002, 7003. Клиент в запросе говорит, дай мне 6 регистров с начальным адресом 70001.(функция 03) В результате получаю значения: регистры Modbus 7001 и 7002 - канал 7001 регистры Modbus 7003 и 7004 - канал 7002 регистры Modbus 7005 и 7007 - канал 7003 В другом запросе клиент говорит, дай мне два регистра с начальным адресом 7003.(функция 03) В результате получаю значения: регистры Modbus 7003 и 7004 -канал 7003
Как сделать так, чтобы при разных запросах клиента в регистрах 7003 и 7004 были значения канала 7002?
Сообщения / Posts 5 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367
отправлено / posted
quote:Отправитель / Originally posted by Nico: каждый канал TM всегда 2 регистра
Это я уже заметил, когда использовал HEX16. HEX16 занимает 2 регистра, хотя используется только 2 байта.
По условии задачи клиент может обратиться к любому регистру в допустимой области памяти и запросить от 1 до 100 регистров в соответствии с протоколом Modbus.
Вопрос заключается в том, что клиент получает разные данные по одному и тому же регистру, если в запросах отличается начальный регистр. Предполагаю, связано это с тем что TM интерпретирует запрос начального регистра с ID канала и начинает отсчет каналов относительно него, выделяя под каждый ID канала 4 байта (2 регистра). Вопрос в том как этого избежать? Как сделать так, чтобы при разных запросах клиента, данные по одному и тому же регистру были одинаковыми?
Сообщения / Posts 5 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342
отправлено / posted
-задавать другие начальные адреса для разных запросов -проще и быстрее считать необходимые данные несколькими групповыми запросами
Сообщения / Posts 873 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367
отправлено / posted
quote:Отправитель / Originally posted by Nico: -задавать другие начальные адреса для разных запросов -проще и быстрее считать необходимые данные несколькими групповыми запросами
Клиент, это стороннее ПО. Он может считывать данные с регистров одним запросом, или может сделать это за несколько, заранее неизвестных количествах запросах.
Вопрос в том, можно для этих задач использовать Trace Mode в качестве Modbus TCP сервера или нельзя? Если это возможно, жду предложения конкретного решения. Если этого сделать нельзя, вопрос закрыт.
Сообщения / Posts 5 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Вы к вопросу подходите не с той стороны. Trace Mode как сервер ModBus TCP предоставляет "карту сигналов" (id канала - начальный адрес регистра). Далее все работает строго по протоколу ModBus.
Ваш сторонний клиент может запросить одиночный канал. Может запросить групповым образом несколько каналов.
Запрашивать один и тот же регистр неизвестным количеством запросов - странное решение. Запросы должны быть точно определены и оптимизированы.