胡宏澤,章勇
(南京航空航天大學計算機科學與技術學院,南京210016)
隨著計算機技術應用的日漸廣泛,工業自動化技術也隨之不斷地向著更高層次的綜合自動化方向發展。閥門作為工業自動化中最重要的被控對象之一,如何做到檢測和控制的集中化、智能化已經成為了該領域重要的課題。本文設計了一種集保護與控制為一體的基于RS-485總線和MODBUS-RTU 協議的閥門測試系統,該系統能夠對多臺閥門進行集中式檢測,并且可以做到精確控制,保障多臺閥門正確高效的運行。
基于RS-485總線和MODBUS-RTU 協議的閥門測試系統總體方案如圖1所示,系統主要由上位機、通信接口、閥門控制器等部分組成。通過RS-485 總線和基于MODBUS-RTU 的通信協議來實現上位機與多臺閥門控制器之間的信息傳輸,完成對多臺閥門的檢測和控制[1]。
閥門控制器微控制器采用NXP公司的LPC1766芯片[2]。

圖1 閥門測試系統構架
本系統主要是計算機串口通過RS-232/RS-485智能轉換器連接多臺閥門控制器,對RS-485總線上的設備輪流進行通信。因此該智能轉換器必須解決兩個關鍵問題,即如何從RS-232線上獲得電路和RS-485接口驅動所需的功率和如何智能控制RS-485的收發使能。基于以上幾點,本文采用HEXIN-III型轉換器,它無需任何初始化設置,只需用到RXD(收)、TXD(發)、GND(地)信號,加上獨有的內部零延時自動收發轉換技術,可滿足系統需求。
硬件模塊連接如圖2所示。
本系統主要通過RS-485總線向每個閥門控制器發送信息,來集中檢測每個閥門當前的狀態,并且達到控制的目的。接好RS485連接線,在上位機發送相關命令(基于MODBUS RTU 協議)即可控制閥門操作。為了能夠達到集中化、智能化的目的,基于MODBUS-RTU 通信協議設計的通信規程如下[3]。

圖2 硬件模塊連接圖
字符格式:1 位起始位、8 位數據、無校驗、1 位停止位,波特率9 600bps。
主機查詢命令格式如下:

從機地址功能碼數據長度數據校驗1字節1字節1字節若干字節 16位CRC
從機應答命令格式如下:

從機地址功能碼數據長度數據校驗
地址分配:分機地址0~255,其中0=廣播地址,247=從機默認地址,1~247為從機編程地址。
功能表如表1所列。

表1
①輸出狀態(Ostate)一個字節(各位1有效,0無效)反映正在執行的狀態,如表2所列。

表2
②輸入狀態(Instate)一個字節(各位1有效,0無效)反映檢測到的狀態,如表3所列。

表3
③控制寄存器(RegCtrl)控制開關閥及停止操作,RegCtrl控制寄存器值如表4所列。
根據設定的基于RS-485的MODBUS-RTU 通信規程,可以舉幾個很簡單的例子說明上位機與各個閥門控制器之間的通信過程。
當要求地址號01的閥門做開閥操作時,主機會發送01 05 01 02 91 88,即向01號從機發送開閥命令,01號從機接收到該命令后會回復主機01 05 01 02 91 88,同時做開閥操作。當要求讀取地址號01的閥門的所有狀態信息時,主機會發送01 0A00 26A0,命令共5個字節,地址、命令(0AH)、長度分別為1個字節,校驗2個字節,表示向01號從機發讀取閥門控制器所有信息(除ID 號及版本信息外),若01號從機接收到該消息后若向主機發送01 0A 03 32 00 01F9 80,則表示從機向主機發送開度以及輸入/輸出狀態,并且此時開度為50%,閥門無故障,正在做關閥操作。

表4
如圖3所示,以同時連接4臺閥門控制器為例,待系統上電,各個模塊完成相應的初始化操作。上位機取得各個設備的控制權之后,每個閥門控制器會向上控機返回自己的地址號以及版本信息,上位機確認信息后根據工作需要選擇相應的檢測和控制方式[4]。
根據上圖可把整個系統的軟件流程具體分為檢測模塊、控制模塊和記憶模塊。檢測模塊主要用于在集中檢測中快速高效率地對當前連接的閥門的狀態進行檢測。控制模塊主要是根據檢測模塊反饋的信息作出相應的控制指令與閥門控制器通信來控制閥門,保障閥門的正常運行。而記憶模塊則是為了防止系統突然斷電后數據的丟失,將每一個閥門的狀態信息和控制信息以日志的形式保存下來存于Excel表格中。
2.3.1 檢測模塊
檢測模塊能返回的狀態主要分為輸出狀態和輸入狀態。其中輸出狀態表示閥門正在執行的狀態,輸入狀態表示檢測到的當前狀態。在本系統中,希望保證能集中化地檢測出當前所有連接閥門的狀態信息。為此在該模塊中設計了一個接收線程,當系統初始化返回當前連接閥門的地址信息之后,選擇集中檢測,根據我們設計的基于RS-485的MODBUS-RTU 閥門通信規程,上位機根據返回的當前所有閥門控制器的地址信息輪流發送0A 指令,每一個閥門控制器在接收到信息之后會先進行匹配,成功之后會將自己當前的狀態信息發送給上位機,此時的接收線程則是不停地處于監聽狀態,每當接收到一個不同地址的閥門控制器的反饋消息,就會創建一個屬于該閥門的狀態顯示器對象(CDisplay),并且在該狀態顯示器中設計了一個儀表盤去顯示當前閥門的開度情況,儀表盤的上方和下方分別會顯示閥門此時的輸出狀態和輸入狀態。

圖3 系統軟件流程圖
接收線程(TestThread)若查詢到新的地址的閥門,則根據該地址信息建立一個對應的狀態顯示器,并且在該顯示器中顯示當前閥門狀態信息,相關代碼如下:


2.3.2 控制模塊
若當前連接的閥門存在故障,可以通過控制模塊發出相應的指令與閥門控制器通信來達到消除故障的目的。因此,如何準確的從多個閥門中找到有故障的閥門并且及時做出必要的控制是本模塊的關鍵。根據設計的基于RS-485的MODBUS-RTU 閥門通信規程,當發出05命令時,RS-485總線上的每一個閥門控制器都會接收到該消息,并且根據指令中的地址信息做出匹配。若地址相匹配則該控制器會作出相對應的處理,保障閥門的故障問題快速得到解決。地址匹配沒有成功的閥門控制器則會丟棄這個消息,不作任何處理[5]。例如,地址為05的閥門控制器返回的輸入狀態為10,表示地址為05的閥門出現了漏電的狀況,此時控制人員則可通過控制模塊控制該閥門做關閥操作,并且請工作人員立即處理。
系統對相關指令的處理代碼如下:

2.3.3 記憶模塊
為了保障系統的穩定性,必須保存所有閥門每一次的狀態信息和控制信息。比如當系統突然斷電,若之前沒有完成對相關信息的保存,則工作人員不能了解之前閥門狀態,無法快速恢復對閥門的操作控制。因此,記憶模塊是非常重要的。在檢測模塊中保存的是所有閥門的操作信息日志,在控制模塊中則可以查出具體閥門的操作信息日志。每當RS-485總線上存在通信時,記憶模塊會對數據進行匯總,提取相應的信息存入Excel表。為了能調用Excel的接口,打開MFC ClassWizard→Automation→Add Class→From a type library,選擇[Excel的安裝路徑]\EXCEL.exe,然后把所有的類都添加進去,頭文件為excel.h,源文件為excel.cpp。
首先動態創建一個save.txt的文檔并且保存實時的串口信息,然后從save.txt中讀入串口信息并且按照自己串口字符的格式進行選擇性提取存入save.xls表格,若保存成功則刪除save.txt文件節省資源,以達到實時性存取的目的。流程圖如圖4所示。

圖4 記憶模塊流程圖
上位機軟件采用VC++6.0 進行編制,調用Windows的API函數來實現串口通信。通過RS-485總線和MODBUS-RTU 協議對多臺閥門進行組網,上位機對整個系統進行集中式檢測,并且提取信息存入Excel表格中,進行數據的匯總。圖5為本系統的檢測界面,能保證同時集中檢測4臺閥門的狀態信息。圖6為記憶模塊中的相關日志信息,便于工作人員在異常狀態下恢復對閥門的控制。
本文設計的閥門測試系統運行穩定,采用基于RS-485總線和MODBUS-RTU 協議的自定義通信規程,能夠集中檢測多臺閥門狀態、并且達到精確控制的目的。本系統是對閥門測試系統向著集中化、智能化發展的一次成功的探索,取得了很好的效果,并且在其他工程項目中也存在一定的參考意義。由于本系統采用的是RS-485的總線進行組網通信,考慮到有線網絡需要較大工作量的網絡鋪設等因素,也可以采用無線通信的方式,例如在閥門控制器中利用無線WiFi芯片,通過手機等智能終端進行遠程檢測和控制,并且可能將成為未來主流的研究方向。

圖5 閥門測試系統界面

圖6 Excel保存文檔
[1]王玲.基于ModBus總線的高精度數字閥控制系統的設計與應用[C]//中國空氣動力學會測控技術專委會第六屆四次學術交流會論文集,2013.
[2]廣州致遠電子有限公司.深入淺出Cortex-M3-LPC1700,2007.
[3]汪獻忠,劉巍,呂運朋.基于MODBUS協議的工業智能通訊模塊的設計[J].儀表技術與傳感器,2006(6).
[4]劉燕.可遠程組網控制的高性價比智能閥門控制器的研究與實現[D].南京:南京航空航天大學,2012.
[5]龔建偉,熊光明.Visual C++/Turbo C 串口通信編程實踐[M].2版.北京:電子工業出版社,2007.