CGQ_TEST_DEVICE/README.md

515 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\
# 军工传感器自动化测试桌面程序 需求规格说明书(模拟数据版)
\## 一、软件架构
本软件采用**分层模块化架构**,自上而下分为四层:
\1. **表示层UI层**
\- 基于 PyQt5/PySide6 构建主窗口、测试控制面板、波形图区、报表预览等界面。
\- 深色主题,支持分辨率自适应(加固机 1024×768 及以上)。
\- 交互采用二次确认机制,实时显示仪器状态、测试进度及报警信息。
\2. **业务逻辑层**
\- 测试流程控制器:实现“人机料法环”校验、自动测试序列执行、数据判异与跳转逻辑。
\- 数据计算引擎:调用 numpy/scipy 完成传感器特征参数(非线性、迟滞、重复性)计算。
\- 权限与审计模块:三级权限管理、双因子登录、操作日志(内存中保留,程序退出清空)。
\- 报告生成器:基于内存中本次测试数据生成加密 PDF 报告与 CSV 文件。
\3. **驱动与通讯层**
\- 仪器通讯适配器:通过 PyVISA 控制 PXI/LXI/GPIB 仪器,通过 pySerial 驱动 RS232/422 设备。
\- 条码扫描接口:支持 USB HID 或串口扫码枪。
\- **数据存储**:所有测试数据、型号配置、日志均保存在内存中的 Python 对象(嵌套字典/列表/pandas DataFrame不进行磁盘持久化。
\- 异常处理与自恢复:仪器断线自动重连,异常断电时内存数据无法恢复(本版本不要求断电恢复)。
\4. **硬件与操作系统层**
\- 运行于国产化平台(麒麟 V10 + 龙芯 3A5000或 Windows 加固机。
\- 兼容 PXI 机箱、数字万用表、压力控制器、多通道数据采集卡。
**架构图(文字描述)**
\```text
[用户交互] → (表示层) → [业务逻辑层] → [驱动层] → [硬件层]
↑ ↑ ↑
PyQt信号/槽 数据处理线程 仪器虚拟驱动
\```
二、整体功能描述
本软件为军工传感器(如压力、温度、加速度传感器)提供从“来料扫码 → 参数配置 → 自动测试 → 数据判定 → 报告存档”的全流程桌面化测试管理。所有数据仅保存在内存中,程序关闭后数据不保留,适用于开发测试、算法验证或模拟演示环境。主要功能包括:
· 型号与标准管理:允许工艺员创建传感器型号,设置测试量程、精度阈值、激励电压等参数(内存中维护型号列表,程序重启后需重新配置)。
· 条码扫描与信息自动加载扫描传感器唯一ID自动匹配测试模板记录批次、生产编号。
· 一键自动化测试:按预设序列控制压力控制器循环加压,同步采集传感器输出,实时绘制压力-输出曲线。
· 指标自动计算:依据采集数据计算非线性误差、迟滞、重复性、灵敏度等,与阈值对比形成 PASS/FAIL。
· 过程干预:支持暂停、继续、单点跳步,超差时声光报警并可选停机/人工确认。
· 数据回溯与报告:本次测试的所有原始数据(含环境温湿度、操作人、仪器设置)保存在内存中,支持界面内查看回放;测试结束后可一键导出加密 PDF 报告及 CSV 文件(结果持久化,原始数据不落盘)。
· 系统自检与校准:每日首次运行时自动检查仪器连接状态,提供计量校准接口,记录校准有效期(暂存内存)。
三、需求分析
3.1 功能需求
编号 需求名称 描述
FR-01 用户权限管理 支持操作员、工艺员、管理员三级双因子认证Windows 域账号 + 动态口令);密码错误超限锁定
FR-02 传感器型号配置 工艺员可增删改传感器型号,设置测试参数(量程、测试点数、循环次数、允差范围);配置保存在内存字典,程序退出清空
FR-03 条码扫描与识别 通过扫码枪自动识别传感器条码,从内存型号模板中匹配测试计划
FR-04 自动测试执行 按预设压力点(如 0%, 20%, 40%, 60%, 80%, 100% FS自动加载每个点稳定后读取传感器输出值支持正反行程循环
FR-05 实时监控与绘图 以曲线形式显示压力-输出关系,同时显示当前数值、报警灯、测试进度百分比
FR-06 数据分析与判据 自动计算非线性(最小二乘法)、迟滞、重复性,与阈值比较并显示 PASS/FAIL
FR-07 报告生成 生成 PDF/A 格式报告内含测试结论、原始数据表、曲线图、环境条件、操作人签名CSV 导出供外部分析(原始数据仅本次会话内存保存)
FR-08 内存数据与审计 所有测试原始数据、操作日志、参数修改记录保存在内存的列表中(如 test_records = []);日志支持内存查询,程序退出即清空;不提供持久化加密存储
FR-09 异常处理 仪器通讯中断时界面显示“离线”并自动重连10s 一次),不丢失本次已采集的内存数据;断电时已采集数据无法恢复(本版本无持久化机制)
FR-10 计量校准接口 软件内置校准程序,可对采集通道进行零点/满度校准,校准数据暂存内存(程序重启后需重新校准)
3.2 非功能需求
类别 具体要求
安全性 软件禁用无线网络通讯USB 口仅允许认证的 U 盘导出报告因无持久化存储不涉及涉密数据落盘但内存中的敏感数据使用后应及时覆盖Python 对象可通过 del 帮助释放)
可靠性 连续 72 小时无故障运行MTBF ≥ 5000 小时;内存泄漏检测,长期运行内存占用增长率 ≤ 5%/h
可维护性 代码符合 PEP8提供详细注释与配置文档支持远程日志导出仅本地串口输出
环境适应性 工作温度:-20℃ ~ +55℃加固机振动满足 GJB 150.16A电源适应AC 115V/400Hz 及 DC 28V
法规符合性 本版本为模拟数据演示版,软件开发过程符合 GJB 5000B二级或以上相关文档要求正式版本需另行增加持久化加密存储模块
3.3 性能需求
指标 约束值
界面响应时间 按钮点击到界面反馈 ≤ 0.5 s
数据采集与显示刷新率 多通道同步采集,显示刷新率 ≥ 10 fpspyqtgraph 优化)
测试数据保存(内存) 单次测试≤1000 个数据点)写入内存列表时间 ≤ 0.1 s
报告生成时间 生成完整 PDF 报告 ≤ 3 s
并发处理 支持同时采集 8 路传感器(多线程/异步 I/O 分离)
启动时间 软件从双击到主界面可用 ≤ 15 s含仪器自检
四、每个功能模块的具体实现逻辑
4.1 登录与权限模块
· 逻辑:启动时显示登录窗口,调用 Windows 域认证 API或 LDAP同时校验动态口令硬件令牌。成功后根据账户组Admin/Tech/Operator加载不同权限的菜单界面。所有登录/登出动作写入内存中的审计日志列表audit_log.append(...))。
4.2 型号配置模块
· 逻辑:工艺员打开配置界面,从内存全局字典 sensor_models 读取现有型号列表。支持添加/复制/编辑,参数保存前进行合法性校验(如量程必须大于 0压力点列表递增。配置信息以 JSON 对象形式存储于 sensor_models[model_id] 中。程序关闭后所有配置丢失。
4.3 测试执行模块
· 核心流程(状态机):
\1. 初始化:扫码后根据条码从 sensor_models 读取测试模板,自检仪器连接。
\2. 预测试:稳定环境温度,零位校准。
\3. 循环测试for 行程 in [正行程, 反行程] for 压力点 in 设定点; 发送指令给压力控制器 -> 等待稳定PID 反馈) -> 读取传感器值 -> 存入内存数组 test_data[cycle][行程][压力点] = (压力值, 输出值) -> 更新显示。
\4. 结束处理:调用数据分析模块,判定合格性,将本次测试结果存入 current_test_record 字典(含时间、操作人、原始数据数组、结论),解锁报告生成按钮。
· 并发:数据采集使用 QThread 子线程,界面主线程负责刷新,避免假死。
4.4 数据分析与判据模块
· 输入:压力设定值数组 P传感器输出数组 V从内存 test_data 提取)。
· 步骤:
· 使用 scipy.optimize.curve_fit 进行最小二乘线性拟合,得到斜率与截距。
· 非线性 = max|V_meas - V_fit| / (满量程输出) × 100% FS。
· 迟滞 = (正反行程同一压力点输出差值绝对值) 的最大值 / 满量程输出。
· 重复性:多次循环相同压力点输出标准差 的 3 倍除以满量程输出。
· 输出:指标值和 PASS/FAIL 标志,存储到内存的 current_test_record['results'] 中。
4.5 报告生成模块
· 逻辑:用户点击“导出报告”,程序收集 current_test_record 中的原始数据、曲线截图、环境参数、操作员、仪器校准编号。使用 ReportLab 生成 PDF添加数字时间戳和水印调用 SM3 计算文件哈希并嵌入元数据。CSV 使用 csv 标准库导出,行列为各压力点数据。原始数据不额外保存到磁盘,仅通过用户主动导出实现结果持久化。
4.6 异常与自恢复模块
· 实现:所有仪器通讯函数包装 try-except在子线程中监测连接状态。若捕捉到 VISA 超时异常触发信号主界面更新状态灯启动重连定时器QTimer重连成功后自动恢复当前测试进度通过内存中的临时进度变量 test_state。断电时内存数据全部丢失程序启动时检测上次会话未完成由于无持久化不提供断电恢复功能。
五、技术栈要求
类别 技术选型 版本/备注
开发语言 Python 3.10+(推荐 3.10.12);使用 typing 类型注解
桌面框架 PyQt5 或 PySide6 5.15 / 6.5+;采用信号/槽机制QSS 深色样式
科学计算 NumPy, SciPy 1.24+, 1.11+;用于数组运算、曲线拟合、统计分析
仪器通讯 PyVISA 1.13+;后端使用 NI-VISA 或 pyvisa-py纯 python
串口通讯 pySerial 3.5+
实时绘图 pyqtgraph 0.13+;高性能实时曲线,嵌入 QGraphicsView
数据存储 无数据库 所有业务数据(型号配置、测试记录、日志)保存在 Python 内存数据结构中dict, list, pandas.DataFrame可选。不依赖任何磁盘数据库
加密算法 SM3, SM4 通过 gmssl 或 pysmx 库实现国密算法(用于报告签名和导出文件加密)
报告生成 ReportLab 3.6+;生成 PDF支持中文、表格、图片嵌入
日志审计 Python logging + HMAC 内存日志列表;每条记录附加 HMAC-SM3 校验值;程序退出时可选导出日志到文件(仅用于调试,不计入正式存储)
权限&登录 ldap3可选 + 动态口令库 pyotp 用于 TOTPWindows SSPI 可通过 pywin32 调用
打包与部署 Nuitka 或 PyInstaller Nuitka 推荐(性能更优,反编译难度大);生成单一可执行文件 + 依赖目录
开发环境 Visual Studio Code / PyCharm 配合 Python 插件,使用 black、flake8、mypy 保证代码质量
版本控制 Git 配合 Git LFS 管理测试数据样本
操作系统兼容性 国产麒麟 V10ARM64 / 银河麒麟 / Windows 10 IoT 使用平台无关库,跨平台测试;界面按 1080p 设计
说明:本版本采用完全内存存储,不包含任何数据库持久化逻辑,所有数据在程序运行期间有效,适合快速原型验证、算法调试或教学演示。如需符合军工产品真实测试数据留痕要求,后续版本可增加加密数据库模块。
附:需求规格确认清单(开发前需评审)
· 所有 FR 编号与用户操作场景均可追溯
· 性能指标是否与实际工控机硬件CPU/内存)匹配
· 是否明确禁用 Wi-Fi/蓝牙且物理拆除?软件层面也须禁用相关网络 API
· 第三方测评机构的介入时间节点及验收标准
· 内存存储策略是否满足当前项目阶段要求(不落盘、不追溯)