Qt Modbus TCP/IP-liitännällä

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.