韓翠翠
(國(guó)家廣電總局 北京地球站,北京 102206)
所謂的自動(dòng)控制,就是用計(jì)算機(jī)來(lái)代替人工根據(jù)指令進(jìn)行一些操作,目前自動(dòng)控制系統(tǒng)已經(jīng)由單一的小系統(tǒng)逐步轉(zhuǎn)變成集成的能夠獨(dú)立的完成整套工作任務(wù)的大型系統(tǒng)。在這些大型的集成性的自動(dòng)控制系統(tǒng)中,我們經(jīng)常碰到要求各分系統(tǒng)在同一時(shí)間同時(shí)執(zhí)行某些動(dòng)作,從而共同來(lái)完成一項(xiàng)大的工作的情況,這就遇到了怎樣才能夠做到各個(gè)分系統(tǒng)的時(shí)間準(zhǔn)確、一致,怎樣完美而準(zhǔn)確的完成任務(wù)的問(wèn)題。
例如廣播傳輸發(fā)射自動(dòng)控制系統(tǒng),該系統(tǒng)主要由局控制平臺(tái)、臺(tái)控制平臺(tái)、節(jié)目傳輸控制平臺(tái)、發(fā)射機(jī)自動(dòng)控制、天線交換開(kāi)關(guān)控制等幾部分組成。局控制平臺(tái)主要下發(fā)每天的節(jié)目運(yùn)行時(shí)間表,經(jīng)臺(tái)控制平臺(tái)接收后下發(fā)到節(jié)目傳輸控制平臺(tái)、節(jié)目傳輸控制平臺(tái)將節(jié)目運(yùn)行時(shí)間表下發(fā)到發(fā)射機(jī)自動(dòng)控制和天線交換開(kāi)關(guān)自動(dòng)控制。每天的廣播節(jié)目運(yùn)行就是發(fā)射機(jī)自動(dòng)控制系統(tǒng)按照節(jié)目運(yùn)行時(shí)間表上高壓,發(fā)射傳輸節(jié)目信號(hào),天線交換開(kāi)關(guān)自動(dòng)控制系統(tǒng)按照節(jié)目運(yùn)行時(shí)間表倒換所需頻段的天線,兩者配合才能達(dá)到廣播節(jié)目每天按運(yùn)行時(shí)間表自動(dòng)運(yùn)行的工作任務(wù)。如圖1所示。
這中間的問(wèn)題非常明顯,就是發(fā)射機(jī)在上高壓之前,天線交換開(kāi)關(guān)自動(dòng)控制系統(tǒng)必須將所需的天線到換到位,但是天線交換開(kāi)關(guān)倒換天線的必要條件是上一個(gè)結(jié)束的節(jié)目所用的天線高壓已落,即不能帶高壓倒換天線。如果這些問(wèn)題都僅僅依靠時(shí)間的統(tǒng)一性來(lái)解決,勢(shì)必會(huì)遇到很多麻煩。
圖1 廣播傳輸發(fā)射自動(dòng)控制系統(tǒng)工作流程圖
在本系統(tǒng)未集成之前,每一部分的自動(dòng)控制都是一個(gè)獨(dú)立的分系統(tǒng),都有自己的一套時(shí)間系統(tǒng)。每個(gè)系統(tǒng)都按照自己的時(shí)間來(lái)執(zhí)行工作指令。例如,發(fā)射機(jī)會(huì)按照調(diào)度令在某一時(shí)間結(jié)束一個(gè)節(jié)目,然后開(kāi)始一個(gè)新的節(jié)目傳輸。天線交換開(kāi)關(guān)也會(huì)按照調(diào)度令在某一時(shí)間自動(dòng)倒換天線。初步看起來(lái)似乎可以自動(dòng)運(yùn)行,實(shí)際不然。每一個(gè)系統(tǒng)都有自己的一個(gè)時(shí)間,如果這兩個(gè)時(shí)間差別比較大,即誤差比較大,那么兩套系統(tǒng)的運(yùn)行就很難成功,或者說(shuō),要求人工參與的部分就很大,通過(guò)人工的干預(yù)來(lái)實(shí)現(xiàn)系統(tǒng)可能失敗的部分。例如高壓未落的通過(guò)手動(dòng)落高壓,天線未到位的手動(dòng)倒天線,這樣的自動(dòng)化系統(tǒng)就失去了自動(dòng)的意義。
要想解決這個(gè)問(wèn)題,不難看出,時(shí)間的準(zhǔn)確性在這中間起著非常重要的作用,如果時(shí)間能夠非常準(zhǔn)確,那么發(fā)射機(jī)自動(dòng)化可以實(shí)現(xiàn)準(zhǔn)點(diǎn)落高壓,天線交換開(kāi)關(guān)自動(dòng)化可以準(zhǔn)點(diǎn)倒換天線到位,發(fā)射機(jī)自動(dòng)化就可以準(zhǔn)點(diǎn)上高壓,實(shí)現(xiàn)調(diào)度令的時(shí)間運(yùn)行表得到準(zhǔn)確執(zhí)行。
那么,是不是這么簡(jiǎn)單就可以實(shí)現(xiàn)呢。
我們目前采用的辦法是從局廣播傳輸發(fā)射自動(dòng)控制系統(tǒng)下發(fā)校時(shí)的指令,下級(jí)的控制系統(tǒng)接到指令后在實(shí)現(xiàn)自身校時(shí)的同時(shí),將校時(shí)指令向下轉(zhuǎn)發(fā),即實(shí)現(xiàn)自上而下的校準(zhǔn)時(shí)間。
然而這個(gè)方法的實(shí)現(xiàn)效果卻不盡如人意。為什么呢?
目前的集成系統(tǒng)一般采用以太網(wǎng)星型結(jié)構(gòu),如圖2所示,在最下級(jí)的工控機(jī)與PLC 可能有串口,但是大部分系統(tǒng)都體現(xiàn)了雙絞線的網(wǎng)絡(luò)模型,所以這中間的時(shí)間差就是網(wǎng)線傳輸與系統(tǒng)反應(yīng)時(shí)間的和。這個(gè)時(shí)間,并不容易把握,網(wǎng)絡(luò)會(huì)有擁堵的現(xiàn)象,系統(tǒng)的反應(yīng)時(shí)間也會(huì)因系統(tǒng)的性能以及實(shí)時(shí)的工作情況有關(guān)。
圖2 星型結(jié)構(gòu)的以太網(wǎng)模型
當(dāng)今居于主導(dǎo)地位的局域網(wǎng)技術(shù)-以太網(wǎng)。以太網(wǎng)是建立在CSMA/CD 機(jī)制上的廣播型網(wǎng)絡(luò)。沖突的產(chǎn)生是限制以太網(wǎng)性能的重要因素,早期的以太網(wǎng)設(shè)備如集線器是物理層設(shè)備,不能隔絕沖突擴(kuò)散,限制了網(wǎng)絡(luò)性能的提高。而交換機(jī)(網(wǎng)橋)做為一種能隔絕沖突的二層網(wǎng)絡(luò)設(shè)備,極大的提高了以太網(wǎng)的性能。正逐漸替代集線器成為主流的以太網(wǎng)設(shè)備。然而交換機(jī)(網(wǎng)橋)對(duì)網(wǎng)絡(luò)中的廣播數(shù)據(jù)流量則不做任何限制,這也影響了網(wǎng)絡(luò)的性能。通過(guò)在交換機(jī)上劃分VLAN 和采用三層的網(wǎng)絡(luò)設(shè)備-路由器解決了這一問(wèn)題。以太網(wǎng)做為一種原理簡(jiǎn)單,便于實(shí)現(xiàn)同時(shí)又價(jià)格低廉的局域網(wǎng)技術(shù)已經(jīng)成為業(yè)界的主流。而更高性能的快速以太網(wǎng)和千兆以太網(wǎng)的出現(xiàn)更使其成為最有前途的網(wǎng)絡(luò)技術(shù)。
目前以太網(wǎng)一般采用星型拓?fù)浣Y(jié)構(gòu),管理方便、容易擴(kuò)展、需要專用的網(wǎng)絡(luò)設(shè)備作為網(wǎng)絡(luò)的核心節(jié)點(diǎn)、需要更多的網(wǎng)線、對(duì)核心設(shè)備的可靠性要求高。采用專用的網(wǎng)絡(luò)設(shè)備(如集線器或交換機(jī))作為核心節(jié)點(diǎn),通過(guò)雙絞線將局域網(wǎng)中的各臺(tái)主機(jī)連接到核心節(jié)點(diǎn)上,這就形成了星型結(jié)構(gòu)。星型網(wǎng)絡(luò)雖然需要的線纜比總線型多,但布線和連接器比總線型的要便宜。此外,星型拓?fù)淇梢酝ㄟ^(guò)級(jí)聯(lián)的方式很方便的將網(wǎng)絡(luò)擴(kuò)展到很大的規(guī)模,因此得到了廣泛的應(yīng)用,被絕大部分的以太網(wǎng)所采用。
以太網(wǎng)采用帶沖突檢測(cè)的載波幀聽(tīng)多路訪問(wèn)(CSMA/CD) 機(jī)制。以太網(wǎng)中節(jié)點(diǎn)都可以看到在網(wǎng)絡(luò)中發(fā)送的所有信息,因此,我們說(shuō)以太網(wǎng)是一種廣播網(wǎng)絡(luò)。以太網(wǎng)的工作過(guò)程如下:當(dāng)以太網(wǎng)中的一臺(tái)主機(jī)要傳輸數(shù)據(jù)時(shí),監(jiān)聽(tīng)信道上收否有信號(hào)在傳輸。如果有的話,表明信道處于忙狀態(tài),就繼續(xù)監(jiān)聽(tīng),直到信道空閑為止。若沒(méi)有監(jiān)聽(tīng)到任何信號(hào),就傳輸數(shù)據(jù)。傳輸?shù)臅r(shí)候繼續(xù)監(jiān)聽(tīng),如發(fā)現(xiàn)沖突則執(zhí)行退避算法,隨機(jī)等待一段時(shí)間后,重新執(zhí)行監(jiān)聽(tīng)。若未發(fā)現(xiàn)沖突則發(fā)送成功,所有計(jì)算機(jī)在試圖再一次發(fā)送數(shù)據(jù)之前,必須在最近一次發(fā)送后等待9.6 微秒(以10Mbps 運(yùn)行)。
以太網(wǎng)的幀是數(shù)據(jù)鏈路層的封裝,網(wǎng)絡(luò)層的數(shù)據(jù)包被加上幀頭和幀尾成為可以被數(shù)據(jù)鏈路層識(shí)別的數(shù)據(jù)幀。雖然幀頭和幀尾所用的字節(jié)數(shù)是固定不變的,但依被封裝的數(shù)據(jù)包大小的不同,以太網(wǎng)的長(zhǎng)度也在變化,其范圍是64~1518 字節(jié)。
在以太網(wǎng)中,當(dāng)兩個(gè)數(shù)據(jù)幀同時(shí)被發(fā)到物理傳輸介質(zhì)上,并完全或部分重疊時(shí),就發(fā)生了數(shù)據(jù)沖突。當(dāng)沖突發(fā)生時(shí),物理網(wǎng)段上的數(shù)據(jù)都不再有效。沖突域:在同一個(gè)沖突域中的每一個(gè)節(jié)點(diǎn)都能收到所有被發(fā)送的幀。
沖突是影響以太網(wǎng)性能的重要因素,由于沖突的存在使得傳統(tǒng)的以太網(wǎng)在負(fù)載超過(guò)40%時(shí),效率將明顯下降。產(chǎn)生沖突的原因有很多,如同一沖突域中節(jié)點(diǎn)的數(shù)量越多,產(chǎn)生沖突的可能性就越大。此外,諸如數(shù)據(jù)分組的長(zhǎng)度 (以太網(wǎng)的最大幀長(zhǎng)度為1518 字節(jié))、網(wǎng)絡(luò)的直徑等因素也會(huì)影響沖突的產(chǎn)生。因此,當(dāng)以太網(wǎng)的規(guī)模增大時(shí),就必須采取措施來(lái)控制沖突的擴(kuò)散。通常的辦法是使用網(wǎng)橋和交換機(jī)將網(wǎng)絡(luò)分段,將一個(gè)大的沖突域劃分為若干小沖突域。
理解了以太網(wǎng)的工作原理,軟件所能做的校時(shí)功能,一般會(huì)選用一個(gè)值作為校時(shí)的誤差彌補(bǔ),這個(gè)時(shí)間差是經(jīng)過(guò)多次調(diào)試得出的平均值,而各分系統(tǒng)的反應(yīng)時(shí)間、網(wǎng)絡(luò)情況等都是動(dòng)態(tài)變化的,所以校時(shí)的結(jié)果很難統(tǒng)一。
通過(guò)分析,我們發(fā)現(xiàn),想要時(shí)間同步并不是非常容易實(shí)現(xiàn)的事情。如果僅靠時(shí)間的同步來(lái)實(shí)現(xiàn)集成系統(tǒng)的工作同步的話,是不太現(xiàn)實(shí)的。算法流程見(jiàn)圖3。
通過(guò)圖3 看出,如果僅靠時(shí)間來(lái)完成任務(wù),是比較危險(xiǎn)的,那么,還有什么別的辦法呢? 目前一般的做法是算法采用如圖4所示的算法流程。
這樣的算法,增多了各個(gè)系統(tǒng)之間的交流,從一定層面上來(lái)說(shuō),增加了網(wǎng)絡(luò)的負(fù)載量,雖然指令可以有保證的執(zhí)行下去,但是,如果中間某一個(gè)系統(tǒng)出現(xiàn)問(wèn)題的話,那么以此為條件的后續(xù)指令局無(wú)法進(jìn)行下去,也就玩法完成任務(wù)。
圖3 僅靠時(shí)間的同步來(lái)實(shí)現(xiàn)集成系統(tǒng)工作的算法流程圖
這里,就涉及到了軟件的接口問(wèn)題。各種不同的軟件要實(shí)現(xiàn)接口,比較麻煩。軟件接口是實(shí)現(xiàn)一個(gè)系統(tǒng)跟另外系統(tǒng)進(jìn)行信息交互的橋梁,在不同的系統(tǒng)之間,根據(jù)系統(tǒng)的關(guān)聯(lián)程度的不同存在緊耦合和松耦合兩種:緊耦合要求接口響應(yīng)反應(yīng)快,消息不能阻塞;松耦合對(duì)響應(yīng)反應(yīng)要求比較低。在目前應(yīng)用中,Socket 、消息隊(duì)列 (Message Queue)、WebService 等都有相應(yīng)的應(yīng)用。
在接口和系統(tǒng)信息交互的過(guò)程中,兩種模式使用得很普遍:同步調(diào)用和異步調(diào)用,同步調(diào)用要求接口發(fā)出請(qǐng)求消息后必須等待服務(wù)端系統(tǒng)的應(yīng)答消息,接口阻塞直至超時(shí);異步調(diào)用則發(fā)出請(qǐng)求消息后,接口可以從事其它處理,定時(shí)輪詢服務(wù)端應(yīng)答消息和消息或事件通知。同步方式簡(jiǎn)單,但是很容易造成接口阻塞,造成消息積壓超時(shí)。
Socket 通訊相對(duì)來(lái)說(shuō)是很古老的通訊方式,也是最常用的通訊方式。Socket 通訊有阻塞和非阻塞兩種方式。在同步方式,采用阻塞編程比較簡(jiǎn)單,但是為了防止接口阻塞,我們需要設(shè)置Socket 超時(shí),因此可以使用Socket 的SELECT 模型 (參考如下示例代碼):
圖4 以時(shí)間的同步及其他方式混合作用來(lái)實(shí)現(xiàn)集成系統(tǒng)工作的算法流程圖
在異步方式下,采用非阻塞方式實(shí)現(xiàn)比較方便,在非阻塞方式下可使用WSAAsyncSelect 模型和WSAEventSelect 模型:WSAAsyncSelect 模型基于消息,WSAEventSelect 模型基于事件,下面的示例代碼設(shè)置了Socket 進(jìn)行讀寫和關(guān)閉操作的消息:
無(wú)論使用阻塞方式或非阻塞方式編程,需要重點(diǎn)考慮的一個(gè)問(wèn)題:粘包現(xiàn)象,即應(yīng)用發(fā)送兩個(gè)或以上的數(shù)據(jù)包,在Socket 通訊層將數(shù)據(jù)包合并成一個(gè)發(fā)送出去,因此接收端收到數(shù)據(jù)包以后需要對(duì)數(shù)據(jù)包根據(jù)應(yīng)用定義的長(zhǎng)度進(jìn)行拆分,否則導(dǎo)致應(yīng)用層丟包。
此處解釋了關(guān)于接口的問(wèn)題,也就是說(shuō),在時(shí)間不能完全一致的情況下,我們將問(wèn)題進(jìn)行了轉(zhuǎn)移,比起單純的依賴時(shí)間,軟件之間的接口實(shí)現(xiàn)條件的互通,是解決問(wèn)題的一個(gè)辦法。
目前電腦技術(shù)的日益發(fā)達(dá),也帶動(dòng)了自動(dòng)化技術(shù)的飛速前進(jìn),各種獨(dú)立的自動(dòng)化系統(tǒng)逐漸需要共同協(xié)作完成一些大的任務(wù),對(duì)時(shí)間依賴比較多的系統(tǒng),由于一些副作用導(dǎo)致的時(shí)間難以同步,如果不尋找其他的接口實(shí)現(xiàn)某些數(shù)據(jù)的互通有無(wú),將難以完美的得到利用,因此,在將來(lái)的軟件系統(tǒng)中,接口的設(shè)計(jì)將會(huì)越來(lái)越重要,各種不同的語(yǔ)言不同的環(huán)境實(shí)現(xiàn)的不同系統(tǒng)都將能夠?qū)崿F(xiàn)接口的方便對(duì)接。
[1]鄭耀東,等.C# 從入門到實(shí)踐[M].清華大學(xué)出版社,2009.
[2][美]Sai Kishore Sripriya;何紅波,英宇,等(譯).Visual C++.NET專業(yè)項(xiàng)目實(shí)例開(kāi)發(fā)[M].中國(guó)水利水電出版社,2007.
[3]求是科技.WindowsAPI 程序設(shè)計(jì)參考大全.人民郵電出版社,2006.