Qt Modbus avec connexion TCP/IP

Dans ce blog, j’aimerais fournir une petite application Qt Quick (qml) comme exemple de connexion Modbus sur TCP/IP.
Dans les exemples de Qt, je n’ai trouvé que des exemples QWidget pour les connexions Modbus, et après avoir récemment créé une application Qt Quick pour cela, j’aimerais en fournir une version allégée à titre d’exemple.

Laboratoire

Pour pouvoir tester l’application, vous avez besoin d’un serveur Modbus ou d’un programme qui « simule » un tel serveur. J’ai utilisé le « Modbus Server Pro » de http://www.apphugs.com/modbus-server.html pour cela. Cela vous permet de parcourir tous les scénarios dont vous avez besoin.

Application Qt

Tout d’abord: Comme il irait trop loin de poster tout le code ici, je vais fournir le code entier sous forme de fichier ZIP (voir ci-dessous).

Paramètres

Tout d’abord, j’ai créé une classe SettingsDialog simple qui contient les options de connexion. Dans l’exemple simplifié, il s’agit simplement du « modbusServerUrl », du « responseTime » et du « numberOfRetries ».

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

Les désignations sont - je pense - explicites.

  • modbusServerUrl = le numéro TCP/IP plus le port du serveur Modbus, par exemple 192.168.2.86:502
  • responseTime = la durée maximale en ms pendant laquelle une réponse du serveur est attendue
  • numberOfRetries = le nombre de tentatives infructueuses qui seront acceptées.

Demande d’inscription

onConnectButtonClicked()

La fonction onConnectButtonClicked() lit les données de connexion du fichier de paramètres et établit la connexion au serveur Modbus.

onReadButtonClicked()

Avec onReadButtonClicked(), diverses readRequests sont alors lancées et les registres correspondants sont lus à partir du serveur Modbus. Les valeurs renvoyées sont transmises à qml au fur et à mesure Q_PROPERTY via des signaux d’émission et mises à jour dans l’interface utilisateur.

Fonction d’écriture

La fonction onWriteButtonClicked(int writeregister) permet d’écrire dans les registres du serveur Modbus. Ici, il est envisagé que différents registres puissent être écrits sur le serveur Modbus via la variable « writeregister ».

Vous pouvez télécharger l’application ici ix-modbus-tcp-example.zip.