亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于網(wǎng)絡(luò)的水下平臺顯控系統(tǒng)研究

        2012-01-22 10:29:52,,,
        船海工程 2012年5期
        關(guān)鍵詞:控系統(tǒng)線程數(shù)據(jù)處理

        ,,,

        (華中科技大學(xué) 船舶與海洋工程學(xué)院,武漢 430074)

        本顯控系統(tǒng)是一種新型水下試驗平臺的重要組成部分,是一種基于網(wǎng)絡(luò)的分布式系統(tǒng)。本課題研究的水面顯控系統(tǒng)是該水下試驗平臺的數(shù)據(jù)處理中心和監(jiān)控顯示系統(tǒng),進(jìn)行實時顯控,并記錄試驗數(shù)據(jù)。

        該試驗平臺工作于水下150 m深環(huán)境,平臺四角由錨固定,每個錨由一臺錨泊絞車和一臺張緊絞車進(jìn)行控制收放,絞車由液壓馬達(dá)驅(qū)動,進(jìn)行調(diào)平。利用牽引絞車牽引位于平臺上的小車,使小車在平臺導(dǎo)軌上達(dá)到指定速度以完成指定實驗。平臺模型及顯控系統(tǒng)結(jié)構(gòu)見圖1、2。

        圖1 平臺模型 圖2 顯控系統(tǒng)結(jié)構(gòu)

        顯控系統(tǒng)在功能上來說,分為三個功能模塊:網(wǎng)絡(luò)通信模塊、數(shù)據(jù)處理模塊和實時再現(xiàn)仿真模塊,功能結(jié)構(gòu)圖見圖3。

        圖3 顯控系統(tǒng)功能結(jié)構(gòu)

        1 系統(tǒng)的設(shè)計與實現(xiàn)

        1.1 硬件結(jié)構(gòu)

        系統(tǒng)主要由主控節(jié)點、數(shù)據(jù)處理節(jié)點(工控機2)、實時三維仿真節(jié)點(工控機1)、應(yīng)急控制節(jié)點等組成,系統(tǒng)采用基于以太網(wǎng)的分布式結(jié)構(gòu),由數(shù)據(jù)圖表顯示節(jié)點控制整個仿真系統(tǒng)的數(shù)據(jù)接收、處理、存儲以及仿真推進(jìn),系統(tǒng)結(jié)構(gòu)見圖4。

        圖4 系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)

        主控節(jié)點(主控PLC)接收水下設(shè)備傳輸上來的信號,并將其數(shù)據(jù)發(fā)送給指定節(jié)點。(主控節(jié)點的控制作用在這里不做討論)。

        數(shù)據(jù)處理節(jié)點是數(shù)據(jù)的管理站點,它接收主控制節(jié)點傳送的數(shù)據(jù),并進(jìn)行數(shù)據(jù)解析、數(shù)據(jù)校驗、參數(shù)處理和數(shù)據(jù)存儲,另外還要對小車和平臺的速度等數(shù)據(jù)進(jìn)行圖表曲線顯示,以及為實時三維仿真節(jié)點提供仿真數(shù)據(jù)。實時三維仿真節(jié)點主要進(jìn)行三維建模、實時的三維仿真等。

        應(yīng)急節(jié)點是在水下設(shè)備不能正常工作的情況下啟動應(yīng)急系統(tǒng),水下數(shù)據(jù)將從應(yīng)急節(jié)點傳輸。

        1.2 數(shù)據(jù)通信

        網(wǎng)絡(luò)通信是本網(wǎng)絡(luò)顯控系統(tǒng)的硬件基礎(chǔ),本系統(tǒng)使用普通的以太網(wǎng)為通信介質(zhì),采用標(biāo)準(zhǔn)的TCP/IP協(xié)議傳輸數(shù)據(jù)。

        本系統(tǒng)網(wǎng)絡(luò)通信采用基于TCP協(xié)議的流式套接字,使用Winsock編程最常用的模式:服務(wù)器-客戶端模式(Server-Client)[1-2],網(wǎng)絡(luò)通信過程見圖5。

        圖5 Server-Client模式通信過程

        1.3 實時數(shù)據(jù)處理

        1.3.1 數(shù)據(jù)處理流程

        實時數(shù)據(jù)處理是本系統(tǒng)的核心內(nèi)容,是所有其它工作的數(shù)據(jù)中心,其工作流程如下。

        1)數(shù)據(jù)處理節(jié)點接收到主控節(jié)點的數(shù)據(jù)碼字,對其進(jìn)行數(shù)據(jù)解析,根據(jù)預(yù)設(shè)定的編碼位設(shè)置,解析幀類型、幀長等設(shè)備和編碼信息,以及運動和狀態(tài)等具體數(shù)據(jù)。典型小車數(shù)據(jù)位設(shè)置見表1。

        表1 小車數(shù)據(jù)位設(shè)置

        2)對數(shù)據(jù)進(jìn)行濾波,即數(shù)據(jù)校驗。在程序中設(shè)置一個計算器count,一旦接收到異常數(shù)據(jù),計數(shù)器從0開始計數(shù),如果連續(xù)異常次數(shù)超過5此,也就是說count>5時,有理由認(rèn)為設(shè)備發(fā)生了故障,這時必須進(jìn)行檢查。數(shù)據(jù)校驗的程序流程圖見圖6。

        圖6 數(shù)據(jù)校驗流程

        3)將正確的數(shù)據(jù)進(jìn)行存儲,供以后查閱。存儲的數(shù)據(jù)中不僅包括實時的小車速度、位置,平臺傾角、深度等信息,還包括具體信息數(shù)據(jù)的發(fā)送(或接收)時刻,設(shè)備號等。

        4)對一些沒有直接信號的數(shù)據(jù),還須通過計算后一起存儲,比如小車加速度,在程序中使用結(jié)構(gòu)體Struct來表示一個設(shè)備數(shù)據(jù)。例如小車的數(shù)據(jù)結(jié)構(gòu)定義為

        Struct Car

        {

        char carID[8];//小車設(shè)備 ID號

        char time[20];//時刻

        float speed;//瞬時速度

        float acceleration//瞬時加速度

        float displacement;//位移

        int direction;//方向

        Coordinate coords;//坐標(biāo)位置

        }

        之后,取出數(shù)據(jù),對小車、平臺等數(shù)據(jù)進(jìn)行圖表曲線的實時繪制。數(shù)據(jù)流程圖見圖7。

        圖7 數(shù)據(jù)處理流程

        1.3.2 設(shè)計實現(xiàn)

        如果將所有的工作放在同一個線程,如果出現(xiàn)上面的情況,將會發(fā)生阻塞,發(fā)送過來的數(shù)據(jù)得不到及時的處理,很可能會丟失。

        本系統(tǒng)采用多線程技術(shù),創(chuàng)建3個線程:線程1(數(shù)據(jù)接收線程)負(fù)責(zé)處理數(shù)據(jù)的接收;線程2(數(shù)據(jù)處理線程)負(fù)責(zé)數(shù)據(jù)解析、數(shù)據(jù)存儲和發(fā)送放;線程3(曲線圖表線程)負(fù)責(zé)從數(shù)據(jù)區(qū)中取數(shù)據(jù),以及曲線圖表顯示,簡單的數(shù)據(jù)流程見圖8。

        圖8 數(shù)據(jù)處理節(jié)點流程

        既然用到了多線程技術(shù),必然會涉及到線程的同步問題。使隸屬于同一進(jìn)程的各線程協(xié)調(diào)一致地工作稱為線程的同步[3]。當(dāng)多個線程同時讀寫同一份共享資源的時候,可能會引起沖突。當(dāng)線程1對數(shù)據(jù)區(qū)的寫操作和線程2的讀操作同時進(jìn)行時,這時可能會出現(xiàn)讀數(shù)據(jù)錯誤,可以使用事件(CEvent)來進(jìn)行線程的同步。

        CEvent類提供了對事件的支持。事件是一個允許一個線程在某種情況發(fā)生時,喚醒另外一個線程的同步對象[4]。例如在某些網(wǎng)絡(luò)應(yīng)用程序中,線程1負(fù)責(zé)監(jiān)聽通信端口,線程2對接收的數(shù)據(jù)進(jìn)行處理。通過使用CEvent類,線程1可以通知線程2何時處理數(shù)據(jù)。部分程序?qū)崿F(xiàn)如下。

        在線程1的函數(shù)中Thead1Func(LPVOID pParam)進(jìn)行寫操作,寫完即喚醒讀操作:

        ......

        WaitForSingleObject(hEvent.m_hObject,INFINITE);//等待

        write();//寫入操作

        hEvent.SetEvent();//設(shè)置為有信號,喚醒讀操作

        ......

        在線程2的函數(shù)中Thead2Func(LPVOID pParam)進(jìn)行讀操作,開始時即設(shè)置為有信號,可以進(jìn)行寫操作:

        ......

        hEvent.SetEvent();//設(shè)置為有信號

        WaitForSingleObject(hEvent.m_hObject,INFINITE);//等待

        read();//寫入操作

        hEvent.SetEvent();//設(shè)置為有信號

        ......

        同樣,線程2與線程3之間也可以使用這種同步處理。

        1.4 實時三維仿真

        1.4.1 三維模型動畫

        由于OpenGL沒有提供高級命令函數(shù)來定義復(fù)雜的三維模型[5],本系統(tǒng)利用3DSMax建立三維立體模型。在3DSMax中,將所建立的幾何模型保存為3DS數(shù)據(jù)格式,然后導(dǎo)入到軟件系統(tǒng)中。需要注意的是3DS數(shù)據(jù)格式只能保存和轉(zhuǎn)換幾何信息,而色彩、材質(zhì)等信息可能會在轉(zhuǎn)換時丟失[6]。

        動畫是由一幀幀有序的圖像連續(xù)播放形成的,而每幀都是由一些特定圖形對象繪制在屏幕上形成的[7]。因此要形成動畫,必須選好每一幀的時間間隔,以及模型在每一幀之間的運動“間隙”(包括位移、角度等)。

        理解動畫的原理對后面的參數(shù)處理將有很大的影響,因為三維仿真中,模型的運動必須考慮到時間間隔和運動“間隙”。

        1.4.2 數(shù)值處理

        讀取到解析后的數(shù)據(jù)后,數(shù)據(jù)還不能直接用于三維仿真。讀取的數(shù)據(jù)是真實物體的運動數(shù)據(jù),必須經(jīng)過參數(shù)處理,轉(zhuǎn)化為三位模型數(shù)據(jù),才能運用于三維仿真中。

        以小車為例,設(shè)小車軌道實際長為Lrl,模型中小車導(dǎo)軌長為Lml,以導(dǎo)軌最左端為坐標(biāo)原點,設(shè)實際導(dǎo)軌上某坐標(biāo)數(shù)值為Lrc,模型中導(dǎo)軌相應(yīng)的坐標(biāo)值為Lmc,則有

        (1)

        由式(1)可得模型坐標(biāo)值Lmc=Lrl·c。

        這樣可以輕松地用小車的真實坐標(biāo)值,乘以比例值c,得到三位仿真位置坐標(biāo)值。速度、加速度等涉及物理量也可以這樣處理。

        但是角度的處理就不能這樣乘以一個比例值,角度值不需要比例值。實際上是利用相似性原理,將實體大小縮放成模型的大小,而角度是不變的(類比相似三角形)。

        模型的比例值并不一定全都一樣,為增加模型的真實感,以及便于顯示觀察,某些模型比例值會作適當(dāng)調(diào)整。如為便于觀察,錨的比例值Cm會比平臺的大,但從仿真的真實感考慮,錨的深度、下放和上拉的速度,計算時將使用平臺模型的比例值。這一點要特別注意。

        1.4.3 時鐘處理

        對于動畫演進(jìn),實際上是利用程序在間隔時間內(nèi)重繪每個坐標(biāo)點[8],時間間隔是靠定時器中斷產(chǎn)生的,在代碼中可由函數(shù)SetTimer()設(shè)置一個系統(tǒng)時鐘周期Tm(前述時間間隔)。

        接收到的數(shù)據(jù)也有一個時鐘周期Tr(水下數(shù)據(jù)發(fā)送周期),如果Tr<1/24(人眼視覺停留時間),一般取仿真時鐘周期Tm=Tr即可,此時可以保證動畫的連續(xù)性。但是本系統(tǒng)水下有多個控制器和傳感器,它們發(fā)送數(shù)據(jù)的時鐘周期并不統(tǒng)一,取Tm=Trmin,那么對于Tr>Tm的設(shè)備數(shù)據(jù)須進(jìn)行特殊處理。

        當(dāng)設(shè)備Tr>Tm時,設(shè)備的數(shù)據(jù)沒有出現(xiàn)在時刻N·Tm,這時會出現(xiàn)“數(shù)據(jù)真空”問題。那么必須使用一個比較合理的算法,利用已有的數(shù)據(jù),近視地推算出N·Tm時刻的位置數(shù)據(jù)。

        為此,設(shè)計比較可行的算法——中點逼近法。

        在一段時間內(nèi),物體有數(shù)據(jù)傳輸過來,設(shè)從時刻t1開始,其數(shù)據(jù)傳輸時鐘周期為Tr,那么,在時刻t1,t1+Tr,t1+2·Tr…t1+i·Tr…,程序中可以讀到數(shù)據(jù)Mr0,Mr1,Mr2,…,Mri,…。

        將時刻簡化,見圖9,

        圖9 中點逼近法

        現(xiàn)在的問題是,已知讀取到了tr0,tr1,tr2,…,tri-1,tri,時刻的數(shù)據(jù)Mr0,Mr1,Mr2,…,Mri,如何求出tmj時刻的數(shù)據(jù)Mrj。不斷取中點,使用中點不斷地逼近,直到某兩點的中點時刻為tmj,即認(rèn)為該點時刻數(shù)據(jù)為Mrj。

        1)如果tri=tmj,則有Mrj=Mri,算法結(jié)束;否則執(zhí)行2)。

        2)根據(jù)Mri-1,Mri求出Mri+1,tri是[tri-1,tri+1]的中點,取Mri為時間段[tri-1,tri+1]的平均值,設(shè)有

        2·Mri=Mri-1+Mri+1

        (2)

        則有Mri+1=2·Mri-Mri-1。

        再取[tri,tri+1]的中點時刻tM0,近似計算該時刻數(shù)據(jù)M0=(Mri+1+Mri)/2,如果tM0=tmj,則有Mrj=M0,算法結(jié)束。

        3)否則,如果tM0>tmj,利用[tri,tM0]的中點,以及Mri和M0重復(fù)步驟2)(將tM0賦值給tri+1,將M0賦值給Mri+1);

        4)否則,如果tM0

        注意:

        ①傳輸時鐘開始時刻對應(yīng)的第一個程序時鐘為仿真的開始,也就是說程序開始的時刻要早于傳輸;同樣,程序時鐘結(jié)尾時刻要晚于傳輸。

        式中:S——位移或角度;

        Si-1——已經(jīng)接受到的數(shù)據(jù);

        v(vi-1和vi)——速度或角速度。

        算法的可行性說明。

        1)平臺和小車等的運動過程是一個比較緩慢的過程,一般來說,在某一段時間內(nèi)可以近似地看成是線性運動,在這種情況下,用中點逼近比較合理;

        2)程序時鐘周期取各數(shù)據(jù)傳輸?shù)淖钚≈?,每一個周期非常短,那么數(shù)據(jù)變化也非常小,用中點逼近誤差很小。

        2 實驗結(jié)果

        以小車運動為例,選取小車數(shù)據(jù)傳輸周期為Tr=0.037 5 s,程序周期為Tm=0.025 s。小車的運動規(guī)律見圖10。

        圖10 小車運動規(guī)律

        試驗中,網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)經(jīng)過解析和濾波之后的數(shù)據(jù)如下,選取t∈(5,7.348)時間段(加速度開始勻速減小)中部分,以t=5.0 s為開始時刻,獲取到的數(shù)據(jù)只在N·Tr時刻,見表2。在三維仿真時,在時刻N·Tm的仿真數(shù)據(jù)見表3。

        表2 實驗傳輸數(shù)據(jù)

        表3 仿真數(shù)據(jù)

        表3中,實際數(shù)據(jù)是根據(jù)小車運動規(guī)律(圖10所示)算出的小車的理想運動數(shù)據(jù);推算位移是根據(jù)公式(3)算出的三維仿真中小車位移量。

        從結(jié)果可以看出,網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)較為穩(wěn)定,數(shù)據(jù)處理各線程工作協(xié)調(diào),能較好地保證數(shù)據(jù)傳輸和處理的同步。從表3可以看出,“中點逼近”得出的位移量和理想數(shù)據(jù)基本上是一致的,其誤差非常小,結(jié)果非常理想。

        3 結(jié)論

        1)針對控制器在水下串口通信速率不高的特點,采用普通以太網(wǎng)的TCP/IP通信網(wǎng)絡(luò),不僅提高了通信速率,而且大大增強了通信的穩(wěn)定性。

        2)利用半物理三維仿真動畫,能流暢地實時地從水面觀測水下工作狀態(tài)。

        3)使用中點逼近法,能比較理想地解決程序時鐘和數(shù)據(jù)傳輸時鐘不一致而產(chǎn)生的“數(shù)據(jù)真空”問題。

        本系統(tǒng)經(jīng)過了多次船池模擬實驗,實驗證明,數(shù)據(jù)處理和接收穩(wěn)定可靠,三維仿真實時性較高,該研究可以較好地實現(xiàn)顯控系統(tǒng)的要求。但其中也有欠缺,數(shù)據(jù)處理中的線程可以考慮使用線程池技術(shù),參數(shù)處理中的時鐘處理算法原理上比較粗略,這些也是今后的研究內(nèi)容。

        [1] TANENBAUM A S.計算機網(wǎng)絡(luò)[M].潘愛民,譯.北京:清華大學(xué)出版社,2004.

        [2] 汪 翔,袁 輝.Visual C++實踐與提高——網(wǎng)絡(luò)編程篇[M].北京:中國鐵路出版社,2001.

        [3] 戴大蒙.基于非阻塞式Winsock的多線程網(wǎng)絡(luò)通信機制[J].計算機工程,2006,32(6):137-138.

        [4] 郭羽成.三維視景仿真中面向客戶端的網(wǎng)絡(luò)同步模型研究[D].武漢:武漢理工大學(xué),2006.

        [5] 孫 卿.基于OpenGL的衛(wèi)星運行仿真[D].武漢:華中科技大學(xué),2004.

        [6] 葛 翔.基于OpenGL的三維建筑仿真與漫游技術(shù)研究[D].武漢:武漢理工大學(xué),2006.

        [7] 陳 勇.仿生機器人運動形態(tài)的三維動態(tài)仿真[D].長春:吉林大學(xué)大學(xué),2005.

        [8] 劉 升,王行愚,游曉明.基于VC++的OpenGL三維動畫仿真及場景漫游的實現(xiàn)[J].計算機工程與設(shè)計,2006,27(17):3235-3238.

        猜你喜歡
        控系統(tǒng)線程數(shù)據(jù)處理
        認(rèn)知診斷缺失數(shù)據(jù)處理方法的比較:零替換、多重插補與極大似然估計法*
        ILWT-EEMD數(shù)據(jù)處理的ELM滾動軸承故障診斷
        關(guān)于DALI燈控系統(tǒng)的問答精選
        聯(lián)調(diào)聯(lián)試中列控系統(tǒng)兼容性問題探討
        淺談linux多線程協(xié)作
        一種新型列控系統(tǒng)方案探討
        基于希爾伯特- 黃變換的去噪法在外測數(shù)據(jù)處理中的應(yīng)用
        簡析GSM-R在CTCS-3列控系統(tǒng)中的作用和故障判斷處理
        基于POS AV610與PPP的車輛導(dǎo)航數(shù)據(jù)處理
        Linux線程實現(xiàn)技術(shù)研究
        日本亚洲系列中文字幕| 熟妇人妻中文字幕无码老熟妇| 欧洲亚洲第一区久久久| 操B小视频国产| 人妻秘书被社长浓厚接吻| 国产一级二级三级在线观看av| 国产又大又黑又粗免费视频| 国产一卡2卡3卡四卡国色天香 | 亚洲无码视频一区:| 亚洲全国最大的人成网站| 亚洲一区二区三区激情在线观看| 成人欧美一区二区三区在线| 精精国产xxxx视频在线播放| 在线观看视频亚洲| 日韩精品不卡一区二区三区| 干出白浆视频在线观看| 亚洲av无码一区二区三区鸳鸯影院| 亚洲一区二区三区少妇| 国产精品99精品久久免费| 日本aⅴ大伊香蕉精品视频| 无码不卡一区二区三区在线观看| 亚洲乱码中文字幕综合69堂 | 亚洲欧美牲交| 中文字幕乱码免费视频| 成人午夜免费福利| 国产亚洲一区二区毛片| 水蜜桃在线观看一区二区| 偷偷色噜狠狠狠狠的777米奇| 老熟女多次高潮露脸视频| 日韩人妻高清福利视频| 久久中文字幕一区二区| 亚洲 欧美 国产 制服 动漫 | 国产视频精品一区白白色| 经典黄色一区二区三区| 国产成人无码av一区二区在线观看 | 中文字幕日韩精品人妻久久久| 成熟人妻换xxxx| 国产精品久久久久久久久岛| 国产一级黄色录像| 亚洲国产综合久久精品| 人妻精品视频一区二区三区|