李冠林,喬晉龍,2
(1.中國(guó)特種飛行器研究所,湖北 荊門(mén) 448035; 2.高速水動(dòng)力航空科技重點(diǎn)實(shí)驗(yàn)室, 湖北 荊門(mén) 448035)
?
一種飛艇半物理仿真系統(tǒng)ARINC429驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)
李冠林1,喬晉龍1,2
(1.中國(guó)特種飛行器研究所,湖北 荊門(mén) 448035; 2.高速水動(dòng)力航空科技重點(diǎn)實(shí)驗(yàn)室, 湖北 荊門(mén) 448035)
為了滿(mǎn)足飛艇實(shí)際飛行過(guò)程對(duì)通信可靠性和實(shí)時(shí)性的需求,半物理仿真系統(tǒng)的飛艇模型計(jì)算機(jī)采用以PC為平臺(tái)的Xpc嵌入式實(shí)時(shí)系統(tǒng),飛控計(jì)算機(jī)采用以PowerPC為平臺(tái)的VxWork嵌入式實(shí)時(shí)系統(tǒng),通過(guò)ARINC429協(xié)議完成數(shù)據(jù)通訊;硬件上,PowerPC通過(guò)橋接芯片訪問(wèn)并控制PCI設(shè)備;軟件上,按照Xpc系統(tǒng)和vxWork系統(tǒng)PCI設(shè)備驅(qū)動(dòng)程序的編寫(xiě)流程,分析了xPC內(nèi)存驅(qū)動(dòng)框架和vxBus驅(qū)動(dòng)框架關(guān)鍵技術(shù)點(diǎn),設(shè)計(jì)了飛艇模型計(jì)算機(jī)Xpc和飛控計(jì)算機(jī)Vxwork的ARINC429通訊卡驅(qū)動(dòng)程序;通過(guò)實(shí)際的應(yīng)用,證實(shí)所開(kāi)發(fā)的ARINC429驅(qū)動(dòng)程序滿(mǎn)足飛艇半物理仿真平臺(tái)數(shù)據(jù)通訊的可靠性和實(shí)時(shí)性。
半物理仿真系統(tǒng);嵌入式實(shí)時(shí)系統(tǒng); ARINC429協(xié)議;驅(qū)動(dòng)程序
飛艇的半物理仿真實(shí)驗(yàn)是檢驗(yàn)飛艇飛控性能的有效途徑。飛艇半物理仿真系統(tǒng)中不同的操作系統(tǒng)環(huán)境,同一硬件設(shè)備原理和流程雖然一致,但具體驅(qū)動(dòng)方法通常因操作系統(tǒng)的不同而有所差異[1]。因此,為了保證飛艇半物理仿真系統(tǒng)正常的ARINC429通訊,開(kāi)發(fā)出滿(mǎn)足Xpc系統(tǒng)和vxWork系統(tǒng)的ARINC429通訊卡驅(qū)動(dòng)程序是十分必要的。
飛艇半實(shí)物物理仿真主要由飛艇仿真平臺(tái)和飛控計(jì)算機(jī)組成,硬件組成如圖1所示。
圖1 飛艇仿真平臺(tái)硬件組成
飛艇仿真平臺(tái)建立在xPC系統(tǒng)環(huán)境下,利用飛艇模型模擬真實(shí)飛艇的飛行,飛控計(jì)算機(jī)建立在xWork環(huán)境下,負(fù)責(zé)飛艇的飛行控制和導(dǎo)航,飛控計(jì)算機(jī)和飛艇仿真平臺(tái)通過(guò)ARINC429總線完成二者之間的通訊。EFIS負(fù)責(zé)顯示飛艇飛行過(guò)程中的各種信息參數(shù)。
ARINCA29總線是廣泛應(yīng)用在航空電子系統(tǒng)中的一種通訊總線。它采用差分的工作方式,其結(jié)構(gòu)簡(jiǎn)單、可靠性高和抗干擾性強(qiáng),被廣泛應(yīng)用于飛機(jī)航電設(shè)備數(shù)據(jù)傳輸和控制命令傳輸。ARINC429傳輸字的格式如圖2所示。
圖2 ARINC429傳輸字的格式
ARINC429傳輸字格式主要由奇偶校驗(yàn)位(Odd)、符號(hào)/狀態(tài)位(SSM)、數(shù)據(jù)區(qū)域(Data)、源/目標(biāo)標(biāo)識(shí)(SDI)和標(biāo)號(hào)位(Label)組成。在通訊過(guò)程中,發(fā)送順序依次為標(biāo)號(hào)位、源/目標(biāo)標(biāo)識(shí)、數(shù)據(jù)區(qū)域、符號(hào)/狀態(tài)位和奇偶校驗(yàn)位,其中標(biāo)號(hào)位發(fā)送順序?yàn)橛筛叩降?8-1),而傳輸字的發(fā)送順序都是由低到高(9-32)。當(dāng)接收方接收到429傳輸字時(shí),需要將Label位的進(jìn)行逆序處理。
3.1 飛艇仿真系統(tǒng)部分
xPC是基于RTW(Real-Time Workshop)的實(shí)時(shí)仿真和開(kāi)發(fā)平臺(tái),其采用“雙機(jī)”模式實(shí)現(xiàn)產(chǎn)品原型開(kāi)發(fā)和系統(tǒng)的測(cè)試。宿主機(jī)運(yùn)行simulink完成仿真系統(tǒng)模型開(kāi)發(fā),通過(guò)網(wǎng)線將模型加載到目標(biāo)機(jī)上;目標(biāo)機(jī)啟動(dòng)時(shí)加載實(shí)時(shí)內(nèi)核,該實(shí)時(shí)內(nèi)核保證仿真系統(tǒng)高效的運(yùn)行[2]。
xPC目標(biāo)機(jī)支持ISA總線和PCI總線的I/O設(shè)備,飛艇仿真模塊采用PCI總線的ARINC429通訊卡。xPC 驅(qū)動(dòng)程序文件即為由C語(yǔ)言編寫(xiě)函數(shù)組成的S-functions文件,主要由初始化模塊、執(zhí)行模塊和結(jié)束模塊組成,如圖3所示。
圖3 xPC 目標(biāo)驅(qū)動(dòng)程序組成
初始化模塊包括由mdlInitializeSizes函數(shù),mdlInitializeSampleTimes函數(shù)和mdlStart函數(shù)組成,mdlInitializeSizes函數(shù)和mdlInitializeSampleTimes函數(shù)主要負(fù)責(zé)輸入輸出參數(shù)初始化、狀態(tài)量初始化和系統(tǒng)采樣時(shí)間的初始化,mdlStart函數(shù)負(fù)責(zé)I/O設(shè)備初始化;執(zhí)行部分根據(jù)仿真模型,完成相應(yīng)的任務(wù),執(zhí)行部分功能集中在mdlOutputs 函數(shù),該函數(shù)在負(fù)責(zé)PCI設(shè)備的讀寫(xiě)操作;結(jié)束模塊功能函數(shù)為mdlTerminate,在運(yùn)行結(jié)束后,負(fù)責(zé)釋放相關(guān)資源,使I/O設(shè)備安全退出。
xPC Target啟動(dòng)時(shí),PCI總線驅(qū)動(dòng)被加載,BIOS掃描掛接在PCI總線上的I/O設(shè)備,并為PCI設(shè)備分配合理的I/O空間地址、物理地址和中斷號(hào)等資源,無(wú)需用戶(hù)在驅(qū)動(dòng)程序中為PCI設(shè)備申請(qǐng)相關(guān)的資源,驅(qū)動(dòng)程序通過(guò)廠商標(biāo)識(shí)(Vendor_ID)和設(shè)備標(biāo)識(shí)(Device_ID)來(lái)獲取PCI設(shè)備的配置空間信息,代碼如下:
rl32eGetPCIInfo(Vendor_ID,Device_ID,&pciinfo);
pciinfo 是一個(gè)結(jié)構(gòu)體變量,結(jié)構(gòu)如下:
{
unsigned long BaseAddress[6];
unsigned short AddressSpaceIndicator[6];
…
unsigned short InterruptLine;
}
BIOS為每個(gè)PCI設(shè)備提供了6個(gè)基址,其中有部分基址是無(wú)效的,通過(guò)rl32eShowPCIInfo函數(shù)確定有效基址。PCI設(shè)備映射分為I/O映射和內(nèi)存映射,驅(qū)動(dòng)程序可以通過(guò)pciinfo中的AddressSpaceIndicator屬性值來(lái)確定PCI映射類(lèi)型。若PCI設(shè)備為內(nèi)存映射,AddressSpaceIndicator屬性值0;若PCI設(shè)備為I/O映射AddressSpaceIndicator屬性值1。ARINC 429通訊卡為內(nèi)存映射,pciinfo結(jié)構(gòu)中的基址BaseAddress必需通過(guò)函數(shù)rl32eGetDevicePtr 轉(zhuǎn)化成虛擬地址,然后用C語(yǔ)言的指針訪問(wèn)相應(yīng)的虛擬地址,代碼如下:
bar2Base = (char *)rl32eGetDevicePtr((char*)(pciinfo.BaseAddress[2]),
4096,RT_PG_USERREADWRITE);
*(bar2Base)= 0x12;
編譯器往往會(huì)優(yōu)化內(nèi)存,將內(nèi)存變量緩存到寄存器。當(dāng)驅(qū)動(dòng)程序進(jìn)行寫(xiě)操作,volatile關(guān)鍵詞提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲(chǔ)或讀取這個(gè)變量的時(shí)候,都會(huì)直接從變量地址中讀取數(shù)據(jù)。如果沒(méi)有volatile關(guān)鍵字,則編譯器可能優(yōu)化讀取和存儲(chǔ),可能暫時(shí)使用寄存器中的值,如果這個(gè)變量有別的程序更新了的話(huà),將出現(xiàn)不一致的現(xiàn)象,該驅(qū)動(dòng)將寄存器地址值都用volatile關(guān)鍵詞進(jìn)行修飾,以此避免寄存器內(nèi)值不能及時(shí)更新的問(wèn)題。
typedef struct
{
volatile uint32_T * txFifo_0; //pci429 發(fā)送通道fifo
…
volatile uint16_T * bps_sel; //dei1016波特率控制
volatile uint8_T * recEn; //8路接收使能
}Regs_429;
3.2 飛控計(jì)算機(jī)系統(tǒng)部分
飛控計(jì)算機(jī)處理器板與ARINC429有關(guān)的硬件如圖4所示。
圖4 飛控計(jì)算機(jī)處理器板示意圖
橋接芯片是為PowerPC專(zhuān)門(mén)設(shè)計(jì)的橋芯片/存儲(chǔ)器控制器,主要實(shí)現(xiàn)PowerPC到PCI的橋接功能,同時(shí)管理內(nèi)存VxWorks是WindRiver公司推出的一個(gè)高效的嵌入式實(shí)時(shí)操作系統(tǒng),內(nèi)核可根據(jù)實(shí)際需求進(jìn)行裁減,擁有良好的可靠行和卓越的實(shí)時(shí)性。由于在不同CPU架構(gòu)上提供了統(tǒng)一的接口和相同的運(yùn)行特性,VxWork的應(yīng)用程序可以在不同的硬件上進(jìn)行移植,被廣泛地應(yīng)用在通信、軍事、航空、航天等領(lǐng)域中[3-4]。
WindRiver公司從VxWork6.X開(kāi)始引入VxBus驅(qū)動(dòng)模型,該模型定義了一些標(biāo)準(zhǔn)的接口來(lái)操作系統(tǒng)和硬件設(shè)備,VxBus驅(qū)動(dòng)模型涉及設(shè)備、驅(qū)動(dòng)和實(shí)例。每一個(gè)驅(qū)動(dòng)可以與多個(gè)設(shè)備關(guān)聯(lián),但是每個(gè)實(shí)例只能對(duì)應(yīng)其中的一種關(guān)聯(lián)[5],VxBus驅(qū)動(dòng)實(shí)例模型如圖5所示。
VxBus架構(gòu)下arinc429通訊卡的初始化主要包括硬件查找階段、驅(qū)動(dòng)注冊(cè)階段、驅(qū)動(dòng)初始化階段1、驅(qū)動(dòng)初始化階段2和驅(qū)動(dòng)初始化階段3五個(gè)部分。在硬件查找階段,vxworks系統(tǒng)調(diào)用sysHwInit函數(shù)激活設(shè)備,在sysHwInit函數(shù)中,通過(guò)調(diào)用hardWarelnterFaceInit函數(shù)和hardWareInterFaceBusInit函數(shù)來(lái)初始化和激活arinc429通訊卡。在hardWareInterFaceBusInit函數(shù),通過(guò)調(diào)用vxbDevRegister函數(shù)來(lái)完成arinc429通訊卡驅(qū)動(dòng)的注冊(cè)。
圖5 Vxbus驅(qū)動(dòng)實(shí)例模型
驅(qū)動(dòng)程序注冊(cè)主要包括vxbDevRegInfo結(jié)構(gòu)體初始化和調(diào)用vxbDevRegister函數(shù)兩部分,vxbDevRegInfo結(jié)構(gòu)體提供了驅(qū)動(dòng)注冊(cè)所需的相關(guān)信息,初始化代碼如下:
LOCAL struct vxbDevRegInfo pci429DevRegistration =
{
…
VXB_DEVID_DEVICE, /* devID */
VXB_BUSID_PCI, /* busID = PLB */
" arinc429", /* drvName */
&pci429Funcs, /* pDrvBusFuncs */
pci429DriverCtrl, /* pMethods*/
…
};
驅(qū)動(dòng)初始化3個(gè)階段主要完成內(nèi)存空間、I/O空間和中斷等資源的申請(qǐng)以及實(shí)例的建立,使上層應(yīng)用程序可以正常使用驅(qū)動(dòng)程序。在pci429DevRegistration結(jié)構(gòu)中pci429Funcs提供了設(shè)備驅(qū)動(dòng)初始化3個(gè)階段的入口地址,定義如下:
LOCAL struct drvBusFuncs pci429Funcs =
{
pci429InstInit, /* devInstanceInit */
pci429InstInit2, /* devInstanceInit2 */
pci429InstConnect /* devConnect */
};
在pci429InstInit2函數(shù)中主要負(fù)責(zé)獲取硬件設(shè)備相關(guān)的資源,vxbRegMap函數(shù)進(jìn)行板卡基地址映射,從而調(diào)用相關(guān)的讀寫(xiě)函數(shù)對(duì)設(shè)備卡進(jìn)行操作。
代碼如下:
LOCAL void wrsampleInstInit2(VXB_DEVICE_ID pInst )
{
…
VXB_PCI_BUS_CFG_READ (pDev, PCI_CFG_VENDOR_ID, 2, &venId);
VXB_PCI_BUS_CFG_READ (pDev, PCI_CFG_DEVICE_ID, 2, &devId);
/* find the memory mapped window for the device registers */
for (i = 0; i < VXB_MAXBARS; i++)
{
if (pInst->regBaseFlags[i] == VXB_REG_MEM)
break;
}
pDrvCtrl->pci429Bar = pInst->pRegBase[i]; /* store the base address */
vxbRegMap (pInst, i, &pDrvCtrl->pci429Handle); /* map the window */
…
}
在pci429InstConnect函數(shù)中完成硬件啟動(dòng)時(shí)相關(guān)資源的配置,包括中斷部分、發(fā)送部分部分、接收部分以及狀態(tài)命令字段。
EFIS實(shí)時(shí)準(zhǔn)確的更新飛艇模型發(fā)送的飛行狀態(tài)信息,并且飛艇模型隨著飛控計(jì)算機(jī)操作命令的不同,實(shí)時(shí)準(zhǔn)確的變換著飛行姿態(tài)。實(shí)驗(yàn)證明,ARINC429通訊卡驅(qū)動(dòng)程序保證了飛艇仿真系統(tǒng)穩(wěn)定、可靠和實(shí)時(shí)性的通信。
飛艇仿真系統(tǒng)模型計(jì)算機(jī)和飛控計(jì)算機(jī)分別采用xpc系統(tǒng)和vxworks系統(tǒng),ARINC429驅(qū)動(dòng)程序保證仿真系統(tǒng)在不同操作系統(tǒng)之間的實(shí)時(shí)通信,同時(shí)ARINC429驅(qū)動(dòng)程序?yàn)樯蠈討?yīng)用程序訪問(wèn)ARINC429通信卡提供基礎(chǔ)。
[1] 王 蒙.基于嵌入式系統(tǒng)的SpaceWire總線驅(qū)動(dòng)技術(shù)研究[J].計(jì)算機(jī)測(cè)量與控制,2014,22 (2):483-485.
[2] 宋 煒,祖家奎.基于x P C 目標(biāo)的實(shí)時(shí)I/O接口技術(shù)研究[J].計(jì)算機(jī)應(yīng)用,2008,27(1):62-65.
[3] 李 焱.VxWorks下82C55A并口驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)及測(cè)試[J].計(jì)算機(jī)測(cè)量與控制,2010,18 (2):261-263.
[4] 曹桂平.Vxworks設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解[M].北京:電子工業(yè)出版社,2011.
[5] Wind River System Inc.. VxWorks programmer’s guide[Z]. Wind River System Inc.,1999.
Design and Implementation of a ARINC429 Driver for Semi- physical Simulation System
Li Guanlin1,Qiao Jinlong1,2
(1.China Special Vehicle Research Institute,Jingmen 448035,China;2.Key Aviation Scientific and Technological Laboratory of High-Speed Hydrodynamic, Jingmen 448035,China)
In order to meet the demand of communication reliability and real-time for airship in actual flight process, the airship model computer of semi-physical simulation system uses an embedded real-time system Xpc which uses PC as a platform, flight control computer uses an embedded real-time system VxWork which uses PowerPC as a platform,through the ARINC429 protocol for data communications.In hardware, PowerPC accesses and controls PCI devices through the bridge chip; in software, in accordance with written procedures of PCI device drivers in Xpc system and vxWork system,it analyzed the key technical points of the xPC memory drive frame and the vxBus drive frame, designed the communication card driver ARINC429 of airship computer model Xpc and flight control computer Vxwork. Through practical application, it confirmed the development of the ARINC429 driver meet the reliability and real-time of data communications for airship semi-physical simulation platform.
semi-physical simulation system; embedded real-time system; ARINC429 protocol; drivers
2015-09-15;
2015-11-04。
李冠林(1987-),男,山西朔州人,碩士研究生,工程師,主要從事嵌入式方向的研究。
1671-4598(2016)09-0176-02
10.16526/j.cnki.11-4762/tp.2016.09.049
TP3
A