项目1——单片机程序审查,控制系统流程图和时序图

1. 系统整体架构流程图

外部设备 STM32F103RET6 主控制器 FreeRTOS任务层 业务逻辑层 通信协议层 硬件抽象层 Modbus RTU Modbus RTU Modbus RTU 上位机
Modbus主站 伺服驱动器1
站号1 伺服驱动器2
站号2 按钮面板
急停/复位/启动 气动阀门
工件夹紧 GPIO控制 UART通信 定时器 看门狗 Modbus主站
mb_master.c Modbus从站
mb_slave.c 寄存器管理
mb_reg.c 伺服控制器
tigerservo.c 按钮控制器
button_control.c 气阀控制器
valveControl.c Modbus适配器
modbus_slave_adapter.c defaultTask
空闲任务
优先级:Normal modbusTask
Modbus通信
优先级:Normal servoTask
伺服控制
优先级:High systemTask
系统监控
优先级:Low

2. 伺服控制状态机流程图

系统启动 初始化完成 读取完成(21个参数) 读取中/重试 发现差异 无差异 写入完成 重试失败 发现控制差异 无差异 写入完成 重试失败 读取完成 检测到差异 读取中 通信错误 通信错误 通信错误 通信错误 通信错误 INIT READ_INOUT_DATA 配置Modbus
写入初始参数 CHECK_INOUT_DIFF 使用表驱动
地址映射 WRITE_INOUT_DIFF CHECK_CTRL_DIFF 比较读写缓存
50ms延时机制 READ_OUTPUT_DATA 智能站号选择
参数同步更新 WRITE_CTRL_DIFF 检查控制位
启动/停止/急停等 32位控制命令
自动清除标志位 11个输出参数
状态位解析

3. 按钮控制流程图

稳定 抖动 按下 释放 按下 就绪 未就绪 按下 否 是 是 否 是 否 是 否 是 否 系统启动 按钮控制初始化 按钮扫描
5ms间隔 消抖处理
10ms 事件检测 急停按钮? 复位按钮? 启动按钮? 急停处理 伺服紧急停止 等待2秒 开启气阀释放工件 等待2秒 设置急停状态 清除急停状态 系统状态检查 伺服回原点 启动条件检查 系统就绪? 机器运行中? 急停激活? 气阀状态检查 气阀开启? 关闭气阀夹紧 启动伺服 等待2秒 启动成功? 设置运行状态 开启气阀释放

4. Modbus通信时序图

上位机 STM32 MCU 伺服驱动器1 伺服驱动器2 系统启动 - 初始化阶段 写入P3_001(波特率) ACK 写入P3_002(协议类型) ACK 批量写入P6组参数(21个) ACK 正常运行 - 状态机循环 03H读取P6参数[0-20] 参数值 10H写入差异参数 ACK alt [发现参数差异] 10H写入控制寄存器 ACK alt [有控制命令] 03H读取转子速度 速度值 03H读取回授位置 位置值 03H读取状态字 状态值 loop [每100ms周期] 上位机通信 03H读取状态数据 状态值 10H写入控制参数 ACK 地址透传处理 转发到站1 响应 转发到站2 响应 alt [P6组地址(站1)] [站2数据地址] 最终响应 loop [按需通信] 错误处理机制 重试计数+1 重新发送 重置状态机 alt [重试次数<3] [重试失败] alt [通信超时] 上位机 STM32 MCU 伺服驱动器1 伺服驱动器2

5. 系统安全互锁流程图

激活 未激活 运行中
bo_zeroSpeed=false 停止
bo_zeroSpeed=true 运行中 停止 有报警 无报警 伺服运行中 伺服停止 工件未夹紧 工件夹紧 安全检查开始 急停状态? 仅允许开阀
释放工件 伺服运行状态? 禁止所有操作 机器运行标志? 伺服报警? 允许操作 气阀操作? 伺服操作? 按钮操作? 安全气阀控制 安全伺服控制 安全按钮响应 伺服-气阀互锁 气阀锁定 气阀自由 气阀-伺服互锁 伺服锁定 伺服自由 安全操作执行 操作被拒绝 安全检查结束

6. 系统启动时序图

000ms 000ms 000ms 000ms 000ms 000ms 000ms 000ms 000ms 000ms 000ms HAL_Init UART配置 定时器配置 看门狗配置 内核初始化 Modbus寄存器初始化 GPIO配置 任务创建 调度器启动 按钮控制初始化 LED调试初始化 从站适配器初始化 互斥锁创建 等待伺服启动 通信参数配置 初始参数写入 任务调度 状态机循环 Modbus使能 硬件初始化 FreeRTOS启动 业务模块初始化 伺服系统初始化 正常运行 系统启动时序图

7. 错误处理和恢复流程图

通信超时 参数异常 硬件故障 系统异常 小于3次 大于等于3次 是 否 有效 无效 是 否 正常 异常 正常 溢出 是 否 是 否 系统错误检测 错误类型判断 通信错误处理 参数错误处理 硬件错误处理 系统错误处理 重试次数检查 重新尝试通信 重置通信状态机 通信恢复? 恢复正常运行 重新初始化 参数验证 范围检查 更新参数 拒绝参数 错误响应 硬件状态检查 关键硬件? 安全停机 隔离故障模块 进入急停状态 降级运行 系统健康检查 互斥锁状态 任务状态检查 重置互斥锁 栈溢出检查 看门狗检查 栈错误处理 初始化成功? 安全模式 故障监控 自动恢复? 人工干预 错误处理完成


总结

以上流程图和时序图详细展示了系统的各个关键流程:

  1. 整体架构图: 展示了系统的分层结构和模块间关系
  2. 状态机流程: 详细描述了伺服控制的核心逻辑
  3. 按钮控制流程: 展示了安全相关的用户交互逻辑
  4. 通信时序: 说明了Modbus双重角色的通信机制
  5. 安全互锁: 展示了多重安全保护机制
  6. 启动时序: 描述了系统的初始化过程
  7. 错误处理: 展示了系统的容错和恢复能力
相关推荐
NineData5 小时前
NineData云原生智能数据管理平台新功能发布|2025年8月版
数据库·mongodb·云原生·数据库管理工具·ninedata·数据库迁移·数据复制
ooolmf5 小时前
照度传感器考虑笔记
笔记·单片机
zm7 小时前
单片机学习笔记
单片机·嵌入式硬件
猫头虎7 小时前
2025最新超详细FreeRTOS入门教程:第十三章 FreeRTOS临界区与原子操作
stm32·单片机·嵌入式硬件·物联网·51单片机·proteus·iot
Yeats_Liao8 小时前
物联网平台中的MongoDB(二)性能优化与生产监控
物联网·mongodb·性能优化
嵌R式小Z8 小时前
STM32短按,长按,按键双击实现
stm32·单片机·嵌入式硬件
华普微HOPERF10 小时前
Sub-GHz无线收发单片机,低功耗物联网通信的硬件“基石”
单片机·嵌入式硬件·物联网
大阳12310 小时前
51单片机4(温度传感器DS18B20)
开发语言·单片机·嵌入式硬件·算法·51单片机
朱自清的诗.10 小时前
使用python脚本储存mosquito服务器数据到sqlite
python·单片机·sqlite·esp32