Qt Modbus na may koneksyon sa TCP / IP

Sa blog na ito, nais kong magbigay ng isang maliit na Qt Quick application (qml) bilang isang halimbawa ng isang koneksyon sa Modbus sa TCP / IP.
Sa mga halimbawa ng Qt, natagpuan ko lamang ang mga halimbawa ng QWidget para sa mga koneksyon sa Modbus, at pagkatapos ng kamakailang paglikha ng isang Qt Quick application para dito, nais kong magbigay ng isang slimmed down na bersyon nito bilang isang halimbawa.

Lab

Upang ma test ang application, kailangan mo ng isang Modbus server o isang programa na "simulates" tulad ng isang server. Ginamit ko ang "Modbus Server Pro" mula sa http://www.apphugs.com/modbus-server.html para dito. Pinapayagan ka nitong tumakbo sa lahat ng mga senaryo na kailangan mo.

Qt application

Una sa lahat: Dahil ito ay pumunta masyadong malayo upang i post ang lahat ng code dito, ibibigay ko ang buong code bilang isang ZIP file (tingnan sa ibaba).

Mga Setting

Una, lumikha ako ng isang simpleng klase ng SettingsDialog na naglalaman ng mga pagpipilian sa koneksyon. Sa pinasimpleng halimbawa, ito ay lamang ang "modbusServerUrl", ang "responseTime" at ang "numberOfRetries".

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

Ang mga pagtatalaga ay - sa tingin ko - self-explaining.

  • modbusServerUrl = ang TCP / IP number plus Modbus server port, hal. 192.168.2.86:502
  • responseTime = ang maximum na oras sa ms kung saan ang isang tugon mula sa server ay naghihintay para sa
  • numberOfRetries = ang bilang ng mga nabigong pagtatangka na tatanggapin.

Aplikasyon

onConnectButtonClicked()

Ang onConnectButtonClicked() function ay nagbabasa ng data ng koneksyon mula sa file ng mga setting at nagtatatag ng koneksyon sa server ng Modbus.

onReadButtonClicked()

Sa onReadButtonClicked() iba't ibang readRequests ay pagkatapos ay sinimulan at ang kaukulang mga rehistro ay basahin mula sa Modbus server. Ang mga ibinalik na halaga ay ipinapasa sa qml bilang Q_PROPERTY sa pamamagitan ng mga signal ng emit at na update sa interface ng gumagamit.

Isulat ang function

Ang function na onWriteButtonClicked(int writeregister) ay ginagamit sa pagsulat sa mga Modbus server registers. Dito makikita na ang iba't ibang register ay maaaring isulat sa Modbus server sa pamamagitan ng variable na "writeregister".

Maaari mong i-download ang application dito ix-modbus-tcp-halimbawa.zip.