要使用SCPI指令查询双向直流电源输出电流序列的步进执行时间(包括延迟时间),核心在于利用序列模式下的索引查询指令和参数读取功能,结合电源的序列配置指令实现。以下是具体步骤和指令说明:
查询当前序列点索引
指令:
SOURce:LIST:INDEx?
功能:返回当前正在执行的序列点序号(从1开始)。通过连续查询该指令,可计算从一个序列点切换到下一个序列点所需的时间,即步进执行时间。
查询序列点参数
指令:
SOURce:LIST:CURRent:DATA
功能:返回第
n
个序列点的电流值和持续时间(如
-5,2
表示-5A持续2秒)。部分电源支持通过该指令间接验证步进时间设置。
查询序列状态
指令:
SOURce:LIST:FUNCtion?
功能:确认序列模式是否已启用(返回
1
表示启用,
0
表示禁用)。若未启用,需先通过
SOURce:LIST:FUNCtion ON
激活序列模式。
进入远程模式并复位设备(可选)
plaintextSYSTem:REMote // 进入远程控制模式*RST // 复位设备(恢复默认设置)
配置序列参数(示例:3个序列点)
plaintextSOURce:LIST:COUNt 3 // 设置序列点数量为3SOURce: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秒
SOURce:LIST:FUNCtion ON // 启用序列模式
启动输出并监控步进时间
plaintextOUTPut:STATe ON // 开启输出
SOURce:LIST:INDEx?
记录索引变化时刻,计算步进时间。
pythonimport pyvisaimport timerm = pyvisa.ResourceManager()power = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")prev_index = 0start_time = time.time()while True: current_index = int(power.query("SOUR:LIST:INDEx?")) if current_index != prev_index and prev_index != 0: elapsed_time = time.time() - start_time print(f"步进 {prev_index}→{current_index}: {elapsed_time:.3f}秒") start_time = time.time() # 重置计时器 prev_index = current_index time.sleep(0.01) # 避免频繁查询
验证序列点参数
plaintextSOURce:LIST:CURRent:DATA1? // 查询第1点参数(应返回“-5,2”)
Keysight N6700系列:
支持直接通过
SOURce:LIST:CURRent
定义序列点,但需结合时间参数(如
SOUR:LIST:CURR -5,0,10
需额外配置时间)。
ITECH IT6000系列:
时间单位可能为100μs,需确认手册(如
LIST:CURR:DATA1 -5,2000
表示200ms)。
Chroma 62000P系列:
使用
PROG:LIST:CURR:DATA
定义序列点(如
PROG:LIST:CURR:DATA1 -5,2
)。
plaintextSYSTem:ERRor? // 返回错误信息(如“-400 Parameter Error”表示参数错误)
SOUR:LIST:FUNC?
应返回
1
)。
OCP
/
OVP
)。
?
查询)。
pythonimport pyvisaimport timerm = pyvisa.ResourceManager()power = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")# 1. 初始化设备power.write("SYST:REM")power.write("*RST")# 2. 配置序列power.write("SOUR:LIST:COUN 3")power.write("SOUR:LIST:CURR:DATA1 -5, 2")power.write("SOUR:LIST:CURR:DATA2 0, 1")power.write("SOUR:LIST:CURR:DATA3 10, 3")power.write("SOUR:LIST:FUNC ON")# 3. 启动输出并监控步进时间power.write("OUTP ON")time.sleep(0.1) # 等待输出稳定prev_index = 0step_times = []while True: current_index = int(power.query("SOUR:LIST:INDEx?")) if current_index != prev_index and prev_index != 0: elapsed_time = time.time() - start_time step_times.append(elapsed_time) print(f"步进 {prev_index}→{current_index}: {elapsed_time:.3f}秒") start_time = time.time() prev_index = current_index # 检查是否完成所有步进 if current_index == 3 and len(step_times) == 2: break time.sleep(0.01)# 4. 输出结果print("n步进时间统计:")for i in range(len(step_times)): print(f"步进 {i+1}: {step_times[i]:.3f}秒")power.close()