胡加星,刘立龙,刘靖晔
(桂林理工大学土木与建筑工程学院,广西 桂林541004)
Matlab与Visual C++混合编程处理全站仪数据的方法
胡加星,刘立龙,刘靖晔
(桂林理工大学土木与建筑工程学院,广西 桂林541004)
内业数据检核中经常要对点的外业实测坐标与内业成图后的坐标进行比较,以此来发现是否出现造点或是点位挪动的情况。同时经处理后的观测数据能直观地得到外业人员想要的三维坐标,可方便地进行下一步的测量工作。以南方全站仪为例,利用Matlab与Visual C++混合编程生成可脱离Matlab环境直接运行的可执行文件,并给出相关代码及成果图像。
Matlab;混合编程;数据处理
Matlab是美国MathWorks公司用C语言研制开发的一种科学计算软件,它将高性能的数值计算、符号计算和可视化集成在一起,并提供了大量的内置函数以及功能丰富的工具箱,使用方便,编程效率高。同时它还可以与Fortran、C以及VB语言混合编程,进一步扩展了其功能;特别在可视化方面,Matlab提供了图形用户界面 (GUI),使得用户可以进行可视化编程[1]。南方全站仪记录的数据格式包含 2类:观测值数据格式和坐标数据格式[6]。观测值数据格式记录的数据包括:点号、编码、东坐标、北坐标、高程、距离、棱镜高、精度、加常数。为了更好地利于内业点位坐标的检核,以及方便野外测量人员查看相关点位坐标,文中我们利用Matlab强大的计算功能,通过其可视化界面GUI。结合Visual C++语言编写相关代码,最终生成可独立运行的可执行文件。实现从观测值数据格式的数据文件中提取点的三维坐标一键式操作,且生成的.txt文件方便测量人员查询和使用。
Matlab GUI设计使读者不必深入掌握面向对象的编程语言,也能设计出精美的人机界面[1]。与VisualC++相比,Matlab GUI具有学习起点低(只需了解Matlab的基本操作和C语言的基础知识)、易学易懂、开发周期短等优点,设计出来的界面完全可与Visual C++编写的界面媲美。
为了实现从南方全站仪观测值数据格式文件中提取点号、X坐标、Y坐标、高程。首先要读取原始数据,然后处理该数据完成相关数据的提取,并在显示区显示提取的结果。此时生成了*.m和*.fig文件。接着通过mcc命令调用Matlab编译器,生成可独立运行的* .exe文件。最后通过Visual C++编译已生成的*_main.c文件,用以去掉*.exe程序运行时出现的DOS窗口,达到进一步完善该*.exe文件的目的(如图1所示)。
图1 设计流程图
运行 Matlab,设置好路径后在命令窗口中输入guide,在弹出的对话框中选择BlankGUI,在保存路径中将文件名改为chuli.fig;点击确定,进入类似VB的编程界面;在这里将对程序界面进行设计,其界面如图2所示。
(将edit1和edit2的MAX属性都设置为100,否则在edit中将不能实现多行输出)
图2 设计界面
2.1 相关代码
%以下是第2个按钮的callback代码
2.2 生成相关文件
在命令窗口中输入mcc-m chuli,按回车键后将在命令窗口中出现选择提示。如果电脑上安装了 VC的话,将会提示是否用VC的编译器。一般情况选择1,即使用MATLAB自带的LCC编译器进行编译;完成后将生成chuli.ctf、chuli_main.c、chuli_mcc_component_ data.c、mccExcludedFiles.log、chuli.fig、chuli.m 和chuli.exe文件,以及生成一个文件夹 chuli_mcr。其中chuli.ctf文件不能删除。为了进一步完善chuli.exe文件,接下来需对chuli_main.c文件进行修改。
2.3 修改*_main.c文件
修改chuli_main.c文件中的run_main函数和main函数,通过修改这2个函数可以达到去掉控制台即DOS窗口的目的[2]。要去掉控制台窗口,需要将控制台类型的程序转换为Win32类型的程序;因为Win32程序的入口函数为WinMain,因而需要将main函数转换为WinMain函数。WinMain函数的输入输出参数与main函数不同,函数主体部分与main函数类似。
修改main函数为:
修改run_main函数主要是为了设定ctf文件的路径,即将:
__MCC_chengji2_component_data.path_to_component变量的值设置为ctf文件所在的路径,本文中设置其值为:
__MCC_chengji2_component_data.path_to_component=E:\学习\MATLAB保存\处理南方数据\处理南方数据\chuli;
1)首先通过Visual C++建立1个Win32 Application类型的空工程;
2)将 chuli_main.c文件和 chuli_mcc_component_ data.c文件加入到新建立的 VC++工程中;
3)通过Project︱Settings菜单项更改VC++工程的设置。首先通过link选项添加库文件:libem lrt.lib、libfixedpoint.lib、libmex.lib、libmwservice.lib、mclmcrrt.lib、libut.lib、mclcommain.lib、libeng.lib、libdflapack. lib、libmw lapack.lib、libmat.lib、m clcom.lib、libmx.lib、mclxlmain.lib、mclmcr.lib;然后通过C++︱Precompiled Header菜单项自动应用stdafx.h文件;
4)编译得到 chuli.exe可执行文件;最后运行chuli.exe程序,此时生成的处理南方数据程序就不会再出现控制台窗口,而只剩下程序运行窗口了。
程序运行界面见图3,原始数据见图4,处理后数据见图5。
图3 程序运行界面
图4 原始数据
图5 处理后数据
此外若在没有安装Matlab的电脑上运行chuli.exe则必须先安装Matlab的1个工具包 MCRInstaller.exe,它在所安装Matlab文件夹下的 oolboxcompilerdeploy w in32中[4]。
当测量次数增加时,数据处理过程复杂、计算量大,用人工处理可靠性不高。本文讨论了用Matlab语言进行编程来处理南方全站仪的外业测量数据。Matlab语言具有强大的数值运算能力,包含多种功能函数,对于科学计算来说,编程极为简单,用几行命令即可快速地得到结果,降低了人为因素引起的误差。同时利用Matlab提供的 GUI设计工具及编写程序,可以简单、便捷地设计出美观、方便的菜单化和控件式的人机交互界面。
在测量相关软件开发过程中,为了提高软件的开发效率,混合编程是综合使用多种开发工具技术优势的一种常用手段[5]。本文采用基于LCC组件的Matlab与 VC++混合编程技术,具有实现简单、执行效率高、几乎支持所有的Matlab函数、易于移植等优点[2],是解决矩阵处理、计算以及图像处理编程的一种有效途径,可以为测绘科学研究和测量工程技术提供强有力的技术支持。
[1] 罗华飞.Matlab GUI设计学习手记[M].北京:北京航空航天大学出版社,2009
[2] 刘维.精通Matlab与C/C++混合程序设计(第2版)[M].北京:北京航空航天大学出版社,2008
[3] 任超,欧吉坤,阳仁贵.在测量软件开发中Matlab的应用[J].测绘通报,2004(1):11-12
[4] 罗诗佳,陈超,郭文学,等.C﹟与Matlab混合编程技术在矿山沉降预测中的应用[J].矿山测量,2010(2):49-50
[5] 曾宪 ,徐昌荣.全站仪通用坐标数据转换程序研制[J].海洋测绘,2002,22(5):59-60
Matlab and Visual C++Mixing Programming to Process the Data of the South Total Station
by HU Jiaxing
During the indoor work data checking,we often compared the point's field work coordinate with its indoor work coordinate.So we could find if there be some points were artificial,or some points had been moved.At the same time,the processed data could direct provide the three dimension coordinate,it was helpful for the next measure work.This article took the South total station instrument for example,based on matlab and Visual C++mixing programming to generate the directly executable file,which could separate from the MTALAB environment,then gave the code and the images of the result.
MTALAB,hybrid programming,data processing
2010-10-27
项目来源:国家自然科学基金资助项目(41064001)。
P208
B
1672-4623(2011)03-0175-03
胡加星,硕士,研究方向为GPS技术及应用。