胡宏澤,章勇
(南京航空航天大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,南京210016)
隨著計(jì)算機(jī)技術(shù)應(yīng)用的日漸廣泛,工業(yè)自動化技術(shù)也隨之不斷地向著更高層次的綜合自動化方向發(fā)展。閥門作為工業(yè)自動化中最重要的被控對象之一,如何做到檢測和控制的集中化、智能化已經(jīng)成為了該領(lǐng)域重要的課題。本文設(shè)計(jì)了一種集保護(hù)與控制為一體的基于RS-485總線和MODBUS-RTU 協(xié)議的閥門測試系統(tǒng),該系統(tǒng)能夠?qū)Χ嗯_閥門進(jìn)行集中式檢測,并且可以做到精確控制,保障多臺閥門正確高效的運(yùn)行。
基于RS-485總線和MODBUS-RTU 協(xié)議的閥門測試系統(tǒng)總體方案如圖1所示,系統(tǒng)主要由上位機(jī)、通信接口、閥門控制器等部分組成。通過RS-485 總線和基于MODBUS-RTU 的通信協(xié)議來實(shí)現(xiàn)上位機(jī)與多臺閥門控制器之間的信息傳輸,完成對多臺閥門的檢測和控制[1]。
閥門控制器微控制器采用NXP公司的LPC1766芯片[2]。
圖1 閥門測試系統(tǒng)構(gòu)架
本系統(tǒng)主要是計(jì)算機(jī)串口通過RS-232/RS-485智能轉(zhuǎn)換器連接多臺閥門控制器,對RS-485總線上的設(shè)備輪流進(jìn)行通信。因此該智能轉(zhuǎn)換器必須解決兩個關(guān)鍵問題,即如何從RS-232線上獲得電路和RS-485接口驅(qū)動所需的功率和如何智能控制RS-485的收發(fā)使能?;谝陨蠋c(diǎn),本文采用HEXIN-III型轉(zhuǎn)換器,它無需任何初始化設(shè)置,只需用到RXD(收)、TXD(發(fā))、GND(地)信號,加上獨(dú)有的內(nèi)部零延時(shí)自動收發(fā)轉(zhuǎn)換技術(shù),可滿足系統(tǒng)需求。
硬件模塊連接如圖2所示。
本系統(tǒng)主要通過RS-485總線向每個閥門控制器發(fā)送信息,來集中檢測每個閥門當(dāng)前的狀態(tài),并且達(dá)到控制的目的。接好RS485連接線,在上位機(jī)發(fā)送相關(guān)命令(基于MODBUS RTU 協(xié)議)即可控制閥門操作。為了能夠達(dá)到集中化、智能化的目的,基于MODBUS-RTU 通信協(xié)議設(shè)計(jì)的通信規(guī)程如下[3]。
圖2 硬件模塊連接圖
字符格式:1 位起始位、8 位數(shù)據(jù)、無校驗(yàn)、1 位停止位,波特率9 600bps。
主機(jī)查詢命令格式如下:
從機(jī)地址功能碼數(shù)據(jù)長度數(shù)據(jù)校驗(yàn)1字節(jié)1字節(jié)1字節(jié)若干字節(jié) 16位CRC
從機(jī)應(yīng)答命令格式如下:
從機(jī)地址功能碼數(shù)據(jù)長度數(shù)據(jù)校驗(yàn)
地址分配:分機(jī)地址0~255,其中0=廣播地址,247=從機(jī)默認(rèn)地址,1~247為從機(jī)編程地址。
功能表如表1所列。
表1
①輸出狀態(tài)(Ostate)一個字節(jié)(各位1有效,0無效)反映正在執(zhí)行的狀態(tài),如表2所列。
表2
②輸入狀態(tài)(Instate)一個字節(jié)(各位1有效,0無效)反映檢測到的狀態(tài),如表3所列。
表3
③控制寄存器(RegCtrl)控制開關(guān)閥及停止操作,RegCtrl控制寄存器值如表4所列。
根據(jù)設(shè)定的基于RS-485的MODBUS-RTU 通信規(guī)程,可以舉幾個很簡單的例子說明上位機(jī)與各個閥門控制器之間的通信過程。
當(dāng)要求地址號01的閥門做開閥操作時(shí),主機(jī)會發(fā)送01 05 01 02 91 88,即向01號從機(jī)發(fā)送開閥命令,01號從機(jī)接收到該命令后會回復(fù)主機(jī)01 05 01 02 91 88,同時(shí)做開閥操作。當(dāng)要求讀取地址號01的閥門的所有狀態(tài)信息時(shí),主機(jī)會發(fā)送01 0A00 26A0,命令共5個字節(jié),地址、命令(0AH)、長度分別為1個字節(jié),校驗(yàn)2個字節(jié),表示向01號從機(jī)發(fā)讀取閥門控制器所有信息(除ID 號及版本信息外),若01號從機(jī)接收到該消息后若向主機(jī)發(fā)送01 0A 03 32 00 01F9 80,則表示從機(jī)向主機(jī)發(fā)送開度以及輸入/輸出狀態(tài),并且此時(shí)開度為50%,閥門無故障,正在做關(guān)閥操作。
表4
如圖3所示,以同時(shí)連接4臺閥門控制器為例,待系統(tǒng)上電,各個模塊完成相應(yīng)的初始化操作。上位機(jī)取得各個設(shè)備的控制權(quán)之后,每個閥門控制器會向上控機(jī)返回自己的地址號以及版本信息,上位機(jī)確認(rèn)信息后根據(jù)工作需要選擇相應(yīng)的檢測和控制方式[4]。
根據(jù)上圖可把整個系統(tǒng)的軟件流程具體分為檢測模塊、控制模塊和記憶模塊。檢測模塊主要用于在集中檢測中快速高效率地對當(dāng)前連接的閥門的狀態(tài)進(jìn)行檢測??刂颇K主要是根據(jù)檢測模塊反饋的信息作出相應(yīng)的控制指令與閥門控制器通信來控制閥門,保障閥門的正常運(yùn)行。而記憶模塊則是為了防止系統(tǒng)突然斷電后數(shù)據(jù)的丟失,將每一個閥門的狀態(tài)信息和控制信息以日志的形式保存下來存于Excel表格中。
2.3.1 檢測模塊
檢測模塊能返回的狀態(tài)主要分為輸出狀態(tài)和輸入狀態(tài)。其中輸出狀態(tài)表示閥門正在執(zhí)行的狀態(tài),輸入狀態(tài)表示檢測到的當(dāng)前狀態(tài)。在本系統(tǒng)中,希望保證能集中化地檢測出當(dāng)前所有連接閥門的狀態(tài)信息。為此在該模塊中設(shè)計(jì)了一個接收線程,當(dāng)系統(tǒng)初始化返回當(dāng)前連接閥門的地址信息之后,選擇集中檢測,根據(jù)我們設(shè)計(jì)的基于RS-485的MODBUS-RTU 閥門通信規(guī)程,上位機(jī)根據(jù)返回的當(dāng)前所有閥門控制器的地址信息輪流發(fā)送0A 指令,每一個閥門控制器在接收到信息之后會先進(jìn)行匹配,成功之后會將自己當(dāng)前的狀態(tài)信息發(fā)送給上位機(jī),此時(shí)的接收線程則是不停地處于監(jiān)聽狀態(tài),每當(dāng)接收到一個不同地址的閥門控制器的反饋消息,就會創(chuàng)建一個屬于該閥門的狀態(tài)顯示器對象(CDisplay),并且在該狀態(tài)顯示器中設(shè)計(jì)了一個儀表盤去顯示當(dāng)前閥門的開度情況,儀表盤的上方和下方分別會顯示閥門此時(shí)的輸出狀態(tài)和輸入狀態(tài)。
圖3 系統(tǒng)軟件流程圖
接收線程(TestThread)若查詢到新的地址的閥門,則根據(jù)該地址信息建立一個對應(yīng)的狀態(tài)顯示器,并且在該顯示器中顯示當(dāng)前閥門狀態(tài)信息,相關(guān)代碼如下:
2.3.2 控制模塊
若當(dāng)前連接的閥門存在故障,可以通過控制模塊發(fā)出相應(yīng)的指令與閥門控制器通信來達(dá)到消除故障的目的。因此,如何準(zhǔn)確的從多個閥門中找到有故障的閥門并且及時(shí)做出必要的控制是本模塊的關(guān)鍵。根據(jù)設(shè)計(jì)的基于RS-485的MODBUS-RTU 閥門通信規(guī)程,當(dāng)發(fā)出05命令時(shí),RS-485總線上的每一個閥門控制器都會接收到該消息,并且根據(jù)指令中的地址信息做出匹配。若地址相匹配則該控制器會作出相對應(yīng)的處理,保障閥門的故障問題快速得到解決。地址匹配沒有成功的閥門控制器則會丟棄這個消息,不作任何處理[5]。例如,地址為05的閥門控制器返回的輸入狀態(tài)為10,表示地址為05的閥門出現(xiàn)了漏電的狀況,此時(shí)控制人員則可通過控制模塊控制該閥門做關(guān)閥操作,并且請工作人員立即處理。
系統(tǒng)對相關(guān)指令的處理代碼如下:
2.3.3 記憶模塊
為了保障系統(tǒng)的穩(wěn)定性,必須保存所有閥門每一次的狀態(tài)信息和控制信息。比如當(dāng)系統(tǒng)突然斷電,若之前沒有完成對相關(guān)信息的保存,則工作人員不能了解之前閥門狀態(tài),無法快速恢復(fù)對閥門的操作控制。因此,記憶模塊是非常重要的。在檢測模塊中保存的是所有閥門的操作信息日志,在控制模塊中則可以查出具體閥門的操作信息日志。每當(dāng)RS-485總線上存在通信時(shí),記憶模塊會對數(shù)據(jù)進(jìn)行匯總,提取相應(yīng)的信息存入Excel表。為了能調(diào)用Excel的接口,打開MFC ClassWizard→Automation→Add Class→From a type library,選擇[Excel的安裝路徑]\EXCEL.exe,然后把所有的類都添加進(jìn)去,頭文件為excel.h,源文件為excel.cpp。
首先動態(tài)創(chuàng)建一個save.txt的文檔并且保存實(shí)時(shí)的串口信息,然后從save.txt中讀入串口信息并且按照自己串口字符的格式進(jìn)行選擇性提取存入save.xls表格,若保存成功則刪除save.txt文件節(jié)省資源,以達(dá)到實(shí)時(shí)性存取的目的。流程圖如圖4所示。
圖4 記憶模塊流程圖
上位機(jī)軟件采用VC++6.0 進(jìn)行編制,調(diào)用Windows的API函數(shù)來實(shí)現(xiàn)串口通信。通過RS-485總線和MODBUS-RTU 協(xié)議對多臺閥門進(jìn)行組網(wǎng),上位機(jī)對整個系統(tǒng)進(jìn)行集中式檢測,并且提取信息存入Excel表格中,進(jìn)行數(shù)據(jù)的匯總。圖5為本系統(tǒng)的檢測界面,能保證同時(shí)集中檢測4臺閥門的狀態(tài)信息。圖6為記憶模塊中的相關(guān)日志信息,便于工作人員在異常狀態(tài)下恢復(fù)對閥門的控制。
本文設(shè)計(jì)的閥門測試系統(tǒng)運(yùn)行穩(wěn)定,采用基于RS-485總線和MODBUS-RTU 協(xié)議的自定義通信規(guī)程,能夠集中檢測多臺閥門狀態(tài)、并且達(dá)到精確控制的目的。本系統(tǒng)是對閥門測試系統(tǒng)向著集中化、智能化發(fā)展的一次成功的探索,取得了很好的效果,并且在其他工程項(xiàng)目中也存在一定的參考意義。由于本系統(tǒng)采用的是RS-485的總線進(jìn)行組網(wǎng)通信,考慮到有線網(wǎng)絡(luò)需要較大工作量的網(wǎng)絡(luò)鋪設(shè)等因素,也可以采用無線通信的方式,例如在閥門控制器中利用無線WiFi芯片,通過手機(jī)等智能終端進(jìn)行遠(yuǎn)程檢測和控制,并且可能將成為未來主流的研究方向。
圖5 閥門測試系統(tǒng)界面
圖6 Excel保存文檔
[1]王玲.基于ModBus總線的高精度數(shù)字閥控制系統(tǒng)的設(shè)計(jì)與應(yīng)用[C]//中國空氣動力學(xué)會測控技術(shù)專委會第六屆四次學(xué)術(shù)交流會論文集,2013.
[2]廣州致遠(yuǎn)電子有限公司.深入淺出Cortex-M3-LPC1700,2007.
[3]汪獻(xiàn)忠,劉巍,呂運(yùn)朋.基于MODBUS協(xié)議的工業(yè)智能通訊模塊的設(shè)計(jì)[J].儀表技術(shù)與傳感器,2006(6).
[4]劉燕.可遠(yuǎn)程組網(wǎng)控制的高性價(jià)比智能閥門控制器的研究與實(shí)現(xiàn)[D].南京:南京航空航天大學(xué),2012.
[5]龔建偉,熊光明.Visual C++/Turbo C 串口通信編程實(shí)踐[M].2版.北京:電子工業(yè)出版社,2007.