4. 实时任务建模与调度参数设置

在 MicroAutoBox 这类实时目标机上,Simulink 模型并不是“整体一次性执行”的,而是被自动划分为若干任务(Task),每个任务以固定周期或事件触发方式运行。理解任务如何建模、采样时间如何决定调度周期、优先级如何影响抢占关系,是判断实时性能是否达标的核心。本节围绕 PID、状态机、滤波三类典型控制任务,说明在 Simulink 中如何设置采样时间、任务优先级与中断触发方式,并分析这些参数对实时性能的实际影响。

一、从模型到任务:采样时间决定调度周期

Simulink 中每个模块都带有采样时间属性。当模型编译到 MicroAutoBox 时,dSPACE 的实时内核会按采样时间把模型划分为多个采样率组(Sample Rate Group),每个采样率组对应一个实时任务。例如:

  • 电流环 PID:采样时间 100 μs,对应最高频任务;
  • 速度环 PID:采样时间 1 ms,对应中频任务;
  • 状态机与模式管理:采样时间 10 ms,对应低频任务;
  • 滤波与信号调理:采样时间 1 ms,与速度环同组或独立成组。

采样时间一旦确定,任务周期即被固定。周期越短,单位时间内触发次数越多,CPU 占用率越高。因此采样时间不是“越小越好”,而是要在控制带宽需求与实时余量之间折中。通常要求:任务周期 ≤ 控制回路期望响应时间的 1/5~1/10,同时保证所有任务的最坏执行时间(WCET)之和不超过周期。

二、任务优先级与抢占关系

MicroAutoBox 的实时内核采用固定优先级抢占式调度。优先级数值越小(或越高,取决于配置约定)代表越优先。典型配置中,采样时间越短的任务优先级越高,因为高频任务若被延迟,会直接破坏控制律的时序假设。

抢占关系可以这样理解:当高优先级任务就绪时,它会立即打断正在运行的低优先级任务;低优先级任务只能在高优先级任务全部完成后,利用剩余时间片继续执行。因此,如果低优先级任务执行时间过长,会挤压高优先级任务的响应窗口,导致任务超时(Overrun)。

在 Simulink 中,任务优先级通常通过 dSPACE RTI(Real-Time Interface)配置块或目标配置中的任务属性设置。对于多任务模型,需要为每个采样率组指定优先级,并确认任务之间的数据传递使用正确的Rate Transition模块,避免读写撕裂。

三、中断触发方式:周期中断与事件中断

MicroAutoBox 支持两类主要触发方式:

  • 周期中断:由定时器按固定周期触发,适合 PID、滤波等周期性控制任务;
  • 事件中断:由外部信号(如编码器索引、CAN 报文、GPIO 边沿)触发,适合状态机跳转、故障响应等异步逻辑。

周期中断的抖动小、可预测性强,是实时控制的首选。事件中断响应快,但若事件频率不可控,可能造成任务负载突发。实际工程中常将事件中断映射为高优先级任务,并在其中只做最短的标记或数据入队,把耗时处理放到周期任务中完成。

四、典型任务的建模与参数设置示例

下面给出一个可参考的三任务配置示例,用于说明采样时间、优先级与触发方式的搭配关系。以下参数为教学示例,实际项目需根据 CPU 负载与 WCET 测量结果调整。

任务典型内容采样时间优先级触发方式
Task_High电流环 PID、PWM 更新100 μs最高周期中断
Task_Mid速度环 PID、滤波1 ms中周期中断
Task_Low状态机、模式管理10 ms低周期中断
Task_Event故障捕获、CAN 事件异步最高事件中断

在 Simulink 中实现时,PID 控制器可直接使用 PID Controller 模块并设置采样时间;状态机使用 Stateflow 并指定更新周期;滤波器使用 Discrete FIR 或 Biquad 并设置采样时间。所有跨采样率信号必须经过 Rate Transition 模块,否则编译会报错或产生不确定行为。

建议在模型编译后查看 dSPACE ControlDesk 中的任务负载统计,确认每个任务的 CPU 占用率与最坏执行时间,而不是仅凭仿真波形判断实时性。

五、调度参数对实时性能的影响

调度参数设置不当会直接表现为三类问题:

  • 任务超时:某任务在一个周期内未执行完,下一次触发已到达,导致控制输出滞后或丢步;
  • 抖动增大:高优先级任务频繁抢占,使低优先级任务的实际执行时刻偏离理想周期,影响滤波与状态机时序;
  • 数据竞争:跨任务共享变量未加保护,出现读写不一致,表现为控制量跳变或状态机误跳转。

解决思路是:先测量各任务 WCET,再核算 CPU 余量;对高频任务尽量精简代码,把非关键计算下移到低频任务;对共享数据使用 Rate Transition 或双缓冲;对事件中断只做最短处理。只有把采样时间、优先级、触发方式三者作为一个整体来配置,才能让 MicroAutoBox 的实时性能既满足控制带宽,又保留足够的调度余量。

MicroAutoBox 多任务调度与抢占关系示意 t 0 100μs 200μs 300μs 400μs 500μs 600μs Task_High 100μs / 最高优先级 PID PID PID PID PID PID Task_Mid 1ms / 中优先级 速度环 PID + 滤波 速度环 PID + 滤波 速度环 PID + 滤波 Task_Low 10ms / 低优先级 状态机 / 模式管理(被高优先级任务多次抢占) Task_Event 异步 / 最高优先级 故障 CAN 高频周期任务 中频周期任务 低频周期任务 事件中断任务 抢占发生点

上图以时间轴方式展示了三个周期任务与一个事件任务之间的抢占关系:Task_High 每 100 μs 触发一次,Task_Mid 每 1 ms 触发一次,Task_Low 每 10 ms 触发一次。当 Task_High 或 Task_Event 就绪时,正在执行的 Task_Mid 或 Task_Low 会被打断,待高优先级任务完成后才继续。这种抢占关系正是采样时间与优先级共同作用的结果,也是评估实时性能时最需要关注的调度行为。