APP下载

基于Qt多线程多串口的综合导航模拟系统研究与应用

2014-08-07阮福明朱耀强

天津科技 2014年10期
关键词:罗经模拟系统线程

王 斌,阮福明,朱耀强

(中海油田服务股份有限公司物探事业部 天津300451)

基于Qt多线程多串口的综合导航模拟系统研究与应用

王 斌,阮福明,朱耀强

(中海油田服务股份有限公司物探事业部 天津300451)

提出了一种基于Qt多线程多串口的综合导航模拟系统的数据交互及实现方法,详细论述了Qt多线程技术以及多串口通信,通过数据提取、时间间隔提取、多线程多串口通信、网络通信等 4个步骤实现了综合导航系统的室内模拟,再现了一线作业场景。为保持枪控数据和鸟控数据的同步性,提出了基于网络的同步方法,能较好地满足综合导航系统室内数据模拟、数据交互、再现实际作业以及人员培训等需求,且其跨平台技术使得该模拟系统能支持多平台、国产综合导航系统以及进口导航系统,具有较好的通用性。

Qt 多线程 多串口 综合导航系统 数据模拟 INSP

0 引 言

海上油气勘探离不开导航定位。综合导航系统是海上地震勘探作业中的控制和指挥中心,导航资料对地震数据处理以及后期的钻井定位起着至关重要的作用。由于海洋地震勘探作业流程复杂,行业性较强,涉及到多种软、硬件系统协同工作,软件模块多、功能复杂,对系统稳定性、导航定位精度等方面提出了较高的要求,软件开发难度大。目前我国在海洋石油勘探领域,综合导航系统基本依赖进口,如美国ION公司的Spectra和Orca系统,被广泛应用于海上石油地震勘探作业中。[1]我国在勘探作业新方法、新技术等方面受制于人,国际竞争力不强。

中国海洋石油总公司在20世纪八九十年代就引进了综合导航系统,公司从“十二五”“863”项目“深水高精度地震勘探系统成套化研制”子课题《海上地震勘探拖缆控制与综合导航系统研制》开始进行海上地震勘探综合导航系统研制,在软件开发、导航定位等方面取得了一系列可喜的成果,目前已研制出二维综合导航系统,经几次海试后初步具备作业能力。[2]

在导航系统的研制过程中,由于接入的导航定位设备种类众多,如 DGPS、RGPS、电罗经、测深仪、罗经鸟、水平鸟、枪阵、水速鸟等,有些设备可能接入多个,如 DGPS、电罗经等,设备分布于勘探船或者挂载于水下拖曳电缆,接口方式主要是 RS232。在离岸的导航系统日常调试中,难以做到将各种导航设备接入数据采集箱体,也就难以实时获取各类原始导航定位数据,在对导航数据采集平台(INSP,integrated navigation system platform)的数据采集调试以及导航系统软件与导航数据采集平台的调试中都比较困难和难以验证;传统的调试工具在发送数据格式上、并发性、发送时序等方面不能满足日常调试要求,不能做到有效控制;在人员培训中,也不够直观和真实,作业时不能立即上手;在物探船的设备连接、接线时由于仪器房设备众多、接口各异,线路某段经常做错或做反,数据收不到时不方便查找问题,需要有数据源验证;在作业时出现的问题,仅凭导航记录文件P2、P1文件也无法在室内形象地重现。因此,一套能按照时序发送各种导航定位数据,能模拟实际海上作业的室内导航模拟系统极为迫切。

本文提出了一种基于Qt多线程的多串口通信仿真设计方法,通过数据提取、时间间隔提取、多线程多串口通信、网络通信等4个步骤实现了综合导航系统的室内模拟,再现了一线作业场景。

1 综合导航系统作业流程

1.1 综合导航系统作业方式

海洋地震勘探中,地震勘探船拖曳一条或多条电缆,随着枪阵激发,拖曳电缆采集地震波反射数据,船载定位设备采集导航定位数据。船载定位设备主要有 DPGS、RGPS、电罗经,测深仪等;枪阵定位设备主要有枪阵声学鸟、RGPS等;拖曳电缆定位设备主要有头标、尾标、罗经鸟、声学鸟、深度传感器等;输出数据主要有导航头段、枪控头段等。各设备数据通过综合导航系统数据采集平台发送给导航系统软件。各设备的导航定位原始数据记录在原始导航数据文件中,以 UKOOA P2/94格式存储,将 P2/94格式的原始定位数据文件进行解算,解算后的定位数据以P1/90格式存储。勘探作业中导航系统的定位信号及各系统关系如图1所示。

1.2 综合导航系统数据流程及时间特性

导航定位设备具有各自的时间特性,如 DGPS数据一般 1,s一次,枪控数据一炮一次,电罗经数据约 0.2~0.4,s一次,因此导航模拟系统发送数据时要按照真实作业时序发送。在抽取 P2数据时,不但抽取了各原始定位数据,还抽取了时间间隔数据,发送时,读取间隔数据文件发送。如丢炮时,此炮数据标记为-1(见表1)。

图1 地震勘探船定位信号及各系统关系图Fig.1 Positioning signals of a seismic survey vessel and the relations of various systems

表1 导航定位数据的时间特性Tab.1 Time responses of navigation positioning data

2 Qt及Qt多线程技术

2.1 Qt技术

Qt工具包是一个跨平台的C++类库,并且是使用“一次编写,随处编译”的方式用于构建多平台图形用户界程序的一套工具。由于 Qt是一个跨平台的工具箱,可方便软件应用于绝大多数操作系统。目前,Qt支持的操作系统包括[3-6]:MS Windows各个系列版本;Macintosh-Max OS X;Unix/X11-Linux,IBM AIX,HP-UX,Sun Solaris,SGI IRIX 等 UNIX 或类UNIX系统。

另外,在地震数据处理中,剖面图、曲线、三维图形等都是常见的形态,而 Qt的强大图形处理机制使其能广泛应用于油气勘探领域。

2.2 Qt多线程技术

Qt通过 3种形式提供了对线程的支持。它们分别是:平台无关的线程类;线程安全的事件投递;跨线程的信号槽连接。这使得开发轻巧的多线程 Qt程序更为容易,并能充分利用多处理器机器的优势。多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应。

2.3 Qt线程可重入性及线程与界面的响应

在 Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序。假如一个类的任何函数在此类的多个不同实例上可以被多个线程同时调用,那么这个类被称为是“可重入”的。假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的。大多数 C++类天生就是可重入的,因为它们仅仅引用成员数据[7]它的大多数非 GUI子类,如 QTimer、QTcpSocket、QUdpSocket、QProcess都是可重入的,因而这些类可以同时用于多线程。但GUI类,特别是QWidget与它的所有子类都是不可重入的,它们仅用于主线程。在实际应用中,不能在非主线程中调用GUI类,常用方法是将耗时的操作放在独立的线程中,将输出结果放到主线程中显示,可以通过跨线程的信号和槽实现。

3 基于 Qt多线程的多串口综合导航模拟系统实现

3.1 串口扩展

由于一般计算机很少有3个以上的串口,而发送至导航系统的导航数据大约需要 10多个端口,因此需要扩展,通常台式机的扩展加串口卡实现较为方便(见图 2)。

图2 多串口卡Fig.2 A multi-serial port card

通常笔记本不适合装多串口卡,可以通过安装USB转多串口线来实现,一般 USB可以转出 4串口,可以用两条 USB转串口线实现 8串口,再加上本地计算机还有其他 USB口,所以可以实现9个以上的串口(见图3、4)。

图3 多串口显示效果Fig.3 Display effect of Multi-serial ports

图4 USB分线扩展器Fig.4 USB junction box

3.2 实现流程

实现步骤:数据抽取,从 P2文件抽取定位数据和时间间隔数据;设置通信参数,设置波特率、数据位、奇偶校验位、停止位、数据流控制等;选择串口,打开串口,如 windows下为“com1”,linux下为“ttyS0”;选择抽取的导航定位文件和时间间隔文件;将数据和时间间隔数据通过 Qt多线程多串口数据发送给INSP(综合导航系统平台);枪数据、鸟数据的时间同步设置及响应、数据发送;关闭串口,关闭网络,回放结束(见图5)。

图5 数据模拟过程流程图Fig.5 Flow chart of the data simulation process

3.3 编程实现实现方法

自定义了通信基类 QextSerialBase,继承了 QIO Device。QIODevice类是输入/输出设备的基类,像QFile、QBuffer和QSocket这些类继承了 QIODevice,并且适当地实现了像write()这样的虚函数。

自定义类 Win_QextSerialPort继承自 QextSerial Base,该类定义了设置波特率、数据位、停止位、校验位、停止位等方法。其构造函数以端口名为参数,并提供了事件驱动等查询方式。端口设置结构体:

另外,还定义了信号 readyRead();它可以查看串口是否有新的数据传来。定义了发送数据的write()方法,基于 Qt实现,用于将数据通过串口发送出去,其参数为QByteArray类型。

值得注意的是,当串口数大约 9时,windows下打开串口会出错,常用的串口调试助手等工具也经常有这样的问题,解决方法是前面要加上前缀[8]"\\.\",例如,枪控系统的串口名为 COM24,加上前缀后为\.\COM24。语句:

3.4 多线程多串口数据发送实现

主界面发送按钮的槽函数响应时,启动多线程:

线程的入口函数run函数建立轮询,并调用发送各数据的函数:

在发送 DGPS、RGPS等数据时,按照上述串口发送方法,打开串口、设置通信参数,读取抽取的数据,按条读取发送,并在每条数据后加 ,相应代码:

//读取数据去掉 然后加上 ,其中测深仪的数据后缀是 。

为保证多线程数据发送的完整性,每个发送数据端要加锁。

ComDGPS1->write(senddata.toAscii());//发送串口内容,按行发送,且有回车换行符;

其中 write()为 Qt的 QIODevice的成员函数。qint64 QIODevice::write(const QByteArray &byteArray),实现了串口数据的发送,参数为QbyteArray类型。

3.5 实际应用与软件运行效果

通过两个USB转232分线器以及本地USB口实现多个串口,然后通过RT45转232转换头将数据以RJ45形式接入综合导航采集平台(见图6)。

经测试,模拟系统运行稳定,数据解析、发送时序正确,导航数据能收到模拟系统发送的各导航定位数据,满足调试要求。

图6 通过RJ45转232接头接入串口数据Fig.6 232 joint serial data via RJ45

4 结 语

本文利用Qt多线程技术完成了多串口的导航数据模拟与发送,再现了作业场景,通过网络通信获取预测炮号,使得炮数据和鸟数据保持了正确的作业时序。本系统满足室内系统联调、测试,以及人员培训等需求,且支持国产及进口导航系统的调试。其跨平台特征使得系统能运行于 windows和 linux等常见平台,部署快捷方便,大大降低了传统 windows下C++多线程以及串口通信的实现复杂性。

继续需要改进的几个方面有:时序触发的精度有待进一步提高,可以通过硬件触发板来实现,通过配置触发时序,正确返回 TB,更接近实际作业效果;另外,鸟数据的发送目前是串口,三维作业的罗经鸟数据、声学鸟数据等都是基于网络传输,下一步需将声学鸟数据和罗经鸟数据按照网络数据重新抽取、解析、模拟发送,使得三维综合导航作业得以更新。

[1]杨世学,刘宇明. SPECTRA综合导航系统中海洋勘探中的应用[J]. 海洋测绘,2002,22(6):22-25.

[2]朱伟林. 中国近海找油的勘探战略[J]. 中国海上油气(地质),1997,11(6):407-414.

[3]蔡志明,李立夏. 精通 Qt4编程[M]. 北京:电子工业出版社,2008.

[4]万长胜. 用 Qt进行面向对象软件的设计与开发[J].核电子学与探测技术,2004(3):311-313.

[5]李全虎. 交互界面开发工具——Qt[J]. 中国科技信息,2005(5):33.

[6]王爱文. Linux平台下基于Qt的电子海图的研究与实现[D]. 黑龙江:哈尔滨工程大学,2004.

[7]胡双炎. 一种多串口多线程数据采集方法的设计与应用[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

国家863计划资助项目(2012AA09A211)。

2014-09-10

猜你喜欢

罗经模拟系统线程
基于VR技术的变电站三维场景设计模拟系统研究
基于C#线程实验探究
磁罗经北极高纬海区航向误差分析与补偿
船上磁罗经自差表相关要求
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
基于STM32单片机的微电网模拟系统设计
随机游走对罗经方位对准的精度影响分析
粒子群算法优化的捷联罗经初始对准方法
基于ARM和Zigbee 的变压器试验培训模拟系统