You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:06:27