65.9K
CodeProject 正在变化。 阅读更多。
Home

通信库文件 - UDP广播

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2015 年 4 月 6 日

GPL3

4分钟阅读

viewsIcon

15624

downloadIcon

732

通信库文件 - 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才能聊天...)

Screenshot

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

© . All rights reserved.