Добрый день! WB6. Установил MQTT to Modbus-TCP gateway. Отметил галкой нужный для чтения/записи Coil, сохранил…
Подключаюсь “любым” клиентом Modbus TCP (в моем случае удобен EasyModbus Client).
Пытаюсь прочитать Coil по адресу, указанному в поле Start address напротив отмеченной галкой очереди (в моем случае это 59854), поля в приложении заполняю следующим образом:
register - coils
starting address - 59854
number of values - 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 для проверки:
Спасибо! Все было так просто Но, думаю, лишним на форуме вопрос не будет - нигде в документации или форуме не нашел пояснения о том, что WB выступает в роли шлюза и адресоваться нужно к соответствующим Unit ID.
Сперва поменял Unit ID в /etc/wb-mqtt-mbgate.conf на 1 - взлетело с прежней программой. Затем взял рекомендованную Вами программу, вернул на место Unit ID и обратился по его номеру - тоже заработало.