胡加星,劉立龍,劉靖曄
(桂林理工大學土木與建筑工程學院,廣西 桂林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技術及應用。