使用SCPI指令配置双向直流电源输出电流序列,需通过序列模式(List Mode)定义电流值、持续时间及运行逻辑,并结合触发同步与状态查询实现精确控制。以下是具体步骤与指令示例:
进入远程模式(可选)
确保电源处于软件控制状态,避免本地操作冲突:
plaintextSYSTem:REMote
复位设备(可选)
恢复出厂默认设置,避免参数冲突:
plaintext*RST
设置序列点数
定义序列中包含的电流点数量(如3个点):
plaintextSOURce:LIST:COUNt 3
定义每个序列点的电流值与持续时间
为每个点设置目标电流(支持负值实现双向输出)及保持时间(单位依设备而定,如秒或毫秒):
plaintextSOURce:LIST:CURRent:DATA1 -5, 2 // 第1点:-5A,持续2秒SOURce:LIST:CURRent:DATA2 0, 1 // 第2点:0A,持续1秒
SOURce:LIST:CURRent:DATA3 10, 3 // 第3点:10A,持续3秒
启用序列模式
激活序列功能,使电源按预设顺序输出:
plaintextSOURce:LIST:FUNCtion ON
禁用循环(可选)
若需单次执行序列(不自动重复),关闭循环模式:
plaintextSOURce:LIST:CYCLe OFF
内部触发(软件触发)
通过软件指令立即启动序列:
plaintextTRIGger:SOURce IMMediate // 选择内部触发源TRIGger:INITiate // 发送触发信号
外部触发(硬件触发)
通过TTL信号同步启动序列(如与示波器或数据采集卡联动):
plaintextTRIGger:SOURce EXTernal // 选择外部触发源TRIGger:SLOPe POSitive // 上升沿触发(或NEGative)
OUTPut:STATe ON // 准备输出,等待触发
多设备同步(主从模式)
若需多台电源同步执行序列(如三相测试),配置主从设备:
plaintextSYSTem:COMMunicate:SYNC:ROLE MASTER // 设为主设备SYSTem:COMMunicate:SYNC:OUTput ON // 输出同步信号
plaintextSYSTem:COMMunicate:SYNC:ROLE SLAVE // 设为从设备SYSTem:COMMunicate:SYNC:INput ON // 接收同步信号
查询序列是否启用
plaintextSOURce:LIST:FUNCtion? // 返回"ON"表示已激活
查询当前序列点位置
plaintextSOURce:LIST:INDEx? // 返回当前执行的点序号(如"2"表示第2点)
查询实际输出电流
plaintextMEASure:CURRent? // 返回当前输出电流值(单位:A)
错误处理
若序列执行失败,查询错误代码定位问题:
plaintextSYSTem:ERRor? // 例如返回"-400"表示参数超出范围
pythonimport pyvisaimport time# 连接电源rm = pyvisa.ResourceManager()power = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR") # 替换为实际地址# 初始化配置power.write("SYSTem:REMote")power.write("*RST")# 配置序列参数power.write("SOURce:LIST:COUNt 3")power.write("SOURce:LIST:CURRent:DATA1 -5, 2") # 第1点:-5A,2秒power.write("SOURce:LIST:CURRent:DATA2 0, 1") # 第2点:0A,1秒power.write("SOURce:LIST:CURRent:DATA3 10, 3") # 第3点:10A,3秒power.write("SOURce:LIST:FUNCtion ON") # 启用序列power.write("SOURce:LIST:CYCLe OFF") # 禁用循环# 启动序列(内部触发)power.write("TRIGger:SOURce IMMediate")power.write("TRIGger:INITiate")# 实时监控输出try: while True: current = float(power.query("MEASure:CURRent?")) point_index = int(power.query("SOURce:LIST:INDEx?")) print(f"当前序列点: {point_index}, 输出电流: {current:.2f}A") time.sleep(0.5) # 采样间隔500msexcept KeyboardInterrupt: power.close()
SOURce:LIST:COUNt?返回的总点数。PROG:LIST:CURR:DATA),需参考具体型号手册。