![以太网至 RS232 适配器的延迟](https://linux22.com/image/1525028/%E4%BB%A5%E5%A4%AA%E7%BD%91%E8%87%B3%20RS232%20%E9%80%82%E9%85%8D%E5%99%A8%E7%9A%84%E5%BB%B6%E8%BF%9F.png)
要求: 我在 Windows 上运行了一个软件,它使用 RS232 端口与外部设备通信。硬件接收 PC 发送的命令并响应 PC。当在计算机和硬件之间使用普通电缆时,无需任何适配器,传输和接收即可完成,大约需要 50 毫秒。当使用以太网转 RS232 适配器时,总通信时间为 (50 + x) 毫秒,延迟为 x 毫秒。
网上有很多产品,我浏览了一些产品数据表。其中有关于以太网和串行通信参数(如数据位、波特率、速度)的信息,但我找不到延迟信息。
迄今为止 我使用一个适配器(最大波特率为 230.4 kbps)来测试我的软件,但是我遇到了串行端口超时异常。
问题
这个延迟取决于什么标准?
延迟是否取决于波特率?
我应该在数据表中检查什么来确定(近似)延迟?
制造商是否提供延迟信息?
答案1
这个延迟取决于什么标准?
我猜想缓冲、数据帧、传输、协议和超时是主要的。
正如其他评论者提到的,至少存在协议转换延迟。您需要考虑端点和桥接数据缓冲、重新编码、协议开销和传输时间。延迟将受到传输前是否缓冲整帧数据以及内部超时可能是多少的影响。这些可以在一些设备中配置。
这还取决于以太网协议使用的是 UDP、TCP 还是自定义协议。这还取决于协议是否支持重传以及是否添加了额外的完整性或信令信息。同样,这些可以在某些设备中配置。我猜想,如果数据流停止,低端设备会倾向于使用不带任何完整性或重传的 UDP,并且倾向于缓冲完整的 UDP 数据帧,并设置一些内部超时以发送部分帧。
延迟是否取决于波特率?
这实际上取决于你测量的延迟。串行数据速率的差异可能会影响你的吞吐量比你的更重要潜伏。是的,它确实会影响延迟,但请记住,在 9600bps 的速度下,传输一个字节大约需要 1ms。
我应该在数据表中检查什么来确定(近似)延迟?
制造商是否提供延迟信息?
工业应用的网桥有时会提供有关延迟和/或吞吐量的信息。例如一个这样的产品页面延迟为 2ms。还有一些公司赞助的测试报告,例如2003 年竞争对手对比或者2002 年的报告比较了几种设备的延迟。测试中的延迟范围从几毫秒到平均 861 毫秒。
无论如何,听起来您的根本问题是串行端口超时而不是延迟问题。从您所说的内容来看,我暂时怀疑是软件或配置错误。串行接口库中通常指定了几个超时,例如字节间定时、多字节读取时间和写入时间。如果缓冲数据清空得不够快,还会出现缓冲区溢出错误。您可能知道,您通常可以在串行客户端中调整或禁用每个超时。
我首先要确定错误来源。您也可以将速度调低至 9600,因为廉价适配器在额定最大值下并不总是表现良好。