pyserial:如何正确接收来自电源的 rs232 答案

Posted

技术标签:

【中文标题】pyserial:如何正确接收来自电源的 rs232 答案【英文标题】:pyserial: how to receive rs232 answers from power supply correctly 【发布时间】:2018-09-14 14:05:14 【问题描述】:

我目前正在尝试通过带有 pyserial 的 RS232 与电源 (RND 320-KA3005P) 建立通信。 问题是在发送“*DIN?”后,应该返回制造商、型号名称和软件版本,连接似乎什么也没收到。也没有其他命令成功。使用附带的软件,连接后会打开一个LabView程序,并且可以远程控制设备,所以我认为问题出在我的代码中。

代码示例: 连接参数如手册中所述。 作为行尾字符,我尝试了 "\r\n","\r","\n" 这似乎解决了许多其他问题,但在这里没有成功。

import io
import serial
import time
import sys

ser = serial.Serial('COM4',
                baudrate = 9600,
                bytesize=8,
                timeout=1,
                stopbits = serial.STOPBITS_ONE,
                parity = serial.PARITY_NONE,
                xonxoff = False)

eol_char = '\r\n'
sio = io.TextIOWrapper(io.BufferedReader(ser),newline=eol_char)

while True:
    sending = input("type:\n")
    ser.write((sending + eol_char).encode('utf-8'))
    time.sleep(0.2)
    ans = sio.read()
    sys.stdout.write('received: ' + str(ans))
    print('\ntry again\n')

输入命令后显示:

type:
*DIN?
received: 
try again

type:

当我在环回上运行脚本时

ser = serial.serial_for_url('loop://',timeout=1)
...

输出:

type:
*DIN?
received: *DIN?

try again

type:

它似乎工作正常。我正在使用 Windows 10 和 USB 到 RS232 转换器。有人知道我在这里缺少什么吗?

提前致谢。

【问题讨论】:

【参考方案1】:

我想出的解决方案相当令人失望。事实证明,使用 USB 到 RS232 转换器电缆,而不是我之前使用的 USB 连接,设置和获取值的命令按预期工作。我最初尝试的命令“*DIN?”(我从手册中获得)仍然没有反应 - 可能只是不支持。

【讨论】:

【参考方案2】:

我相信 *DIN?命令,在“功能检查”下找到,应该返回:“制造商,型号名称,软件版本。”,实际上是一个错字。稍后在手册中列出所有命令时,数字 11 表示 *IDN?,应返回 KA3005P 标识。

具有讽刺意味的是,他们在 11 号下给出的示例说:“* IDN?”...

【讨论】:

以上是关于pyserial:如何正确接收来自电源的 rs232 答案的主要内容,如果未能解决你的问题,请参考以下文章

python中Pyserial如何实现RS485串口通讯

如何为pyserial读取运行线程

仅当终端应用程序在后台打开时,使用 pyserial 从串行端口读取才有效

带有 pyserial RS232 的微型开关在 tkinter 线程中启动/停止计时器,但即使停止也继续运行

rs232转rs422电路原理图

如何使用 PySerial 从 COM 端口读写?