В этом блоге я хотел бы привести небольшое приложение 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.