主要内容

从具有启动激活时间的可变块生成代码

此示例向您展示如何使用启动变体激活时间。生成的代码包含所有使用regular的变量选择如果语句。

模型

打开模型slexVariantSourceAndSinkWithStartup.slx.的变体Source1有条件X = = 1而且X = = 2为其输入端口。块命名变体Source1有一个更新图激活时间。X变量是否为控制变量,并在PostLoadFcn->模型属性->回调.的Sine3当块处于活动状态时X = = 1是真的,而Sine4当块处于活动状态时X = = 2是真的。

在命名为变体Source2块时,第一个输入端口是活动的V = = 1是真的。时,第二个输入端口是活动的V = = 2是真的。的变体Source2有一个启动激活时间。

块命名变体水槽有条件W = = 1而且W = = 2在其输出端口上。这些条件被传播到连接的块。的Gain5块被分配了条件W = = 1的第二个输出端口变体水槽Block的条件是W = = 2.该条件被传播到Out4块。如果您选择允许零活动变量控件变体水槽块,然后Sine5而且Gain4块将被分配变量条件W = = 1 | W = = 2

open_system (“slexVariantSourceAndSinkWithStartup.slx”);

生成代码

您可以通过单击生成代码构建ERT构建生物利用.内联变量块变体Source2而且变体水槽使用带参数的可变条件表达式V而且W.这些参数有一个“ExportedGlobal”存储类规范。当您指定一个条件表达式来确定主动选择时,表达式的每个变量控制变量都有一个与其关联的存储类。通过使用存储类,您可以控制生成代码中变量控制变量的外观和位置。存储类还防止优化,例如消除生成代码中变量控制变量的存储。变量条件表达式中使用的变量必须满足一定的条件,才能用Simulink Coder或Embedded Coder生成代码。有关存储类规范的详细信息启动激活时间,看到不同变量激活时间的存储类

变体Source2而且变体水槽块有启动激活时间,所有的选择都是可用的,从嵌入式Coder (ERT)或Simulink Coder (GRT)生成的代码将有规则如果条件。

用Embedded Coder生成的代码运行所选的变体。

if(V == 2) {rtb_Gain5 = sin((real_T)slexVariantSourceAndSinkWith_DW. if(V == 2) {rtb_Gain5 = sin((real_T)slexVariantSourceAndSinkWith_DW.)Counter * 2.0 * 3.1415926535897931 / 10.0);rtb_Gain4 =罪(slexVariantSourceAndSinkWith_DW (real_T)。Counter_h * 2.0 * 3.1415926535897931 / 10.0);rtb_sin6 = rtb_Gain5 + rtb_Gain4;} else if(V == 1) {/* Sin: '/Sine1' */ rtb_Sine6 = Sin ((real_T)slexVariantSourceAndSinkWith_DW.}Counter_c * 2.0 * 3.1415926535897931 / 10.0);}
if((V == 1) || (V == 2)) {slexVariantSourceAndSinkWithS_Y. if((V == 1) || (V == 2)) {Out1 = 3.0 * rtb_sin6;}

方法使用自定义代码选择活动变体系统Initiliaze块。改变…的值V而且W使用自定义代码,导航到型号设置>代码生成>自定义代码.指定# include“ReadVarControl.h”头文件而且ReadVarControl.c源文件

源文件ReadVarControl.c应该包含一些代码来读取的值VW根据需求并设置活动变量值。

#include "rtwtypes.h" extern int32_T V;走读生int32_T W;// V和W的值可以从传感器或硬件读取//为了简单,它是硬编码的。V = 2;W = 2;}

在模型初始化函数中,您可以找到设置所需值的代码V而且W,如下图所示。

void slexVarinatSourceAndSinkWithStartup_initialize(void) {SetValueOfVarControls();utAssert((W == 1) + (W == 2) == 1);utAssert((V == 1) + (V == 2) <= 1);}

请注意-

1模型初始化函数在生成的代码中不受保护。

2SetUpRuntimeResources开始,初始化调用块的方法与启动变量激活无关。这些方法在代码生成中没有条件保护。

3.在启动激活中用作变量控制变量的参数将不会出现在生成的生产技术ASAP2接口。

的值初始化模型之后V而且W在步进法中不要改变。如果您需要确保变量控制的值不随步骤更改,那么您必须向生成的代码添加一个检查,以确保变量控制的值不随步骤更改。

utAssert模型初始化函数中的语句确保为变量块生成的代码行为与模拟匹配。例如,utAssert((V == 1) + (V == 2) <= 1)确保您不能有多个活动的变体变体Source2

如果允许零主动变量控制未被选中时,utAssert语句检查对于此类变量块,至少有一个变量选择是活动的。如果允许零主动变量控制时,它生成代码以确保您不能有多个活动变量。

Baidu
map