Keysight萬用表使用指南及基于Python采集數據生成Excel文件

文章目錄

  • 說明
  • 使用的庫
    • openpyxl
    • pyvisa
  • 代碼說明
  • 效果展示
  • 參考
  • 代碼

說明

本文介紹了 Keysight 34465A 的基本使用和 SCPI 指令設置,演示了使用 Python 的 PyVISA 庫控制兩臺 34465A 同時采集數據的完整流程,包括設置采樣參數、觸發測量、讀取數據、使用 OpenPyXL 保存到 Excel 并生成折線圖。整個過程采用模塊化代碼并加入詳細注釋,每一步都以教程形式說明,并增加了異常處理邏輯來提高健壯性。

使用的庫

openpyxl

  • https://openpyxl.readthedocs.io/
  • OpenPyXL 用于生成 Excel 文件和繪制圖表。

pyvisa

  • https://pyvisa.readthedocs.io/en/latest/
  • 在 Python 環境中,通過 pip install pyvisa pyvisa-py openpyxl 安裝依賴庫。PyVISA 用于與萬用表通訊,PyVISA-Py(或 NI-VISA)提供 VISA 后端。

代碼說明

  1. 生成Excel文件每次采集后直接保存;
  2. 使用Excel折線圖展示數據;
  3. 可設定采集參數(采集點數、采集時長、NPLC);
  4. 代碼包含異常處理(比如設備未連接、超時等);

效果展示

在這里插入圖片描述

參考

  • https://pyvisa.readthedocs.io/en/latest/
  • https://docs.keysight.com/
  • https://www.keysight.com/
  • https://openpyxl.readthedocs.io/
  • https://blog.csdn.net/Jzy140222010108/article/details/125111682
  • https://blog.csdn.net/palzhj/article/details/129339224
  • https://bloghome.com.cn/post/ru-he-li-yong-pyvisaku-yu-gpibjie-kou-de-ce-liang-she-bei-jin-xing-tong-xin-shi-xian-shu-ju-de-cai-ji-he-fa-song-kong-zhi-ming-ling-csdnwen-ku.html

代碼

import pyvisa
from time import sleep
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference
from datetime import datetime
import logging
# 查看詳細通信過程
#logging.basicConfig(level=logging.DEBUG)  # 獲取當前時間并格式化
current_time = datetime.now().strftime("%Y%m%d-%H%M%S")# 配置日志格式和文件
logging.basicConfig(level=logging.DEBUG,  # 設置日志級別format='%(asctime)s [%(levelname)s] %(message)s',  # 含時間戳和日志級別handlers=[logging.FileHandler(f'DMMRecorder_{current_time}.log', encoding='utf-8'),  # 輸出到文件logging.StreamHandler()  # 同時輸出到控制臺]
)# 示例參數:采樣 1000 點,總時間 1秒
sample_points = 1000                # 采樣點數
total_time = 1.0                    # 秒,總時間
DMM_NPLC = 0.001                    # NPLC
DMM_IP_ADDR_1 = "10.0.1.83"         # 萬用表1 IP 地址
DMM_IP_ADDR_2 = "10.0.1.86"         # 萬用表2 IP 地址def setup_scpi(inst, dmm_nplc, sample_count, total_time):"""通過 SCPI 配置萬用表采樣參數"""inst.write(':CONF:VOLT:DC 10')                          # 直流量程 10Vinst.write(f':SENS:VOLT:DC:NPLC {dmm_nplc}')            # NPLC=0.001inst.write(':VOLT:DC:RANG:AUTO OFF')                    # 關閉自動量程inst.write(':TRIG:SOUR INTERNAL')                       # 內部觸發inst.write(f':SAMP:COUN {sample_count}')                # 采樣點數inst.write(f':SAMP:TIM {total_time/sample_count}')      # 采樣間隔inst.write(':TRIG:COUN 1')                              # 單次觸發inst.write(':TRIG:DEL 0')                               # 無延時#inst.write(':INIT')                                    # 初始化采集try:# 創建資源管理器rm = pyvisa.ResourceManager() # 列出所有可見的 VISA 資源         #devices = rm.list_resources()          #logging.info("Available devices:", devices)# 打開第一個萬用表mtr1 = rm.open_resource(f'TCPIP0::{DMM_IP_ADDR_1}::hislip0::INSTR')# 打開第二個萬用表mtr2 = rm.open_resource(f'TCPIP0::{DMM_IP_ADDR_2}::hislip0::INSTR')
except Exception as e:logging.info("無法連接儀器,請檢查連接:", e)exit(1)logging.info(f'連接萬用表:{DMM_IP_ADDR_1} {DMM_IP_ADDR_2}')
logging.info(f'啟動參數:采樣點數 {sample_points},總時間 {total_time}s,NPLC {DMM_NPLC}')# 配置兩臺萬用表
setup_scpi(mtr1, DMM_NPLC, sample_points, total_time)
setup_scpi(mtr2, DMM_NPLC, sample_points, total_time)try:# 啟動采集mtr1.write(':INIT'); mtr2.write(':INIT')sleep(total_time + 3)  # 等待采集完成# 讀取采集數據data1 = mtr1.query(':FETCh?')   # 假設 FETCh? 返回 1000 個數據的逗號分隔字符串data2 = mtr2.query(':FETCh?')# 將字符串分割并轉換為浮點數列表voltages1 = [float(val) for val in data1.split(',')]voltages2 = [float(val) for val in data2.split(',')]
except pyvisa.VisaIOError as ve:logging.info("通訊錯誤:", ve)voltages1, voltages2 = [], []
except Exception as e:logging.info("測量失敗:", e)voltages1, voltages2 = [], []# 建立工作簿與工作表
wb = Workbook()
ws = wb.active
ws.title = "DMM_Data"# 寫入表頭
ws.append(["Time (s)", "Meter1 (V)", "Meter2 (V)"])# 寫入數據行:假設等間隔采樣
for i in range(len(voltages1)):t = i * (total_time / sample_points)ws.append([t, voltages1[i], voltages2[i]])# 創建折線圖
chart = LineChart()
chart.title = "Voltage vs Time"
chart.x_axis.title = "Time (s)"
chart.y_axis.title = "Voltage (V)"# Y 軸數據范圍:第2列和第3列(不包括表頭)
data = Reference(ws, min_col=2, min_row=2, max_col=3, max_row=len(voltages1)+1)
chart.add_data(data, titles_from_data=False)# X 軸類別:第1列(時間)
cats = Reference(ws, min_col=1, min_row=2, max_row=len(voltages1)+1)
chart.set_categories(cats)# 顯示所有數據點(關鍵步驟)
for series in chart.series:series.marker.symbol = "circle"                 # 點形狀:圓形series.marker.size = 3                          # 點大小series.graphicalProperties.line.noFill = False  # 顯示連接線# 將圖表插入到工作表,例如 E2 單元格開始
ws.add_chart(chart, "E2")# 保存 Excel 文件
file_name = "measurement_data_" + current_time + ".xlsx"
wb.save(file_name)
logging.info(f"數據已保存到 {file_name}")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77825.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77825.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77825.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 獲取 Python 鏡像操作指南

1. 安裝 Docker 環境 1.1 上傳安裝腳本(Windows → Linux) 在 Windows 的 CMD 中執行: scp docker.sh root10.1.1.58:~ 可自行前往我的飛書下載docker.sh腳本 Docs 1.2 在 Linux 中檢查文件 ls -l ~ # 確認 docker.sh 已上傳到家目錄…

JavaScript:從JS的執行機制到location對象

一、JS執行機制 (1)JS是單線程 JavaScript語言的一大特點就是單線程,也就是同一時間只能做一件事。因為JavaScript是為了處理頁面中的用戶交互,以及制作DOM二誕生的。比如我們對某個DOM元素進行添加和刪除操作,這個不…

iVX:數字化轉型全場景技術革新與生態構建實踐

在數字經濟蓬勃發展的當下,企業數字化轉型需求日益迫切。iVX 憑借其獨特的技術架構與創新解決方案,深度滲透工業互聯網、元宇宙、智慧城市等領域,成為推動全場景數字化轉型的重要力量。本文將重新梳理 iVX 的技術應用與生態價值,以…

生物化學筆記:神經生物學概論05 感受野 視覺中樞 高級視皮層中的信息走向

信息傳遞中的“擊鼓傳花” 新特性的突現 功能柱:簡化節點 高級視皮層中的信息走向

StarRocks Lakehouse 如何重構大數據架構?

隨著數據分析需求的不斷演進,企業對數據處理架構的期望也在不斷提升。在這一背景下,StarRocks 憑借其高性能的實時分析能力,正引領數據分析進入湖倉一體的新時代。 4 月 18 日,鏡舟科技高級技術專家單菁茹做客開源中國直播欄目《…

【SpringBoot】基于mybatisPlus的博客系統

1.實現用戶登錄 在之前的項目登錄中,我使用的是Session傳遞用戶信息實現校驗登錄 現在學習了Jwt令牌技術后我嘗試用Jwt來完成校驗工作 Jwt令牌 令牌一詞在網絡編程一節我就有所耳聞,現在又拾了起來。 這里講應用:令牌也就用于身份標識&a…

HCIP-security常見名詞

縮略語英文全稱解釋3DESTriple Data Encryption Standard三重數據加密標準AESAdvanced Encryption Standard高級加密標準AHAuthentication Header報文認證頭協議CACertification Authority證書頒發中心DESData Encryption Standard數據加密標準DHDiffie-Hellman密鑰交換算法DPD…

合并多個Excel文件到一個文件,并保留格式

合并多個Excel文件到一個文件,并保留格式 需求介紹第一步:創建目標文件第二步:創建任務列表第三步:合并文件第四步:處理合并后的文件之調用程序打開并保存一次之前生成的Excel文件第五步:處理合并后的文件之…

TDengine 中的壓縮設計

簡介 機器設備產生的時序數據量大,直接存儲成本非常高,所以需要使用壓縮技術,盡可能減小體積。 TDengine 使用了列式存儲,結合二級壓縮技術,壓縮率通常可以達到 20%,特殊情況下更能達到 5 % 以內&#xff…

深度學習涉及的數學與計算機知識總結

深度學習涉及的數學與計算機知識可總結為以下核心模塊,結合理論與實踐需求分為數學基礎和計算機技能兩大方向: 一、數學知識 線性代數 核心:矩陣運算(乘法、轉置、逆矩陣)、向量空間、特征值與特征向量、奇異值分解&am…

javascript<——>進階

一、作用域:變量可以被訪問的范圍 1.局部作用域 1.1函數作用域 在函數內部聲明的變量,在函數內部被訪問的,外部無法直接訪問。 總結:1、函數內部聲明的變量,在函數外部無法直接訪問 2、函數的參數也是函數內部的局…

驅動開發硬核特訓 · Day 25 (附加篇):從設備樹到驅動——深入理解Linux時鐘子系統的實戰鏈路

一、前言 在嵌入式Linux開發中,無論是CPU、外設控制器,還是簡單的GPIO擴展器,大多數硬件模塊都離不開時鐘信號的支撐。 時鐘子系統(Clock Subsystem),作為Linux內核中基礎設施的一部分,為設備…

并發設計模式實戰系列(7):Thread Local Storage (TLS)

🌟 大家好,我是摘星! 🌟 今天為大家帶來的是并發設計模式實戰系列,第七章Thread Local Storage (TLS),廢話不多說直接開始~ 目錄 一、核心原理深度拆解 1. TLS內存模型 2. 關鍵特性 二、生活化類比&a…

時序數據庫 TDengine × Perspective:你需要的可視化“加速器”

你有沒有遇到這樣的場景:數據已經寫進數據庫,圖表卻總是“慢半拍”?或是操作界面太卡,光是一個排序就能讓你等到喝完一杯咖啡?當數據量越來越大、響應時間卻越來越長,開發者和用戶都不禁要問一句——就沒有…

前端面試每日三題 - Day 19

這是我為準備前端/全棧開發工程師面試整理的第十一天每日三題練習,涵蓋 JavaScript中WeakMap與內存管理的底層機制、Redux Toolkit的事件以及系統設計中的企業級表單引擎構建。通過這三道題,你將對現代前端開發中的關鍵概念有更深入的理解,并…

Antd Modal Drawer 更改默認項

當項目比較大使用了非常多的 Modal 和 Drawer 要是有需求一次性全部調整就會比較麻煩,目前 Antd 的 ConfigProvider 暫不支持(也有可能我沒找到,待大佬指證)就比如由于默認 Modal Drawer 的遮罩層是可以點擊關閉的,但是…

硬件工程師面試常見問題(8)

第三十六問:基爾霍夫定理的內容是什么? 基爾霍夫電流定理: 1. 內容:電路中任意一個節點上,在任意時刻,流入節電的電流之和等于流出節點的電流之和。 2. 表達式:根據上圖寫出節點電流定律的數學…

Elasticsearch 內存使用指南

作者:來自 Elastic Valentin Crettaz 探索 Elasticsearch 的內存需求以及不同類型的內存統計信息。 Elasticsearch 擁有豐富的新功能,幫助你為你的使用場景構建最佳搜索解決方案。瀏覽我們的示例筆記本了解更多信息,開始免費云試用&#xff0…

硬件工程師面試常見問題(9)

第四十一問:色環電阻的顏色表示什么? 各環表示的意思: 4色環的:前兩位表示有效位;第三環表示倍乘;最后一環表示誤差; 5色環的:前三位表示有效位;第四環表示倍乘&#…

PyTorch 深度學習實戰(23):多任務強化學習(Multi-Task RL)之擴展

之前的PyTorch 深度學習實戰(23):多任務強化學習(Multi-Task RL)總結擴展運用代碼如下: import torch import torch.nn as nn import torch.optim as optim import numpy as np from torch.distributions import Norm…