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