我想使用 pySerial 通过内置 RS-232 端口与 Agilent 33250A 进行通信。我浏览了用户手册中的RS-232配置并编写了以下代码,如果我没有记错的话,应该将正确的配置设置为
serial.Serial
(在仪器中我有波特率9600
,奇偶校验)位None/8 Bits
,和握手DTR
):
import serial
ser = serial.Serial(
port = '/dev/ttyUSB0',
timeout = 1,
dsrdtr = True,
)
ser.write(b'*IDN?')
s = ser.read(99)
print(s)
当它应该打印类似
b''
的内容时,它总是打印 timeout=1
,因为 b'Agilent Technologies,33250A,0,m.mm-l.ll-f.ff-gg-p'
。相反,如果我发送命令 ser.write(b'APPL:SIN 5 KHZ, 3.0 VPP, -2.5 V')
,我希望设备更改其设置(请参阅此处),但什么也没有发生。每次我使用 ser.write(b'...')
发送任何内容时,仪器都会自动切换到远程模式,因此它会收到一些内容。
我错过了什么?我不知道如何在 pySerial 中更改的唯一设置是“起始位数”,对于我的设备来说是 1。
我发现了问题,每个命令末尾都缺少一个
\n
。我在手册中没有找到这个,我只是尝试了一下,现在可以了。所以现在完整的代码是这样的:
import serial
ser = serial.Serial(
port = '/dev/ttyUSB0',
timeout = 1,
dsrdtr = True,
)
ser.write(b'*IDN?\n')
s = ser.read(99)
print(s)