Qt Modbus с TCP/IP соединением

В этом блоге я хотел бы привести небольшое приложение Qt Quick (qml) в качестве примера соединения Modbus через TCP/IP.
В примерах Qt я нашел только примеры QWidget для соединений Modbus, и после недавнего создания приложения Qt Quick для этого, я хотел бы предоставить его уменьшенную версию в качестве примера.

Лаборатория

Для того, чтобы иметь возможность протестировать приложение, нужен сервер Modbus или программа, которая «имитирует» такой сервер. Для этого я использовал «Modbus Server Pro» от http://www.apphugs.com/modbus-server.html . Это позволяет вам пробежаться по всем необходимым сценариям.

Приложение Qt

Прежде всего: поскольку было бы слишком далеко размещать здесь весь код, я предоставлю весь код в виде ZIP-файла (см. Ниже).

Настройки

Во-первых, я создал простой класс SettingsDialog, который содержит параметры подключения. В упрощенном примере это просто "modbusServerUrl", "responseTime" и "numberOfRetries".

    struct Settings {
        QString modbusServerUrl = "192.168.2.86:1502";
        int responseTime = 1000;
        int numberOfRetries = 3;
    };

Обозначения, я думаю, говорят сами за себя.

  • modbusServerUrl = номер TCP/IP плюс порт сервера Modbus, например, 192.168.2.86:502
  • responseTime = максимальное время в мс, в течение которого ожидается ответ от сервера
  • numberOfRetries = количество неудачных попыток, которые будут приняты.

Применение

onConnectButtonClicked()

Функция onConnectButtonClicked() считывает данные подключения из файла настроек и устанавливает соединение с сервером Modbus.

onReadButtonClicked()

С помощью onReadButtonClicked() инициируются различные запросы readRequests, а соответствующие регистры считываются с сервера Modbus. Возвращенные значения передаются в qml в виде Q_PROPERTY через излучаемые сигналы и обновляются в пользовательском интерфейсе.

Функция записи

Функция onWriteButtonClicked(int writeregister) используется для записи в регистры сервера Modbus. Здесь предусмотрено, что различные регистры могут быть записаны на сервере Modbus через переменную "writeregister".

Скачать приложение можно здесь ix-modbus-tcp-example.zip.