问题标签 [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.
matlab - 将输入和输出添加到 Simulink C Mex S-Function 掩码
我正在尝试修改此处给出的示例以创建动态屏蔽子系统,我想在其中将导入和输出的数量动态更改为 S-Function。
我有一个用 C 语言实现的非常简单的 S-Function(它是文档中的timestwo示例),我希望用户能够在掩码中定义输入的数量和输出的数量。然后,在 S 函数中,意图是操纵接收到的输入值并写入输出值。S-Function 最终会做一些相当复杂的事情,我在 Simulink 中需要它的多个实例,因此我希望它在库中定义。
我已将 S-Function 放入库中并通过选择解锁它Diagram->Unlock Library
。
我已经定义了 2 个变量,numInports
并且numOutports
在Parameters & Dialog
掩码编辑窗口的窗格中。
然后我将以下内容添加到Initialization
窗格中:
目的是在参数更改时初始化删除所有导入和导出,然后重新创建它们。然后我将模型保存在库中。
find_system() 命令应该按照此处和此处的建议查找并删除类型中具有端口的所有块。
我创建了一个使用这个库模型 S 函数实现的模型。但是,当我更新参数时,出现错误:
谁能告诉我这里出了什么问题?
编辑:
的文档find_system()
具有作为all
有效参数值,而不是on
我使用的并且在文档示例中,但是当我更改它时这似乎没有效果。我补充说:
就在find_system()
调用之后,找到的块数为 0,所以我猜问题可能是 In0 没有被删除,因此我试图重新插入它。
c - ssSetOutputPortWidth - 它是否分配内存?我们可以强制它是连续的吗?
我正在 Simulink/Matlab 中编写一个 C S-Function,它为以后的应用程序填充大小为 500 kB 的输出缓冲区。我已经这样做了mdlInitializeSizes
:
稍后,在 中mdlOutputs
,我将写入缓冲区:
我的问题是:
- 我发布的代码是否安全地分配了这 500000 个字节?
- 那 500000 字节是连续的吗?我知道我可以
ssSetInputPortRequiredContiguous
为输入做,但我没有找到输出的选项...... - 像这样填写输出数组是否安全/合法?有没有更好的方法来做到这一点?
我问这个是因为现在当我尝试在大于 ~128k 的位置写入时代码崩溃。这是我通过大量试验得出的粗略估计,因为此代码在嵌入式系统上运行,并没有真正提供错误跟踪。
提前致谢!
string - 屏蔽 Simulink 模块:如何将屏蔽参数解释为字符串?
当我屏蔽一个块时(在这种情况下,在 sfunction 上放置一个掩码)我希望将其中一个参数视为文字字符串。我知道使用'unit8(sParameter1)'
,但我不知道如何更改该行以使其成为字符串。
而且我想使用该字符串作为块名称的一部分显示,我再次知道在哪里(在使用“图标绘图命令”提示的掩码中)但不知道如何
matlab - Simulink:如何在 2 级 S-Function 中存储局部变量?
我从 msfuntmpl_basic.m 开始并对其进行修改以从音频设备输出音频。
我可以在哪里存储设备 (dsp.AudioRecorder)?
matlab - Simulink:设置连续 S-Function 的输出
我有一个连续的 S-Function,可以解决 ICE 气缸内各种状态属性的导数。因此,函数的输出设置为输出每个时间步长的这些导数的积分,这是一个 7 元素向量(每个被计算的属性为 1)
在循环中的某个时刻,我想将此输出的值更改为显式值(即不是导数的积分),如下所示(在这种情况下,显式值为 x):
我正在使用 if 语句切换到这个替代输出。通过调试,我想我已经验证 Simulink 在正确的位置输入了这段代码 - 但是 S-Function 的输出仍然是导数的积分,这给了我一个非有限错误。
任何可以让我明确设置连续 S-Function 输出的帮助或建议将不胜感激。
matlab - 在我的代码错误是 Index Exceeds Matrix Dimension
我的代码给出了一个错误,即索引超出了矩阵维度。它在 nsample=10 时运行得很好,但是当我使用 nsamples=other 值时它会给出错误。
错误从第 108 行开始,这意味着当 dataright(1:20) = output(1:20);但它在我使用 dataright(1:10) = output(1:10) 时运行。
matlab - 未在 2 级 s 函数中初始化的全局变量
我正在尝试制作一个类似于缓冲区的 2 级 s-function(我刚开始学习 S-functions)。现在我想要的是,每次输入进入时,它都会存储在下一个索引中,直到缓冲区变满,然后它开始将存储的数据从第 2 个到最后一个索引推送到第一个到第二个索引,并在采样时间后自我更新我将附上我的代码,以便更好地理解
现在的问题是,虽然我已经声明i
为全局变量,但当我运行它说 i 未定义的函数时,有人知道我在做什么错吗?
matlab - 在matlab功能块(simulink)中设置初始条件
我目前正在尝试为一个更大的项目学习一些基础,该项目将大量使用 simulink。现在,我想编写我自己的带有反馈的 simulink 块。这意味着其中一个输入也是输出(它们之间有一个“内存”块以确保一切正常!)。
我的代码看起来像
正如我所说,“in”与“out”相关联。不幸的是,需要为 out 设置一个初始值,否则我会得到一些错误。当然我不能在这样的代码中做到这一点:
在这种情况下,值“out”在每个时间步都设置为 0。
你有什么建议吗?我读过可以使用 S-functions 和 flag,但我不知道它是如何工作的。
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 实例时,它声明要避免内联。
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++”解决它,但它仍然不起作用。有谁知道我也可以解决这个问题吗?
非常感谢。