资讯中心

联系我们

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

如何通过SCPI指令查询双向直流电源序列历史记录的文件路径长度限制?

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

  一、核心结论:无专用 SCPI 指令直接返回长度阈值

  Keysight N79xxA/N89xxA/E36100 BT/N6705B 没有MEM:PATH:LIMit?这类专用查询路径长度上限的 SCPI 命令。 获取限制分两套方案:

  试探写入 / 创建文件 + 捕获 SCPI 错误码(仪器原生判定,最准)

  上位机字符串长度校验 + 官方固件固定阈值比对

  仪器固件固定长度阈值(全系列双向源统一 FAT32 嵌入式规则)

  完整绝对路径总字符上限:127 个 ASCII 字符 格式:介质:目录1目录2文件名.后缀 整体不能超 127

  单级文件夹名最大:31 字符

  文件名(含后缀)最大:31 字符(8.3 长文件名兼容模式)

  介质前缀INT:/USB:固定占 4 字符,会挤占可用长度

  示例预留计算: INT:LOG = 7 字符,剩余可用 = 127 - 7 = 120 字符给子目录 + 日志文件名

  二、SCPI 试探法:验证当前路径 / 文件名是否超限(实操指令)

  1)测试自定义日志子目录长度上限(DLOG/ELOG)

  scpi

  *CLS

  ! 写入超长子目录名称(比如35个字母)

  MEMory:ELOG:DIRectory "A123456789A123456789A123456789A12345"

  SYSTem:ERR?

  报错判定:

  -257 File format error / -258 File corrupted:名称长度超限

  +0 No error:长度合法

  2)测试保存 DLOG/ELOG 日志文件名长度上限

  scpi

  *CLS

  ! 强制保存一条测试ELOG并指定超长文件名

  MEMory:ELOG:SAVE "TEST_LONG_NAME_123456789_123456789.elog"

  SYSTem:ERR?

  超长文件名直接返回文件格式 / 写入故障错误码。

  3)读取已有文件完整路径,上位机统计字符长度

  SCPI 取出介质、子目录、文件名

  scpi

  MEM:ELOG:MED?

  MEM:ELOG:DIR?

  MEM:CAT? "LOG"

  拼接完整路径字符串,Python / 上位机计算len(完整路径),对比 127 上限

  三、分步 SCPI 交互流程(手动排查单个序列日志文件)

  scpi

  *CLS

  !1 获取存储介质

  MEM:FILE:MED? "run001.dlog"

  !2 获取ELOG/DLOG全局子目录

  MEM:DLOG:DIR?

  !3 拼接完整路径字符串(举例)

  ! MED=INT DIR=SEQ_TEST FILE=run001.dlog → INT:LOGSEQ_TESTrun001.dlog

  !4 试探写入同名副本,看是否长度超限

  MEM:FILE:COPY "run001.dlog","run001_copy.dlog"

  SYST:ERR?

  复制失败且错误码 - 257/-258 = 路径总长超标。

  四、Python 自动化校验(路径长度统计 + 超限探测)

  python

  运行

  import pyvisa

  rm = pyvisa.ResourceManager()

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

  MAX_FULL_PATH = 127

  MAX_NAME_SEG = 31

  def check_path_length(inst, fname, log_type="DLOG"):

  # 读取介质、子目录

  if log_type == "DLOG":

  media = inst.query("MEM:DLOG:MED?").strip()

  subdir = inst.query("MEM:DLOG:DIR?").strip()

  else:

  media = inst.query("MEM:ELOG:MED?").strip()

  # 拼接完整路径

  path_parts = [f"{media}:\LOG\"]

  if subdir:

  path_parts.append(f"{subdir}\")

  path_parts.append(fname)

  full_path = "".join(path_parts)

  total_len = len(full_path)

  print(f"完整路径:{full_path}")

  print(f"总字符长度:{total_len},全局上限{MAX_FULL_PATH}")

  # 分段校验文件夹/文件名单段长度

  dir_seg_len = len(subdir) if subdir else 0

  file_seg_len = len(fname)

  print(f"子目录名长度:{dir_seg_len},单段上限{MAX_NAME_SEG}")

  print(f"文件名长度:{file_seg_len},单段上限{MAX_NAME_SEG}")

  # SCPI试探复制验证是否仪器拒绝

  inst.write("*CLS")

  test_copy = "tmp_check.dlog"

  inst.write(f'MEM:FILE:COPY "{fname}","{test_copy}"')

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

  err_code = int(err_code)

  if err_code != 0:

  print(f"⚠️ 操作失败 错误{err_code}:{err_msg},大概率路径长度超限")

  else:

  print("✅ 路径长度合法,仪器可正常读写")

  inst.write(f'MEM:FILE:DEL "{test_copy}"') # 删除临时副本

  return total_len, full_path

  # 批量校验LOG目录所有序列历史文件

  file_list_raw = inst.query('MEM:CAT? "LOG"').strip()

  files = [f.strip('"') for f in file_list_raw.split(',')]

  for f in files:

  check_path_length(inst, f, "DLOG")

  inst.close()

  五、各型号兼容差异

  N79xxA / N89xxA(大功率双向源) 严格 127 总路径、31 单段名称限制,DLOG/ELOG/ARB 共用同一文件系统规则

  E36100 BT 小型双向源 阈值完全一致,无独立 DLOG/ELOG 分支,统一MEM:LOG体系

  N6705B/N6700B 模块化主机 同样 127 总路径上限,不支持多层深度子目录(最多 1 级自定义子文件夹)

  六、超限故障典型错误码对照表

  表格

  

  七、工程避限最佳实践

  日志文件名控制在 **≤20 字符 **(含.dlog/.elog 后缀)

  自定义子目录名 **≤20 字符 **,只建 1 层子文件夹,不嵌套多层

  自动命名只用字母、数字、下划线,不叠加长时间戳 / 长备注文本

  保存前先用上位机预计算路径总长,提前截断超长名称