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