【问题标题】:Multi-Instance usage of S-Functions (C code) in SIMULINKSIMULINK中S-Functions(C代码)的多实例使用
【发布时间】:2013-12-09 11:26:13
【问题描述】:

我的 SIMULINK 模型中有一个旧版 C 函数,它在其函数中使用了一些静态变量。静态变量是全局可用的。当我引用我的模型的多个实例时,我收到错误,因为我的 S-Function 没有为此配置。我收到此错误消息是因为代码生成不允许这样做。

我得到的错误信息如下:

在多实例正常模式下不支持 S-Function 块“ECDCTRL/PULDESC/S-Function Builder”,因为它没有声明它支持多个执行实例。如果 S-Function 满足多个执行实例的要求,您可以在 'mdlSetWorkWidths' 方法中使用 SimStruct 函数 'ssSupportsMultipleExecInstances' 进行声明。

我使用自动生成的代码构建(MYSFUNC)_Outputs_Wrapper.c 文件。在使用模型的多个引用时,如何确保可以使用旧的 C 函数? SIMULINK 网站建议使用ssSupportsMultipleExecInstances(SimStruct *S, bool flag) 方法,但这是不正确的,因为我没有使用SimStruct 头文件。周围的方法是什么?

【问题讨论】:

  • 您对静态变量和多个实例有一个普遍的问题。请考虑在您的 SFunction 中使用 DWork 向量。
  • 你能再澄清一点吗?我不熟悉它。

标签: code-generation simulink s-function


【解决方案1】:

使用 DWork 向量而不是静态变量。引用here:

DWork 向量有几个优点:

Provide instance-specific storage for block variables
Eliminate static and global variables

【讨论】:

  • 谢谢!我的一位同事提出了一个基于 SIMULINk 的解决方案并替换了 S-Function 模块。呸!!
猜你喜欢
  • 2017-03-15
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 2022-11-09
相关资源
最近更新 更多