I den här bloggen vill jag ge en liten Qt Quick-applikation (qml) som ett exempel på en Modbus-anslutning över TCP / IP.
I Qt-exemplen har jag bara hittat QWidget-exempel för Modbus-anslutningar, och efter att nyligen ha skapat en Qt Quick-applikation för detta skulle jag vilja ge en nedbantad version av den som ett exempel.
Labb
För att kunna testa applikationen behöver du en Modbus-server eller ett program som "simulerar" en sådan server. Jag använde "Modbus Server Pro" från http://www.apphugs.com/modbus-server.html för detta. Detta gör att du kan gå igenom alla scenarier du behöver.
Qt-applikation
Först och främst: Eftersom det skulle gå för långt att lägga upp all kod här, kommer jag att tillhandahålla hela koden som en ZIP-fil (se nedan).
Inställningar
Först skapade jag en enkel SettingsDialog-klass som innehåller anslutningsalternativen. I det förenklade exemplet är detta bara "modbusServerUrl", "responseTime" och "numberOfRetries".
struct Settings {
QString modbusServerUrl = "192.168.2.86:1502";
int responseTime = 1000;
int numberOfRetries = 3;
};
Beteckningarna är - tror jag - självförklarande.
- modbusServerUrl = TCP/IP-numret plus Modbus-serverporten, t.ex. 192.168.2.86:502
- responseTime = den maximala tiden i ms som ett svar från servern väntar på
- numberOfRetries = antalet misslyckade försök som accepteras.
Ansökan
onConnectButtonClicked()
Funktionen onConnectButtonClicked() läser anslutningsdata från inställningsfilen och upprättar anslutningen till Modbus-servern.
onReadButtonClicked()
Med onReadButtonClicked() initieras sedan olika readRequests och motsvarande register läses från Modbus-servern. De returnerade värdena skickas vidare till qml när Q_PROPERTY via emit-signaler och uppdateras i användargränssnittet.
Skriv funktion
Funktionen onWriteButtonClicked(int writeregister) används för att skriva till Modbus-serverregistren. Här är det tänkt att olika register kan skrivas på Modbus-servern via variabeln "writeregister".
Du kan ladda ner applikationen här ix-modbus-tcp-example.zip.