要查询Keysight双向直流电源的OVP(过压保护)和OCP(过流保护)状态,可通过SCPI命令直接查询保护触发状态、清除保护状态或读取保护阈值,具体操作如下:
1. 查询OVP/OCP触发状态
使用以下命令查询OVP或OCP是否被触发(返回1表示触发,0表示未触发):
scpi:SOURce:VOLTage:PROTection:TRIPed? ; 查询OVP触发状态:SOURce:CURRent:PROTection:TRIPed? ; 查询OCP触发状态
示例:
python# Python代码示例(使用PyVISA)import pyvisarm = pyvisa.ResourceManager()inst = rm.open_resource('TCPIP0::192.168.1.100::INSTR') # 替换为实际地址ovp_tripped = inst.query(':SOUR:VOLT:PROT:TRIP?') # 查询OVP触发状态ocp_tripped = inst.query(':SOUR:CURR:PROT:TRIP?') # 查询OCP触发状态print(f"OVP触发状态: {ovp_tripped.strip()}") # 输出如"1"(触发)或"0"(未触发)print(f"OCP触发状态: {ocp_tripped.strip()}")
2. 清除OVP/OCP触发状态
若保护已触发,需通过以下命令清除触发状态(恢复电源输出):
scpi:SOURce:VOLTage:PROTection:CLEar ; 清除OVP触发状态:SOURce:CURRent:PROTection:CLEar ; 清除OCP触发状态
示例:
pythoninst.write(':SOUR:VOLT:PROT:CLE') # 清除OVP触发状态inst.write(':SOUR:CURR:PROT:CLE') # 清除OCP触发状态
3. 查询OVP/OCP保护阈值
通过以下命令读取当前设置的OVP或OCP阈值:
scpi:SOURce:VOLTage:PROTection:LEVel? ; 查询OVP阈值(单位:伏特):SOURce:CURRent:PROTection:LEVel? ; 查询OCP阈值(单位:安培)
示例:
pythonovp_threshold = inst.query(':SOUR:VOLT:PROT:LEV?') # 查询OVP阈值ocp_threshold = inst.query(':SOUR:CURR:PROT:LEV?') # 查询OCP阈值print(f"OVP阈值: {ovp_threshold.strip()} V") # 输出如"60.0"(60伏特)print(f"OCP阈值: {ocp_threshold.strip()} A") # 输出如"5.0"(5安培)
4. 启用/禁用OVP/OCP功能
通过以下命令启用或禁用保护功能:
scpi:SOURce:VOLTage:PROTection:STATe ON|OFF ; 启用/禁用OVP:SOURce:CURRent:PROTection:STATe ON|OFF ; 启用/禁用OCP
示例:
pythoninst.write(':SOUR:VOLT:PROT:STAT ON') # 启用OVPinst.write(':SOUR:CURR:PROT:STAT OFF') # 禁用OCP
关键注意事项
命令兼容性:不同型号的Keysight电源可能支持部分命令,需参考具体设备的《编程手册》(如N6705C Programmer's Guide)确认命令语法。
单位与范围:查询的阈值单位通常为伏特(V)或安培(A),需确保数值在电源量程内。
保护逻辑:OVP/OCP触发后,电源输出会自动关闭,需先清除触发状态(:CLEar)再重新启用输出(:OUTPut:STATe ON)。
错误处理:若命令执行失败,可通过:SYSTem:ERRor?查询错误代码(如-112表示过压保护触发)。
完整操作流程示例
python# 1. 查询OVP/OCP触发状态ovp_status = inst.query(':SOUR:VOLT:PROT:TRIP?')ocp_status = inst.query(':SOUR:CURR:PROT:TRIP?')# 2. 若触发,清除状态并重启输出if ovp_status.strip() == '1': inst.write(':SOUR:VOLT:PROT:CLE') print("OVP已清除,重启输出...") inst.write(':OUTP:STAT ON')if ocp_status.strip() == '1': inst.write(':SOUR:CURR:PROT:CLE') print("OCP已清除,重启输出...") inst.write(':OUTP:STAT ON')# 3. 查询当前保护阈值ovp_thresh = inst.query(':SOUR:VOLT:PROT:LEV?')ocp_thresh = inst.query(':SOUR:CURR:PROT:LEV?')print(f"当前保护阈值 - OVP: {ovp_thresh.strip()} V, OCP: {ocp_thresh.strip()} A")