我有一个python程序试图从串口读取14个字节 来得很慢。我想要捕获a中的所有字节 字节组[14]。我知道python 3.0中有新的字节数组功能,但是 我只运行python 2.6.6。升级可能会产生意想不到的后果,所以我必须这样做 坚持2.6.6。
数据仅间歇性地流过串行端口。我收到一条消息 也许每2分钟一次左右。这些数据流动非常缓慢。我看到的问题是 我的代码不能一次一个字节地相关地读取数据。我想构建这个 恰好14个字节的数据,然后处理数据并重新开始新的14 字节。
我在这里采取了错误的做法吗?建议?
ser = serial.Serial('/dev/ttyUSB1', 1200, timeout=0)
ser.open()
print "connected to: " + ser.portstr
count=0
while True:
line =ser.readline(size=14) # should block, not take anything less than 14 bytes
if line:
# Here I want to process 14 bytes worth of data and have
# the data be consistent.
print "line(" + str(count) + ")=" + line
count=count+1
ser.close()
这是我所期待的:line(1)= 0~88.ABC /以回车结束
----------开始输出------
line(0)=0
line(1)=~ ??1. ABC � # here get some multiple bytes and stuff gets out of synch
�ine(2)=
line(3)=0
line(4)=~
line(5)=
line(6)=8
line(7)=8
line(8)=8
line(9)=.
line(10)=
line(11)=A
line(12)=B
line(13)=C
line(14)=
line(15)=�
line(16)=
#...
line(48)=
line(49)=�
line(50)=0
line(51)=~
line(52)=
line(53)=8
line(54)=8
line(55)=8
line(56)=.
line(57)=
line(58)=A
line(59)=B
line(60)=C
line(61)=
line(62)=�
line(63)=
line(64)=
----------结束输出------
答案 0 :(得分:4)
PySerial的API文档说readline()读取直到\ n,或直到达到大小。但是,read()函数表示它将阻塞,直到达到大小。这两个函数都表示如果设置了超时,它们将提前返回。
Possible values for the parameter timeout:
timeout = None: wait forever
timeout = 0: non-blocking mode (return immediately on read)
timeout = x: set timeout to x seconds (float allowed)
也许尝试timeout=None
而不是timeout=0
答案 1 :(得分:2)
试试这个:
ser = Serial('/dev/ttyUSB1', 1200, timeout=0)
print "connected to: " + ser.portstr
count=0
while True:
for line in ser.readlines()
print "line(" + str(count) + ")=" + line
count=count+1
ser.close()
如果您没有使用line.strip()
功能,您可能也会感兴趣。此外,强调ser.readlines()
中的 s ,与.readline()
不同。
答案 2 :(得分:-1)
更改波特率。
ser = serial.Serial('/dev/ttyUSB1', 9600, timeout=0)
兼容波特率。
获取14字节数据:
data = ser.read(size=14)