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.