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


9

我有旧的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一起使用吗?


我不能回答这个问题,但我感兴趣的答案,所以你有我的赞成票
安迪又名

您怎么知道它没有传播?您没有任何代码可以阅读。您是否尝试过终端程序或串行端口监视器?还是示波器?
Jeanne Pindar 2013年

我有专用于RX / TX引脚的Saleae逻辑分析仪,并且在Python脚本中有s.readline()功能(我编辑了问题,谢谢)。
vasco


在您的计算机上,关闭串行缓冲区,并将串行缓冲区的大小设置为零。readline是否会无限期阻塞?(这应该来自您所描述的内容)
大卫

Answers:


3

通过RS-232调试SCPI的最简单方法是在现有的串行接口上​​使用终端程序。只需键入命令,看看会回来什么。该终端使您可以轻松地设置波特率,握手,回显和终止字符,而不必依赖它们之间的某些未知的串行通信库(键入的内容是发送的内容,显示的是接收到的内容)。

* IDN?不需要任何特殊的触发器或提示进行响应。如果支持该命令(根据手册,是正确的),如果终止符是正确的(由于您以前的Python工作取得了成功,则看起来是正确的),并且如果握手正确,则仪器应立即响应标识字符串。

一旦弄清了仪器的期望和返回值,就可以轻松编写Python脚本。


1
对我有用的信息先生古鲁曼+1。OP发生了什么事?
安迪(aka)

1

是晚了

尝试将DSR连接到正电压。我的33120A仅在代替负电压时才响应。

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

问候。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.