文獻標識碼: A
文章編號: 0258-7998(2011)02-0085-03
由于隧道的相對封閉性和其中行車環境的復雜性,要保障其安全運營存在一定的復雜性。尤其對于高速公路中的長隧道(長度介于1 km和3 km之間)和超長隧道(長度高于3 km),由于車速高、流量大以及通風等問題的存在,隧道中容易累積汽車尾氣中的CO、氮氧化物等有害氣體。另外,隧道中還可能因為照明故障、能見度低等問題的產生導致交通事故的發生。為保證隧道的運營安全,避免造成安全事故和重大經濟損失,應對隧道配備完善的環境參數監控系統。
本文介紹的隧道環境監控系統,利用區域控制部分的實時監控技術對各監控點的照明亮度、能見度、CO濃度、煙霧濃度等參數進行采集、監測,并根據這些參數控制相關的交通燈、應急燈、LED交通指示牌、限速牌以及報警裝置。然后通過現場總線將各節點的參數和報警信號發送至本地監控中心,由本地控制中心對各區域控制模塊進行調度。本地控制中心還將這些參數通過以太網發送至遠程監控終端處,在終端上遠程監控隧道的環境參數。
1 系統總體結構
系統的總體結構如圖1所示。系統主要包括區域控制部分、本地控制中心和遠程監控終端。
安裝在隧道中的區域控制部分采用CAN總線分布式數據采集控制方式。當系統啟動后,各環境參數監測點開始采集環境參數,并在接收到發送數據命令后將數據傳送至CAN總線。在區域控制模塊接收處理數據后會控制報警器等相關設備。
由于CAN總線協議不對節點進行地址編碼,而是采用對通信數據塊進行編碼的方式,這使得CAN總線上的節點數量理論上幾乎不受限制[2]。然而實際上,由于存在電氣特性上的限制,CAN總線上節點數量不宜超過100個。因此各個區域控制模塊與本地控制中心使用另一條CAN總線進行數據通信。區域控制模塊在采集到環境參數并做出控制動作后會將參數打包通過CAN總線發送至本地控制中心的工控機。本地控制中心如收到某個區域控制部分的報警信號,會根據報警信號類型對該區域控制部分前方的各區域控制部分做出控制,提前預警車輛隧道前方通行環境存在問題。
遠程控制終端通過客戶端的顯示程序顯示出由本地控制中心發送的隧道環境參數,并將參數保存在數據庫,以實現歷史數據的存儲。
2 系統硬件設計
整個系統硬件部分包括由區域控制模塊和各環境參數測量模塊組成的區域控制部分、本地控制中心的工控機以及監控終端。其中關鍵部分為區域控制部分,本文將對這部分進行重點介紹。
區域控制模塊選用意法半導體公司的STM32F105RCT6為控制核心,它是采用ARM Cortex-M3為內核的32位高性能嵌入式微處理器。它集成了兩個CAN控制器,并為每個CAN控制器分配了256 B的SRAM,每個CAN控制器有三個發送郵箱和兩個接收FIFO[1]。模塊的其他外設包括用于CAN總線信號收發的CAN收發器,用于顯示當前環境參數的點陣液晶,用于實現基本控制功能的按鍵等。區域控制模塊的硬件框圖如圖2所示。
區域控制模塊中CAN總線接口電路由STM32F105RCT6中內置的CAN控制器和CAN收發器SN65HVD230D組成。STM32F105RCT6的PA11/CAN1_RX和PA12/CAN1_TX為CAN1控制器接口,將其與CAN收發器連接后接入與各測量模塊相連的CAN總線中;PB12/CAN2_RX和PB13/CAN2_TX為CAN2控制器接口,將其與CAN收發器連接后接入與其他區域控制部分及本地控制中心相連的CAN總線中。
能見度測量模塊由能見度檢測儀和控制模塊組成。能見度檢測儀能將檢測到的能見度值通過RS232發送至控制模塊。當區域控制模塊向能見度測量模塊中的控制模塊請求數據時,控制模塊會使能見度檢測儀通過RS232向控制模塊發送數據,并轉換成CAN數據包發送至CAN總線。其他測量模塊工作模式與能見度測量模塊相同。
3 區域控制模塊軟件設計
由于區域控制部分在測量環境參數以及控制相應設施方面對實時性和穩定性要求,區域控制模塊選擇使用μC/OS-II管理控制任務的調度。μC/OS-II是一個專為嵌入式應用設計,基于優先級調度的搶占式實時操作系統內核,它包含了任務調度、任務管理、時間管理/任務間通信與同步等功能。各任務之間通過信號量、郵箱和消息隊列實現相互間的數據交換和同步[3]。
根據區域控制模塊在系統中的作用,嵌入式操作系統中應實現多個不同優先級的控制任務。這些任務按照優先級由高到低分別為:接收本地控制中心調度;接收按鍵控制;采集環境參數;控制相關設備;顯示環境參數;發送數據到本地控制中心。對于區域控制系統來說,本地控制中心的調度命令決定著它的系統設置,因此需要把接受本地控制中心調度任務分配到相對最高的優先級。其他任務也根據相對的重要性和執行順序分配相應的優先級。系統啟動流程圖如圖3所示。
硬件初始化程序負責初始化芯片的系統時鐘、中斷向量、I/O配置、CAN配置等。操作系統初始化程序負責初始化任務的空閑鏈表和使用鏈表、時鐘管理等。在啟動任務調度之前需利用OSTaskCreate()函數創建需要使用的任務,設置不同任務的堆棧區和優先級。然后使用OSStart()函數開始多任務調度。多個任務之間需要共享環境參數,因此在任務創建之前分配一塊共享內存以供任務間數據通信。以下重點介紹環境參數采集任務和控制設備任務的軟件實現。
環境參數采集任務和控制設備任務中CAN總線使用CAN 2.0B協議,波特率設置為250 kb/s。STM32F105RCT6的CAN控制器中包含28個共享的可配置標識符過濾器組。通過過濾器組的設置,配合使用不同的接收FIFO寄存器,可以在硬件上設置區分不同標識符的報文。每收到一幀報文,首先與過濾器組中設置的報文ID進行比較。報文如果與過濾器組中設置的環境參數報文的ID匹配則將報文送入接收FIFO0寄存器,如果與過濾器組中控制報文的ID匹配則將報文送入接收FIFO1寄存器,如果都不匹配,則認定此報文為垃圾報文,直接丟棄。
環境參數采集采用輪詢的方式,由區域控制模塊輪詢請求各數據采集點的數據,輪詢時間間隔為1 s,輪詢由任務延時函數OSTimeDLY()實現。在接收到所有環境參數采集點的數據后,這些參數將被存入共享內存。接著通過OSTimeDLY()函數的調用,實現將當前任務掛起,并延時時鐘節拍1 s,然后調用OSSched()進行任務重新調度。在指定的時鐘節拍到來之后,當前任務會被恢復為就緒狀態。環境參數采集任務流程圖如圖4所示。
控制設備任務的優先級僅次于環境參數采集任務,在環境參數采集任務被掛起后運行。控制設備任務首先訪問讀取共享內存區的環境參數,根據閾值判斷是否對各控制設備做出動作。在結束動作之后,本任務也會調用OSTimeDLY()函數掛起自己以實現下一優先級任務的運行。
接收本地控制中心調度任務和按鍵控制任務在創建之后就通過調用OSTaskSuspend()函數進入掛起狀態,當接收到調度命令和按鍵中斷以后,才會通過調用OSTaskResume()函數恢復任務,實現任務的執行。
本文給出了基于CAN總線的隧道環境監控系統的軟硬件設計方法。系統中區域控制模塊采用高性能嵌入式微處理器和嵌入式實時操作系統為核心,并使用穩定的工業現場總線,保證了系統的高可靠性和高實時性,滿足了隧道環境的監控需求。
參考文獻
[1] 王永虹,徐煒,郝立平.STM32系列ARM Cortex-M3微控制器原理與實踐[M].北京:北京航空航天大學出版社,2008.
[2] 饒運濤,鄒繼軍,鄭勇蕓.現場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2003.
[3] 肖圣兵,肖紅菊.μC/OS-II 在ARM Cortex-M3處理器上的移植[J].電子技術,2010(7):54-55,51.