HMI
Qt Modbus met TCP/IP-verbinding

In dit blogartikel wil ik een kleine Qt-Quick-toepassing (qml) presenteren als voorbeeld voor een Modbus-verbinding via TCP/IP. In de Qt-voorbeelden vond ik voor Modbus-verbindingen alleen QWidget-voorbeelden, en nadat ik onlangs een Qt Quick-toepassing hiervoor heb gemaakt, wil ik er een afgeslankte versie van presenteren als voorbeeld.

Testomgeving

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

Qt-toepassing

Allereerst: aangezien het te veel ruimte zou innemen om de hele code hier te plaatsen, zal ik de hele code beschikbaar maken als een ZIP-bestand (zie hieronder).

Settings

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

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

De namen spreken, denk ik, voor zich. - modbusServerUrl = het TCP/IP-nummer plus Modbus-serverpoort, bijv. 192.168.2.86:502 - responseTime = de maximale tijd in ms dat de server op een antwoord wacht - numberOfRetries = het aantal mislukte pogingen dat wordt geaccepteerd.

Toepassing

onConnectButtonClicked ()

Met de functie onConnectButtonClicked () worden de verbindingsgegevens uit het Settings-bestand gelezen en wordt de verbinding met de Modbus-server tot stand gebracht.

onReadButtonClicked ()

Met OnReadButtonClicked () worden vervolgens verschillende readRequests geïnitieerd en de corresponderende registers van de Modbus-server uitgelezen. De geretourneerde waarden worden doorgegeven aan qml als Q_PROPERTY via emit-signalen en bijgewerkt in de gebruikersinterface.

Schrijffunctie

De functie onWriteButtonClicked(int writeregister) wordt gebruikt om in het Modbus-serverregister te schrijven. Het is hier de bedoeling dat via de variabele "writeregister" verschillende registers op de Modbus-server kunnen worden geschreven.

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