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 .