Не могу прочитать Modbus по TCP

Добрый день! WB6. Установил MQTT to Modbus-TCP gateway. Отметил галкой нужный для чтения/записи Coil, сохранил…

  1. Подключаюсь “любым” клиентом Modbus TCP (в моем случае удобен EasyModbus Client).
  2. Пытаюсь прочитать Coil по адресу, указанному в поле Start address напротив отмеченной галкой очереди (в моем случае это 59854), поля в приложении заполняю следующим образом:
  • register - coils
  • starting address - 59854
  • number of values - 1
  1. Получаю ошибку приложения “starting address invalid or starting address + quantity invalid”, я полагаю, это равносильно ошибке модбаса “Illegal Data Address”.

Значения, указанные в поле Start Address на странице MQTT to Modbus-TCP gateway configuration, это и есть адреса ячеек модбаса, или их нужно предварительно преобразовывать?

Должно ли заработать при описанной последовательности, либо я что-то упускаю? (читал про необходимость предварительно останавливать сервис modbus master, но это, как я понял, не касается опроса контроллера по modbus tcp).

Евгений, добрый день!

В вашей программе-примере, которая написана с использованием easymodbustcp, не предусмотрено указание Modbus Unit ID. В вызове библиотечных функций этот параметр игнорируется для Modbus TCP- устройств. В вашей программе он по умолчанию выбирается равным 1 и поменять его невозможно.

Такое поведение нормально, когда вы подключаетесь к одному физическому устройству с одним IP-адресом. В нашем случае контроллер представляет собой шлюз, и каждому физическому устройству присваивается свой виртуальный Modbus Unit ID, в вашем случае — 93

Чтобы работать с вашей программой, вам необходимо переопределить в настройках контроллера Modbus Unit ID для вашего coil с 93 в 1, а стартовый адрес в самой программе указать 59854 +1 = 59855. (Это тоже логика программы).

Мне кажется, это неудобная программа, не могу ее порекомендовать.

Для тестирования я взял программу modbuspoll, вот coil для проверки:


Проблем нет:

Например,

В командной строке контроллера прочесть нужный coil можно следующей командой.
modbus_client -mtcp 192.168.0.194 -a93 -t0x01 -r59854

1 лайк

Спасибо! Все было так просто :slight_smile: Но, думаю, лишним на форуме вопрос не будет - нигде в документации или форуме не нашел пояснения о том, что WB выступает в роли шлюза и адресоваться нужно к соответствующим Unit ID.
Сперва поменял Unit ID в /etc/wb-mqtt-mbgate.conf на 1 - взлетело с прежней программой. Затем взял рекомендованную Вами программу, вернул на место Unit ID и обратился по его номеру - тоже заработало.