Qt Modbus s TCP/IP povezavo

V tem blogu bi rad zagotovil majhno Qt Quick aplikacijo (qml) kot primer Modbusove povezave preko TCP/IP.
V Qt primerih sem našel samo QWidget primere za Modbusove povezave, in po nedavnem ustvarjanju Qt Quick aplikacije za to, bi želel zagotoviti slimmed-down različico tega kot primer.

Laboratorij

Da bi lahko preizkusili aplikacijo, potrebujete Modbus strežnik ali program, ki "simulira" takšen strežnik. Uporabil sem "Modbus Server Pro" iz http://www.apphugs.com/modbus-server.html za to. To vam omogoča, da teče skozi vse scenarije, ki jih potrebujete.

Qt aplikacija

Najprej: Ker bi šel predaleč za objavo vse kode tukaj, bom zagotovil celotno kodo kot ZIP datoteko (glej spodaj).

Nastavitve

Najprej sem ustvaril preprost razred SettingsDialog, ki vsebuje možnosti povezave. V poenostavljenem primeru je to samo "modbusServerUrl", "responseTime" in "numberOfRetries".

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

Označbe so - mislim - samoobjašnjene.

  • modbusServerUrl = TCP/IP številka plus Modbus strežniška vrata, npr. 192.168.2.86:502
  • responseTime = najdaljši čas v ms, v katerem je odziv strežnika čaka na
  • numberOfRetries = število neuspešnih poskusov, ki bodo sprejeti.

Aplikacija

onConnectButtonClicked()

Funkcija onConnectButtonClicked() bere podatke o povezavi iz datoteke z nastavitvami in vzpostavlja povezavo s strežnikom Modbus.

naReadButtonClicked()

Z naReadButtonClicked() različne readRequests se nato začnejo in ustrezni registri se berejo iz modbus strežnika. Vrnjene vrednosti se prenesejo na qml kot Q_PROPERTY prek oddajanja signalov in posodobljene v uporabniškem vmesniku.

Funkcija za pisanje

Funkcija naWriteButtonClicked(int writeregister) se uporablja za pisanje v dnevnike strežnikov Modbus. Tu je predvideno, da je mogoče na modbusovem strežniku pisati različne registre preko spremenljivke "writeregister".

Aplikacijo lahko prenesete tukaj ix-modbus-tcp-example.zip.