999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Winsock的集裝箱起重機(jī)分布式交互仿真訓(xùn)練系統(tǒng)的通信設(shè)計(jì)

2008-12-31 00:00:00宋鐵城許開(kāi)宇
電腦知識(shí)與技術(shù) 2008年16期

摘要:根據(jù)集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)的功能要求,設(shè)計(jì)了基于Winsock實(shí)現(xiàn)系統(tǒng)中數(shù)據(jù)交互的高速通信的方法。文中給出了設(shè)計(jì)思想和主要實(shí)現(xiàn)方法。實(shí)踐證明,基于消息的異步套接字和多線程技術(shù)是一種較好地實(shí)現(xiàn)集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)高速網(wǎng)絡(luò)通信的方法。

關(guān)鍵詞:系統(tǒng)結(jié)構(gòu);工作原理;網(wǎng)絡(luò)通信;多線程

中圖分類(lèi)號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)16-21246-04

Design of Communication Based on Winsock in the DIS hardware–in-the-loopSimulation Training System of Container Crane

SONG Tie-cheng,XU Kai-yu,LIANG Gang

(Dept. of Communication and Information System Shanghai Maritime university, Shanghai 200135,China)

Abstract: This paper analyses the requirements of DIS hardware–in-the-loop Simulation training system of container crane. And a method is proposed to achieve high speed communication base on Winsock in the data interaction. The principal of this design and some important functions used in this application are introduced in this paper. Practice has proved that technology of asynchronous socket based on message and multithreads is a good way to achieve high-speed communication in DIS hardware–in-the-loop Simulation training system of container crane.

Key words: System construction;Operation principle; Communication; Multithreads

1 引言

集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)是在已經(jīng)研制成功的集裝箱起重機(jī)半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)[1]的基礎(chǔ)上,根據(jù)港航企業(yè)綜合訓(xùn)練的需要和港口碼頭起重機(jī)裝卸作業(yè)實(shí)際要求,基于分布式仿真技術(shù),改進(jìn)現(xiàn)有單機(jī)仿真訓(xùn)練器,研制開(kāi)發(fā)多數(shù)量多類(lèi)型起重機(jī)的協(xié)同交互式綜合訓(xùn)練器。增加產(chǎn)品的技術(shù)附加值,滿足港航企業(yè)對(duì)協(xié)同培訓(xùn)的發(fā)展要求,提高產(chǎn)品的國(guó)際競(jìng)爭(zhēng)力的需求進(jìn)行研發(fā)的。

該仿真系統(tǒng)是基于DIS ( Distributed Interactive System)協(xié)議,結(jié)合起重機(jī)操作及操作監(jiān)控的特點(diǎn)而進(jìn)行研發(fā)的起重機(jī)操作的仿真系統(tǒng)。它構(gòu)造了一個(gè)虛擬的起重機(jī)操作環(huán)境,以滿足對(duì)學(xué)員進(jìn)行訓(xùn)練的要求。整個(gè)仿真系統(tǒng)具有對(duì)由不同類(lèi)型的多臺(tái)起重機(jī)和一個(gè)教員平臺(tái)構(gòu)成,各仿真器結(jié)點(diǎn)分別模擬各種不同的實(shí)際裝備。仿真過(guò)程開(kāi)始后,各仿真器結(jié)點(diǎn)之間需要通過(guò)網(wǎng)絡(luò)傳送大量的實(shí)時(shí)信息,以協(xié)調(diào)和控制各仿真結(jié)點(diǎn)程序的運(yùn)行。因此,各仿真結(jié)點(diǎn)之間網(wǎng)絡(luò)的通信是集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)中的關(guān)鍵技術(shù)之一。

網(wǎng)絡(luò)通信有很多種實(shí)現(xiàn)方法,其中Winsock是一套開(kāi)放的、支持多種協(xié)議的Windows環(huán)境下的網(wǎng)絡(luò)編程接口。在實(shí)際的應(yīng)用中,它已經(jīng)成為Windows網(wǎng)絡(luò)編程事實(shí)上的標(biāo)準(zhǔn)。根據(jù)集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)的特點(diǎn),采用了UDP協(xié)議,應(yīng)用套接字和多線程技術(shù)來(lái)滿足該系統(tǒng)中各仿真結(jié)點(diǎn)信息傳遞的實(shí)時(shí)、高效、交叉、對(duì)等性的要求[2]。

2 系統(tǒng)功能

整個(gè)系統(tǒng)分為學(xué)員系統(tǒng)(圖1)、教員臺(tái)控制系統(tǒng)、網(wǎng)絡(luò)通信系統(tǒng)模塊組成[3]。

當(dāng)學(xué)員在駕駛室操作臺(tái)進(jìn)行操作時(shí),相應(yīng)信號(hào)經(jīng)過(guò)PLC及信號(hào)采集系統(tǒng)轉(zhuǎn)換后把信息送入計(jì)算機(jī),計(jì)算機(jī)根據(jù)接受到的數(shù)據(jù),運(yùn)行相應(yīng)的動(dòng)力學(xué)模型,把計(jì)算結(jié)果輸入視景系統(tǒng),控制圖形輸出,實(shí)時(shí)反映出仿真圖象。通過(guò)加入視點(diǎn),實(shí)現(xiàn)多視點(diǎn)切換。圖2為該視景系統(tǒng)的一個(gè)畫(huà)面。

圖1 學(xué)員系統(tǒng)工作原理 圖2仿真駕駛訓(xùn)練系統(tǒng)部分視景畫(huà)面

教員臺(tái)控制系統(tǒng)包括教員臺(tái)主機(jī)、視景監(jiān)視屏、駕駛室操作監(jiān)視器以及相關(guān)的輸入輸出設(shè)備,其核心是用VC++6.0編制的教員臺(tái)控制系統(tǒng)程序。該系統(tǒng)可以完成以下主要功能:系統(tǒng)自檢、系統(tǒng)參數(shù)設(shè)置、操作訓(xùn)練科目和難度設(shè)定、操作訓(xùn)練環(huán)境條件設(shè)定、系統(tǒng)控制及仿真過(guò)程監(jiān)視、故障設(shè)置、仿真過(guò)程的記錄和重演、自動(dòng)評(píng)分和操作錯(cuò)誤分析等等。

網(wǎng)絡(luò)通訊系統(tǒng)由網(wǎng)絡(luò)交換機(jī)、專(zhuān)用和通用以太網(wǎng)卡、網(wǎng)絡(luò)線、視頻分配器等配以相應(yīng)的TCP/IP通訊協(xié)議組成。該系統(tǒng)將負(fù)責(zé)駕駛室系統(tǒng)、PLC邏輯控制系統(tǒng)和教員臺(tái)系統(tǒng)之間各種數(shù)據(jù)信號(hào)、視頻信號(hào)的傳送。

由于仿真訓(xùn)練系統(tǒng)在實(shí)際應(yīng)用中,需要同時(shí)對(duì)多臺(tái)不同類(lèi)型起重機(jī)的操作及場(chǎng)景進(jìn)行模擬,這就要求系統(tǒng)具備優(yōu)異的兼容性、擴(kuò)展性和計(jì)算能力。通過(guò)各仿真平臺(tái)間的通信,實(shí)現(xiàn)系統(tǒng)的分布式,提高系統(tǒng)的性能。圖3為仿真駕駛系統(tǒng)通信示意圖。

圖3 仿真駕駛系統(tǒng)通信示意圖

3 系統(tǒng)中網(wǎng)絡(luò)通信的實(shí)現(xiàn)

3.1 集裝箱起重機(jī)DIS的通信特點(diǎn)

半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)的數(shù)據(jù)通訊主要是通過(guò)網(wǎng)絡(luò)交換機(jī)來(lái)完成的。該結(jié)構(gòu)負(fù)責(zé)將各駕駛室操作臺(tái)的經(jīng)過(guò)A/D轉(zhuǎn)換的操作信號(hào)和PLC產(chǎn)生的數(shù)據(jù)經(jīng)網(wǎng)絡(luò)交換機(jī)傳遞給教員控制系統(tǒng)、學(xué)員系統(tǒng),以運(yùn)行數(shù)學(xué)模型模塊和進(jìn)行圖形驅(qū)動(dòng);將教員控制系統(tǒng)的命令和設(shè)定的參數(shù)傳送給學(xué)員系統(tǒng);教員控制系統(tǒng)通過(guò)切換接收學(xué)員系統(tǒng)傳送的數(shù)據(jù)監(jiān)控學(xué)員操作;學(xué)員系統(tǒng)也可以通過(guò)選擇接收其他學(xué)員的操作數(shù)據(jù)察看操作情況;將吊具或集裝箱的運(yùn)動(dòng)軌跡數(shù)據(jù)回傳給教員臺(tái)記錄下來(lái),以便重演。系統(tǒng)通訊結(jié)構(gòu)圖如圖4所示。

圖4 集裝箱裝卸橋半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)通訊結(jié)構(gòu)圖

基于半分布式交互仿真系統(tǒng)的網(wǎng)絡(luò)通信特點(diǎn),在教員控制系統(tǒng)與學(xué)員系統(tǒng)間的通信采用了流式套接字。操作臺(tái)與學(xué)員系統(tǒng),及學(xué)員系統(tǒng)間采用了數(shù)據(jù)報(bào)套接字。

3.2 主要使用函數(shù)[5-6]

3.2.1 套接字建立函數(shù)

SOCKET WSASocket(int af,int type,int protocol,LPWSAPROTOCOL_INFO lpProtocolInfo,GROUP g, DWORD dwFlags);

對(duì)于UDP協(xié)議,應(yīng)寫(xiě)為:

SOCKET m_sSend,m_recv;

m_sSend = WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);

m_recv = WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0);

3.2.2 套接字綁定函數(shù)

int bind ( SOCKET s,const struct sockaddr* addr, int namelen)

需要注意兩點(diǎn):

(1)IP地址的填寫(xiě)。由于要使用的是廣播通信方式,地址應(yīng)設(shè)為INADDR_ ANY;

(2)端口號(hào)的分配。為兩套接字指定特定端口,指定范圍在1024一65536,可任意指定。端口號(hào)從一個(gè)16位無(wú)符號(hào)數(shù)(u_short類(lèi)型數(shù))主機(jī)字節(jié)順序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序,需要使用htons( )函數(shù)。

SOCKADDR_IN addrSock;

addrSock.sin_addr.S_un.S_addr =htonl(INADDR_ANY);

addrSock.sin_family = AF_INET;

addrSock.sin_port = htons(8000);

if(SOCKET_ERROR == bind(m_sSend,(SOCKADDR*)addrSock,sizeof(SOCKADDR)))

{

AfxMessageBox(\"綁定失敗!\");

}

SOCKADDR_IN addrSock;

addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

addrSock.sin_family = AF_INET;

addrSock.sin_port =htons(7000);

if(SOCKET_ERROR==bind(m_recvt,(SOCKADDR*)addrSock,sizeof(SOCKADDR)))

{

AfxMessageBox(\"綁定失敗!\");

}

3.2.3數(shù)據(jù)發(fā)送與接收函數(shù)

int WSASendTo(SOCKET s ,LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags,const struct sockaddr Far*lpTo, int iToLen, LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);

int WSARecvFrom(SOCKET s ,LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags,const struct sockaddr Far*lpTo,int iToLen, LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);

需要注意的是,由于各仿真結(jié)點(diǎn)信息、傳遞的交叉性,要求發(fā)送函數(shù)具有發(fā)送廣一播數(shù)據(jù)的能力。對(duì)接收函數(shù)沒(méi)有特殊要求。

3.2.4設(shè)置套接字為非阻塞處理方式

在網(wǎng)絡(luò)通信中,由于網(wǎng)絡(luò)擁擠或其它原因,阻塞可能隨時(shí)出現(xiàn)。Winsock對(duì)可能產(chǎn)生阻塞的函數(shù)提供了阻塞和非阻塞兩種處理方式。在阻塞方式下,收發(fā)數(shù)據(jù)的函數(shù)在被調(diào)用后一直要到傳送完畢或者出錯(cuò)才能返回;對(duì)于非阻塞方式,函數(shù)被調(diào)用后立即返回,當(dāng)傳送完畢后,由Winsock給程序發(fā)送一個(gè)事先約定好的消息。

在默認(rèn)狀態(tài)下,Socket以阻塞方式工作。由于系統(tǒng)對(duì)實(shí)時(shí)性要求較高,因此要求Socket以非阻塞方式工作。為了實(shí)現(xiàn)非阻塞通信,Winsock提供異步選擇函數(shù)WSAAsynSelect ( )、套接字I/0控制函數(shù)ioctlsocket( )、事件選擇函數(shù)WSAEventSelect()等幾種方法。

根據(jù)實(shí)際需要,系統(tǒng)采用了基于消息的異步套接字,實(shí)現(xiàn)非阻塞通信。

int WSAAsyncSelect(SOCKET s,HWND hWnd, unsigned int wMsg,long lEvent)

該函數(shù)為指定的套接字請(qǐng)求基于Windows消息的網(wǎng)絡(luò)事件通知,并自動(dòng)將該套接字設(shè)置為非阻塞模式。

注冊(cè)事件并定義消息響應(yīng)函數(shù):

ON_MESSAGE(UM_SOCK,OnSock)

afx_msg long OnSock(WPARAM wParam, LPARAM lParam);

HWND hwnd =AfxGetMainWnd()-> GetSafeHwnd();

if(SOCKET_ERROR==WSAAsyncSelect(m_socket,hwnd,UM_SOCK,F(xiàn)D_READ))

{

AfxMessageBox(\"注冊(cè)網(wǎng)絡(luò)事件失敗!\");

}

4建立多線程機(jī)制[6]

4.1 建立多線程

在系統(tǒng)中,系統(tǒng)使用了兩個(gè)套接字。一個(gè)套接字用于數(shù)據(jù)接收,另一個(gè)用于數(shù)據(jù)發(fā)送。基于集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)的網(wǎng)絡(luò)通信特點(diǎn),該系統(tǒng)專(zhuān)門(mén)啟動(dòng)一個(gè)工作線程來(lái)監(jiān)視數(shù)據(jù)的接收情況,以滿足該系統(tǒng)網(wǎng)絡(luò)通信的實(shí)時(shí)性和高效性,同時(shí)也提高了通信的可靠性。而在主線程中則根據(jù)需要使用另一個(gè)套接字來(lái)發(fā)送數(shù)據(jù)。

4.2 保持線程間的同步

在多線程處理時(shí),線程之間經(jīng)常會(huì)同時(shí)訪問(wèn)一些資源數(shù)據(jù),從而導(dǎo)致資源操作上的沖突。在集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)中,工作線程不斷接收數(shù)據(jù)并寫(xiě)人數(shù)據(jù)緩沖區(qū),而主線程也要從數(shù)據(jù)緩沖區(qū)中讀取數(shù)據(jù)進(jìn)行處理。顯然,兩線程都要訪問(wèn)同一數(shù)據(jù)區(qū),為了避免訪問(wèn)沖突,必須進(jìn)行必要的沖突控制。

進(jìn)行沖突控制,通常采用通過(guò)設(shè)置互斥體對(duì)象、通過(guò)設(shè)置信號(hào)燈、通過(guò)設(shè)置事件對(duì)象和通過(guò)設(shè)置臨界區(qū)等方法,這里只討論設(shè)置事件方法。首先,調(diào)用函數(shù)CreateEvent創(chuàng)建事件對(duì)象:HANDLE CreateEvent ( );然后,在線程訪問(wèn)共享資源之前調(diào)用WaiteForSingle0bject,共享資源訪問(wèn)完畢后,調(diào)用SetEvent()將事件對(duì)象重新設(shè)置為有信號(hào)狀態(tài)。

下面一段代碼顯示了創(chuàng)建接收數(shù)據(jù)工作線程和在工作線程中保持線程同步的程序片斷:

HANDLE g_hEvent;

g_hEvent = CreateEvent(NULL,TRUE,F(xiàn)ALSE,NULL);

if( g_hEvent ==NULL)

{//事件創(chuàng)建失敗!;

}

DWORDThreadld;

HANDLE ThreadHandle=CreateThread(NULL,0, receiver , this , 0 , ThreadId );

if(!ThreadHandle)

{

AfxMessageBox(“創(chuàng)建失敗!”);

}

DWORD WINAPI receiver(LPVOID lpParameter)

{ …

WaitForSingleObject(g_hEvent,INFINITE);

…//訪問(wèn)共享數(shù)據(jù)區(qū)

SetEvent(g_hEvent);

}

5 結(jié)束語(yǔ)

實(shí)踐證明,基于消息的異步套接字和多線程技術(shù)是一種較好地實(shí)現(xiàn)集裝箱起重機(jī)分布式交互半實(shí)物仿真駕駛訓(xùn)練系統(tǒng)高速網(wǎng)絡(luò)通信的方法。目前,我們已經(jīng)成功地應(yīng)用該方法實(shí)現(xiàn)了仿真駕駛訓(xùn)練系統(tǒng)的高速網(wǎng)絡(luò)通信,為該系統(tǒng)的研制成功奠定了堅(jiān)實(shí)的基礎(chǔ)。文章所討論的基本內(nèi)容,對(duì)其它分布式交互仿真系統(tǒng)也具有一定的參考價(jià)值。

參考文獻(xiàn):

[1] 蔡志剛.集裝箱裝卸橋仿真系統(tǒng)[J].計(jì)算機(jī)輔助工程,2007(02):65-67.

[2] 李志強(qiáng),胡輝良.Winsock在坦克分布式交互仿真系統(tǒng)中的應(yīng)用[J].電子計(jì)算機(jī),2002,2(154):51-54.

[3] 李劍,梁崗,王重華.集裝箱裝卸橋仿真訓(xùn)練系統(tǒng)通信功能的實(shí)現(xiàn)[J].上海海運(yùn)學(xué)院學(xué)報(bào), 2002(03):58-61.

[4] 張煜,張新艷.仿真技術(shù)在港口集裝箱裝卸作業(yè)中的應(yīng)用[J].武漢交通科技大學(xué)學(xué)報(bào),2000,12(6):680-683.

[5] 曹衍龍,劉海英.Visual C++網(wǎng)絡(luò)編成實(shí)用案例精選[M].北京:人民郵電出版社,2006:21-37.

[6] 孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2006:523-611.

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。

主站蜘蛛池模板: 色综合手机在线| 成人伊人色一区二区三区| 国产激情无码一区二区三区免费| 国产区精品高清在线观看| 日韩毛片视频| 日本一区二区不卡视频| 欧美日韩国产精品va| 久久五月视频| 免费三A级毛片视频| 国产杨幂丝袜av在线播放| 999精品视频在线| 亚洲男人天堂2018| 92精品国产自产在线观看| 国产情侣一区二区三区| 综合五月天网| 国产香蕉在线视频| 欧美福利在线观看| 亚洲国产欧美目韩成人综合| 91娇喘视频| 毛片免费视频| 国产激情无码一区二区免费| 亚洲妓女综合网995久久| 任我操在线视频| 成人午夜亚洲影视在线观看| 国产大片黄在线观看| 狼友视频国产精品首页| 国产99视频免费精品是看6| 欧美亚洲国产精品第一页| 99久久国产精品无码| 54pao国产成人免费视频| 黄片在线永久| 国禁国产you女视频网站| 午夜福利免费视频| 欧美日本激情| 欧美亚洲欧美区| 午夜日b视频| 亚洲视频黄| 日韩亚洲高清一区二区| 亚洲无线视频| 国产精品一线天| 欧洲亚洲一区| 亚洲成人一区在线| 97在线免费视频| 久久午夜影院| 亚洲乱码视频| 99久久人妻精品免费二区| 国产97视频在线| 老司机久久99久久精品播放| 国产美女自慰在线观看| 乱人伦视频中文字幕在线| 第九色区aⅴ天堂久久香| 五月天婷婷网亚洲综合在线| 日韩av资源在线| 日韩欧美国产三级| 精品福利网| 欧美a级在线| 国产人碰人摸人爱免费视频| 国产性猛交XXXX免费看| 一级不卡毛片| 免费毛片a| 亚洲国产午夜精华无码福利| 手机成人午夜在线视频| 国产人免费人成免费视频| 久青草网站| 在线日本国产成人免费的| 人妻91无码色偷偷色噜噜噜| 日韩麻豆小视频| 中文成人无码国产亚洲| 欧美日韩中文字幕在线| 精品久久国产综合精麻豆| 欧美翘臀一区二区三区| 网久久综合| 午夜毛片免费观看视频 | 中文字幕欧美日韩高清| 韩日免费小视频| 粉嫩国产白浆在线观看| 国产丝袜啪啪| 91久久精品日日躁夜夜躁欧美| 91精品福利自产拍在线观看| 国产精品污污在线观看网站| 久久网综合| 喷潮白浆直流在线播放|