文獻標識碼: A
文章編號: 0258-7998(2011)12-0022-03
隨著我國高速公路隧道里程的日益增長,高速公路隧道的高效、安全運行面臨著嚴峻的挑戰(zhàn)[1]??焖?、安全、可靠的高速公路隧道監(jiān)控系統(tǒng),是指揮車輛有序通行、實時掌控交通流參數(shù)值、車輛運行環(huán)境指標和現(xiàn)場設(shè)備運行狀況、減少和及時處理交通事故的主要保障措施[2]。
在高速公路隧道監(jiān)控系統(tǒng)開發(fā)方面,國內(nèi)有許多案例采用Windows下通用的軟件開發(fā)平臺(如VC++、VB、DELPHI)進行開發(fā)。由于高速公路隧道監(jiān)控系統(tǒng)是一個典型的系統(tǒng)集成工程,現(xiàn)場設(shè)備的接口形式和數(shù)據(jù)類型多樣,數(shù)據(jù)量和集成難度大[3],尤其在使用大量PLC的場合,實現(xiàn)監(jiān)控系統(tǒng)與PLC的通信比較困難。因此,使用通用軟件開發(fā)平臺,其開發(fā)難度大、周期長、調(diào)試困難。由于所開發(fā)的監(jiān)控系統(tǒng)是非開放的軟件,后期的維護難度更大。
而目前廣泛使用的組態(tài)軟件,能夠更好地解決這個問題[4]。組態(tài)軟件作為專業(yè)的工控軟件,在系統(tǒng)界面設(shè)計、數(shù)據(jù)接口、功能組合等方面的開發(fā)非常方便和穩(wěn)定,可以很容易地實現(xiàn)和完成監(jiān)控層的各項功能[5]。此外,由于組態(tài)軟件的開放性,系統(tǒng)管理人員可以輕松維護系統(tǒng)。因此最近幾年,組態(tài)軟件開始被系統(tǒng)設(shè)計人員應(yīng)用到高速公路隧道監(jiān)控系統(tǒng)的開發(fā)中。
由于組態(tài)軟件采用腳本語言,提供給用戶的編程開發(fā)的功能相對較弱。在缺少I/O驅(qū)動的情況下,如在使用組態(tài)王的案例中,還需使用通用開發(fā)平臺編寫通信程序,并為組態(tài)軟件提供OPC服務(wù)器功能;在與情報板這類可變長度數(shù)據(jù)、非實時刷新的設(shè)備交換數(shù)據(jù)時,組態(tài)軟件同樣存在困難。針對以上問題,本文的設(shè)計思路是利用組態(tài)軟件及其腳本語言,實現(xiàn)與所有設(shè)備的通信時無需再借用OPC技術(shù)開發(fā)通信程序,以減少數(shù)據(jù)的交換次數(shù),提高系統(tǒng)的運行效率,同時提高系統(tǒng)的完整性和開放性。
本文介紹了高速公路隧道監(jiān)控系統(tǒng)的結(jié)構(gòu)及實現(xiàn)方法,針對現(xiàn)場數(shù)據(jù)采集和執(zhí)行設(shè)備的接口形式多樣、數(shù)據(jù)集成難度大等問題,既有針對PLC使用的穩(wěn)定可靠的I/O驅(qū)動,也有大量使用API函數(shù)設(shè)計的通信程序,并使用腳本語言直接完成實時數(shù)據(jù)與情報板的通信。通過系統(tǒng)實際調(diào)試運行驗證了該設(shè)計方案的可行性。
1 監(jiān)控系統(tǒng)的構(gòu)成
某高速公路的一個機電標段中包含多條隧道,每個隧道采用了7~8套OMRON公司CS1D-S系列的PLC,并配有以太網(wǎng)模塊。這些PLC負責車道指示器、汽通門、風機、照明燈、水泵等開關(guān)量的輸入/輸出,照度、一氧化碳(CO)、能見度(VI)、風速(TW)等模擬量的輸入。該機電標段,還包含了雷達車輛檢測儀28臺,各種規(guī)格的情報信息標志35套,還有3套能見度檢測儀和3套氣象數(shù)據(jù)檢測儀。所有這些設(shè)備分布在大約200 km高速公路沿線收費站和服務(wù)區(qū)的附近路段,并且通過RS-232接口,先用光纖傳輸?shù)骄徒母鱾€收費站或者服務(wù)區(qū)的機房內(nèi),再接入串口服務(wù)器,然后進入由光纖構(gòu)成的以太網(wǎng)。其網(wǎng)絡(luò)結(jié)構(gòu)框圖如圖1所示。
這些現(xiàn)場設(shè)備通常不采用標準的MODBUS協(xié)議,無法通過組態(tài)軟件的I/O驅(qū)動獲取數(shù)據(jù),只能通過用戶編寫通信程序與其進行數(shù)據(jù)交換。
2 監(jiān)控系統(tǒng)軟件設(shè)計
本文采用iFIX2.6的浙大中控OEM版Sview2.6,該軟件的腳本語言是Microsoft VBA6.0,與VB6.0相比,Sview2.6除了不能編譯成獨立的可執(zhí)行程序外,其他的編程語法、語句及調(diào)試方法等功能兩者基本相同。
2.1 實時數(shù)據(jù)庫的建立
運行iFIX軟件,打開Sview數(shù)據(jù)庫管理器。從菜單欄選擇“驅(qū)動器”,打開“OMF”,對驅(qū)動程序進行設(shè)置和添加PLC站點,并為每個站點定義數(shù)據(jù)塊。驅(qū)動程序以數(shù)據(jù)塊的形式與PLC交換數(shù)據(jù),這是一種高效的通信方式;同時,在PLC編程時,對于要組態(tài)的數(shù)據(jù),盡量集中存放,避免過多的數(shù)據(jù)塊。在數(shù)據(jù)庫中添加標簽,要注意“I/O地址”的輸入格式,如圖2所示。
2.2 建立控制系統(tǒng)主畫面
在iFIX工作臺中,建立所需要的各個畫面,并鏈接動畫。如果需要報警,則在建立實時數(shù)據(jù)庫時,設(shè)置好報警條件,然后在畫面中增加報警控件;如果需要曲線,則啟動歷史定義程序,定義好要儲存的歷史數(shù)據(jù),并在后臺啟動歷史儲存程序,然后在畫面中增加曲線顯示控件[6]。到此,作為一般性的組態(tài)任務(wù)基本完成。
考慮到通信程序必須和監(jiān)控軟件始終同時運行,而且腳本程序通常是畫面文件的一部分,因此在畫面設(shè)計時,做成了上(占12%)、下(占88%)兩部分。其中上部是始終運行,下部則可以通過上部的切換按鈕,進行畫面切換。上部畫面稱之為“主菜單”,并在此畫面的代碼中編寫通信程序,如圖3所示。
2.3 實時通信的實現(xiàn)
微波車輛檢測器設(shè)置為每分鐘自動發(fā)送一幀數(shù)據(jù);氣象和能見度檢測則先發(fā)送命令,然后讀取數(shù)據(jù)。所有的串口服務(wù)器,在監(jiān)控計算機上映射為虛擬的串口。微軟的MSComm控件是被廣泛應(yīng)用于串口通信的控件,但由于MSComm控件只能支持最多16個串口,故不適合在本系統(tǒng)的環(huán)境中使用。為此,本系統(tǒng)嘗試使用API函數(shù)實現(xiàn)串口通信。API函數(shù)的聲明是:可以使用VB的API文本瀏覽器,復制到iFIX項目中。使用API初始化串口步驟如下:
(1)調(diào)用CreateFile創(chuàng)建句柄,如果結(jié)果大于0,可以進入下一步,否則中止。
(2)調(diào)用GetCommState取得設(shè)備參數(shù),根據(jù)實際需要修改其中部分參數(shù)(如波特率、校驗、數(shù)據(jù)位和停止位等)。
(3)調(diào)用SetCommState設(shè)置修改后的設(shè)備參數(shù)。
(4)調(diào)用SetCommTimeouts設(shè)置超時參數(shù),其中ReadIntervalTimeout須設(shè)置為-1(即為16進制FFFFFFFF)。
(5)調(diào)用SetupComm設(shè)置輸入/輸出緩沖區(qū)大小。
至此,串口的初始化完成,然后可以定時接收(ReadFile)和發(fā)送(WriteFile)數(shù)據(jù)了。CloseHandle則用于關(guān)閉串口。串口初始化和能見度、氣象儀程序流程圖如圖4所示。
能見度和氣象儀共6套,利用一個500 ms定時器,輪流進行數(shù)據(jù)收發(fā),數(shù)據(jù)刷新周期為3 s。采用的通信方式是先接收,對數(shù)據(jù)長度和頭尾幾個字節(jié)進行校驗,若校驗符合,則進行數(shù)據(jù)處理,然后發(fā)送讀命令。能見度接收數(shù)據(jù)長度為22 B,其中15 B~18 B為單精度浮點數(shù)。數(shù)據(jù)處理采用API函數(shù)CopyMemory,采用傳遞地址的方式,把字節(jié)數(shù)組中的內(nèi)容復制到一個單精度變量中(如按照IEEE 754標準進行換算,但計算紛繁復雜),然后把這個單精度變量的內(nèi)容寫到iFIX實時數(shù)據(jù)庫標簽中(標簽的I/O地址采用SIM驅(qū)動器的地址空間)。
2.4 情報信息標志通信的實現(xiàn)
考慮到情報信息標志為非實時刷新,因此采用Access數(shù)據(jù)庫來保存每塊信息標志有關(guān)的內(nèi)容。當程序打開時,自動讀取數(shù)據(jù)庫中的所有記錄,并把其中的關(guān)鍵信息添加到“選擇對象”ComboBox中。當用戶在復合框選擇一塊信息標志時,程序從數(shù)據(jù)庫中讀取該信息標志的有關(guān)信息及上次發(fā)送的內(nèi)容,并顯示給用戶。當用戶成功下載內(nèi)容到信息標志時,把相關(guān)內(nèi)容更新到數(shù)據(jù)庫中。
在VBA中處理漢字的方法是:一個漢字為一個字符,可以使用MID()函數(shù)截取一個字符,然后用ASC()函數(shù)取得該字符的值,如果是漢字,則該值為負數(shù),否則為正數(shù)。該負值加65 536,得到該漢字的雙字節(jié)機內(nèi)碼,整數(shù)除256得到高字節(jié),取模256得到低字節(jié)。
如圖5所示,畫面右下角的“高級功能”按鈕用于啟動情報信息標志設(shè)備廠家專用軟件。雖然設(shè)備廠家軟件功能齊全,但從使用結(jié)果來看,本文開發(fā)的系統(tǒng)響應(yīng)速度快,一個請求過程平均耗時在0.1~0.6 s之間(包括數(shù)據(jù)庫的處理時間、通過日志記錄的數(shù)據(jù)計算),而情報信息標志設(shè)備廠家專用軟件正常情況下處理時間需10 s左右,有時還有錯誤的響應(yīng)(如網(wǎng)絡(luò)不通),但顯示狀態(tài)仍為正常等現(xiàn)象。
以iFIX為平臺開發(fā)的高速公路及其隧道項目數(shù)據(jù)監(jiān)控系統(tǒng)已投入正常運行,并取得了比較滿意的效果,系統(tǒng)運行穩(wěn)定可靠、占用資源小、維護方便。使用組態(tài)軟件開發(fā)隧道監(jiān)控系統(tǒng),能夠充分發(fā)揮組態(tài)軟件靈活多樣的組態(tài)功能;同時使用大量的VBA6.0腳本語言編寫通信程序,解決了組態(tài)軟件數(shù)據(jù)集成難度大的問題,提高了系統(tǒng)運行效率,降低了系統(tǒng)的開發(fā)成本。
參考文獻
[1] 王志偉,楊超.高速公路隧道監(jiān)控系統(tǒng)的現(xiàn)狀與發(fā)展[J]. 現(xiàn)代隧道技術(shù),2009,46(6):8-16.
[2] 趙忠杰,陳井偉,朱斌.基于PLC網(wǎng)絡(luò)的公路隧道測控系統(tǒng)實現(xiàn)[J].微計算機信息,2007,23(1):43-44.
[3] 袁向陽,鄭宏,孟峰.基于PLC的高速公路隧道監(jiān)控系統(tǒng)及其數(shù)據(jù)集成[J].電氣應(yīng)用,2006,8(4):34-39.
[4] 周曉軍,劉洪亮,胡康.WinCC及S7-300在電封閉交流傳動測試臺中的應(yīng)用[J].控制工程,2010,17(5):655-657.
[5] 鐘路,戴遠.城市隧道監(jiān)控系統(tǒng)的集成設(shè)計[J].武漢理工大學學報,2010,32(15):119-122.
[6] 浙大中控.Sview2.6電子手冊[Z].2003.