李軍杰 張雷
(第七一五研究所,杭州,310023)
系統(tǒng)中雙控制臺(tái)分別進(jìn)行操作,需要將操作數(shù)據(jù)同步,同步的數(shù)據(jù)不能發(fā)生丟失和錯(cuò)誤,否則將影響系統(tǒng)的可靠性和穩(wěn)定性。本文將雙臺(tái)的控制板融入同一個(gè)工控機(jī)箱(如圖1),利用具有高可靠性和強(qiáng)實(shí)時(shí)性的VME總線進(jìn)行通信。操作臺(tái)操作內(nèi)容不同,則需同步數(shù)據(jù)不同,本文針對(duì)同步數(shù)據(jù)的多樣性,定義數(shù)據(jù)包格式,然后在有限狀態(tài)機(jī)[1-2]的基礎(chǔ)上,對(duì)VME總線通信接收端進(jìn)行設(shè)計(jì),保證對(duì)不同類型數(shù)據(jù)包分析的可靠性,并在VxWorks實(shí)時(shí)操作系統(tǒng)下進(jìn)行實(shí)現(xiàn)。
圖1 雙控制臺(tái)結(jié)構(gòu)圖
控制臺(tái)進(jìn)行操作時(shí),因操作內(nèi)容不同,需同步數(shù)據(jù)的含義和長(zhǎng)度不同,若通過VME總線的同一地址,直接發(fā)送給另外一個(gè)操作臺(tái),接收端無法對(duì)接收到的數(shù)據(jù)進(jìn)行分析。因此有必要將同步數(shù)據(jù)進(jìn)行封裝后再發(fā)送,為了保證接收端對(duì)接收到數(shù)據(jù)的解碼分析的正確性,將數(shù)據(jù)包定義為如表1所示。
表1 數(shù)據(jù)包格式
表1中,起始標(biāo)識(shí)表示開始接收一個(gè)新的數(shù)據(jù)包,本協(xié)議中規(guī)定為0x55;命令:用來說明數(shù)據(jù)包的用途;數(shù)據(jù)長(zhǎng)度:整個(gè)包共占的字節(jié)數(shù),利用此字節(jié),接收方識(shí)別數(shù)據(jù)包長(zhǎng)度并能夠準(zhǔn)確接收數(shù)據(jù)包;校驗(yàn):是對(duì)數(shù)據(jù)包除校驗(yàn)字節(jié)外的所有字節(jié)的CRC校驗(yàn);結(jié)束標(biāo)示:表示數(shù)據(jù)包的結(jié)束,本文協(xié)議中規(guī)定為0xAA。
有限狀態(tài)機(jī)[3]系統(tǒng)是指在不同階段會(huì)呈現(xiàn)出不同運(yùn)行狀態(tài)的系統(tǒng),這些狀態(tài)是有限的,不重疊的。這樣的系統(tǒng)在某一時(shí)刻一定會(huì)處于其所有狀態(tài)中的一個(gè)狀態(tài),此時(shí)它接收一部分允許的輸入,產(chǎn)生一部分可能的響應(yīng),并且遷移到一部分可能的狀態(tài)。FSM的狀態(tài)遷移如圖2所示。
圖2 FSM的狀態(tài)遷移
FSM包括以下5個(gè)要素:(1)狀態(tài),是一個(gè)系統(tǒng)在其生命周期中某一時(shí)刻的運(yùn)行情況,此時(shí),系統(tǒng)會(huì)執(zhí)行一些動(dòng)作或等待一些外部輸入。(2)條件,狀態(tài)機(jī)對(duì)外部消息進(jìn)行響應(yīng)的時(shí)候,除了需要當(dāng)前的狀態(tài),還要判斷跟這個(gè)狀態(tài)相關(guān)的一些條件是否成立。這種判斷稱為 Guard。Guard通過允許或禁止某些操作來影響狀態(tài)機(jī)的行為。(3)事件,就是在一定的時(shí)間和空間上發(fā)生對(duì)系統(tǒng)有意義的事情。(4)動(dòng)作,當(dāng)一個(gè)事件被狀態(tài)機(jī)系統(tǒng)分發(fā)的時(shí)候,狀態(tài)機(jī)用動(dòng)作進(jìn)行響應(yīng),比如修改一下變量的值,進(jìn)行輸入輸出,產(chǎn)生另一個(gè)事件或遷移到另一個(gè)狀態(tài)等。(5)遷移,從一個(gè)狀態(tài)換到另一個(gè)狀態(tài)的行為。引起狀態(tài)遷移的事件稱為觸發(fā)事件或觸發(fā)。
同步數(shù)據(jù)傳輸?shù)幕拘畔卧菙?shù)據(jù)包,當(dāng)數(shù)據(jù)包過長(zhǎng)時(shí),數(shù)據(jù)包需分拆成多塊進(jìn)行傳輸。如果數(shù)據(jù)包整個(gè)包進(jìn)行傳輸,接收端將對(duì)接收到的數(shù)據(jù)包進(jìn)行解碼分析。針對(duì)不同的數(shù)據(jù)包進(jìn)行分析,本文引入有限狀態(tài)機(jī)。在有限狀態(tài)機(jī)中,狀態(tài)的變化依賴外部的事件,當(dāng)條件滿足時(shí),發(fā)生狀態(tài)遷移。本文將數(shù)據(jù)包分析的過程分為不同的狀態(tài),將下一個(gè)數(shù)據(jù)作為外部觸發(fā)事件,使?fàn)顟B(tài)發(fā)生遷移,直到數(shù)據(jù)包分析完成。在2.1節(jié)有限狀態(tài)機(jī)的基礎(chǔ)上,在VME通信的接收端引入狀態(tài)圖[4],如圖3。
接收端狀態(tài)主要分為五個(gè)狀態(tài):尋找數(shù)據(jù)包頭標(biāo)識(shí)狀態(tài)、數(shù)據(jù)包頭處理狀態(tài)、組包狀態(tài)、校驗(yàn)數(shù)據(jù)包狀態(tài)和完成狀態(tài)。如圖3所示,各狀態(tài)之間的轉(zhuǎn)換如下:當(dāng)有數(shù)據(jù)到達(dá)時(shí),系統(tǒng)進(jìn)入尋找數(shù)據(jù)包頭狀態(tài),若收到數(shù)據(jù)非0x55,狀態(tài)不發(fā)生遷移,若收到數(shù)據(jù)位0x55,則系統(tǒng)狀態(tài)跳轉(zhuǎn)到數(shù)據(jù)包頭處理狀態(tài);進(jìn)入包頭數(shù)據(jù)處理狀態(tài)后,若收到數(shù)據(jù)長(zhǎng)度小于4,狀態(tài)不發(fā)生遷移,數(shù)據(jù)長(zhǎng)度大于4后,若長(zhǎng)度標(biāo)識(shí)錯(cuò)誤,則狀態(tài)遷移至尋找包頭標(biāo)識(shí)狀態(tài),若長(zhǎng)度標(biāo)識(shí)正確,則進(jìn)入組包狀態(tài);進(jìn)入組包狀態(tài)后,數(shù)據(jù)長(zhǎng)度未達(dá)到指定長(zhǎng)度,狀態(tài)不發(fā)生遷移,否則,狀態(tài)遷移至校驗(yàn)數(shù)據(jù)狀態(tài);進(jìn)入校驗(yàn)數(shù)據(jù)狀態(tài)后,若數(shù)據(jù)校驗(yàn)不正確,則狀態(tài)遷移至尋找包頭標(biāo)識(shí)狀態(tài),否則進(jìn)入完成狀態(tài)。
圖3 接收端狀態(tài)圖
根據(jù)上述機(jī)制,在VxWorks系統(tǒng)下進(jìn)行軟件實(shí)現(xiàn),并在硬件平臺(tái)上測(cè)試。對(duì)于不同的硬件平臺(tái)有不同的BSP包,本實(shí)驗(yàn)采用的硬件平臺(tái)是由工控機(jī)箱內(nèi)的兩塊VRJ9主板和SHARC信號(hào)處理板組成,VRJ9主板配置了POWERPC芯片,VME驅(qū)動(dòng)的配置參照文獻(xiàn)[5]進(jìn)行。測(cè)試方法是兩塊VRJ9主板和SHARC板之間通過VME總線進(jìn)行通信,利用其中一塊主板向另一塊主板發(fā)送數(shù)據(jù),如圖4所示,連續(xù)多次發(fā)送數(shù)據(jù),并在顯示器上打印各板收到的數(shù)據(jù)。
圖4 實(shí)驗(yàn)環(huán)境
編寫測(cè)試程序[6],為VME總線在SHARC板上分配256 byte空間,設(shè)置6種數(shù)據(jù)包類型數(shù)據(jù)標(biāo)識(shí)分別為0x01、0x02、0x03、0x04、0x05、0x06,數(shù)據(jù)長(zhǎng)度分別為 0x08、0x09、0x10、0x11、0x12、0x13,數(shù)據(jù)內(nèi)容都為0xff,每秒鐘發(fā)送每個(gè)類型數(shù)據(jù)包各一個(gè)和一個(gè)錯(cuò)誤數(shù)據(jù)包(命令標(biāo)識(shí)為0x01、數(shù)據(jù)長(zhǎng)度0x07,丟失結(jié)束標(biāo)識(shí)0xaa,命令內(nèi)容為 0x20)向?qū)Ψ街靼灏l(fā)送。加載測(cè)試程序,從兩塊VRJ9主板打印接收到的數(shù)據(jù)以及發(fā)送和接收到數(shù)據(jù)總數(shù)。
測(cè)試30 min后,未出現(xiàn)0x20和其他錯(cuò)誤數(shù)據(jù),且所接收到的數(shù)據(jù)為156600 byte,與所發(fā)送正確字符數(shù)相同,目測(cè)接收數(shù)據(jù)的速度,未發(fā)現(xiàn)明顯延遲。
針對(duì)雙控制臺(tái)數(shù)據(jù)同步的問題,以VEM總線為基礎(chǔ),提出了一種基于有限狀態(tài)機(jī)的雙控制臺(tái)同步方案。通過實(shí)驗(yàn)驗(yàn)證,方案能夠?qū)崿F(xiàn)雙控制臺(tái)數(shù)據(jù)同步,實(shí)驗(yàn)結(jié)果驗(yàn)證了該方案具有高可靠性和強(qiáng)實(shí)時(shí)性,為反潛系統(tǒng)上實(shí)現(xiàn)雙控制臺(tái)數(shù)據(jù)同步提供了理論依據(jù)。
[1]ALFRED V AHO, MONICA S LAM. 編譯原理[M].2版.北京:機(jī)械工業(yè)出版社,2009.
[2]史雪飛, 王志良, 張瓊. 基于有限狀態(tài)機(jī)矩陣模型的人工情緒模型[J].計(jì)算機(jī)工程,2010,36(18):24-25.
[3]張菁. 基于有限狀態(tài)機(jī)的 UDP傳輸設(shè)計(jì)[J].計(jì)算機(jī)工程,2011.9,37(17):21-24.
[4]李瑩. 一種基于狀態(tài)機(jī)的串口通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程, 2012,20(7):100-104.
[5]凌震瑩. 基于VxWorks的VME總線驅(qū)動(dòng)的實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件, 2011,28(7):299-300.
[6]楊雪峰. 基于有限狀態(tài)機(jī)的PS/2協(xié)議的實(shí)現(xiàn)[J]. 可編程控制器與工廠自動(dòng)化,2009,(12):36-39.