Qt Modbus s pripojením TCP/IP

V tomto blogu by som chcel poskytnúť malú aplikáciu Qt Quick (qml) ako príklad pripojenia Modbus cez TCP / IP.
V príkladoch Qt som našiel iba príklady QWidget pre pripojenia Modbus a po nedávnom vytvorení aplikácie Qt Quick na tento účel by som chcel ako príklad uviesť jeho zoštíhlenú verziu.

Laboratórium

Aby ste mohli aplikáciu otestovať, potrebujete server Modbus alebo program, ktorý takýto server "simuluje". Použil som na to "Modbus Server Pro" od http://www.apphugs.com/modbus-server.html . To vám umožní prejsť všetkými scenármi, ktoré potrebujete.

Qt aplikácia

Po prvé: Keďže by zachádzalo príliš ďaleko zverejniť tu všetok kód, poskytnem celý kód ako súbor ZIP (pozri nižšie).

Nastavenia

Najprv som vytvoril jednoduchú triedu SettingsDialog, ktorá obsahuje možnosti pripojenia. V zjednodušenom príklade je to len "modbusServerUrl", "responseTime" a "numberOfRetries".

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

Myslím si, že označenia sú zrozumiteľné.

  • modbusServerUrl = číslo TCP/IP plus port servera Modbus, napr. 192.168.2.86:502
  • responseTime = maximálny čas v ms, v ktorom sa čaká na odpoveď zo servera
  • numberOfRetries = počet neúspešných pokusov, ktoré budú akceptované.

Aplikácia

onConnectButtonClicked()

Funkcia onConnectButtonClicked() načíta údaje o pripojení zo súboru nastavení a vytvorí spojenie so serverom Modbus.

onReadButtonClicked()

Pomocou onReadButtonClicked() sa potom spustia rôzne readRequest a príslušné registre sa načítajú zo servera Modbus. Vrátené hodnoty sa prenášajú do qml ako Q_PROPERTY prostredníctvom emitovaných signálov a aktualizujú sa v používateľskom rozhraní.

Funkcia zápisu

Funkcia onWriteButtonClicked(int writeregister) sa používa na zápis do registrov serverov Modbus. Tu sa predpokladá, že rôzne registre môžu byť zapísané na server Modbus prostredníctvom premennej "writeregister".

Aplikáciu si môžete stiahnuť tu ix-modbus-tcp-example.zip.