Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » Работа с приложениями (ODBC-SQL/OPC/DDE) » МРВ в качестве Modbus TCP сервера

   
Автор / Author Тема / Topic: МРВ в качестве Modbus TCP сервера
Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367


Icon 1 отправлено / posted      Профиль для / Profile for Voldemar2201           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день!
В моей задаче необходимо запустить МРВ в качестве 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 | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
См. справку: Обмен с контроллерами и УСО - Обмен по встроенным протоколам - МРВ как сервер протоколов поверх 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 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Согласно протоколу ModBus, адресация регистров в интервале от 0x0000 до 0xFFFF.

Например, первый AO Holding Register, имеет номер 40001, но его адрес равен 0x0000
(https://ipc2u.ru/articles/prostye-resheniya/modbus-rtu/#write_some_discr_out)

В Trace Mode при использовании МРВ как ModBus TCP сервера адресация начинается с ID 1.

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367


Icon 1 отправлено / posted      Профиль для / Profile for Voldemar2201           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Не учел смещение в адресации регистров, после этого все заработало. И я думал достаточно будет изменить индивидуальный номер узла в проекте, без удаления узла в проекте.
Спасибо за поддержку.

Но остался вопрос с адресацией...
Представим, я задал 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 | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
каждый канал TM всегда 2 регистра
Сообщения / Posts 695 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367


Icon 1 отправлено / posted      Профиль для / Profile for Voldemar2201           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
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 | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
-задавать другие начальные адреса для разных запросов
-проще и быстрее считать необходимые данные несколькими групповыми запросами

Сообщения / Posts 695 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Voldemar2201
Junior Member / Новичок
Участник № / Member № 4367


Icon 1 отправлено / posted      Профиль для / Profile for Voldemar2201           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by Nico:
-задавать другие начальные адреса для разных запросов
-проще и быстрее считать необходимые данные несколькими групповыми запросами

Клиент, это стороннее ПО. Он может считывать данные с регистров одним запросом, или может сделать это за несколько, заранее неизвестных количествах запросах.

Вопрос в том, можно для этих задач использовать Trace Mode в качестве Modbus TCP сервера или нельзя? Если это возможно, жду предложения конкретного решения. Если этого сделать нельзя, вопрос закрыт.

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вы к вопросу подходите не с той стороны.
Trace Mode как сервер ModBus TCP предоставляет "карту сигналов" (id канала - начальный адрес регистра).
Далее все работает строго по протоколу ModBus.

Ваш сторонний клиент может запросить одиночный канал. Может запросить групповым образом несколько каналов.

Запрашивать один и тот же регистр неизвестным количеством запросов - странное решение. Запросы должны быть точно определены и оптимизированы.

Видеоурок+пример
http://www.adastra.ru/products/overview/openness/

Сообщения / Posts 16045 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2