胡加星,劉立龍,劉靖曄
(桂林理工大學土木與建筑工程學院,廣西 桂林541004)
Matlab與Visual C++混合編程處理全站儀數(shù)據(jù)的方法
胡加星,劉立龍,劉靖曄
(桂林理工大學土木與建筑工程學院,廣西 桂林541004)
內(nèi)業(yè)數(shù)據(jù)檢核中經(jīng)常要對點的外業(yè)實測坐標與內(nèi)業(yè)成圖后的坐標進行比較,以此來發(fā)現(xiàn)是否出現(xiàn)造點或是點位挪動的情況。同時經(jīng)處理后的觀測數(shù)據(jù)能直觀地得到外業(yè)人員想要的三維坐標,可方便地進行下一步的測量工作。以南方全站儀為例,利用Matlab與Visual C++混合編程生成可脫離Matlab環(huán)境直接運行的可執(zhí)行文件,并給出相關(guān)代碼及成果圖像。
Matlab;混合編程;數(shù)據(jù)處理
Matlab是美國MathWorks公司用C語言研制開發(fā)的一種科學計算軟件,它將高性能的數(shù)值計算、符號計算和可視化集成在一起,并提供了大量的內(nèi)置函數(shù)以及功能豐富的工具箱,使用方便,編程效率高。同時它還可以與Fortran、C以及VB語言混合編程,進一步擴展了其功能;特別在可視化方面,Matlab提供了圖形用戶界面 (GUI),使得用戶可以進行可視化編程[1]。南方全站儀記錄的數(shù)據(jù)格式包含 2類:觀測值數(shù)據(jù)格式和坐標數(shù)據(jù)格式[6]。觀測值數(shù)據(jù)格式記錄的數(shù)據(jù)包括:點號、編碼、東坐標、北坐標、高程、距離、棱鏡高、精度、加常數(shù)。為了更好地利于內(nèi)業(yè)點位坐標的檢核,以及方便野外測量人員查看相關(guān)點位坐標,文中我們利用Matlab強大的計算功能,通過其可視化界面GUI。結(jié)合Visual C++語言編寫相關(guān)代碼,最終生成可獨立運行的可執(zhí)行文件。實現(xiàn)從觀測值數(shù)據(jù)格式的數(shù)據(jù)文件中提取點的三維坐標一鍵式操作,且生成的.txt文件方便測量人員查詢和使用。
Matlab GUI設計使讀者不必深入掌握面向?qū)ο蟮木幊陶Z言,也能設計出精美的人機界面[1]。與VisualC++相比,Matlab GUI具有學習起點低(只需了解Matlab的基本操作和C語言的基礎(chǔ)知識)、易學易懂、開發(fā)周期短等優(yōu)點,設計出來的界面完全可與Visual C++編寫的界面媲美。
為了實現(xiàn)從南方全站儀觀測值數(shù)據(jù)格式文件中提取點號、X坐標、Y坐標、高程。首先要讀取原始數(shù)據(jù),然后處理該數(shù)據(jù)完成相關(guān)數(shù)據(jù)的提取,并在顯示區(qū)顯示提取的結(jié)果。此時生成了*.m和*.fig文件。接著通過mcc命令調(diào)用Matlab編譯器,生成可獨立運行的* .exe文件。最后通過Visual C++編譯已生成的*_main.c文件,用以去掉*.exe程序運行時出現(xiàn)的DOS窗口,達到進一步完善該*.exe文件的目的(如圖1所示)。
圖1 設計流程圖
運行 Matlab,設置好路徑后在命令窗口中輸入guide,在彈出的對話框中選擇BlankGUI,在保存路徑中將文件名改為chuli.fig;點擊確定,進入類似VB的編程界面;在這里將對程序界面進行設計,其界面如圖2所示。
(將edit1和edit2的MAX屬性都設置為100,否則在edit中將不能實現(xiàn)多行輸出)
圖2 設計界面
2.1 相關(guān)代碼
%以下是第2個按鈕的callback代碼
2.2 生成相關(guān)文件
在命令窗口中輸入mcc-m chuli,按回車鍵后將在命令窗口中出現(xiàn)選擇提示。如果電腦上安裝了 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函數(shù)和main函數(shù),通過修改這2個函數(shù)可以達到去掉控制臺即DOS窗口的目的[2]。要去掉控制臺窗口,需要將控制臺類型的程序轉(zhuǎn)換為Win32類型的程序;因為Win32程序的入口函數(shù)為WinMain,因而需要將main函數(shù)轉(zhuǎn)換為WinMain函數(shù)。WinMain函數(shù)的輸入輸出參數(shù)與main函數(shù)不同,函數(shù)主體部分與main函數(shù)類似。
修改main函數(shù)為:
修改run_main函數(shù)主要是為了設定ctf文件的路徑,即將:
__MCC_chengji2_component_data.path_to_component變量的值設置為ctf文件所在的路徑,本文中設置其值為:
__MCC_chengji2_component_data.path_to_component=E:\學習\MATLAB保存\處理南方數(shù)據(jù)\處理南方數(shù)據(jù)\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可執(zhí)行文件;最后運行chuli.exe程序,此時生成的處理南方數(shù)據(jù)程序就不會再出現(xiàn)控制臺窗口,而只剩下程序運行窗口了。
程序運行界面見圖3,原始數(shù)據(jù)見圖4,處理后數(shù)據(jù)見圖5。
圖3 程序運行界面
圖4 原始數(shù)據(jù)
圖5 處理后數(shù)據(jù)
此外若在沒有安裝Matlab的電腦上運行chuli.exe則必須先安裝Matlab的1個工具包 MCRInstaller.exe,它在所安裝Matlab文件夾下的 oolboxcompilerdeploy w in32中[4]。
當測量次數(shù)增加時,數(shù)據(jù)處理過程復雜、計算量大,用人工處理可靠性不高。本文討論了用Matlab語言進行編程來處理南方全站儀的外業(yè)測量數(shù)據(jù)。Matlab語言具有強大的數(shù)值運算能力,包含多種功能函數(shù),對于科學計算來說,編程極為簡單,用幾行命令即可快速地得到結(jié)果,降低了人為因素引起的誤差。同時利用Matlab提供的 GUI設計工具及編寫程序,可以簡單、便捷地設計出美觀、方便的菜單化和控件式的人機交互界面。
在測量相關(guān)軟件開發(fā)過程中,為了提高軟件的開發(fā)效率,混合編程是綜合使用多種開發(fā)工具技術(shù)優(yōu)勢的一種常用手段[5]。本文采用基于LCC組件的Matlab與 VC++混合編程技術(shù),具有實現(xiàn)簡單、執(zhí)行效率高、幾乎支持所有的Matlab函數(shù)、易于移植等優(yōu)點[2],是解決矩陣處理、計算以及圖像處理編程的一種有效途徑,可以為測繪科學研究和測量工程技術(shù)提供強有力的技術(shù)支持。
[1] 羅華飛.Matlab GUI設計學習手記[M].北京:北京航空航天大學出版社,2009
[2] 劉維.精通Matlab與C/C++混合程序設計(第2版)[M].北京:北京航空航天大學出版社,2008
[3] 任超,歐吉坤,陽仁貴.在測量軟件開發(fā)中Matlab的應用[J].測繪通報,2004(1):11-12
[4] 羅詩佳,陳超,郭文學,等.C﹟與Matlab混合編程技術(shù)在礦山沉降預測中的應用[J].礦山測量,2010(2):49-50
[5] 曾憲 ,徐昌榮.全站儀通用坐標數(shù)據(jù)轉(zhuǎn)換程序研制[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技術(shù)及應用。