李 亞,邵引平
(西安翔迅科技有限責(zé)任公司,西安 710068)
航空機(jī)電系統(tǒng)是飛機(jī)中執(zhí)行飛行保障功能子系統(tǒng)的總稱,主要包括供燃油系統(tǒng)、動(dòng)力系統(tǒng)、供電系統(tǒng)、液壓系統(tǒng)、環(huán)境控制系統(tǒng)等。遠(yuǎn)程接口單元(RIU)隸屬于機(jī)電系統(tǒng),是新型機(jī)載機(jī)電系統(tǒng)的終端信號處理設(shè)備,主要完成與其交聯(lián)機(jī)電子系統(tǒng)的狀態(tài)采集與輸出控制[1-2]。遠(yuǎn)程接口單元具有設(shè)備數(shù)量多,信號種類多,測試壓力大的特點(diǎn)。
遠(yuǎn)程接口單元測試系統(tǒng)硬件秉承模塊化、通用化的原則,基于PXI系統(tǒng)平臺設(shè)計(jì),采用虛擬儀器技術(shù),使各個(gè)功能模塊獨(dú)立運(yùn)作,可靠性好,耦合度低[3-4]。
測試系統(tǒng)軟件需要基于系統(tǒng)硬件完成板卡的驅(qū)動(dòng)與管理,測試流程的處理與控制,測試結(jié)果的顯示與保存,提供人機(jī)交互界面等工作,軟件是測試系統(tǒng)的靈魂。開發(fā)操作簡潔、通用性好、靈活性高的軟件是測試系統(tǒng)軟件的發(fā)展趨勢。傳統(tǒng)測試軟件大多將信號的配置在程序中寫定,將測試流程按執(zhí)行順序也固化在代碼中。這樣造成軟件的通用性、維護(hù)性差,且面臨開發(fā)周期長,調(diào)試復(fù)雜度高等問題。此測試軟件開發(fā)基于LabWindows/CVI開發(fā)平臺, 平臺具有很好的虛擬儀器開發(fā)工具,控件豐富,廣泛應(yīng)用于測控領(lǐng)域[5-7]。測試軟件將硬線配置、總線管理、測試流程、用戶管理等都在數(shù)據(jù)庫中完成,通過SQL Toolkit工具包訪問Access數(shù)據(jù)庫,將大量配置信息通過數(shù)據(jù)庫存儲,便于修改和擴(kuò)展;軟件采用自動(dòng)測試的形式,人機(jī)交互界面操作簡單,減輕工作人員測試壓力;軟件采用層次化結(jié)構(gòu)設(shè)計(jì),自底向上,將復(fù)雜應(yīng)用細(xì)節(jié)化,結(jié)構(gòu)清晰,靈活易用。
為了滿足遠(yuǎn)程接口單元的測試需求,確保測試效率及穩(wěn)定性,減少人工干預(yù),針對測試內(nèi)容和接口特性,測試系統(tǒng)需滿足以下要求:
1)信號輸入和輸出接口種類及數(shù)量需要覆蓋待測試RIU的接口需求,并留有不小于10%的備份。
2)采用成熟的數(shù)據(jù)傳輸技術(shù),測試系統(tǒng)應(yīng)具備較大的帶寬余量,滿足未來可能存在的數(shù)據(jù)增長的需求。
3)硬件應(yīng)具備可靠性、維護(hù)性、穩(wěn)定性。
測試系統(tǒng)硬件由工控機(jī)系統(tǒng)、信號調(diào)理系統(tǒng)和獨(dú)立的電源系統(tǒng)組成:包括電源箱、PXI工控機(jī)系統(tǒng)、調(diào)理箱、Nport(串口通訊服務(wù)器)、設(shè)備供電直流電源、斷連板部分和線纜部分。測試信號包括離散量輸入和輸出,模擬量的輸入和輸出,電阻信號、功率信號、HB6096總線信號、GJB289A總線信號等。系統(tǒng)硬件總體架構(gòu)如圖1所示。
圖1 測試系統(tǒng)硬件總體架構(gòu)
測試系統(tǒng)使用環(huán)境為聯(lián)試實(shí)驗(yàn)室,采用標(biāo)準(zhǔn)機(jī)柜框架實(shí)現(xiàn),機(jī)柜間盡量減小線纜使用,便于拆卸和運(yùn)輸。
測試系統(tǒng)的工作原理如下:首先將測試系統(tǒng)通過線纜與RIU相連。打開測試軟件,測試RIU的硬線輸出接口時(shí),測試系統(tǒng)通過GJB289A總線輸出激勵(lì)信號,控制RIU輸出指定信號并進(jìn)行硬線采集操作、顯示采集數(shù)據(jù),判斷RIU的硬線輸出功能是否正常;測試RIU的輸入接口時(shí),測試系統(tǒng)按需求輸出相應(yīng)信號的激勵(lì)值,并通過GJB289A總線讀取RIU的反饋信息加以顯示,據(jù)此判斷RIU的硬線采集功能是否正常。RIU的HB6096總線信號測試時(shí),測試系統(tǒng)設(shè)置HB6096總線激勵(lì)信號,接收GJB289A總線讀取RIU的反饋信息加以判斷。
遠(yuǎn)程接口單元仿真測試系統(tǒng)軟件的開發(fā)秉承“高效、易用、穩(wěn)定、美觀、可擴(kuò)展”的設(shè)計(jì)原則,采用模塊化的設(shè)計(jì)方法,在LabWindows/CVI開發(fā)平臺下開發(fā)完成。按照軟件功能需求將程序劃分為啟動(dòng)、系統(tǒng)管理、測試功能、退出等幾大模塊,整個(gè)軟件結(jié)構(gòu)清晰,便于維護(hù)和升級。模塊劃分圖如圖2所示。
圖2 軟件模塊劃分框圖
測試軟件主界面如圖3所示。
圖3 軟件主界面
測試軟件執(zhí)行的流程圖如圖4所示。
遠(yuǎn)程接口單元測試軟件采用層次化結(jié)構(gòu)設(shè)計(jì),軟件結(jié)構(gòu)如圖5所示。系統(tǒng)分層結(jié)構(gòu)主要由硬件操作層、數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和人機(jī)交互層組成。
硬件操作層是軟件與硬件緊密結(jié)合的層次,負(fù)責(zé)完成具體的硬件操作和數(shù)據(jù)通訊,包括總線數(shù)據(jù)的收發(fā)、離散量輸入輸出、模擬量輸入輸出等,其中總線HB6096,總線GJB289A的操作通過IOServer(總線管理程序)控制,在2.3章節(jié)中詳細(xì)解釋。
數(shù)據(jù)訪問層是訪問數(shù)據(jù)庫信息的層次,數(shù)據(jù)庫存儲了硬線信號、總線信號、測試流程、用戶信息等數(shù)據(jù)。合理設(shè)計(jì)的數(shù)據(jù)庫功能強(qiáng)大,可優(yōu)化軟件數(shù)據(jù)結(jié)構(gòu),精簡代碼,配合軟件實(shí)現(xiàn)應(yīng)用功能。軟件獲取數(shù)據(jù)庫內(nèi)容后便可向下操作硬件信號,向上進(jìn)行數(shù)據(jù)處理與控制,是承上啟下的重要一環(huán)。
業(yè)務(wù)邏輯層是實(shí)現(xiàn)測試軟件功能的核心,將系統(tǒng)校準(zhǔn)、系統(tǒng)自檢、信號測試、系統(tǒng)管理的邏輯都包含其中,精煉合理的業(yè)務(wù)邏輯設(shè)計(jì)是軟件可靠性的保障。系統(tǒng)校準(zhǔn)可以進(jìn)行硬線輸入輸出信號尤其是模擬量信號的校準(zhǔn),并保存校準(zhǔn)系數(shù)于數(shù)據(jù)庫中;系統(tǒng)自檢對所有硬線、總線信號進(jìn)行打開、自檢、初始化操作,為信號測試做準(zhǔn)備,如果有信號自檢失敗,將彈框提示操作者;信號測試是軟件的核心功能,為了方便操作者使用,減輕操作負(fù)擔(dān),軟件提供的是自動(dòng)測試;系統(tǒng)管理包含用戶管理、幫助、關(guān)于、日志等功能。
人機(jī)交互層主要由啟動(dòng)界面、用戶登錄界面、板卡自檢界面、信號校準(zhǔn)界面、自動(dòng)測試界面等交互界面組成,需求簡潔明了,易于操作。
為了更好的簡化軟件流程代碼的編寫,增強(qiáng)軟件的靈活性,軟件設(shè)計(jì)時(shí)將信號信息、測試信息合理設(shè)計(jì),配置于數(shù)據(jù)庫中。數(shù)據(jù)訪問層設(shè)計(jì)了資源配置庫進(jìn)行數(shù)據(jù)存儲。數(shù)據(jù)表包括板卡資源描述表、硬件信號軟件配置表、串口通道配置表、用戶管理表、自動(dòng)測試流程表、自動(dòng)測試激勵(lì)值表、自動(dòng)測試期望值表,以此來配置軟件的板卡信息、串口信息、硬線信號信息、自動(dòng)測試信息、用戶信息。測試軟件通過SQL操作訪問數(shù)據(jù)庫的內(nèi)容,在程序中設(shè)計(jì)合理數(shù)據(jù)結(jié)構(gòu)、保存成隊(duì)列或哈希表的形式,進(jìn)而參與信號操作與數(shù)據(jù)處理。
其中硬件信號軟件配置表是軟件操作底層硬線資源的基礎(chǔ)。此表中設(shè)計(jì)了信號名稱、信號類型、所屬板卡、通道號、所屬設(shè)備、校準(zhǔn)系數(shù)、公式系數(shù)、最大值、最小值、航插號、缺省值等屬性。根據(jù)此表的信息即可方便完成信號的輸出、采集、校準(zhǔn)、量綱轉(zhuǎn)換、范圍判定、初始化等操作和設(shè)置。
通過資源配置庫可以使程序處理無需固化大量信息于緩沖區(qū)內(nèi)。代碼中只含操作和控制方法、人機(jī)界面交互的內(nèi)容,代碼整潔輕量,修改方便靈活。這樣當(dāng)遇到板卡通道變更、串口波特率變化、初始化值變更、測試流程增減修改等情形時(shí),只需要修改數(shù)據(jù)表即可,易于維護(hù)和升級。
眾所周知,航空總線協(xié)議較為復(fù)雜[8],編程難度較大。尤其GJB289A總線,是一種分時(shí)指令/響應(yīng)型多路傳輸數(shù)據(jù)總線[9]。有3種類型的終端,分別是BC(總線控制器)、RT(遠(yuǎn)程終端)、總線監(jiān)視器(BM);信息格式有BC到RT、RT到BC、RT到RT、廣播方式和系統(tǒng)控制方式;軟件編碼時(shí)除了板卡操作,還需要對消息鏈、重試條件、矢量字等進(jìn)行配置,較為復(fù)雜,且不同此廠家的板卡配置使用方法千差萬別,難度大。為此設(shè)計(jì)的IOServer(總線管理程序),將總線操作都整合起來,軟件工程師通過配置總線數(shù)據(jù)庫即可管理總線,無論哪個(gè)廠家的板卡,都可通過同樣的接口函數(shù)調(diào)用實(shí)現(xiàn)歸一化操作,在測試軟件中僅通過調(diào)用表1中幾個(gè)函數(shù)即可實(shí)現(xiàn)總線的啟動(dòng)和收發(fā)。
表1 IOServer操作
IOServer的關(guān)聯(lián)數(shù)據(jù)庫中,每種總線單獨(dú)設(shè)計(jì)一個(gè)數(shù)據(jù)庫。GJB289A總線定義于MbiComm.mdb中,軟件工程師依次按實(shí)際應(yīng)用進(jìn)行板卡配置、通道配置、協(xié)議配置、協(xié)議通道映射、信號定義進(jìn)行數(shù)據(jù)表的填寫,提供的字典表方便用戶配置通訊模型。配置完成之后在測試程序中啟動(dòng)IOServer,IOServer就會將數(shù)據(jù)表中的內(nèi)容整合生成共享對象,應(yīng)用程序通過共享對象的讀寫即可訪問總線數(shù)據(jù),大大降低應(yīng)用程序中總線操作的使用難度。HB6096總線定義于Arinc429Comm.mdb中,數(shù)據(jù)庫配置內(nèi)容與GJB289A總線不同,但使用方式相同,都是通過共享內(nèi)存訪問。
遠(yuǎn)程接口單元總線的接口控制文檔(icd)也在這里配置,它包含了整套總線系統(tǒng)的數(shù)據(jù)定義,包括名稱、信號類型、起始位、長度、精度、最大值、最小值等信息[10]。程序訪問數(shù)據(jù)表中的icd內(nèi)容,可以完成信號的顯示、解析、組包操作。采取這種總線管理的方式,開發(fā)、測試效率顯著提高。
測試軟件的測試內(nèi)容包括硬線信號測試、HB6096總線測試、GJB289A總線測試。硬線信號測試按類型可分為地/開離散量輸入測試、28 V /開離散量輸入測試、28 V直流0.1 A輸出、地/開輸出、28VPWMSSPC/3A功率輸出、28 V/開1A-SSPC功率輸出、28 V/開輸出、28 V狀態(tài)輸出、4~20 mA輸入、PT1000輸入、28 V直流輸入、28 V直流電壓狀態(tài)采集輸入、900~1 700歐電阻輸入、電阻開關(guān)門限輸入、115 V交流電壓狀態(tài)采集、0~10 V輸入等。信號種類20有余,數(shù)量高達(dá)600多路,通過硬線信號與總線信號的輸入輸出組合邏輯進(jìn)行測試。如果采用手動(dòng)測試的方式,那么工作量繁重。為此測試軟件設(shè)計(jì)了自動(dòng)測試的功能[11],極大的減少測試人員工作負(fù)擔(dān)。
自動(dòng)測試程序如果按執(zhí)行流程在程序中寫定,那么會導(dǎo)致軟件的通用性、維護(hù)性差。所以測試軟件采用在數(shù)據(jù)庫中配置自動(dòng)測試信息的方式。自動(dòng)測試信息由三張表——自動(dòng)測試流程表、自動(dòng)測試激勵(lì)值表、自動(dòng)測試期望值表配置完成。自動(dòng)測試流程表定義測試的內(nèi)容,屬性包含測試系統(tǒng)、測試項(xiàng)目、測試信號、測試步驟、激勵(lì)信號索引、期望信號索引。激勵(lì)信號索引在自動(dòng)測試激勵(lì)值表中定義,詳細(xì)描述激勵(lì)信號的信號名稱,信號類型、設(shè)定值等。期望信號索引在自動(dòng)測試期望值表中定義,詳細(xì)描述期望信號的信號名稱,信號類型、預(yù)期值、預(yù)期容差等。在測試軟件中遍歷自動(dòng)測試流程表的內(nèi)容,執(zhí)行激勵(lì)信號操作,通過比較測試數(shù)據(jù)和預(yù)期值判斷測試結(jié)果。
自動(dòng)測試界面如圖6所示,左側(cè)的樹形控件是測試項(xiàng)目,可以自主選擇測試項(xiàng);上方有測試方式選擇,測試進(jìn)度顯示,測試控制按鈕,工作指示燈等控件進(jìn)行控制和顯示;主體是測試表格,靠左的表格顯示詳細(xì)測試內(nèi)容,靠右的表格顯示測試項(xiàng)目的測試結(jié)果。測試結(jié)束后會自動(dòng)生成測試記錄,測試記錄與下圖中右側(cè)的表格內(nèi)容一致。
圖6 自動(dòng)測試界面圖
2.5.1 硬件信號信息獲取編程實(shí)現(xiàn)
程序訪問資源配置庫,讀取數(shù)據(jù)庫中“硬件信號軟件配置表”的內(nèi)容,在程序中保存為鏈表或哈希表。不同的存儲結(jié)構(gòu)應(yīng)用于不同的功能。函數(shù)為Access_GetSignalInfo(int hDB, char tableName[])。其中有SignalField和CALIBRATION兩個(gè)重要數(shù)據(jù)結(jié)構(gòu)存儲內(nèi)容。 SignalField結(jié)構(gòu)對應(yīng)硬件信號軟件配置表的屬性,并添加了設(shè)置值,實(shí)際值等屬性,CALIBRATION結(jié)構(gòu)定義如下:
typedef struct
{
int IndexID; // 索引ID
char keyChar[30]; // 鍵值
char pinChar[30]; // 測試引腳
}CALIBRATION;
在Access_GetSignalInfo函數(shù)中創(chuàng)建以下CALIBRATION結(jié)構(gòu)鏈表:
g_ListOfAI=ListCreate(sizeof(CALIBRATION)); //模擬量輸入信號
g_ListOfAO=ListCreate(sizeof(CALIBRATION)); //模擬量輸出信號
g_ListOfDI=ListCreate(sizeof(CALIBRATION)); //離散量輸入信號
g_ListOfRE=ListCreate(sizeof(CALIBRATION)); //電阻輸出信號
g_ListOfDODK=ListCreate(sizeof(CALIBRATION)); //地開離散量輸出信號
g_ListOfDOVK=ListCreate(sizeof(CALIBRATION)); //28V開離散量輸出信號
g_ListOfSWITCH=ListCreate(sizeof(CALIBRATION)); //繼電器信號
創(chuàng)建包含全部信號以信號縮寫為鍵值的哈希表HashOfSignal:
HashTableCreate (count+20, C_STRING_KEY, 0,sizeof(oSignalField),&g_HashOfSignal);
兩種結(jié)構(gòu)配合主要參與校準(zhǔn)功能的實(shí)現(xiàn)。
還需要針對細(xì)分的信號類型保存SignalField鏈表:
GetDODKList();
GetDO28VKList();
Get28V0P1AList();
GetDKOList();
Get28PWMSSPCList();
GetI28VKList();
GetI28V5KList();
Get4TO20MAList();
Get0TO10VList();
Get28VList();
GetPT1000List();
GetRESwitchDLList();
以上結(jié)構(gòu)應(yīng)用于自動(dòng)測試。
2.5.2 IOServer應(yīng)用編程實(shí)現(xiàn)
IOServer在執(zhí)行LaunchIOServer(dir)后運(yùn)行控制臺進(jìn)程,根據(jù)總線的配置生成共享內(nèi)存,完成板卡初始化、自檢工作。之后可以在系統(tǒng)自檢完成后,調(diào)用StartIOServer()函數(shù),運(yùn)行IOServer,執(zhí)行總線通訊任務(wù)。
在接收429或1553總線消息的函數(shù)中:
ReadShareBuffer(bufferInfo.bufferName,rcvBuf,&len),根據(jù)bufferInfo.bufferName(共享內(nèi)存名)和len(緩沖區(qū)長度)讀取429總線對應(yīng)通道或者1553對應(yīng)消息的全部數(shù)據(jù)。IOServer本身會根據(jù)配置信息控制板卡接口總線上的數(shù)據(jù),存入共享內(nèi)存。
在發(fā)送429或1553總線消息的函數(shù)中:
WriteShareBuffer(sharedField.BufferName, c_Buf, &len) ,向sharedField.BufferName(共享內(nèi)存名)中寫入len(數(shù)據(jù)長度)的 c_Buf(char型數(shù)組)數(shù)據(jù),IOServer會根據(jù)共享內(nèi)存的配置控制板卡發(fā)送數(shù)據(jù)。
軟件關(guān)閉時(shí)調(diào)用StopIOServer()停止總線通訊,調(diào)用TerminatorIOServer()結(jié)束控制臺進(jìn)程。
2.5.3 自動(dòng)測試編程實(shí)現(xiàn)
自動(dòng)測試是測試軟件的核心功能。為了保證界面的正常刷新,自動(dòng)測試單獨(dú)創(chuàng)建一個(gè)線程:
CmtScheduleThreadPoolFunction(DEFAULT_THREAD_POOL_HANDLE,ThreadFunc_AutoTest,0,&ThreadID_Auto);
測試線程中,逐層遍歷測試項(xiàng)列表,在測試步驟層級,根據(jù)不同測試信號類型,執(zhí)行不同的激勵(lì)輸出:
for(int i=0; i { //測試記錄 setValue = atof(ArrayIncent[i].setVal); if(strcmp(ArrayIncent[i].signalType, "硬線") 0) { IncentHardwareSignalOp(ArrayIncent[i].signalName, setValue); } else if(strcmp(ArrayIncent[i].signalType, "1553總線") 0) { Incent1553SignalOp(ArrayIncent[i].signalName, setValue); } else if(strcmp(ArrayIncent[i].signalType, "429總線") 0) { Incent429SignalOp(ArrayIncent[i].signalName, setValue); } else if(strcmp(ArrayIncent[i].signalType, "Delay") 0) { Delay(setValue); } } 然后根據(jù)不同信號類型,采取不同采集/接收、解析數(shù)據(jù)方法,獲取實(shí)際數(shù)據(jù): for(int i=0; i { //測試數(shù)據(jù)獲取 if(strcmp(ArrayExpect[i].signalType, "硬線") 0) { realVal = ExceptHardwareSignalOp(ArrayExpect[i].signalName, *loadMult, i+1); *loadMult = 1; } else if(strcmp(ArrayExpect[i].signalType, "1553總線") 0) { realVal = Except1553SignalOp(ArrayExpect[i].signalName); } else if(strcmp(ArrayExpect[i].signalType, "429總線") 0) { realVal = Except429SignalOp(ArrayExpect[i].signalName); } } 最終根據(jù)期望值進(jìn)行判斷測試是否通過,如果期望的預(yù)期值容差為0,則直接判斷期望值;如果預(yù)期值容差為正無窮,最大值為極大值(999999),最小值為expectVal,需判斷范圍;如果預(yù)期值容差為負(fù)無窮,最大值為expectVal,最小值為極小值(-999999)需判斷范圍;其他最大值為expectVal+預(yù)期值容差,最小值為expectVal-預(yù)期值容差。 if(atof(ArrayExpect[i].errRange) 0 && strlen(ArrayExpect[i].errRange) 1) //預(yù)期值容差 = 0 { expectValue = atof(ArrayExpect[i].expectVal); expectFlag = 0; } else { if(strcmp(ArrayExpect[i].errRange, "正無窮") 0) { expactMax = 999999; expactMin = atof(ArrayExpect[i].expectVal); } else if(strcmp(ArrayExpect[i].errRange, "負(fù)無窮") 0) { expactMin = -999999; expactMax = atof(ArrayExpect[i].expectVal); } else { expactMin = atof(ArrayExpect[i].expectVal)- atof(ArrayExpect[i].errRange); expactMax = atof(ArrayExpect[i].expectVal)+ atof(ArrayExpect[i].errRange); } expectValue = atof(ArrayExpect[i].expectVal); expectFlag = 1; } 遠(yuǎn)程接口單元仿真測試系統(tǒng)是基于PXI總線,可測量多種型號遠(yuǎn)程接口單元的綜合測試設(shè)備,功能全面,可靠性高。遠(yuǎn)程接口單元仿真測試系統(tǒng)軟件基于LabWindows/CVI平臺,界面友好易用,通過數(shù)據(jù)庫技術(shù)進(jìn)行資源配置,靈活方便;設(shè)計(jì)總線管理軟件解決總線操作難度大,協(xié)議復(fù)雜的問題,提高效率;自動(dòng)測試在數(shù)據(jù)庫中部署,減輕工作量,通用性好。測試軟件完全覆蓋測試內(nèi)容,符合測試要求,已成功應(yīng)用于遠(yuǎn)程接口單元的現(xiàn)場測試中。3 結(jié)束語