本文摘要:
这篇文章主要介绍信号对象(Simulink.Signal和Simulink.Parameter)的不同属性对代码生成的影响。
一 Simulink.Signal
根据上一篇文章的介绍,如果我们想要控制模型中,信号线上信号名的代码生成,可以在信号线上设置信号名,并关联到Simulink.Signal的对象。
定义一个Simulink.Signal的对象的方法很简单,首先要确定这个信号的名称,比如我们要定义一阶滤波器的输入信号x,那我们只要在matlab的命令窗口输入:
x = Simulink.Signal
然后就可以看到,Matlab帮我们定义了一个名叫x的Simulink.Signal对象,除了名字是我们指定的,其他都是属性都是默认的。
![51f31c043dab3da56b58d021e84f3c12.png](https://img-blog.csdnimg.cn/img_convert/51f31c043dab3da56b58d021e84f3c12.png)
对于代码生成,我们首先要根据该信号的实际情况,定义该信号的数据类型(必须),维度(强烈推荐指定,默认值-1表示维度根据模型实际情况默认推导),初始值(非0的初始值必须指定,个人也推荐指定初始值),采样时间(-1表示默认为根据模型设置的步长相等,这边除了模型的输入信号推荐指定采样时间外,模型内部的变量可以设为-1),最大最小值(模型大的输入和输出信号推荐根据实际情况指定,内部变量如无特殊需要可以不指定),信号意义描述(可选),信号单位(可选),维度模式(这里强烈推荐都设为Fixed),复数的设置(这里强烈推荐都设为real)
所以一个Simulink.Signal对象除了基本信息完整的定义如下:
![bb9be535cb0a191e9cbc766ed879fe8e.png](https://img-blog.csdnimg.cn/img_convert/bb9be535cb0a191e9cbc766ed879fe8e.png)
接下来就是本讲的重点,CoderInfo的设置。
默认的CoderInfo被设置为’Auto’,这代码代码生成的形式完全按照系统默认的形式生成:
![a4a88eba9d83a327a9af67bdc171e69b.png](https://img-blog.csdnimg.cn/img_convert/a4a88eba9d83a327a9af67bdc171e69b.png)
我们在matlab的工作空间(workspace)双击x,打开设置界面,然后在Storage class的下拉菜单中,可以看到Simulink.Signal可以选择的Storageclass,选择不同的Storage class,生成代码的形式也会不一样,接下来重点说一下常用的几种Storage class
![59d92fccad4ddebc265dd0ea0fac8581.png](https://img-blog.csdnimg.cn/img_convert/59d92fccad4ddebc265dd0ea0fac8581.png)
1.1 ExportGlobal
该类型表示在生成的代码中会有该变量的声明以及定义。通常应用的场景是这个变量就是在这个模型中算出的,所以需要完整的声明和定义,这是最常用的一种store class。选择ExportGlobal后,会出来两种属性,一个是Alias,这个表示我们可以让这个变量在代码中以Alias中定义的别名声明和定义。Aligment这个属性就保持-1,不用去改了。
![3eee94ee5ba146031e6bbd70c52d9f23.png](https://img-blog.csdnimg.cn/img_convert/3eee94ee5ba146031e6bbd70c52d9f23.png)
具体定义的语句为,其他几种Storage class也是用类似的语句去定义,后面就不再描述了。
![75993ddde8e9cdc884bfac41feab2e7f.png](https://img-blog.csdnimg.cn/img_convert/75993ddde8e9cdc884bfac41feab2e7f.png)
接下来我们看一下实际生成的代码,在对应的.h文件中有声明,.c文件中有定义,并且使用的时候就是我们定义的名称x。
![d1be6615527cf98aad2b71b93fcfb72e.png](https://img-blog.csdnimg.cn/img_convert/d1be6615527cf98aad2b71b93fcfb72e.png)