Python串行端口在传输中省略字符

Posted

技术标签:

【中文标题】Python串行端口在传输中省略字符【英文标题】:Python Serial Port omitting characters in transmission 【发布时间】:2020-06-01 06:27:48 【问题描述】:

我正在创建一个使用

的脚本 python 3.7.3 pyserial 3.4 pytest 5.4.2

脚本在与另一台设备通信的 Windows 10 机器上运行。在某些情况下,我看到传递给串行模块写入方法的字符串要么在传输时缺少字符,要么在极少数情况下被替换了一个字符。我检查了波特率以确保 windows 机器和设备使用相同的波特率,并发现波特率和所有其他串行端口设置相同。

我已经在 write 方法中将 pyserial 模块钻入到文件 serialwin32.py 中。我可以看到我传入的字符串肯定是传入这个函数的。

当我在 windows 机器上使用 Teraterm 时,我不会遇到这个问题。

另外,当我在 ubuntu 机器上运行相同的 python 脚本时,问题不会发生。

任何关于问题所在的帮助将不胜感激。

【问题讨论】:

你可以尝试使用CRLF终止字符串吗? 我确实在所有字符串中使用 CRLF '\r\n' 【参考方案1】:

您使用的波特率是多少?可以增加吗?如果不是,并且它适用于 TeraTerm 但不适用于 Python,正如您所指出的,这可能是一个流控制问题,可以通过让您的代码镜像 TeraTerm 中使用的流控制来解决。如果这些都没有成功,您能否更详细地描述您在 TeraTerm 中进行的测试?使用 TeraTerm 时,您是输入数据还是粘贴数据?确保尝试粘贴数据(或者创建一个 TeraTerm 宏),该数据真正通过界面敲击数据,这样您就可以确定 TeraTerm 确实在工作,并且不会掩盖与脚本相同的问题。

【讨论】:

以上是关于Python串行端口在传输中省略字符的主要内容,如果未能解决你的问题,请参考以下文章

每当有来自串行端口 python 3.x 的新数据时,从串行数据更新 tkinter 标签

将字符串转换为 LPCWSTR 以用于 CreateFile() 以寻址串行端口

从串行端口(C/C++)读取时,如何实现 read() 超时

从串行读取数据块是不是比一次读取 1 个字符更快?

使用定时器提高读/写串行端口的速度

没有与连接的串行端口通信?