Qt Modbus z połączeniem TCP/IP

W tym blogu chciałbym przedstawić małą aplikację Qt Quick (qml) jako przykład połączenia Modbus przez TCP / IP.
W przykładach Qt znalazłem tylko przykłady QWidget dla połączeń Modbus, a po niedawnym utworzeniu do tego Qt Quick aplikacji, chciałbym podać jej odchudzoną wersję jako przykład.

Lab

Aby móc przetestować aplikację, potrzebny jest serwer Modbus lub program, który "symuluje" taki serwer. Użyłem do tego "Modbus Server Pro" z http://www.apphugs.com/modbus-server.html . Pozwala to na przebieg wszystkich potrzebnych scenariuszy.

Aplikacja Qt

Po pierwsze: Ponieważ opublikowanie całego kodu tutaj posunęłoby się za daleko, dostarczę cały kod jako plik ZIP (patrz poniżej).

Ustawienia

Najpierw utworzyłem prostą klasę SettingsDialog, która zawiera opcje połączenia. W uproszczonym przykładzie jest to po prostu "modbusServerUrl", "responseTime" i "numberOfRetries".

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

Oznaczenia są - jak sądzę - oczywiste.

  • modbusServerUrl = numer TCP/IP plus port serwera Modbus, np. 192.168.2.86:502
  • responseTime = maksymalny czas w ms, w którym oczekuje się odpowiedzi z serwera
  • numberOfRetries = liczba nieudanych prób, które zostaną zaakceptowane.

Zastosowanie

onConnectButtonClicked()

Funkcja onConnectButtonClicked() odczytuje dane połączenia z pliku ustawień i nawiązuje połączenie z serwerem Modbus.

onReadButtonClicked()

Za pomocą metody onReadButtonClicked() inicjowane są różne readRequesty, a odpowiednie rejestry są odczytywane z serwera Modbus. Zwrócone wartości są przekazywane do qml jako Q_PROPERTY za pośrednictwem sygnałów emitujących i aktualizowane w interfejsie użytkownika.

Funkcja zapisu

Funkcja onWriteButtonClicked(int writeregister) służy do zapisu do rejestrów serwera Modbus. Przewiduje się, że różne rejestry mogą być zapisywane na serwerze Modbus za pomocą zmiennej "writeregister".

Możesz pobrać aplikację tutaj ix-modbus-tcp-przykład.zip.