Qt Modbus med TCP/IP-forbindelse

I denne blog vil jeg gerne give en lille Qt Quick-applikation (qml) som et eksempel på en Modbus-forbindelse over TCP / IP.
I Qt-eksemplerne har jeg kun fundet QWidget-eksempler på Modbus-forbindelser, og efter for nylig at have oprettet en Qt Quick-applikation til dette, vil jeg gerne give en slanket version af det som et eksempel.

Lab

For at kunne teste applikationen har du brug for en Modbus-server eller et program, der "simulerer" en sådan server. Jeg brugte "Modbus Server Pro" fra http://www.apphugs.com/modbus-server.html til dette. Dette giver dig mulighed for at løbe gennem alle de scenarier, du har brug for.

Qt ansøgning

Først og fremmest: Da det ville gå for langt at sende al koden her, vil jeg give hele koden som en ZIP-fil (se nedenfor).

Indstillinger

Først oprettede jeg en simpel SettingsDialog-klasse, der indeholder forbindelsesindstillingerne. I det forenklede eksempel er dette kun "modbusServerUrl", "responseTime" og "numberOfRetries".

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

Betegnelserne er - tror jeg - selvforklarende.

  • modbusServerUrl = TCP/IP-nummeret plus Modbus-serverport, f.eks. 192.168.2.86:502
  • responseTime = den maksimale tid i ms, hvor et svar fra serveren ventes på
  • numberOfRetries = antallet af mislykkede forsøg, der accepteres.

Ansøgning

onConnectButtonClicked()

Funktionen onConnectButtonClicked() læser forbindelsesdataene fra indstillingsfilen og opretter forbindelsen til Modbus-serveren.

onReadButtonClicked()

Med onReadButtonClicked() startes derefter forskellige readRequests, og de tilsvarende registre læses fra Modbus-serveren. De returnerede værdier sendes videre til qml som Q_PROPERTY via udsendte signaler og opdateres i brugergrænsefladen.

Skriv funktion

Funktionen onWriteButtonClicked(int writeregister) bruges til at skrive til Modbus' serverregistre. Her er det meningen, at forskellige registre kan skrives på Modbus-serveren via variablen "writeregister".

Du kan downloade applikationen her ix-modbus-tcp-eksempel.zip .