Python 3.x 解释串行端口消息

Python 3.x 解释串行端口消息,python-3.x,Python 3.x,我试图用Python解释来自GPS设备的一些串行端口消息。 据我所知: 1) 消息是ascii格式的 2) 消息是连续流式传输的 因此,我的代码是: import serial ser = serial.Serial('COM6',9600) while True: ser.close() ser.open() line = ser.readline() print ('original code') print (line) result=line.decode(encoding

我试图用Python解释来自GPS设备的一些串行端口消息。 据我所知: 1) 消息是ascii格式的 2) 消息是连续流式传输的

因此,我的代码是:

import serial

ser = serial.Serial('COM6',9600)
while True:
 ser.close()
 ser.open()
 line = ser.readline()
 print ('original code')
 print (line)
 result=line.decode(encoding='ascii',errors='strict')
 print ('decoded msg')
 print (result)
然而,我得到了一些非常奇怪的结果:

原始代码

b'\xb5b\x02\x10\xe0\x00\'\xe4B\x01\xd7\x06\t\x00\x00\x00t\x07\xc0\x1f\x1aA\x80g*F\xc2\x8csA\xa4\xc9P\xc4\x13\x04\x19\x03\x12\xea\x86\xa1\xcc\xc16\xc1z\x19x\xab\x93asA\xde7\x16E\x0b\x07"\x00\x00\x80T7\xb1\xee&\xc1\xc6M[\xb8K\xc1sA\xec\x02\x88D\x07\x04\x16\x03\x00\x00\xf9G\x9b\xc7+A\x19\xd1\x0e\xce\x92\x12tA\xdc\x97\xcc\xc4\x03\x04\x18\x03\x00\x80`\xa9\xb3\x0b/A\x0c\x1c\x19\xa0\x1b\x0euA2\xc2\xdf\xc4\x1b\x04\x16\x03\r\xd0\x9c\x81\x03\xa7@\xc1s-\xb2\xe9{\xc3tA\xd1AdE\x01\x07"\x00\x00\xc0/"&\x150A9\n'
Traceback (most recent call last):
  File "C:/2_Task1/test2.py", line 11, in <module>
    result=line.decode(encoding='ascii',errors='strict')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb5 in position 0: ordinal not in range(128)
b'\xb5b\x02\x10\xe0\x00\'\xe4B\x01\xd7\x06\t\x00\x00\x00\x07\xc0\x1f\x1aA\x80g*F\xc2\x8csA\xa4\xc9P\xc4\x13\x04\x19\x03\x12\xea\xea\x86\xa1\xcc\xc16\xc1z\x19x\xab\x93asA\XCE7\x16E\XB07\xb1\xb1\xb1\X0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3TA\xd1AdE\x01\x07“\x00\x00\xc0/”&\x150A9\n”
回溯(最近一次呼叫最后一次):
文件“C:/2_Task1/test2.py”,第11行,在
结果=行.decode(encoding='ascii',errors='strict')
UnicodeDecodeError:“ascii”编解码器无法解码位置0中的字节0xb5:序号不在范围内(128)
我想做的是: 1) 在不丢失任何数据的情况下对消息进行解码,以清晰的格式存储所有数据
2) 知道为什么每次我运行循环时代码的长度都不一样。

.readline()
会一直读到换行。您可能需要使用类似于
.read(100)的东西
。您可以在串行对象上设置一些标志,这些标志可能会解决您的问题。请尝试对
ser.parity
ser.bytesize
进行不同的设置,这可能会有所帮助。如果您的系统使用奇偶校验位,这可以解释为什么您的数据看起来超出ASCII范围。