资讯中心

联系我们

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

如何通过SCPI查询双向直流电源序列历史记录的循环次数与输出能量的关系?

2026-06-10 10:07:08  点击:

  SCPI 命令全集(查询循环次数、能量、电压、电流、时间)

  能量计算公式(仪器内部 + 上位机计算双验证)

  循环次数 - 能量关系图表(自动生成)

  每一轮循环消耗 / 输出了多少 Wh 或 J

  一、核心概念(必须先懂)

  序列 LIST 循环:一轮 = 完整执行一遍电压 / 电流阶梯波形

  能量:电源输出 / 回馈的电能,单位 焦耳 (J) 或 瓦时 (Wh)

  SCPI 无法直接返回 “循环 - 能量” 对照表,必须:

  读取 DLOG 历史记录(电压、电流、时间戳)

  计算每轮能量

  建立循环次数 ↔ 累计能量 / 单轮能量 对应关系

  二、获取数据所需 SCPI 指令(直接复制)

  1. 基础配置查询

  scpi

  *IDN? ! 识别仪器

  DLOG:DEST? ! 必须是 FILE(文件记录)

  DLOG:FILE:TIMESTAMP? ! 必须 =1(带时间戳才能算能量)

  DLOG:FILE:CAT? ! 列出所有历史日志文件

  2. 读取序列配置(计算循环)

  scpi

  SOUR:LIST:STEP? ! 序列步数

  SOUR:LIST:DWEL? ! 每步时间(秒)

  TRIG:COUN? ! 总循环次数

  3. 读取日志文件(能量计算核心数据)

  scpi

  DLOG:FILE:INFO?"日志名.csv" ! 元数据:起止时间

  DLOG:FILE:DATA?"日志名.csv" ! 完整历史:时间,电压,电流,功率

  4. 仪器直接读取能量(可选,高级机型支持)

  scpi

  FETC:ENER? ! 读取当前累计输出能量 (J)

  注意:仅 N6705B/C 新版固件支持直接读能量;老机型必须用 V×I× 时间 计算。

  三、数据格式与计算公式

  1. DLOG 数据格式(带时间戳)

  plaintext

  时间戳, 电压(V), 电流(A), 功率(W)

  2026-06-11 10:00:00.100.12.000.2.500.30.000

  2. 能量计算公式

  plaintext

  单采样点能量 ΔE = 功率(W) × 采样间隔时间(s)

  总能量 E = Σ(ΔE)

  1 Wh = 3600 J

  3. 循环次数计算

  plaintext

  单轮总时长 = 所有步骤 DWEL 之和

  循环次数 = int( 采样时间偏移 / 单轮时长 ) + 1

  四、完整可运行 Python 代码

  功能:

  SCPI 自动连接电源

  读取日志 + 序列配置

  计算每轮能量、累计能量

  绘制 循环次数 - 能量 关系图

  python

  运行

  import visa

  import matplotlib.pyplot as plt

  import pandas as pd

  from datetime import datetime

  # ======================

  # 1. 连接仪器

  # ======================

  rm = visa.ResourceManager()

  inst = rm.open_resource("TCPIP0::192.168.1.10::inst0::INSTR") # 修改为你的地址

  inst.timeout = 20000

  print("仪器:", inst.query("*IDN?").strip())

  # ======================

  # 2. 读取日志文件

  # ======================

  files = inst.query("DLOG:FILE:CAT?").split(",")

  filename = files[0].strip()

  print("使用文件:", filename)

  # ======================

  # 3. 读取 LIST 序列参数

  # ======================

  dwel_list = list(map(float, inst.query("SOUR:LIST:DWEL?").split(",")))

  t_per_round = sum(dwel_list)

  total_loops = int(inst.query("TRIG:COUN?"))

  print(f"单轮时长: {t_per_round:.2f}s 总循环: {total_loops}")

  # ======================

  # 4. 读取历史数据

  # ======================

  raw_data = inst.query(f'DLOG:FILE:DATA?"{filename}"')

  lines = raw_data.strip().split("n")

  # ======================

  # 5. 解析 + 计算能量 & 循环

  # ======================

  ts_list = []

  loop_list = []

  energy_list = []

  cum_energy = 0

  t0 = None

  dt_sample = 0.1 # 默认0.1s,可从 DLOG:PER? 读取

  for line in lines:

  if not line:

  continue

  parts = line.split(",")

  ts_str = parts[0]

  volt = float(parts[1])

  curr = float(parts[2])

  power = volt * curr

  # 时间解析

  ts = datetime.strptime(ts_str, "%Y-%m-%d %H:%M:%S.%f")

  if t0 is None:

  t0 = ts

  dt = (ts - t0).total_seconds()

  # 循环号

  loop = int(dt / t_per_round) + 1

  # 能量累加

  delta_E = power * dt_sample

  cum_energy += delta_E

  ts_list.append(dt)

  loop_list.append(loop)

  energy_list.append(cum_energy / 3600) # 转为 Wh

  # ======================

  # 6. 绘图:循环次数 - 能量

  # ======================

  plt.figure(figsize=(12. 6))

  plt.plot(loop_list, energy_list, linewidth=2. color="#E63946")

  plt.title("循环次数 - 输出能量关系", fontsize=14)

  plt.xlabel("循环次数", fontsize=12)

  plt.ylabel("累计能量 (Wh)", fontsize=12)

  plt.grid(True)

  plt.show()

  五、图表展示效果

  你将得到一张阶梯上升曲线:

  X 轴:循环次数

  Y 轴:累计输出能量(Wh)

  每完成一轮,能量阶梯式上升

  可直观看到: ✅ 每轮输出能量是否稳定 ✅ 总能量消耗 ✅ 异常波动 / 停机

  六、如果你只想用 SCPI 获取原始数据

  直接执行这 4 条,复制到 Excel 即可自己算能量:

  scpi

  DLOG:FILE:TIMESTAMP 1

  DLOG:FILE:DATA?"log.csv"

  SOUR:LIST:DWEL?

  TRIG:COUN?