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