robin333 Ответов: 2

Modbus TCP master отправка сообщений


Недавно использовал C++ для написания мастер-приложения modbus tcp.

но есть проблема, чтобы спросить: Если у меня есть уровень приложения A, B, C, D четыре (или более), используемые для запроса данных Modbus tcp slaver.
когда я вызываю send (), как контролировать интервал отправки сообщения, я теперь использую sleep (), но ощущение глупое! Если я установил sleep (100), то полученное мною D сообщение запроса данных будет составлять 300 мс, если сообщение больше, то это время будет больше, просто невозможно скрыть считанные данные в реальном времени.

Вот в этом вопросе и ответьте на tcp-связь, как управлять сообщением, чтобы посылать непрерывно?

Что я уже пробовал:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

2 Ответов

Рейтинг:
1

KarstenK

Не используйте сон. Отправьте данные в функцию и настройте функция обратного вызова таймера, который проверяет результат.


Рейтинг:
1

Rick York

Существует множество способов управления обменом данными с ПЛК и другими интеллектуальными устройствами. Когда это возможно, мне нравится настраивать их в виде непрерывных циклов опроса / ответа. Точный механизм будет зависеть от того, нужна ли вам синхронная связь или вы можете избежать асинхронности. По моему опыту работы с Modbus TCP / IP, это очень быстрый протокол, поэтому у меня может быть период опроса / ответа около 20 мс, и его можно уменьшить с помощью короткого сна. Я всегда делал это регулируемым параметром, и обычно он был установлен на 10 мс. Я реализовал это так, что создал отдельный поток, который будет только читать и записывать блоки данных. Блоки данных представляли собой структуры данных, содержащие буфер, начальный адрес и размер. Коммуникационный поток записывает свой блок отправки, засыпает несколько миллисекунд, читает свой блок приема, еще немного засыпает и затем повторяет это. Иногда обмен данными осуществлялся отдельным процессом, блоки данных которого находились в общей памяти, чтобы несколько клиентских процессов могли получить доступ к данным. В любом случае реализовать это довольно просто.