Qt Modbus TCP-/IP-yhteydellä

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.