孫廣海
摘 要 對(duì)于任何設(shè)備而言,無(wú)不重視對(duì)外交互接口的時(shí)效性和正確性。如何在有限的資源條件下保證通信的實(shí)時(shí)性和正確性成了通信設(shè)計(jì)的關(guān)注重點(diǎn)。本文介紹了一種基于FPGA實(shí)現(xiàn)雙冗余422串口通信方法。
關(guān)鍵詞 FPGA;雙冗余;實(shí)時(shí)性;正確性
1技術(shù)領(lǐng)域
本方法涉及電子對(duì)抗領(lǐng)域,尤其是電子對(duì)抗中與外部接口通信處理,具體而言涉及一種基于FPGA的雙冗余422串口通信方法設(shè)計(jì)。
本方法提供一種基于FPGA的雙冗余RS422通信方法及實(shí)現(xiàn),該方法采用FPGA實(shí)現(xiàn)了雙路RS422串口通信的冗余備份,同時(shí)解決了每路RS422串口通信的主/從應(yīng)答機(jī)制,提高了通信的實(shí)時(shí)性,同時(shí)降低了應(yīng)用層任務(wù)處理資源的消耗[1]。
2背景技術(shù)
在現(xiàn)代電子對(duì)抗中,無(wú)論對(duì)于哪種系統(tǒng)設(shè)備而言,與外部接口通信都是關(guān)鍵環(huán)節(jié)。接收外部命令消息,上報(bào)自身設(shè)備信息都必須依賴于外部接口,所以外部接口通信尤其要保證穩(wěn)定、高效。隨著近年來(lái)電子技術(shù)的發(fā)展,雷達(dá)體制和信號(hào)形式變得越來(lái)越復(fù)雜而多樣,戰(zhàn)場(chǎng)空間電磁密度不斷提升。各型設(shè)備上報(bào)的信息越來(lái)越復(fù)雜,數(shù)據(jù)量越來(lái)越大,對(duì)外部接口設(shè)計(jì)的實(shí)時(shí)性要求越來(lái)越高。而由于受限與平臺(tái)總線形式和外部接口通信協(xié)議,通信方法設(shè)計(jì)難度隨之提升,且重要性不言而喻。下面介紹某型平臺(tái)上某型設(shè)備對(duì)外通信方法設(shè)計(jì)。
該型直升機(jī)機(jī)上配置的是RS422總線,機(jī)上綜合任務(wù)系統(tǒng)與某型設(shè)備系統(tǒng)(以下簡(jiǎn)稱設(shè)備系統(tǒng))通過(guò)兩路RS422實(shí)現(xiàn)通信,兩路RS422為雙冗余關(guān)系。為實(shí)現(xiàn)每路RS422通信的可靠性,定義通信協(xié)議為點(diǎn)對(duì)點(diǎn)的主/從應(yīng)答式全雙工422通信(傳輸周期50ms),綜合任務(wù)系統(tǒng)為主端,設(shè)備系統(tǒng)為從端。主端主動(dòng)發(fā)送通信消息,從端在接收到主端發(fā)送的消息時(shí),按照消息塊號(hào)判斷主端發(fā)送報(bào)文的正確性,正確則發(fā)送自身需上報(bào)的消息,主端接收到從端發(fā)送的消息報(bào)文時(shí),根據(jù)從端發(fā)送的消息塊號(hào)判斷從端發(fā)送報(bào)文的正確性,正確則發(fā)送下一包報(bào)文,否則,重新發(fā)送當(dāng)前報(bào)文。
若在設(shè)備系統(tǒng)軟件應(yīng)用層實(shí)現(xiàn)如此通信機(jī)制,則對(duì)設(shè)備系統(tǒng)處理資源提出很大需求,最主要是CPU的占用率,占用大量CPU時(shí)間資源來(lái)處理422消息接收和422消息發(fā)送,由于其他任務(wù)運(yùn)行優(yōu)先級(jí)低于接口通信任務(wù),導(dǎo)致其他任務(wù)無(wú)法搶占CPU運(yùn)行時(shí)間,導(dǎo)致信息上報(bào)不及時(shí)。同時(shí),由于CPU資源被占,導(dǎo)致通信接口接收消息和發(fā)送消息處理不及時(shí),影響接口通信的實(shí)時(shí)性和準(zhǔn)確性,接口通信低效。
為解決接口通信任務(wù)處理低效、實(shí)時(shí)性差的問題,我們采用FPGA來(lái)實(shí)現(xiàn)雙冗余和主/從應(yīng)答通信機(jī)制的處理,釋放設(shè)備系統(tǒng)CPU資源用于其他數(shù)據(jù)處理。
現(xiàn)有的接口通信任務(wù)處理是在應(yīng)用層運(yùn)行兩個(gè)通信接收處理任務(wù),每個(gè)接收任務(wù)處理一路RS422數(shù)據(jù),兩個(gè)任務(wù)同時(shí)接收對(duì)應(yīng)RS422鏈路數(shù)據(jù),根據(jù)鏈路狀態(tài),判別雙冗余特性,決定數(shù)據(jù)主路和輔路,主路實(shí)時(shí)接收422鏈路發(fā)送的字節(jié)數(shù)據(jù),接收完整一個(gè)數(shù)據(jù)報(bào)文后,進(jìn)行校驗(yàn)和消息塊號(hào)的合法性判斷,數(shù)據(jù)判斷正確后發(fā)送給數(shù)據(jù)處理任務(wù)進(jìn)行數(shù)據(jù)處理;輔路實(shí)時(shí)接收422鏈路數(shù)據(jù),并判斷數(shù)據(jù)類型是否為首次握手報(bào)文,若為首次握手報(bào)文則發(fā)送給應(yīng)用層數(shù)據(jù)處理任務(wù)處理,否則拋棄當(dāng)前數(shù)據(jù)報(bào)文。當(dāng)主路通信故障時(shí),則處理輔路報(bào)文數(shù)據(jù),當(dāng)主路恢復(fù)正常通信后,再恢復(fù)主路數(shù)據(jù)處理。同時(shí)應(yīng)用層運(yùn)行一個(gè)數(shù)據(jù)發(fā)送任務(wù),將待發(fā)送的數(shù)據(jù)緩存在FIFO中,數(shù)據(jù)接收任務(wù)接收到一個(gè)正確的通信報(bào)文后,將消息塊號(hào)傳遞給發(fā)送任務(wù),發(fā)送任務(wù)根據(jù)當(dāng)前消息塊號(hào)將需發(fā)送的數(shù)據(jù)報(bào)文發(fā)送給綜合任務(wù)系統(tǒng),實(shí)現(xiàn)通信機(jī)制的主/從應(yīng)答。數(shù)據(jù)發(fā)送任務(wù)將數(shù)據(jù)同時(shí)發(fā)送給兩路RS422,數(shù)據(jù)保持一致。
上述通信方法是基于應(yīng)用層任務(wù)的處理方法,能實(shí)現(xiàn)雙冗余422主/從應(yīng)答式通信,但在實(shí)際設(shè)備使用中主要存在以下問題:
(1)要處理兩路422接口數(shù)據(jù)接收和一路數(shù)據(jù)發(fā)送,需運(yùn)行兩個(gè)數(shù)據(jù)接收任務(wù)和一個(gè)數(shù)據(jù)處理任務(wù),增加了任務(wù)數(shù)量,增加了任務(wù)調(diào)度時(shí)間消耗;
(2)由于雙冗余特性,兩個(gè)接收任務(wù)必須實(shí)時(shí)接收數(shù)據(jù)處理,但只處理主路數(shù)據(jù),主路通信故障時(shí),才處理輔路數(shù)據(jù),導(dǎo)致任務(wù)運(yùn)行低效;
(3)由于通信機(jī)制發(fā)送周期為50ms,當(dāng)無(wú)應(yīng)用數(shù)據(jù)發(fā)送時(shí),發(fā)送的是純通信包,用以保證通信鏈路的正常,兩個(gè)數(shù)據(jù)接收任務(wù)周期性讀取數(shù)據(jù),應(yīng)用層回復(fù)純通信包,任務(wù)運(yùn)行效率較低;
(4)由于兩個(gè)數(shù)據(jù)接收任務(wù)是通過(guò)CPU時(shí)間搶占式調(diào)度,兩者任務(wù)不能同時(shí)運(yùn)行,影響的數(shù)據(jù)接收處理的實(shí)時(shí)性;
(5)由于數(shù)據(jù)接收任務(wù)和發(fā)送任務(wù)優(yōu)先級(jí)較其他任務(wù)優(yōu)先級(jí)高,尤其是信號(hào)處理任務(wù),導(dǎo)致其他任務(wù)搶占不到CPU運(yùn)行資源或運(yùn)行資源不足,導(dǎo)致信號(hào)處理無(wú)法完成,影響設(shè)備告警或偵察。
綜上所述,對(duì)應(yīng)用層任務(wù)處理雙冗余422主/從應(yīng)答式通信方法進(jìn)行工程優(yōu)化改進(jìn)并實(shí)現(xiàn),是設(shè)備適應(yīng)平臺(tái)總線形式和通信機(jī)制的迫切需要,它的實(shí)現(xiàn)可以提高對(duì)外通信的效率和實(shí)時(shí)性,同時(shí)提高了應(yīng)用層任務(wù)資源使用率[2]。
3方法內(nèi)容
本方法目的在于提供一種基于FPGA的雙冗余422通信方法及實(shí)現(xiàn),通過(guò)FPGA的并行處理,實(shí)現(xiàn)雙冗余422的同步判斷,實(shí)現(xiàn)通信的實(shí)時(shí)性;同時(shí)根據(jù)接收到的消息塊號(hào)將需要發(fā)送的消息報(bào)文發(fā)送給綜合任務(wù)系統(tǒng),實(shí)現(xiàn)了每路422通信的主/從應(yīng)答;在FPGA層實(shí)現(xiàn)純通信報(bào)文的回復(fù),只將應(yīng)用消息發(fā)送給應(yīng)用層,保證了通信傳輸?shù)母咝浴?/p>
本方法的另一目的在于降低了應(yīng)用層任務(wù)數(shù)量,同時(shí)去除了應(yīng)用層中運(yùn)行優(yōu)先級(jí)高且高頻率重復(fù)運(yùn)行的任務(wù),降低了CPU的使用負(fù)荷,提高了信號(hào)處理效率。
為達(dá)成上述目的,本方法所采用的技術(shù)方案如下:
建立兩個(gè)獨(dú)立的接收FIFO,實(shí)時(shí)接收兩路422串口數(shù)據(jù);
建立一個(gè)發(fā)送FIFO,用于存放應(yīng)用層需發(fā)送的消息數(shù)據(jù);
建立一個(gè)RAM,用于存放接收消息中消息塊號(hào),默認(rèn)初始化為0;
設(shè)定主路和輔路標(biāo)記,實(shí)時(shí)接收兩路數(shù)據(jù),優(yōu)先處理主路數(shù)據(jù),同時(shí)判斷輔路數(shù)據(jù)是否為“首次握手”命令,若為“首次握手”命令,則將消息報(bào)文發(fā)送給應(yīng)用層,否則拋棄當(dāng)前報(bào)文;
實(shí)時(shí)判斷兩路422通信狀態(tài),當(dāng)任意一路連續(xù)5個(gè)周期內(nèi)未接收到數(shù)據(jù)時(shí),則判斷該鏈路通信故障,并將故障信息發(fā)送給應(yīng)用層,當(dāng)一路通信故障時(shí),調(diào)用另一路的數(shù)據(jù);
判斷接收數(shù)據(jù)長(zhǎng)度,校驗(yàn)和消息塊號(hào),若報(bào)文正確,則將消息塊號(hào)放入RAM中;
判斷報(bào)文類型,若為純通信包,則判斷發(fā)送FIFO中是否為空,若為空,則讀取RAM中消息塊號(hào),發(fā)送純通信包給綜合任務(wù)系統(tǒng),若不為空,則讀取發(fā)送FIFO中的一個(gè)報(bào)文消息和RAM中消息塊號(hào),發(fā)送給綜合任務(wù)系統(tǒng);
若接收?qǐng)?bào)文為應(yīng)用消息,則將應(yīng)用消息發(fā)送給應(yīng)用層;
接收應(yīng)用層發(fā)送的上報(bào)數(shù)據(jù),放入發(fā)送FIFO緩存中;
進(jìn)一步的實(shí)施例中,所述的“首次握手”命令在FPGA層做一級(jí)判斷,當(dāng)兩條鏈路同時(shí)收到“首次握手”命令時(shí),只發(fā)送一次“首次握手”命令給應(yīng)用層[3]。
4具體實(shí)施方式
為了更了解本方法的技術(shù)內(nèi)容,特舉具體實(shí)施例說(shuō)明如下。
第一步為鏈路狀態(tài)判斷流程,其實(shí)現(xiàn)包括以下步驟:
(1)設(shè)計(jì)兩個(gè)FIFO存儲(chǔ)器,用以存儲(chǔ)兩路422鏈路發(fā)送的數(shù)據(jù);
(2)設(shè)計(jì)一個(gè)RAM存儲(chǔ)器,用于存儲(chǔ)接收消息的消息塊號(hào),Ram存儲(chǔ)器設(shè)置為連續(xù)讀寫模式;
(3)每50ms檢查FIFO存儲(chǔ)器中是否有數(shù)據(jù),若有數(shù)據(jù),則讀取相應(yīng)數(shù)據(jù)進(jìn)行后續(xù)數(shù)據(jù)處理,若沒有數(shù)據(jù),則統(tǒng)計(jì)周期次數(shù),若連續(xù)5個(gè)周期FIFO中無(wú)數(shù)據(jù),則將故障信息上報(bào)應(yīng)用層。
第二步為雙冗余判別流程,其實(shí)現(xiàn)包括以下步驟:
(1)檢查FIFO1中是否有數(shù)據(jù),若有數(shù)據(jù),則判斷FIFO2中數(shù)據(jù)類型;
(2)若FIFO2中數(shù)據(jù)類型為“首次握手”,則判斷FIFO1中數(shù)據(jù)類型,若FIFO1中數(shù)據(jù)為“首次握手”,則處理FIFO1中數(shù)據(jù);
(3)若FIFO1中數(shù)據(jù)類型不是“首次握手”,則優(yōu)先處理FIFO2中數(shù)據(jù),再處理FIFO1中數(shù)據(jù);
(4)若步驟b中FIFO2中數(shù)據(jù)類型不是“首次握手”,則處理FIFO1中數(shù)據(jù);
(5)若步驟a中FIFO1中無(wú)數(shù)據(jù),則處理FIFO2中數(shù)據(jù)。
第三步為主/從應(yīng)答機(jī)制判斷,其實(shí)現(xiàn)包括以下步驟:
(1)判斷FIFO中處理數(shù)據(jù)的長(zhǎng)度、消息頭、檢驗(yàn)和等是否正確,若不正確,則拋棄當(dāng)前報(bào)文;
(2)若步驟a中FIFO中數(shù)據(jù)正確,則判斷報(bào)文中消息塊號(hào)與Ram中消息塊號(hào)是否連續(xù),若不連續(xù),則拋棄當(dāng)前報(bào)文;
(3)若步驟b中消息塊號(hào)連續(xù),則對(duì)報(bào)文數(shù)據(jù)進(jìn)行處理。
5驗(yàn)證說(shuō)明
經(jīng)驗(yàn)證:該方法實(shí)現(xiàn)了雙冗余主/從應(yīng)答式通信;解決了系統(tǒng)軟件處理時(shí)間和處理資源不足的問題;同時(shí)保證了數(shù)據(jù)傳輸時(shí)的可靠性與實(shí)時(shí)性。
參考文獻(xiàn)
[1] 徐光輝,程?hào)|旭,黃如,等.基于FPGA的嵌入式開發(fā)及應(yīng)用[M].北京:電子工業(yè)出版社,2006:109.
[2] 巫忠躍,岳青,王奧.基于FPGA的短波通信信道多徑效應(yīng)模擬[J].通信技術(shù),2019(11):2808-2812.
[3] 趙龍,汪弈舟,黃明.可見光通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)—基于FPGA全數(shù)字控制[J].工業(yè)技術(shù)創(chuàng)新,2019(6):38-42.