摘 要:本文介绍采用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