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