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

通信库文件 - TCP 客户端/服务器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.40/5 (4投票s)

2015年4月2日

GPL3

4分钟阅读

viewsIcon

29891

downloadIcon

960

源代码和演示,关于主要用于 SICK 激光雷达设备的通用 TCP 客户端和服务器库(或在此类设备上测试过)。

引言

此示例演示了如何使用我们我和一位同事为 SICK A.G. 激光雷达设备(例如 LMS5xx)的演示目的而制作的通信库中的 TCP 部分。

整个库本身可以使开发人员在 15 行代码内(不包括错误处理等)在屏幕上生成 3D 激光雷达图像。整个库将发布在通用下载页面上,以便于维护。

本技巧将介绍库的 TCP 客户端和服务器部分,展示 PC 回环接口上的简单客户端和服务器屏幕。

我为什么发布这个?我的目标是为激光雷达设备创建一个简单、开放的平台,因为它们被更广泛地使用。如果您发现任何应该不同的地方,请随时更改源代码并将结果作为评论发布。

背景

Library representation

如前所述,本技巧仅描述了整个通信库的一部分(绿色块),而该库又是更大框架(所有块组合在一起)的一部分,这是我内部用于演示激光雷达设备的库。该库已使用约 2 年,并且在我们的演示和现场测试中运行良好。

所有较小的独立部分,**可以**以最少的努力将 SICK 激光雷达数据转换为 3D 点云、LAS、CSV、位图或 3D 点云,从而使您能够从这些设备生成出色的点云数据、3D 表示或位图。

此示例向您展示了如何连接到服务器或设置服务器以允许设备连接到您,读取它们的数据并响应它们的传入请求。

后续文章将介绍库的 UDP、串行和 USB 部分的使用。此外,我还将发布一篇关于 `NetTools` 类的文章,该类将使您能够将 IP 与子网掩码匹配,检查网络上的内容并检索已连接设备的 MAC 地址。

3D 激光雷达距离扫描示例(使用 CloudCompare 查看的提取点云)

3D example scan of a Lidar device

Using the Code

可以创建 `SICK_communication.TCP.Client` 或 `SICK_communication.Server` 类的新实例。所有类的设置都具有相同的外观和感觉,因此熟悉 `Serial` 类应该不是大问题。已添加参考文件;这些是预编译的项目文件。

实例化后,可以建立连接,或启动服务器。

'Client connection
Private Myclient As SICK_Communication.Ethernet.TCP_client
Myclient.Client_Connect("127.0.0.1", <portnr>)

之后,只需发送数据,检查是否有任何响应,然后读取(客户端示例)。

Myclient.SendString("Hello World!")

Dim mystring as string

If Myclient.Available > 0 Then
   mystring =Myclient.Readavailable_string
End If

如果您想以字节形式读取响应,这也是可能的。底层 .NET TCP 类通过查看 TCP 帧来处理报文的开始/停止。
注意:该类不能用于流(因为这需要不同的处理)!!!!!

其他示例

检查连接状态

If Myclient.ConnectionActive = False Then
     'No connection
End If

断开连接

Myclient.Client_Disconnect()

帧类型

 'Default <STX>/<ETX> framing enabled
 Myclient.SendString("Hello STX-ETX world!", SICK_Communication.Ethernet.TCP_client.FramingTypes.Stx_Etx)

'Special Framing for LMS400 (<STX><STX><STX><STX><4 bytes frame length>MESSAGE<CRC>
Myclient.SendString("Hello LMS400", SICK_Communication.Ethernet.TCP_client.FramingTypes.ColaB_Binairy)

 'No Framing
 Myclient.SendString("Hello Unframed World", SICK_Communication.Ethernet.TCP_client.FramingTypes.none)

检查缓冲区中存储的帧数(不是字节数!!!)

Dim FramesAvailable As Integer = Myclient.Available

关注点

在通信类中,有一个对结构库 `SICK_Work` 的引用。该库只是一组功能很少的类,但它们构成了一个完整应用程序的支柱(如图所示)。因此,可以使用每个库作为独立的部分,因为这些库之间的互连没有在库本身内部实现。

USB 类使用了第二个库,并且仅限于与 SICK TiM3xx 扫描仪通信(就是这样),这是设备的一个未记录的功能。最好使用 TiM35x 型扫描仪,因为它们配备了已记录的 TCP 连接。

通信类还可以用作简单的终端程序(如 HW group 的 hercules setup,我认为这是一个非常棒的工具),您可以在其中设置自己的限制。只需稍加努力,您就可以从中创建一个键盘映射程序。总而言之,我认为使其公开可用很不错。

记得分享!!

历史

该程序本身是作为 GPL 软件许可的。到目前为止,这是我和我同事对我提到的 V4 库的最新改编。欢迎随时改进,希望您喜欢使用它。

© . All rights reserved.