Имитация нескольких ведомых устройств Modbus с использованием красного узла - PullRequest
0 голосов
/ 21 января 2020

Мне удалось смоделировать одно подчиненное устройство на моем Raspberry Pi, используя node-red, используя функции для отправки случайных значений данных на гибкий сервер Modbus. Однако теперь я хочу иметь возможность имитировать несколько ведомых устройств Modbus на номер порта, и я не уверен, как это сделать.

Я попытался создать еще один Flex-сервер Modbus с тем же номером порта, но это приводит к тому, что целое приложение, работающее на узле, создает sh при развертывании. Во-вторых, я пытался использовать разные узлы гибкой записи Modbus для имитации различных ведомых устройств, но я не уверен, правильно ли это, и если да, то как я могу настроить их так, чтобы они отображались как разные ведомые устройства. Это потому, что пока мой малиновый пи выглядит как раб 1, но я не уверен, откуда это взялось. Я предполагаю, что это связано с идентификатором модуля гибкого сервера Modbus, но когда я изменяю идентификатор устройства на другой номер и вводу этот номер в качестве адреса в мастере, он говорит, что нет соединения.

В заключение, возможно ли использовать один Raspberry Pi для имитации нескольких ведомых устройств на узле red с помощью node-red-contrib-modbus и если да, то как ты это делаешь?

1 Ответ

0 голосов
/ 22 января 2020

Концепция ведомых в 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) для всех адресов, так что это не полезно, но показывает концепцию):

enter image description here

...