Qt Modbus met TCP/IP aansluiting

In deze blog wil ik graag een kleine Qt Quick applicatie (qml) geven als voorbeeld van een Modbus verbinding via TCP/IP.
In de Qt-voorbeelden heb ik alleen QWidget-voorbeelden voor Modbus-verbindingen gevonden, en nadat ik hier onlangs een Qt Quick-applicatie voor heb gemaakt, wil ik er graag een afgeslankte versie van geven als voorbeeld.

Lab

Om de applicatie te kunnen testen, heb je een Modbus-server nodig of een programma dat zo'n server "simuleert". Ik heb hiervoor de "Modbus Server Pro" van http://www.apphugs.com/modbus-server.html gebruikt. Hiermee kunt u alle scenario's doorlopen die u nodig hebt.

Qt-toepassing

Allereerst: Omdat het te ver zou gaan om alle code hier te plaatsen, zal ik de volledige code als een ZIP-bestand verstrekken (zie hieronder).

Instellingen

Eerst heb ik een eenvoudige klasse SettingsDialog gemaakt die de verbindingsopties bevat. In het vereenvoudigde voorbeeld is dit alleen de "modbusServerUrl", de "responseTime" en de "numberOfRetries".

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

De aanduidingen spreken - denk ik - voor zich.

  • modbusServerUrl = het TCP/IP-nummer plus Modbus-serverpoort, bijvoorbeeld 192.168.2.86:502
  • responseTime = de maximale tijd in ms waarin op een antwoord van de server wordt gewacht
  • numberOfRetries = het aantal mislukte pogingen dat wordt geaccepteerd.

Toepassing

onConnectButtonClicked()

De functie onConnectButtonClicked() leest de verbindingsgegevens uit het instellingenbestand en brengt de verbinding met de Modbus-server tot stand.

onReadButtonClicked()

Met onReadButtonClicked() worden vervolgens verschillende readRequests geïnitieerd en worden de bijbehorende registers gelezen van de Modbus-server. De geretourneerde waarden worden als Q_PROPERTY via zendsignalen doorgegeven aan qml en bijgewerkt in de gebruikersinterface.

Schrijffunctie

De functie opWriteButtonClicked(int writeregister) wordt gebruikt om naar de Modbus-serverregisters te schrijven. Hier is het de bedoeling dat verschillende registers op de Modbus-server kunnen worden geschreven via de variabele "writeregister".

U kunt de applicatie hier downloaden ix-modbus-tcp-example.zip.