0

我有几个通过串行通信(RS-232 和 RS-422)通信的应用程序,我希望它们通过 TCP 或 UDP 通信而不更改它们。另一点是一些应用程序必须在 linux 上运行。我想知道是否有用于此目的的现有工具..

非常感谢!塔尔

4

3 回答 3

0

如果您对串行端口所做的只是读取和写入字节,并且如果不关心精确的时间,那么您可以用 TCP 套接字替换串行端口对象并通过套接字发送完全相同的数据已通过港口发送。最大的复杂性是 TCP 套接字上的时序比串行端口上的宽松得多,而且 TCP 套接字发送“带外”数据的机制与串行端口的不同。

我不知道通过 UDP 发送串行数据的任何标准。从概念上讲,这似乎是一件有用的事情,因为有许多基于串行端口协议的协议,在这些协议中,丢弃无法在特定时间范围内交付的数据比延迟交付更有用。例如,如果串行端口数据的预期接收者是一个嵌入式控制器,它有时会很忙以至于它会丢弃一些传入的数据,但它会在几毫秒内响应它收到的所有内容,那么 TCP 上的一秒钟打嗝连接 [不罕见] 可能会导致希望直接与控制器对话的软件重新传输命令十几次。即使设备能够检测并拒绝接收到的重传,放弃较早的传输请求比延迟交付要好。请注意,为了有用,基于 UDP 的方案必须包含足够的包装逻辑,以保证数据包永远不会乱序传递;一旦数据包的数据已经发送到串行端口,任何后来收到的 UDP 数据包都必须丢弃;接收者可能应该包含逻辑,以便如果收到许多乱序数据包,它会在收到任何序列号不紧跟最后一个的数据包后等待一会儿,以查看丢失的数据包是否在提交之前出现自己丢弃它们。基于 UDP 的方案必须包含足够的包装逻辑,以保证数据包永远不会乱序传递;一旦数据包的数据已经发送到串行端口,任何后来收到的 UDP 数据包都必须丢弃;接收者可能应该包含逻辑,以便如果收到许多乱序数据包,它会在收到任何序列号不紧跟最后一个的数据包后等待一会儿,以查看丢失的数据包是否在提交之前出现自己丢弃它们。基于 UDP 的方案必须包含足够的包装逻辑,以保证数据包永远不会乱序传递;一旦数据包的数据已经发送到串行端口,任何后来收到的 UDP 数据包都必须丢弃;接收者可能应该包含逻辑,以便如果收到许多乱序数据包,它会在收到任何序列号不紧跟最后一个的数据包后等待一会儿,以查看丢失的数据包是否在提交之前出现自己丢弃它们。

于 2013-04-16T15:05:55.010 回答
0

没有标准工具可以做到这一点。我正在考虑开发一个。在这种情况下,UDP 是理想的选择,因为它可以 100% 保证在短 LAN 上没有乱序的数据包传输,就像您的情况一样。

于 2015-08-01T19:09:28.177 回答
0

在几个项目中,我使用免费工具 Hercules ( https://www.hw-group.com/software/hercules-setup-utility ) 进行原型设计和测试阶段。没有广告的意图,只是一个推荐。

于 2021-04-20T15:06:14.113 回答