基于RS232的设备数据读取Python脚本开发及问题排查求助
问题描述
我尝试通过RS232获取某设备上存储的全部数据。
操作流程
针对该设备,需执行以下步骤:
- 步骤1:通过串口(COM5)发送1字节数据(0x80,
uInt8,8位无符号整数),预期收到0x81作为响应。 - 步骤2:发送第二个字节(0x81),预期逐行接收设备存储的全部数据。
说明
设备会自动传输其存储的数据,且仅接受单次1字节的指令(本次只需发送两个字节即可完成数据读取,即步骤1和步骤2)。
设备测试
实验前已验证串口连接正常,分别使用终端仿真程序RealTerm: Serial/TCP Terminal及Matlab的shell命令测试,均成功获取设备存储的全部数据。
已尝试方案
编写过Python脚本和Node.js脚本,但均未成功,发送0x80后仅收到0x00,无法通过步骤1(已尝试7天)。
今日尝试使用Python Shell进行实验:
>>> import serial >>> rs232 = serial.Serial( ... port = 'COM5', ... baudrate = 115200, ... bytesize = serial.EIGHTBITS, ... parity = serial.PARITY_NONE, ... stopbits = serial.STOPBITS_ONE, ... timeout=1 ... ) >>> rs232.write(0x80) 128 >>> rs232.read(size=1) b'\x87' >>> rs232.read(size=2) b'\x87\x87' >>> rs232.read(size=5) b'\x87\x87\x87\x87\x87'
本次实验在步骤1中收到了设备返回的数据,但收到的是b'\x87'(ord(rs232.read(size=1)) -> 135)而非预期的0x80,且多次读取均返回相同值。我是嵌入式编程新手,对此感到困惑。
我了解到需使用缓冲区,但不清楚如何在本次实验(步骤1和步骤2)中应用。
预期目标
希望编写Python脚本替代Python Shell,获取设备存储的全部数据并逐行保存至CSV文件。
基于反馈的可行方案(待优化)
结合所有建议后,我得到了以下可运行的代码,但仍存在问题,希望有人能帮忙修复:
import serial, time rs232 = serial.Serial( port = 'COM6', baudrate = 115200, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, timeout=5, write_timeout=5 ) rs232.is_open rs232.set_buffer_size(rx_size = 2000000, tx_size = 2000000) # cleanup RX/TX buffer rs232.rts=True rs232.reset_input_buffer() rs232.reset_output_buffer() time.sleep(2) rs232.write(bytes([0x80, 0x82, 0x83])) time.sleep(5) while True: myBytes = rs232.readline() data.append(myBytes) print(myBytes) if myBytes == b'\r\x83\x87': break
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

