使用TCP / UDP上的串行通信

时间:2013-04-15 18:04:01

标签: interface serial-port

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

非常感谢! 塔尔

3 个答案:

答案 0 :(得分:0)

如果您对串口的所有操作都是读写字节,并且如果不考虑精确计时,那么您可以用TCP套接字替换串口对象并通过套接字发送完全相同的数据正如你将通过港口发送的那样。最大的复杂因素是TCP套接字上的时序比串行端口上的时间短得多,并且用于发送“带外”数据的TCP套接字机制与串行端口不同

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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