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