Qt Modbus cu conexiune TCP/IP

În acest blog, aș dori să ofer o mică aplicație Qt Quick (qml) ca exemplu de conexiune Modbus prin TCP / IP.
În exemplele Qt, am găsit doar exemple QWidget pentru conexiunile Modbus și, după ce am creat recent o aplicație Qt Quick pentru aceasta, aș dori să ofer o versiune redusă a acesteia ca exemplu.

Laborator

Pentru a putea testa aplicația, aveți nevoie de un server Modbus sau de un program care "simulează" un astfel de server. Am folosit "Modbus Server Pro" de la http://www.apphugs.com/modbus-server.html pentru asta. Acest lucru vă permite să parcurgeți toate scenariile de care aveți nevoie.

Aplicația Qt

În primul rând: Deoarece ar merge prea departe pentru a posta tot codul aici, voi furniza întregul cod ca fișier ZIP (vezi mai jos).

Setări

În primul rând, am creat o clasă simplă SettingsDialog care conține opțiunile de conectare. În exemplul simplificat, acesta este doar "modbusServerUrl", "responseTime" și "numberOfRetries".

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

Denumirile sunt - cred - auto-explicative.

  • modbusServerUrl = numărul TCP/IP plus portul serverului Modbus, de ex. 192.168.2.86:502
  • responseTime = timpul maxim în ms în care se așteaptă un răspuns de la server
  • numberOfRetries = numărul de încercări eșuate care vor fi acceptate.

Cerere

onConnectButtonClicked()

Funcția onConnectButtonClicked() citește datele conexiunii din fișierul de setări și stabilește conexiunea la serverul Modbus.

onReadButtonClicked()

Cu onReadButtonClicked() sunt apoi inițiate diverse readRequests și registrele corespunzătoare sunt citite de pe serverul Modbus. Valorile returnate sunt transmise către qml ca Q_PROPERTY prin semnale de emitere și actualizate în interfața cu utilizatorul.

Funcția de scriere

Funcția onWriteButtonClicked(int writeregister) este utilizată pentru a scrie în registrele serverului Modbus. Aici se preconizează că diferite registre pot fi scrise pe serverul Modbus prin intermediul variabilei "writeregister".

Puteți descărca aplicația aici ix-modbus-tcp-example.zip.