CGQ_TEST_DEVICE/generation.json

32 lines
10 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

{
"projectId": 40,
"generationId": "codegen_d83282644a2a4b4b91e025e76d296e18",
"language": "python",
"status": "completed",
"fileIds": [
468
],
"outputDir": "D:\\workspace\\agent\\DocumentGenerateAgent\\agents\\ai_agents\\project-files\\codegen-runs\\codegen_d83282644a2a4b4b91e025e76d296e18",
"relativeOutputDir": "codegen-runs/codegen_d83282644a2a4b4b91e025e76d296e18",
"generatedFiles": [
"README.md",
"app/__init__.py",
"app/data_structures.py",
"app/main.py",
"app/services.py",
"events.ndjson",
"requirements.txt",
"tests/__init__.py",
"tests/test_basic.py"
],
"analysisSummary": "### **业务目标** \n开发一款高安全性、高可靠性的传感器测试设备软件作为传感器测试系统的核心控制单元实现从测试任务配置、自动化执行、实时监控、质量判定到加密报告生成的全流程闭环管理。软件需满足军工级安全与可靠性要求支持在物理隔离环境下运行确保测试数据不落地、操作行为可追溯、系统具备抗干扰和自恢复能力。\n\n---\n\n### **功能清单** \n\n1. **用户权限与双因子认证**\n - 支持操作员、工艺员、管理员三级权限。\n - 集成Windows域账号 + TOTP动态口令进行登录认证。\n - 密码错误超限5次自动锁定账户管理员可解锁。\n\n2. **安全与网络隔离控制**\n - 启动时强制禁用无线网络Wi-Fi/蓝牙)。\n - USB接口仅允许持有认证数字证书的U盘访问用于报告导出。\n - 所有操作日志与测试数据仅驻留内存,断电后自动清空。\n\n3. **传感器型号配置管理**\n - 工艺员可在内存中增删改传感器型号参数(量程、测试点数、循环次数、允差范围)。\n - 配置数据不持久化,退出程序时自动覆写清零。\n\n4. **条码识别与模板匹配**\n - 通过USB HID或串口扫码枪读取传感器唯一条码。\n - 在内存配置表中查找对应测试计划,加载参数模板。\n - 支持手动输入条码备选。\n\n5. **自动化测试序列执行**\n - 按预设压力点自动控制压力控制器加压。\n - 在正反行程中同步触发DAQ卡采集传感器输出数据。\n - 支持暂停、继续、单点跳步等人工干预。\n\n6. **实时数据监控与绘图**\n - 实时绘制压力-输出关系曲线刷新率≥10fps。\n - 显示当前数值、报警状态灯PASS/FAIL、测试进度百分比。\n - 报警响应时间≤100ms。\n\n7. **特征参数计算与判定**\n - 基于最小二乘法计算非线性、迟滞、重复性误差。\n - 与配置阈值对比输出PASS/FAIL结果。\n - 计算耗时≤0.5秒。\n\n8. **加密报告生成与导出**\n - 一键生成PDF/A格式归档报告和CSV原始数据文件。\n - 嵌入SM3哈希值与数字水印确保完整性与防篡改。\n - 报告包含测试结论、数据表、曲线图、操作员签名。\n - 生成时间≤3秒。\n\n9. **仪器异常处理与自恢复**\n - 检测到通讯中断后进入“离线”状态每10秒尝试重连。\n - 重连成功后自动恢复测试进度(基于内存中的断点指针)。\n - 不支持断电后数据恢复。\n\n---\n\n### **数据结构** \n\n1. **用户信息对象**\n ```python\n {\n \"user_id\": str,\n \"role\": enum(\"operator\", \"technician\", \"admin\"),\n \"domain_account\": str,\n \"failed_attempts\": int,\n \"is_locked\": bool,\n \"session_token\": str (optional)\n }\n ```\n\n2. **传感器型号配置项(内存哈希表)**\n ```python\n {\n \"model_id\": str,\n \"range_min\": float, # MPa\n \"range_max\": float, # MPa\n \"test_points\": int, # 测试点数\n \"cycles\": int, # 循环次数\n \"tolerance\": float # 允差范围 (%FS)\n }\n ```\n\n3. **测试上下文对象**\n ```python\n {\n \"current_model\": str,\n \"pressure_sequence\": list[float], # 目标压力序列\n \"current_cycle\": int,\n \"current_point_index\": int,\n \"acquisition_buffer\": ring_buffer[{\n \"pressure\": float,\n \"output\": float,\n \"timestamp\": float\n }],\n \"status_flags\": {\n \"is_running\": bool,\n \"is_paused\": bool,\n \"alarm_active\": bool\n }\n }\n ```\n\n4. **判定结果对象**\n ```python\n {\n \"non_linearity\": float, # %\n \"hysteresis\": float, # %\n \"repeatability\": float, # %\n \"thresholds\": dict, # {key: value}\n \"result\": enum(\"PASS\", \"FAIL\"),\n \"details\": str # 超标说明\n }\n ```\n\n5. **报告内容对象**\n ```python\n {\n \"test_id\": str,\n \"start_time\": datetime,\n \"end_time\": datetime,\n \"operator_id\": str,\n \"model_id\": str,\n \"result_summary\": dict,\n \"raw_data_table\": list[list],\n \"chart_image\": bytes,\n \"sm3_hash\": str,\n \"digital_watermark\": str\n }\n ```\n\n6. **系统状态字典**\n ```python\n {\n \"system_mode\": enum(\"normal\", \"maintenance\", \"na\"),\n \"instrument_status\": {\"pressure_ctrl\": bool, \"daq\": bool},\n \"network_enabled\": bool,\n \"usb_whitelist_active\": bool\n }\n ```\n\n---\n\n### **接口或命令** \n\n#### **硬件接口**\n\n| 接口类型 | 方向 | 名称/标识符 | 描述 |\n|--------|------|------------|------|\n| RS232/485 | 输出 | `SRS-SENSOR_I_RS232_PressCmd` | 发送目标压力值浮点数MPa格式[cmd:1B][value:8B][crc:1B] |\n| RS232/485 | 输入 | `SRS-SENSOR_I_RS232_PressFeed` | 接收实时压力反馈值(双精度浮点) |\n| PXI/GPIB | 输出 | `SRS-SENSOR_I_PXIAcqTrigger` | 触发DAQ卡采集信号 |\n| USB HID | 输入 | `SRS-SENSOR_I_USB_Barcode` | 接收扫码枪输入的字符串(去除前后缀) |\n\n#### **内部模块通信机制**\n\n- 模块间通过函数调用、共享内存对象Python对象引用、消息队列传递数据。\n- 图形界面使用PyQt5信号槽机制接收数据更新事件。\n- 安全模块提供API\n - `verify_totp(token: str) -> bool`\n - `check_usb_certificate(cert: bytes) -> bool`\n - `wipe_memory_region(addr, size)`\n\n#### **关键命令流**\n\n1. **登录流程**\n ```\n [UI] → 输入用户名/密码/TOTP → [认证模块]\n → 验证TOTP → 调用Windows域验证静态密码 → 创建会话令牌 or 锁定账户\n ```\n\n2. **测试启动流程**\n ```\n 扫码 → 提取条码 → 内存匹配型号 → 加载参数 → 初始化控制器 → 开始循环加压 → 数据采集 → 实时绘图\n ```\n\n3. **报告生成流程**\n ```\n 用户点击“生成报告” → 聚合数据 → 渲染PDF/A → SM3哈希嵌入元数据 → 生成CSV → 写入内存映射区 → U盘导出确认\n ```\n\n4. **异常恢复流程**\n ```\n 通讯中断 → 暂停测试 → 进入N/A状态 → 每10秒尝试重连 → 成功则恢复进度指针 → 继续测试\n ```\n\n---\n\n### **约束** \n\n1. **技术栈约束**\n - 必须使用 Python 3.10+ 与 PyQt5/PySide6 开发。\n - GUI框架必须支持麒麟V10与Windows平台。\n\n2. **数据存储约束**\n - 所有业务数据禁止写入磁盘仅使用Python内存对象存储。\n - 程序退出前必须对敏感内存区域执行覆写清零操作。\n\n3. **网络安全约束**\n - 彻底禁用无线网络功能(驱动层强制关闭)。\n - USB仅允许认证U盘导出报告其他设备一律拦截。\n\n4. **算法与标准约束**\n - 动态口令符合 RFC 6238TOTP标准。\n - 报告哈希使用国密SM3算法PDF/A生成离线完成。\n - 最小二乘拟合算法需考虑浮点精度问题。\n\n5. **运行环境约束**\n - 支持龙芯3A5000或x86架构工控机。\n - 操作系统为麒麟V10 SP3 或 Windows 10/11加固版。\n - 工作温度:-20℃ ~ +55℃支持振动环境GJB 150.16A)。\n\n6. **开发过程约束**\n - 遵循 GJB 5000B 二级及以上标准。\n - 设计文档需符合 GJB 438C 要求。\n\n---\n\n### **测试建议** \n\n1. **功能测试**\n - 验证三级用户登录及权限控制逻辑。\n - 模拟扫码枪输入不同条码,验证模板匹配成功率与响应速度。\n - 执行完整测试流程,验证暂停/继续/跳步功能是否准确。\n - 检查报告生成内容完整性、SM3哈希一致性、数字水印有效性。\n\n2. **性能测试**\n - 测量按钮点击响应时间≤0.5s、启动时间≤15s、报告生成时间≤3s。\n - 压力测试连续72小时运行自动化测试监测内存增长≤5%/h、无崩溃。\n - 刷新率测试:在高采样率下验证界面帧率是否稳定 ≥10fps。\n\n3. **安全性测试**\n - 使用网络抓包工具验证无线网卡是否被禁用。\n - 使用USB仿真器模拟非法设备插入验证是否被拦截。\n - 断电后检查内存残留数据(应无敏感信息)。\n - 使用密码学分析仪验证SM3哈希嵌入正确性。\n\n4. **可靠性测试**\n - 模拟仪器通讯中断验证每10秒自动重连机制及恢复能力。\n - 注入非法参数输入,验证系统容错与默认值回退机制。\n - 多轮次压力循环测试,验证数据采集完整性与判定准确性。\n\n5. **兼容性测试**\n - 在麒麟V10与Windows平台上分别部署验证功能一致性。\n - 使用不同品牌扫码枪HID/串口模式)测试条码识别兼容性。\n - 连接多种型号压力控制器与DAQ卡验证驱动适配能力。\n\n6. **合格性验证方法**\n - 对关键需求如SRS-SENSOR_F-001、F-006、NFR-003采用“测试+分析”T/A方式。\n - 架构与技术栈约束采用文档审查与代码审计A方式。\n - 特殊需求如SM3加密需专用工具验证E类方法。",
"eventLogFile": "D:\\workspace\\agent\\DocumentGenerateAgent\\agents\\ai_agents\\project-files\\codegen-runs\\codegen_d83282644a2a4b4b91e025e76d296e18\\events.ndjson",
"repoSettings": {
"username": "root",
"password": "pAssW0rd",
"repoUrl": "http://47.108.255.216:3000/root/CGQ_TEST_DEVICE.git",
"branch": "main"
},
"repoUrl": "http://47.108.255.216:3000/root/CGQ_TEST_DEVICE.git",
"branch": "main"
}