pythonqt4上位机开发_「新阁教育」自由口通信上位机实战案例
1、引言
組態(tài)軟件作為一種通用軟件,體系結(jié)構(gòu)較為龐大、功能軟件包多、價(jià)格也比較昂貴,而且對(duì)于一些復(fù)雜的業(yè)務(wù)邏輯或自定義的協(xié)議,實(shí)現(xiàn)起來比較麻煩。近幾年,C#/.NET上位機(jī)開發(fā)應(yīng)用越來越廣泛,相對(duì)于傳統(tǒng)的組態(tài)軟件的方式,C#開發(fā)上位機(jī)具有靈活、易學(xué)、擴(kuò)展性強(qiáng)的特點(diǎn)。本文使用VS2019作為開發(fā)軟件,SQLite作為數(shù)據(jù)存儲(chǔ)軟件,硬件使用廈門宇電溫度控制器,開發(fā)一套通用的上位機(jī)監(jiān)控系統(tǒng)。【公眾號(hào)dotNet工控上位機(jī):thinger_swj】
2、項(xiàng)目背景
第一次聽說宇電這個(gè)品牌,是我的一個(gè)朋友說讓我給他幫個(gè)忙,寫一個(gè)上位機(jī)和他的儀表進(jìn)行通信。我二話沒說就答應(yīng)了,剛開始認(rèn)為是走M(jìn)odbus通信,因?yàn)槭袌?chǎng)上大部分儀表都是通過Modbus通信的。然而,當(dāng)我拿到產(chǎn)品之后,發(fā)現(xiàn)宇電儀表推薦使用的是AIBUS通信協(xié)議,于是就去宇電官網(wǎng)搜索相關(guān)資料了。AIBUS協(xié)議是宇電為AI系列儀表開發(fā)的一個(gè)協(xié)議,其指令比Modbus更簡單、更可靠,而且通信速率比Modbus更高,同時(shí)也具備組網(wǎng)功能,可以在一個(gè)RS485總線上連接多達(dá)80臺(tái)儀表。
3、儀表接線配置及協(xié)議說明
我使用的儀表型號(hào)是AI-500,在查閱完相關(guān)資料之后,開始對(duì)儀表進(jìn)行接線,接線圖在儀表的側(cè)面,只是測(cè)試通信的話,只需要接好電源、Pt100和485通信。
接線完成之后,需要設(shè)置一下儀表的相關(guān)參數(shù),根據(jù)儀表的說明書,主要設(shè)置輸入規(guī)格、通信地址、波特率這三個(gè)參數(shù),如下表所示:
參數(shù)設(shè)置完畢,可以看到儀表上已經(jīng)可以顯示室內(nèi)溫度,下一步就開始編寫通信類庫。編寫之前首先要了解一下AIBUS通信協(xié)議:
AI 儀表采用16進(jìn)制數(shù)據(jù)格式來表示各種指令代碼及數(shù)據(jù)。AI儀表軟件通訊指令經(jīng)過優(yōu)化設(shè)計(jì),標(biāo)準(zhǔn)的通訊指令只有兩條,一條為讀指令,一條為寫指令,兩條指令使得上位機(jī)軟件編寫容易,但能100%完整地對(duì)儀表進(jìn)行操作;標(biāo)準(zhǔn)讀和寫指令分別如下:
讀取: 地址代號(hào) + 52H(82)+ 要讀的參數(shù)代號(hào) + 00 + 00 + 校驗(yàn)碼
寫入: 地址代號(hào) + 43H(67)+ 要寫的參數(shù)代號(hào) + 寫入低字節(jié) + 寫入高字節(jié) + 校驗(yàn)碼
地址代號(hào):AI儀表有效地址為0-80,協(xié)議規(guī)定地址代號(hào)為兩個(gè)相同的字節(jié),數(shù)值為(儀表地址+80H),如地址為5,那么地址代碼將對(duì)應(yīng)85H 85H。
參數(shù)代號(hào):參數(shù)代號(hào)表示各個(gè)參數(shù)對(duì)應(yīng)的值,這個(gè)需要參考協(xié)議說明書,下面列舉部分參數(shù):
校驗(yàn)碼:校驗(yàn)碼采用 16 位求和校驗(yàn)方式。
讀指令校驗(yàn)碼計(jì)算方法為:
要讀的參數(shù)的代號(hào)×256+82+ADDR
寫指令校驗(yàn)碼計(jì)算方法為:
要寫的參數(shù)代號(hào)×256+67+要寫的參數(shù)值+ADDR
公式中 ADDR為儀表地址,范圍是 0~80(注意不要加上 80H)。校驗(yàn)碼為2 個(gè)字節(jié),其低字節(jié)在前,高字節(jié)在后。
4、AIBUS通信協(xié)議開發(fā)
- 串口通信:在創(chuàng)建好Windows窗體應(yīng)用后,創(chuàng)建一個(gè)類,取名為AIBUS,AIBUS協(xié)議基于串口通信,因此首先要實(shí)現(xiàn)基本的串口連接與斷開,通過調(diào)用SerialPort組件實(shí)現(xiàn),代碼如下所示:
- 參數(shù)封裝:每次通信返回結(jié)果可能包含很多參數(shù),這里主要獲取5個(gè)重要的參數(shù),分別是實(shí)際值、設(shè)定值、參數(shù)值、高限報(bào)警、低限報(bào)警,并將這5個(gè)參數(shù)封裝成一個(gè)類,如下所示:
- 讀取參數(shù):參考協(xié)議中的讀取報(bào)文,讀取參數(shù)將地址代號(hào)與參數(shù)代號(hào)作為參數(shù),然后將返回值解析成一個(gè)AIBUSParam對(duì)象,如下所示:
- 讀取校驗(yàn):讀取校驗(yàn)按照協(xié)議進(jìn)行校驗(yàn)和累加,最終結(jié)果轉(zhuǎn)換2個(gè)字節(jié)返回,如下所示:
- 解析報(bào)文:解析報(bào)文首先是判斷返回報(bào)文校驗(yàn)是否正確,然后按照協(xié)議進(jìn)行解析,返回AIBUSParam對(duì)象,如下所示:
- 驗(yàn)證報(bào)文:驗(yàn)證報(bào)文主要是做校驗(yàn)判斷,對(duì)前面N-2個(gè)字節(jié)做校驗(yàn),然后與最后2個(gè)字節(jié)對(duì)比,這樣就可以知道報(bào)文校驗(yàn)是否正確,如下所示:
- 寫入?yún)?shù):參考協(xié)議中的讀取報(bào)文,寫入?yún)?shù)將地址代號(hào)、參數(shù)代號(hào)與參數(shù)值作為參數(shù),返回值仍然解析成一個(gè)AIBUSParam對(duì)象,如下所示:
- 寫入校驗(yàn):寫入校驗(yàn)按照協(xié)議進(jìn)行校驗(yàn)和累加,最終結(jié)果轉(zhuǎn)換2個(gè)字節(jié)返回,如下所示:
5、溫度監(jiān)控系統(tǒng)TMS上位機(jī)開發(fā)
通信庫編程完成后,就可以進(jìn)行上位機(jī)開發(fā),本上位機(jī)系統(tǒng)主要是實(shí)時(shí)采集三個(gè)不同地點(diǎn)的溫度,通過實(shí)時(shí)曲線進(jìn)行顯示并存儲(chǔ)到數(shù)據(jù)庫,便于后續(xù)分析。
UI界面設(shè)計(jì)如下所示:
上位機(jī)開發(fā)主要包括以下幾部分:
1、配置信息管理:配置信息主要包括通信端口號(hào)、波特率、儀表1地址代號(hào)、儀表2地址代號(hào)、儀表3地址代號(hào)等,這里采用ini的方式進(jìn)行存儲(chǔ),通過調(diào)用底層API的方式讀取配置信息,封裝成對(duì)象。ini文件存儲(chǔ)形式如下所示:
2、讀取配置文件代碼如下:
3、實(shí)時(shí)日志顯示:系統(tǒng)運(yùn)行過程中的各種狀態(tài)都將通過日志的形式進(jìn)行展示,這里采用ListView+委托的方式來實(shí)現(xiàn),代碼如下所示:
4、實(shí)時(shí)讀取及顯示:實(shí)時(shí)讀取采用的是多線程的方式,通過讀取錯(cuò)誤次數(shù)來判斷讀取異常,從而實(shí)現(xiàn)自動(dòng)斷線重連。
5、實(shí)時(shí)數(shù)據(jù)存儲(chǔ):實(shí)時(shí)數(shù)據(jù)存儲(chǔ)采用SQLite數(shù)據(jù)庫,通過開啟一個(gè)線程定時(shí)器,按照1秒的頻率定時(shí)向數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù),便于后續(xù)查詢。
最終上位機(jī)運(yùn)行結(jié)果如下所示:
6、整體總結(jié)
本文主要是結(jié)合宇電智能溫度控制器,通過對(duì)其通信協(xié)議的分析,開發(fā)出對(duì)應(yīng)的通信庫,從而實(shí)現(xiàn)上位機(jī)監(jiān)控系統(tǒng)開發(fā)。在上位機(jī)學(xué)習(xí)過程中,看懂協(xié)議、分析協(xié)議、開發(fā)協(xié)議及應(yīng)用協(xié)議,都是必備的技能。【公眾號(hào)dotNet工控上位機(jī):thinger_swj】
總結(jié)
以上是生活随笔為你收集整理的pythonqt4上位机开发_「新阁教育」自由口通信上位机实战案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电信宽带双路由器怎么设置无线网络电信路由
- 下一篇: pandas用众数填充缺失值_7步搞定数