基于PC/104的1553B總線測控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
引言
隨著我國航空事業(yè)的迅速發(fā)展,各種新型飛機(jī)和發(fā)控設(shè)備相繼研制成功,以往一些測控設(shè)備在功能和性能上已無法滿足新的要求。本測控系統(tǒng)就是在某型飛機(jī)的研制過程中擴(kuò)展出來的一個功能比較全面的1553總線測控系統(tǒng),總體上采用了PC/104結(jié)構(gòu)的嵌入式系統(tǒng),既可以實(shí)現(xiàn)1553總線數(shù)據(jù)的實(shí)時(shí)接收和發(fā)送,還可以完成多路數(shù)據(jù)的采集及負(fù)載控制。
總體概述及工作原理
本系統(tǒng)的主要功能是對外部的電壓電流及負(fù)載I/O信號進(jìn)行采集測量,并根據(jù)由1553總線傳輸來的飛機(jī)控制設(shè)備發(fā)送的命令字對負(fù)載進(jìn)行控制,對電壓電流及負(fù)載當(dāng)前狀態(tài)進(jìn)行監(jiān)控,并將當(dāng)前數(shù)據(jù)反饋給控制設(shè)備。整個系統(tǒng)在滿足實(shí)時(shí)高速傳輸?shù)耐瑫r(shí),也必須完成對負(fù)載精確的控制,測控過程要能夠?qū)崟r(shí)監(jiān)控和顯示,方便操作人員控制及發(fā)送指令。
為滿足以上條件,系統(tǒng)主構(gòu)架選用了PC/104的嵌入式模塊,不僅尺寸小、功耗低,而且其堆棧式結(jié)構(gòu)方便了外擴(kuò)設(shè)備。總體上分為采集、處理、通訊三大部分,各部分硬件上通過PC/104總線緊密連接,由上位機(jī)通過以太網(wǎng)總體控制,而軟件上分成獨(dú)立的模塊,實(shí)現(xiàn)各自部分的功能,在實(shí)時(shí)嵌入式操作系統(tǒng)VxWorks下再通過主程序的調(diào)度協(xié)調(diào)起來。
硬件設(shè)計(jì)
系統(tǒng)硬件總體設(shè)計(jì)以PC/104體系結(jié)構(gòu)為核心,以1553B總線卡作為與飛機(jī)(或其他發(fā)控設(shè)備)通訊的主要接口,ADT600負(fù)責(zé)電壓電流模擬量和負(fù)載I/O信號的采集。PC/104可以外擴(kuò)LCD顯示器和鍵盤鼠標(biāo)等外設(shè),通過以太網(wǎng)與上位機(jī)相連可對測控系統(tǒng)進(jìn)行有效的控制和過程監(jiān)測,同時(shí)PC/104通過母板外接I/O擴(kuò)展板對負(fù)載進(jìn)行實(shí)時(shí)控制。系統(tǒng)框圖如圖1所示。
SCM/SuperDX是一種高度集成、自棧結(jié)構(gòu)、IBM-PC/AT兼容的PC/104 CPU模塊,它被設(shè)計(jì)成可以方便與其它周邊設(shè)備及模塊構(gòu)成完整系統(tǒng)的核心部件,采用增強(qiáng)型的80486處理器作為CPU,板載有PC/AT兼容的DMA控制器、中斷控制器及定時(shí)器,ROM-BIOS,4M~16M字節(jié)的DRAM及鍵盤,網(wǎng)口等。本系統(tǒng)中,將嵌入式操作系統(tǒng)VxWorks下載到Campact Flash中以啟動PC/104,上位機(jī)通過以太網(wǎng)與PC/104相連,通過網(wǎng)絡(luò)加載將程序加載到PC/104的RAM中執(zhí)行,上位機(jī)進(jìn)行實(shí)時(shí)監(jiān)視和程序控制,PC/104的LCD顯示屏可以實(shí)時(shí)顯示測試數(shù)據(jù)及數(shù)據(jù)傳輸狀況。
采集卡選用SBS公司的ADT600,它與PC/104完全兼容,最多提供十六個模擬輸入通道,通過71055的可編程外圍接口(PPI)提供24路數(shù)字量I/O線。模擬量輸入的量程可用跳線器選為?5~+5V,?10~+10V,0~10V,并帶有+/?35V的過壓保護(hù)。本系統(tǒng)的模擬量是電壓電流信號,量程選擇?5~+5V。而I/O通道通過71055的PPI設(shè)置為方式0的基本輸入輸出,采集卡和調(diào)理板調(diào)理電路硬件連接圖如圖2、3所示。
電壓、電流模擬量的采集應(yīng)注意數(shù)字地和模擬地的分離,以減小干擾,最后通過磁珠單點(diǎn)相連,而I/O電路將電壓/地的數(shù)字I/O信號通過轉(zhuǎn)換電路轉(zhuǎn)換為采集卡輸入電壓范圍的地/開路信號。
1553B通訊卡選用SBS公司的ASF-PC104-XT-1,該卡能實(shí)現(xiàn)PC/104總線和1553B總線的轉(zhuǎn)換,是一款智能MIL-STD-1553的板卡,支持MIL-STD-1553A和MIL-STD-1553B協(xié)議,適用于PC/104底板,可以工作在BC模式、RT模式、BM模式及并發(fā)BM模式,實(shí)現(xiàn)多個終端之間的快速通信。它具有以下高級結(jié)構(gòu)特點(diǎn):具有高速可編程邏輯裝置用于以字為單位的底層1553協(xié)議的編解碼;采用TI公司的DSP用于信息級和底層1553協(xié)議的處理;具有128K字節(jié)的高速靜態(tài)雙端口RAM用于信息緩存;配合底板接口的高速可編程邏輯電路(ASIC設(shè)計(jì));板上提供標(biāo)準(zhǔn)的和IRIG時(shí)間碼相關(guān)的高級計(jì)時(shí)電路;配套的軟件接口庫為1553和429設(shè)備管理提供擴(kuò)展功能。
由于SCM/SuperDX提供的I/O資源有限,因此,采集卡ADT600和1553B通訊卡的I/O地址的合理選擇就十分重要,以避免沖突以及在調(diào)試時(shí)產(chǎn)生不必要的麻煩,SCM/SuperDX的I/O地址分配如表1所示。ADT600模塊要占據(jù)十二個連續(xù)的I/O口的位置,基地址由DIP開關(guān)選擇,而ASF-PC/104卡需要主機(jī)為其分配未經(jīng)使用的8塊連續(xù)的地址寄存器,考慮以上因素,選取ADT600的基地址為300h,ASF-PC/104為390h。
軟件設(shè)計(jì)
軟件設(shè)計(jì)的重點(diǎn)主要包括底層設(shè)備驅(qū)動的編寫、系統(tǒng)任務(wù)的劃分及優(yōu)先級的設(shè)定。操作系統(tǒng)選用VxWorks,以充分滿足1553B實(shí)時(shí)通訊的要求,系統(tǒng)總體軟件主流程圖如圖4所示。系統(tǒng)啟動之后執(zhí)行主程序進(jìn)行自檢測和AD/1553板卡的初始化,若失敗則報(bào)錯,將錯誤信息顯示在顯示屏上,成功后創(chuàng)建主任務(wù)并執(zhí)行,包括數(shù)據(jù)的采集、發(fā)送和接受及解析命令控制字并執(zhí)行,主程序?qū)⒀h(huán)執(zhí)行,直到上位機(jī)發(fā)送停止程序的控制命令。
底層設(shè)備驅(qū)動配置
驅(qū)動程序?yàn)橛布脚_和應(yīng)用軟件間提供一個固定接口的軟件層,應(yīng)用程序必須通過驅(qū)動程序才能與硬件進(jìn)行數(shù)據(jù)通信。而驅(qū)動程序的編寫又與操作系統(tǒng)密切相關(guān),具體的操作系統(tǒng)對驅(qū)動的要求有所不同,本設(shè)計(jì)的底層驅(qū)動和操作系統(tǒng)VxWorks及任務(wù)關(guān)系圖如圖5所示。根據(jù)本系統(tǒng)的實(shí)際需要,編寫了與VxWorks系統(tǒng)密切相關(guān)的底層設(shè)備驅(qū)動。
首先介紹1553B通訊卡的驅(qū)動配置。本系統(tǒng)選用的1553B通訊卡有兩種板卡訪問方式:內(nèi)存映射和I/O訪問。I/O尋址采用專門的指令,編程缺乏靈活性,并且每次只能傳送單個字節(jié);而內(nèi)存映射方式指令豐富,編程方便、硬件節(jié)省,便于實(shí)現(xiàn)快速交換數(shù)據(jù)。故選用內(nèi)存映射方式,PC/104可以映射的空間為0xC8000~0xEFFFF,選取內(nèi)存映射基地址為0xD0000。同時(shí)INT引腳通過跳線選擇IRQ9。軟件設(shè)置如下:
1)調(diào)用setup_fw.c將固件庫源文件F002p.dat生成與ASF-P104卡匹配的Firmware.h(固件數(shù)據(jù)結(jié)構(gòu))文件,為板卡硬件提供匹配的接口定義信息;
2)在sbs_sys.h文件中添加#define VXWORKS和#define NO_FILE_SYSTEM語句行,設(shè)置操作系統(tǒng)信息;
3)在dev_cfg.h文件中按如下設(shè)置定義設(shè)備配置信息:
配置好軟件設(shè)置后就是1553驅(qū)動程序的實(shí)現(xiàn),即完成設(shè)備驅(qū)動函數(shù)的編寫。在編寫函數(shù)之前,需要定義驅(qū)動號以及設(shè)備的描述符,這在頭文件中實(shí)現(xiàn),如下所示:
}M1553_DEV; /*1553設(shè)備描述符*/
頭文件定義完畢就可以編寫函數(shù)了,以編寫M1553Drv( )函數(shù)為例。M1553Drv( )函數(shù)調(diào)用iosDrvInstall( )安裝設(shè)備的驅(qū)動例程。它在設(shè)備驅(qū)動程序表中為設(shè)備分配一個條目,并在其中填入此設(shè)備xxCreate( ),xxDelete( ),xxOpen( ),xxClose( ),xxRead( ),xxW rite ( )和xxIoctl( )等函數(shù)的地址。函數(shù)實(shí)體如下:
一一編寫其他的1553設(shè)備驅(qū)動函數(shù)M1553DevCreate( ),M1553Open( ),M1553Read( )和M1553Write( )以及中斷服務(wù)程序M1553Int( )。
以上為1553B卡的底層驅(qū)動編寫,ADT600與之類似,只是頭文件有差異,同理編寫設(shè)備函數(shù)ADC_InitializeBoardSettings(),ADC_DigitalToSBS(),ADC_SetChannel(),ADC_StartConversion(),ADC_ConversionDone()和ADC_ReadData()。至此,設(shè)備驅(qū)動配置完成,將驅(qū)動程序加載至應(yīng)用程序,上層程序代碼就可以直接調(diào)用這些底層驅(qū)動函數(shù)進(jìn)行編程。
任務(wù)設(shè)計(jì)
VxWorks是一個實(shí)時(shí)多任務(wù)操作系統(tǒng),因此根據(jù)系統(tǒng)的功能模塊要求,將應(yīng)用程序分割成若干個獨(dú)立的任務(wù),使CPU通過操作系統(tǒng)來調(diào)度多個任務(wù),輪番服務(wù)于一系列任務(wù)中的一個,使得應(yīng)用程序的設(shè)計(jì)大大簡化,并使程序的結(jié)構(gòu)模塊化、層次化。同時(shí),使用了實(shí)時(shí)內(nèi)核,所有時(shí)間要求苛刻的事件都可以盡可能快地得到處理。
任務(wù)劃分的好壞直接影響到系統(tǒng)的性能。將一個實(shí)時(shí)應(yīng)用問題分解為多個任務(wù),可以加快執(zhí)行速度,且有效地利用系統(tǒng)資源。但是,過度地分解任務(wù),將會使系統(tǒng)中有大量的任務(wù),需頻繁地進(jìn)行任務(wù)的切換,任務(wù)之間還要進(jìn)行很多同步和互斥控制,將增加系統(tǒng)服務(wù)工作,降低系統(tǒng)的速度和有效性。因此,劃分任務(wù)時(shí)必須進(jìn)行各種綜合平衡和折衷,有時(shí)將兩個操作合并在一起處理效果好些,但有時(shí)必須分開處理。這都依賴于實(shí)時(shí)應(yīng)用的特性。
根據(jù)系統(tǒng)功能需求,主任務(wù)劃分如下,任務(wù)間總體上采用優(yōu)先級搶占機(jī)制進(jìn)行調(diào)度,各任務(wù)功能及優(yōu)先級的劃分如表2所示。PC/104優(yōu)先接受來自飛機(jī)控制設(shè)備的命令字,然后執(zhí)行負(fù)載控制任務(wù),等待控制任務(wù)釋放信號量后,程序就執(zhí)行數(shù)據(jù)采集及發(fā)送任務(wù),通訊監(jiān)控任務(wù)對數(shù)據(jù)的接發(fā)進(jìn)行實(shí)時(shí)監(jiān)控,確保無信息的丟失,更重要的是,第一時(shí)間傳遞發(fā)控設(shè)備的控制命令,若啟動重發(fā)機(jī)制之后仍然接受不到信息則會報(bào)錯。而硬件初始化及自檢測任務(wù)只是在主程序開始時(shí)調(diào)用,由于優(yōu)先級的限制,只有等待再次軟啟動之后才會再次執(zhí)行。
除了優(yōu)先級的搶占外,主要任務(wù)間還通過設(shè)置信號量進(jìn)行二次調(diào)度,確保任務(wù)的連續(xù)正確執(zhí)行及資源的合理分配,優(yōu)化程序結(jié)構(gòu)。在主程序引導(dǎo)函數(shù)ProgStart( )中,建立了2個二進(jìn)制信號量和1個互斥信號量:semCON,semSEND,currNodeSemId。semCON信號量用于數(shù)據(jù)接收任務(wù)和監(jiān)控任務(wù)的信息傳遞,主要是數(shù)據(jù)的超時(shí)重發(fā)機(jī)制監(jiān)控;semSEND信號量用于數(shù)據(jù)采集任務(wù)和數(shù)據(jù)發(fā)送任務(wù)的信息傳遞;currNodeSemId信號量用于數(shù)據(jù)采集監(jiān)控任務(wù)中數(shù)據(jù)采集的完整性而設(shè)立的信號量,避免通訊任務(wù)搶占臨界資源以及調(diào)用不合理而產(chǎn)生"死鎖"現(xiàn)象。其中,2個二進(jìn)制信號量創(chuàng)建時(shí)為空(SEM_EMPTY),處于不可用狀態(tài),高優(yōu)先級任務(wù)執(zhí)行semGive()釋放后變?yōu)闈M(SEM_FULL),變?yōu)榭捎脿顟B(tài),供低優(yōu)先級任務(wù)執(zhí)行semTake()使用?;コ庑盘柫縞urrNodeSemId創(chuàng)建時(shí),為了避免優(yōu)先級倒置的情況以及為任務(wù)提供刪除安全,聯(lián)合使用了SEM_Q_PRIORITY、SEM_INVERSION_SAFE、SEM_DELETE_SAFE選項(xiàng)聯(lián)合使用,使用按位或操作,程序代碼如下:
currNodeSemId=semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE|SEM_DELETE_SAFE)
程序最后執(zhí)行ProgStop()結(jié)束主程序,刪除創(chuàng)建的任務(wù)并釋放信號量資源。因?yàn)槌绦蛑惺褂昧嘶コ庑盘柫?,并啟動了互斥信號量的任?wù)刪除保護(hù)功能,所以在刪除任務(wù)之前,必須先成功占有互斥信號量。先刪除任務(wù),再刪除信號量。
結(jié)束語
本文主要講述了1553B總線測控系統(tǒng)的設(shè)計(jì)及其在VxWorks下的軟件開發(fā)過程。實(shí)際中,建立了地面最小實(shí)驗(yàn)系統(tǒng),經(jīng)過聯(lián)機(jī)調(diào)試,測控系統(tǒng)運(yùn)行正常,系統(tǒng)具有很好的實(shí)時(shí)性和穩(wěn)定性,達(dá)到了預(yù)期效果。