【发布时间】:2013-11-23 08:41:00
【问题描述】:
我正在使用 Python 中的脚本通过串行端口以 2Mbps 的速度从 PIC 微控制器收集数据。
PIC 以 2Mbps 的完美时序工作,FTDI USB 串行端口在 2Mbps 下也能正常工作(均已通过示波器验证)
我每秒发送消息(大约 15 个字符的大小)大约 100-150 次,并且数量会增加(以检查我是否有消息丢失等等)
在我的笔记本电脑上,我将 Xubuntu 作为虚拟机运行,我可以通过 Putty 和我的脚本(python 2.7 和 pySerial)读取串行端口
问题:
- 通过 Putty 打开串行端口时,我看到所有消息(消息中的计数器以 1 递增 1)。完美!
- 通过 pySerial 打开串行端口时,我看到所有消息,但不是每秒接收 100-150 倍,而是每秒大约 5 次接收它们(消息仍以 1 递增 1),但它们可能存储在某个缓冲区中我把PIC关掉了,我可以去厨房回来,我仍然收到消息。
这里是代码(我省略了大部分代码,但循环是一样的):
ser = serial.Serial('/dev/ttyUSB0', 2000000, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False) #Tried with and without the last 3 parameters, and also at 1Mbps, same happens.
ser.flushInput()
ser.flushOutput()
While True:
data_raw = ser.readline()
print(data_raw)
有谁知道为什么 pySerial 从串口读取到行尾要花这么多时间? 有什么帮助吗?
我想实时拥有它。
谢谢
【问题讨论】:
-
你能试试用
ser.read()代替ser.readline()吗? -
我使用 ser.read(),在未收到 \n 时读取,在收到字符串时逐个字符地添加,速度仍然相同。
-
不要等到收到
\n- 只需在每个字符到达时打印出来。您是一次突然收到大量角色,还是每个角色自己出现? -
因为我在做 ser.read() 然后 print() 我每行得到一个字符
-
@VascoBaptista 使用公认的解决方案(删除超时并使用
inWaiting()),Python 仍然有可能必须等待接收所有字节才能打印出整个消息(多个字节)。这在逻辑上会导致延迟。您的系统是否仍然实时您能确认一下吗?
标签: python python-2.7 serial-port pyserial