Qt Modbus s TCP/IP vezom

U ovom blogu želio bih pružiti malu Qt Quick aplikaciju (qml) kao primjer Modbus veze putem TCP / IP.
U primjerima Qt-a pronašao sam samo primjere QWidgeta za Modbusove veze, a nakon što sam nedavno stvorio Qt Quick aplikaciju za to, želio bih pružiti vitku verziju kao primjer.

Laboratorij

Da biste mogli testirati aplikaciju, potreban vam je Modbus poslužitelj ili program koji "simulira" takav poslužitelj. Za to sam koristio "Modbus Server Pro" iz http://www.apphugs.com/modbus-server.html . To vam omogućuje da prođete kroz sve scenarije koji su vam potrebni.

Qt aplikacija

Prije svega: Budući da bi ovdje otišlo predaleko za objavljivanje svih kodova, pružit ću cijeli kôd kao ZIP datoteku (vidi dolje).

Postavke

Prvo sam stvorio jednostavnu klasu SettingsDialog koja sadrži mogućnosti povezivanja. U pojednostavljenom primjeru to su samo "modbusServerUrl", "responseTime" i "numberOfRetries".

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

Oznake su - mislim - samorazumljive.

  • modbusServerUrl = TCP/IP broj plus priključak Modbus poslužitelja, npr. 192.168.2.86:502
  • responseTime = maksimalno vrijeme u ms u kojem se čeka odgovor s poslužitelja
  • numberOfRetries = broj neuspjelih pokušaja koji će biti prihvaćeni.

Aplikacija

onConnectButtonClicked()

Funkcija onConnectButtonClicked() čita podatke o vezi iz datoteke postavki i uspostavlja vezu s Modbus poslužiteljem.

onReadButtonClicked()

Uz onReadButtonClicked() pokreću se različiti zahtjevi za čitanje, a odgovarajući registri čitaju se s Modbus poslužitelja. Vraćene vrijednosti prenose se na qml kao Q_PROPERTY putem emitiranja signala i ažuriraju se u korisničkom sučelju.

Funkcija pisanja

Funkcija onWriteButtonClicked(int writeregister) koristi se za pisanje u registre Modbus poslužitelja. Ovdje je predviđeno da se različiti registri mogu upisati na Modbus poslužitelju putem varijable "writeregister".

Aplikaciju možete preuzeti ovdje ix-modbus-tcp-example.zip.