本文描述延时模块的建模并研究生成的代码。
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名称了。
>>返回个人博客总目录
评论记录:
回复评论: