资讯中心

联系我们

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

如何通过SCPI指令查询双向直流电源序列历史记录的文件是否损坏?

2026-06-12 09:26:30  点击:

  一、Keysight N79xxA / N89xxA 双向直流电源 文件损坏判断完整 SCPI 流程

  仪器无单一专用FILE:CHECK校验指令,依靠文件元数据查询 + 读取测试 + 系统错误队列校验三层判断 ELOG(序列事件历史)、DLOG(序列采样记录)文件是否损坏。

  1. 第一步:读取文件基础状态元数据

  1.1 查询文件大小、存在性、存储属性

  scpi

  ! 查询文件是否存在+字节大小,替换"seq_run01.dlog"为你的日志文件名

  MEMory:FILE:SIZE? "seq_run01.dlog"

  返回正数:文件存在,返回值 = 字节数

  返回0/ 仪器报错:文件丢失、空文件、文件头损坏

  scpi

  ! 查询文件存储介质(INT内部/USB外部)

  MEMory:FILE:MEDium? "seq_run01.elog"

  异常场景:本该INT却返回空 / 报错,代表文件系统索引损坏。

  1.2 读取文件格式标识(校验文件头有效性)

  scpi

  MEMory:FILE:FORMat? "seq_run01.dlog"

  正常返回:BIN / ASC / CSV 报错 / 无返回:文件头部标识被破坏,判定损坏。

  2. 第二步:尝试读取文件内容,捕获系统错误(核心判定手段)

  读取损坏文件时仪器会立刻写入SCPI 系统错误队列,通过SYST:ERR?抓取损坏错误码。

  标准检测指令序列

  scpi

  *CLS ! 清空历史错误缓存

  MEMory:DATA? "seq_run01.dlog" ! 尝试加载日志文件

  SYSTem:ERR? ! 读取本次操作错误代码+描述

  关键错误码含义(文件损坏专属)

  表格

  

  3. 第三步:ELOG/DLOG 专属序列历史完整性校验

  3.1 ELOG(序列启停、报错、触发事件历史)完整性检查

  scpi

  ! 读取ELOG总记录条数

  MEMory:ELOG:COUNt?

  ! 逐条读取事件记录,中途报错即代表日志断裂损坏

  MEMory:ELOG:DATA? 0.100

  正常:完整返回每条序列运行时间戳、触发条件、OVP/OCP 保护记录

  中途中断 / 报错:ELOG 日志区块损坏

  3.2 DLOG(ARB 输出序列波形采样历史)完整性检查

  scpi

  ! 查询DLOG采样点数

  MEMory:DLOG:POINts?

  ! 批量读取采样电压/电流时序数据

  MEMory:DLOG:DATA?

  若返回点数为 0 但实际运行过序列、或读取中途抛出-258.DLOG 采样记录文件损坏。

  4. 第四步:校验和二次比对(高级完整性验证)

  新固件(≥6.00)支持文件 CRC 校验和读取,用于传输 / 存储前后比对:

  scpi

  ! 获取仪器内部计算的文件CRC32校验值

  MEMory:FILE:CHECKSUM? "seq_run01.dlog"

  操作逻辑:

  仪器写入日志时记录CHECKSUM

  复测读取校验值,数值不一致 = 文件被篡改 / 损坏

  5. 完整自动化 Python 检测示例(VISA)

  python

  运行

  import pyvisa

  rm = pyvisa.ResourceManager()

  inst = rm.open_resource("TCPIP::192.168.1.50::INSTR")

  filename = "seq001.elog"

  def check_file_corrupt(inst, fname):

  inst.write("*CLS")

  # 1. 查文件大小

  size = inst.query(f'MEM:FILE:SIZE? "{fname}"').strip()

  print(f"文件大小:{size} Bytes")

  # 2. 尝试读取文件

  inst.query(f'MEM:DATA? "{fname}"')

  # 3. 抓取错误

  err_code, err_msg = inst.query("SYST:ERR?").split(',')

  err_code = int(err_code)

  if err_code == 0:

  print("✅ 文件完好无损坏")

  # 读取校验和(新固件)

  try:

  crc = inst.query(f'MEM:FILE:CHECKSUM? "{fname}"').strip()

  print(f"文件CRC校验值:{crc}")

  except:

  print("当前固件不支持CHECKSUM指令")

  return False

  else:

  print(f"❌ 文件损坏 错误码:{err_code}, 详情:{err_msg}")

  return True

  # 执行检测

  is_broken = check_file_corrupt(inst, filename)

  inst.close()

  二、型号兼容区分

  N79xxA / N89xxA 大功率双向源:完整支持MEM:FILE:SIZE/FORMAT/MEDIA、SYST:ERR损坏报错、新版带CHECKSUM

  BT 小型双向源(E36100 系列):无独立 DLOG/ELOG 分支,仅用MEM:DATA? + SYST:ERR?判断全局日志文件

  老款 Agilent N6705B:指令子集一致,损坏错误码完全通用,无CHECKSUM校验

  三、损坏文件修复 / 清理配套指令

  scpi

  ! 删除损坏日志文件

  MEMory:FILE:DELete "seq_run01.dlog"

  ! 清空全部ELOG序列历史

  MEMory:ELOG:CLEar

  ! 清空全部DLOG采样记录

  MEMory:DLOG:CLEar

  ! 格式化内部存储(谨慎操作,清空所有日志/序列)

  MEMory:FORMat INT