侯 奔
(长沙矿冶研究院有限责任公司深海矿产资源开发利用研究所,湖南 长沙 410012)
基于差分GPS定位的深海采矿车运动轨迹监控软件开发*
侯 奔
(长沙矿冶研究院有限责任公司深海矿产资源开发利用研究所,湖南 长沙410012)
深海采矿车的行进轨迹对于采集效率非常重要,而现有的商业组态软件难以满足对采矿车轨迹监控的要求。针对这种现状,提出以VisualC++软件为平台、基于差分GPS定位的深海采矿车运动轨迹监控软件。根据需求分析,设计了实时通信、数据处理、图形显示和数据库四个软件模块。根据实验结果和保存的数据,对差分GPS定位的精度进行了分析。运行结果表明,该软件实现了设计目标且具有很强的适应性。
差分GPS;轨迹监控;OPC;ADO
深海采矿车是一种履带式海底作业车辆,一般采用车体自行走方式采矿。车体上部用电缆和输送管道与海面上的船体相连接,船体为车体供电产生动力,因此车体作业的区域和船体之间有相应的约束关系。为了保证采集效率和采集系统的安全运行,深海采矿车的采集作业必须在规定的海域进行。因此,务必对采矿车的运动轨迹进行实时监控,并随时做相应调整。同时,运动轨迹监控软件对于深入研究采矿车本身的运动和控制模型提供了理论和实验依据,对于后续的采矿车按指定路径运行的自动控制算法的研究同样具有指导意义。
监控系统由GPS接收机、Opto22控制器和PC组成,如图1所示。
图1 差分GPS定位系统整体组成
本研究所用的海洋采矿试验场地为长40 m,宽10 m,深5 m的水池,普通的GSP定位误差为10 m以内,显然不符合定位精度要求。本文采用差分定位的方式获取更高的精度,由两台GPS组成差分定位系统,一台基站和一台移动站。差分信号由基站输出到移动站,移动站根据差分信号进行定位修正,使定位精度达到厘米级。使用时基站固定不动,移动站安装于运动体上。
Opto22控制器装在车体中,用于采集车体各种传感器的模拟信号和数字信号,同时接收GPS移动站的数据输出。
PC是运动轨迹监控软件的载体,与Opto22控制器处于同一局域网络中,对Opto22的相关变量进行处理。监控软件对车体的运动轨迹进行实时的图形显示、计算车体的速度等参数,并对所有运动参数进行保存,以便日后分析。
运动轨迹监控软件与Opto22控制器实时通信,接收其中需要进行显示和进一步处理的变量。对从控制器中获取的变量进行分析计算,将车体的平面直角坐标运动轨迹以图形的方式实时刷新显示;对重要数据进行保存,以供理论分析所用。综上所述,监控软件由实时通信、数据处理、图形显示和数据库四个模块组成。
图2 实时通信模块工作流程
本模块采用OPC接口的方式进行设计。OPC是基于微软的COM技术实现,被众多PLC厂家支持的一种通用通信方式。其分为Server和Client端,Server端供应数据,Client端则使用数据。在本系统中,Opto22控制器就是OPC的Server端,而监控软件就是Client端[1-5]。实时通信模块的工作流程如图2所示。
实时通信模块的关键接口设计如下:
(1) 初始化一个服务器实例
IOPCServer
*InstantiateServer(wchar_t ServerName[]){
HRESULThr;
CLSIDclsid;
IOPCServer *opcServer;
hr = CLSIDFromProgID(ServerName,&clsid);
//获取CLSID结构
……
hr = CoCreateInstance(clsid,
NULL,CLSCTX_LOCAL_SERVER,IID_IOPCServer,(void **)&opcServer);
//返回服务器实例
……
}
本监控软件的服务端是Opto22控制器,因此ServerName这个参数填写“Opto22.OpcServer.2”,调用后返回一个IOPCServer类型的指针,随后针对数据组的操作都在这个指针上进行。
(2) 添加一个数据组
int AddTheGroup(IOPCServer* pIOPCServer,
IOPCItemMgt* &pIOPCItemMgt,wchar_t
*pGrpName,OPCHANDLE& hServerGroup){
……
HRESULThr =
pIOPCServer->AddGroup(……)
//添加数据组
……
}
pIOPCServer参数填入初始化服务器实例得到的IOPCServer指针参数,pIOPCItemMgt是一个返回的指向数据组的指针参数,针对数据组的操作都针对这个指针进行。pGrpName可以传入任何名字,用来表示这个组。
(3)添加数据项
int AddTheItem(IOPCItemMgt* pIOPCItemMgt,
int numItems,OPCITEMDEF *opcItems,
OPCHANDLE *hServerItems){
OPCITEMRESULT*pAddResult=NULL;
HRESULT*pErrors = NULL;
HRESULThr =
pIOPCItemMgt->AddItems(numItems,
opcItems,&pAddResult,&pErrors);
//添加数据项
……
}
pIOPCItemMgt是添加数据组接口得到的指针,opcItems是实际需要添加到组中的数据项,numItems是数据项的个数。
(4)读取数据接口
int ReadItems(IUnknown* pGroupIUnknown,
int num,OPCItems *pOPCItems)
pGroupIUnknown是添加数据组接口得到的指针,pOPCItems指向的数组用来保存获取的数据,num是数组长度。
(5)写入数据接口
int WriteItem(IUnknown* pGroupIUnknown,
OPCHANDLEhServerItem,VARIANT& varValue)
pGroupIUnknown是添加数据组接口得到的指针,hServerItem是添加数据项返回的句柄,varValue用来容纳需要写入Opto22控制器的具体数据。
本模块从实时通信模块中获取的数据分为显示类和计算类两种数据,显示类只需在软件上简单显示车体各类传感器信号、各类开关量检测信号等信息;计算类则需进一步处理如车体的经度、纬度、时间数据,并从这些数据中算出车体当前相对于GPS基站的平面坐标、车体的运动速度等参数。
移动站的数据输出格式为GPGGA语句,格式如下:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx
其中几个重要字段含义如表1所示。
表1 GPGGA语句各字段含义
从移动站GPS数据中得到的经纬度是WGS-84坐标,属于大地坐标系。在实际的定位应用中,通常需要将WGS-84坐标转换为高斯平面直角坐标系统。高斯坐标适合于大区域的展开,但是运算复杂;而采矿车通常只在较小范围内运动,运动的区域可以近似为一个平面,因此宜采用一种较简单的算法。本文定义GPS基站所处的位置作为直角坐标系的原点,X轴正方向定义沿纬度线圈向东,Y轴正方向定义经度线圈向北。则移动站所处位置相对于基站的平面坐标(X,Y)计算方法[6-7]如式(1)~式(6)所示。
(1)
(2)
(3)
(4)
(5)
Y=Xo×Log
(6)
式中,a为地球椭球长半轴;b为地球椭球短半轴;Lato为原点的纬度;Xo、Yo为原点的直角坐标;xA、yA为移动站沿纬线与过原点之经线交点的直角坐标;Log为过原点的纬线圈与移动站沿经线与之交点的经度差。
车体的运动速度计算如式(7)所示:
(7)
其中X1、X2、Y1、Y2为移动站相邻两点的X,Y直角坐标。
本模块计算直角坐标的接口设计如下:
double calc_xy_log(double log1,double lat1,double
log2,double lat2,double *x,double *y){
基站直角坐标计算
移动站直角坐标计算
*x=移动站X坐标
*y=移动站Y坐标
}
其中,log1为GPS基站的经度;lat1为GPS基站的纬度;log2为GPS移动站的经度;lat2为GPS移动站的纬度;x为计算得出的移动站X坐标;y为计算得出的移动站Y坐标。
在计算处理模块得出车体的(X,Y)坐标后,需要以图形的形式进行实时显示,本模块主要的技术难点在于以下几点:需要高速、实时显示,同时要避免图形的闪烁;绘图效率要高,避免影响其他模块工作;需要大数据量的保存,确保实验中的每个轨迹点都有显示。
根据以上要求,本模块采用基于继承的方式绘图。原理是从CStatic类继承出一个自定义的图像类,在该类中进行数据的保存和绘制[8-9]。通过双缓存的机制,提高绘图的效率;重写本类的OnPaint接口[10],解决图形的闪烁问题;定义出适当的数据结构,保证每个运动轨迹点都能绘制出来。
该类的关键设计如下:
class Trace : public CStatic{
(Construction)
public:
CurveDevice(CWnd * parent,CRect
&rectBorder,int type);
void m_LoadData
(vector
virtual ~CurveDevice();
//加载所有数据
private:
vector
//存储所有的运动轨迹点
DWORDm_RecordStartPos;
//数组的当前起始位置
void Draw_XY(void);
//绘制X-Y直角坐标轨迹图
};
本类中两个结构体Coordinate、 CoordinateFloat分别是屏幕像素点和GPS移动站的(X,Y)坐标。将GPS坐标对应于屏幕的像素点通过m_LoadData接口完成。
void CurveDevice::CD_LoadData
(vector
int i;
Coordinate Coordinate_data;
for (i=0; i { (坐标变换公式,代码略) } Draw_XY(); //绘制出轨迹图 } 如果在窗口上直接绘图,则会不断产生WM_PAINT消息,导致闪烁的现象。本模块采用双缓存的方式绘图,原理是在内存位图中绘制图形,然后一次性粘贴到需要显示的窗口,其接口设计如下: void Draw_XY(void){ CBitmap bmp; //内存中承载临时图象的位图 dcMem.CreateCompatibleDC(pDC); //创建兼容内存DC //创建兼容位图 bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height()); …… pDC->BitBlt(0,0,rect.Width(),rect.Height(),&d cMem,0,0,SRCCOPY); //将内存DC上的图象拷贝到前台 } 在计算处理模块得出结果后,同时要将数据保存到数据库中,以便试验后进行理论分析。本文采用ACCESS数据库完成,其优点是小巧、速度快且安装方便,作为Office办公软件的一部分,在大多数计算机中都有安装。本监控软件的数据库表设计如表2所示。 表2 数据库表设计 数据库的操作接口有ODBC、DAO和ADO几种,其中ADO[11-12]是速度最快的一种方式,满足本系统的快速处理需求。使用ADO之前需要引入系统的ADO动态库,在stdafx.h中加入如下代码: #import "C:Program FilesCommon FilesSystem adomsado15.dll"no_namespace rename("EOF","rsEOF") 关键接口设计如下: (1)数据库连接 BOOLADO_GetConn(_ConnectionPtr &pConn){ CString strSRC="Provider=Microsoft.Jet.OLEDB.4.0; Data Source="; …… strSRC += "\vehicle.mdb"; //数据库名称 …… pConn->Open(……) } (2)数据库写入 int ADO_AddRecord (_ConnectionPtr pConn,_RecordsetPtr pRst,void *DataBuf,int FileType,int flag){ ADO_GetRecordSet(pConn,pRst,FileType) //获取记录集 pRst->AddNew(); pRst->PutCollect("Time",(_variant_t)str); …… } 根据GPS信号好坏进行两次长时间定点运行实验,每次运行6 h。基站位置不变,移动站处于基站东北角1.4 m处,手工测量沿纬线距离基站约1.05 m,沿经线距离基站约0.95 m。作为动态定位实验的基础,定点实验的目的在于检测差分GPS定位的实际精度。 (1) GPS信号无遮挡 GPS信号无遮挡,实验结果如表3所示,轨迹点分布如图3所示。 表3 移动站直角坐标 (2)GPS信号有遮挡 GPS信号不能持续良好,有时出现遮挡情况,实验结果如表4所示。轨迹点分布如图4所示。 表4 移动站直角坐标 (3)移动站轨迹 图3 实验1轨迹图 图4 实验2轨迹图 表3、表4的极值数据是原始数据的统计值,实验的原始数据记录在本软件的数据库中。 在实验水池中进行采矿车的行驶实验,在监控软件中得到实际运动轨迹如图5所示,图中曲线代表车体运动轨迹。 图5 采矿车运动轨迹界面 实验结果表明,差分GPS的定位精度与信号强度直接相关,不能出现遮挡的情况,否则将出现较大的误差。因此在实际使用中,必须再引入其他辅助定位手段或一些处理算法来保证定位的可信度,这也是后续研究的重点内容。 本文介绍了基于差分GPS定位的深海采矿车运动轨迹监控软件开发,在Vsiual C++软件平台上,根据需求实现了实时通信、计算处理、图形显示和数据库保存四个模块。在作者单位的海洋采矿实验场地的运行结果表明,软件实现了运动轨迹跟踪的功能,完成了车体控制器变量的监控。 在实际的深海采矿中,定位方式会发生改变,将由声学定位和惯导结合的方式代替GPS。本监控软件采用清晰的模块划分,耦合程度小,由硬件变化导致程序改变,只需改动数据处理模块,以适应声学和惯导的算法即可,其他模块基本不变。 本文的方法创新点在于用低成本和高精度的方案,实现了海洋集矿车运动轨迹的在线监测,为集矿车在实验阶段的轨迹定位研究和控制方法研究提供了可靠的指导,其软件实现方法适用于集矿车各阶段的工程应用。 [1] MAHMOUD M S,SABIH M,ELSHAFEI M. Using OPC technology to support the study of advanced process control[J]. ISA Transactions,2015,55:155-167. [2] GUERRERO L V,LPEZ V V,MEJA J E. Virtual commissioning with process simulation (tecnomatix)[J]. Computer-Aided Design and Applications,2014,11(S):11-19. [3] 李勤,党选举. 基于COM的OPC技术研究及其接口实现[J]. 电子技术应用,2003,29(2):28-30. [4] 熊建斌,王钦若,徐维超,等. 基于OPC技术的DPS多传感器在线实时数据的采集与滤波[J]. 计算机工程与科学,2012,34(11):135-140. [5] 樊镭,张天开,叶冬. 加热炉温度控制系统的设计[J]. 微型机与应用,2013,32(16):85-86. [6] 陈绍炜,孟祥禄,任磊. 地面动态跟踪精度试验中的坐标系变换研究[J]. 电子设计工程,2014,22(10):144-146. [7] 肖体琼,陈怡群,常春. GPS经纬度坐标转平面坐标的简化计算方法及精度分析[C].2005年中国农业工程学会学术年会,2005. [8] 张克涵,张呼和,顾李冯. VC++环境下的电机状态监测软件设计[J]. 测控技术,2012,31(2):23-26. [9] 王润民,赵祥模,惠飞,等. 基于嵌入式Linux与QT的汽车虚拟仪表设计[J]. 现代电子技术,2012,35(6):1-4. [10] 王玉菡,曾自强. 基于VC++6.O实现无闪烁连续实时曲线[J]. 重庆理工大学学报:自然科学版,2014,28(4):123-126. [11] 王晓玲,赵杨. VC++通过ADO访问数据库方法择优[J]. 数字技术与应用,2012,29(4):148. [12] 孟培超,胡圣波,舒恒,等. 基于ADO数据库连接池优化策略[J]. 计算机工程与设计,2013,34(5):1706-1710. The monitoring software developing of moving trajectory of the ocean mining vehiclebased on differential GPS positioning Hou Ben (Laboratory of Exploitation and Utilization of Deep-sea Mineral Resourcesof Changsha Research Institute of Mining and Metallurgy Co.,LTD.,Changsha,410012,China) The trajectory of the deep-sea mining vehicle is very important for the acquisition efficiency. However,the existing commercial configuration software is difficult to meet the requirements of mining vehicle trajectory monitoring. Thus the monitoring software of moving trajectory of the ocean mining vehicle based on differential GPS positioning is developed based on Visual C++ platform. According to requirement analysis,real-time communication module,data processing module,graphic display module and database module are designed. According to the experimental results and the stored data,the accuracy of differential GPS positioning is analyzed. The result shows that this software achieves the designing goal and has strong adaptability. differential GPS; trajectory monitoring; OPC; ADO 湖南省工业领域技术创新项目(2016GK2031) TP3 A 10.19358/j.issn.1674-7720.2017.24.004 侯奔.基于差分GPS定位的深海采矿车运动轨迹监控软件开发J.微型机与应用,2017,36(24):11-15. 2017-06-29) 侯奔(1980-),男,硕士,高级工程师,主要研究方向:嵌入式软件开发。2.4 数据库模块设计
3 运行结果
3.1 定点定位实验
3.2 采矿车运动定位实验
4 结论