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() 以寻址串行端口