资讯中心

联系我们

深圳市维立信电子科技有限公司
地址:深圳市福田区红荔路第一世界广场A座8D-E
咨询电话:0755-83766766
E-mail:info@welissom.com

如何通过SCPI指令查询双向直流电源序列输出参数的当前设置?

2026-01-16 10:05:53  点击:

  要通过SCPI指令查询双向直流电源序列输出参数的当前设置,需结合设备支持的序列查询指令和参数读取指令。以下是具体方法和示例,适用于大多数支持序列编程的双向直流电源(如Keysight、Chroma、ITECH等品牌):

  一、核心思路

  序列参数分类:序列输出参数通常包括:

  电压/电流值(每一步的目标值)

  持续时间(每一步的保持时间)

  触发条件(如外部触发、内部定时)

  循环次数(序列是否重复执行)

  跳转逻辑(条件跳转或顺序执行)

  查询方式:

  直接读取序列配置:通过专用指令查询序列的每一步参数。

  读取当前活动参数:查询当前正在执行的步的参数(如电压、电流、时间)。

  读取序列状态:确认序列是否在运行、暂停或已完成。

  二、具体指令与示例

  1. 查询序列的总步数

  指令:PROG:ADV:COUN? 或 PROG:LIST:SIZE?

  (根据设备模式选择,高级模式用ADV,列表模式用LIST)

  作用:返回序列中定义的步数。

  示例:

  pythonser.write(b'PROG:ADV:COUN?n')step_count = int(ser.readline().decode().strip())print(f"Sequence total steps: {step_count}")

  2. 查询序列中某一步的电压/电流设置

  指令:

  plaintextPROG:ADV:STEP:VOLT?  ; 查询第n步的电压值PROG:ADV:STEP:CURR?  ; 查询第n步的电流值

  (为步序号,从1开始)

  示例:

  pythonstep_num = 2  # 查询第2步ser.write(f'PROG:ADV:STEP{step_num}:VOLT?n'.encode())voltage = float(ser.readline().decode().strip())print(f"Step {step_num} voltage: {voltage} V")

  3. 查询序列中某一步的持续时间

  指令:

  plaintextPROG:ADV:STEP:TIME?  ; 查询第n步的持续时间(单位:秒)

  示例:

  pythonser.write(b'PROG:ADV:STEP1:TIME?n')duration = float(ser.readline().decode().strip())print(f"Step 1 duration: {duration} s")

  4. 查询当前正在执行的步序号

  指令:PROG:ADV:ACT? 或 PROG:LIST:CURR?

  (返回当前执行的步序号,若序列未运行则返回0或错误)

  示例:

  pythonser.write(b'PROG:ADV:ACT?n')active_step = int(ser.readline().decode().strip())if active_step > 0:    print(f"Currently executing step: {active_step}")else:    print("Sequence is not running.")

  5. 查询序列的循环次数

  指令:PROG:ADV:LOOP? 或 PROG:LIST:REPE?

  (返回序列的循环次数,0表示无限循环)

  示例:

  pythonser.write(b'PROG:ADV:LOOP?n')loop_count = int(ser.readline().decode().strip())print(f"Sequence loop count: {loop_count}")

  6. 查询序列的触发模式

  指令:PROG:ADV:TRIG:SOUR?

  (返回触发源,如IMM(立即)、EXT(外部)、BUS(总线))

  示例:

  pythonser.write(b'PROG:ADV:TRIG:SOUR?n')trigger_source = ser.readline().decode().strip()print(f"Sequence trigger source: {trigger_source}")

  三、完整示例(Python + 串口)

  pythonimport serialser = serial.Serial('COM3', 9600. timeout=1)  # 根据实际端口修改def query_sequence_settings():    # 1. 查询总步数    ser.write(b'PROG:ADV:COUN?n')    step_count = int(ser.readline().decode().strip())    print(f"Total steps in sequence: {step_count}")    # 2. 查询每一步的参数(示例:前3步)    for step in range(1. min(4. step_count + 1)):  # 避免越界        ser.write(f'PROG:ADV:STEP{step}:VOLT?n'.encode())        voltage = float(ser.readline().decode().strip())        ser.write(f'PROG:ADV:STEP{step}:CURR?n'.encode())        current = float(ser.readline().decode().strip())        ser.write(f'PROG:ADV:STEP{step}:TIME?n'.encode())        duration = float(ser.readline().decode().strip())        print(f"Step {step}: V={voltage} V, I={current} A, Time={duration} s")    # 3. 查询当前活动步(若序列在运行)    ser.write(b'PROG:ADV:ACT?n')    active_step = int(ser.readline().decode().strip())    if active_step > 0:        print(f"Currently executing step: {active_step}")query_sequence_settings()ser.close()

  四、注意事项

  设备差异:

  不同厂商的指令可能不同(如Keysight用PROG:ADV,ITECH可能用LIST)。

  部分设备需先进入序列模式(如PROG:ADV:SEL 1)才能查询。

  错误处理:

  若序列未配置,查询指令可能返回错误(如-400“Invalid command”)。

  建议先查询序列状态(如PROG:ADV:STAT?)确认序列是否存在。

  单位确认:

  电压/电流的单位可能是V/A或mV/mA,需参考设备手册。

  时间单位可能是秒(s)或毫秒(ms),需通过指令或手册确认。

  序列模式:

  部分设备支持多种序列模式(如高级序列、列表序列),需选择正确的模式查询。

  五、替代方案(若设备不支持直接查询)

  通过日志或屏幕读取:部分设备支持将序列配置导出到前端面板或日志文件。

  软件界面同步:若设备通过上位机软件控制,可从软件界面获取序列配置。

  通过上述方法,可以全面查询双向直流电源序列输出参数的当前设置,确保测试或自动化流程的准确性。