国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Windows XP+RTX的火控調(diào)試平臺軟件設(shè)計

2013-11-21 12:37石德乾胡江峰
火炮發(fā)射與控制學報 2013年4期
關(guān)鍵詞:實時性線程中斷

楊 維,石德乾,趙 凱,胡江峰

(西北機電工程研究所,陜西 咸陽 712099 )

火控軟件是自行高炮武器系統(tǒng)的重要組成部分,為了進行火控軟件功能、性能的調(diào)試和系統(tǒng)控制流程的驗證,需要研制相應(yīng)的調(diào)試軟件。Windows系統(tǒng)利用普通PC機為硬件平臺,軟件開發(fā)手段比較豐富、通用性較強,但實時性較差[1],RTX是美國Ardence公司推出解決Windows2000(XP)強實時性的擴展模塊,它不對Windows 2000(XP)系統(tǒng)進行任何封裝或修改,通過在硬件抽象層增加實時擴展來實現(xiàn)基于優(yōu)先級的搶占式實時任務(wù)的管理和調(diào)度,不僅可獲得很好的實時特性,又可完全利用Windows 2000(XP)平臺的優(yōu)點。筆者利用RTX實時擴展系統(tǒng)[2-4]來解決Windows XP系統(tǒng)在開發(fā)火控控制平臺軟件中實時性不足這一難題,將強實時性的外同步中斷服務(wù)、定時器中斷服務(wù)、CAN總線數(shù)據(jù)接收、發(fā)送等工作在RTSS進程中;將實時性不強的參數(shù)設(shè)置、圖形顯示等工作在Win32進程中,開發(fā)出一種基于Windows XP+RTX為軟件平臺的火控調(diào)試平臺軟件[5],很好地實現(xiàn)了火控軟件的功能和性能調(diào)試。同時,基于Windows XP+RTX的軟件開發(fā)手段可進一步應(yīng)用于自行高炮CAN總線的研究。

1 軟件體系結(jié)構(gòu)設(shè)計

軟件體系結(jié)構(gòu)如圖1所示。

軟件分為實時進程和非實時進程,兩大進程之間通過高速IPC通信和同步機制,實現(xiàn)數(shù)據(jù)交換。實時進程由RTX實現(xiàn),主要完成同步時統(tǒng)信號接收、CAN總線數(shù)據(jù)的接收/發(fā)送、時標處理;非實時進程由Windows實現(xiàn),主要完成CAN總線數(shù)據(jù)的處理、圖形顯示及參數(shù)輸入功能。

采用Visual C++ 6.0和RTX SDK為開發(fā)工具,首先建立一個MFC AppWizard工程來作為Win32進程環(huán)境,然后建立一個RTX AppWizard工程來作為RTSS進程環(huán)境,在Win32工程下利用RtCreateProcess()進行調(diào)用RTSS進程編譯生成的.rtss文件,此時完成兩個進程的建立,進程間采用共享內(nèi)存機制進行通信。

2 Win32下非實時部分軟件設(shè)計

非實時部分包括主流程、參數(shù)設(shè)置界面、火控數(shù)據(jù)顯示界面和與RTX進程通信的接收線程。其中參數(shù)設(shè)置界面主要用于進行航路目標參數(shù)設(shè)置,傳感器屬性設(shè)置及裝定數(shù)據(jù)設(shè)置;火控數(shù)據(jù)顯示界面實現(xiàn)火控計算機解算的方位角、高低角和彈丸飛行時間顯示,每100 ms刷新一次。

2.1 主流程設(shè)計

非實時部分程序主流程如圖2所示。

非實時部分程序主要用于創(chuàng)建與RTX進程通信的接收線程、發(fā)送共享內(nèi)存、發(fā)送事件,向RTX進程發(fā)送航路數(shù)據(jù)、系統(tǒng)控制指令、火控控制指令和裝定數(shù)據(jù)。

2.2 與RTX進程通信的接收線程設(shè)計

接收線程首先創(chuàng)建一個共享內(nèi)存用于和RTX進程進行數(shù)據(jù)交換,接著創(chuàng)建一個事件對象用于和RTX進程進行同步,然后等待RTX進程發(fā)來的接收事件,如果事件到來把共享內(nèi)存中的數(shù)據(jù)保存用于火控數(shù)據(jù)顯示。其程序代碼如下:

UINT recvDataTask(LPVOID pParam)

{

HANDLE hRecvEvent;

HANDLE hRecvShm;

PRECVMSG pRecvData;

hRecvShm=RtCreateSharedMemory(PAGE_READWRITE,0,sizeof(SERVODATA),RECV_SHM, (void**)&pRecvData);//創(chuàng)建共享內(nèi)存

if (hRecvShm == NULL)

AfxMessageBox("Create Recv Shared Memory Failed! ");

hRecvEvent = RtCreateEvent(NULL, FALSE, FALSE, "RecvEvent");// 創(chuàng)建接收同步事件

if (hRecvEvent == NULL)

AfxMessageBox("Create Recv Event Failed! ");

for (;;)

{

RtWaitForSingleObject(hRecvEvent,INFINITE);//等待RTX進程發(fā)送接收事件

if (pRecvData->type == 0)

{

AddServoPoint(pRecvData->servo);

}

else if (pRecvData->type == 1)

{

AddLaserPoint(pRecvData->laser);

}

}

}

3 RTX下實時部分軟件設(shè)計

實時部分包括主進程、定時器中斷服務(wù)程序、外同步中斷服務(wù)程序、CAN接收、發(fā)送線程。

3.1 主進程設(shè)計

主進程完成定時器創(chuàng)建及定時中斷服務(wù)程序掛接、CAN發(fā)送事件的創(chuàng)建、外同步中斷服務(wù)程序掛接、CAN初始化、創(chuàng)建CAN發(fā)送線程和創(chuàng)建CAN接收線程等。程序流程如圖3所示。

3.2 定時器中斷服務(wù)程序

定時器中斷服務(wù)程序每0.5 ms執(zhí)行一次,實現(xiàn)定時計數(shù)器加一。如果定時計數(shù)器的值等于CAN發(fā)送線程設(shè)置的發(fā)送時刻,則發(fā)出一個CAN發(fā)送事件。如果定時計數(shù)器的值等于39(定時達到20 ms),停止定時計數(shù)。其程序代碼如下:

void RTFCNDCL TimerHandler(PVOID context)

{

timerCount++;//定時計數(shù)器加1

if (sendFlag != -1 && timerCount == sendFlag)

{

RtSetEvent(hCanSendEvent);//啟動CAN總線發(fā)送事件

}

if (timerCount == 39)

{

RtCancelTimer(hTimer, NULL);//停止計數(shù)

}

}

3.3 外同步中斷服務(wù)程序

外同步中斷服務(wù)程序每20 ms執(zhí)行一次,設(shè)置定時器分辨率為0.5 ms,然后啟動定時器。如果此時仿真已經(jīng)開始,則同步計數(shù)器加一,此計數(shù)器在CAN接收線程中用于確定數(shù)據(jù)達到的時刻。其程序代碼如下:

void RTFCNDCL SyncInterruptHandler(void * nContext)

{

LARGE_INTEGER liPeriod; //定時器周期

liPeriod.QuadPart = 5000; /*0.5ms*/

timerCount = -1;

if(!RtSetTimerRelative(hTimer,&liPeriod, &liPeriod))

{

RtPrintf("RtSetTimerRelative error = %d ",GetLastError());

ExitProcess(1);

}

if (simulationbegin == 1) //仿真開始標志

{

SyncNum++;//同步計數(shù)器加1

}

}

3.4 CAN接收線程設(shè)計

CAN接收線程用于從CAN總線上接收火控計算機解算結(jié)果,包括隨動主令數(shù)據(jù)和彈丸飛行時間數(shù)據(jù)。將接收到的總線數(shù)據(jù)寫入接收共享內(nèi)存,同時向非實時部分發(fā)送接收事件通知從共享內(nèi)存中提取數(shù)據(jù)。程序流程如圖4所示。

3.5 CAN發(fā)送線程設(shè)計

CAN發(fā)送線程用于向CAN總線發(fā)送各種數(shù)據(jù)。程序流程如圖5所示。

4 半實物仿真案例

搭建半實物分布式仿真平臺,仿真平臺的節(jié)點包括跟蹤雷達模擬裝置、光電模擬裝置、激光模擬裝置、導航姿態(tài)模擬裝置、同步時統(tǒng)裝置、火控調(diào)試控制臺、火控計算機等,節(jié)點之間的電氣接口和CAN總線數(shù)據(jù)協(xié)議與實際裝備一致。其中,同步時統(tǒng)裝置和火控計算機與實裝產(chǎn)品一致,同步時統(tǒng)裝置用于提供20 ms同步信號。各個模擬裝置接收到火控調(diào)試控制臺發(fā)送的參數(shù)和控制指令后,按照20 ms固定時序和總線數(shù)據(jù)協(xié)議向火控計算機發(fā)送數(shù)據(jù)。圖6為參數(shù)設(shè)置和系統(tǒng)控制界面。圖7為火控數(shù)據(jù)顯示界面。

5 結(jié)束語

筆者開發(fā)了一種基于WindowXP+RTX平臺的火控調(diào)試軟件,研究了軟件總體結(jié)構(gòu)、Win32下非實時部分的軟件和RTX下實時部分的軟件設(shè)計流程及其代碼實現(xiàn)方法,整個軟件采用了模塊化設(shè)計,模塊間通過數(shù)據(jù)接口通信,可以很方便地增加功能模塊。針對自行高炮“時間同步+CAN”的總線結(jié)構(gòu),在RTSS子進程中采用外同步中斷方式完成了總線時間基準的統(tǒng)一,避免了總線仲裁,保證了數(shù)據(jù)傳輸?shù)膶崟r性。通過構(gòu)建半實物仿真系統(tǒng),進行了火控軟件功能調(diào)試、性能調(diào)試和系統(tǒng)控制流程的驗證。同時,為自行高炮CAN總線的進一步研究提供了基礎(chǔ)。

[1] William,Tom.Tools add fault tolerance,scalability to real-time Windows NT[J]. Electronic Design,1997,45(21):100.

[2] 時未東,杜承烈,宋翠葉.Windows實時擴展技術(shù)研究[J].計算機工程,2011,37(23):63.

SHI Wei-dong,DU Cheng-lie,SONG Cui-ye. Research on Windows real-time extension technology[J].Computer Engineering,2011,37(23):63.(in Chinese)

[3] McHale,John. Verturcom releases enhanced Windows NT real-time kernel[J]. Military&Aerospace Electronics,1999,10(7):4.

[4] 楊銅,鄭魁敬. 基于Windows XP+RTX 的 PC 數(shù)控軟件關(guān)鍵技術(shù)研究[J]. 制造技術(shù)與機床,2011,12(1):68.

YANG Tong, ZHENG Kui-jing. Research on key technology of PC-NC software based on Windows XP+RTX[J]. Manufacturing Technology & Machine Tool, 2011,12(1):68.(in Chinese)

[5] 劉江,高潔,翟亞東.基于RTX實時環(huán)境1553B總線驅(qū)動設(shè)計與實現(xiàn)[J]. 測控技術(shù),2011,30(6):77.

LIU Jiang,GAO Jie,ZHAI Ya-dong. Design and implement of 1553B bus driver based on RTX[J].Measurement & Control Technology, 2011,30(6):77.(in Chinese)

猜你喜歡
實時性線程中斷
實時操作系統(tǒng)mbedOS 互斥量調(diào)度機制剖析
基于國產(chǎn)化環(huán)境的線程池模型研究與實現(xiàn)
“單片機中斷概述”微課教學設(shè)計
一種考慮GPS信號中斷的導航濾波算法
Linux中斷線程化分析及中斷延時測試
跟蹤導練(二)(5)
航空電子AFDX與AVB傳輸實時性抗干擾對比
計算機控制系統(tǒng)實時性的提高策略
可編程控制器的實時處理器的研究
計算機中的多線程問題