Qt Modbus met TCP / IP-verbinding

In hierdie blog wil ek 'n klein Qt Quick-toepassing (qml) verskaf as 'n voorbeeld van 'n Modbus-verbinding via TCP/IP.
In die Qt-voorbeelde het ek slegs QWidget-voorbeelde vir Modbus-verbindings gevind, en nadat ek onlangs 'n Qt Quick-toepassing hiervoor geskep het, wil ek graag 'n verslankte weergawe daarvan as voorbeeld gee.

Laboratorium

Om die toepassing te kan toets, benodig u 'n Modbus-bediener of 'n program wat so 'n bediener "simuleer". Ek het die "Modbus Server Pro" van http://www.apphugs.com/modbus-server.html hiervoor gebruik. Dit laat jou toe om deur al die scenario's wat jy nodig het, te hardloop.

Qt aansoek

Eerstens: Aangesien dit te ver sou gaan om al die kode hier te plaas, sal ek die hele kode as 'n poslêer verskaf (sien hieronder).

Instellings

Eerstens het ek 'n eenvoudige SettingsDialog-klas geskep wat die verbindingsopsies bevat. In die vereenvoudigde voorbeeld is dit net die "modbusServerUrl", die "responseTime" en die "numberOfRetries".

    struct Settings {
        QString modbusServerUrl = "192.168.2.86:1502";
        int responseTime = 1000;
        int numberOfRetries = 3;
    };

Die benamings is - dink ek - selfverduidelikend.

  • modbusServerUrl = die TCP/IP-nommer plus Modbus-bedienerpoort, bv 192.168.2.86:502
  • responseTime = die maksimum tyd in ms waarin daar op 'n antwoord van die bediener gewag word
  • nommerOfRetries = die aantal mislukte pogings wat aanvaar sal word.

Aansoek

onConnectButtonClicked ()

Die onConnectButtonClick () -funksie lees die verbindingsdata uit die instellingslêer en vestig die verbinding met die Modbus -bediener.

onReadButtonClicked ()

Met onReadButtonClick () word verskillende readRequests dan begin en die ooreenstemmende registers word vanaf die Modbus-bediener gelees. Die teruggestuurde waardes word aan qml deurgegee as Q_PROPERTY via uitstootseine en opgedateer in die gebruikerskoppelvlak.

Skryf funksie

Die funksie opWriteButtonClick (int writeregister) word gebruik om aan die Modbus-bedienerregisters te skryf. Hier word voorsien dat verskillende registers via die veranderlike "writeregister" op die Modbus-bediener geskryf kan word.

U kan die toepassing hier aflaai ix-modbus-tcp-voorbeeld.zip.