通信库文件 - UDP广播





5.00/5 (2投票s)
通信库文件 - UDP广播
引言
本示例展示了如何使用我和一位同事为SICK A.G.激光雷达设备(例如LMS5xx)演示而制作的通信库中的UDP部分。
整个库本身使用户能够用15行代码(不包括错误处理等)在屏幕上生成3D激光雷达图像。整个库将发布在通用下载页面,方便维护。
本技巧将介绍该库的UDP广播部分,展示一个基于本地网络(LAN)广播消息的简单无服务器ChatClient
。
我为什么要发布这个?我的目标是为激光雷达设备创建一个简单、开放的平台,因为它们越来越普及。如果您认为有什么地方应该有所不同,请随时修改源代码,并在评论中发布结果。
背景
如前所述,本技巧仅描述了整个通信库(绿色块)的一部分,而该库又是(所有块组合在一起的)我内部用于演示激光雷达设备的库框架的一部分。该库已经使用了大约2年,并且在我们的演示和现场测试中效果良好。
所有较小的独立部分,它们**可以**最轻松地将SICK激光雷达数据转换为3D点云、LAS、CSV、位图或3D点云,让您能够从这些设备生成出色的点云数据、3D表示或位图。
本示例向您展示了如何创建UDP广播消息。对于LIDAR设备,这类消息用于在本地网络上识别新设备,因为UDP不需要主动连接。UDP非常适合识别不在同一子网中的设备。它们可以“聊天”并协商正确的IP设置,而无需“正常”(TCP方式)连接。
在前一篇文章中,我描述了该库的TCP部分,因此如果您拥有该源代码,只需使用下面描述的示例即可。
后续文章将描述该库的串行(Serial)和USB部分的使用。另外,我将发布一篇关于NetTools
类的文章,该类将使您能够匹配IP和子网掩码,检查网络上的设备,并检索连接设备的MAC地址。
示例截图:(当然,您需要两台PC才能聊天...)
Using the Code
基本上,代码的“外观和感觉”应该与TCP示例相同(在此处找到),因此相同的规则适用。代码被设计为广播使用,而不是单播(单个目的地)代码。尽管您可以使用它,正如示例中所述,但它的目的是用作激光雷达设备的标识符。
实例化UDP广播器并在相同的发送/接收端口(示例中为30718)上打开连接
UDPBroadCast = New SICK_Communication.Ethernet.UDP()
UDPBroadCast.UDP_open(30718, 30718)
为了使本示例工作,使用了相同的发送和接收端口。使用同一端口会导致接收到的电报回显,这需要进行过滤(参见示例)。
发送电报
UDPBroadCast.Send_BroadcastMessage(NickName & " joined the chat")
发送字节也作为重载函数支持,在这种情况下,我们发送一个变量和一个固定的string
。
检查新接收的数据
单线程可以使用f.i
定时器像这样检查数据可用性
If UDPBroadCast.available > 0 Then
UDPBroadCast.Readavailable_string()
End If
也可以订阅NewData
事件以支持多线程,如
'Adding a multithreaded handler for the new data received event
AddHandler UDPBroadCast.NewDataAvailable, AddressOf NewDataRecieved
一个简单的sub
作为事件处理程序
Public Sub NewDataRecieved()
'Read the string that came available
Recievedstring = UDPBroadCast.Readavailable_string()
'Send it to a multithreaded "Add to listbox" handler
Listbox_RecieveLB_ItemAdd(Recievedstring)
End Sub
就是这样,发送和接收已说明。
关注点
在通信类中,有一个对结构库SICK_Work
的引用。这个库只是一堆功能很少的类,但它们构成了完整应用程序的支柱(如图所示)。由于这个库,可以将每个库作为独立部分使用,因为这些库之间的互连并没有在库本身内部实现。
引用文件是预编译的库文件,这些文件是示例正常工作所必需的。
通信类也可以用作简单的终端程序(类似于HW Group的Hercules Setup,我认为这是一个非常棒的工具),您可以在其中设置自己的限制。并且只需一点努力,您就可以从中创建一个键盘插入程序。总而言之,我认为将它公开可用是很棒的。
记得分享!!
历史
该程序本身根据GPL软件许可。到目前为止,这是我和我的同事 Referred to as the V4-library 的最新库改编。改进始终受到欢迎,希望您喜欢使用它。
其他技巧
TCP 客户端/服务器示例: https://codeproject.org.cn/Tips/892813/Communication-Library-Files