Ebben a blogban szeretnék bemutatni egy kis Qt Quick alkalmazást (qml) példaként a TCP/IP feletti Modbus kapcsolatra.
A Qt példákban csak QWidget példákat találtam a Modbus kapcsolatokra, és miután nemrég létrehoztam egy Qt Quick alkalmazást ehhez, szeretném példaként bemutatni annak karcsúsított változatát.
Labor
Az alkalmazás teszteléséhez szükség van egy Modbus szerverre vagy egy olyan programra, amely "szimulálja" az ilyen szervert. Ehhez a http://www.apphugs.com/modbus-server.html "Modbus Server Pro" -ját használtam. Ez lehetővé teszi, hogy végigfusson az összes szükséges forgatókönyvön.
Qt alkalmazás
Először is: Mivel túl messzire menne az összes kód itt való közzététele, a teljes kódot ZIP fájlként adom meg (lásd alább).
Beállítások
Először létrehoztam egy egyszerű SettingsDialog osztályt, amely tartalmazza a csatlakozási lehetőségeket. Az egyszerűsített példában ez csak a "modbusServerUrl", a "responseTime" és a "numberOfRetries".
struct Settings {
QString modbusServerUrl = "192.168.2.86:1502";
int responseTime = 1000;
int numberOfRetries = 3;
};
A megnevezések - véleményem szerint - magától értetődőek.
- modbusServerUrl = a TCP/IP szám plusz a Modbus szerver port, pl. 192.168.2.86:502
- responseTime = az a maximális idő ms-ban, amely alatt a kiszolgáló válaszára várnak
- numberOfRetries = az elfogadott sikertelen kísérletek száma.
Alkalmazás
onConnectButtonClicked()
Az onConnectButtonClicked() függvény beolvassa a kapcsolati adatokat a beállításfájlból, és létrehozza a kapcsolatot a Modbus szerverrel.
onReadButtonClicked()
Az onReadButtonClicked() segítségével különböző readRequests indul, és a megfelelő regiszterek beolvasása a Modbus szerverről történik. A visszaadott értékeket a rendszer átadja a qml-nek, Q_PROPERTY jeleket bocsát ki, és frissíti a felhasználói felületen.
Írási függvény
Az onWriteButtonClicked(int writeregister) függvény a Modbus szerver regiszterekbe való írásra szolgál. Itt azt tervezik, hogy a Modbus szerveren különböző regiszterek írhatók a "writeregister" változón keresztül.
Az alkalmazást innen töltheti le ix-modbus-tcp-example.zip.