摘 要:本文介紹采用Visual Basic.Net開發南方全站儀實時通訊程序的經過和方法,實現了外業測量數據的實時同步處理,對外業工作及時的提供分析。
關鍵詞:全站儀,實時通訊
1 概述
隨著測繪技術的發展,全站儀在工程測量中的使用越來越廣泛。為了快速方便的獲取測量數據的分析結果,及時的對工程施工給出指示,那么我們就需要對測量數據進行實時處理,而處理數據的前提是我們能夠動態的獲取全站儀測量的數據,即全站儀實時通訊技術。我們用Visual Basic.Net編寫了南方全站儀實時通訊軟件。通過數據線將全站儀與筆記本電腦(或者電子手簿)連接,實現了全站儀每測量一次數據,都會自動的傳輸到電腦里面,通過后處理軟件,及時給出我們需要的數據分析結果。本文以南方NTS-360型號全站儀為例,介紹在測量工程中實時通訊技術的開發與應用。
2 編程思路
本程序的的編寫主要是用Microsoft Mscomm控件通過串口連接進行數據通訊。南方全站儀與計算機通訊的信號響應按照以下步驟實現:
(1)計算機向儀器發送第一類指令(指令“C” ASCII碼:43H 30H 36H 37H 03H 0DH 0AH);
(2)儀器檢查指令“C”的BCC,若接收的指令正確,則在0.05秒內儀器向計算機發送承認信號“ACK”。若接收的指令不正確,則儀器不向計算機發送回答信號。
有效指令ACK ASCII碼:06H 30H 30H 36H 03H 0DH 0AH;
無效指令NAK ASCII碼:14H 30H 32H 31H 03H 0DH 0AH;
(3)若計算機在0.05秒內未接收到來自儀器的承認信號“ACK”,則計算機必須再發送一次指令“C”;
(4)步驟3最多能重復10次,此后計算機會中斷通訊并顯示錯誤信息;
(5)儀器接收到指令“C”后,開始測量;測量完畢,自動發送數據;
(6)當計算機正確地接收數據并檢查BCC之后,必須在0.3秒之內向儀器發送“ACK”。當儀器接收到“ACK”,則通訊完畢;
(7)若接收的數據有通訊錯誤,則計算機不會發送“ACK”。然后,儀器會再次向計算機發送同樣的數據;
(8)步驟7最多能重復10次,此后計算機會中斷通訊并顯示錯誤信息。
全站儀測量數據實時傳輸至計算機以后,通過后處理軟件對這些數據進行處理,就可以得到我們需要的分析結果了。例如,我們測量的坐標數據實時傳輸至計算機以后,可以通過后處理軟件直接比較所測數據與設計數據的偏差,及時的指導工程施工。
3編程過程
3.1建立用戶界面
(1)運行Microsoft Visual Studio 2005,新建項目文件南方NTS-360全站儀測量實時通訊,將默認窗體名稱改為南方NTS-360全站儀測量實時通訊,在其界面下添加AxMSComm1控件,用來實現全站儀與計算機之間的數據傳輸。并添加以下各個控件,來構成整個程序的主界面。
(2)定義變量協議的各項參數:
Dim Out() As Byte '接收全站儀數據
Dim TXDK As Integer '標記通訊端口
Dim BTL、SJW、TZW、JY As String '標記波特率、數據位、停止位、校驗類型
(3)添加通訊端口、波特率、數據位、停止位、校驗等幾組單選控件,用來對通訊協議參數的進行設置。
雙擊COM1、COM2、COM3、COM4、COM5、COM6單選控件,編寫對應的如下代碼:
TXDK = 1;
雙擊1200、2400、4800、9600單選控件,編寫對應的如下代碼:
BTL = 1200;
雙擊7位、8位單選控件,編寫對應的如下代碼:
SJW = 7;
雙擊1位、2位單選控件,編寫對應的如下代碼:
TZW = 1;
雙擊無校驗(n)、奇校驗(o)、偶校驗(e)單選控件代碼,編寫對應的如下代碼:JY = n;
添加一個文本框控件,用來設置通訊連接的超時時間限制。
(4)雙擊開始測量按鈕,編寫以下代碼:
'通訊協議參數設置
With AxMSComm1
.CommPort = TXDK '設置Com1為通信端口
.Settings = BTL & “,” & JY & “,” & SJW & “,” & TZW
.InBufferSize = 1024 '設置緩沖區接收數據為字節
.OutBufferSize = 1024 '設置緩沖區發送數據為字節
.InputLen = 0 '設置Input一次從接收緩沖讀取字節數
.RThreshold = 1 '設置接收一個字節就產生OnComm事件
.InputMode = 1 '設置接收數據類型為二進制
End With
'打開串口
Try
If AxMSComm1.PortOpen = False Then
AxMSComm1.PortOpen = True
Else
AxMSComm1.OutBufferCount = 0
End If
Catch ex As Exception
MsgBox(ex.ToString)
End Try
'通信開始
Dim strCmd As String
'發送坐標測量模式指令
strCmd = "\0x5a\0x36\0x32\0x30\0x39\0x34\0x03\0x0d\0x0a"
Try
AxMSComm1.Output = strCmd
Catch ex As Exception
MsgBox(ex.ToString)
Exit Sub
End Try
Thread.Sleep(300)
'發送c指令
strCmd = "\0x43\0x30\0x36\0x37\0x03\0x0d\0x0a"
Try
AxMSComm1.Output = strCmd
Catch ex As Exception
MsgBox(ex.ToString)
Exit Sub
End Try
'發送Ack指令
strCmd = "\0x06\0x30\0x30\0x36\0x03\0x0d\0x0a"
Try
AxMSComm1.Output = strCmd
Catch ex As Exception
MsgBox(ex.ToString)
Exit Sub
End Try
(5)雙擊AxMSComm1控件,編寫以下代碼:
Select Case AxMSComm1.CommEvent
Case 1 'comEvSend發送數據
Case 2 'comEvReceive讀取數據
Out = AxMSComm1.Input
Dim buf As String = ASCIIEncoding.GetString(Out) '數據類型轉換
TextBox2.Text = TextBox2.Text & buf '顯示數據
Case Else '傳輸事件出錯
AxMSComm1.OutBufferCount = 0
End Select
3.2數據轉換
在全站儀啟動坐標測量之后,實時傳輸至計算機的坐標數據格式如下:
我們可以分析得出在坐標測量模式下的各項數據:
“U” 坐標模式標識符
“+00000002121” N坐標 0.175m
“-00000000485” E坐標 0.485m
“+00000000548” Z坐標 0.548m
“m” 距離單位
“3470702” 水平角
“d” 角度單位
“095” 校驗值
依據此分析結果編寫代碼如下:
Dim Str1,Str2 As String
Dim N,E,Z As Double
Str1 = TextBox2.Text
Dim i As Integer = Str1.IndexOf("U")
Str1.CopyTo(i + 1, Str2, 0, 12)
N = Val(Str2)
Str1.CopyTo(i + 13, Str2, 0, 12)
E = Val(Str2)
Str1.CopyTo(i + 25, Str2, 0, 12)
Z = Val(Str2)
通過以上步驟,我們實時的獲取了我們在測量工程作業中需要 N,E,Z坐標。如果需要角度測量、斜距測量等其他模式,只需修改對應的指令代碼和數據轉換代碼即可。
4結論
本文主要介紹全站儀的實時通訊技術在坐標測量模式下的實現方法,至于我們實時獲取了坐標數據之后,如何做進一步的分析處理,則需要根據各種測量工程的特點編寫對應的后處理軟件,來得到分析結果,以對工程施工進行指示、校正。
本程序已經使用了2年之久,運行穩定,結果可靠,操作簡單,在外業及時的自動處理數據,給出分析結果,大大提高了工作效率。
參考文獻
[1] 季斌德,邵自修. 工程測量[M].北京:測繪出版社,2002.01.
[2] 何保喜.全站儀測量技術[M].鄭州:黃河水利出版社,2005.08.
[3] 武大測繪學院平差學科組.誤差理論與測量平差基礎[M].武漢:武漢大學出版社,2003.01
[4]陳戰林,耿宏運.Visual Basic.NET高級編程[M].北京:電子工業出版1999.05
論文指導 >
SCI期刊推薦 >
論文常見問題 >
SCI常見問題 >