![Wyse 客户端上的串行端口返回随机错误](https://linux22.com/image/1557868/Wyse%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%8A%E7%9A%84%E4%B8%B2%E8%A1%8C%E7%AB%AF%E5%8F%A3%E8%BF%94%E5%9B%9E%E9%9A%8F%E6%9C%BA%E9%94%99%E8%AF%AF.png)
我们正在测试一个较新的 Wyse 客户端(Z90D7 型号),该客户端有一个串行端口连接到 PC。我们有一个使用专用设备的外部客户,但是 PC 是我们用于测试的设备。我们通过 Citrix 在客户端上运行 C# 应用程序。当我们在旧的 Wyse 设备上运行我们正在使用的应用程序时,一切都运行良好,没有任何错误。然而,在新设备上,串行端口大约每 10 次尝试工作一次。所有其他时间,它都会给我一个溢出错误、奇偶校验错误或 RXOver 错误。
我已经通过日志验证端口确实打开了,并且在打开后执行了几个命令。然而,发生了随机错误在任何实际数据能够被传输之前。 我在很多地方都看到过,这可能是缓冲区问题,但是我还没有看到任何帖子提到在接收到数据之前发生的错误,所以我并不完全确定。
我也尝试过使用握手和更大的读/写缓冲区,但没有成功。我尝试了一条新电缆和此设备上的第二个 COM 端口,也没有成功。我们的默认设置是:
9600 波特、偶校验、8 个数据位、1 个停止位
鉴于这是在 Citrix 上运行的,我们还必须运行此处显示的 net use 命令在执行任何操作之前。不这样做会导致串行连接始终显示已连接但未接收任何数据(旧设备上也会出现这种情况)。我们正在执行的确切命令(当然,应用程序名称已更改)是:
net use com1 /DELETE
net use com2 /DELETE
net use com1: \\client\com1:
net use com2: \\client\com2:
start /d "D:\myapp" MyApplication.exe
处理过串行端口的人是否听说过这三个错误像这样交替出现?除了一个故障端口(或者两个故障端口)之外,还有其他原因可能导致这种情况?我认为硬件缓冲区大小可能是问题所在,但找不到任何方法来解决这个问题。
答案1
所有错误似乎都表明数据没有移动,而且是双向的。
RXOver 表示清空接收缓冲区的速度不够快。Overrun 表示串口驱动程序清空芯片发送缓冲区的速度不够快。
我不确定是否有办法增加硬件缓冲区大小。Windows 缓冲区可以通过 API 增加,但驱动程序可能会忽略它。
我建议尝试更多的设备来更好地了解问题,也许是与您的测试计算机的一些兼容性问题。
文章 5 个常见的串行端口问题 列出了此类问题的一些可能原因:
通信参数不正确
两个设备都需要设置相同的通信参数,包括波特率、奇偶校验、数据位数和停止位数。串行电缆不正确
- 串行电缆损坏
- 接线错误