李倩,張立鵬,張奕男
在信號(hào)系統(tǒng)中,為了確保地鐵或國鐵現(xiàn)場中各系統(tǒng)的正常運(yùn)行,首先要保證硬件板卡本身的功能正常,因此板卡生產(chǎn)廠商需對(duì)硬件板卡在出廠前進(jìn)行充分的測(cè)試,以確保硬件的各個(gè)接口,如網(wǎng)口、串口、CAN口、定時(shí)器等能夠滿足設(shè)計(jì)及現(xiàn)場的需要[1],減少出廠板卡的故障率,即在出廠前保證硬件板卡的功能可靠穩(wěn)定?;诖?為了更加方便地對(duì)核心的硬件板卡進(jìn)行大規(guī)模的測(cè)試,需要設(shè)計(jì)一套功能齊全、安全穩(wěn)定、便捷簡單的自動(dòng)化硬件板卡測(cè)試系統(tǒng),用于保障硬件板卡的生產(chǎn)質(zhì)量[2-3];同時(shí)對(duì)從板卡生產(chǎn)廠商采購的所有板卡進(jìn)行抽樣檢查與驗(yàn)收。
硬件板卡測(cè)試系統(tǒng)由硬件環(huán)境、上位機(jī)軟件與下位機(jī)軟件3部分組成。
1)硬件環(huán)境包括機(jī)柜、機(jī)籠、板卡、交換機(jī)、電源、工控機(jī)等,待測(cè)設(shè)備通常為機(jī)柜,可以同時(shí)測(cè)試1套或多套設(shè)備,1套設(shè)備可配插1塊或多塊板卡(取決于硬件機(jī)柜的結(jié)構(gòu)),這是硬件板卡測(cè)試系統(tǒng)的基礎(chǔ)。以VLE(中心處理運(yùn)算板)測(cè)試為例,其機(jī)籠槽道硬件配置見表1。機(jī)籠中設(shè)置A、B雙系,每系中有VLE板卡、VPS(安全電源板)板卡及其他板卡。每系VLE板卡上有2個(gè)CPU,簡稱為上模塊和下模塊,各模塊中分別設(shè)有4個(gè)串口、2個(gè)CAN口 和2個(gè)網(wǎng) 口,A、B系VLE板卡的各硬件接口通過配線通信。A系VLE上模塊串口1~4與B系VLE上模塊串口1~4配線連接;A、B系各個(gè)網(wǎng)口獨(dú)立配線,連接至交換機(jī);A系VLE上 模 塊CAN1和CAN2與B系VLE上模塊CAN1和CAN2配線連接,VLE下模塊各接口配線方式相同。只有確保硬件中的板卡、配線等都連接正確,才能保證測(cè)試的準(zhǔn)確性與可靠性。
表1 機(jī)籠槽道硬件配置
2)上位機(jī)軟件基于Windows平臺(tái)下的.NET,使用C#語言開發(fā)[4],使用spring.net框架進(jìn)行XML配置[5],將測(cè)試軟件安裝到工控機(jī)上,通過交換機(jī)與通信板卡進(jìn)行網(wǎng)絡(luò)通信,將下位機(jī)發(fā)出的板卡各接口的測(cè)試信息快速采集后存儲(chǔ)在本地[6],并顯示到界面上警示用戶,最終確定各板卡是否通過測(cè)試。
3)下位機(jī)軟件基于VxWorks操作系統(tǒng),使用C語言開發(fā)[7],編譯的軟件鏡像(Image)通過網(wǎng)線直接燒錄到通信板卡的Flash中(VLE的上、下2個(gè)模塊分別與交換機(jī)連接)。下位機(jī)軟件的主要功能是通過特定數(shù)據(jù)的發(fā)送與接收,對(duì)硬件板卡上的各個(gè)接口按照最高性能指標(biāo)進(jìn)行接口功能測(cè)試[8],并將根據(jù)自定義通信協(xié)議組包生成的測(cè)試數(shù)據(jù),通過網(wǎng)絡(luò)發(fā)送給上位機(jī)軟件進(jìn)行處理。
整體設(shè)計(jì)上,測(cè)試系統(tǒng)的軟件架構(gòu)分為表示層、業(yè)務(wù)層和數(shù)據(jù)訪問層3層,如圖1所示,目的是實(shí)現(xiàn)高內(nèi)聚、低耦合,增強(qiáng)硬件板卡測(cè)試系統(tǒng)的可重用性與擴(kuò)展性。
圖1 測(cè)試系統(tǒng)軟件架構(gòu)
表示層:以Windows窗體的形式展現(xiàn),在窗體中顯示測(cè)試機(jī)籠的結(jié)構(gòu)圖,實(shí)時(shí)顯示軟件運(yùn)行過程中各測(cè)試板卡的報(bào)警或故障信息。用戶可通過表示層操控測(cè)試系統(tǒng)。
業(yè)務(wù)層:對(duì)數(shù)據(jù)相關(guān)業(yè)務(wù)的邏輯處理,業(yè)務(wù)層處理接收和發(fā)送的所有數(shù)據(jù),根據(jù)通信協(xié)議進(jìn)行組包和不同類型的消息分發(fā)與解析。
數(shù)據(jù)訪問層:接收和發(fā)送基于網(wǎng)絡(luò)通信的原始數(shù)據(jù)。
功能結(jié)構(gòu)上,測(cè)試系統(tǒng)軟件可分為網(wǎng)絡(luò)通信模塊、測(cè)試預(yù)設(shè)模塊、命令發(fā)送模塊、數(shù)據(jù)采集模塊、數(shù)據(jù)解析模塊、界面顯示及警告模塊和報(bào)告生成模塊。各個(gè)功能模塊之間需要有關(guān)聯(lián)性和時(shí)序性,以正確地執(zhí)行軟件功能,滿足軟件功能需求。測(cè)試系統(tǒng)軟件處理流程見圖2。
圖2 測(cè)試系統(tǒng)軟件處理流程
由于硬件板卡測(cè)試系統(tǒng)對(duì)時(shí)效性要求較高,為了提高信息傳輸?shù)撵`活性和時(shí)效性,選擇UDP協(xié)議(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)進(jìn)行網(wǎng)絡(luò)通信[9]。
上位機(jī)軟件與下位機(jī)軟件之間的協(xié)議約定見圖3。
圖3 幀協(xié)議格式
幀頭(0x5A)與幀尾(0xA5)是用于區(qū)分是否是本測(cè)試系統(tǒng)報(bào)文的固定字節(jié),各占1個(gè)字節(jié)。
版本用于定義協(xié)議的版本號(hào),當(dāng)協(xié)議升級(jí)時(shí),版本變更。
應(yīng)用消息長度定義此字段(不包含)后面的所有報(bào)文的字節(jié)總數(shù),考慮到每包消息的最長字節(jié)數(shù),定義為2個(gè)字節(jié)。
周期號(hào)(CycleNo)用于區(qū)分下位機(jī)周期性發(fā)送報(bào)文的計(jì)數(shù)值,占4個(gè)字節(jié)。
類型(MsgType)用于區(qū)分不同類型的報(bào)文消息,占1個(gè)字節(jié)。
子類型用于區(qū)分同一類型不同分組的報(bào)文消息,占1個(gè)字節(jié)。
數(shù)據(jù)長度表示后面填充的應(yīng)用數(shù)據(jù)所占的字節(jié)總數(shù),占2個(gè)字節(jié)。
本系統(tǒng)中所有類型報(bào)文消息均小于1 000個(gè)字節(jié),故未考慮分包與組包。
為了防止消息丟包,保證消息接收的可靠性與完整性,上位機(jī)軟件采用異步回調(diào)函數(shù)接收網(wǎng)絡(luò)消息,下位機(jī)軟件采用select模式非阻塞方式接收消息,為業(yè)務(wù)層處理數(shù)據(jù)提供基礎(chǔ)和保障。
本模塊是開始正式測(cè)試前的預(yù)設(shè)配置,通過與用戶交互方式實(shí)現(xiàn)。界面中設(shè)有測(cè)試人、測(cè)試時(shí)長、板卡序列號(hào)的編輯框,待有數(shù)據(jù)鍵入后,系統(tǒng)將測(cè)試人員姓名或工號(hào)、測(cè)試時(shí)長(精確到分)、待測(cè)板卡的序列號(hào)記錄到內(nèi)存中。在上述3個(gè)條件編輯框中內(nèi)容均不為空的情況下,才會(huì)允許用戶啟動(dòng)“開始測(cè)試”。
板卡序列號(hào)是待測(cè)板卡報(bào)告及測(cè)試記錄的唯一標(biāo)識(shí),支持傳統(tǒng)條形序列號(hào)及二維碼2種格式,可以用掃描槍掃描或手動(dòng)輸入到指定的編輯框中,板卡序列號(hào)按照以下機(jī)制設(shè)計(jì)。
1)檢測(cè)機(jī)制。如果檢測(cè)到當(dāng)前編碼框中的序列號(hào)與其他重復(fù)或?yàn)榭?系統(tǒng)彈出警示框。
2)動(dòng)態(tài)創(chuàng)建。由于不同測(cè)試中板卡的個(gè)數(shù)是不同的,因此,本系統(tǒng)根據(jù)板卡復(fù)選框的點(diǎn)選情況,采用動(dòng)態(tài)創(chuàng)建文本框和編輯框的模式,使測(cè)試系統(tǒng)功能更加靈活。
監(jiān)聽線程接收到上位機(jī)軟件發(fā)送的開始測(cè)試命令后,首先調(diào)用驅(qū)動(dòng)函數(shù)對(duì)機(jī)籠中的槽位是否有板卡進(jìn)行檢測(cè),并與上位機(jī)發(fā)送的板卡槽位檢測(cè)(拔插)情況進(jìn)行比對(duì),如果比對(duì)不一致,將比對(duì)結(jié)果通過Send函數(shù)發(fā)送給上位機(jī)軟件;如比對(duì)一致,下位機(jī)會(huì)啟動(dòng)采集任務(wù),并對(duì)采集數(shù)據(jù)處理后發(fā)給上位機(jī),數(shù)據(jù)采集流程見圖4。
圖4 數(shù)據(jù)采集流程
系統(tǒng)依次對(duì)待測(cè)板卡上的網(wǎng)口、CAN口、串口等接口進(jìn)行數(shù)據(jù)采集與正確性判斷。測(cè)試方案是A系VLE金板(良品,功能正常的板卡)與B系待測(cè)VLE板卡的各個(gè)對(duì)應(yīng)接口進(jìn)行通信。首先,金板調(diào)用驅(qū)動(dòng)程序的接口函數(shù)發(fā)送一包固定長度的隨機(jī)測(cè)試數(shù)據(jù),待測(cè)板卡收到數(shù)據(jù)后,先對(duì)接收到的數(shù)據(jù)(不包含發(fā)送方計(jì)算的CRC校驗(yàn)碼)計(jì)算CRC校驗(yàn)碼,再與發(fā)送方計(jì)算的CRC校驗(yàn)碼進(jìn)行比對(duì),如果一致,本輪采集是正確無誤的,測(cè)試次數(shù)遞增1,如果不一致,錯(cuò)誤次數(shù)遞增1;然后,待測(cè)板卡將一包固定長度的隨機(jī)數(shù)據(jù)回發(fā),金板收到數(shù)據(jù)后同樣計(jì)算CRC并比對(duì),如果一致,本輪采集是正確無誤的,測(cè)試次數(shù)遞增1,如果不一致,錯(cuò)誤次數(shù)遞增1。
下位機(jī)軟件實(shí)時(shí)將各個(gè)待測(cè)接口測(cè)試的正確次
數(shù)與錯(cuò)誤次數(shù)記錄到數(shù)據(jù)結(jié)構(gòu)中,并以一定的周期(500 ms)通過Send函數(shù)發(fā)送給上位機(jī)軟件。
本模塊對(duì)接收到的數(shù)據(jù)進(jìn)行處理。以上位機(jī)軟件為例,如圖5所示,監(jiān)聽線程收到報(bào)文后,首先會(huì)放到消息隊(duì)列中,數(shù)據(jù)解析模塊會(huì)對(duì)消息隊(duì)列進(jìn)行輪詢,如果輪詢到數(shù)據(jù),便會(huì)一次性從消息隊(duì)列中pop出全部數(shù)據(jù)。
圖5 數(shù)據(jù)解析
上位機(jī)軟件根據(jù)幀協(xié)議針對(duì)不同的消息類型(MsgType)進(jìn)行消息分發(fā),統(tǒng)一用*Response類來解析。不同類型的數(shù)據(jù)進(jìn)入到相應(yīng)的*Response類中進(jìn)行報(bào)文解析,如ShakeRespose類用于解析握手回復(fù)消息,BoardStatusResponse類用于解析板卡故障消息,ComponentTestResponse類用于解析接口組件的常規(guī)消息等。每個(gè)*Response都繼承了基類Response,基類中定義了板卡ID、接收時(shí)間Dtime、原始數(shù)據(jù)OriginalData和周期號(hào)CycleNo。每種解析都會(huì)返回字符串類型的返回值,并且根據(jù)解析結(jié)果將對(duì)應(yīng)的待測(cè)板卡標(biāo)志位更新為通過或失敗。
該解析方法既降低了模塊之間的耦合度,也可實(shí)現(xiàn)系統(tǒng)的擴(kuò)展,如果新添加不同類型的網(wǎng)絡(luò)消息解析,只需要在業(yè)務(wù)層復(fù)寫對(duì)應(yīng)類型的Response派生類。
本模塊用于顯示測(cè)試指令及必要的警告信息。界面中設(shè)置機(jī)籠中各板卡的相對(duì)槽道簡易圖,如無報(bào)錯(cuò)信息上報(bào),則相應(yīng)槽道背景色設(shè)置為綠色;當(dāng)對(duì)應(yīng)板卡有報(bào)錯(cuò)信息上報(bào)時(shí),將相應(yīng)槽道背景色設(shè)置為紅色,同時(shí)在界面的文本框中顯示出具體的故障信息,如故障板卡的名稱、槽道號(hào)、首次出錯(cuò)時(shí)間、故障碼等,并同步記錄到本地csv格式日志中,方便用戶查詢。
本模塊以待測(cè)板卡的序列號(hào)作為唯一標(biāo)識(shí)生成報(bào)告,并上傳到服務(wù)器,作為待測(cè)板卡測(cè)試是否通過的重要證據(jù)。當(dāng)系統(tǒng)運(yùn)行達(dá)到預(yù)設(shè)的測(cè)試時(shí)間時(shí),會(huì)生成報(bào)告;當(dāng)系統(tǒng)的預(yù)設(shè)測(cè)試時(shí)間未到,而是用戶手動(dòng)強(qiáng)制停止測(cè)試時(shí),不生成報(bào)告,本次測(cè)試無效,需要重新對(duì)本輪測(cè)試的所有板卡進(jìn)行測(cè)試。
目前測(cè)試系統(tǒng)已應(yīng)用于板卡生產(chǎn)廠商及公司質(zhì)量部,通過對(duì)信號(hào)系統(tǒng)硬件板卡各項(xiàng)硬件接口進(jìn)行測(cè)試,有效地避免了人為測(cè)試的繁瑣或操作不當(dāng)引起的測(cè)試失誤,提高了板卡的測(cè)試效率,減少了驗(yàn)收的人力成本;同時(shí)該測(cè)試系統(tǒng)可對(duì)故障板卡進(jìn)行故障定位,協(xié)助分析現(xiàn)場返回問題板卡的硬件故障[10],從而保障了現(xiàn)場信號(hào)系統(tǒng)中各板卡硬件功能的正確性與完整性。