# PyInstrument **Repository Path**: MagicBude/PyInstrument ## Basic Information - **Project Name**: PyInstrument - **Description**: 🔬 通用仪器自动化测试框架 | 支持万用表、流量计、电源等设备的自动化控制与数据采集 | 插件式驱动架构 | Python - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-07 - **Last Updated**: 2026-01-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PyInstrument - 仪器自动化测试框架 [![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Version](https://img.shields.io/badge/Version-0.1.0-orange.svg)](https://gitee.com/MagicBude/PyInstrument) 一个模块化的仪器自动化测试框架,支持串口/VISA通信、插件式设备驱动、图形界面、数据记录与导出。 ## ✨ 特性 - **图形界面** - PyQt6 实现的可视化测试界面,实时数据曲线 - **插件式架构** - 添加新设备只需编写驱动文件,无需修改框架代码 - **多种连接方式** - 支持串口 (pyserial) 和 VISA (pyvisa) 通信 - **数据记录** - SQLite 存储 + CSV 导出 - **中文注释** - 代码包含详细中文注释,适合学习 ## 📸 界面预览 运行主程序后可以看到: - 设备类型选择(支持多种流量计和万用表) - 测试参数配置 - 实时数据曲线 - 稳定时间倒计时 - 测试日志 ## 🚀 快速开始 ### 安装依赖 ```bash # 使用清华镜像加速 python -m pip install pyserial PyQt6 pyqtgraph -i https://pypi.tuna.tsinghua.edu.cn/simple # 如果要连接 VISA 设备(如 USB 万用表) python -m pip install pyvisa pyvisa-py -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ### 运行主程序 ```bash python -m src.gui.main_window ``` 或者双击 `启动主程序.bat` ### 运行串口助手 ```bash python -m src.gui.serial_assistant ``` 或者双击 `启动串口助手.bat` ## 📁 项目结构 ``` PyInstrument/ ├── src/ │ ├── core/ # 核心框架 │ │ ├── instrument.py # 仪器基类 │ │ ├── connection.py # 连接管理(串口/VISA) │ │ └── data_logger.py # 数据记录(SQLite) │ ├── drivers/ # 设备驱动 │ │ ├── base.py # 设备类型基类 │ │ ├── flow_sensors/ # 流量传感器驱动 │ │ │ ├── alicat.py # Alicat MFC │ │ │ └── generic_mfc.py # 通用流量计 │ │ └── multimeters/ # 万用表驱动 │ │ ├── keithley_dmm6500.py # Keithley DMM6500 │ │ ├── keysight_34461a.py # Keysight 34461A │ │ └── generic_scpi.py # 通用 SCPI 万用表 │ ├── gui/ # 图形界面 │ │ ├── main_window.py # 主测试界面 │ │ └── serial_assistant.py # 串口调试助手 │ └── scripts/ # 示例脚本 ├── docs/ # 文档 │ ├── scpi-guide.md # SCPI 协议入门 │ ├── visa-guide.md # VISA 协议入门 │ └── python-pip-guide.md # Python/pip 入门 ├── tests/ # 测试 ├── pyproject.toml └── README.md ``` ## 🔌 支持的设备 ### 流量传感器 | 设备 | 驱动文件 | 通信方式 | |------|----------|----------| | Alicat MFC | `alicat.py` | 串口 RS-232 | | 通用流量计 | `generic_mfc.py` | 串口 | ### 万用表 | 设备 | 驱动文件 | 通信方式 | |------|----------|----------| | Keithley DMM6500 | `keithley_dmm6500.py` | USB/VISA | | Keysight 34461A | `keysight_34461a.py` | USB/VISA | | 通用 SCPI 万用表 | `generic_scpi.py` | USB/VISA/串口 | ## 🛠️ 添加新设备驱动 1. 继承合适的基类 (`Multimeter` 或 `FlowSensor`) 2. 实现抽象方法 3. 在 `main_window.py` 中注册驱动 ```python # src/drivers/flow_sensors/my_mfc.py from ..base import FlowSensor class MyMFC(FlowSensor): def connect(self): # 连接设备 pass def get_flow_rate(self) -> float: # 读取流量 return float(self.query("RF")) def set_setpoint(self, value: float): # 设置流量 self.write(f"SF {value}") ``` 然后在 `main_window.py` 注册: ```python from src.drivers.flow_sensors.my_mfc import MyMFC MFC_DRIVERS = { 'alicat': AlicatMFC, 'generic': GenericMFC, 'my_mfc': MyMFC, # 新增 } ``` ## 📖 代码示例 ### 读取万用表电压 ```python from src.drivers.multimeters import KeithleyDMM6500 with KeithleyDMM6500("USB0::0x05e6::0x6500::04012345::INSTR") as dmm: print(f"设备: {dmm.identify()}") voltage = dmm.measure_voltage_dc() print(f"电压: {voltage:.6f} V") ``` ### 控制 Alicat 流量计 ```python from src.drivers.flow_sensors import AlicatMFC with AlicatMFC("COM3", address="A") as mfc: print(f"压力: {mfc.pressure} PSIA") print(f"温度: {mfc.temperature} ℃") mfc.set_setpoint(50.0) # 设置 50 SLPM flow = mfc.get_flow_rate() print(f"流量: {flow} SLPM") ``` ### 数据记录 ```python from src.core.data_logger import DataLogger with DataLogger("measurements.db") as logger: logger.start_session("流量标定测试") for setpoint in [0, 10, 20, 30, 40, 50]: mfc.set_setpoint(setpoint) time.sleep(3) # 等待稳定 voltage = dmm.measure_voltage_dc() logger.log("voltage", voltage, "V", setpoint=setpoint) logger.export_csv("calibration_data.csv") ``` ## 📚 文档 - [设备连接指南](docs/device-connection-guide.md) - 如何连接 Alicat、DMM6500 等设备 - [驱动开发指南](docs/driver-development-guide.md) - 如何添加新设备驱动 - [SCPI 协议入门](docs/scpi-guide.md) - 了解仪器控制命令 - [VISA 协议入门](docs/visa-guide.md) - 了解仪器通信接口 - [pip 使用指南](docs/python-pip-guide.md) - Python 包管理 - [常见问题 FAQ](docs/faq.md) - 常见问题解答 ## 🔧 依赖 - Python >= 3.10 - pyserial >= 3.5 - PyQt6 >= 6.0 - pyqtgraph >= 0.13 - pyvisa >= 1.14 (可选,连接 VISA 设备) - pyvisa-py >= 0.7 (可选,纯 Python VISA 后端) ## 📄 许可证 MIT License ## 🔨 打包成 EXE 如果需要打包成独立的 exe 文件(无需安装 Python 即可运行): ```bash # 安装 PyInstaller python -m pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple # 打包主程序(单文件模式) python -m PyInstaller --onefile --windowed --name "仪器自动化测试" src/gui/main_window.py # 打包串口助手 python -m PyInstaller --onefile --windowed --name "串口助手" src/gui/serial_assistant.py ``` 或者直接双击 `build.bat` 一键打包。 打包后的 exe 文件在 `dist/` 目录下。 ### 打包注意事项 1. 首次打包可能需要较长时间 2. 打包后的 exe 文件较大(约 50-100MB),因为包含了 Python 解释器和所有依赖 3. 如果杀毒软件误报,可以添加信任或使用 `--onedir` 模式打包 ## 📋 版本历史 ### v0.1.0 (2026-01-08) - 初始版本 - 支持 Alicat MFC 流量计 - 支持 Keithley DMM6500、Keysight 34461A 万用表 - 图形界面:主测试程序 + 串口助手 - 实时数据曲线显示 - 配置自动保存/加载