Qt Modbus com conexão TCP/IP

Neste blog, eu gostaria de fornecer uma pequena aplicação Qt Quick (qml) como um exemplo de uma conexão Modbus sobre TCP/IP.
Nos exemplos do Qt, eu só encontrei exemplos do QWidget para conexões Modbus, e depois de criar recentemente um aplicativo Qt Quick para isso, eu gostaria de fornecer uma versão reduzida dele como um exemplo.

Labrador

Para poder testar a aplicação, você precisa de um servidor Modbus ou um programa que "simule" tal servidor. Eu usei o "Modbus Server Pro" da http://www.apphugs.com/modbus-server.html para isso. Isso permite que você execute todos os cenários necessários.

Aplicação Qt

Primeiro de tudo: Como iria longe demais postar todo o código aqui, vou fornecer todo o código como um arquivo ZIP (veja abaixo).

Configurações

Primeiro, criei uma classe SettingsDialog simples que contém as opções de conexão. No exemplo simplificado, isso é apenas o "modbusServerUrl", o "responseTime" e o "numberOfRetries".

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

As designações são - penso eu - autoexplicativas.

  • modbusServerUrl = o número TCP/IP mais a porta do servidor Modbus, por exemplo, 192.168.2.86:502
  • responseTime = o tempo máximo em ms em que uma resposta do servidor é esperada
  • numberOfRetries = o número de tentativas fracassadas que serão aceitas.

Aplicação

onConnectButtonClicked()

A função onConnectButtonClicked() lê os dados de conexão do arquivo de configurações e estabelece a conexão com o servidor Modbus.

emReadButtonClicked()

Com onReadButtonClicked() vários readRequests são iniciados e os registradores correspondentes são lidos a partir do servidor Modbus. Os valores retornados são repassados para o qml como Q_PROPERTY via sinais de emissão e atualizados na interface do usuário.

Função de gravação

A função onWriteButtonClicked(int writeregister) é usada para gravar nos registradores do servidor Modbus. Aqui prevê-se que diferentes registradores podem ser escritos no servidor Modbus através da variável "writeregister".

Você pode baixar o aplicativo aqui ix-modbus-tcp-example.zip.