Qt Modbus con connessione TCP/IP

In questo blog, vorrei fornire una piccola applicazione Qt Quick (qml) come esempio di connessione Modbus su TCP / IP.
Negli esempi di Qt, ho trovato solo esempi QWidget per le connessioni Modbus, e dopo aver recentemente creato un'applicazione Qt Quick per questo, vorrei fornirne una versione ridotta come esempio.

Laboratorio

Per poter testare l'applicazione, è necessario un server Modbus o un programma che "simuli" tale server. Ho usato il "Modbus Server Pro" da http://www.apphugs.com/modbus-server.html per questo. Ciò consente di eseguire tutti gli scenari necessari.

Applicazione Qt

Prima di tutto: dal momento che sarebbe eccessivo pubblicare tutto il codice qui, fornirò l'intero codice come file ZIP (vedi sotto).

Impostazioni

Innanzitutto, ho creato una semplice classe SettingsDialog che contiene le opzioni di connessione. Nell'esempio semplificato, questo è solo "modbusServerUrl", "responseTime" e "numberOfRetries".

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

Le designazioni sono - penso - autoesplicative.

  • modbusServerUrl = il numero TCP/IP più la porta del server Modbus, ad esempio 192.168.2.86:502
  • responseTime = il tempo massimo in ms in cui viene attesa una risposta dal server
  • numberOfRetries = il numero di tentativi falliti che verranno accettati.

Applicazione

onConnectButtonClicked()

La funzione onConnectButtonClicked() legge i dati di connessione dal file delle impostazioni e stabilisce la connessione al server Modbus.

onReadButtonClicked()

Con onReadButtonClicked() vengono quindi avviate varie readRequest e i registri corrispondenti vengono letti dal server Modbus. I valori restituiti vengono trasmessi a qml come Q_PROPERTY tramite segnali di emissione e aggiornati nell'interfaccia utente.

Funzione di scrittura

La funzione onWriteButtonClicked(int writeregister) viene utilizzata per scrivere sui registri del server Modbus. Qui è previsto che diversi registri possano essere scritti sul server Modbus tramite la variabile "writeregister".

È possibile scaricare l'applicazione qui ix-modbus-tcp-example.zip.