Tässä blogissa haluaisin tarjota pienen Qt Quick -sovelluksen (qml) esimerkkinä Modbus-yhteydestä TCP/IP:n kautta.
Qt-esimerkeistä olen löytänyt vain QWidget-esimerkkejä Modbus-yhteyksistä, ja luotuani äskettäin Qt Quick -sovelluksen tähän, haluaisin tarjota siitä esimerkkinä kevennetyn version.
Laboratorio
Jotta voit testata sovellusta, tarvitset Modbus-palvelimen tai ohjelman, joka "simuloi" tällaista palvelinta. Käytin tähän http://www.apphugs.com/modbus-server.html "Modbus Server Prota". Näin voit käydä läpi kaikki tarvitsemasi skenaariot.
Qt-sovellus
Ensinnäkin: Koska kaiken koodin lähettäminen tänne menisi liian pitkälle, 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;
};
Nimitykset ovat mielestäni itsestään selviä.
- modbusServerUrl = TCP/IP-numero ja Modbus-palvelinportti, esimerkiksi 192.168.2.86:502
- responseTime = enimmäisaika, jonka aikana palvelimen vastausta odotetaan
- numberOfRetry = hyväksyttyjen epäonnistuneiden yritysten määrä.
Hakemus
onConnectButtonClicked()
onConnectButtonClicked()-toiminto lukee yhteystiedot asetustiedostosta ja muodostaa yhteyden Modbus-palvelimeen.
onReadButtonClicked()
OnReadButtonClicked():n avulla käynnistetään erilaisia readRequest-pyyntöjä ja vastaavat rekisterit luetaan Modbus-palvelimelta. Palautetut arvot välitetään qml: ään Q_PROPERTY lähetyssignaalien kautta ja päivitetään käyttöliittymässä.
Kirjoita-funktio
Funktiota onWriteButtonClicked(int writeregister) käytetään Modbus-palvelinrekistereihin kirjoittamiseen. Tässä on suunniteltu, että Modbus-palvelimelle voidaan kirjoittaa erilaisia rekistereitä muuttujan "writeregister" kautta.
Voit ladata sovelluksen täältä ix-modbus-tcp-example.zip.