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