V tomto blogu bych rád poskytl malou aplikaci Qt Quick (qml) jako příklad připojení Modbus přes TCP/IP.
V příkladech Qt jsem našel pouze příklady QWidget pro připojení Modbus a poté, co jsem pro to nedávno vytvořil aplikaci Qt Quick, bych rád jako příklad uvedl její zeštíhlenou verzi.
Laboratoř
Abyste mohli aplikaci otestovat, potřebujete server Modbus nebo program, který takový server "simuluje". Použil jsem k tomu "Modbus Server Pro" od http://www.apphugs.com/modbus-server.html . To vám umožní projít všechny scénáře, které potřebujete.
Qt aplikace
Za prvé: Vzhledem k tomu, že by bylo příliš daleko, kdybych zde zveřejnil veškerý kód, poskytnu celý kód jako soubor ZIP (viz níže).
Nastavení
Nejprve jsem vytvořil jednoduchou třídu SettingsDialog, která obsahuje možnosti připojení. Ve zjednodušeném příkladu je to pouze "modbusServerUrl", "responseTime" a "numberOfRetries".
struct Settings {
QString modbusServerUrl = "192.168.2.86:1502";
int responseTime = 1000;
int numberOfRetries = 3;
};
Označení jsou - myslím - samozřejmá.
- modbusServerUrl = číslo TCP/IP plus port serveru Modbus, např. 192.168.2.86:502
- responseTime = maximální doba v ms, po kterou se čeká na odpověď ze serveru
- numberOfRetries = počet neúspěšných pokusů, které budou přijaty.
Aplikace
onConnectButtonClicked()
Funkce onConnectButtonClicked() načte data připojení ze souboru nastavení a naváže spojení se serverem Modbus.
onReadButtonClicked()
S onReadButtonClicked() jsou pak iniciovány různé readRequests a odpovídající registry jsou čteny ze serveru Modbus. Vrácené hodnoty jsou předány do qml jako Q_PROPERTY prostřednictvím signálů a aktualizovány v uživatelském rozhraní.
Funkce zápisu
Funkce onWriteButtonClicked(int writeregister) slouží k zápisu do registrů Modbus serveru. Zde se předpokládá, že na server Modbus lze zapisovat různé registry pomocí proměnné "writeregister".
Aplikaci si můžete stáhnout zde ix-modbus-tcp-example.zip.