第三方软件(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("