【发布时间】:2022-07-31 18:05:08
【问题描述】:
问题描述: 我正在尝试使用 rs232 检索存储在设备上的所有数据。
如何?:对于这个特定的设备,我需要:
-
第 1 步:通过串行端口 (COM5) 发送一个字节 (0x80) -
uInt8(8 位无符号整数),并期望收到 0x81 作为响应。 - 第 2 步:发送第二个字节 (0x81) 并期望逐行接收存储的所有数据。
注意:设备会自动传输其拥有的数据。它一次只接受一个字节(在我的情况下,一次发送两个字节就足以检索数据 --- Step 1 和 Step 2)。
设备测试:在运行我的实验之前,我首先测试了我的串行连接是否正常工作。首先,我使用名为RealTerm: Serial/TCP Terminal 的终端仿真程序测试了串行连接。其次,我使用shell commands 运行 Matlab 测试。我可以为这两个测试检索存储在设备上的所有数据。
我尝试过什么?:我尝试过写Python Script 和Node.js Script。不幸的是,这两个脚本都不起作用,每当我发送 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。此外,rs232.read(size=5) 给出相同的值!!好吧,我是嵌入式编程的新手。对于此处的任何混淆,我深表歉意。
我还阅读了有关使用 缓冲区 的内容,但不知道如何将其用于我的实验(步骤 1 和 步骤 2 )。
我期待什么?我希望能够编写 Python 脚本而不是使用 Python Shell 来检索存储在设备中的所有数据并将其逐行保存到 CSV 文件中.
【问题讨论】:
-
你试过在终端运行
python -m serial.tools.list_ports吗? -
为什么不参考搜索找到的这篇文章的程序呢? serial-terminal · GitHub Topics, pyserial/miniterm.py at master - serial - GitHub
-
@0x263A,我试过了,我可以看到
COM5 -
就像我之前使用终端仿真程序的建议一样,这个问题可以再次使用终端仿真程序进行调试。使用两个相互连接的 USB 转串行适配器创建串行链路。链接的一端由您的被测程序提供服务。另一端由终端仿真程序提供服务(代替您的神秘“设备”)。使用终端模拟程序手动模拟您的神秘“设备”。可能先在两端使用终端仿真程序进行验证。
-
您应该在发送和接收之前重置输出和输入缓冲区。您还需要明确您的连接是哪种双工。
标签: python python-3.x shell serial-port embedded