王 斌,阮福明,朱耀強(qiáng)
(中海油田服務(wù)股份有限公司物探事業(yè)部 天津300451)
基于Qt多線程多串口的綜合導(dǎo)航模擬系統(tǒng)研究與應(yīng)用
王 斌,阮福明,朱耀強(qiáng)
(中海油田服務(wù)股份有限公司物探事業(yè)部 天津300451)
提出了一種基于Qt多線程多串口的綜合導(dǎo)航模擬系統(tǒng)的數(shù)據(jù)交互及實(shí)現(xiàn)方法,詳細(xì)論述了Qt多線程技術(shù)以及多串口通信,通過(guò)數(shù)據(jù)提取、時(shí)間間隔提取、多線程多串口通信、網(wǎng)絡(luò)通信等 4個(gè)步驟實(shí)現(xiàn)了綜合導(dǎo)航系統(tǒng)的室內(nèi)模擬,再現(xiàn)了一線作業(yè)場(chǎng)景。為保持槍控?cái)?shù)據(jù)和鳥控?cái)?shù)據(jù)的同步性,提出了基于網(wǎng)絡(luò)的同步方法,能較好地滿足綜合導(dǎo)航系統(tǒng)室內(nèi)數(shù)據(jù)模擬、數(shù)據(jù)交互、再現(xiàn)實(shí)際作業(yè)以及人員培訓(xùn)等需求,且其跨平臺(tái)技術(shù)使得該模擬系統(tǒng)能支持多平臺(tái)、國(guó)產(chǎn)綜合導(dǎo)航系統(tǒng)以及進(jìn)口導(dǎo)航系統(tǒng),具有較好的通用性。
Qt 多線程 多串口 綜合導(dǎo)航系統(tǒng) 數(shù)據(jù)模擬 INSP
海上油氣勘探離不開導(dǎo)航定位。綜合導(dǎo)航系統(tǒng)是海上地震勘探作業(yè)中的控制和指揮中心,導(dǎo)航資料對(duì)地震數(shù)據(jù)處理以及后期的鉆井定位起著至關(guān)重要的作用。由于海洋地震勘探作業(yè)流程復(fù)雜,行業(yè)性較強(qiáng),涉及到多種軟、硬件系統(tǒng)協(xié)同工作,軟件模塊多、功能復(fù)雜,對(duì)系統(tǒng)穩(wěn)定性、導(dǎo)航定位精度等方面提出了較高的要求,軟件開發(fā)難度大。目前我國(guó)在海洋石油勘探領(lǐng)域,綜合導(dǎo)航系統(tǒng)基本依賴進(jìn)口,如美國(guó)ION公司的Spectra和Orca系統(tǒng),被廣泛應(yīng)用于海上石油地震勘探作業(yè)中。[1]我國(guó)在勘探作業(yè)新方法、新技術(shù)等方面受制于人,國(guó)際競(jìng)爭(zhēng)力不強(qiáng)。
中國(guó)海洋石油總公司在20世紀(jì)八九十年代就引進(jìn)了綜合導(dǎo)航系統(tǒng),公司從“十二五”“863”項(xiàng)目“深水高精度地震勘探系統(tǒng)成套化研制”子課題《海上地震勘探拖纜控制與綜合導(dǎo)航系統(tǒng)研制》開始進(jìn)行海上地震勘探綜合導(dǎo)航系統(tǒng)研制,在軟件開發(fā)、導(dǎo)航定位等方面取得了一系列可喜的成果,目前已研制出二維綜合導(dǎo)航系統(tǒng),經(jīng)幾次海試后初步具備作業(yè)能力。[2]
在導(dǎo)航系統(tǒng)的研制過(guò)程中,由于接入的導(dǎo)航定位設(shè)備種類眾多,如 DGPS、RGPS、電羅經(jīng)、測(cè)深儀、羅經(jīng)鳥、水平鳥、槍陣、水速鳥等,有些設(shè)備可能接入多個(gè),如 DGPS、電羅經(jīng)等,設(shè)備分布于勘探船或者掛載于水下拖曳電纜,接口方式主要是 RS232。在離岸的導(dǎo)航系統(tǒng)日常調(diào)試中,難以做到將各種導(dǎo)航設(shè)備接入數(shù)據(jù)采集箱體,也就難以實(shí)時(shí)獲取各類原始導(dǎo)航定位數(shù)據(jù),在對(duì)導(dǎo)航數(shù)據(jù)采集平臺(tái)(INSP,integrated navigation system platform)的數(shù)據(jù)采集調(diào)試以及導(dǎo)航系統(tǒng)軟件與導(dǎo)航數(shù)據(jù)采集平臺(tái)的調(diào)試中都比較困難和難以驗(yàn)證;傳統(tǒng)的調(diào)試工具在發(fā)送數(shù)據(jù)格式上、并發(fā)性、發(fā)送時(shí)序等方面不能滿足日常調(diào)試要求,不能做到有效控制;在人員培訓(xùn)中,也不夠直觀和真實(shí),作業(yè)時(shí)不能立即上手;在物探船的設(shè)備連接、接線時(shí)由于儀器房設(shè)備眾多、接口各異,線路某段經(jīng)常做錯(cuò)或做反,數(shù)據(jù)收不到時(shí)不方便查找問題,需要有數(shù)據(jù)源驗(yàn)證;在作業(yè)時(shí)出現(xiàn)的問題,僅憑導(dǎo)航記錄文件P2、P1文件也無(wú)法在室內(nèi)形象地重現(xiàn)。因此,一套能按照時(shí)序發(fā)送各種導(dǎo)航定位數(shù)據(jù),能模擬實(shí)際海上作業(yè)的室內(nèi)導(dǎo)航模擬系統(tǒng)極為迫切。
本文提出了一種基于Qt多線程的多串口通信仿真設(shè)計(jì)方法,通過(guò)數(shù)據(jù)提取、時(shí)間間隔提取、多線程多串口通信、網(wǎng)絡(luò)通信等4個(gè)步驟實(shí)現(xiàn)了綜合導(dǎo)航系統(tǒng)的室內(nèi)模擬,再現(xiàn)了一線作業(yè)場(chǎng)景。
1.1 綜合導(dǎo)航系統(tǒng)作業(yè)方式
海洋地震勘探中,地震勘探船拖曳一條或多條電纜,隨著槍陣激發(fā),拖曳電纜采集地震波反射數(shù)據(jù),船載定位設(shè)備采集導(dǎo)航定位數(shù)據(jù)。船載定位設(shè)備主要有 DPGS、RGPS、電羅經(jīng),測(cè)深儀等;槍陣定位設(shè)備主要有槍陣聲學(xué)鳥、RGPS等;拖曳電纜定位設(shè)備主要有頭標(biāo)、尾標(biāo)、羅經(jīng)鳥、聲學(xué)鳥、深度傳感器等;輸出數(shù)據(jù)主要有導(dǎo)航頭段、槍控頭段等。各設(shè)備數(shù)據(jù)通過(guò)綜合導(dǎo)航系統(tǒng)數(shù)據(jù)采集平臺(tái)發(fā)送給導(dǎo)航系統(tǒng)軟件。各設(shè)備的導(dǎo)航定位原始數(shù)據(jù)記錄在原始導(dǎo)航數(shù)據(jù)文件中,以 UKOOA P2/94格式存儲(chǔ),將 P2/94格式的原始定位數(shù)據(jù)文件進(jìn)行解算,解算后的定位數(shù)據(jù)以P1/90格式存儲(chǔ)。勘探作業(yè)中導(dǎo)航系統(tǒng)的定位信號(hào)及各系統(tǒng)關(guān)系如圖1所示。
1.2 綜合導(dǎo)航系統(tǒng)數(shù)據(jù)流程及時(shí)間特性
導(dǎo)航定位設(shè)備具有各自的時(shí)間特性,如 DGPS數(shù)據(jù)一般 1,s一次,槍控?cái)?shù)據(jù)一炮一次,電羅經(jīng)數(shù)據(jù)約 0.2~0.4,s一次,因此導(dǎo)航模擬系統(tǒng)發(fā)送數(shù)據(jù)時(shí)要按照真實(shí)作業(yè)時(shí)序發(fā)送。在抽取 P2數(shù)據(jù)時(shí),不但抽取了各原始定位數(shù)據(jù),還抽取了時(shí)間間隔數(shù)據(jù),發(fā)送時(shí),讀取間隔數(shù)據(jù)文件發(fā)送。如丟炮時(shí),此炮數(shù)據(jù)標(biāo)記為-1(見表1)。
圖1 地震勘探船定位信號(hào)及各系統(tǒng)關(guān)系圖Fig.1 Positioning signals of a seismic survey vessel and the relations of various systems
表1 導(dǎo)航定位數(shù)據(jù)的時(shí)間特性Tab.1 Time responses of navigation positioning data
2.1 Qt技術(shù)
Qt工具包是一個(gè)跨平臺(tái)的C++類庫(kù),并且是使用“一次編寫,隨處編譯”的方式用于構(gòu)建多平臺(tái)圖形用戶界程序的一套工具。由于 Qt是一個(gè)跨平臺(tái)的工具箱,可方便軟件應(yīng)用于絕大多數(shù)操作系統(tǒng)。目前,Qt支持的操作系統(tǒng)包括[3-6]:MS Windows各個(gè)系列版本;Macintosh-Max OS X;Unix/X11-Linux,IBM AIX,HP-UX,Sun Solaris,SGI IRIX 等 UNIX 或類UNIX系統(tǒng)。
另外,在地震數(shù)據(jù)處理中,剖面圖、曲線、三維圖形等都是常見的形態(tài),而 Qt的強(qiáng)大圖形處理機(jī)制使其能廣泛應(yīng)用于油氣勘探領(lǐng)域。
2.2 Qt多線程技術(shù)
Qt通過(guò) 3種形式提供了對(duì)線程的支持。它們分別是:平臺(tái)無(wú)關(guān)的線程類;線程安全的事件投遞;跨線程的信號(hào)槽連接。這使得開發(fā)輕巧的多線程 Qt程序更為容易,并能充分利用多處理器機(jī)器的優(yōu)勢(shì)。多線程編程也是一個(gè)有用的模式,它用于解決執(zhí)行較長(zhǎng)時(shí)間的操作而不至于用戶界面失去響應(yīng)。
2.3 Qt線程可重入性及線程與界面的響應(yīng)
在 Qt文檔中,術(shù)語(yǔ)“可重入”與“線程安全”被用來(lái)說(shuō)明一個(gè)函數(shù)如何用于多線程程序。假如一個(gè)類的任何函數(shù)在此類的多個(gè)不同實(shí)例上可以被多個(gè)線程同時(shí)調(diào)用,那么這個(gè)類被稱為是“可重入”的。假如不同的線程作用在同一個(gè)實(shí)例上仍可以正常工作,那么稱之為“線程安全”的。大多數(shù) C++類天生就是可重入的,因?yàn)樗鼈儍H僅引用成員數(shù)據(jù)[7]它的大多數(shù)非 GUI子類,如 QTimer、QTcpSocket、QUdpSocket、QProcess都是可重入的,因而這些類可以同時(shí)用于多線程。但GUI類,特別是QWidget與它的所有子類都是不可重入的,它們僅用于主線程。在實(shí)際應(yīng)用中,不能在非主線程中調(diào)用GUI類,常用方法是將耗時(shí)的操作放在獨(dú)立的線程中,將輸出結(jié)果放到主線程中顯示,可以通過(guò)跨線程的信號(hào)和槽實(shí)現(xiàn)。
3.1 串口擴(kuò)展
由于一般計(jì)算機(jī)很少有3個(gè)以上的串口,而發(fā)送至導(dǎo)航系統(tǒng)的導(dǎo)航數(shù)據(jù)大約需要 10多個(gè)端口,因此需要擴(kuò)展,通常臺(tái)式機(jī)的擴(kuò)展加串口卡實(shí)現(xiàn)較為方便(見圖 2)。
圖2 多串口卡Fig.2 A multi-serial port card
通常筆記本不適合裝多串口卡,可以通過(guò)安裝USB轉(zhuǎn)多串口線來(lái)實(shí)現(xiàn),一般 USB可以轉(zhuǎn)出 4串口,可以用兩條 USB轉(zhuǎn)串口線實(shí)現(xiàn) 8串口,再加上本地計(jì)算機(jī)還有其他 USB口,所以可以實(shí)現(xiàn)9個(gè)以上的串口(見圖3、4)。
圖3 多串口顯示效果Fig.3 Display effect of Multi-serial ports
圖4 USB分線擴(kuò)展器Fig.4 USB junction box
3.2 實(shí)現(xiàn)流程
實(shí)現(xiàn)步驟:數(shù)據(jù)抽取,從 P2文件抽取定位數(shù)據(jù)和時(shí)間間隔數(shù)據(jù);設(shè)置通信參數(shù),設(shè)置波特率、數(shù)據(jù)位、奇偶校驗(yàn)位、停止位、數(shù)據(jù)流控制等;選擇串口,打開串口,如 windows下為“com1”,linux下為“ttyS0”;選擇抽取的導(dǎo)航定位文件和時(shí)間間隔文件;將數(shù)據(jù)和時(shí)間間隔數(shù)據(jù)通過(guò) Qt多線程多串口數(shù)據(jù)發(fā)送給INSP(綜合導(dǎo)航系統(tǒng)平臺(tái));槍數(shù)據(jù)、鳥數(shù)據(jù)的時(shí)間同步設(shè)置及響應(yīng)、數(shù)據(jù)發(fā)送;關(guān)閉串口,關(guān)閉網(wǎng)絡(luò),回放結(jié)束(見圖5)。
圖5 數(shù)據(jù)模擬過(guò)程流程圖Fig.5 Flow chart of the data simulation process
3.3 編程實(shí)現(xiàn)實(shí)現(xiàn)方法
自定義了通信基類 QextSerialBase,繼承了 QIO Device。QIODevice類是輸入/輸出設(shè)備的基類,像QFile、QBuffer和QSocket這些類繼承了 QIODevice,并且適當(dāng)?shù)貙?shí)現(xiàn)了像write()這樣的虛函數(shù)。
自定義類 Win_QextSerialPort繼承自 QextSerial Base,該類定義了設(shè)置波特率、數(shù)據(jù)位、停止位、校驗(yàn)位、停止位等方法。其構(gòu)造函數(shù)以端口名為參數(shù),并提供了事件驅(qū)動(dòng)等查詢方式。端口設(shè)置結(jié)構(gòu)體:
另外,還定義了信號(hào) readyRead();它可以查看串口是否有新的數(shù)據(jù)傳來(lái)。定義了發(fā)送數(shù)據(jù)的write()方法,基于 Qt實(shí)現(xiàn),用于將數(shù)據(jù)通過(guò)串口發(fā)送出去,其參數(shù)為QByteArray類型。
值得注意的是,當(dāng)串口數(shù)大約 9時(shí),windows下打開串口會(huì)出錯(cuò),常用的串口調(diào)試助手等工具也經(jīng)常有這樣的問題,解決方法是前面要加上前綴[8]"\\.\",例如,槍控系統(tǒng)的串口名為 COM24,加上前綴后為\.\COM24。語(yǔ)句:
3.4 多線程多串口數(shù)據(jù)發(fā)送實(shí)現(xiàn)
主界面發(fā)送按鈕的槽函數(shù)響應(yīng)時(shí),啟動(dòng)多線程:
線程的入口函數(shù)run函數(shù)建立輪詢,并調(diào)用發(fā)送各數(shù)據(jù)的函數(shù):
在發(fā)送 DGPS、RGPS等數(shù)據(jù)時(shí),按照上述串口發(fā)送方法,打開串口、設(shè)置通信參數(shù),讀取抽取的數(shù)據(jù),按條讀取發(fā)送,并在每條數(shù)據(jù)后加 ,相應(yīng)代碼:
//讀取數(shù)據(jù)去掉 然后加上 ,其中測(cè)深儀的數(shù)據(jù)后綴是 。
為保證多線程數(shù)據(jù)發(fā)送的完整性,每個(gè)發(fā)送數(shù)據(jù)端要加鎖。
ComDGPS1->write(senddata.toAscii());//發(fā)送串口內(nèi)容,按行發(fā)送,且有回車換行符;
其中 write()為 Qt的 QIODevice的成員函數(shù)。qint64 QIODevice::write(const QByteArray &byteArray),實(shí)現(xiàn)了串口數(shù)據(jù)的發(fā)送,參數(shù)為QbyteArray類型。
3.5 實(shí)際應(yīng)用與軟件運(yùn)行效果
通過(guò)兩個(gè)USB轉(zhuǎn)232分線器以及本地USB口實(shí)現(xiàn)多個(gè)串口,然后通過(guò)RT45轉(zhuǎn)232轉(zhuǎn)換頭將數(shù)據(jù)以RJ45形式接入綜合導(dǎo)航采集平臺(tái)(見圖6)。
經(jīng)測(cè)試,模擬系統(tǒng)運(yùn)行穩(wěn)定,數(shù)據(jù)解析、發(fā)送時(shí)序正確,導(dǎo)航數(shù)據(jù)能收到模擬系統(tǒng)發(fā)送的各導(dǎo)航定位數(shù)據(jù),滿足調(diào)試要求。
圖6 通過(guò)RJ45轉(zhuǎn)232接頭接入串口數(shù)據(jù)Fig.6 232 joint serial data via RJ45
本文利用Qt多線程技術(shù)完成了多串口的導(dǎo)航數(shù)據(jù)模擬與發(fā)送,再現(xiàn)了作業(yè)場(chǎng)景,通過(guò)網(wǎng)絡(luò)通信獲取預(yù)測(cè)炮號(hào),使得炮數(shù)據(jù)和鳥數(shù)據(jù)保持了正確的作業(yè)時(shí)序。本系統(tǒng)滿足室內(nèi)系統(tǒng)聯(lián)調(diào)、測(cè)試,以及人員培訓(xùn)等需求,且支持國(guó)產(chǎn)及進(jìn)口導(dǎo)航系統(tǒng)的調(diào)試。其跨平臺(tái)特征使得系統(tǒng)能運(yùn)行于 windows和 linux等常見平臺(tái),部署快捷方便,大大降低了傳統(tǒng) windows下C++多線程以及串口通信的實(shí)現(xiàn)復(fù)雜性。
繼續(xù)需要改進(jìn)的幾個(gè)方面有:時(shí)序觸發(fā)的精度有待進(jìn)一步提高,可以通過(guò)硬件觸發(fā)板來(lái)實(shí)現(xiàn),通過(guò)配置觸發(fā)時(shí)序,正確返回 TB,更接近實(shí)際作業(yè)效果;另外,鳥數(shù)據(jù)的發(fā)送目前是串口,三維作業(yè)的羅經(jīng)鳥數(shù)據(jù)、聲學(xué)鳥數(shù)據(jù)等都是基于網(wǎng)絡(luò)傳輸,下一步需將聲學(xué)鳥數(shù)據(jù)和羅經(jīng)鳥數(shù)據(jù)按照網(wǎng)絡(luò)數(shù)據(jù)重新抽取、解析、模擬發(fā)送,使得三維綜合導(dǎo)航作業(yè)得以更新。
[1]楊世學(xué),劉宇明. SPECTRA綜合導(dǎo)航系統(tǒng)中海洋勘探中的應(yīng)用[J]. 海洋測(cè)繪,2002,22(6):22-25.
[2]朱偉林. 中國(guó)近海找油的勘探戰(zhàn)略[J]. 中國(guó)海上油氣(地質(zhì)),1997,11(6):407-414.
[3]蔡志明,李立夏. 精通 Qt4編程[M]. 北京:電子工業(yè)出版社,2008.
[4]萬(wàn)長(zhǎng)勝. 用 Qt進(jìn)行面向?qū)ο筌浖脑O(shè)計(jì)與開發(fā)[J].核電子學(xué)與探測(cè)技術(shù),2004(3):311-313.
[5]李全虎. 交互界面開發(fā)工具——Qt[J]. 中國(guó)科技信息,2005(5):33.
[6]王愛文. Linux平臺(tái)下基于Qt的電子海圖的研究與實(shí)現(xiàn)[D]. 黑龍江:哈爾濱工程大學(xué),2004.
[7]胡雙炎. 一種多串口多線程數(shù)據(jù)采集方法的設(shè)計(jì)與應(yīng)用[J]. 職教與經(jīng)濟(jì)研究,2011(2):54-58.
Research and Application of an Integrated Navigation System based on Qt Multi-thread and Multi-serial Technologies
WANG Bin,RUAN Fuming,ZHU Yaoqiang
(Geophysical Technology Lab,R&D Centre,China Oilfield Services Limited,Tianjin 300451,China)
This paper proposed a method of data intercommunication for an Integrated Navigation System which is based on multi-thread and multi-serial of Qt,discussed the Qt multi-threading technology and the multi-serial communication and achieved a laboratory simulation of the integrated navigation system through data extraction,interval time extraction,multi-thread and multi-serial communication and network communication. Practical applications showed that the method was effective in the multi-process communication and data intercommunication of the system.The cross-platform technology allowed the simulation system to support the multi-platform,and support the domestic and import navigation system and its versatility was good.
Qt;multi-thread;multi-serial;integrated navigation system;data simulation;INSP
TP319
A
1006-8945(2014)10-0066-04
國(guó)家863計(jì)劃資助項(xiàng)目(2012AA09A211)。
2014-09-10