主要内容

多核控制系统的模拟调度器

概述

此示例显示如何使用SimEvents®块对控制应用程序的任务调度进行建模。SimEvents扩展了Simulink®,能够对实时系统的架构组件进行建模和仿真。

顶部模型包括两个区块区域:

  • 功能组件包括两个闭环系统。每个都有一个比例控制器来操作设备。

  • 建筑组件包括对该控制系统的任务和调度程序进行建模的SimEvents块。

建模任务和调度器

此示例将控制器建模为Simulink导出的功能模型。它将控制器的执行映射到操作系统定期调度和执行的软件任务。一个任务可以分为多个段(或子任务)。由于数据依赖性,这些段必须按顺序执行。

任务由以下参数指定:

  • 身份证件:任务的唯一标识符。

  • 期间:为执行而实例化任务的频率。

  • 优先:任务的优先级(值越小表示优先级越高)。

  • 可运行段(功能)列表:与任务的每个段关联的可执行文件。这些可执行文件由导出功能模型的Simulink函数表示。

  • 段执行持续时间:如果任务段在处理器上执行而没有中断,则任务段完成的时间。

  • 每个段需要磁盘i/o资源:任务的某个段是否需要使用互斥保护的共享资源(硬盘)。

例如,块任务2为第二个控制器(块控制器2)指定任务。该任务包括两个段,“t2_run”和“t2_write”,都被建模为模型seSwcController2中的Simulink函数。在这些段中,“t2_write”需要使用受互斥保护的共享资源。

操作系统的调度程序由以下组件建模:

  • 任务创建:块任务1和任务2创建任务并管理任务状态。SimEvents实体表示任务的实例。任务的属性(如优先级)被建模为实体属性。

  • 任务队列:实例化后,任务加入就绪任务队列,该队列由实体队列块OS任务队列建模。为了模拟基于非抢占优先级的调度策略,将队列块配置为按taskPriority属性对任务进行排序。

  • 中央处理器:系统的处理器被建模为实体服务器块CPU。它接受来自OS任务队列的实体,并在任务指定的持续时间内处理该实体段执行持续时间参数。在该延迟结束时,调用该任务段的相应Simulink函数,作为块的服务完成操作的一部分。

  • 锁定/解锁Mutex:在任务段进入块CPU之前,它必须在前面的锁互斥块中获取所需的资源。任务段完成并退出块CPU后,在解锁互斥块释放资源。

  • 管理任务状态:任务1和任务2掩码下的块管理任务的运行时状态。任务段完成后,如果任务有后续段要执行,则任务将被路由回操作系统任务队列。否则,此任务实例将被完成并丢弃。

结果和显示

块CPU配置有两个内核。模拟模型会生成以下甘特图。

  • 优先级较高的任务Task2(红色条)被调度到核心1(y=1)。

  • 优先级较低的任务Task1(蓝色条)计划为核心2(y=2)。

  • 任务2的第二段使用互斥DiskLock。绿色条表示用法(y=3)。

探索模型

更改以下参数,并探索任务时间表和控制器性能如何随重新配置的架构参数而变化。

  • 在块CPU中,配置参数Capacity以更改内核数。

  • 在任务1和任务2中,配置周期和优先级等参数以更改任务规范。

例如,如果我们改变每个段都需要磁盘i/o资源参数设置为[0 0 1],控制器1的t1_write段必须先获取互斥DiskLock,然后才能开始运行。模拟生成一个甘特图来说明这种变化。

  • 这两个任务都有使用互斥DiskLock的段,如绿色条(y=3)所示。

  • Task1的第三个段现在必须与Task2的第二个段以串行方式执行(请参见y=1),因为这两个段共享互斥DiskLock。

相关示例

另请参见

|||||

相关主题