馮興林
(云南省交通科學(xué)研究所,云南 昆明 650011)
在高速公路監(jiān)控中,數(shù)據(jù)采集分為兩種方式,即:自動采集方式和非自動事件檢測方式。自動采集方式是在后臺自動進(jìn)行的數(shù)據(jù)采集,不需要人工干預(yù),采集過程對于監(jiān)控人員來說是透明的。非自動事件檢測方式是指監(jiān)控人員通過道路監(jiān)視或緊急電話等確認(rèn)交通事件,或交利用人工觀測的方式獲得氣象情況,并在前臺人機(jī)交互界面輸入交通事件信息和氣象信息,存入到數(shù)據(jù)庫業(yè)中去。因?yàn)榉亲詣邮录z測方式較為簡單,本文就不再詳述,下面將詳細(xì)介紹數(shù)據(jù)自動采集方式。數(shù)據(jù)自動采集,一般主要涉及的設(shè)備有:外場設(shè)備、通信設(shè)備、串口設(shè)備和通信計(jì)算機(jī)。在一般高速公路監(jiān)控系統(tǒng)中,外場設(shè)備主要有車輛檢測器、氣象檢測器、能見度檢測器、可變信息標(biāo)志 (包括小型可變信息標(biāo)志)、可變限速標(biāo)志等;通信設(shè)備一般采用MODEM(調(diào)制解調(diào)器)和其它數(shù)據(jù)傳輸設(shè)備;串口設(shè)備一般采用多串口卡。
高速公路交通流參數(shù)實(shí)時(shí)數(shù)據(jù)的采集主要是通過車輛檢測器來實(shí)現(xiàn)的。車輛檢測器的環(huán)行線圈埋設(shè)在道路表面下,并與車輛檢測器控制器相連;當(dāng)車輛通過時(shí),通過線圈電磁場的變化來對車輛進(jìn)行檢測;來自傳感器的信號由設(shè)置在路旁的微處理器進(jìn)行計(jì)算,得出各個(gè)車道的平均車速、最高車速、最低車速、車流量、車道占有率和車頭時(shí)距等。
氣象檢測器由多種傳感器(溫度、濕度、風(fēng)向、風(fēng)速、雨量、能見度、路面狀況)、數(shù)據(jù)采集器和控制器等組成,各種傳感器由敏感元件和轉(zhuǎn)換電路組成。數(shù)據(jù)采集器是一種智能性采集器,它采集各種傳感器的電信號。氣象檢測器控制器進(jìn)行數(shù)據(jù)的預(yù)處理。能見度檢測器與氣象檢測器數(shù)據(jù)采集過程相同,但它只能檢測能見度。
可變信息標(biāo)志是高速公路監(jiān)控系統(tǒng)向過往車輛發(fā)布交通信息、通告的主要設(shè)備??勺冃畔?biāo)志分為大型可變信息標(biāo)志和小型可變信息標(biāo)志,其中大型可變信息標(biāo)志模組數(shù)一般為10或12,安裝在高速公路上方的龍門架上,可顯示圖形和文字;小型信息標(biāo)志體積較小,安裝在路旁,可顯示1個(gè)圖形或4個(gè)漢字??勺冃畔?biāo)志的控制器采集當(dāng)前顯示信息和故障信息。
可變限速標(biāo)志安裝在高速公路的路旁,當(dāng)天氣惡劣、發(fā)生交通事故或其它異常情況時(shí),控制室及時(shí)發(fā)布限速標(biāo)志的顯示內(nèi)容,限制車速,確保高速公路行車安全和交通流暢;同時(shí),可變限速標(biāo)志的控制器可反饋顯示內(nèi)容及故障信息。
上述外場設(shè)備采集到自身檢測出的數(shù)據(jù)后,控制器先進(jìn)行處理,然后通過控制器上的RS232、485、422等接口,經(jīng)通信系統(tǒng)將數(shù)據(jù)上傳至監(jiān)控室的通信計(jì)算機(jī)。
數(shù)據(jù)傳輸和采集設(shè)備一般主要包括MODEM、子速率板和串口設(shè)備等。
在高速公路監(jiān)控中一般應(yīng)采用專線MODEM。MODEM主要是用以延伸計(jì)算機(jī)數(shù)字信號傳輸?shù)木嚯x。
MOEDM將計(jì)算機(jī)送來的數(shù)字信號調(diào)制成載波信號(模擬信號),調(diào)制后的載波信號通過通訊信道送到控制室,由上位MODEM將接收到的載波信號解調(diào)成數(shù)字信號,最后送給通信計(jì)算機(jī)處理。
若外場設(shè)備和通信計(jì)算機(jī)之間的距離較小,外場設(shè)備和通信計(jì)算機(jī)之間直接用一對MODEM就可以 實(shí)現(xiàn)數(shù)據(jù)傳輸;若距離超出了MODEM的最大傳輸距離,這時(shí)必須添加其它數(shù)據(jù)傳輸設(shè)備,例如子速率板。子速率板也是成對使用的,上位端一般在監(jiān)控室附近的通信機(jī)房,下位端在通信站。外場設(shè)備一般位于某個(gè)立交(收費(fèi)站)附近,距離立交一般在幾公里以內(nèi),可在立交附近可設(shè)立通信站。一對子速率板可提供多個(gè)數(shù)據(jù)傳輸通道,一般采用異步傳輸模式。串口設(shè)備一般采用多串口卡。多串口卡技術(shù)較為成熟,且多串口卡成本較低,便于維護(hù)。多串口卡安 裝在通信計(jì)算機(jī)PCI插槽里,外接串口盒。每塊多串口卡一般最多支持32個(gè)串口或64個(gè)串口。
軟件功能及實(shí)現(xiàn)
3.1 數(shù)據(jù)采集軟件的主要功能
數(shù)據(jù)采集軟件實(shí)現(xiàn)的主要功能有:外場設(shè)備數(shù)據(jù)輪詢、控制命令的執(zhí)行、更改輪詢周期、進(jìn)程的開啟關(guān)閉、通信配置等。數(shù)據(jù)采集軟件運(yùn)行在通信計(jì)算機(jī)上。
外場設(shè)備數(shù)據(jù)輪詢模塊主要對外場設(shè)備進(jìn)行數(shù)據(jù)采集。所謂輪詢是指依次通過串行口與外場設(shè)備通信,取得外場設(shè)備采集的數(shù)據(jù)的過程。輪詢周期是指相鄰兩次輪詢開始時(shí)刻的時(shí)間間隔。數(shù)據(jù)輪詢模塊以輪詢周期為時(shí)間間隔進(jìn)行外場設(shè)備數(shù)據(jù)的采集,取得外場設(shè)備的故障信息、當(dāng)前信息和校時(shí)信息,并且存人數(shù)據(jù)庫中。
控制命令的執(zhí)行模塊在一個(gè)通信端口監(jiān)測著多媒體計(jì)算機(jī)發(fā)送過來的控制命令,若接收到控制命令,數(shù)據(jù)驗(yàn)證合格后,向相關(guān)設(shè)備發(fā)送控制命令,主要是可變信息標(biāo)志、可變限速標(biāo)志的開啟、關(guān)閉、編輯、調(diào)光等,以及所有外場設(shè)備的故障檢測,并將處理結(jié)果返回給發(fā)送方。
更改輪詢周期模塊設(shè)置套接字,監(jiān)聽下發(fā)的系統(tǒng)參數(shù)。如收到更改輪詢周期的有關(guān)數(shù)據(jù),則對輪詢周期進(jìn)行相應(yīng)的處理,并將處理結(jié)果返回給發(fā)送方。
進(jìn)程的開啟關(guān)閉。采用Windows NT的多進(jìn)程服務(wù)機(jī)制,將輪詢模塊作為Windows NT的服務(wù)進(jìn)行啟動和運(yùn)行。服務(wù)程序在系統(tǒng)安裝時(shí)向windows NT服務(wù)管理器注冊,所有服務(wù)進(jìn)程均采用手工啟動的方式。監(jiān)控人員可通過人機(jī)交互界面發(fā)出開啟與關(guān)閉服務(wù)進(jìn)程命令來實(shí)現(xiàn),也可使用windowsNT服務(wù)管理器來控制進(jìn)程的開啟與關(guān)閉。
通信配置模塊提供一個(gè)人機(jī)交互界面,通過該界面可完成對數(shù)據(jù)采集系統(tǒng)的通信配置,配置內(nèi)容有:串口行、波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)、外場設(shè)備代碼等。
3.2 軟件實(shí)現(xiàn)
數(shù)據(jù)采集軟件在設(shè)計(jì)和開發(fā)中,除考慮滿足業(yè)務(wù)需求外,著重考慮穩(wěn)定性和高效性。在系統(tǒng)分析與設(shè)計(jì)方法上,采用面向?qū)ο蟮姆治雠c設(shè)計(jì)方法,這樣降低了系統(tǒng)結(jié)構(gòu)的復(fù)雜度,提高了代碼的可重用性和可維護(hù)性。通信計(jì)算機(jī)采取的操作系統(tǒng)為廣泛使用的Windows NT操作系統(tǒng),數(shù)據(jù)庫采用大型關(guān)系數(shù)據(jù)庫,網(wǎng)絡(luò)通信協(xié)議采用TCP/IP協(xié)議。
在數(shù)據(jù)采集系統(tǒng)中,外場設(shè)備數(shù)據(jù)輪詢模塊是最重要、也是開發(fā)難度最大的模塊,因此下面將主要介紹該模塊的軟件實(shí)現(xiàn),以及數(shù)據(jù)采集系統(tǒng)中的關(guān)鍵技術(shù)、開發(fā)工具的選擇。
外場設(shè)備數(shù)據(jù)輪詢模塊的實(shí)現(xiàn)。外場設(shè)備數(shù)據(jù)輪詢模塊首先初始化輪詢對象列表,用于保存關(guān)于輪詢對象(外場設(shè)備)信息的表;創(chuàng)建定時(shí)器,并從數(shù)據(jù)庫中取得輪詢周期賦予定時(shí)器;等待時(shí)間為輪詢周期時(shí),定時(shí)器啟動,通信計(jì)算機(jī)向外場設(shè)備依次發(fā)送數(shù)據(jù)上傳指令;發(fā)出的指令主要有讀取故障信息、讀取當(dāng)前信息和更改設(shè)備時(shí)間等,其中讀取故障信息和讀取當(dāng)前主交通數(shù)據(jù)命令是在每次輪詢都要進(jìn)行,更改設(shè)備時(shí)間只在零點(diǎn)進(jìn)行。發(fā)出讀取數(shù)據(jù)指令后,按照設(shè)置的等待時(shí)間進(jìn)行等待;接收到數(shù)據(jù)后,軟件進(jìn)行數(shù)據(jù)解包,通過數(shù)據(jù)合法性校驗(yàn)的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫,若未通過合法性校驗(yàn),則給出提示信息,并記錄到日志中。在輪詢結(jié)束時(shí),發(fā)送輪詢結(jié)束事件,以便監(jiān)控系統(tǒng)處理其它業(yè)務(wù)。
軟件實(shí)現(xiàn)中的關(guān)鍵技術(shù)。數(shù)據(jù)采集軟件主要采用了如下技術(shù)和策略:
1)Win32串口通信技術(shù)
Win32下串口通信與16位串口通信有很大的區(qū)別。在Win32下,可以使用兩種編程方式實(shí)現(xiàn)串口通信,其一是調(diào)用Windows的API函數(shù),其二是使用串口通信類或ActiveX控件。在本文的數(shù)據(jù)采集中采取調(diào)用Windows的API函數(shù)方式。使用API函數(shù)調(diào)用,需要清楚地掌握串口通信的機(jī)制,熟悉各種配置,對軟件開發(fā)人員的開發(fā)能力要求較高,但可以自由靈活地實(shí)現(xiàn)串口通信。
2)Socket網(wǎng)絡(luò)編程技術(shù)
在更改論詢周期和控制命令執(zhí)行模塊中,采用Socket網(wǎng)絡(luò)編程技術(shù),分別在不同端口監(jiān)聽數(shù)據(jù),一旦接收到數(shù)據(jù)就對數(shù)據(jù)進(jìn)行及時(shí)處理。在輪詢結(jié)束時(shí),也利用Socket網(wǎng)絡(luò)編程,發(fā)送輪詢結(jié)束信息,從而讓服務(wù)器及時(shí)進(jìn)行數(shù)據(jù)發(fā)送和自動控制的執(zhí)行。Socket網(wǎng)絡(luò)編程技術(shù)保證了在不同計(jì)算機(jī)上運(yùn)行的多個(gè)進(jìn)程之間的相互通信,從而及時(shí)進(jìn)行相業(yè)務(wù)的處理,使整個(gè)監(jiān)控系統(tǒng)成為有機(jī)的一個(gè)整體。
3)注冊表技術(shù)
注冊表是為Windows NT等所有32位硬件驅(qū)動和32位應(yīng)用程序設(shè)計(jì)的數(shù)據(jù)文件。運(yùn)行一個(gè)應(yīng)用程序時(shí),可以從注冊表中獲得配置信息。在注冊表中設(shè)置通信配置信息具有讀取速度快、配置靈活等優(yōu)點(diǎn)。因此,數(shù)據(jù)采集系統(tǒng)通過通信配置界面,將每個(gè)串口的配置信息記錄在注冊表的相應(yīng)位置,包括設(shè)備代碼、設(shè)備種類、波特率、校驗(yàn)位、數(shù)據(jù)位、停止位、等待時(shí)間等。注冊表技術(shù)的應(yīng)用,提高了程序的運(yùn)行效率。
4)多線程機(jī)制與線程同步
在Win32操作系統(tǒng)中,每個(gè)進(jìn)程可以同時(shí)執(zhí)行多個(gè)線程,進(jìn)程中的線程是并行執(zhí)行的,每個(gè)線程占
用CPU的時(shí)間由系統(tǒng)劃分,系統(tǒng)不停的在各個(gè)線程之間切換。由于系統(tǒng)為每個(gè)線程劃分的時(shí)間片很小(20毫秒左右),所以看上去好象是多個(gè)線程在同時(shí)運(yùn)行。數(shù)據(jù)采集采用多線程機(jī)制,將實(shí)時(shí)數(shù)據(jù)輪詢、更改輪詢周期、控制命令的執(zhí)行等幾個(gè)線程同時(shí)執(zhí)行,只不過是更改輪詢周期、控制命令的執(zhí)行在大部分時(shí)間里是在相應(yīng)端口等待數(shù)據(jù)的到來。
線程同步的目的是避免兩個(gè)線程同時(shí)操作同一個(gè)共享資源。在數(shù)據(jù)采集中有很多地方需要線程同步,例如對串口操作部分、錯(cuò)誤提示信息向操作界面的輸出等。數(shù)據(jù)采集系統(tǒng)中使用的線程同步方法包括利用線程阻塞其自身執(zhí)行的等待函數(shù)、沖突臨界區(qū)、互斥量等。多線程機(jī)制與線程同步的運(yùn)用,節(jié)省了系統(tǒng)資源,提高了數(shù)據(jù)采集的效率,同時(shí)保證了各種操作不會相互沖突。
5)計(jì)時(shí)器的使用
可等待的計(jì)時(shí)器是在特定時(shí)間或固定的時(shí)間間隔使自己有信號的內(nèi)核對象。外場設(shè)備數(shù)據(jù)輪詢程序創(chuàng)建可等待的計(jì)時(shí)器,對采樣周期采用定時(shí)器進(jìn)行精確定時(shí)。每次論詢不僅需要等到定時(shí)器信號到來,同時(shí)需要上次輪詢結(jié)束信號的到來,這樣保證了相鄰兩次輪詢不會出現(xiàn)沖突,并且使輪詢時(shí)間控制得較為準(zhǔn)確。
6)統(tǒng)一的接口協(xié)議
可變信息標(biāo)志、可變限速標(biāo)志、車輛檢測器等外場設(shè)備可由多個(gè)供應(yīng)商提供。在實(shí)施過程中,要求這些供應(yīng)商的設(shè)備都執(zhí)行統(tǒng)一的接口協(xié)議,這樣系統(tǒng)就具有與設(shè)備無關(guān)性,系統(tǒng)的擴(kuò)展性較強(qiáng)。
7)日志管理
日志包括操作日志和異常信息日志。各種操作都記錄在日志中,便于日后明確責(zé)任。在數(shù)據(jù)采集過程中,可能有多種異常情況出現(xiàn),例如設(shè)備未返回信息、返回的信息格式不正確或不完整、數(shù)據(jù)庫無法連接等。在出現(xiàn)異常情況下,系統(tǒng)自動將異常信息記錄到相應(yīng)日志文件中,以備日后查詢。
在軟件開發(fā)中,選擇一種合適的編程語言,可以大大加快工作效率,并且對軟件開發(fā)的難易程度也有很大的影響。數(shù)據(jù)采集系統(tǒng)過去一般是在DOS操作系統(tǒng)下應(yīng)用匯編語言開發(fā)的。Windows操作系統(tǒng)的普及應(yīng)用,尤其是可視化開發(fā)軟件Visual C++的出現(xiàn),為軟件開發(fā)提供了強(qiáng)大的圖形界面功能,使得開發(fā)出來的應(yīng)用程序具有良好的人機(jī)交互功能,并且程序運(yùn)行速度快、效率高。因此,在進(jìn)行高速公路監(jiān)控系統(tǒng)時(shí),可采用Visual C++來開發(fā)遠(yuǎn)程數(shù)據(jù)采集軟件。
本文主要論述了高速公路監(jiān)控系統(tǒng)中數(shù)據(jù)采集的方式、遠(yuǎn)程數(shù)據(jù)采集軟件的功能及實(shí)現(xiàn)、應(yīng)用效果等。應(yīng)用實(shí)踐表明:本文論述的遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)是可行的、有效的,在高速公路監(jiān)控領(lǐng)域具有較高的推廣價(jià)值。