Simulink代码生成: 延时模块及其代码

本文描述延时模块的建模并研究生成的代码。

1 Simulink中的延时模块

延时模块的输出等于它的一个或几个采样周期前的输入。

在Simulink Library Browser——Commenly Used Blocks中提供的延时模块是Delay模块。该模块可以在配置面板中设置延时长度(就是延时多少个采样周期)和初始值等。
在这里插入图片描述
还有一种特殊的延时模块:Unit Delay(单位延时),该模块只延时一个采样周期。博主在工作中所用的延时模块大部分都是单位延时模块,所以后续会以该模块为例进行研究。
在这里插入图片描述

2 延时模块示例模型

本章研究一下延时模块的建模,并验证延时的效果。
1.新建一个Simulink空白模型,并配置好离散求解器,步长设为1s;
在这里插入图片描述
2.建立如下的一个简单输入输出的模型,并运行。观察到输出比输入延后了1s;
在这里插入图片描述
3.可以修改修改Unit Delay模块中的参数,指定模块输出的初始值。
在这里插入图片描述

3 延时模块代码生成

本章研究一下延时模块对应的代码。
1.建立如下模型,并配置好Embedded Coder。模型包含一个输入模块、一个输出模块和一个单位延时模块。先保持延时模块的默认设置;
在这里插入图片描述
2.Ctrl + B生成代码,并观察报告中的initialize函数和step函数;
在这里插入图片描述
软件为这个延时模块定义了一个全局变量UnitDelay_DSTATE(延时状态变量),可以将其理解成一个中间商。从step函数可以看出,这个全局变量用于存放上一个采样时间延时模块的输入信号的值,然后下一个采样时间再赋给输出信号。这样就保证了每个采样时间,输出值为上一个采样时间的输入值。

然后从initialize函数可以分析得出,这个延时状态变量的初始值设为0,对应的模型中的初始值设定。

3.假如我们想方便以后排查问题,自己给这个中间商命名,也是可以的。双击打开Unit Delay配置面板——State Attributes,定义一个State Name,然后配置一个Storage Class。当然,也可以勾选State name must resolve to Simulink signal object,从而关联sldd文件里面定义的Signal对象;
在这里插入图片描述
4.Ctrl + B生成代码,在报告中就能看到,这个状态变量被定义为了Simulink中设置的DelayState名称了。
在这里插入图片描述
>>返回个人博客总目录

  • 25
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值