问题标签 [s-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
866 浏览

matlab - 将输入和输出添加到 Simulink C Mex S-Function 掩码

我正在尝试修改此处给出的示例以创建动态屏蔽子系统,我想在其中将导入和输出的数量动态更改为 S-Function。

我有一个用 C 语言实现的非常简单的 S-Function(它是文档中的timestwo示例),我希望用户能够在掩码中定义输入的数量和输出的数量。然后,在 S 函数中,意图是操纵接收到的输入值并写入输出值。S-Function 最终会做一些相当复杂的事情,我在 Simulink 中需要它的多个实例,因此我希望它在库中定义。

我已将 S-Function 放入库中并通过选择解锁它Diagram->Unlock Library

我已经定义了 2 个变量,numInports并且numOutportsParameters & Dialog掩码编辑窗口的窗格中。

然后我将以下内容添加到Initialization窗格中:

目的是在参数更改时初始化删除所有导入和导出,然后重新创建它们。然后我将模型保存在库中。

find_system() 命令应该按照此处此处的建议查找并删除类型中具有端口的所有块。

我创建了一个使用这个库模型 S 函数实现的模型。但是,当我更新参数时,出现错误:

谁能告诉我这里出了什么问题?

编辑:

文档find_system()具有作为all有效参数值,而不是on我使用的并且在文档示例中,但是当我更改它时这似乎没有效果。我补充说:

就在find_system()调用之后,找到的块数为 0,所以我猜问题可能是 In0 没有被删除,因此我试图重新插入它。

0 投票
0 回答
67 浏览

c - ssSetOutputPortWidth - 它是否分配内存?我们可以强制它是连续的吗?

我正在 Simulink/Matlab 中编写一个 C S-Function,它为以后的应用程序填充大小为 500 kB 的输出缓冲区。我已经这样做了mdlInitializeSizes

稍后,在 中mdlOutputs,我将写入缓冲区:

我的问题是:

  • 我发布的代码是否安全地分配了这 500000 个字节?
  • 那 500000 字节是连续的吗?我知道我可以ssSetInputPortRequiredContiguous为输入做,但我没有找到输出的选项......
  • 像这样填写输出数组是否安全/合法?有没有更好的方法来做到这一点?

我问这个是因为现在当我尝试在大于 ~128k 的位置写入时代码崩溃。这是我通过大量试验得出的粗略估计,因为此代码在嵌入式系统上运行,并没有真正提供错误跟踪。

提前致谢!

0 投票
1 回答
1848 浏览

string - 屏蔽 Simulink 模块:如何将屏蔽参数解释为字符串?

当我屏蔽一个块时(在这种情况下,在 sfunction 上放置一个掩码)我希望将其中一个参数视为文字字符串。我知道使用'unit8(sParameter1)',但我不知道如何更改该行以使其成为字符串。

而且我想使用该字符串作为块名称的一部分显示,我再次知道在哪里(在使用“图标绘图命令”提示的掩码中)但不知道如何

0 投票
1 回答
380 浏览

matlab - Simulink:如何在 2 级 S-Function 中存储局部变量?

我从 msfuntmpl_basic.m 开始并对其进行修改以从音频设备输出音频。

我可以在哪里存储设备 (dsp.AudioRecorder)?

0 投票
0 回答
93 浏览

matlab - Simulink:设置连续 S-Function 的输出

我有一个连续的 S-Function,可以解决 ICE 气缸内各种状态属性的导数。因此,函数的输出设置为输出每个时间步长的这些导数的积分,这是一个 7 元素向量(每个被计算的属性为 1)

在循环中的某个时刻,我想将此输出的值更改为显式值(即不是导数的积分),如下所示(在这种情况下,显式值为 x):

我正在使用 if 语句切换到这个替代输出。通过调试,我想我已经验证 Simulink 在正确的位置输入了这段代码 - 但是 S-Function 的输出仍然是导数的积分,这给了我一个非有限错误。

任何可以让我明确设置连续 S-Function 输出的帮助或建议将不胜感激。

0 投票
1 回答
251 浏览

matlab - 在我的代码错误是 Index Exceeds Matrix Dimension

我的代码给出了一个错误,即索引超出了矩阵维度。它在 nsample=10 时运行得很好,但是当我使用 nsamples=other 值时它会给出错误。

错误从第 108 行开始,这意味着当 dataright(1:20) = output(1:20);但它在我使用 dataright(1:10) = output(1:10) 时运行。

0 投票
1 回答
778 浏览

matlab - 未在 2 级 s 函数中初始化的全局变量

我正在尝试制作一个类似于缓冲区的 2 级 s-function(我刚开始学习 S-functions)。现在我想要的是,每次输入进入时,它都会存储在下一个索引中,直到缓冲区变满,然后它开始将存储的数据从第 2 个到最后一个索引推送到第一个到第二个索引,并在采样时间后自我更新我将附上我的代码,以便更好地理解

现在的问题是,虽然我已经声明i为全局变量,但当我运行它说 i 未定义的函数时,有人知道我在做什么错吗?

0 投票
2 回答
2178 浏览

matlab - 在matlab功能块(simulink)中设置初始条件

我目前正在尝试为一个更大的项目学习一些基础,该项目将大量使用 simulink。现在,我想编写我自己的带有反馈的 simulink 块。这意味着其中一个输入也是输出(它们之间有一个“内存”块以确保一切正常!)。

我的代码看起来像

正如我所说,“in”与“out”相关联。不幸的是,需要为 out 设置一个初始值,否则我会得到一些错误。当然我不能在这样的代码中做到这一点:

在这种情况下,值“out”在每个时间步都设置为 0。

你有什么建议吗?我读过可以使用 S-functions 和 flag,但我不知道它是如何工作的。

0 投票
2 回答
190 浏览

matlab - 具有多个实例的 s-functions 的 Matab tlc 代码

我需要在我的 simulink 模型中内联一个具有多个实例的 s-function。在 S-function 中,我需要加载一个 dll 文件,但它应该只在一个 s-function 实例中完成。我写的 tlc 如下:..... % function Start(block, system) 输出

dll_handle = LoadLibraryA("mydll"); dll_setup=(DLL_SETUP)GetProcAddress(dll_handle,"setup"); ......

代码生成后,这些 Start 函数行被添加到每个 s-function 实例的源代码中。但是,我需要加载一次 dll。是否可以仅为 s-function 的第一个实例添加这些行?

注意:我知道在 TLC 文档中,当模型中有多个 s-function 实例时,它声明要避免内联。

0 投票
0 回答
818 浏览

matlab - 从 Matlab 中的 MEX S-Function 获取大小时出现“mexFunction is missing”错误

首先非常感谢您阅读这篇文章并能够提供帮助。我有一个 .cpp 自定义代码,我可以创建一个 mexa64 类型:

现在我想将此 .mexa64 文件实现到 Simulink 中。我创建了一个带有 simulink 函数和输入/输出的 mycpp.c 和 mycpp_wrapper.c(就好像我在使用 s-function builder)。所以现在我用 S.Function 打开 Simulink 并在上面输入 mycpp 但它给了我这个错误:

我该如何解决?顺便说一句,我不能使用 S-Function builder,因为它使用的是 gcc 编译器而不是 g++ ......我尝试用“mex -setup C++”解决它,但它仍然不起作用。有谁知道我也可以解决这个问题吗?

非常感谢。