首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Simulink代码生成:通过Chart模块进行多个周期调度

  • 23-09-22 01:03
  • 4158
  • 6614
blog.csdn.net

本文研究如何通过Chart模块进行多个周期调度。

文章目录

  • 1 问题引入
  • 2 Simulink建模
    • 2.1 Chart模型
    • 2.2 触发子系统
  • 3 代码生成与分析
  • 4 总结

1 问题引入

在很多以前的博客中,博主用Simulink生成的代码中,包含一个Step函数。在代码编译的过程中会把这个Step函数放入OS调度的函数中,譬如Task_5ms()函数内,这个函数就会每隔5ms被操作系统执行一次。

但是博主最近在工作中遇到一个需求是,一个Simulink模型中的不同子系统以不同的周期被调度,但是生成的代码还得是一个step函数。这就需要在模型内实现多个周期调度,研究了一下认为可以通过Chart模块发送不同的事件(Event)来完成这个任务。

2 Simulink建模

博主通过简单的Simulink建模,来记录一下这个方案的思路。

2.1 Chart模型

在模型中,Chart模块充当了一个“调度器”的角色,以不同的频率的事件调度外部的子系统。首先默认这个模型的调度事件是2.5ms。

1)新建一个Simulink模型,拖入一个Chart模块如图所示;
在这里插入图片描述
2)双击进入Chart模块,在其中建立如下图所示的State,命名为Scheduler;
在这里插入图片描述
其中,进入Scheduler时(en),会发送call_2d5ms、call_5ms、call_10ms三个事件。然后在这个状态内(du)持续发送这三个事件,但是频率不同。call_2d5ms事件是每个周期发送一次,call_5ms事件是每两个周期发送一次,call_10ms事件是每4个周期发送一次。这样,由于整个模型的调度周期是2.5ms,所以call_2d5ms事件是2.5ms触发一次,call_5ms事件是5ms触发一次,call_10ms事件是10ms触发一次。

3)在属性栏将这三个事件都设为输出事件;
在这里插入图片描述
4)退出到上一层会看到,Chart模块多出了三个端口,用Goto模块将这三个端口分别引出以备后面的Function-Cal子系统使用。
在这里插入图片描述
5)在模块的properties中取消勾选Execute (enter) Chart At Initialization这样的话,生成代码就不会初始化Chart里面的内容了;
在这里插入图片描述

2.2 触发子系统

建立三个Function-Call子系统,分别由上文的Chart模块的三个输出事件调用;
在这里插入图片描述
每个子系统都是相同的输入port,但是子系统内的Gain模块的放大系数不一样。其中2.5ms的子系统对于着2倍,5ms的子系统对于着3倍,10ms的子系统对于着4倍.这样方便观察生成的代码。

3 代码生成与分析

配置好Embedded Coder后,Ctrl + B生成代码,观察Step函数内容;
在这里插入图片描述
函数一开始会使用i1,i2,i3三个全局变量作为计数器,每次调度step函数时,如果小于1,2或4就会自加1。
在这里插入图片描述
后面的代码中,如果i1,i2,i3分别等于1,2或4的时候,就会执行对于子系统里面的内容。这就意味着模型中的Function1每一次step函数执行一次,Function2每两次step函数执行一次,Function3每四次step函数执行一次。只要把step函数放进2.5ms中周期调度,这三个子系统就会以2.5ms,5ms,10ms来执行,也就完成了博主一开始提出的问题。

4 总结

本文研究通过Chart模块在一个模型中进行多个周期调度的办法,适用的场景比较特殊,但是可以很方便地解决这类问题。

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/120752253"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top