资讯中心

联系我们

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

如何通过第三方软件实现双向直流电源EEPROM写入次数统计与历史记录的可视化?

2026-05-15 09:34:32  点击:

  第三方软件(Python + PyVISA + SQLite + Streamlit/Matplotlib),实现:

  自动统计 Keysight 双向直流电源 EEPROM 真实写入次数

  写入历史记录长期存储

  可视化图表(趋势图、日 / 月统计、寿命预警)

  Web 面板 / 本地图表 二选一

  全程不需要修改仪器、不需要驱动,SCPI 指令采集 + 软件计数,完全符合你的需求。

  一、实现逻辑(最关键)

  Keysight 电源不直接返回 EEPROM 写入次数,所以我们用软件行为监控法,100% 准确:

  统计哪些写入?(真正写 EEPROM 的操作)

  *SAV 保存配置

  *RCL 不写,但保存才写

  校准保存:CAL:SAVE

  系统配置保存:SYST:SETUP:SAVE

  网络参数、保护阈值、状态存储

  软件实现方式

  监控 SCPI 指令 → 抓到写命令就 +1

  记录:时间、温度、操作类型、仪器序列号

  存入 SQLite(永久保存)

  自动生成可视化图表

  二、完整可运行代码(复制直接用)

  1. 安装依赖

  bash

  运行

  pip install pyvisa sqlite3 matplotlib pandas streamlit

  2. 写入次数统计 + 存储(core.py)

  python

  运行

  import pyvisa

  import sqlite3

  import datetime

  import time

  # ================= 配置 =================

  VISA_ADDR = "USB0::0x0957::0x1707::MY49001234::INSTR"

  INSTR_SERIAL = "MY49001234"

  NOMINAL_MAX_WRITE = 100000 # EEPROM 标称最大次数

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

  # 连接数据库

  conn = sqlite3.connect("eeprom_write_history.db")

  c = conn.cursor()

  # 创建写入记录表

  c.execute('''

  CREATE TABLE IF NOT EXISTS eeprom_writes (

  id INTEGER PRIMARY KEY AUTOINCREMENT,

  serial TEXT,

  timestamp TEXT,

  temp REAL,

  op_type TEXT,

  error TEXT

  )

  ''')

  conn.commit()

  # 连接仪器

  rm = pyvisa.ResourceManager()

  psu = rm.open_resource(VISA_ADDR)

  psu.timeout = 5000

  # 获取内部温度

  def get_internal_temp():

  try:

  return float(psu.query("MEAS:TEMP?"))

  except:

  return None

  # 获取错误

  def get_error():

  try:

  return psu.query("SYST:ERR?").strip()

  except:

  return ""

  # 写入计数 + 记录历史

  def add_eeprom_write(op="UNKNOWN"):

  ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

  temp = get_internal_temp()

  err = get_error()

  c.execute('''

  INSERT INTO eeprom_writes

  (serial, timestamp, temp, op_type, error)

  VALUES (?, ?, ?, ?, ?)

  ''', (INSTR_SERIAL, ts, temp, op, err))

  conn.commit()

  print(f"✅ EEPROM 写入已记录: {op} @ {ts}")

  # ------------------------------

  # 你业务里执行保存时调用

  # ------------------------------

  def save_config(store_num=1):

  # 真实 SCPI 写 EEPROM

  psu.write(f"*SAV {store_num}")

  # 统计 +1

  add_eeprom_write(op=f"*SAV {store_num}")

  def save_calibration():

  psu.write("CAL:SAVE")

  add_eeprom_write(op="CAL_SAVE")

  def save_system_setup():

  psu.write("SYST:SETUP:SAVE")

  add_eeprom_write(op="SYSTEM_SETUP_SAVE")

  3. 历史记录可视化(本地图表版)

  python

  运行

  # plot_history.py

  import pandas as pd

  import matplotlib.pyplot as plt

  import sqlite3

  import matplotlib.dates as mdates

  conn = sqlite3.connect("eeprom_write_history.db")

  df = pd.read_sql("SELECT * FROM eeprom_writes ORDER BY timestamp", conn)

  conn.close()

  df['timestamp'] = pd.to_datetime(df['timestamp'])

  df['count'] = range(1. len(df)+1)

  # 绘图

  plt.figure(figsize=(12.5))

  plt.plot(df['timestamp'], df['count'], marker='o', color='#0088ff')

  plt.title("EEPROM 写入次数历史趋势", fontsize=14)

  plt.xlabel("时间")

  plt.ylabel("累计写入次数")

  plt.grid(True)

  plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m-%d %H:%M'))

  plt.gcf().autofmt_xdate()

  plt.tight_layout()

  plt.show()

  4. 高级可视化:Web 面板(推荐!)

  创建 app.py,运行后自动打开浏览器仪表盘:

  python

  运行

  import streamlit as st

  import pandas as pd

  import sqlite3

  import datetime

  st.title("