李 浩, 趙晨希, 關(guān) 冰
(1.中國(guó)運(yùn)載火箭技術(shù)研究院,北京 100076; 2.北京時(shí)代民芯科技有限公司,北京 100076)
隨著信息化和自動(dòng)化技術(shù)的快速發(fā)展,以太網(wǎng)憑借速度快、成本低、支持連接設(shè)備多等特點(diǎn),被越來(lái)越多地應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域[1-3]。UDP是以太網(wǎng)的傳輸層協(xié)議,與TCP協(xié)議相比具有開(kāi)銷(xiāo)小、效率高的優(yōu)勢(shì),但是由于其非面向連接的特點(diǎn),可靠性不高,在數(shù)據(jù)傳輸中容易丟幀、錯(cuò)幀和亂幀[4-6]。
針對(duì)UDP傳輸過(guò)程中可能出現(xiàn)的丟幀、錯(cuò)幀和亂幀問(wèn)題,本文提出了兩種基于超時(shí)重傳和多重校驗(yàn)的UDP可靠通信方法:一種是基于實(shí)時(shí)操作系統(tǒng)的方法,另一種是基于高精度定時(shí)器的方法。這兩種方法的共同點(diǎn)是都采用多重校驗(yàn)、鏈路切換、超時(shí)重傳等可靠性較高的技術(shù),不同點(diǎn)是前者基于實(shí)時(shí)操作系統(tǒng)實(shí)現(xiàn),邏輯簡(jiǎn)單,但實(shí)時(shí)性不高,后者基于高精度定時(shí)器實(shí)現(xiàn),實(shí)時(shí)性較高,但邏輯復(fù)雜。本文提出的方法僅在應(yīng)用層增加32 B冗余信息,且只在鏈路出現(xiàn)問(wèn)題時(shí)進(jìn)行數(shù)據(jù)重新發(fā)送,相對(duì)未采用可靠性措施的UDP通信方案,開(kāi)銷(xiāo)略有增加,但相對(duì)采用了三次握手和擁塞控制等機(jī)制的TCP通信,在網(wǎng)絡(luò)開(kāi)銷(xiāo)和傳輸效率上的優(yōu)勢(shì)仍然存在,試驗(yàn)結(jié)果表明,本文提出的方法既能保證UDP通信的實(shí)時(shí)性,又能提升UDP通信的可靠性。
對(duì)可靠以太網(wǎng)通信總體方案進(jìn)行設(shè)計(jì),首先設(shè)計(jì)了基于四度冗余拓?fù)涞囊蕴W(wǎng)總線(xiàn)結(jié)構(gòu),然后實(shí)現(xiàn)了基于多重校驗(yàn)的以太網(wǎng)通信協(xié)議,最后提出了兩種基于超時(shí)重傳和多重校驗(yàn)的UDP可靠通信方法,通過(guò)硬件、軟件、協(xié)議和流程的聯(lián)合優(yōu)化設(shè)計(jì),最終實(shí)現(xiàn)了基于超時(shí)重傳和多重校驗(yàn)的可靠以太網(wǎng)通信機(jī)制。
以太網(wǎng)總線(xiàn)拓?fù)浣Y(jié)構(gòu)如圖1所示,基于可靠以太網(wǎng)通信機(jī)制的軟件設(shè)計(jì)稱(chēng)為服務(wù)端軟件,有主、備兩個(gè)網(wǎng)口,與服務(wù)端軟件通信的軟件稱(chēng)為客戶(hù)端軟件,也有主、備兩個(gè)網(wǎng)口,服務(wù)端軟件和客戶(hù)端軟件通過(guò)交換機(jī)進(jìn)行以太網(wǎng)通信。這種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的特點(diǎn)是通過(guò)網(wǎng)絡(luò)鏈路的多重冗余,提升通信系統(tǒng)整體的可靠性,且由于以太網(wǎng)總線(xiàn)成本低廉,鏈路冗余帶來(lái)的總體方案成本增加并不多。
圖1 以太網(wǎng)通信總線(xiàn)拓?fù)浣Y(jié)構(gòu)
將數(shù)據(jù)進(jìn)行UDP數(shù)據(jù)報(bào)封裝、IP封裝,并最終打包成符合IEEE802.3標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)幀格式在網(wǎng)絡(luò)上傳輸,UDP數(shù)據(jù)封裝形式如圖2所示。
圖2 UDP數(shù)據(jù)封裝格式
UDP傳輸?shù)奶攸c(diǎn)是只提供無(wú)連接的服務(wù),沒(méi)有確認(rèn)幀、序列號(hào)、超時(shí)重傳等機(jī)制,因此與TCP傳輸相比可靠性低。本文在應(yīng)用層設(shè)計(jì)實(shí)現(xiàn)了一種基于多重校驗(yàn)的協(xié)議確認(rèn)機(jī)制,確保UDP傳輸?shù)臄?shù)據(jù)內(nèi)容、順序和格式的準(zhǔn)確無(wú)誤。
對(duì)應(yīng)用層的以太網(wǎng)通信協(xié)議進(jìn)行重新設(shè)計(jì),除了幀內(nèi)容區(qū)表征傳輸?shù)挠行?shù)據(jù)外,增加了幀頭、幀序號(hào)、幀長(zhǎng)度、幀校驗(yàn)和及幀尾等數(shù)據(jù)區(qū)域,主要目的是用于UDP傳輸數(shù)據(jù)的多重校驗(yàn),以提升以太網(wǎng)通信的可靠性。具體格式如下。
① 幀頭:固定幀頭為0x55555555,用于判斷幀的開(kāi)始。
② 幀序號(hào):表示相同類(lèi)型幀的發(fā)送次數(shù),由于UDP通信有可能出現(xiàn)丟幀,本區(qū)域可以表征傳輸?shù)倪B續(xù)性。
③ 幀長(zhǎng)度:表示本幀數(shù)據(jù)的實(shí)際長(zhǎng)度,由于UDP傳輸數(shù)據(jù)的限制,本區(qū)域最大值不能超過(guò)1400。
④ 幀IP:表示網(wǎng)絡(luò)層的地址。
⑤ 幀端口:表示傳輸層的地址。
⑥ 幀類(lèi)型:表示本幀數(shù)據(jù)的類(lèi)型。
⑦ 幀內(nèi)容:表示本幀數(shù)據(jù)的具體內(nèi)容。
⑧ 校驗(yàn)和:對(duì)本幀數(shù)據(jù)前N-4個(gè)字節(jié)進(jìn)行CRC校驗(yàn),CRC校驗(yàn)?zāi)軌蛴行ёR(shí)別硬件誤碼導(dǎo)致的通信錯(cuò)誤。
⑨ 幀尾:固定幀尾為0xAAAAAAAA,用于判斷幀的結(jié)束。
實(shí)時(shí)操作系統(tǒng)被廣泛應(yīng)用于航空航天、核電能源、醫(yī)療衛(wèi)生、國(guó)防電子等諸多安全關(guān)鍵系統(tǒng)中,具有實(shí)時(shí)性高、安全性強(qiáng)、系統(tǒng)資源占用少等特點(diǎn),包含任務(wù)調(diào)度、任務(wù)同步、中斷管理、內(nèi)存管理等功能[7],常見(jiàn)的實(shí)時(shí)操作系統(tǒng)有VxWorks和RTEMS。
利用嵌入式實(shí)時(shí)操作系統(tǒng)的多線(xiàn)程搶占調(diào)度和多線(xiàn)程信號(hào)量同步機(jī)制,設(shè)計(jì)實(shí)現(xiàn)了一種精度達(dá)到10 ms量級(jí)的超時(shí)重傳方法,本方案的優(yōu)點(diǎn)是邏輯簡(jiǎn)單,缺點(diǎn)是精度不高。
設(shè)計(jì)3個(gè)線(xiàn)程和1個(gè)信號(hào)量,重傳方法的實(shí)現(xiàn)流程如圖3所示,主要功能如下。
圖3 基于實(shí)時(shí)操作系統(tǒng)的以太網(wǎng)超時(shí)重傳方法示例
① 線(xiàn)程1的優(yōu)先級(jí)最高,執(zhí)行一次后便不再執(zhí)行,主要用于系統(tǒng)的軟硬件初始化。
② 線(xiàn)程3的優(yōu)先級(jí)次高,線(xiàn)程入口處設(shè)計(jì)死循環(huán),使得線(xiàn)程3一直處于等待運(yùn)行的狀態(tài),主要用途是獲取以太網(wǎng)數(shù)據(jù),并對(duì)接收方的應(yīng)答數(shù)據(jù)進(jìn)行解析判讀和多重校驗(yàn)。
③ 線(xiàn)程2的優(yōu)先級(jí)最低,線(xiàn)程入口處設(shè)計(jì)死循環(huán),使得線(xiàn)程2一直處于等待運(yùn)行的狀態(tài),主要用途是利用本文的基于實(shí)時(shí)操作系統(tǒng)的超時(shí)重傳方法,實(shí)現(xiàn)基于UDP的可靠數(shù)據(jù)通信。
④ 信號(hào)量1主要用于線(xiàn)程3和線(xiàn)程2的數(shù)據(jù)同步,信號(hào)量的類(lèi)型是二值信號(hào)量,初始值是0。
本子技術(shù)的核心功能有指令回令機(jī)制、多重校驗(yàn)判斷、多線(xiàn)程同步、超時(shí)重傳、鏈路切換,主要技術(shù)點(diǎn)如下。
① 線(xiàn)程2是發(fā)送線(xiàn)程,其發(fā)送的數(shù)據(jù)定義為指令,線(xiàn)程3是接收線(xiàn)程,其接收的數(shù)據(jù)定義為回令,規(guī)定每一條指令都對(duì)應(yīng)有一條回令,通過(guò)設(shè)計(jì)指令回令機(jī)制,可以實(shí)現(xiàn)對(duì)以太網(wǎng)鏈路是否暢通的檢測(cè)。
② 線(xiàn)程3在收到回令后,需要按照第1節(jié)描述的協(xié)議格式進(jìn)行多重校驗(yàn),包括幀頭、幀尾、幀序號(hào)、幀長(zhǎng)度、IP地址、端口、幀類(lèi)型及幀CRC等8類(lèi)區(qū)域的校驗(yàn),如果多重校驗(yàn)通過(guò),則認(rèn)為回令符合要求,否則認(rèn)為鏈路故障,通過(guò)多重校驗(yàn)機(jī)制可以實(shí)現(xiàn)硬件誤碼和軟件丟包錯(cuò)包的故障檢測(cè)。
③ 利用實(shí)時(shí)操作系統(tǒng)的多線(xiàn)程搶占調(diào)度和信號(hào)量同步機(jī)制,實(shí)現(xiàn)不同的線(xiàn)程之間通過(guò)二值信號(hào)量的方式進(jìn)行時(shí)序同步。
④ 利用二進(jìn)制信號(hào)量的超時(shí)判斷機(jī)制,如果在指定的時(shí)間內(nèi)軟件收到了客戶(hù)端軟件的回令(為達(dá)到可靠性與與實(shí)時(shí)性的平衡,將超時(shí)時(shí)間設(shè)置為10 ms),并且通過(guò)了多重校驗(yàn),則發(fā)布信號(hào)量以解除發(fā)送線(xiàn)程的阻塞狀態(tài);如果在指定的時(shí)間內(nèi)沒(méi)有收到客戶(hù)端軟件的回令,或者回令未通過(guò)多重校驗(yàn),則信號(hào)量返回超時(shí)信息,進(jìn)入鏈路切換和超時(shí)重傳邏輯分支。
⑤ 基于系統(tǒng)設(shè)計(jì)的可靠以太網(wǎng)拓?fù)渫ㄐ沤Y(jié)構(gòu),設(shè)計(jì)實(shí)現(xiàn)了“主主-主備-備主-備備”的通信鏈路切換機(jī)制,能夠在3條通信鏈路出現(xiàn)故障的情況下實(shí)現(xiàn)UDP數(shù)據(jù)有效通信,顯著提升了以太網(wǎng)通信的可靠性。
利用嵌入式系統(tǒng)的高精度定時(shí)器和中斷異步處理機(jī)制,設(shè)計(jì)實(shí)現(xiàn)一種精度達(dá)1 ms級(jí)別的超時(shí)重傳方法,其優(yōu)點(diǎn)是實(shí)時(shí)性高,不依賴(lài)實(shí)時(shí)操作系統(tǒng)即可實(shí)現(xiàn),缺點(diǎn)是流程比較復(fù)雜。
設(shè)計(jì)2個(gè)中斷、1個(gè)主函數(shù)和5個(gè)全局變量,重傳方法的實(shí)現(xiàn)流程如圖4所示,主要功能如下。
① 中斷1的優(yōu)先級(jí)最高,收到回令時(shí)觸發(fā),主要功能是獲取以太網(wǎng)數(shù)據(jù),并對(duì)接收方的應(yīng)答數(shù)據(jù)進(jìn)行解析判讀和多重校驗(yàn)。
圖4 基于高精度定時(shí)器的以太網(wǎng)超時(shí)重傳方法示例
② 中斷2的優(yōu)先級(jí)次高,以1 ms周期性觸發(fā),主要功能是利用本文的基于高精度定時(shí)器的超時(shí)重傳機(jī)制,實(shí)現(xiàn)基于UDP的可靠數(shù)據(jù)通信。
③ 主函數(shù)的優(yōu)先級(jí)最低,主要用于系統(tǒng)的軟硬件初始化和業(yè)務(wù)流程處理。
④ 超時(shí)起判標(biāo)志為全局變量,在啟動(dòng)超時(shí)重傳判斷時(shí)置有效,在收到回令時(shí)或遍歷所有鏈路時(shí)置無(wú)效。
⑤ 數(shù)據(jù)接收標(biāo)志為全局變量,在收到回令時(shí)置有效,在遍歷所有鏈路時(shí)置無(wú)效。
⑥ 超時(shí)時(shí)間為全局變量,是用戶(hù)設(shè)定的固定值,該值用于表示從發(fā)送指令到接收回令的最長(zhǎng)時(shí)間。
⑦ 起始時(shí)間為全局變量,該值表示發(fā)送以太網(wǎng)數(shù)據(jù)的時(shí)間。
⑧ 當(dāng)前時(shí)間為全局變量,該值表示進(jìn)行超時(shí)判斷時(shí)的當(dāng)前時(shí)間。
本方法的核心功能有指令回令機(jī)制、多重校驗(yàn)判斷、高精度定時(shí)器中斷,主要技術(shù)點(diǎn)如下。
① 主函數(shù)和中斷2是發(fā)送線(xiàn)程,指令回令機(jī)制與第2節(jié)相同。
② 中斷1在收到回令后,需要按照第1節(jié)描述的協(xié)議格式進(jìn)行多重校驗(yàn),多重校驗(yàn)的機(jī)制與第2節(jié)相同。
③ 利用嵌入式系統(tǒng)的高精度定時(shí)器和中斷異步處理機(jī)制,實(shí)現(xiàn)主循環(huán)與中斷之間通過(guò)共享全局變量的方式進(jìn)行數(shù)據(jù)交互,能夠?qū)崿F(xiàn)精度為1 ms級(jí)別的超時(shí)判斷。
④ 利用基于高精度定時(shí)器的超時(shí)判斷機(jī)制,如果在指定的時(shí)間內(nèi)收到了客戶(hù)端軟件的回令,并且通過(guò)了多重校驗(yàn),則置數(shù)據(jù)接收標(biāo)志有效以通知軟件解除超時(shí)判斷;如果在指定的時(shí)間內(nèi)沒(méi)有收到客戶(hù)端軟件的回令,或者回令未通過(guò)多重校驗(yàn),則判斷為已經(jīng)超時(shí)。
⑤ 利用系統(tǒng)設(shè)計(jì)的主備以太網(wǎng)通路,實(shí)現(xiàn)“主主-主備-備主-備備”四條鏈路的故障切換,鏈路切換機(jī)制與第2節(jié)相同。
在實(shí)驗(yàn)室環(huán)境下對(duì)本文進(jìn)行測(cè)試驗(yàn)證,服務(wù)端軟件的硬件架構(gòu)是“TMS320C6678+Kintex-7”,TMS320C6678是TI公司的一款多核處理器芯片,片內(nèi)集成8個(gè)C66X內(nèi)核[8],掛接一路網(wǎng)口,作為主通信鏈路,地址設(shè)置為192.168.0.109;Kintex-7是Xilinx公司的一款高性能FPGA芯片,擁有478 KB的可編程邏輯資源[9],掛接一路網(wǎng)口,作為備通信鏈路,地址設(shè)置為192.168.0.19??蛻?hù)端軟件的硬件架構(gòu)與服務(wù)端軟件相同,也是“TMS320C6678+Kintex-7”,主地址設(shè)置為192.168.102,備地址設(shè)置為192.168.0.12。
在上述環(huán)境中設(shè)置故障測(cè)試用例,測(cè)試本文設(shè)計(jì)的可靠以太網(wǎng)通信方法是否有效。其中,圖5為主主鏈路正常通信示意圖,圖6為主主鏈路斷開(kāi)時(shí)鏈路切換后正常通信示意圖,圖7為主主、主備鏈路斷開(kāi)時(shí)鏈路切換后正常通信示意圖,圖8為主主、主備、備主鏈路斷開(kāi)時(shí)鏈路切換后正常通信示意圖。結(jié)果表明,在通信鏈路出現(xiàn)一度、二度和三度故障時(shí),基于本方法實(shí)現(xiàn)的軟件仍可進(jìn)行有效通信。
圖5 主主鏈路正常通信示意圖
圖6 主主鏈路斷開(kāi)時(shí)鏈路切換后正常通信示意圖
圖7 主主、主備鏈路斷開(kāi)時(shí)鏈路切換后正常通信示意圖
圖8 主主、主備、備主鏈路斷開(kāi)時(shí)鏈路切換后正常通信示意圖
采取了并聯(lián)硬件冗余的方式實(shí)現(xiàn)可靠以太網(wǎng)通信,根據(jù)并聯(lián)冗余的功能定義,可以按照下述的可靠性建模公式進(jìn)行可靠性計(jì)算[10]。
Rs==1-(1-R0)n
式中:R0為單通道UDP通信的可靠度;n為并聯(lián)冗余的部件個(gè)數(shù);Rs為根據(jù)模型公式計(jì)算后的系統(tǒng)可靠度。本文假設(shè)R0值為0.9,n在本文中取值為4,經(jīng)過(guò)計(jì)算,系統(tǒng)可靠度Rs為0.9999,相對(duì)單通道UDP通信的可靠度有較大提升。
針對(duì)UDP傳輸過(guò)程中可能出現(xiàn)的丟幀、錯(cuò)幀和亂幀問(wèn)題,首先對(duì)可靠以太網(wǎng)通信總體方案進(jìn)行設(shè)計(jì),設(shè)計(jì)了基于四度冗余的以太網(wǎng)總線(xiàn)拓?fù)浣Y(jié)構(gòu),然后實(shí)現(xiàn)了基于多重校驗(yàn)的以太網(wǎng)通信協(xié)議,最后提出了兩種基于超時(shí)重傳和多重校驗(yàn)的可靠通信方法:一種是基于實(shí)時(shí)操作系統(tǒng)的超時(shí)重傳方法,為UDP可靠傳輸提供了一種流程簡(jiǎn)單、精度達(dá)10 ms的解決方案;另一種是高精度定時(shí)器的超時(shí)重傳方法,為UDP可靠傳輸提供了精度達(dá)1 ms、不依賴(lài)操作系統(tǒng)的解決方案。
對(duì)本文的方法進(jìn)行建模分析,本文所提出的方案相較傳統(tǒng)單通道UDP通信方案可靠度由0.9提升到0.9999,通信的可靠度有較大提升。利用“TMS320C6678+ Kintex-7”開(kāi)發(fā)板進(jìn)行測(cè)試驗(yàn)證,結(jié)果表明基于本方法實(shí)現(xiàn)的軟件功能實(shí)現(xiàn)正確,可以實(shí)現(xiàn)在通信鏈路出現(xiàn)一度、二度和三度故障時(shí)有效完成UDP通信。