\ # 军工传感器自动化测试桌面程序 需求规格说明书(模拟数据版) \## 一、软件架构 本软件采用**分层模块化架构**,自上而下分为四层: \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 fps(pyqtgraph 优化) 测试数据保存(内存) 单次测试(≤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 用于 TOTP,Windows SSPI 可通过 pywin32 调用 打包与部署 Nuitka 或 PyInstaller Nuitka 推荐(性能更优,反编译难度大);生成单一可执行文件 + 依赖目录 开发环境 Visual Studio Code / PyCharm 配合 Python 插件,使用 black、flake8、mypy 保证代码质量 版本控制 Git 配合 Git LFS 管理测试数据样本 操作系统兼容性 国产麒麟 V10(ARM64) / 银河麒麟 / Windows 10 IoT 使用平台无关库,跨平台测试;界面按 1080p 设计 说明:本版本采用完全内存存储,不包含任何数据库持久化逻辑,所有数据在程序运行期间有效,适合快速原型验证、算法调试或教学演示。如需符合军工产品真实测试数据留痕要求,后续版本可增加加密数据库模块。 附:需求规格确认清单(开发前需评审) · 所有 FR 编号与用户操作场景均可追溯 · 性能指标是否与实际工控机硬件(CPU/内存)匹配 · 是否明确禁用 Wi-Fi/蓝牙且物理拆除?软件层面也须禁用相关网络 API · 第三方测评机构的介入时间节点及验收标准 · 内存存储策略是否满足当前项目阶段要求(不落盘、不追溯)