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.