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 ms0.8 ms10 ms±0.2 ms高
流量计算与积分10 ms1.5 ms10 ms±0.5 ms中高
电机步进驱动20 ms2.0 ms5 ms±1.0 ms最高
气泡检测50 ms1.2 ms50 ms±2.0 ms中
报警与显示100 ms3.0 ms100 ms±5.0 ms低

从表中可见,电机步进驱动任务的周期最长,但截止时间最短,优先级最高。这是因为步进脉冲的相位误差会直接改变瞬时流量,必须在 5 ms 内完成一次脉冲序列更新。流量计算任务依赖采集任务的数据,因此存在数据依赖;报警任务依赖流量计算结果和气泡检测结果,存在事件依赖。若忽略这些依赖,只按周期做利用率计算,会低估阻塞时间。

三、呼吸机送气时序的任务图与依赖关系

呼吸机的送气过程通常由吸气触发、压力/流量闭环控制、吸气阀与呼气阀切换、氧浓度监测等任务构成。与输液泵不同,呼吸机存在明确的相位依赖:吸气阀控制必须在吸气窗口开始前准备好,呼气阀必须在吸气结束时及时打开。若用任务图表示,节点是任务,有向边表示数据依赖或执行顺序约束。

下面用一张任务图与依赖关系图来呈现呼吸机送气时序的核心结构。图中同时标出周期、截止时间和关键依赖方向,便于对照调度分析。

呼吸机送气时序任务图与依赖关系(示例) 吸气触发检测 T=2 ms D=1 ms J≤0.1 ms P=最高 压力/流量闭环控制 T=5 ms D=3 ms J≤0.3 ms P=高 吸气阀驱动 T=5 ms D=2 ms J≤0.2 ms P=最高 氧浓度监测 T=20 ms D=20 ms J≤1.0 ms P=中 呼气阀切换 T=5 ms D=2 ms J≤0.2 ms P=最高 报警与波形显示 T=50 ms D=50 ms J≤5.0 ms P=低 触发事件 控制量 采样依赖 相位约束 吸气结束 状态汇总 监测结果 依赖方向:触发检测 → 闭环控制 → 吸气阀驱动;闭环控制 → 氧浓度监测;吸气阀驱动 → 呼气阀切换(相位约束);监测结果 → 报警显示。

图中每条边都对应一种真实约束:触发检测到闭环控制是事件依赖,闭环控制到吸气阀驱动是数据依赖,吸气阀驱动到呼气阀切换是相位依赖,氧浓度监测到报警显示是状态依赖。若把呼气阀切换任务与吸气阀驱动任务设为同优先级,且没有相位约束,就可能出现吸气尚未结束就提前打开呼气阀的时序错误。因此任务图不仅是调度输入,也是安全需求的可视化表达。

四、优先级分配与可调度性判断

医疗设备常采用固定优先级抢占式调度。优先级分配应遵循“截止时间越短、抖动要求越严、安全影响越大,优先级越高”的原则。对上述呼吸机任务集,可先按 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,用示波器测量脉冲间隔,统计周期直方图和最大抖动;对呼吸机,可在吸气阀控制任务中记录时间戳,与压力传感器波形对齐,检查吸气窗口起点是否落在允许范围内。若发现完成抖动超限,应区分是释放抖动还是执行时间波动:前者检查定时器和中断延迟,后者检查临界区长度和缓存命中。

建模时建议把每个任务的 T、C、D、J、P 以及依赖边写入配置文件或设计表,并在代码中保留运行时时间戳。这样调度分析和现场排障使用同一组数据,避免“设计一套、实现一套”。

综上,医疗设备实时任务建模的核心不是画出任务框,而是把周期、截止时间、抖动、优先级和依赖关系写成可验证的约束。输液泵侧重周期稳定性与流量积分误差,呼吸机侧重相位依赖与送气窗口的硬截止时间。只有把任务图、参数表和验证点对应起来,后续的调度配置、代码实现和测试判断才有可靠依据。