本發(fā)明涉及航空航天、可靠性和串行接口消息處理領(lǐng)域,特別涉及一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸方法。
背景技術(shù):
串行接口由于其傳輸速率高、可靠性高、技術(shù)成熟、易于擴(kuò)展等優(yōu)點(diǎn),在航空航天系統(tǒng)電氣設(shè)備互聯(lián)中得到了廣泛的應(yīng)用。串行接口一般采用點(diǎn)對(duì)點(diǎn)的連接方式,相比總線接口,物理層、鏈路層及協(xié)議層均有所簡(jiǎn)化,提高易用性的同時(shí)降低使用成本。串行接口的操作實(shí)體一般包括發(fā)送器和接收器,其中發(fā)送器接收協(xié)議層數(shù)據(jù),通過鏈路層增加傳輸協(xié)議后,經(jīng)物理層發(fā)送到接收器物理層,再經(jīng)接收器鏈路層解析協(xié)議,獲取傳輸數(shù)據(jù)后由協(xié)議層進(jìn)行應(yīng)用。發(fā)送器協(xié)議層的數(shù)據(jù)為二進(jìn)制數(shù)據(jù)量,經(jīng)協(xié)議層發(fā)送時(shí)增加起始位、校驗(yàn)位和停止位,物理層按照起始位、數(shù)據(jù)位、校驗(yàn)位和停止位的順序依次通過差分電纜向接收器傳輸數(shù)據(jù)。接收器物理層從差分電纜接收數(shù)據(jù)后,協(xié)議層對(duì)起始位、數(shù)據(jù)位、校驗(yàn)位和停止位的有效性進(jìn)行判斷,判斷無(wú)誤后將數(shù)據(jù)位送入?yún)f(xié)議層,待協(xié)議層使用。常用串口在傳輸電纜及協(xié)議層已經(jīng)增加了可靠性措施,提高了數(shù)據(jù)傳輸?shù)目煽啃裕诟蓴_環(huán)境下,以上措施仍不足以保障串行接口通信的高可靠性,為了解決干擾環(huán)境下串行接口可靠性降低的問題,提出一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸系統(tǒng)及方法。
從文獻(xiàn)中看,國(guó)內(nèi)外尚未針對(duì)通過串行接口傳輸?shù)年P(guān)鍵測(cè)試指令高可靠性處理的實(shí)例,因此,提出一種基于串口冗余策略的關(guān)鍵測(cè)試指令高可靠性傳輸方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的技術(shù)解決問題是:克服現(xiàn)有技術(shù)的不足,提供一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸系統(tǒng)及方法。
本發(fā)明的技術(shù)解決方案是:一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸系統(tǒng),包括串行接口發(fā)送器和串行接口接收器;其中,串行接口發(fā)送器包括數(shù)據(jù)輸出模塊、數(shù)據(jù)接收模塊、數(shù)據(jù)幀格式判斷模塊;串行接口接收器包括數(shù)據(jù)接收模塊、數(shù)據(jù)幀格式判斷模塊、指令有效性判斷模塊及數(shù)據(jù)輸出模塊;
串行接口發(fā)送器的數(shù)據(jù)輸出模塊與串行接口接收器的數(shù)據(jù)接收模塊、以及串行接口接收器的數(shù)據(jù)輸出模塊與串行接口發(fā)送器的數(shù)據(jù)接收模塊之間通過冗余串行接口進(jìn)行數(shù)據(jù)交互;
數(shù)據(jù)輸出模塊,對(duì)待輸出數(shù)據(jù)進(jìn)行數(shù)據(jù)幀封裝后,查詢輸出狀態(tài),在輸出狀態(tài)為閑時(shí),分別通過冗余串行接口向數(shù)據(jù)接收模塊發(fā)送封裝的數(shù)據(jù);所述的待輸出數(shù)據(jù)對(duì)于串行接口發(fā)送器為關(guān)鍵指令和幀計(jì)數(shù),每次關(guān)鍵指令發(fā)送時(shí),幀計(jì)數(shù)加1;對(duì)于串行接口接收器,為關(guān)鍵指令的接收、解析狀態(tài);
數(shù)據(jù)接收模塊啟動(dòng)數(shù)據(jù)接收后,查詢?nèi)哂啻薪涌诮邮諣顟B(tài),當(dāng)狀態(tài)為非空時(shí),接收所有串行接口數(shù)據(jù)存放在冗余串行接口循環(huán)隊(duì)列中;否則繼續(xù)查詢?nèi)哂啻薪涌诮邮諣顟B(tài),等待接收串行接口數(shù)據(jù);
數(shù)據(jù)幀格式判斷模塊,判斷冗余串行接口循環(huán)隊(duì)列中的數(shù)據(jù)的長(zhǎng)度是否超過最小完整幀長(zhǎng),若超過,則并對(duì)數(shù)據(jù)的完整性進(jìn)行判斷,當(dāng)接收到一幀完整數(shù)據(jù)時(shí),將完整數(shù)據(jù)幀從數(shù)據(jù)幀頭、數(shù)據(jù)區(qū)、校驗(yàn)和以及數(shù)據(jù)幀尾四個(gè)方面判斷確定當(dāng)前數(shù)據(jù)幀是否為有效數(shù)據(jù)幀,當(dāng)有效時(shí),從隊(duì)列中獲取數(shù)據(jù),將數(shù)據(jù)區(qū)中的數(shù)據(jù)輸出至指令有效性判斷模塊;當(dāng)無(wú)效時(shí),丟棄該數(shù)據(jù)幀;
指令有效性判斷模塊對(duì)輸入數(shù)據(jù)中的幀計(jì)數(shù)進(jìn)行判斷,當(dāng)該幀計(jì)數(shù)對(duì)應(yīng)關(guān)鍵指令未執(zhí)行時(shí),解析關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,當(dāng)該幀計(jì)數(shù)對(duì)應(yīng)指令已執(zhí)行時(shí),丟棄該指令;并將關(guān)鍵指令的接收、解析狀態(tài)發(fā)送至數(shù)據(jù)輸出模塊。
所述指令有效性判斷模塊的具體實(shí)現(xiàn)方式如下:
(2.1)根據(jù)接收的數(shù)據(jù)區(qū)中的數(shù)據(jù),判斷冗余串行接口中的兩個(gè)接口的指令更新狀態(tài),當(dāng)兩個(gè)接口指令均更新,則執(zhí)行步驟(2.2),若只有一個(gè)接口的指令更新,則執(zhí)行步驟(2.3),否則,等待接收數(shù)據(jù);
(2.2)獲取兩個(gè)接口對(duì)應(yīng)數(shù)據(jù)中的幀計(jì)數(shù),當(dāng)一個(gè)接口記為接口A的幀計(jì)數(shù)大于記錄的有效指令幀序號(hào)且另一接口記為接口B的幀計(jì)數(shù)不大于記錄的有效指令幀序號(hào)時(shí),則解析接口A對(duì)應(yīng)的關(guān)鍵指令,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至數(shù)據(jù)輸出模塊,并將接口A的幀計(jì)數(shù)記錄為有效指令幀序號(hào);當(dāng)兩個(gè)接口的幀計(jì)數(shù)都大于記錄的有效指令幀序號(hào),則進(jìn)一步比較兩個(gè)接口的幀計(jì)數(shù),將幀計(jì)數(shù)較大的接口對(duì)應(yīng)的關(guān)鍵指令進(jìn)行解析,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至數(shù)據(jù)輸出模塊,并將該接口的幀計(jì)數(shù)記錄為有效指令幀序號(hào);當(dāng)兩個(gè)接口的幀計(jì)數(shù)都不大于記錄的有效指令幀序號(hào)時(shí),則丟棄接收的數(shù)據(jù),發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至數(shù)據(jù)輸出模塊,等待接收數(shù)據(jù);
(2.3)獲取該接口對(duì)應(yīng)數(shù)據(jù)中的幀計(jì)數(shù),判斷該幀計(jì)數(shù)是否大于記錄的有效指令幀序號(hào),若大于,則解析該接口對(duì)應(yīng)的關(guān)鍵指令,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至數(shù)據(jù)輸出模塊,并將該接口的幀計(jì)數(shù)記錄為有效指令幀序號(hào);否則丟棄接收的數(shù)據(jù),發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至數(shù)據(jù)輸出模塊,等待接收數(shù)據(jù)。
數(shù)據(jù)幀格式判斷模塊的實(shí)現(xiàn)方式如下:
第一步,判斷冗余串行接口循環(huán)隊(duì)列中數(shù)據(jù)長(zhǎng)度是否大于最小完整幀,若大于,則轉(zhuǎn)第二步;否則,繼續(xù)等待數(shù)據(jù);
第二步,根據(jù)幀格式從循環(huán)隊(duì)列頭指針開始尋找?guī)?,若找到幀尾,則轉(zhuǎn)第三步;否則,繼續(xù)等待數(shù)據(jù)轉(zhuǎn)第一步;
第三步,根據(jù)幀格式中幀長(zhǎng)度位置與幀尾的偏移量,從循環(huán)隊(duì)列中獲取當(dāng)前幀長(zhǎng)度;進(jìn)而根據(jù)幀長(zhǎng)度計(jì)算幀頭在循環(huán)隊(duì)列中的位置;
第四步,獲取幀頭,將幀頭與幀格式進(jìn)行一致性判斷,若幀頭與幀格式一致,則轉(zhuǎn)第五步,否則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,繼續(xù)等待數(shù)據(jù)轉(zhuǎn)第一步;
第五步,根據(jù)校驗(yàn)值位置與幀尾偏移量獲取當(dāng)前數(shù)據(jù)校驗(yàn)值,并根據(jù)接收的數(shù)據(jù)區(qū)中的數(shù)據(jù)重新計(jì)算校驗(yàn)值,對(duì)接收校驗(yàn)值與計(jì)算校驗(yàn)值進(jìn)行比對(duì);若二者一致,則從隊(duì)列中獲取數(shù)據(jù)并將數(shù)據(jù)區(qū)中的數(shù)據(jù)輸出至指令有效性判斷模塊;若不一致,則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,繼續(xù)等待數(shù)據(jù)轉(zhuǎn)第一步。
一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸方法,步驟如下:
(1)發(fā)送方設(shè)置幀計(jì)數(shù),初始值為0;根據(jù)測(cè)試需求,在當(dāng)前傳輸周期,將幀計(jì)數(shù)加1,并將待傳輸?shù)年P(guān)鍵指令與幀計(jì)數(shù)封裝后采用雙冗余串行接口的方式進(jìn)行發(fā)送;
(2)接收方接收封裝后的關(guān)鍵指令與幀計(jì)數(shù),并存放在串行接口循環(huán)隊(duì)列中,執(zhí)行步驟(3);
(3)判斷上述循環(huán)隊(duì)列中的數(shù)據(jù)長(zhǎng)度是否大于最小完整幀,若大于,則轉(zhuǎn)步驟(4);否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(4)對(duì)循環(huán)隊(duì)列中的數(shù)據(jù)進(jìn)行完整及一致性判斷,若滿足條件,則從循環(huán)隊(duì)列中獲取數(shù)據(jù)并執(zhí)行步驟(5);否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(5)從獲取的數(shù)據(jù)中進(jìn)一步讀取數(shù)據(jù)區(qū)中的數(shù)據(jù),根據(jù)接收的數(shù)據(jù)區(qū)中的數(shù)據(jù),判斷冗余串行接口中的兩個(gè)接口的指令更新狀態(tài),當(dāng)兩個(gè)接口指令均更新,則執(zhí)行步驟(6),若只有一個(gè)接口的指令更新,則執(zhí)行步驟(7),否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(6)獲取兩個(gè)接口對(duì)應(yīng)數(shù)據(jù)中的幀計(jì)數(shù),當(dāng)一個(gè)接口記為接口A的幀計(jì)數(shù)大于記錄的有效指令幀序號(hào)且另一接口記為接口B的幀計(jì)數(shù)不大于記錄的有效指令幀序號(hào)時(shí),則解析接口A對(duì)應(yīng)的關(guān)鍵指令,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,并將接口A的幀計(jì)數(shù)記錄為有效指令幀序號(hào);當(dāng)兩個(gè)接口的幀計(jì)數(shù)都大于記錄的有效指令幀序號(hào),則進(jìn)一步比較兩個(gè)接口的幀計(jì)數(shù),將幀計(jì)數(shù)較大的接口對(duì)應(yīng)的關(guān)鍵指令進(jìn)行解析,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,并將該接口的幀計(jì)數(shù)記錄為有效指令幀序號(hào);當(dāng)兩個(gè)接口的幀計(jì)數(shù)都不大于記錄的有效指令幀序號(hào)時(shí),則丟棄接收的數(shù)據(jù),發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);所述的有效指令幀序號(hào)的初始值為0;
(7)獲取該接口對(duì)應(yīng)數(shù)據(jù)中的幀計(jì)數(shù),判斷該幀計(jì)數(shù)是否大于記錄的有效指令幀序號(hào),若大于,則解析該接口對(duì)應(yīng)的關(guān)鍵指令,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,并將該接口的幀計(jì)數(shù)記錄為有效指令幀序號(hào);否則丟棄接收的數(shù)據(jù),發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1)。
所述的完整及一致性判斷步驟如下:
(4.1)根據(jù)幀格式從循環(huán)隊(duì)列頭指針開始尋找?guī)玻粽业綆?,則轉(zhuǎn)(4.2);否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(4.2)根據(jù)幀格式中幀長(zhǎng)度位置與幀尾的偏移量,從循環(huán)隊(duì)列中獲取當(dāng)前幀長(zhǎng)度;進(jìn)而根據(jù)幀長(zhǎng)度計(jì)算幀頭在循環(huán)隊(duì)列中的位置;
(4.3)獲取幀頭,將幀頭與幀格式進(jìn)行一致性判斷,若幀頭與幀格式一致,則轉(zhuǎn)(4.4),否則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(4.4)根據(jù)校驗(yàn)值位置與幀尾偏移量獲取當(dāng)前數(shù)據(jù)校驗(yàn)值,并根據(jù)接收的數(shù)據(jù)區(qū)中的數(shù)據(jù)重新計(jì)算校驗(yàn)值,對(duì)接收校驗(yàn)值與計(jì)算校驗(yàn)值進(jìn)行比對(duì);若二者一致,則從隊(duì)列中獲取數(shù)據(jù);若不一致,則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1)。
本發(fā)明與現(xiàn)有技術(shù)相比有益效果為:
(1)一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸系統(tǒng)及方法,其中關(guān)鍵測(cè)試指令為影響系統(tǒng)正常運(yùn)行或測(cè)試流程的指令,如自檢指令、諸元裝訂指令、電池激活指令等。當(dāng)在干擾條件下兩個(gè)節(jié)點(diǎn)通過串行接口進(jìn)行關(guān)鍵測(cè)試指令交互時(shí),單路串口雙向失效或雙路串口單向失效的情況下,仍能保證節(jié)點(diǎn)數(shù)據(jù)通信的可靠性,避免在強(qiáng)電磁干擾情況下關(guān)鍵測(cè)試指令傳輸異常等問題,從而所屬系統(tǒng)運(yùn)行的持續(xù)性、可靠性和安全性,為系統(tǒng)正常持續(xù)運(yùn)行、及時(shí)可靠完成各項(xiàng)功能奠定基礎(chǔ)。
(2)通過本發(fā)明提供的基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸系統(tǒng)及方法,當(dāng)干擾條件造成單路串行接口傳輸關(guān)鍵測(cè)試指令異常時(shí),冗余串行接口仍可通過備份通道完成測(cè)試指令的傳輸及測(cè)試狀態(tài)的接收,避免傳統(tǒng)單路串行接口傳輸方式在干擾條件下數(shù)據(jù)丟失的情況,從而確保串行接口數(shù)據(jù)傳輸?shù)募皶r(shí)性和可靠性,保證系統(tǒng)基于串行接口的功能性能滿足設(shè)計(jì)要求。
(3)串行接口接收器從冗余串行接口接收指令后,對(duì)指令合法性進(jìn)行判斷,當(dāng)指令合法時(shí),執(zhí)行對(duì)應(yīng)操作,避免冗余串口相同指令重復(fù)執(zhí)行;
(4)串行接口接收器完成指令操作后,通過冗余串行接口向串行接口發(fā)送器返回測(cè)試狀態(tài),在冗余串行接口單路雙向故障或雙路單向故障的情況下,確保測(cè)試狀態(tài)數(shù)據(jù)及時(shí)返回發(fā)送器,從而保障測(cè)試流程正常進(jìn)行;
通過本發(fā)明可顯著提高串行接口傳輸關(guān)鍵測(cè)試指令及測(cè)試狀態(tài)的可靠性,避免干擾條件下串行接口無(wú)法完成數(shù)據(jù)傳輸?shù)膯栴},進(jìn)一步提高系統(tǒng)運(yùn)行的可靠性,將該技術(shù)應(yīng)用于實(shí)際生產(chǎn)具有重要意義。
附圖說(shuō)明
圖1為本發(fā)明系統(tǒng)結(jié)構(gòu)圖;
圖2為本發(fā)明數(shù)據(jù)接收模塊工作流程圖;
圖3為本發(fā)明數(shù)據(jù)幀格式判斷模塊工作流程圖;
圖4為本發(fā)明指令有效性判斷模塊工作流程圖;
圖5為本發(fā)明數(shù)據(jù)輸出模塊工作流程圖。
具體實(shí)施方式
下面結(jié)合附圖及實(shí)例對(duì)本發(fā)明做詳細(xì)說(shuō)明。如圖1所示,本發(fā)明一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸系統(tǒng),包括串行接口發(fā)送器和串行接口接收器;其中,串行接口發(fā)送器包括數(shù)據(jù)輸出模塊、數(shù)據(jù)接收模塊、數(shù)據(jù)幀格式判斷模塊;串行接口接收器包括數(shù)據(jù)接收模塊、數(shù)據(jù)幀格式判斷模塊、指令有效性判斷模塊及數(shù)據(jù)輸出模塊;
串行接口發(fā)送器的數(shù)據(jù)輸出模塊與串行接口接收器的數(shù)據(jù)接收模塊、以及串行接口接收器的數(shù)據(jù)輸出模塊與串行接口發(fā)送器的數(shù)據(jù)接收模塊之間通過冗余串行接口進(jìn)行數(shù)據(jù)交互;
數(shù)據(jù)輸出模塊,對(duì)待輸出數(shù)據(jù)進(jìn)行數(shù)據(jù)幀封裝后,查詢輸出狀態(tài),在輸出狀態(tài)為閑時(shí),分別通過冗余串行接口向數(shù)據(jù)接收模塊發(fā)送封裝的數(shù)據(jù);所述的待輸出數(shù)據(jù)對(duì)于串行接口發(fā)送器為關(guān)鍵指令和幀計(jì)數(shù),每次關(guān)鍵指令發(fā)送時(shí),幀計(jì)數(shù)加1;對(duì)于串行接口接收器,為關(guān)鍵指令的接收、解析狀態(tài);
數(shù)據(jù)接收模塊啟動(dòng)數(shù)據(jù)接收后,查詢?nèi)哂啻薪涌诮邮諣顟B(tài),當(dāng)狀態(tài)為非空時(shí),接收所有串行接口數(shù)據(jù)存放在冗余串行接口循環(huán)隊(duì)列中;否則繼續(xù)查詢?nèi)哂啻薪涌诮邮諣顟B(tài),等待接收串行接口數(shù)據(jù);
數(shù)據(jù)幀格式判斷模塊,判斷冗余串行接口循環(huán)隊(duì)列中的數(shù)據(jù)的長(zhǎng)度是否超過最小完整幀長(zhǎng),若超過,則并對(duì)數(shù)據(jù)的完整性進(jìn)行判斷,當(dāng)接收到一幀完整數(shù)據(jù)時(shí),將完整數(shù)據(jù)幀從數(shù)據(jù)幀頭、數(shù)據(jù)區(qū)、校驗(yàn)和以及數(shù)據(jù)幀尾四個(gè)方面判斷確定當(dāng)前數(shù)據(jù)幀是否為有效數(shù)據(jù)幀,當(dāng)有效時(shí),從隊(duì)列中獲取數(shù)據(jù),將數(shù)據(jù)區(qū)中的數(shù)據(jù)輸出至指令有效性判斷模塊;當(dāng)無(wú)效時(shí),丟棄該數(shù)據(jù)幀;
指令有效性判斷模塊對(duì)輸入數(shù)據(jù)中的幀計(jì)數(shù)進(jìn)行判斷,當(dāng)該幀計(jì)數(shù)對(duì)應(yīng)關(guān)鍵指令未執(zhí)行時(shí),解析關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,當(dāng)該幀計(jì)數(shù)對(duì)應(yīng)指令已執(zhí)行時(shí),丟棄該指令;并將關(guān)鍵指令的接收、解析狀態(tài)發(fā)送至數(shù)據(jù)輸出模塊。
下面分別對(duì)上述各模塊進(jìn)行詳細(xì)說(shuō)明。
(一)數(shù)據(jù)接收模塊
如圖2所示,數(shù)據(jù)接收模塊的工作流程為:
1、冗余串行接口開始接收數(shù)據(jù)后,首先根據(jù)串行接口狀態(tài)寄存器判斷數(shù)據(jù)接收緩沖狀態(tài),當(dāng)接收緩沖非空時(shí),則進(jìn)行數(shù)據(jù)接收。
2、步驟1中,當(dāng)接收緩沖為空時(shí),表示當(dāng)前無(wú)新數(shù)據(jù),無(wú)需接收,結(jié)束當(dāng)前接收流程;
3、當(dāng)接收緩沖非空時(shí),對(duì)接口接收循環(huán)隊(duì)列狀態(tài)進(jìn)行判斷,當(dāng)隊(duì)列非滿時(shí),進(jìn)行數(shù)據(jù)接收。
4、步驟2中,當(dāng)接口接收循環(huán)隊(duì)列為滿時(shí),繼續(xù)寫入隊(duì)列會(huì)造成數(shù)據(jù)丟失,因此暫停數(shù)據(jù)接收,結(jié)束當(dāng)前接收流程。
5、當(dāng)接收循環(huán)隊(duì)列非滿時(shí),獲取冗余串行接口循環(huán)隊(duì)列尾指針,從數(shù)據(jù)接收緩沖讀取數(shù)據(jù)后寫入尾指針指向位置;
6、數(shù)據(jù)寫入循環(huán)隊(duì)列后,對(duì)尾指針進(jìn)行判斷,當(dāng)尾指針達(dá)到循環(huán)隊(duì)列隊(duì)尾時(shí),更新尾指針位置至隊(duì)首;
7、步驟4中,當(dāng)判斷尾指針未達(dá)到循環(huán)隊(duì)列隊(duì)尾時(shí),則返回模塊入口,繼續(xù)接收數(shù)據(jù)。
(二)數(shù)據(jù)幀格式判斷模塊
如圖3所示,數(shù)據(jù)幀格式判斷模塊的工作流程為:
1、判斷冗余串行接口循環(huán)隊(duì)列中數(shù)據(jù)長(zhǎng)度是否大于最小完整幀,當(dāng)判斷條件滿足,則表明循環(huán)隊(duì)列中可能有一幀完整數(shù)據(jù)幀;
2、步驟1中,當(dāng)判斷條件不滿足時(shí),表明循環(huán)隊(duì)列中無(wú)完整數(shù)據(jù)幀,結(jié)束當(dāng)前數(shù)據(jù)幀格式判斷流程;
3、當(dāng)循環(huán)隊(duì)列中可能有一幀完整數(shù)據(jù)幀時(shí),根據(jù)幀格式從循環(huán)隊(duì)列頭指針開始尋找?guī)玻?duì)幀尾與幀格式要求一致性進(jìn)行判斷;
4、步驟3中,當(dāng)循環(huán)隊(duì)列中未找到合格幀尾,表明當(dāng)前數(shù)據(jù)中未包含一幀完整數(shù)據(jù),結(jié)束當(dāng)前數(shù)據(jù)幀格式判斷流程;
5、步驟3中,當(dāng)循環(huán)隊(duì)列中找到合格幀尾,根據(jù)幀格式中幀長(zhǎng)度位置與幀尾的偏移量,從循環(huán)隊(duì)列中獲取當(dāng)前幀長(zhǎng)度;
6、獲取幀長(zhǎng)度后,根據(jù)幀長(zhǎng)度計(jì)算幀頭在循環(huán)隊(duì)列中的位置,獲取幀頭后對(duì)幀頭與幀格式一致性進(jìn)行判斷;
7、步驟6中,若幀頭與幀格式不一致,表明當(dāng)前循環(huán)隊(duì)列中無(wú)合格幀,則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,結(jié)束當(dāng)前數(shù)據(jù)幀格式判斷流程;
8、步驟6中,若幀頭與幀格式一致,則根據(jù)校驗(yàn)值位置與幀尾偏移獲取當(dāng)前數(shù)據(jù)校驗(yàn)值,并根據(jù)接收數(shù)據(jù)計(jì)算校驗(yàn)值,對(duì)接收校驗(yàn)值與計(jì)算校驗(yàn)值進(jìn)行比對(duì);
9、步驟8中,若接收校驗(yàn)值與計(jì)算校驗(yàn)值不一致,表明當(dāng)前數(shù)據(jù)幀傳輸過程出現(xiàn)錯(cuò)誤,則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,結(jié)束當(dāng)前數(shù)據(jù)幀格式判斷流程;
10、步驟8中,若接收校驗(yàn)值與計(jì)算校驗(yàn)值一致,則輸出數(shù)據(jù)幀,結(jié)束當(dāng)前數(shù)據(jù)幀格式判斷流程。
(三)指令有效性判斷模塊
如圖4所示,指令有效性判斷模塊的工作流程如下:
1、指令有效性判斷模塊對(duì)冗余串行接口指令更新狀態(tài)進(jìn)行查詢,根據(jù)查詢結(jié)果不同執(zhí)行不同的操作;
2、步驟1中,當(dāng)冗余串行接口中的接口A及接口B指令均已更新,則獲取接口A及接口B指令對(duì)應(yīng)幀計(jì)數(shù),并比較冗余串行接口幀計(jì)數(shù)與上一幀有效指令幀序號(hào),幀計(jì)數(shù)從0開始,在測(cè)試過程中連續(xù)增加;
3、步驟2中,當(dāng)接口A幀計(jì)數(shù)大于上一幀有效指令幀序號(hào)且接口B幀計(jì)數(shù)不大于上一幀有效指令幀序號(hào)時(shí),解析接口A對(duì)應(yīng)關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,將接口A幀計(jì)數(shù)更新為上一幀有效指令幀序號(hào);
4、步驟2中,當(dāng)接口B幀計(jì)數(shù)大于上一幀有效指令幀序號(hào)且接口A幀計(jì)數(shù)不大于上一幀有效指令幀序號(hào)時(shí),解析接口B對(duì)應(yīng)關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,并將接口B幀計(jì)數(shù)更新為上一幀有效指令幀序號(hào);
5、步驟2中,當(dāng)接口A及接口B幀計(jì)數(shù)均大于上一幀有效指令幀序號(hào)時(shí),對(duì)接口A及接口B幀計(jì)數(shù)進(jìn)行大小進(jìn)行判別;
6、步驟5中,當(dāng)接口A幀計(jì)數(shù)大于接口B幀計(jì)數(shù)時(shí),解析接口A對(duì)應(yīng)關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,并將接口A幀計(jì)數(shù)更新為上一幀有效指令幀序號(hào),結(jié)束指令有效性判斷流程;
7、步驟5中,當(dāng)接口B幀計(jì)數(shù)大于接口A幀計(jì)數(shù)時(shí),解析接口B對(duì)應(yīng)關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,并將接口B幀計(jì)數(shù)更新為上一幀有效指令幀序號(hào),結(jié)束指令有效性判斷流程;
8、步驟1中,當(dāng)冗余串行接口中的接口A指令已更新,接口B指令未更新,則比較接口A指令對(duì)應(yīng)幀計(jì)數(shù)與上一幀有效指令幀序號(hào);
9、步驟8中,若接口A指令幀計(jì)數(shù)大于上一幀有效指令幀序號(hào),解析接口A對(duì)應(yīng)關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,并將接口A幀計(jì)數(shù)更新為上一幀有效指令幀序號(hào),結(jié)束指令有效性判斷流程;
10、步驟8中,若接口A指令幀計(jì)數(shù)不大于上一幀有效指令幀序號(hào),則丟棄接口A指令,結(jié)束指令有效性判斷流程;
11、步驟1中,當(dāng)冗余串行接口中的接口B指令已更新,接口A指令未更新,則比較接口B指令對(duì)應(yīng)幀計(jì)數(shù)與上一幀有效指令幀序號(hào);
12、步驟11中,若接口B指令幀計(jì)數(shù)大于上一幀有效指令幀序號(hào),解析接口B對(duì)應(yīng)關(guān)鍵指令并發(fā)送至外部相應(yīng)執(zhí)行部件,并將接口B幀計(jì)數(shù)更新為上一幀有效指令幀序號(hào),結(jié)束指令有效性判斷流程;
13、步驟11中,若接口B指令幀計(jì)數(shù)不大于上一幀有效指令幀序號(hào),則丟棄接口B指令,結(jié)束指令有效性判斷流程。
(四)數(shù)據(jù)輸出模塊
如圖5所示,數(shù)據(jù)輸出模塊的工作流程如下:
1、待輸出數(shù)據(jù)生成后,數(shù)據(jù)輸出模塊根據(jù)幀格式定義為其添加幀頭,作為接收方識(shí)別消息起始的標(biāo)志,待輸出數(shù)據(jù)包括串行接口發(fā)送器發(fā)送的關(guān)鍵指令數(shù)據(jù)及串行接口接收器發(fā)送的測(cè)試狀態(tài)數(shù)據(jù);
2、添加幀頭后,數(shù)據(jù)輸出模塊根據(jù)幀格式定義為待輸出數(shù)據(jù)幀ID,作為接收方識(shí)別消息類型的標(biāo)志;
3、更新待輸出數(shù)據(jù)至幀格式數(shù)據(jù)區(qū);
4、計(jì)算數(shù)據(jù)區(qū)中待輸出數(shù)據(jù)校驗(yàn)值,更新校驗(yàn)值至幀格式校驗(yàn)值區(qū)域,作為接收方校驗(yàn)傳輸過程的標(biāo)志;
5、計(jì)算待輸出數(shù)據(jù)長(zhǎng)度,更新長(zhǎng)度值至幀格式數(shù)據(jù)長(zhǎng)度區(qū)域,作為接收方計(jì)算幀頭位置的依據(jù);
6、根據(jù)幀格式定義為待輸出數(shù)據(jù)添加幀尾,作為接收方識(shí)別消息結(jié)束的標(biāo)志;
7、封裝完成的輸出數(shù)據(jù),分別通過冗余串行接口的接口1和接口2逐字節(jié)發(fā)送完成后,結(jié)束數(shù)據(jù)輸出流程。
一種基于串口冗余策略的關(guān)鍵測(cè)試指令傳輸方法,步驟如下:
(1)發(fā)送方設(shè)置幀計(jì)數(shù),初始值為0;根據(jù)測(cè)試需求,在當(dāng)前傳輸周期,將幀計(jì)數(shù)加1,并將待傳輸?shù)年P(guān)鍵指令與幀計(jì)數(shù)封裝后采用雙冗余串行接口的方式進(jìn)行發(fā)送;
(2)接收方接收封裝后的關(guān)鍵指令與幀計(jì)數(shù),并存放在串行接口循環(huán)隊(duì)列中,執(zhí)行步驟(3);
(3)判斷上述循環(huán)隊(duì)列中的數(shù)據(jù)長(zhǎng)度是否大于最小完整幀,若大于,則轉(zhuǎn)步驟(4);否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(4)對(duì)循環(huán)隊(duì)列中的數(shù)據(jù)進(jìn)行完整及一致性判斷,若滿足條件,則從循環(huán)隊(duì)列中獲取數(shù)據(jù)并執(zhí)行步驟(5);否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);所述的完整及一致性判斷步驟如下:
(4.1)根據(jù)幀格式從循環(huán)隊(duì)列頭指針開始尋找?guī)?,若找到幀尾,則轉(zhuǎn)(4.2);否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(4.2)根據(jù)幀格式中幀長(zhǎng)度位置與幀尾的偏移量,從循環(huán)隊(duì)列中獲取當(dāng)前幀長(zhǎng)度;進(jìn)而根據(jù)幀長(zhǎng)度計(jì)算幀頭在循環(huán)隊(duì)列中的位置;
(4.3)獲取幀頭,將幀頭與幀格式進(jìn)行一致性判斷,若幀頭與幀格式一致,則轉(zhuǎn)(4.4),否則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(4.4)根據(jù)校驗(yàn)值位置與幀尾偏移量獲取當(dāng)前數(shù)據(jù)校驗(yàn)值,并根據(jù)接收的數(shù)據(jù)區(qū)中的數(shù)據(jù)重新計(jì)算校驗(yàn)值,對(duì)接收校驗(yàn)值與計(jì)算校驗(yàn)值進(jìn)行比對(duì);若二者一致,則從隊(duì)列中獲取數(shù)據(jù);若不一致,則從循環(huán)隊(duì)列中讀出錯(cuò)誤數(shù)據(jù)并丟棄,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1)。
(5)從獲取的數(shù)據(jù)中進(jìn)一步讀取數(shù)據(jù)區(qū)中的數(shù)據(jù),根據(jù)接收的數(shù)據(jù)區(qū)中的數(shù)據(jù),判斷冗余串行接口中的兩個(gè)接口的指令更新狀態(tài),當(dāng)兩個(gè)接口指令均更新,則執(zhí)行步驟(6),若只有一個(gè)接口的指令更新,則執(zhí)行步驟(7),否則,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);
(6)獲取兩個(gè)接口對(duì)應(yīng)數(shù)據(jù)中的幀計(jì)數(shù),當(dāng)一個(gè)接口記為接口A的幀計(jì)數(shù)大于記錄的有效指令幀序號(hào)且另一接口記為接口B的幀計(jì)數(shù)不大于記錄的有效指令幀序號(hào)時(shí),則解析接口A對(duì)應(yīng)的關(guān)鍵指令,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,并將接口A的幀計(jì)數(shù)記錄為有效指令幀序號(hào);當(dāng)兩個(gè)接口的幀計(jì)數(shù)都大于記錄的有效指令幀序號(hào),則進(jìn)一步比較兩個(gè)接口的幀計(jì)數(shù),將幀計(jì)數(shù)較大的接口對(duì)應(yīng)的關(guān)鍵指令進(jìn)行解析,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,并將該接口的幀計(jì)數(shù)記錄為有效指令幀序號(hào);當(dāng)兩個(gè)接口的幀計(jì)數(shù)都不大于記錄的有效指令幀序號(hào)時(shí),則丟棄接收的數(shù)據(jù),發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1);所述的有效指令幀序號(hào)的初始值為0;
(7)獲取該接口對(duì)應(yīng)數(shù)據(jù)中的幀計(jì)數(shù),判斷該幀計(jì)數(shù)是否大于記錄的有效指令幀序號(hào),若大于,則解析該接口對(duì)應(yīng)的關(guān)鍵指令,并發(fā)送至外部相應(yīng)執(zhí)行部件,發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,并將該接口的幀計(jì)數(shù)記錄為有效指令幀序號(hào);否則丟棄接收的數(shù)據(jù),發(fā)送關(guān)鍵指令的接收、解析狀態(tài)至發(fā)送方,進(jìn)入下一傳輸周期轉(zhuǎn)步驟(1)。
本發(fā)明未詳細(xì)說(shuō)明部分屬于本領(lǐng)域技術(shù)人員公知常識(shí)。