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

?

某型飛行模擬訓(xùn)練器多串口通信的設(shè)計(jì)與實(shí)現(xiàn)

2012-04-29 00:44:03張連環(huán)曹竹梅
電腦知識與技術(shù) 2012年1期

張連環(huán) 曹竹梅

摘要:飛行模擬器具有可控性、經(jīng)濟(jì)性、可靠性等特點(diǎn),也在飛行人員培訓(xùn)中大量使用。在VS.net環(huán)境下采用多串口卡和CSerialPort類編寫的通信程序能夠滿足模擬器中上位機(jī)和多個(gè)下位機(jī)的實(shí)時(shí)通信要求,文章對其設(shè)計(jì)和實(shí)現(xiàn)方法進(jìn)行了闡述。

關(guān)鍵詞:串口擴(kuò)展;多串口通信;VS.net;CserialPort

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)01-0026-02

The Design and Implementation of a Flight Simulator Multi-Serial Ports Communication

ZHANG Lian-huan1, CAO Zhu-mei2

(College of Information and Communication Engineering of Harbin Engineering University, Harbin 150056, China; 2. Naval Flying Academy, Huludao 125001, China)

Abstract: Flight Simulator has the characteristics of controllable, economy, reliability, etc, and is also widely used in flight personnel training. In VS.net environment, using multi-serial port card and communication program written by CSerialPort can meet upper position machine and many lower position machine communication requirement of real-time communication in simulator. The design and realization method are discussed in this paper.

Key words: serial port extension; multi-serial ports communication; VS.net; serialPort

飛行模擬器是一種能比較逼真地復(fù)現(xiàn)飛機(jī)在空中的飛行狀態(tài)和環(huán)境的地面設(shè)備,是綜合人的視覺、聽覺信息、運(yùn)動(dòng)感覺信息的人在回路中的實(shí)時(shí)仿真系統(tǒng)。與真實(shí)飛機(jī)相比具有可控性、無破壞性、經(jīng)濟(jì)性、可靠性等特點(diǎn)。某型飛行模擬訓(xùn)練器系統(tǒng)中要求許多下位機(jī)同時(shí)跟一臺上位機(jī)進(jìn)行數(shù)據(jù)交換,以便能夠及時(shí)采集各控制面板的開關(guān)、電位器狀態(tài)和完成各儀表、顯示設(shè)備的驅(qū)動(dòng),而計(jì)算機(jī)一般所能提供的串口數(shù)量有限,就需完成要對串口進(jìn)行擴(kuò)展和通過各串口進(jìn)行數(shù)據(jù)交換的設(shè)計(jì)與實(shí)現(xiàn)。

1系統(tǒng)串口通信設(shè)計(jì)

32位下串口通信程序可以用多種方法實(shí)現(xiàn):使用較多的有MSComm控件、Win32API通信函數(shù)、CSerialPort類。

MSComm是微軟提供的串口編程控件,為應(yīng)用程序提供串口通信功能,功能較完善,使用方便。

Windows API是所有Windows應(yīng)用程序的根本。簡單地說,API就是一系統(tǒng)的例程,應(yīng)用程序通過調(diào)用這些例程來請求操作系統(tǒng)完成一些低級服務(wù)。調(diào)用Windows的API函數(shù),可以清楚地掌握串口通信的機(jī)制,并且自由靈活。

CserialPort類是Remon Spekreijse寫的一個(gè)串口類,是一個(gè)非常好用的多線程串口編程工具,它可以秀輕松的完成一般串口編程任務(wù)。

某型飛行模擬訓(xùn)練器系統(tǒng)中要求上位機(jī)同時(shí)和24個(gè)下位機(jī)通過串口進(jìn)行數(shù)據(jù)交換,使用API函數(shù)實(shí)現(xiàn)串口編程,方法靈活、功能強(qiáng)大,但需要編程人員對串口硬件工作原理有較深入了解;使用MSComm控件編程簡單,對付簡單的任務(wù)完全可以勝任,但當(dāng)需要在程序中用多個(gè)串口,且還要做很多復(fù)雜的處理,使用CserialPort類,很快就可搭好串口通信框架,編程者可以從煩心的框架編寫中解脫出來,將精力放在通信協(xié)議的編制及數(shù)據(jù)處理上。

在本飛行訓(xùn)練系統(tǒng)中,硬件采用工業(yè)多串口卡進(jìn)行串口擴(kuò)展,軟件基于VS.Net環(huán)境,采用CserialPort類進(jìn)行串口通信程序的編寫,基于RS-485標(biāo)準(zhǔn)來完成模擬訓(xùn)練器中多串口數(shù)據(jù)通信的功能。

2系統(tǒng)串口通信實(shí)現(xiàn)

2.1串口擴(kuò)展

串口擴(kuò)展在工控機(jī)上插三塊PCI接口8口串口擴(kuò)展卡,設(shè)置串口號為1~24,波特率設(shè)置為115200bps,與下位機(jī)一致。每個(gè)串口連接一特定設(shè)備。

2.2軟件編程

CserialPort類是基于多線程的,其工作流程如下:

1)在dataChange工程中添加SerialPort類文件

將類文件SerialPort.h和SerialPort.cpp復(fù)制到工程所在文件夾中,在工程中添加類文件,并在dataChangeView.h中包含頭文件:#include“SerialPort.h”

同時(shí)添加如下變量:

public:

CSerialPort m_serialPort[24]; //CSerailPort類對象

BOOL m_bSerialPortOpened[24]; //標(biāo)志串口是否打開

BYTE inputBuff[24][12];//按Port口(0-24)接收數(shù)據(jù)

2)串口初始化

在OnInit函數(shù)中完成串口的初始化,

void dataChangeView::OnInit()

{

// TODO:在此添加控件通知處理程序代碼

for(int i=0; i<24; i++)

if(m_serialPort[i].InitPort(this,i+1,115200,N,8,1,EV_RXFLAG | EV_RXCHAR,512)){

m_serialPort[i].StartMonitoring();//啟動(dòng)串口監(jiān)視線程

m_bSerialPortOpened[i]=TRUE;

}

else

{

Cstring strTemp;

strTemp.Format(“COM%d沒有發(fā)現(xiàn),或被其它設(shè)備占用”,i+1);

AfxMessageBox(strTemp);

3)建立WM_COMM_RXCHAR的消息映射處理函數(shù)OnCommunication()完成數(shù)據(jù)的接收。LONG dataChangeView::OnCommunication(WPARAM ch, LPARAM port)

{…

Switch(port)

{

case 1:

device01DataReceive(ch,port);//串口1設(shè)備的數(shù)據(jù)接收breek;

case 24:

device24DataReceive(ch,port);//串口24設(shè)備的數(shù)據(jù)接收breek;

然后根據(jù)通信協(xié)議具體要求分別寫出24個(gè)串口的數(shù)據(jù)接收函數(shù)

void dataChangeView:: device01DataReceive(WPARAM ch, LPARAM port)

void dataChangeView:: device24DataReceive(WPARAM ch, LPARAM port)

4)發(fā)送數(shù)據(jù)調(diào)用函數(shù)WriteToPort()直接向串口寫數(shù)據(jù)即可,為保證上位機(jī)對下位機(jī)進(jìn)行實(shí)時(shí)數(shù)據(jù)更新,添加WM_TIMER消息響應(yīng),每500ms向各串口定時(shí)發(fā)送數(shù)據(jù)。

void dataChangeView::OnTimer(UINT nIDEvent)

{

// TODO:在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值

for(int i=0; i<24; i++)

{

if(m_bSerialPortOpened[i])

dataUpdatePort(i);

}

CFormView::OnTimer(nIDEvent);

}

對應(yīng)的串口數(shù)據(jù)更新函數(shù):

void dataChangeView::dataUpdatePort(int nPortNum)

{

Switch(nPortNum)

{

case 1:

char data[512];

int len=Str2Hex("…",data);

m_serialPort.WriteToPort(data,len);

break;

case 24:

Break;

}}

3結(jié)束語

本文分析了幾種常用的實(shí)現(xiàn)串口通信的具體方法。最后通過串口卡擴(kuò)展串口,軟件在VS.net環(huán)境下使用CserialPort類編程基于RS-485標(biāo)準(zhǔn)進(jìn)行上位機(jī)與各下位機(jī)進(jìn)行數(shù)據(jù)通信。經(jīng)測試,系統(tǒng)運(yùn)行穩(wěn)定,該方案可以在同類多串口通信系統(tǒng)中借鑒。

參考文獻(xiàn):

[1]孫鑫.VC++編程深入詳解[M].北京:電子工業(yè)出版社,2006.

[2] [美]David J Kruglinski.Visual C++技術(shù)內(nèi)幕[M].潘愛民,王國印,譯.4版.北京:清華大學(xué)出版社,2009.

[3]侯俊杰.深入淺出MFC[M].2版.武漢:華中理工大學(xué)出版社,2001.

[4]龔建偉,熊光明.Visual C ++ /Turbo C串口通信編程實(shí)踐[M].北京:電子工業(yè)出版社,2007.

[5]葛姣,高清維.基于RS-485的多機(jī)串口通信網(wǎng)絡(luò)[J].安徽電子信息職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2009,10(6).

温州市| 鄂尔多斯市| 河东区| 通化县| 深泽县| 新化县| 交口县| 海丰县| 磴口县| 临泉县| 伊川县| 什邡市| 台东市| 武义县| 栾川县| 赣州市| 杭锦旗| 城步| 西城区| 宜兰市| 伊吾县| 射洪县| 黄冈市| 河津市| 和硕县| 精河县| 随州市| 凌源市| 循化| 冕宁县| 兴宁市| 南开区| 兰考县| 华宁县| 抚宁县| 鹰潭市| 临沭县| 巧家县| 乌鲁木齐市| 泽库县| 赫章县|