使用Pyserial时的字符转换错误
919 观看
2回复
我一直在编写一个脚本,定期地从串行设备中提取数据。除了从设备接收到的响应中包含许多问号之外,我一切正常。由于根据设备文档获取的格式正确(正确的字符数,逗号位置等),因此我很确定我的代码以某种方式解释了错误的字符。这是我的代码:
import serial, time
ser = serial.Serial(
'/dev/cu.usbserial',
baudrate = 9600,
bytesize = 8,
timeout = 3,
stopbits = serial.STOPBITS_ONE,
parity = serial.PARITY_ODD,
)
if(ser.isOpen() == False):
ser.open()
print 'Enter your commands below.\r\nInsert "exit" to leave the application.'
while 1 :
# get keyboard input
input = raw_input(">> ")
if input == 'exit':
ser.close()
exit()
else:
ser.write(input + chr(13) + chr(10))
out = ''
time.sleep(3)
while ser.inWaiting() > 0:
out += ser.read(1)
if out != '':
print '>>' + out
和用户手册中的示例输出:
ENTER COMMAND? KRDG?
RESPONSE: +273.15
ENTER COMMAND? *IDN?
RESPONSE: LSCI,MODEL331S,123456,020399
以及输出如下所示:
COMPUTERNAME$ python serialTest.py
Enter your commands below.
Insert "exit" to leave the application.
>> KRDG?
?>??4?2?8
>> KRDG?
?>??4?2??
>> *IDN?
?>L?CI,?O?EL??1?,??????,12?4?7
需要特别注意的是,在我输出的最后一行上,我代码中的“ >>”与从串行设备读取的输出串联在一起,变成了“?>”,这有点令人困惑。作为参考,该手册指定端口应配置如下:
*波特率:9600 *字符位:1个开始,7个数据,1个奇偶校验,1个停止*奇偶校验:奇数*终结符:CR(0DH)LF(0AH)
我已经尝试了端口设置的所有合理排列。看起来这可能是一个奇偶校验问题(正如我看到的其他具有相似外观的输出(归因于在线奇偶校验错误)一样),但是我尝试了所有可用的奇偶校验设置。我想知道这是否与起始位有关,因为这是我无法通过Pyserial进行控制的唯一方法。
抱歉,发帖时间长,在此先感谢您提供的所有帮助!
作者: oirectine 的来源 发布者: 2019 年 10 月 27 日回应 (2)
1像
该代码看起来正确。尝试使用ord
以了解您获得的字节(字节可能不对应于ASCII符号),如下所示:
out = []
while self.conn.inWaiting() > 0:
out.append(ord(self.conn.read(1)))
if len(out) > 0:
print out
编辑:
答案是(对于7位ASCII):
out.append(self.conn.read(1) & 0x7F)
作者: Konstantin Purtov
发布者: 01.03.2016 08:32
0像
您的代码使用8位数据字节,请尝试将其更改为7,如文档所述:
bytesize = serial.SEVENBITS,
您正在使用什么硬件串行接口?请记住,需要将两者之间的地面连接起来才能正常工作。
作者: J. P. Petersen 发布者: 02.03.2016 10:17来自类别的问题 :
- python 如何使用Python的itertools.groupby()?
- python Python:我在运行什么操作系统?
- python 如何使用Python创建可直接执行的跨平台GUI应用程序?
- python Python声音(“钟声”)
- serial-port 从VBA访问串口的最佳方法是什么?
- serial-port DTR / DSR和RTS / CTS流量控制有什么区别?
- serial-port 如何将Windows COM端口输出重定向到文件?
- serial-port pyserial - 如何读取从串行设备发送的最后一行
- ascii 如何获取字符的ASCII值?
- ascii 在普通文本<ASCII 128中使用最少的分隔符
- ascii 如何将LaTeX转换为纯文本(ASCII)?
- ascii Python字符串打印为[u'String']
- pyserial 我可以将xmodem协议与PySerial一起使用吗?
- pyserial 在Windows XP上使用pyserial模块从串行端口(COM3)读取数据
- pyserial 从条形码中读取传入的数据
- parity 如何计算纵向冗余校验(LRC)?
- parity 如何计算以下位序列的奇偶校验位?
- parity 使用Pyserial时的字符转换错误
- parity 正则表达式平价