Qt Modbus med TCP/IP-anslutning

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.