如何通过 RS232 在 HP33120A 上使用 SCPI?

电器工程 测量 rs232 控制
2022-01-12 14:46:27

我有旧的 Hewlet Packard 33120A 函数发生器(它应该与Agilent 33120A相同类型),我想用 MCU(ATMega)控制它。发生器具有 RS232 并使用 SCPI 命令。

我用 MAX232 做了简单的 RS232 到 TTL 转换器,只有 RX 和 TX 线。根据用户指南(第 4 章,DTR/DSR 握手协议部分),我将 DSR 连接到逻辑 TRUE(负电压)并且 DTR 未连接。此配置应禁用硬件握手。

现在,我可以将转换器连接到 MCU 或计算机。对于我的第一个实验,我使用了计算机和这个 Python 脚本:

import serial, sys, time

if __name__ == '__main__':
        if len(sys.argv) < 2:
                print 'Usage: %s <serial_port>' % sys.argv[0]
                sys.exit(1)

        s = serial.Serial(port=sys.argv[1], baudrate=2400, bytesize=8, parity='N', stopbits=2, timeout=None, xonxoff=0, rtscts=0)

        time.sleep(0.5)
        s.write('\n*CLS\n')
        time.sleep(0.5)
        s.write('SYST:REM\n')
        time.sleep(0.5)
        s.write('APPL:SIN 30E+3, 0.1\n')


        s.close()

这没有任何问题。发生器按预期将其输出设置为 30kHz。问题是,当我尝试从生成器读取一些响应时。例如,这应该返回设备名称:

        s.write('*IDN?\n')
        print s.realine()

我很确定响应存储在生成器的输出缓冲区中,但实际上没有数据传输。

是否有任何命令可以触发从缓冲区传输数据?还是我需要启用硬件握手?

有人有这个发电机吗?您是否将它与 RS232 和 SCPI 一起使用?

2个回答

通过 RS-232 调试 SCPI 的最简单方法是使用带有现有串行接口的终端程序。只需键入命令,看看会返回什么。该终端允许您相当轻松地摆弄波特率、握手、回显和终止字符,而无需依赖它们之间的一些未知的串行通信库(您输入的内容就是您发送的内容,接收的内容就是显示的内容)。

*国际化域名?不需要任何特殊的触发器或响应提示。如果支持该命令(根据手册,它是),如果终止字符是正确的(它似乎是,因为你以前的 Python 工作取得了一些成功)并且如果握手是正确的,仪器应该立即响应标识字符串。

一旦您准确地确定了仪器的期望和返回值,您就可以轻松地编写 Python 脚本。

有点晚了,但是...

尝试将 DSR 连接到正电压。我的 33120A 只有在我这样做而不是连接到负电压时才会响应。

我将 RealTerm 与 FTDI USB-RS232 转换器一起使用,并将 CTS(PC)连接到 DSR(33120a),但在通信期间通过 RealTerm 管理(并保持)CTS 的电压(程序中有一个选项)。

问候。