Qt Modbus med TCP/IP-tilkobling

I denne bloggen vil jeg gjerne gi en liten Qt Quick-applikasjon (qml) som et eksempel på en Modbus-tilkobling over TCP / IP.
I Qt-eksemplene har jeg bare funnet QWidget-eksempler for Modbus-tilkoblinger, og etter nylig å ha opprettet en Qt Quick-applikasjon for dette, vil jeg gjerne gi en slanket versjon av den som et eksempel.

Lab

For å kunne teste applikasjonen trenger du en Modbus-server eller et program som "simulerer" en slik server. Jeg brukte "Modbus Server Pro" fra http://www.apphugs.com/modbus-server.html til dette. Dette lar deg løpe gjennom alle scenariene du trenger.

Qt-applikasjon

Først av alt: Siden det ville gå for langt å legge inn all koden her, vil jeg gi hele koden som en ZIP-fil (se nedenfor).

Innstillinger

Først opprettet jeg en enkel SettingsDialog-klasse som inneholder tilkoblingsalternativene. I det forenklede eksemplet er dette bare "modbusServerUrl", "responseTime" og "numberOfRetries".

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

Betegnelsene er - tror jeg - selvforklarende.

  • modbusServerUrl = TCP/IP-nummeret pluss Modbus-serverport, f.eks. 192.168.2.86:502
  • responseTime = den maksimale tiden i ms der et svar fra serveren ventes på
  • numberOfRetries = antall mislykkede forsøk som vil bli akseptert.

Søknad

onConnectButtonClicked()

onConnectButtonClicked()-funksjonen leser tilkoblingsdataene fra innstillingsfilen og oppretter forbindelsen til Modbus-serveren.

onReadButtonClicked()

Med onReadButtonClicked() startes forskjellige readRequests, og de tilsvarende registrene leses fra Modbus-serveren. De returnerte verdiene sendes videre til qml som Q_PROPERTY via utsendingssignaler og oppdateres i brukergrensesnittet.

Write-funksjonen

Funksjonen onWriteButtonClicked(int writeregister) brukes til å skrive til Modbus-serverregistrene. Her ser man for seg at ulike registre kan skrives på Modbus-serveren via variabelen "skriveregister".

Du kan laste ned applikasjonen her ix-modbus-tcp-eksempel.zip.