Несколько клиентов Modbus на один сервер Modbus

У меня есть два скрипта Python, которым нужно получать данные с одного и того же сервера Modbus.

Однако они не могут быть одновременно подключены к одному и тому же серверу Modbus, поэтому я ищу программное обеспечение «прокси».

Затем этот прокси будет последовательно передавать запросы Modbus на сервер Modbus. Решение должно работать на Debian 11 lite. Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Предполагая, что вы имеете дело с Modbus TCP, вы можете попробовать modbus-proxy:

Многие устройства Modbus поддерживают только одного или очень мало клиентов. Этот прокси действует как мост между клиентом и устройством Modbus. Может быть рассматривается как обратный прокси-сервер уровня 7. Это позволяет нескольким клиентам обмениваться данными с одним и тем же устройством Modbus.

Когда подключено несколько клиентов, перекрестные сообщения избегаются за счет сериализация связи в порядке очереди REQ/REP.

Обновлено: Согласно вашему комментарию ниже:

... это RTU через файловый дескриптор linux /dev/ttyS1

Мне кажется, это не очень прямолинейный способ сказать, что вы имеете дело с последовательной связью.

Если это так, боюсь, вам нужно вернуться на физический уровень.

Если у вас есть последовательное соединение «точка-точка» (независимо от уровней напряжения, они могут быть TTL 3,3 В постоянного тока или RS-232), вы не сможете подключить более одного клиента Modbus к одному и тому же серверу.

Для последовательной связи, чтобы иметь более двух устройств (например, два или несколько клиентов, отправляющих запросы на сервер Modbus), вам нужен способ, чтобы устройства могли контролировать шину, когда они обмениваются данными, и отпускать ее, когда они простаивают. . Многоточечная последовательная линия RS-485 является наиболее частым решением этой проблемы.

Если вы перейдете по ссылке, вы найдете много ресурсов и документации. Это может быть немного сложно, но на самом деле это очень просто: вместо подключения RX к TX, как для обычного последовательного порта, у вас будет два кабеля для каждого устройства (они называются A и B или D+ и D-). которые вы можете собрать. И вам нужно всего лишь добавить приемопередатчик TTL в RS-485 между каждым устройством и шиной (или RS-232 в RS-485, в зависимости от ваших устройств).

Есть пара нюансов:

Наиболее полным справочником по всем этим темам, которые я знаю, является книга Яна Аксельсона Serial Port Complete. Он немного устарел (последнее издание было выпущено в 2007 году), но все еще очень актуален. И вы можете найти старые издания подержанными почти бесплатно. Если вам нужно работать с последовательными портами, эта книга будет очень ценным помощником.

Последнее замечание: если вы не можете или не хотите возиться с физическим слоем, вы, конечно, можете найти другие решения, которые более приемлемы. Например, вы можете внедрить программу пересылки для приема запросов от ваших клиентов и преобразования их в Modbus RTU для отправки на ваш сервер. Pymodbus включает в себя пример, но, поскольку вы не особо разобрались, я не уверен, что он будет полезен в вашей ситуации.

спасибо, к сожалению, это RTU поверх файлового дескриптора linux /dev/ttyS1. Я попробовал инкапсулировать RTU в TCP, но это не сработало с программным обеспечением modbus-proxy.

clouvis 05.01.2023 15:33

Теперь это совершенно новый зверь, но посмотрите, поможет ли мой отредактированный ответ.

Marcos G. 06.01.2023 10:55

У меня были те же проблемы раньше, и я остановился на мостовом решении Modbus-MQTT, потому что у каждого протокола есть свои ограничения, Modbus предназначен для опроса ведущий-ведомый в природе, а MQTT хорош для нескольких клиентов/подписчиков.

Modbus + MQTT, такая комбинация просто хороша и может быть очень эффективной в современных приложениях IoT. Вы можете попробовать modpoll, который представляет собой инструмент Modbus на основе Python и может работать как мост Modbus-to-MQTT в вашем случае.

Другие вопросы по теме