275 lines
12 KiB
Markdown
275 lines
12 KiB
Markdown
# Page 1
|
||
|
||
⼆维运⾏结构概览
|
||
CH32
|
||
版本:
|
||
V1.1
|
||
更新说明 :更新系统架构图
|
||
概述
|
||
1.
|
||
本⽂档旨在描述运⾏于 CH32 单⽚机上的核⼼业务逻辑和软件架构。系统屏蔽了底层的硬件驱动细节,
|
||
主要聚焦于单⽚机端的业务流转和数据处理。整个系统由采集、处理、发送三⼤核⼼模块组成,并辅以
|
||
TCP 协议栈库和动态参数配置功能,以确保系统在⾼性能要求下稳定⾼效地运⾏。
|
||
系统核⼼架构
|
||
2.
|
||
系统整体基于数据流驱动,涵盖了从图像帧获取到最终⽹络传输的完整⽣命周期。
|
||
|
||
# Page 2
|
||
|
||
外部物理
|
||
相机接⼝
|
||
硬件接⼝
|
||
单⽚机端系统架构
|
||
业务核⼼层
|
||
DI 传感器 采集与 DMA 连续轮询
|
||
电平跳变缓冲 满帧就绪事件
|
||
每满帧触发的 DMA 处理
|
||
Loop
|
||
外部 IO 状态缓冲 触发模式配置
|
||
有效电平指令 外部硬触发模式
|
||
内部软触发模式
|
||
待下⼀帧 外部触发等待模块 内部软触发判定模块
|
||
信号跳变读取历史 单帧掩膜嗅探达标
|
||
锁定事件帧 ⽆跳变 未达标
|
||
交付绝对控制权
|
||
预处理提取模块 丢弃 动态切换_触发设定
|
||
安全热更新_触发阈值与ROI 零拷⻉有效数据负载
|
||
打包与发送模块
|
||
安全热更新_
|
||
⼨
|
||
裁剪位置与尺
|
||
调⽤ Send API (5512)
|
||
⽹络与底层传输层
|
||
调整发送策略 TCP 协议栈库
|
||
以太⽹/Wi-Fi TCP 报⽂
|
||
触发 Recv 回调 (5511)
|
||
参数管理与控制模块 上位机 ConfigServer
|
||
收到 NG 检测结果
|
||
硬件 IO 交互边界
|
||
定时驱动模块
|
||
发出维持延迟⾼电平
|
||
DO ⽓缸/报警灯
|
||
核⼼功能模块详细设计
|
||
3.
|
||
采集模块
|
||
3.1
|
||
定位:底层硬件和信号抽象。
|
||
职责:负责与相机进⾏物理通信。对单⽚机其他业务代码⽽⾔,它是⼀个完全解耦的⿊盒。
|
||
业务对接机制:采集模块内部⾃⾏处理相机通信、触发延时、DMA采集等。每完成⼀帧的采集,模
|
||
块会将数据转化为统⼀的⼆维整数矩阵(Integer Matrix),存⼊单⽚机内存的环形缓冲区,并通过
|
||
软中断、回调函数或信号量通知预处理模块接管数据。
|
||
|
||
# Page 3
|
||
|
||
内部软触发判定模块(核⼼控制块)
|
||
3.2
|
||
定位:轮询模式下的事件嗅探器。
|
||
职责:在内部触发( TriggerMode = 0 )模式下,⾼频处理由底层 DMA 源源不断抛出的完整原始测
|
||
温满帧,判断并锁定有效⽬标进⼊画⾯的“瞬间”。
|
||
⼯作机制:
|
||
i. ⾼速嗅探:每收到⼀帧满帧,⽴即调⽤ Preprocess_CheckInternalTrigger2D API 快速浏览预
|
||
设的触发感兴趣区域 (Trigger ROI)。这避免了对⽆需关注的⽆⽬标区域进⾏毫⽆意义的算⼒浪
|
||
费。
|
||
ii. 掩膜嗅探:运⽤设定的温度阈值将低温背景瞬间剥除,并迅速计算出该⼩格 ROI 内部的最⾼温
|
||
度或平均温度。
|
||
iii. 定格:当发现温度满⾜判定条件时,⽴刻向主控系统反馈命中信号(返回 1),主控随即接管该
|
||
帧缓冲区的绝对控制权(防⽌它被后续 DMA 盲⽬轮询覆盖),将其确认为事件起点帧(第 0
|
||
帧),推⼊下⼀级的数据裁剪与提取阶段,并开启定时连拍。
|
||
预处理与提取模块(核⼼业务块)
|
||
3.3
|
||
定位:数据加⼯、过滤清洗与裁剪提炼。
|
||
职责:接收整数矩阵,并根据当前的算法参数(如过滤阈值
|
||
TriggerTemperatureThreshold
|
||
、⽬标
|
||
尺⼨
|
||
TargetWidth * TargetHeight
|
||
)进⾏滑动滤波和坐标锁定。
|
||
核⼼处理逻辑(温度过滤与最⼤均温滑动计算):
|
||
i. 温度过滤预处理:识别出低于阈值的像素,在计算中视作默认低温值(如 90,即9.0°C),保
|
||
留⾼于等于阈值的像素原始温度参与计算。
|
||
ii. 滑动窗⼝计算:通过列累加和向右滑动窗⼝(加右侧新列减左侧旧列),快速计算⼆维矩阵内
|
||
连续
|
||
TargetWidth * TargetHeight
|
||
区域的总和(即平均温度)。
|
||
iii. 位置锁定:在预设或受控范围(如 ROI)内记录总和最⼤值的起始坐标 (X, Y) ,这即是触发
|
||
帧的最佳裁剪位置。
|
||
iv. 零拷⻉极速搬运:基于锁定好的坐标 (X, Y) ,从原始环形缓冲区中原样提取出这块
|
||
TargetWidth * TargetHeight
|
||
的未被修改过的真实测温有效像素。直接填⼊外部提供的已经偏
|
||
移好的⽹络打包内存中。
|
||
执⾏流程:
|
||
|
||
# Page 4
|
||
|
||
收到新帧就绪信号
|
||
获取当前帧⼆维数组指针
|
||
是否开启内部触发判定?
|
||
是
|
||
否(外部硬触发) 计算触发ROI内的最⾼/均温
|
||
达标 未触发
|
||
读取匹配参数: 阈值与⽬标
|
||
丢弃退出
|
||
尺⼨
|
||
温度阈值过滤计算_仅⽤于
|
||
统计寻优
|
||
执⾏窗⼝滑动累加与最⼤均
|
||
温计算
|
||
|
||
# Page 5
|
||
|
||
锁定最优坐标 X, Y
|
||
根据 X, Y 裁剪提取原汁原味
|
||
的未处理像素矩阵
|
||
附带正确极值统计信息⽣成
|
||
结果
|
||
⽆缝移交⽹络 TCP 组包零拷
|
||
⻉发送
|
||
打包与发送模块(核⼼业务块)
|
||
3.4 TCP
|
||
定位:基于 TCP Raw Stream 2.0 协议的应⽤层通信封装、链路管理与调度引擎。
|
||
主要功能总结:
|
||
i. 双流管理与主动连接:采⽤“采集端主动连接,上位机被动监听”模式,解决 IP 不固定的问题。
|
||
系统维护两个独⽴的 TCP ⻓连接以实现控制与数据解耦:
|
||
控制流 (Port 5511):⽤于配置下发、指令控制与⼼跳维护。
|
||
数据流 (Port 5512):专属⽤于⾼频温度数据(如 TemperatureFrame_t)的实时上报。
|
||
ii. ⾝份握⼿与动态绑定:连接建⽴后发送⾸包进⾏握⼿(Handshake),携带硬件 UUID。⽀持服
|
||
务端对逻辑设备 ID (DevID) 的冲突检测和动态重新分配,保证多设备并发下的正确识别。
|
||
iii. 数据封装与打包:按照 2.0 ⼩端序规范,将业务数据封装为 TLV(Type-Length-Value)结构。
|
||
⾃动在其外侧包裹核⼼帧头(包含
|
||
Magic标识(0x55AA)
|
||
、序列号、时间戳、载荷属性等)以及
|
||
尾部的
|
||
CRC16
|
||
校验和。
|
||
iv. 可靠性传输机制:
|
||
重传与确认:针对控制指令和握⼿实施 ACK 确认与重传。
|
||
⼤包分⽚ (Fragmentation):当业务载荷超过 MTU/分⽚最⼤限制时,⾃动进⾏序列分⽚
|
||
传输,以确保⽹络利⽤率。
|
||
v. 链路诊断与恢复:维持周期⼼跳机制(Keep-Alive)具备超时判定功能;在遭遇断⽹或对端重
|
||
置后,可执⾏指数退避式的⾼容忍度重连,并⾃动重启握⼿绑定流程。
|
||
执⾏流程概览:
|
||
|
||
# Page 6
|
||
|
||
应⽤层触发通信
|
||
消息类型分类
|
||
业务数据上报
|
||
按 TLV 封装并定位⾄ 5512
|
||
⼼跳/响应/状态
|
||
数据流
|
||
载荷是否⼤于允许的单次发 按 TLV 封装并定位⾄ 5511
|
||
送上限? 控制流
|
||
否
|
||
是
|
||
执⾏⼤包分⽚
|
||
⽣成完整数据包
|
||
Fragmentation
|
||
附加 FrameHeader 与
|
||
CRC16 校验帧
|
||
|
||
# Page 7
|
||
|
||
CRC16 校验帧
|
||
调⽤底层 TCP 协议栈对应
|
||
Socket 发送接⼝
|
||
参数更改模块(控制业务块)
|
||
3.5
|
||
定位:系统的“神经中枢”与配置通道。
|
||
职责:解析基于 TCP 连接传来的上位机控制指令,动态修改单⽚机的⼯作⾏为及参数(如:预处
|
||
理阈值,⽹络打包频率等),⽽⽆需复位单⽚机。
|
||
执⾏流程:
|
||
i. 解析:TCP 栈触发接收回调,提取载荷中的指令码及配置数据。
|
||
ii. 校验:检查数据的合法性。
|
||
iii. 应⽤:使⽤原⼦操作或影⼦寄存器(Shadow Buffer)机制更新全局参数结构体,确保正在进
|
||
⾏图像处理的流⽔线不会因为参数中途突变⽽导致指针越界或计算崩溃。
|
||
iv. 回执:向客⼾端回传 ACK 包,告知参数修改⽣效。
|
||
硬件 与触发反馈模块(交互边界)
|
||
3.6 IO
|
||
定位:处理与外部硬件的物理数字电平交互(DI/DO),连接“触发动作”与“剔除执⾏”。
|
||
职责与⼯作机制:负责实时响应外部脉冲输⼊或程序内部事件,并能根据⽹络判定结果执⾏动作以
|
||
控制外部设备。
|
||
① 触发采集机制(影响⼯作流起点)
|
||
采集流⽔线的启动⽅式严格受触发模式配置参数的影响:
|
||
1. 外部触发 (External Trigger):
|
||
⾏为逻辑:系统实时监听预设的 DI 触发引脚(例如:接收光电传感器的输⼊)。当检测到有效
|
||
电平变化,并在通过设定的消抖滤波间隔 ( TriggerDebounceIntervalMs ) 确认信号稳定后,视
|
||
为正式触发。
|
||
影响:系统在经历特定的触发延时后,命令采集模块连续捕捉设定的张数
|
||
( TriggerBurstCount )。只有被这批动作捕捉到的⼆维矩阵数据才会进⼊预处理与 TCP 发送队
|
||
列。⾮触发状态下,系统处于待机且不产⽣多余计算和⽹络流量。
|
||
2. 内部触发 (Internal Trigger / 轮询阈值触发):
|
||
⾏为逻辑:采集模块通过底层 DMA 持续不间断地循环向单⽚机缓冲内存区抛出测温画⾯。主
|
||
程序每收到⼀帧,都会调⽤ Preprocess_CheckInternalTrigger2D 进⾏轻量级的 ROI 温度计算
|
||
嗅探。
|
||
|
||
# Page 8
|
||
|
||
算法双轨制设计:(核⼼重点) ⽆论是触发嗅探还是后续的截取寻优,系统都会使⽤配置的恒
|
||
定底噪温度(如 9.0℃)掩盖低温像素。但最终打包进⽹络的数据与统计报告(最⾼/最低/平均
|
||
温)必须是原汁原味、从未被过滤过的测温像素。这种分离设计既保证了单⽚机极速抓取⽬标
|
||
的抗⼲扰能⼒,⼜避免了上位机 AI 模型因收到修改过的纯⾊背景图⽽发⽣误判。
|
||
影响:⼀旦⽬标进⼊画⾯,触发算法判定达标,系统会⽴刻“锁定”该帧所在缓冲区(防⽌被
|
||
DMA 再次覆盖),确认其为事件起点帧(第0帧),并在提取发出后稳定连拍指定的定格张数。
|
||
内部触发 (基于轮询) ⾏为动作图:
|
||
硬件采集/DMA 单⽚机主循环 Preprocess模块
|
||
loop [每⼀帧采集完成]
|
||
推送当前帧 (Raw Buffer)
|
||
1. Preprocess_CheckInternalTrigger2D()
|
||
在 TriggerRoi 内执⾏(掩膜过滤 + 极值判定)
|
||
alt [判定未触发 (< Threshold)]
|
||
返回 0 (丢弃)
|
||
解锁缓冲让下⼀次 DMA 覆盖
|
||
[判定触发 (>= Threshold)]
|
||
返回 1 (锁定⽬标)
|
||
记录本帧为 [事件第0帧], 锁定缓冲
|
||
2. Preprocess_Execute()
|
||
全范围滑窗寻优 + 原样零拷⻉提取
|
||
TcpTxBuffer 组装完毕
|
||
开启定时连拍并推送到⽹络发送队列
|
||
硬件采集/DMA 单⽚机主循环 Preprocess模块
|
||
|
||
# Page 9
|
||
|
||
② ⾃动剔除与报警输出机制 驱动机构
|
||
( )
|
||
本架构⽀持全链路防错的闭环响应机制,将上位机的智能分析结果迅速转译为实际动作:
|
||
接收判定 (触发下发):TCP 接收任务(控制流)收到来⾃主机的特定结果回调封包(如
|
||
DetectionResult_t 宣告当前帧检测失败/缺陷,即 Result == 1 / NG)。
|
||
执⾏输出 (DO 直接驱动):
|
||
i. 识别到 NG,系统内部回调会⽴即响应,拉⾼预先配置的 DO 输出引脚(对应⽣产流⽔线的废
|
||
料剔除⽓缸、拨⽚或是声光报警装置)。
|
||
ii. 系统内部开启定时器,维持该⾼电平动作状态 NGioDelay 毫秒时⻓,这确保了较慢的机械分拨
|
||
机构能吃满⾏程去推落次品。
|
||
iii. NGioDelay 时间期满后,定时中断会⾃动将对应 DO 信号电平拉低复位,⼲净利落地收回⽓
|
||
缸,复归常态以应对下⼀次测试。
|
||
协议栈功能库(底层⽀持)
|
||
3.7 TCP
|
||
定位:可靠的流式⽹络传输⽀持(如 LwIP 移植)。
|
||
职责:
|
||
Socket 抽象:提供标准化、极简的创建、监听、连接、发送、接收 API。
|
||
状态机维护:⾃动处理三次握⼿、四次挥⼿、重传及断线侦测操作。
|
||
缓冲管理:管理底层的发送缓冲和接收窗⼝(TCP Window)。
|
||
性能保证与优化策略
|
||
4.
|
||
为确保“采集 -> 处理 -> 发送”这⼀重负载流⽔线在 CH32 上具备⾼帧率、低延迟的性能,需采⽤以下策
|
||
略保障:
|
||
1. 零拷⻉ (Zero-Copy) 内存流转:
|
||
在整个数据链路中,严禁在不同业务逻辑之间进⾏⼤块内存的
|
||
memcpy
|
||
复制。应当采⽤传递内存指
|
||
针的⽅式,让不同的模块轮流获取同⼀块内存的读写权限。
|
||
2. Ping-Pong 双缓冲设计 (Double Buffering):
|
||
为“矩阵输出”和“预处理”分配 A/B 两块缓冲区。当采集模块(⿊盒)向 Buffer A 写⼊第 N 帧时,预处
|
||
理模块正在读取 Buffer B 处理第 N-1 帧。两者物理隔离,实现 CPU 和外设间的全并发,⽆缝衔
|
||
接。
|
||
3. 事件驱动与 RTOS 并发:
|
||
抛弃低效的死循环轮询模式。围绕 RTOS 任务构建模型:采集结束触发信号量 -> 唤醒⾼优先级处
|
||
理任务 -> 唤醒发送任务。其余时间 CPU 处于休眠或处理低速⽹络事件。
|
||
4. 发包防阻塞与 TCP 合并传输:
|
||
将不重要且碎⽚的包合并发送;针对⼤数据块发送,采⽤异步队列机制或者结合 DMA 送到⽹络
|
||
|
||
# Page 10
|
||
|
||
MAC 接⼝,防⽌ CPU ⻓时间处于等待 TCP ACK 的阻塞状态。
|
||
|