国产呦萝小初合集密码

资讯中心

联系我们

国产呦萝小初合集密码·(中国)官方网站
地址:深圳市福田区红荔路第一世界广场A座8D-E
咨询电话:0755-83766766
E-mail:info@qihuisz.com

如何用SCPI指令查询双向直流电源输出电流序列的步进执行时间?

2025-12-24 09:54:49  点击:

要使用SCPI指令查询双向直流电源输出电流序列的步进执行时间,需通过查询当前序列点索引时间参数事件日志来间接或直接获取步进时间信息。以下是分步骤的详细方法,涵盖不同设备的常见实现方式:


一、直接查询当前步进的剩余时间(若设备支持)

部分电源(如Keysight、Chroma等)提供指令直接查询当前序列点的剩余执行时间:

指令示例

								plaintextPROG:LIST:TIME:REMain?

功能:返回当前序列点剩余的持续时间(单位:秒)。
使用场景

  • 适用于需要实时监控步进进度的场景。
  • 若返回值为 0 ,表示当前步进已完成。

验证步骤

  1. 启动序列输出:
    										plaintextOUTPut:STATe ONPROG:LIST:FUNCtion ON
  2. 连续查询剩余时间,观察递减趋势:
    										pythonwhile True:    remaining_time = float(power.query("PROG:LIST:TIME:REMain?"))    print(f"剩余时间: {remaining_time:.3f}s")    if remaining_time <= 0:        break    time.sleep(0.1)

二、通过序列点索引和时间戳计算实际步进时间

若设备不支持直接查询剩余时间,可通过记录序列点切换的时刻来计算实际步进时间:

步骤

  1. 查询当前序列点索引

    										plaintextPROG:LIST:INDEx?

    返回值:当前正在执行的序列点序号(从1开始)。

  2. 记录索引变化时刻

    • 使用编程语言(如Python)记录索引从 n 变为 n+1 的时间差。
    • 示例代码
      												pythonimport timeprev_index = 0start_time = time.time()while True:    current_index = int(power.query("PROG: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}s")        start_time = time.time()  # 重置计时器    prev_index = current_index    time.sleep(0.01)  # 避免频繁查询
  3. 对比设定时间

    • 通过 PROG:LIST:CURR:DATA?  查询每个序列点的设定持续时间( T_set )。
    • 计算实际时间与设定时间的误差:
      												python_, T_set = power.query("PROG:LIST:CURR:DATA1?").split(",")  # 示例:查询第1点T_set = float(T_set)print(f"设定时间: {T_set}s, 实际时间误差: {abs(elapsed_time - T_set):.3f}s")

三、查询序列总周期(所有步进时间之和)

若需验证整个序列的重复频率,可计算所有步进时间的总和:

指令组合

  1. 查询序列点数量:
    										plaintextPROG:LIST:COUNt?
  2. 查询每个点的设定时间:
    										plaintextPROG:LIST:CURR:DATA?  # 返回电流值和时间,如 "-5,2" 表示2秒
  3. 计算总周期:
    										pythoncount = int(power.query("PROG:LIST:COUNt?"))total_time = 0for n in range(1, count + 1):    _, duration = power.query(f"PROG:LIST:CURR:DATA{n}?").split(",")    total_time += float(duration)print(f"序列总周期: {total_time}s, 频率: {1/total_time:.3f}Hz")

四、通过事件日志查询步进时间(高级设备)

部分高端电源(如Keysight N6705C)支持事件日志功能,可记录序列步进的详细时间戳:

指令示例

  1. 启用事件日志:

    										plaintextSYSTem:LOG:EVENt:STATe ONSYSTem:LOG:EVENt:MASK 16  # 启用序列步进事件(具体掩码参考手册)
  2. 查询事件日志:

    										plaintextSYSTem:LOG:EVENt:DATA?

    返回值:时间戳和事件类型(如 "STEP_CHANGE,1,2023-01-01,12:00:00.123" 表示第1步进在12:00:00.123触发)。

  3. 解析日志计算时间差:

    										pythonlogs = power.query("SYST:LOG:EVEN:DATA?").split(",")timestamps = [float(log.split(",")[2]) for log in logs if "STEP_CHANGE" in log]  # 简化示例,实际需解析日期时间if len(timestamps) >= 2:    step_time = timestamps[1] - timestamps[0]    print(f"步进时间间隔: {step_time:.3f}s")

五、常见问题与排查

  1. 查询PROG:LIST:INDEx?始终返回1
    • 检查序列是否启动: PROG:LIST:FUNCtion?  应返回 1
    • 确认触发源: TRIGger:SOURce?  应为 BUS (软件触发)或 EXT (外部触发)。
  2. 实际步进时间与设定不符
    • 检查电源是否进入保护状态(如过流/过压): SYST:ERR?
    • 确认负载是否稳定(如电容充电可能导致时间延长)。
  3. 指令报错
    • -400 Parameter Error :检查指令语法或参数范围(如 INDEx?  无需参数)。
    • -107 No Sequence Active :序列未加载或未启用。

六、完整验证流程(Python示例)

								pythonimport pyvisaimport timerm = pyvisa.ResourceManager()power = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")# 1. 查询序列参数count = int(power.query("PROG:LIST:COUNt?"))print(f"序列点数: {count}")# 2. 启动序列power.write("OUTPut:STATe ON")power.write("PROG:LIST:FUNCtion ON")# 3. 监控步进时间prev_index = 0step_times = []while True:    current_index = int(power.query("PROG: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}s")        start_time = time.time()    prev_index = current_index    # 检查是否完成所有步进    if current_index == count and len(step_times) == count - 1:        break    time.sleep(0.01)# 4. 输出结果print("n步进时间统计:")for i in range(len(step_times)):    print(f"步进 {i+1}: {step_times[i]:.3f}s")power.close()

通过上述方法,可全面验证双向直流电源输出电流序列的步进执行时间,确保其符合设计要求。实际使用时需根据设备型号调整指令和参数。


m wap