【免費學習】自由口通信上位機實戰(zhàn)案例
1、引言
組態(tài)軟件作為一種通用軟件,體系結(jié)構(gòu)較為龐大、功能軟件包多、價格也比較昂貴,而且對于一些復雜的業(yè)務邏輯或自定義的協(xié)議,實現(xiàn)起來比較麻煩。近幾年,C#/.NET上位機開發(fā)應用越來越廣泛,相對于傳統(tǒng)的組態(tài)軟件的方式,C#開發(fā)上位機具有靈活、易學、擴展性強的特點。本文使用VS2019作為開發(fā)軟件,SQLite作為數(shù)據(jù)存儲軟件,硬件使用廈門宇電溫度控制器,開發(fā)一套通用的上位機監(jiān)控系統(tǒng)。
2、項目背景
第一次聽說宇電這個品牌,是我的一個朋友說讓我給他幫個忙,寫一個上位機和他的儀表進行通信。我二話沒說就答應了,剛開始認為是走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%完整地對儀表進行操作;標準讀和寫指令分別如下:
讀?。?/strong>?地址代號 + 52H(82)+ 要讀的參數(shù)代號 + 00 + 00 + 校驗碼
寫入:?地址代號 + 43H(67)+ 要寫的參數(shù)代號 + 寫入低字節(jié) + 寫入高字節(jié) + 校驗碼
地址代號:AI儀表有效地址為0-80,協(xié)議規(guī)定地址代號為兩個相同的字節(jié),數(shù)值為(儀表地址+80H),如地址為5,那么地址代碼將對應85H 85H。
參數(shù)代號:參數(shù)代號表示各個參數(shù)對應的值,這個需要參考協(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窗體應用后,創(chuàng)建一個類,取名為AIBUS,AIBUS協(xié)議基于串口通信,因此首先要實現(xiàn)基本的串口連接與斷開,通過調(diào)用SerialPort組件實現(xiàn),代碼如下所示:


讀取參數(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ā)出對應的通信庫,從而實現(xiàn)上位機監(jiān)控系統(tǒng)開發(fā)。在上位機學習過程中,看懂協(xié)議、分析協(xié)議、開發(fā)協(xié)議及應用協(xié)議,都是必備的技能。
????????為了便于大家更好地學習,這次將通過免費直播課的方式演示整個項目的部署及開發(fā),希望能給大家學習帶來一些幫助。想要學習的童鞋,趕緊掃描下方二維碼,進入班級群。
PS:微信群二維碼僅限前200名,名額有限,先到先得,僅限當天。
