Serial port 写入串行端口:速度过快时会出现乱码

Serial port 写入串行端口:速度过快时会出现乱码,serial-port,Serial Port,我目前正在写一个串口来刺激一个设备。接口以特定形式的字符串工作,以换行符和回车符终止 波特率为9600,8N1。我们正在使用USB到串行转换器来创建虚拟COM端口 问题是:只有在每次发送一个字节的字符串(如“ABC123FF”)时,这种方法才有效,每个字节之间至少有5毫秒的延迟 简单有效的代码(C#): 但是,在没有睡眠的情况下调用Write函数根本不起作用。如果有什么得到回应,那只是几个问号。使用port.WriteLine()也有同样的问题 我也用COM(CreateFile、WriteFi

我目前正在写一个串口来刺激一个设备。接口以特定形式的字符串工作,以换行符和回车符终止

波特率为9600,8N1。我们正在使用USB到串行转换器来创建虚拟COM端口

问题是:只有在每次发送一个字节的字符串(如“ABC123FF”)时,这种方法才有效,每个字节之间至少有5毫秒的延迟

简单有效的代码(C#):

但是,在没有睡眠的情况下调用Write函数根本不起作用。如果有什么得到回应,那只是几个问号。使用port.WriteLine()也有同样的问题

我也用COM(CreateFile、WriteFile)尝试过这个方法,但也有同样的问题

在PuTTy中与它接口是可行的,但我猜这是因为PuTTy发送字节的速度与我键入字节的速度一样快(大于10ms)

这是怎么回事


编辑:不幸的是,我无法再访问该设备,因此无法验证任何建议的修复。

在阅读之前,您需要等待一些信息。 在调用ReadExisting之前,设备没有时间响应。 这不管用吗

Write(port, "ABC123FF", false);
Thread.Sleep(100)
Console.Out.WriteLine("PORT: " + port.ReadExisting());

理想情况下,您可以使用读取(缓冲区、偏移量、计数)来等待输入内容。

如果您的模拟设置正确,则不需要字节之间的延迟。设备是否附带规定9600/8/N/1的文档?没有使用足够的停止位或奇偶校验错误是简单的解释。您似乎也使用RS-485,它需要正确端接,否则您将有电气问题。联系供应商寻求支持。@HansPassant是什么让您相信他可能在使用RS-485?不过,非常想知道@HansPassant是如何从以下问题中得出这一结论的:)谢谢您的回答!不幸的是,我从原始代码库和原始问题中删除了三个项目,所以我无法验证这是否解决了我的问题。我确信我在设备的配置方面做了一些错误的事情(这是非常利基和定制的),因为没有任何指导或帮助似乎能解决我所看到的奇怪问题。啊,废话。我不知道这个职位这么老。
Write(port, "ABC123FF", false);
Thread.Sleep(100)
Console.Out.WriteLine("PORT: " + port.ReadExisting());