资讯中心

联系我们

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

如何通过SCPI命令查询Keysight双向直流电源的列表模式输出是否成功?

2026-06-12 09:58:21  点击:

  Keysight N79xxA / N89xxA SCPI 判断 LIST 列表输出执行结果

  分四层校验:运行状态、完成标志、输出硬件状态、日志 / 缓存数据完整性、系统错误队列,层层确认列表是否完整成功跑完无异常。

  一、1. 查询列表运行实时状态(最基础)

  指令

  scpi

  SOURce:LIST:STATe?

  返回数值定义:

  0:IDLE 空闲,未运行 / 已停止

  1:RUN 正在执行列表

  2:PAUSE 暂停

  使用逻辑 启动后轮询,直到返回0代表执行流程结束;搭配*WAI阻塞等待再查询结果。

  scpi

  SOUR:LIST:RUN

  *WAI ! 仪器内部阻塞至列表结束

  SOUR:LIST:STAT?

  二、2. 校验硬件输出通道是否正常启闭

  列表结束后可配置自动关输出 / 保持 / 置零,读取输出硬件状态:

  scpi

  OUTPut?

  1:输出导通

  0:输出关闭

  配合结束模式配置反向验证:

  scpi

  ! 提前设定列表跑完关闭输出

  SOUR:LIST:END:OUT OFF

  ! 跑完查询

  OUTP? → 预期0

  可选结束模式:

  OFF 断电关输出

  HOLD 维持最后一步 V/I

  ZERO 电压电流归零、输出不切断

  三、3. 读取列表实际执行步数(判断有无中途中断)

  设定总步数 vs 实际走完步数不一致 = 中途故障停止

  scpi

  ! 查询编程设定总步数

  SOUR:LIST:COUNt?

  ! 查询已经实际执行完成的步数

  SOUR:LIST:EXEC:COUNt?

  对比: EXEC:COUNt == LIST:COUNt → 完整跑完所有步骤 EXEC:COUNt < LIST:COUNt → 过流 / 过压 / 保护触发、手动 STOP、通信中断提前终止

  示例校验:

  scpi

  SET_STEPS = `SOUR:LIST:COUN?`

  ACT_STEPS = `SOUR:LIST:EXEC:COUN?`

  if ACT_STEPS == SET_STEPS: 完整成功

  else: 异常中断

  四、4. 读取全局系统错误队列(是否运行时报保护 / 故障)

  只要运行中出现 OVP/OCP/OTP/ 硬件错误,错误码会存入队列,成功无故障则只有+0

  scpi

  SYSTem:ERRor?

  典型故障错误码(列表运行失败诱因)

  -330:Self-test failed 自检故障

  -222:Data out of range 列表电压 / 电流超限

  -240:Hardware error 硬件故障

  -250:File error 日志存储失败

  +0."No error":无任何异常

  批量清空旧错误再运行,避免历史干扰:

  scpi

  *CLS

  SOUR:LIST:RUN;*WAI

  SYST:ERR?

  五、5. DLOG/ELOG 日志缓存校验(有采样记录 = 正常输出动作)

  5.1 DLOG 电压电流采样点数校验

  列表正常运行才会产生采样点数,点数 > 0 说明输出动作完整执行

  scpi

  ! 查询LIST DLOG总采样点数

  SOUR:LIST:DLOG:POINts?

  返回0:列表未真正输出、DLOG 未采集到波形

  大于 0:有完整 V/I 时序记录

  5.2 ELOG 事件记录条数校验

  ELOG 会记录列表启动、每一步切换、保护、结束事件

  scpi

  MEM:ELOG:COUNt?

  条数 > 0 代表运行流程被仪器事件系统完整捕获。

  5.3 时序抖动缓存存在性(开启 TIM 捕获时)

  开启时序捕获后,正常运行必有抖动数据点

  scpi

  SOUR:LIST:TIM:POINts?

  点数等于执行步数即时序采集完整。

  六、6. 手动停止判断(主动终止场景)

  如果中途下发停止指令

  scpi

  SOUR:LIST:STOP

  可查询停止原因标识(新版固件)

  scpi

  SOUR:LIST:STOP:CAUSe?

  返回值:

  COMPLETE:正常全部执行完毕自动停止

  USER:SCPI 手动 STOP 停止

  PROT:保护 OVP/OCP/OTP 触发停机

  七、完整一键校验 SCPI 脚本(跑完列表后直接下发)

  scpi

  *CLS

  !1 运行状态

  PRINT "列表运行状态:";SOUR:LIST:STAT?

  !2 设定步数 vs 实际执行步数

  PRINT "总设定步数:";SOUR:LIST:COUN?

  PRINT "实际完成步数:";SOUR:LIST:EXEC:COUN?

  !3 输出硬件状态

  PRINT "通道输出状态:";OUTP?

  !4 系统错误

  PRINT "系统错误:";SYST:ERR?

  !5 DLOG采样点数

  PRINT "DLOG采样点数:";SOUR:LIST:DLOG:POIN?

  !6 停止原因

  PRINT "停止触发原因:";SOUR:LIST:STOP:CAUS?

  八、判定成功的全部合格条件(全部满足才算 100% 成功)

  SOUR:LIST:STAT? = 0 已停止空闲

  SOUR:LIST:EXEC:COUN? == SOUR:LIST:COUN? 步数完全匹配

  SYST:ERR? = +0."No error" 无故障保护报错

  DLOG 点数 > 0 / ELOG 条数 > 0 有运行记录

  停止原因COMPLETE

  九、机型差异

  N79xxA/N89xxA:全套EXEC:COUN、STOP:CAUS、TIM/DLOG/ELOG指令完整支持

  E36100 BT:无EXEC:COUN/STOP:CAUS,依靠 STAT、SYST:ERR、DLOG 点数判断

  N6705B:支持 STAT、步数、错误队列,时序抖动子系统精简

  十、Python 自动化判断示例

  python

  运行

  import pyvisa

  rm = pyvisa.ResourceManager()

  inst = rm.open_resource("TCPIP::IP::5025::INSTR")

  def is_list_run_success(inst):

  stat = int(inst.query("SOUR:LIST:STAT?"))

  set_step = int(inst.query("SOUR:LIST:COUN?"))

  act_step = int(inst.query("SOUR:LIST:EXEC:COUN?"))

  err = inst.query("SYST:ERR?")

  dlog_pts = int(inst.query("SOUR:LIST:DLOG:POIN?"))

  stop_cause = inst.query("SOUR:LIST:STOP:CAUS?").strip()

  print(f"状态:{stat},设定步数:{set_step},实际步数:{act_step}")

  print(f"错误:{err},DLOG点数:{dlog_pts},停止原因:{stop_cause}")

  # 全部合格条件

  if stat == 0 and set_step == act_step and err.startswith('0') and dlog_pts>0 and stop_cause=="COMPLETE":

  return True

  return False

  # 运行列表后调用

  success = is_list_run_success(inst)

  print("列表执行成功:", success)

  inst.close()