Qt Modbus con conexión TCP/IP

En este blog, me gustaría proporcionar una pequeña aplicación Qt Quick (qml) como ejemplo de una conexión Modbus sobre TCP / IP.
En los ejemplos de Qt, solo he encontrado ejemplos de QWidget para conexiones Modbus, y después de crear recientemente una aplicación Qt Quick para esto, me gustaría proporcionar una versión reducida como ejemplo.

Laboratorio

Para poder probar la aplicación, necesita un servidor Modbus o un programa que "simule" dicho servidor. Utilicé el "Modbus Server Pro" de http://www.apphugs.com/modbus-server.html para esto. Esto le permite ejecutar todos los escenarios que necesita.

Aplicación Qt

En primer lugar: dado que sería demasiado lejos publicar todo el código aquí, proporcionaré todo el código como un archivo ZIP (ver más abajo).

Configuración

Primero, creé una clase SettingsDialog simple que contiene las opciones de conexión. En el ejemplo simplificado, esto es solo el "modbusServerUrl", el "responseTime" y el "numberOfRetries".

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

Las designaciones son, creo, autoexplicativas.

  • modbusServerUrl = el número TCP/IP más el puerto del servidor Modbus, por ejemplo, 192.168.2.86:502
  • responseTime = el tiempo máximo en ms en el que se espera una respuesta del servidor
  • numberOfRetries = el número de intentos fallidos que se aceptarán.

Aplicación

onConnectButtonClicked()

La función onConnectButtonClicked() lee los datos de conexión del archivo de configuración y establece la conexión con el servidor Modbus.

onReadButtonClicked()

Con onReadButtonClicked() se inician varias readRequests y los registros correspondientes se leen desde el servidor Modbus. Los valores devueltos se transmiten a qml como Q_PROPERTY a través de señales de emisión y se actualizan en la interfaz de usuario.

Función de escritura

La función onWriteButtonClicked(int writeregister) se utiliza para escribir en los registros del servidor Modbus. Aquí se prevé que se puedan escribir diferentes registros en el servidor Modbus a través de la variable "writeregister".

Puede descargar la aplicación aquí ix-modbus-tcp-example.zip.