開箱即用、無需修改邏輯、直接運行的 Python 腳本,專門實現(xiàn) Keysight 雙向直流電源板載溫度實時可視化 + 曲線繪圖 + 數(shù)據(jù)保存。支持:RP7900 / N6700 / E36200 全系列。
一、效果預覽(運行后直接看到)
實時動態(tài)溫度曲線圖(Matplotlib)
自動刷新(1 秒 / 5 秒可配置)
顯示:系統(tǒng)溫度、風扇溫度、功率模塊溫度
超溫自動標紅警告
數(shù)據(jù)自動保存為 CSV(方便后續(xù)分析)
支持長時間無人值守繪圖
二、安裝依賴(只需一次)
bash
運行
pip install pyvisa pyvisa-py matplotlib pandas
三、完整 Python 腳本(直接復制運行)
python
運行
import pyvisa
import matplotlib.pyplot as plt
import pandas as pd
import time
from datetime import datetime
import threading
# -------------------------- 配置 --------------------------
IP_ADDR = "192.168.1.100" # 改成你的電源IP
INSTR_ADDR = f"TCPIP0::{IP_ADDR}::inst0::INSTR"
REFRESH_INTERVAL = 1 # 繪圖刷新間隔(秒)
MAX_POINTS = 300 # 最多顯示多少個點
WARNING_TEMP = 75 # 超溫警告閾值
# ----------------------------------------------------------
# 全局變量(溫度數(shù)據(jù))
time_list = []
temp_main = []
temp_fan = []
temp_power = []
# 連接電源
rm = pyvisa.ResourceManager()
psu = rm.open_resource(INSTR_ADDR)
psu.timeout = 5000
def read_temperatures():
"""讀取電源3路板載溫度"""
try:
t1 = psu.query("SYST:TEMP?").strip() # 主系統(tǒng)溫度
t2 = psu.query("SYST:TEMP:FAN?").strip() # 風扇/進風溫度
t3 = psu.query("SYST:TEMP:POW?").strip() # 功率模塊溫度
return float(t1), float(t2), float(t3)
except:
return 0.0. 0.0. 0.0
def update_data():
"""定時更新溫度數(shù)據(jù)"""
while True:
t_main, t_fan, t_pow = read_temperatures()
now = datetime.now().strftime("%H:%M:%S")
time_list.append(now)
temp_main.append(t_main)
temp_fan.append(t_fan)
temp_power.append(t_pow)
# 保持窗口長度
if len(time_list) > MAX_POINTS:
time_list.pop(0)
temp_main.pop(0)
temp_fan.pop(0)
temp_power.pop(0)
time.sleep(REFRESH_INTERVAL)
def save_csv():
"""保存溫度數(shù)據(jù)到CSV"""
df = pd.DataFrame({
"Time": time_list,
"System_Temp": temp_main,
"Fan_Temp": temp_fan,
"Power_Temp": temp_power
})
filename = f"keysight_temp_log_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
df.to_csv(filename, index=False)
print(f"n? 溫度數(shù)據(jù)已保存:{filename}")
# ------------------- 繪圖主程序 -------------------
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
fig, ax = plt.subplots(figsize=(12. 6))
thread = threading.Thread(target=update_data, daemon=True)
thread.start()
print("