2. 医疗设备实时任务建模
在医疗设备中,实时任务建模不是把功能简单拆成若干线程,而是要把“什么时候必须做完、做多久、允许多大偏差、谁先执行、谁依赖谁”这些约束用可计算的方式表达出来。输液泵流量控制和呼吸机送气时序是两类典型对象:前者以较慢的周期持续调节,后者以呼吸节律为基准,在吸气窗口内完成阀门与压力的快速协同。若模型只写“周期 10 ms”,却不说明截止时间、抖动和依赖关系,调度器就无法判断系统是否可满足,测试也无法定位超时来源。
一、任务模型的基本参数
一个实时任务通常用五元组描述:周期 T、执行时间 C、相对截止时间 D、抖动 J、优先级 P。周期是任务被释放的时间间隔;执行时间是最坏情况下的处理器占用;相对截止时间是从释放到必须完成的时限;抖动是实际释放时刻相对理想周期的偏移范围;优先级决定就绪队列中的执行顺序。对医疗设备而言,D 不一定等于 T,例如呼吸机吸气阀控制任务周期为 5 ms,但截止时间可能只有 2 ms,因为送气窗口一旦错过,压力波形就会失真。
抖动需要区分释放抖动和完成抖动。释放抖动来自定时器精度、中断延迟或上游事件到达的不确定性;完成抖动还叠加了调度抢占和资源等待。输液泵流量控制中,若步进电机驱动任务周期为 20 ms、抖动允许 ±1 ms,则流量积分误差通常可接受;但若抖动达到 ±5 ms,单位时间内的步数补偿就会出现明显波动。因此建模时必须把 J 写成可验证的指标,而不是“尽量准时”。
二、以输液泵为例建立周期任务集
假设一台输液泵的控制软件包含以下任务:流量传感采集任务、流量计算与误差积分任务、电机步进驱动任务、气泡检测任务、报警与显示任务。它们共享一个 1 ms 系统节拍。下表给出一组教学示例参数,用于说明建模方法,并非某型号实测数据。
| 任务 | 周期 T | 执行时间 C | 相对截止时间 D | 允许抖动 J | 优先级 |
|---|---|---|---|---|---|
| 流量传感采集 | 10 ms | 0.8 ms | 10 ms | ±0.2 ms | 高 |
| 流量计算与积分 | 10 ms | 1.5 ms | 10 ms | ±0.5 ms | 中高 |
| 电机步进驱动 | 20 ms | 2.0 ms | 5 ms | ±1.0 ms | 最高 |
| 气泡检测 | 50 ms | 1.2 ms | 50 ms | ±2.0 ms | 中 |
| 报警与显示 | 100 ms | 3.0 ms | 100 ms | ±5.0 ms | 低 |
从表中可见,电机步进驱动任务的周期最长,但截止时间最短,优先级最高。这是因为步进脉冲的相位误差会直接改变瞬时流量,必须在 5 ms 内完成一次脉冲序列更新。流量计算任务依赖采集任务的数据,因此存在数据依赖;报警任务依赖流量计算结果和气泡检测结果,存在事件依赖。若忽略这些依赖,只按周期做利用率计算,会低估阻塞时间。
三、呼吸机送气时序的任务图与依赖关系
呼吸机的送气过程通常由吸气触发、压力/流量闭环控制、吸气阀与呼气阀切换、氧浓度监测等任务构成。与输液泵不同,呼吸机存在明确的相位依赖:吸气阀控制必须在吸气窗口开始前准备好,呼气阀必须在吸气结束时及时打开。若用任务图表示,节点是任务,有向边表示数据依赖或执行顺序约束。
下面用一张任务图与依赖关系图来呈现呼吸机送气时序的核心结构。图中同时标出周期、截止时间和关键依赖方向,便于对照调度分析。
图中每条边都对应一种真实约束:触发检测到闭环控制是事件依赖,闭环控制到吸气阀驱动是数据依赖,吸气阀驱动到呼气阀切换是相位依赖,氧浓度监测到报警显示是状态依赖。若把呼气阀切换任务与吸气阀驱动任务设为同优先级,且没有相位约束,就可能出现吸气尚未结束就提前打开呼气阀的时序错误。因此任务图不仅是调度输入,也是安全需求的可视化表达。
四、优先级分配与可调度性判断
医疗设备常采用固定优先级抢占式调度。优先级分配应遵循“截止时间越短、抖动要求越严、安全影响越大,优先级越高”的原则。对上述呼吸机任务集,可先按 D 排序:吸气触发检测 D=1 ms、吸气阀驱动 D=2 ms、呼气阀切换 D=2 ms、闭环控制 D=3 ms、氧浓度监测 D=20 ms、报警显示 D=50 ms。但优先级不能只按 D 排,还要考虑阻塞:若闭环控制持有共享传感器总线,而吸气阀驱动需要同一总线,则高优先级任务可能被低优先级任务阻塞。此时应使用优先级继承或缩短临界区。
可调度性可用利用率快速初判。对单调速率调度,若所有任务满足 D=T,则总利用率 U=Σ(Ci/Ti) 小于 n(2^(1/n)-1) 时一定可调度。以上述呼吸机任务为例,U=1/2+3/5+2/5+20/20+2/5+50/50 的近似计算中,需注意单位统一为毫秒:吸气触发 1/2=0.5,闭环 3/5=0.6,吸气阀 2/5=0.4,氧浓度 20/20=1.0,呼气阀 2/5=0.4,报警 50/50=1.0,合计 3.9,显然超过 1,说明该示例参数不能直接作为单核任务集,必须拆分到多核或降低执行时间。这个判断过程本身说明:建模参数必须与硬件资源匹配,不能只写任务清单。
五、抖动与截止时间的验证方法
建模完成后,需要用可观测手段验证。对输液泵,可在电机驱动任务入口和出口翻转 GPIO,用示波器测量脉冲间隔,统计周期直方图和最大抖动;对呼吸机,可在吸气阀控制任务中记录时间戳,与压力传感器波形对齐,检查吸气窗口起点是否落在允许范围内。若发现完成抖动超限,应区分是释放抖动还是执行时间波动:前者检查定时器和中断延迟,后者检查临界区长度和缓存命中。
综上,医疗设备实时任务建模的核心不是画出任务框,而是把周期、截止时间、抖动、优先级和依赖关系写成可验证的约束。输液泵侧重周期稳定性与流量积分误差,呼吸机侧重相位依赖与送气窗口的硬截止时间。只有把任务图、参数表和验证点对应起来,后续的调度配置、代码实现和测试判断才有可靠依据。