【问题标题】:Redirect serial data to Ethernet data将串行数据重定向到以太网数据
【发布时间】:2013-10-02 17:45:42
【问题描述】:

(对不起我的英语不好)。

今天,我想将所有数据从一个端口重定向到另一个端口。 (比如 socat 或 netcat,但由于它们的许可证,我不能使用这些工具)。

我的数据是未定义的(所以不是开始位或停止位)并且有不同的长度。

  • 从以太网端口到以太网端口很容易(有以太网头)。
  • 从以太网端口到串口也很容易(有以太网头知道帧的开始和结束,因此在切割数据后将数据发送到串口)。

但我的问题是从串口到以太网端口。 如果我没有标头,我如何知道何时从串口收到全帧? 因为在将数据重定向到以太网端口之前,我需要接收所有数据,并且只有在转换为以太网帧之后,我们同意?

我想到了这个解决方案: 我可以定义一个帧间延迟,如果两个串行数据字节之间的时间小于帧间延迟,则数据在同一帧中,我等待下一个数据,然后再将帧转换为以太网帧。

【问题讨论】:

  • 如果没有标头,串行输入数据上没有协议,你想要的东西是不可能以任何可靠的方式实现的。时间间隔协议不起作用。您不能通过串行链路八位字节流传输大于一个字节的“消息” - 您需要一个协议。
  • 是的,我同意。串行链路仅传输连续字节。但是通过时间间隔,我可以知道接收到的字节和下一个字节是否包含在同一帧内?
  • Modbus 是一种串行链路协议,据说它使用链路上的死时间来分隔数据包。但我从未使用过它,所以我无法评论它的效果如何。帧间延迟确实会降低吞吐量。可能需要硬件支持才能可靠地测量/检测短间隔;为此,我在一些 USART 上看到了 receiver timeout 中断。

标签: c redirect serial-port ethernet


【解决方案1】:

如果您在串行端口上使用以太网编码,包括标头,您应该可以更轻松地确定数据包边界。

还可以查看现有的 tihs 工具,例如 good old SLIP

【讨论】:

  • 例如Socat/Netcat如何在串口和以太网之间传输数据?
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2010-11-12
  • 2016-05-19
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 2016-05-26
相关资源
最近更新 更多