Концепция ведомых в Modbus TCP несколько отличается от RTP, как указано в Modbus TCP Spe c:
Обычно используется поле «Адрес ведомого» в MODBUS в MODBUS последовательная линия заменяется однобайтовым «Идентификатором устройства» в заголовке MBAP. «Идентификатор устройства» используется для связи через такие устройства, как мосты, маршрутизаторы и шлюзы, которые используют один IP-адрес для поддержки нескольких независимых оконечных устройств MODBUS.
Таким образом, существует разница в терминологии между Modbus RTP и TCP, а также разница в предполагаемом использовании этого поля. Решение, предложенное spe c, заключается в настройке нескольких серверов на разных портах (вы не можете запустить несколько серверов на одном порту).
Сказав, что некоторые шлюзы TCP-> RTP (и другие устройства) использовать unitid в качестве идентификатора ведомого, поэтому я предполагаю, что вы пытаетесь смоделировать что-то вроде этого?
Первая проблема заключается в том, что, похоже, есть ошибка в Modbus Flex Server
( сообщил ) в том, что когда вы меняете идентификатор устройства, он сохраняется как строка, а не как число. Если вы экспортируете поток, вы увидите что-то вроде "unitId": "3",
; изменение этого значения на "unitId": 3,
(без кавычек вокруг 3) и импорт исправляет проблему (так что, вероятно, это объясняет, почему вы не можете заставить это работать).
Сказав, что изменение unit-id
, как это, не помочь вам, потому что он поддерживает только один идентификатор. Однако, если вы установите unit-id
на 255, он будет прослушивать все идентификаторы устройств (это функция модуля modbus-serial , используемого внутри). Помните, что в настоящее время вам нужно будет вручную исправить конфигурацию, чтобы заставить это работать из-за ошибки.
Сделав это, вы можете сделать что-то вроде следующего, чтобы ответить на запросы к различным идентификаторам устройств (пример вернет идентификатор устройства (1 или 2) для всех адресов, так что это не полезно, но показывает концепцию):