Modbus Qt z połączeniem TCP / IP

W tym wpisie chciałbym przedstawić małą aplikację Qt-Quick (qml) jako przykład połączenia Modbus za pośrednictwem TCP/IP. W przykładach Qt znalazłem dla połączeń Modbus wyłącznie przykłady z QWidget, a po tym, jak niedawno stworzyłem w tym celu aplikację Qt Quick, jako przykład chciałbym podać jej zmniejszoną wersję.

Środowisko testowe

Aby móc przetestować aplikację, potrzebny jest serwer Modbus lub program, który „symuluje” taki serwer. Użyłem do tego celu „Modbus Server Pro” od http://www.apphugs.com/modbus-server.html. Możesz go użyć do zweryfikowania wszystkich możliwych scenariuszy.

Aplikacja Qt

Przede wszystkim: ponieważ zamieszczenie całego kodu tutaj zajęłoby zbyt dużo miejsca, udostępnię 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 tylko „modbusServerUrl”, „responseTime” i „numberOfRetries”.

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

Nazwy, jak się domyślam, są oczywiste. - modbusServerUrl = numer TCP/IP plus port serwera Modbus, np. 192.168.2.86:502 - responseTime = maksymalny czas w ms, w którym serwer oczekuje na odpowiedź - numberOfRetries = liczba nieudanych prób, które zostały zaakceptowane.

Aplikacja

onConnectButtonClicked ()

Dzięki funkcji onConnectButtonClicked () dane połączenia są odczytywane z pliku ustawień i nawiązywane jest połączenie z serwerem Modbus.

onReadButtonClicked ()

onReadButtonClicked () następnie inicjuje różne żądania readRequest i odczytuje odpowiednie rejestry z serwera Modbus. Otrzymane z powrotem 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 zapisywania do rejestru serwera Modbus. Przyjmuje się, że różne rejestry mogą być zapisywane na serwerze Modbus poprzez zmienną „writeregister”.

Aplikację można pobrać tutajix-modbus-tcp-example.zip.