引言
应用LMS511或其它版本施克激光雷达时,可以通过SOPAS ET软件对LMS511进行设置,测量数据输出。更多的时候为了定制化产品,我们需要通过串口技术发送命令对LMS511进行设置和数据的输出。此时官方提供的Developers Guide手册对于开发者是重要的,手册涵盖了串口通讯、数据处理、参数设置等大量命令介绍。这篇博文就从如何利用串口进行数据采集进行讲解,博文里涉及的电文/命令都来源于Developers Guide。
(Telegrams)电文介绍
电文/电报/报文,通过终端以ASCII(也以十六进制)或二进制文件的形式向LMS511发送命令,传感器总是用他的语言进行反馈。我们可以用二进制、十六进制、ASCII,这里就建议使用ASCII,因为更直观、更容易记忆一些。
这里给出了基础的ASCII、Hex和Binary的命令和描述。
发送指令的步骤
(1)登陆设备(2)设置扫描频率和分辨率(3)设置扫描输出内容(4)存储参数(5)运行并接受扫描数据
登陆设备
LMS511 内有三个权限的账户可供使用。”Maintenance”,在此权限下,用户不可以更改 LMS 参数,但可通过指令获取测量数据。”Authorised client”在此权限下,用户可更改 LMS 的大部分参数如扫描频率、角度分辨率、输出内容等。“service”在此权限下,用户 可更改 LMS 的所有参数,但不建议客户使用,(存在由于参数设置错误而导致系统故障, 如需使用,请在 SICK 专业人员指导下进行使用)。
此时,若 LMS 返回值为“1“则代表登陆成功。LMS 前面板的”STOP”灯亮,表示停止测量 并开始准备接受参数修改指令。
设置扫描频率与分辨率
这里修改的 LMS 扫描频率为 50Hz,角度分辨率为 0.5(这里的的例子是LMS1xx的)。LMS511点开始角和终止角可以按照上述例子设置。
这里是LMS511反馈的角度分辨率与扫描频率电文。
设置扫描输出电文
修改 LMS 扫描频率为 50Hz,起始角度为 0 度,结束角度为 90 度。
存储参数
存储数据
返回数据
运行并接受扫描数据
注销并启用设备,输入此指令后,LMS 前面板指示灯变绿,提示此时 LMS 处于正常测量状态。
返回状态
看到这里你肯定了解基础电文的用途,记不下来没关系,用到的时候翻开开发者手册查询一下就好了。 讲了那么多,了解了一些电文的作用功能,但是如何使用这些电文,甚至在哪里输入上面这些电文你肯定还不知道,下面内容如何利用电文获取数据帧的两种方式与数据帧的含义一定是你想要的。
LMS511返回数据帧及含义
TCP/IP
在讲解发送指令获得数据之前,有必要了解一下TCP/IP的概念,因为在基于MATLAB对LMS设置读取数据时候使用的就是这个技术。
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 IP协议对应于网络层,TCP协议对应于传输层,也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输。有时候也会看到Socket的概念,实际上Socket是对 TCP/IP协议的封装和应用。Socket本身并不是协议,而是一个调用接口(API)。 通过Socket,才能使用TCP/IP协议。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道 的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
数据获取发送指令过程
LMS 可通过指令返回单次测量和连续测量的数据。
单次测量:发送指令后 LMS 会返回当前 LMS 的测量数据,执行后只返回一帧数据,具体用ASCII还是HEX自己选择就好了。
指令 ASCII:sRN LMDscandata
指令 HEX:02 73 52 4E 20 4C 4D 44 73 63 61 6E 64 61 74 61 03
连续测量:发送指令后,LMS 会实时返回其测量数据
指令 ASCII:sEN LMDscandata 1
指令 HEX:02 73 45 4E 20 4C 4D 44 73 63 61 6E 64 61 74 61 20 31 03
连续测量停止:发送指令后,LMS 停止向外发送测量数据
指令 ASCII:sEN LMDscandata 0
指令 HEX:0273454E204C4D447363616E64617461203003
数据帧含义
单次测量和连续测量所返回的数据数据结构相同例如。
sRA LMDscandata 1(版本号) 1(设备号) 89A271(序列号) 0 0(设备状态) C44(指令 计数) 5CA(扫描计数) E1CED(开始时间) E2775(发送时间) 0 0(数字量输入) 7 0(数字量输出) 0(保留) 9C4(2500HZ) 168(每次扫描频率) 0(没有编码器) 1(输出通 道 1) DIST1(输出内容) 3F800000(系数) 00000000(系数偏移量) FFF92230(开始角 度) 9C4(角度分辨率) 43A(扫描点个数) 44F(第一个扫描点:1103mm) 445 451 440 451 450 44F 459 45B 474 45B 47B 46E 470 483 49B 481 48C 4A3 49D 4B3 4B7 4B1 4C7 4C1 4C2 4D4 4DD 4E4 4EB 4FA 511 505 504 50E 522 529 544 537 53C 54F 55A 564 56C 586 587 583 5A1 5B2 5A4 5AD 5C9 5CE 5ED 5FB 5F6 5FF 609 … … 48 56 4D 4D 3C 43 45 44 44 46 4C 56 39 48 41 4B 43 52 50 3E 60 73 66 88 88 9F AA B2 B3 CD E6 105 10D 12D 145 196 1A1 1C1 1B1 1E3 1E3 1E4 1DE 1E7 1EB 1F0 1E4 1F1 1F7 1FE 206 1F5 1FA 206 1F9 200 203 20A 21C 210 20C 20D 205 21D 219 21A 222 217 22E 229 225 237 22D 22D 0 0 0 0 0 0
通过终端获取数据帧
通过MATLAB获取数据帧并显示
有关TCP/IP的例子
使用 instrhelp tcpip命令,可以看到tcpip函数的及参数的完整介绍。
% MATLAB example using TCP/IP (matlab_tcpip_example.m)
% This simple code example demonstrates how you can use MATLAB to exchange data
% with a remote application not developed in MATLAB. This code example is taken
% from a MATLAB Digest technical article written by Edward J. Mayhew from
% George Mason University. While HTTP was used as the higher-level protocol in
% this example, you can use other protocols, as was the case in the project.
% MATLAB supports TCP/IP using Instrument Control Toolbox. Requires MATLAB and
% Instrument Control Toolbox.
%
% On line 14, substitute "www.EXAMPLE_WEBSITE.com" with an actual website with
% which you wish to communicate.% Create TCP/IP object 't'. Specify server machine and port number.
t = tcpip('192.168.1.1', 80); % Set size of receiving buffer, if needed.
set(t, 'InputBufferSize', 30000); % Open connection to the server.
fopen(t); % Transmit data to the server (or a request for data from the server).
fprintf(t, 'GET /'); % Pause for the communication delay, if needed.
pause(1) % Receive lines of data from server
while (get(t, 'BytesAvailable') > 0)
t.BytesAvailable
DataReceived = fscanf(t)
end % Disconnect and clean up the server connection.
fclose(t);
delete(t);
clear t
MATLAB中获取的实时廓线
通过MATLAB获取数据帧后,提取DIST1后的距离数据,将十六进制的距离数据转化为十进制距离数据,根据扫描角度计算廓线 x,y 坐标。
SOPAS ET中实时获取的廓线信息。
总结
可以看到MATLAB中通过电文实时获取的廓线与SOPAS ET中实时廓线一致,说明帧数据获取、解算的正确性。
参考
http://blog.csdn.net/guomutian911/article/details/41206663
http://blog.csdn.net/u012736279/article/details/41479123
http://www.cnblogs.com/qq78292959/archive/2009/09/22/2077085.html
http://www.cnblogs.com/rouwawa/p/6959009.html
http://www.cnblogs.com/fuyuanming/articles/4848250.html