Katika blogi hii, ningependa kutoa programu ndogo ya Qt Quick (qml) kama mfano wa unganisho la Modbus juu ya TCP / IP.
Katika mifano ya Qt, nimepata tu mifano ya QWidget kwa unganisho la Modbus, na baada ya hivi karibuni kuunda programu ya Qt Quick kwa hili, ningependa kutoa toleo la chini la hiyo kama mfano.
Maabara
Ili uweze kujaribu programu, unahitaji seva ya Modbus au programu ambayo "hutumia" seva kama hiyo. Nilitumia "Modbus Server Pro" kutoka kwa http://www.apphugs.com/modbus-server.html kwa hili. Hii inakuwezesha kukimbia kupitia matukio yote unayohitaji.
Matumizi ya Qt
Kwanza kabisa: Kwa kuwa ingeenda mbali sana kuchapisha nambari zote hapa, nitatoa nambari nzima kama faili ya ZIP (tazama hapa chini).
Mipangilio
Kwanza, niliunda darasa rahisi la MipangilioDialog ambalo lina chaguzi za unganisho. Katika mfano rahisi, hii ni "modbusServerUrl", "responseTime" na "numberOfRetries".
struct Settings {
QString modbusServerUrl = "192.168.2.86:1502";
int responseTime = 1000;
int numberOfRetries = 3;
};
Majina ni - nadhani - maelezo ya kibinafsi.
- modbusServerUrl = nambari ya TCP/IP pamoja na bandari ya seva ya Modbus, kwa mfano 192.168.2.86:502
- responseTime = wakati wa juu katika ms ambayo majibu kutoka kwa seva yanasubiriwa
- idadiOfRetries = idadi ya majaribio yaliyoshindwa ambayo yatakubaliwa.
Maombi
onConnectButtonClicked()
Kazi ya onConnectButtonClicked() inasoma data ya unganisho kutoka kwa faili ya mipangilio na huanzisha muunganisho kwenye seva ya Modbus.
kwenyeReadButtonClicked()
Na onReadButtonClicked() mbalimbali kusomaRequests ni kisha kuanzishwa na rejista sambamba ni kusoma kutoka server Modbus. Thamani zilizorejeshwa zinapitishwa kwa qml kama Q_PROPERTY kupitia ishara za emit na kusasishwa katika kiolesura cha mtumiaji.
Andika kazi
Kazi kwenyeWriteButtonClicked (int writeregister) hutumiwa kuandika kwa rejista za seva ya Modbus. Hapa inashauriwa kuwa rejista tofauti zinaweza kuandikwa kwenye seva ya Modbus kupitia "kuandika usajili".
Unaweza kupakua programu hapa ix-modbus-tcp-mfano.zip.