You need to enable JavaScript to run this app. Keithley数字万用表采集电阻数据追加写入CSV不覆盖的Python实现问询
优惠活动
大模型
产品
解决方案
定价
更多

Keithley数字万用表采集电阻数据追加写入CSV不覆盖的Python实现问询

Keithley多通道电阻实时采集存储程序实现

代码调整方向

针对现有代码的问题,直接对齐需求做以下修正:

  • 替换原有的硬编码字符串切片提取通道值的逻辑:原方法只要测量值的小数位数变化,就会出现提取错位,改用按CSV字段规则分割后提取测量值的方式,稳定性大幅提升
  • 把文件写入模式从覆盖写改为追加写:首次启动时自动判断文件状态,只在文件为空时写入一次简化表头,后续每次采集的结果直接追加到文件末尾,完全不覆盖历史数据
  • 增加固定60秒间隔的采集循环,实现每分钟1次的采集频率,全程去掉冗余的时间戳字段,输出格式完全匹配预期表格

完整可运行代码

import py2700 as DMM
import time
import os

# 建立万用表连接
my_multimeter = DMM.Multimeter('TCPIP::169.254.69.212::1394::SOCKET')
time.sleep(5)
my_multimeter.set_timeout(100000)
# 配置5个测量通道为电阻模式
my_multimeter.define_channels(
    [101, 102, 103, 104, 105],
    DMM.MeasurementType.resistance()
)
my_multimeter.setup_scan()

# 配置输出文件与简化表头
output_path = "resistance_measure.csv"
file_header = "Channel 1,Channel 2,Channel 3,Channel 4,Channel 5\n"

# 首次运行时初始化文件写入表头,避免后续重复写表头
if not os.path.exists(output_path) or os.path.getsize(output_path) == 0:
    with open(output_path, "w", encoding="utf-8") as f:
        f.write(file_header)

# 启动采集循环
while True:
    # 执行单次全通道扫描
    scan_res = my_multimeter.scan(time.time_ns()/(10**9))
    # 解析返回的行数据:按逗号分割后,奇数位索引为电阻值,偶数位为对应时间戳
    row_content = scan_res.make_csv_row().strip().split(",")
    res_values = [row_content[idx] for idx in range(1, len(row_content), 2)]
    # 拼接成单行测量数据
    data_row = ",".join(res_values) + "\n"
    # 追加写入文件
    with open(output_path, "a", encoding="utf-8") as f:
        f.write(data_row)
    # 间隔60秒采集下一组数据
    time.sleep(60)

实际运行效果

  • 输出的CSV文件打开后自动形成规范表格,每一行对应一次测量的5个通道电阻值,无冗余时间字段
  • 程序重启后不会覆盖原有历史数据,只会在文件末尾继续追加新的测量结果
  • 通道值提取完全适配测量值的长度变化,不会因为电阻值小数位增减出现错位
    原代码中对返回字符串直接做步长切片的方式(如list1[0::2])本质是按字符位置隔位取数,完全无法正确提取通道值,新的解析逻辑完全规避了这个问题

内容的提问来源于stack exchange,提问作者phoenix112358

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 12:15:04