Tässä blogissa haluaisin tarjota pienen Qt-Quick-sovelluksen (qml) esimerkkinä Modbus-yhteydelle TCP:n/IP: n kautta. Qt-esimerkeistä löysin vain QWidget-esimerkkejä Modbus-yhteyksille ja kun olen äskettäin luonut Qt Quick -sovelluksen tätä tarkoitusta varten, haluaisin tarjota siitä esimerkiksi karsitun version.
Testiympäristö
Sovelluksen testaamiseksi tarvitset Modbus-palvelimen tai ohjelman, joka "simuloi" tällaista palvelinta. Minulla on käytössä "Modbus Server Pro" sivustolta http://www.apphugs.com/modbus-server.html. Voit käyttää sitä suorittamaan kaikki vaaditut skenaariot.
Qt-sovellus
Ensinnäkin: Koska koko koodin postaaminen tähän veisi liikaa tilaa, annan koko koodin ZIP-tiedostona (katso alla).
Asetukset
Ensin loin yksinkertaisen SettingsDialog-luokan, joka sisältää yhteysvaihtoehdot. Yksinkertaistetussa esimerkissä tämä on vain "modbusServerUrl", "responseTime" ja "numberOfRetries".
struct Settings {
QString modbusServerUrl = "192.168.2.86:1502";
int responseTime = 1000;
int numberOfRetries = 3;
};
Nimet ovat mielestäni itsestäänselviä. - modbusServerUrl = TCP / IP-numero plus Modbus-palvelinportti, esim. 192.168.2.86:502 - responseTime = enimmäisaika millisekunteina, jolloin palvelin odottaa vastausta - numberOfRetries = hyväksyttyjen epäonnistuneiden yritysten määrä.
Sovellus
onConnectButtonClicked ()
OnConnectButtonClicked () -toiminnon avulla yhteystiedot luetaan asetustiedostosta ja yhteys Modbus-palvelimeen muodostetaan.
onReadButtonClicked ()
OnReadButtonClicked () käynnistää sitten erilaiset readRequests-pyynnöt ja lukee vastaavat rekisterit Modbus-palvelimelta. Palautetut arvot välitetään qml:ksi nimellä Q_PROPERTY lähetyssignaalien kautta ja päivitetään käyttöliittymässä.
Kirjoitusfunktio
Toimintoa onWriteButtonClicked (int writer register) käytetään Modbus-palvelinrekisteriin kirjoittamiseen. Tällöin Modbus-palvelimelle voidaan kirjoittaa erilaisia rekistereitä muuttujan "writer register" kautta.
Voit ladata sovelluksen täältä ix-modbus-tcp-example.zip.