Simulin万博1manbetxk上的家伙

万博1manbetxSimulink和基于模型的设计

使用数学表达式指定变量值:生成的代码

前段时间,我发表了一篇文章,描述了 如何使用数学表达式指定变量值 使用 slexpr 函数。这引发了许多关于模型生成的代码的影响的问题 嵌入式编码器 ™。
为了帮助解答这些问题,我很高兴欢迎客座博主回来 大卫Balbuena

默认的行为

我读盖伊的第一个想法 最近的帖子 slexpr 是“那代码生成呢?!”
今天我将向你展示如何使用 嵌入式编码器 ™在生成的代码中保留参数表达式。
我们来看Guy模型中使用变量的部分 区域 (我稍后会解释为什么我省略了斜边):
area_model.png
在哪里 区域 使用以下代码创建:
a = 万博1manbetxSimulink.Parameter(3);
b = 万博1manbetxSimulink.Parameter(4);
area = 万博1manbetxSimulink。参数(slexpr(“(a *) * 0.5”));
的默认设置生成代码 万博1manbetx仿真软件。参数 对象的求值 区域 被内联:
nontunable_code.png

指定存储类来保存表达式

Embedded Coder可以通过做两个更改来保留生成代码中的数学表达式:
  1. 一个而且b改变存储类定义
  2. 区域,设置存储类为ExportedGlobal
我喜欢用 代码映射编辑器 (ctrl+shift+C),因为我可以用ctrl+click批量编辑代码生成设置:
tempgif.gif
然后在代码中, 区域 将显示为可调参数:
tunable_code.png
定义是 区域 包含数学表达式:
area_definition.png
因为我用了 定义 的存储类 一个 而且 b ,它们在模型头文件中显示为宏:
expression_params_definition.png
这些并不是您可以使用的惟一存储类。一般规则是:
在我的例子中,我省略了斜边( √b ^ ^ 2 + 2) 参数,因为只支持某些数学表达式,而且斜边的计算有两个不支持的部分万博1manbetx sqrt () 功能和 操作符
您可以阅读更多的细节和限制 文档

现在轮到你了

我们知道这个功能有很多 限制 并且只支万博1manbetx持 有限的操作集 .我们正在考虑增加对更多操作的支持,并消除其中一些限制万博1manbetx。如果您对该功能感兴趣,但受到限制,请在下面的评论中告诉我们,以帮助我们确定优先级。
|

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。