# qpc_demo **Repository Path**: liudegui/qpc_demo ## Basic Information - **Project Name**: qpc_demo - **Description**: 基于 QP/C 状态机和 RT-Thread 的红外相机快门序列控制演示 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-19 - **Last Updated**: 2026-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: C语言, QPC, RT-Thread, 状态机, 红外相机 ## README # com QP/C Demo - 相机快门控制系统 基于 **QP/C 状态机框架** 和 **RT-Thread RTOS** 的红外相机快门序列控制演示项目。 ## 项目简介 本项目演示了如何使用 QP/C (Quantum Platform in C) 状态机框架实现一个复杂的嵌入式系统,主要功能包括: - **快门控制** - 支持普通/紧急开关、位置控制、超时重试 - **ISP 图像处理** - 非均匀性校正(NUC)、图像流控制 - **温度监控** - 多传感器采样、过温保护、历史记录 - **日志系统** - 多级别日志、环形缓冲区、实时输出 - **序列编排** - 自动化序列执行、回退机制、暂停/恢复 ## 架构设计 ### 活动对象 (Active Objects) 系统采用 QP/C 的活动对象模型,包含 4 个核心 AO: ``` ┌─────────────────────────────────────────────────────────┐ │ Application │ ├─────────────────────────────────────────────────────────┤ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ShutterAO │ │ IspAO │ │ SensorAO │ │ LoggerAO │ │ │ │ (P=2) │ │ (P=3) │ │ (P=4) │ │ (P=5) │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ ├───────┴─────────────┴─────────────┴─────────────┴───────┤ │ QP/C Framework │ ├─────────────────────────────────────────────────────────┤ │ RT-Thread OS │ └─────────────────────────────────────────────────────────┘ ``` ### 文件结构 ``` qpc_demo/ ├── main.c # 系统入口、AO启动、MSH命令 ├── app_events.h # 事件信号和事件结构体定义 ├── app_logic.c/h # 序列控制逻辑 ├── shutter_ao.c/h # 快门活动对象 ├── isp_ao.c/h # ISP活动对象 ├── sensor_ao.c/h # 传感器活动对象 ├── logger_ao.c/h # 日志活动对象 ├── common_defs.h # 硬件定义和接口声明 └── README.md # 本文档 ``` ## 核心组件 ### 1. 快门服务 (ShutterAO) 负责快门机构的控制,支持: - 普通开/关操作 - 紧急开/关操作 - 超时检测与自动重试 - 回退恢复机制 **状态机:** ``` [initial] → [active] ├─ EVT_SHUTTER_CLOSE → 执行关闭 ├─ EVT_SHUTTER_OPEN → 执行打开 ├─ EVT_SHUTTER_CLOSE_TIMEOUT → 重试/报错 └─ EVT_SEQUENCE_ROLLBACK → 安全打开 ``` ### 2. ISP 服务 (IspAO) 负责图像信号处理器的控制: - TecLess B 模式控制 - B 图像更新流程 - NUC 非均匀性校正 - 流传输控制 ### 3. 传感器服务 (SensorAO) 负责温度监控和系统健康检查: - 核心/探测器/PCB 温度采样 - 历史数据记录 - 过温报警与恢复 **状态机:** ``` [initial] → [idle] ←→ [sampling] → [alarm] ↑ ↓ └────────────┘ ``` ### 4. 日志服务 (LoggerAO) 提供系统日志记录功能: - 5 级日志级别 (DEBUG/INFO/WARN/ERROR/CRIT) - 环形缓冲区存储 - 控制台实时输出 - 统计信息 ## 事件系统 ### 事件分类 | 类别 | 事件 | 说明 | |------|------|------| | 系统 | `EVT_SYSTEM_*` | 初始化、关机、心跳 | | 快门 | `EVT_SHUTTER_*` | 开关、超时、错误 | | ISP | `EVT_ISP_*` | 流控制、NUC、错误 | | 传感器 | `EVT_SENSOR_*` | 采样、温度报警 | | 日志 | `EVT_LOG_*` | 写入、刷新、清空 | | 序列 | `EVT_SEQUENCE_*` | 启动、暂停、回退 | ### 自动快门序列 ``` Step 1: Stop TecLess B Step 2: Prepare B Update [回退点] Step 3: Close Shutter [回退点] Step 4: Execute B Update Step 5: Open Shutter [回退点] Step 6: Complete B Update Step 7: Start TecLess B Step 8: Sequence Complete ``` ## 使用方法 ### MSH 命令 ```bash # 序列控制 sequence start # 启动自动快门序列 sequence abort # 中止当前序列 sequence status # 显示序列状态 # 传感器控制 sensor start # 启动温度监控 sensor stop # 停止温度监控 sensor read # 读取一次传感器 sensor status # 显示传感器状态 # 日志控制 log dump # 导出日志缓冲区 log clear # 清空日志缓冲区 log stats # 显示日志统计 log level <0-4> # 设置日志级别 # 系统信息 cmd_sysinfo # 显示系统信息 ``` ### 示例输出 ``` ============================================== com QP/C Framework v2.0.0 ============================================== Build: Jan 19 2026 10:30:00 Platform: RT-Thread + QP/C ---------------------------------------------- [System] Hardware initialized OK [System] QF framework initialized [System] Logger service started, prio=5 [System] Sensor service started, prio=4 [System] ISP service started, prio=3 [System] Shutter service started, prio=2 ---------------------------------------------- [System] System startup completed! ``` ## 安全特性 1. **过温保护** - 温度超过阈值时自动中止序列 2. **超时重试** - 快门操作超时自动重试,达到最大次数后报错 3. **回退机制** - 序列执行失败时自动回退到最近的安全点 4. **状态校验** - 序列启动前检查系统状态 ## 配置参数 | 参数 | 默认值 | 说明 | |------|--------|------| | `SHUTTER_CLOSE_TIMEOUT` | 2秒 | 快门关闭超时 | | `SHUTTER_RETRY_COUNT` | 3次 | 最大重试次数 | | `SENSOR_SAMPLE_INTERVAL` | 1秒 | 传感器采样间隔 | | `TEMP_CRITICAL_HIGH` | 80°C | 过温阈值 | | `LOG_BUFFER_SIZE` | 64条 | 日志缓冲区大小 |