要使用SCPI指令验证双向直流电源输出电流序列的步进输出是否正确,需通过查询实际输出值、序列状态和错误日志进行多维度确认。以下是分步骤的详细方法:
指令:
plaintextMEASure:CURRent?
或(部分设备支持):
plaintextSOURce:CURRent?
功能:返回电源当前输出的实际电流值(单位:A)。
示例:
发送
MEAS:CURR?
,若返回
-5.000
,表示当前输出为-5A。
PROG:LIST:CURR:DATA?
查询序列中各点的设定值。
PROG:LIST:COUNt?
确认点数)。
OUTPut:STATe?
确认是否为
1
)。
SYST:ERR?
查询错误代码)。
指令:
plaintextPROG:LIST:INDEx?
功能:返回当前正在执行的序列点序号(从1开始)。
示例:
发送
PROG:LIST:INDEx?
,若返回
3
,表示正在执行第3个序列点。
PROG:LIST:CURR:DATA?
确认各点顺序。
PROG:LIST:INDEx?
,观察索引是否按1→2→3…递增。
PROG:LIST:FUNCtion?
确认是否为
ON
)。
SYST:ERR?
查询错误)。
指令(示例,具体指令需参考手册):
plaintextPROG:LIST:TIME:REMain?
或通过时间戳计算:
PROG:LIST:INDEx?
变化时刻(如第1点开始时间
T1
)。
T2
,计算第1点实际持续时间
ΔT = T2 - T1
。
PROG:LIST:CURR:DATA1?
返回的设定时间
T_set
,若
|ΔT - T_set|
超过允许误差(如±5%),需检查时钟同步或触发源。
pythonimport pyvisaimport timerm = pyvisa.ResourceManager()power = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")# 查询序列总点数count = int(power.query("PROG:LIST:COUNt?"))print(f"序列总点数: {count}")# 查询各点预期值与时间expected_values = []for n in range(1, count + 1): data = power.query(f"PROG:LIST:CURR:DATA{n}?").split(",") expected_values.append((float(data[0]), float(data[1]))) # (电流, 时间)# 启动输出(若未启动)power.write("OUTPut:STATe ON")power.write("PROG:LIST:FUNCtion ON")# 验证步进输出for i, (expected_curr, expected_time) in enumerate(expected_values, 1): start_time = time.time() while True: # 查询当前点索引 current_index = int(power.query("PROG:LIST:INDEx?")) if current_index == i: break time.sleep(0.01) # 避免频繁查询 # 查询实际电流 actual_curr = float(power.query("MEAS:CURR?")) print(f"点{i}: 预期电流={expected_curr}A, 实际电流={actual_curr}A") # 验证电流误差(假设允许误差±0.1A) if abs(actual_curr - expected_curr) > 0.1: print("⚠️ 电流误差超限!") # 验证持续时间(通过时间戳模拟) if i
OUTPut:STATe?
是否为
1
。
PROG:LIST:FUNCtion?
为
ON
)。
TRIGger:SOURce?
是否为
BUS
或
EXT
)。
SYST:ERR?
返回
0
或无保护触发)。
SOURce:CURRent:FILTer
是否启用)。
-400 Parameter Error
:检查指令语法或参数范围。
-107 No Sequence Active
:序列未启用或未加载。