基于C#的激光测距上位机程序设计

2018-05-14 02:54鹏,周崟,张锐,王
山西电子技术 2018年2期
关键词:激光测距测距上位

白 鹏,周 崟,张 锐,王 浩

(山西省自动化研究所,山西 太原 030012)

0 引言

与其他的测量手段相比较,激光具有能量集中,不易受电磁波干扰的优点,广泛的应用于遥感遥测,土木建设,市政施工,军事国防等领域。并且激光测距仪相较于其他测距仪器体积更加小巧,重量更加轻便,是一种高精度的测距手段。本文阐述了一种激光测距的原理,并且利用C#语言在Visual Studio平台上编写了测距的上位机软件。经过实际的效果验证,上位机软件可准确地反应激光传感器的测量数值,波形显示模块可将测距数值实时显示,给工程测距人员较为直观的图形展示。

1 激光测距原理

目前,小型的激光测距传感器普遍采用相位法测量距离。相位式激光测距也称连续波激光测距[1]。测量时首先由激光传感器的发射系统发出连续的光波,经调制后发射至被测目标,由被测目标返射回的回波激光信号经一定时间的延迟后进入接收系统,激光信号传导至光电探测器,再由解调器对延迟信号进行解调,并将解调之后的信号送到相位差比较模块中进行计算,最终得到相位差值[2],如图1所示。

图1 激光测距原理图

被测量的距离可以根据相位差得到,见式(1) :

(1)

其中,C为真空光速;f为调制频率。调制波在空中传播的时间为t,t可由式(2)计算得到:

(2)

其中,φ=2πN1+2πΔN1,N1为调制波传播的整数周期数,ΔN1为调制波传播的非整数周期数。那么被测距离D就可表示为式(3):

(3)

L称为半波长,也叫做激光测距的测尺长度[3]。通常,只有在波长小于测尺长的情况下,有唯一解。所以在实际应用中一般选择几个测尺的长度作为参照。而且利用相位法测量时,为得到较高的测量精度,须选用高频激光信号作为测量源。

2 激光测距系统设计

2.1 激光测距硬件系统介绍

本文使用Hyperson公司的HPS-167系列的激光测距传感器,该传感器具有测距精度高、反应迅速等特点,在测距工程上被广泛的使用。在实际的使用中,常常需要把激光传感器挂载到载具上(例如汽车的倒车雷达),需要较长的信号传输线路,但传感器的RS232接口的传输电压通常较低,在长距离传输时信号衰减比较明显,所以往往将传感器的RS232接口转接为传输电压较高的RS485传输,以保证信号在传输过程中的稳定,具体的硬件框图如图2。

图2 激光测距硬件框图

2.2 激光测距上位机程序设计

本程序主要有四个模块,分别是串口收发设置模块、距离数字显示模块、声音提示模块、测距波形显示模块。下面对这四个模块具体介绍。

串口接收模块的功能是对上位机接口的参数的初始化,规定了传输的波特率、串口号等等。程序使用了C#中的GetPortNames函数[4,5],自动获取插在工控机上设备的串口号。代码如下:

string[] lsSignalPort1 = SerialPort.GetPortNames();

comSerialPort.Text = lsSignalPort1[0];

距离数字显示模块是上位机界面的核心部分,程序将串口传入的数据保存至voDis对象的ovDistance属性中。程序片段如下:

public static void UpdateCarInfo(JudgementDis voDis, OrgSignalModel voOrgSignalData)

{

if (voOrgSignalData != null)

{

voDis.ovDistance = voOrgSignalData.Distance;

}

}

由于页面的数据更新占用主线程,所以还需要进行跨线程的委托,代码片段如下:

private void UpdateCarInfoDelegate()

{

this.Invoke(new CarInvokeDelegate(UpdateCarInfo));

}

为实现页面数字的动态更新,在程序中定义了一个采样间隔可设定的定时器,每间隔一定的周期执行定时器函数,更新激光测距数据,具体定时器代码如下:

//计时器初始设置

int liInterval = Convert.ToInt32(this.comSampleRate.Text);

moDataRecTimer = new Timer();

moDataRecTimer.Interval = liInterval;

moDataRecTimer.Elapsed+= new System.Timers.ElapsedEventHandler(moDataRecTimer_Elapsed);

在实际的项目中往往不仅需要直观的数字显示,还需要声音的提示报警。为此,本程序设计了声音提示模块。该模块的最小接近距离可以人工设定,当被测距离小于最小设定距离时,就会发出“叮叮”的报警声提示用户。代码片段如下:

//初始化声音播放器

moSoundPlayer = new System.Media.SoundPlayer();

moPlaylist = new List();

由于声音提示是在后台操作,需要向程序中添加一个BackgroundWorker控件[6],并向DoWork属性中添加代码段,主要代码段如下:

string lsSoundPackage = string.IsNullOrEmpty(moComSetModel.SoundPackage) ? "Sound" : moComSetModel.SoundPackage;

while (moPlaylist.Count != 0)

{

string lsSoundPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, lsSoundPackage + "" + moPlaylist[0] + ".wav");

moPlaylist.RemoveAt(0)

moSoundPlayer.SoundLocation = lsSoundPath;

moSoundPlayer.PlaySync();

}

软件中还编写了波形显示模块,方便工程人员查看测距趋势。测距模块采用Visual Studio 的Chart控件,利用数据队列与定时器配合,不断地向Chart控件中添加数据,实现波形按时间流动的效果。总体的软件界面如图3所示。

图3 激光测距总体软件界面

3 小结

基于C#编写的激光测距上位机程序可实现距离的快速捕获与显示,界面友好,操作性强,能实现基本的数据采集与存储;对简单的工程测量与实验室的实验过程数据采集方面有一定的参考和借鉴价值。

[1] 肖彬.激光测距方法探讨[J].地理空间信息,2010,8(4):162-164.

[2] 李秀华,庄新,宋立明.激光测距技术探究[J].长春工程学院学报(自然科学版),2012,13(4):39-41.

[3] 李密,宋影松,虞静,等.高精度激光脉冲测距技术[J].红外与激光工程,2011,40(8):1469-1473.

[4] (美)沃森.C#入门经典[M].北京:清华大学出版社,2006.

[5] (美)SimonRobinson,(美)ChristianNagel.C#高级编程[M].北京:清华大学出版社,2005.

[6] AndersHejlsberg,Scott Wiltamath, Peter Golde.C#编程语言详解[M].张晓坤,谭立平,车树良,译.北京:电子工业出版社,2004.

猜你喜欢
激光测距测距上位
类星体的精准测距
基于高压架空线路激光测距的无人机锁定导线巡航研究
特斯拉 风云之老阿姨上位
基于回波强度的激光测距误差补偿算法研究
浅谈超声波测距
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
基于有效回波概率估计空间碎片激光测距系统作用距离
以新思路促推现代农业上位
低功耗窄脉冲编码激光器驱动设计探讨