付加勁 天津星閣教育科技有限公司 天津 300450
摘要:組態(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)。
關(guān)鍵字:組態(tài)軟件;上位機(jī);宇電溫度控制器;VS2019
Abstract:As a general-purpose software, configuration software has a relatively large system structure, many functional software packages, and a relatively expensive price. It is also troublesome to implement some complex business logic or custom protocols. In recent years, the development and application of C#/.NET host computer has become more and more extensive. Compared with the traditional configuration software, C# development host computer has the characteristics of flexibility, easy learning, and strong scalability. This article uses VS2019 as the development software, SQLite as the data storage software, and the hardware uses the Xiamen Yudian temperature controller to develop a universal host computer monitoring system.
1 引言
在工業(yè)自動(dòng)化領(lǐng)域,上位機(jī)軟件一直在扮演著一個(gè)至關(guān)重要的角色。一般情況下,我們通常會(huì)采用組態(tài)軟件來開發(fā)上位機(jī),然而,組態(tài)軟件作為一種通用軟件,體系結(jié)構(gòu)較為龐大、功能軟件包多、價(jià)格也比較昂貴,而且對(duì)于一些復(fù)雜的業(yè)務(wù)邏輯或自定義的協(xié)議,實(shí)現(xiàn)起來比較麻煩。
近幾年來,高級(jí)語言開發(fā)上位機(jī)應(yīng)用越來越廣泛,相對(duì)于傳統(tǒng)的組態(tài)軟件,采用高級(jí)語言開發(fā)上位機(jī)具有更靈活、擴(kuò)展性更強(qiáng)、更便宜的特點(diǎn)。在眾多的高級(jí)語言當(dāng)中,微軟.NET平臺(tái)下的C#顯得尤為突出。C#/.NET開發(fā)上位機(jī)相對(duì)于其他的語言而言,更加方便快捷,而且可以獲取到的資料也相對(duì)比較多。
2 AIBUS簡(jiǎn)介
AIBUS協(xié)議是宇電為AI系列儀表開發(fā)的一個(gè)協(xié)議,其指令比Modbus更簡(jiǎn)單、更可靠,而且通信速率比Modbus更高,同時(shí)也具備組網(wǎng)功能,可以在一個(gè)RS485總線上連接多達(dá)80臺(tái)儀表。
2.1 AIBUS報(bào)文結(jié)構(gòu)
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)碼
2.2 AIBUS報(bào)文說明
?地址代號(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ù):
表1:AI儀表常用參數(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é)在后。
?返回報(bào)文:無論是讀還是寫,儀表都返回以下10個(gè)字節(jié)數(shù)據(jù):
返回:測(cè)量值 PV + 給定值SV + 輸出值MV及報(bào)警狀態(tài) + 所讀/寫參數(shù)值 + 校驗(yàn)碼
PV、SV 及所讀參數(shù)值各占 2 個(gè)字節(jié),低位字節(jié)在前,高位字節(jié)在后,整數(shù)無法表示小數(shù)點(diǎn),要求用戶在上位機(jī)處理;MV 占一個(gè)字節(jié),數(shù)值范圍-110~+110,狀態(tài)位占一個(gè)字節(jié),校驗(yàn)碼占 2個(gè)字節(jié),共 10個(gè)字節(jié)。
3 儀表接線設(shè)置
在實(shí)現(xiàn)上位機(jī)通信前,需要搭建儀表通信環(huán)境,這里主要針對(duì)儀表的接線及相關(guān)參數(shù)設(shè)置進(jìn)行說明。
3.1 儀表接線說明
針對(duì)AI-500系列儀表,通信接口為485接口,因此需要通過將485總線轉(zhuǎn)換成USB接口,然后再接入上位機(jī),根儀表測(cè)試的接線圖,還需要接入220V電源、Pt100鉑熱電阻,具體接線方式如下表所示:
表2:AI儀表接線圖
3.2 儀表設(shè)置說明
完成上述接線之后,需要設(shè)置一下儀表的相關(guān)參數(shù),根據(jù)儀表的說明書,主要設(shè)置輸入規(guī)格、通信地址、波特率這三個(gè)參數(shù),如下表所示:
表3: AI儀表參數(shù)設(shè)置
參數(shù)設(shè)置完畢,可以看到儀表上已經(jīng)可以顯示室內(nèi)溫度。
為了便于組成網(wǎng)絡(luò),這里選擇3個(gè)儀表,將另外2個(gè)儀表的輸入規(guī)格和波特率設(shè)置成一樣,但是通信地址分別設(shè)置成3和4,在接線方面,直接將485接口的A和B并接在一起即可,網(wǎng)絡(luò)接線圖如下所示:
圖1:網(wǎng)絡(luò)結(jié)構(gòu)圖
4 AIBUS通信協(xié)議開發(fā)
4.1 串口通信
在創(chuàng)建好Windows窗體應(yīng)用后,創(chuàng)建一個(gè)類,取名為AIBUS,AIBUS協(xié)議基于串口通信,因此先要實(shí)現(xiàn)基本的串口連接與斷開,通過調(diào)用SerialPort組件實(shí)現(xiàn),代碼如下圖所示:
圖2:串口連接
4.2 讀取參數(shù)
每次通信返回結(jié)果可能包含很多參數(shù),這里主要獲取5個(gè)重要的參數(shù),分別是實(shí)際值、設(shè)定值、參數(shù)值、高限報(bào)警、低限報(bào)警,并將這5個(gè)參數(shù)封裝成一個(gè)類,如下圖所示:
圖3:通信對(duì)象
參考協(xié)議中的讀取報(bào)文,讀取參數(shù)將地址代號(hào)與參數(shù)代號(hào)作為參數(shù),然后將返回值解析成一個(gè)AIBUSParam對(duì)象,如下圖所示:
圖4:讀取參數(shù)
讀取報(bào)文中涉及到校驗(yàn),對(duì)于讀取校驗(yàn),按照協(xié)議進(jìn)行校驗(yàn)和累加,zui終結(jié)果轉(zhuǎn)換2個(gè)字節(jié)返回,如下圖所示:
圖5:讀取校驗(yàn)
4.3 解析報(bào)文
解析報(bào)文先是判斷返回報(bào)文校驗(yàn)是否正確,然后按照協(xié)議進(jìn)行解析,返回AIBUSParam對(duì)象,驗(yàn)證報(bào)文主要是做校驗(yàn)判斷,對(duì)前面N-2個(gè)字節(jié)做校驗(yàn),然后與zui后2個(gè)字節(jié)對(duì)比,這樣就可以知道報(bào)文校驗(yàn)是否正確,如下圖所示:
圖6:驗(yàn)證報(bào)文
驗(yàn)證報(bào)文通過后,需要根據(jù)協(xié)議來對(duì)返回的報(bào)文進(jìn)行解析,zui終返回成一個(gè)AIBUSParam對(duì)象,如下圖所示:
圖7:解析報(bào)文
4.4 寫入?yún)?shù)
參考協(xié)議中的寫入報(bào)文,寫入?yún)?shù)將地址代號(hào)、參數(shù)代號(hào)與參數(shù)值作為參數(shù),返回值仍然解析成一個(gè)AIBUSParam對(duì)象,如下圖所示:
圖8:寫入?yún)?shù)
寫入報(bào)文中涉及到校驗(yàn),對(duì)于寫入校驗(yàn),按照協(xié)議進(jìn)行校驗(yàn)和累加,zui終結(jié)果轉(zhuǎn)換2個(gè)字節(jié)返回,如下圖所示:
圖9:寫入校驗(yàn)
5 溫度監(jiān)控系統(tǒng)上位機(jī)開發(fā)
通信庫編程完成后,就可以進(jìn)行上位機(jī)開發(fā),本上位機(jī)主要是實(shí)時(shí)采集三個(gè)不同地點(diǎn)的溫度,通過實(shí)時(shí)曲線進(jìn)行顯示并存儲(chǔ)到數(shù)據(jù)庫,便于后續(xù)分析。
5.1 UI界面設(shè)計(jì)
監(jiān)控系統(tǒng)UI界面主要包括三部分,分別為實(shí)時(shí)曲線、系統(tǒng)日志及參數(shù)顯示,設(shè)計(jì)布局如下圖所示:
圖10:上位機(jī)UI界面設(shè)計(jì)
5.2 配置信息管理
配置信息主要包括通信端口號(hào)、波特率、儀表1地址代號(hào)、儀表2地址代號(hào)、儀表3地址代號(hào)等,這里采用ini的方式進(jìn)行存儲(chǔ),通過調(diào)用底層API的方式讀取配置信息,封裝成對(duì)象。ini文件存儲(chǔ)形式如下所示:
圖11:配置信息
5.3 實(shí)時(shí)日志顯示
系統(tǒng)運(yùn)行過程中的各種狀態(tài)都將通過日志的形式進(jìn)行展示,這里采用ListView+委托的方式來實(shí)現(xiàn),代碼如下所示:
圖12:實(shí)時(shí)日志
5.4實(shí)時(shí)讀取及斷線重連
實(shí)時(shí)讀取采用的是多線程的方式,直接輪詢讀取各個(gè)儀表的參數(shù),讀取完成后進(jìn)行二次解析并顯示。對(duì)于斷線重連,每次如果讀取失敗,則將錯(cuò)誤次數(shù)加1,當(dāng)讀取錯(cuò)誤次數(shù)超過max錯(cuò)誤次數(shù)時(shí),說明讀取異常,當(dāng)出現(xiàn)讀取異常時(shí),需要判斷COM口是否存在,如果仍然存在,則不需要重新連接,直接繼續(xù)讀取即可,如果COM口不存在,則需要重新連接,從而實(shí)現(xiàn)自動(dòng)斷線重連。
5.5實(shí)時(shí)數(shù)據(jù)存儲(chǔ)
實(shí)時(shí)數(shù)據(jù)存儲(chǔ)采用SQLite數(shù)據(jù)庫,通過開啟一個(gè)線程定時(shí)器,按照1秒的頻率定時(shí)向數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù),便于后續(xù)查詢。
5.6運(yùn)行效果顯示
完成上位機(jī)開發(fā)之后,即可運(yùn)行程序。通過查看系統(tǒng)日志信息及實(shí)時(shí)曲線顯示,判斷是否正常,實(shí)際運(yùn)行結(jié)果如下圖所示:
圖13:運(yùn)行顯示
6 總結(jié)
本文通過對(duì)AI-500系列儀表進(jìn)行研究,zui終實(shí)現(xiàn)C#開發(fā)出一個(gè)溫度監(jiān)控系統(tǒng)。從AIBUS通信協(xié)議剖析入手,結(jié)合實(shí)際硬件,對(duì)其接線及參數(shù)設(shè)置進(jìn)行說明,zui終通過C#結(jié)合協(xié)議內(nèi)容開發(fā)出AIBUS對(duì)應(yīng)的通信庫,使用開發(fā)好的通信庫,運(yùn)用多線程技術(shù)及SQLite數(shù)據(jù)庫,實(shí)現(xiàn)zui終的宇電智能儀表監(jiān)控系統(tǒng)的開發(fā)。
隨著物聯(lián)網(wǎng)、云計(jì)算、人工智能等技術(shù)的發(fā)展,以及國家“工業(yè)4.0”和“中國制造2025”口號(hào)的提出,智能制造行業(yè)近幾年得到了迅速發(fā)展,越來越多的電氣工程師意識(shí)到上位機(jī)開發(fā)的重要性,本文以工業(yè)領(lǐng)域常見的一款智能儀表,結(jié)合C#高級(jí)語言,實(shí)現(xiàn)與其通信、顯示及存儲(chǔ),這正是工業(yè)物聯(lián)網(wǎng)發(fā)展的一個(gè)基石。因此,相信這篇文章,不管是對(duì)電氣工程師還是工業(yè)領(lǐng)域,應(yīng)該都很有實(shí)用價(jià)值。
作者簡(jiǎn)介:付加勁,杭州電子科技大學(xué)工程碩士,主要從事工業(yè)自動(dòng)化相關(guān)教學(xué)工作。