【发布时间】:2013-10-02 17:45:42
【问题描述】:
(对不起我的英语不好)。
今天,我想将所有数据从一个端口重定向到另一个端口。 (比如 socat 或 netcat,但由于它们的许可证,我不能使用这些工具)。
我的数据是未定义的(所以不是开始位或停止位)并且有不同的长度。
- 从以太网端口到以太网端口很容易(有以太网头)。
- 从以太网端口到串口也很容易(有以太网头知道帧的开始和结束,因此在切割数据后将数据发送到串口)。
但我的问题是从串口到以太网端口。 如果我没有标头,我如何知道何时从串口收到全帧? 因为在将数据重定向到以太网端口之前,我需要接收所有数据,并且只有在转换为以太网帧之后,我们同意?
我想到了这个解决方案: 我可以定义一个帧间延迟,如果两个串行数据字节之间的时间小于帧间延迟,则数据在同一帧中,我等待下一个数据,然后再将帧转换为以太网帧。
【问题讨论】:
-
如果没有标头,串行输入数据上没有协议,你想要的东西是不可能以任何可靠的方式实现的。时间间隔协议不起作用。您不能通过串行链路八位字节流传输大于一个字节的“消息” - 您需要一个协议。
-
是的,我同意。串行链路仅传输连续字节。但是通过时间间隔,我可以知道接收到的字节和下一个字节是否包含在同一帧内?
-
Modbus 是一种串行链路协议,据说它使用链路上的死时间来分隔数据包。但我从未使用过它,所以我无法评论它的效果如何。帧间延迟确实会降低吞吐量。可能需要硬件支持才能可靠地测量/检测短间隔;为此,我在一些 USART 上看到了
receiver timeout中断。
标签: c redirect serial-port ethernet