韓翠翠
(國家廣電總局 北京地球站,北京 102206)
所謂的自動控制,就是用計算機來代替人工根據指令進行一些操作,目前自動控制系統已經由單一的小系統逐步轉變成集成的能夠獨立的完成整套工作任務的大型系統。在這些大型的集成性的自動控制系統中,我們經常碰到要求各分系統在同一時間同時執行某些動作,從而共同來完成一項大的工作的情況,這就遇到了怎樣才能夠做到各個分系統的時間準確、一致,怎樣完美而準確的完成任務的問題。
例如廣播傳輸發射自動控制系統,該系統主要由局控制平臺、臺控制平臺、節目傳輸控制平臺、發射機自動控制、天線交換開關控制等幾部分組成。局控制平臺主要下發每天的節目運行時間表,經臺控制平臺接收后下發到節目傳輸控制平臺、節目傳輸控制平臺將節目運行時間表下發到發射機自動控制和天線交換開關自動控制。每天的廣播節目運行就是發射機自動控制系統按照節目運行時間表上高壓,發射傳輸節目信號,天線交換開關自動控制系統按照節目運行時間表倒換所需頻段的天線,兩者配合才能達到廣播節目每天按運行時間表自動運行的工作任務。如圖1所示。
這中間的問題非常明顯,就是發射機在上高壓之前,天線交換開關自動控制系統必須將所需的天線到換到位,但是天線交換開關倒換天線的必要條件是上一個結束的節目所用的天線高壓已落,即不能帶高壓倒換天線。如果這些問題都僅僅依靠時間的統一性來解決,勢必會遇到很多麻煩。

圖1 廣播傳輸發射自動控制系統工作流程圖
在本系統未集成之前,每一部分的自動控制都是一個獨立的分系統,都有自己的一套時間系統。每個系統都按照自己的時間來執行工作指令。例如,發射機會按照調度令在某一時間結束一個節目,然后開始一個新的節目傳輸。天線交換開關也會按照調度令在某一時間自動倒換天線。初步看起來似乎可以自動運行,實際不然。每一個系統都有自己的一個時間,如果這兩個時間差別比較大,即誤差比較大,那么兩套系統的運行就很難成功,或者說,要求人工參與的部分就很大,通過人工的干預來實現系統可能失敗的部分。例如高壓未落的通過手動落高壓,天線未到位的手動倒天線,這樣的自動化系統就失去了自動的意義。
要想解決這個問題,不難看出,時間的準確性在這中間起著非常重要的作用,如果時間能夠非常準確,那么發射機自動化可以實現準點落高壓,天線交換開關自動化可以準點倒換天線到位,發射機自動化就可以準點上高壓,實現調度令的時間運行表得到準確執行。
那么,是不是這么簡單就可以實現呢。
我們目前采用的辦法是從局廣播傳輸發射自動控制系統下發校時的指令,下級的控制系統接到指令后在實現自身校時的同時,將校時指令向下轉發,即實現自上而下的校準時間。
然而這個方法的實現效果卻不盡如人意。為什么呢?
目前的集成系統一般采用以太網星型結構,如圖2所示,在最下級的工控機與PLC 可能有串口,但是大部分系統都體現了雙絞線的網絡模型,所以這中間的時間差就是網線傳輸與系統反應時間的和。這個時間,并不容易把握,網絡會有擁堵的現象,系統的反應時間也會因系統的性能以及實時的工作情況有關。

圖2 星型結構的以太網模型
當今居于主導地位的局域網技術-以太網。以太網是建立在CSMA/CD 機制上的廣播型網絡。沖突的產生是限制以太網性能的重要因素,早期的以太網設備如集線器是物理層設備,不能隔絕沖突擴散,限制了網絡性能的提高。而交換機(網橋)做為一種能隔絕沖突的二層網絡設備,極大的提高了以太網的性能。正逐漸替代集線器成為主流的以太網設備。然而交換機(網橋)對網絡中的廣播數據流量則不做任何限制,這也影響了網絡的性能。通過在交換機上劃分VLAN 和采用三層的網絡設備-路由器解決了這一問題。以太網做為一種原理簡單,便于實現同時又價格低廉的局域網技術已經成為業界的主流。而更高性能的快速以太網和千兆以太網的出現更使其成為最有前途的網絡技術。
目前以太網一般采用星型拓撲結構,管理方便、容易擴展、需要專用的網絡設備作為網絡的核心節點、需要更多的網線、對核心設備的可靠性要求高。采用專用的網絡設備(如集線器或交換機)作為核心節點,通過雙絞線將局域網中的各臺主機連接到核心節點上,這就形成了星型結構。星型網絡雖然需要的線纜比總線型多,但布線和連接器比總線型的要便宜。此外,星型拓撲可以通過級聯的方式很方便的將網絡擴展到很大的規模,因此得到了廣泛的應用,被絕大部分的以太網所采用。
以太網采用帶沖突檢測的載波幀聽多路訪問(CSMA/CD) 機制。以太網中節點都可以看到在網絡中發送的所有信息,因此,我們說以太網是一種廣播網絡。以太網的工作過程如下:當以太網中的一臺主機要傳輸數據時,監聽信道上收否有信號在傳輸。如果有的話,表明信道處于忙狀態,就繼續監聽,直到信道空閑為止。若沒有監聽到任何信號,就傳輸數據。傳輸的時候繼續監聽,如發現沖突則執行退避算法,隨機等待一段時間后,重新執行監聽。若未發現沖突則發送成功,所有計算機在試圖再一次發送數據之前,必須在最近一次發送后等待9.6 微秒(以10Mbps 運行)。
以太網的幀是數據鏈路層的封裝,網絡層的數據包被加上幀頭和幀尾成為可以被數據鏈路層識別的數據幀。雖然幀頭和幀尾所用的字節數是固定不變的,但依被封裝的數據包大小的不同,以太網的長度也在變化,其范圍是64~1518 字節。
在以太網中,當兩個數據幀同時被發到物理傳輸介質上,并完全或部分重疊時,就發生了數據沖突。當沖突發生時,物理網段上的數據都不再有效。沖突域:在同一個沖突域中的每一個節點都能收到所有被發送的幀。
沖突是影響以太網性能的重要因素,由于沖突的存在使得傳統的以太網在負載超過40%時,效率將明顯下降。產生沖突的原因有很多,如同一沖突域中節點的數量越多,產生沖突的可能性就越大。此外,諸如數據分組的長度 (以太網的最大幀長度為1518 字節)、網絡的直徑等因素也會影響沖突的產生。因此,當以太網的規模增大時,就必須采取措施來控制沖突的擴散。通常的辦法是使用網橋和交換機將網絡分段,將一個大的沖突域劃分為若干小沖突域。
理解了以太網的工作原理,軟件所能做的校時功能,一般會選用一個值作為校時的誤差彌補,這個時間差是經過多次調試得出的平均值,而各分系統的反應時間、網絡情況等都是動態變化的,所以校時的結果很難統一。
通過分析,我們發現,想要時間同步并不是非常容易實現的事情。如果僅靠時間的同步來實現集成系統的工作同步的話,是不太現實的。算法流程見圖3。
通過圖3 看出,如果僅靠時間來完成任務,是比較危險的,那么,還有什么別的辦法呢? 目前一般的做法是算法采用如圖4所示的算法流程。
這樣的算法,增多了各個系統之間的交流,從一定層面上來說,增加了網絡的負載量,雖然指令可以有保證的執行下去,但是,如果中間某一個系統出現問題的話,那么以此為條件的后續指令局無法進行下去,也就玩法完成任務。

圖3 僅靠時間的同步來實現集成系統工作的算法流程圖
這里,就涉及到了軟件的接口問題。各種不同的軟件要實現接口,比較麻煩。軟件接口是實現一個系統跟另外系統進行信息交互的橋梁,在不同的系統之間,根據系統的關聯程度的不同存在緊耦合和松耦合兩種:緊耦合要求接口響應反應快,消息不能阻塞;松耦合對響應反應要求比較低。在目前應用中,Socket 、消息隊列 (Message Queue)、WebService 等都有相應的應用。
在接口和系統信息交互的過程中,兩種模式使用得很普遍:同步調用和異步調用,同步調用要求接口發出請求消息后必須等待服務端系統的應答消息,接口阻塞直至超時;異步調用則發出請求消息后,接口可以從事其它處理,定時輪詢服務端應答消息和消息或事件通知。同步方式簡單,但是很容易造成接口阻塞,造成消息積壓超時。
Socket 通訊相對來說是很古老的通訊方式,也是最常用的通訊方式。Socket 通訊有阻塞和非阻塞兩種方式。在同步方式,采用阻塞編程比較簡單,但是為了防止接口阻塞,我們需要設置Socket 超時,因此可以使用Socket 的SELECT 模型 (參考如下示例代碼):


圖4 以時間的同步及其他方式混合作用來實現集成系統工作的算法流程圖

在異步方式下,采用非阻塞方式實現比較方便,在非阻塞方式下可使用WSAAsyncSelect 模型和WSAEventSelect 模型:WSAAsyncSelect 模型基于消息,WSAEventSelect 模型基于事件,下面的示例代碼設置了Socket 進行讀寫和關閉操作的消息:

無論使用阻塞方式或非阻塞方式編程,需要重點考慮的一個問題:粘包現象,即應用發送兩個或以上的數據包,在Socket 通訊層將數據包合并成一個發送出去,因此接收端收到數據包以后需要對數據包根據應用定義的長度進行拆分,否則導致應用層丟包。
此處解釋了關于接口的問題,也就是說,在時間不能完全一致的情況下,我們將問題進行了轉移,比起單純的依賴時間,軟件之間的接口實現條件的互通,是解決問題的一個辦法。
目前電腦技術的日益發達,也帶動了自動化技術的飛速前進,各種獨立的自動化系統逐漸需要共同協作完成一些大的任務,對時間依賴比較多的系統,由于一些副作用導致的時間難以同步,如果不尋找其他的接口實現某些數據的互通有無,將難以完美的得到利用,因此,在將來的軟件系統中,接口的設計將會越來越重要,各種不同的語言不同的環境實現的不同系統都將能夠實現接口的方便對接。
[1]鄭耀東,等.C# 從入門到實踐[M].清華大學出版社,2009.
[2][美]Sai Kishore Sripriya;何紅波,英宇,等(譯).Visual C++.NET專業項目實例開發[M].中國水利水電出版社,2007.
[3]求是科技.WindowsAPI 程序設計參考大全.人民郵電出版社,2006.