问题标签 [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 投票
1 回答
1633 浏览

matlab - C S-Function 从串口读取数据

在我遇到的问题之后,尝试使用 Simulink 从 COM 端口读取,正如我在这个讨论中所写的那样,我想遵循 Phil Goddard 的建议,为此编写一个 C S-function。我的问题是我不会写C代码,所以我希望你能有所帮助。我在网上找到了这两个关于用于串行通信的 C S-Function 的脚本:

1)

但是当我尝试编译它时,mex sfun_comport.c它会返回以下错误:

2)

这会产生:

您可以注意到两个 S-Function 之间的常见错误是:

您对修复这些错误有什么建议吗?

PS:我有 MATLAB 2013b 64 位、64 位 Windows 7、Microsoft Visual C++ 2010(32 位)作为编译器(它在 64 位 matlab 中运行良好以生成 mex 文件)

0 投票
1 回答
208 浏览

matlab - 如何确定 c-mex s-function 中的输入序列?

我在 simulink 中实现了一个 c-mex 函数来加速两个矩阵的乘法。到目前为止它正在工作,但我发现输入排序/序列取决于连接的例如常量的命名模式。我附上两张图片进行说明:首先,我将输入命名为 Constant 和 Constant1。然后,输入序列符合预期。 在此处输入图像描述 将 Constant 更改为 Constant2 时,输入序列会发生变化,因此我的 c-mex 函数不正确。 在此处输入图像描述 现在,我的问题是如何改变这种行为?如果不可能,我该如何实现解决方法,因为矩阵乘法的顺序通常非常重要。

0 投票
0 回答
697 浏览

matlab - Matlab/Simulink - Dymola 接口。Dymolablock 已过期

我正在尝试创建 Matlab 和 Dymola 的复合模型。因此我遵循了本教程: Claytex教程

我自己做了一个简单的模型,而不是 DrivenPendulum 模型。我可以很好地在 Dymola 中翻译模型,并且在 Matlab 中编译 Dymola 模型的工作方式与教程中的一样。但是,一旦我尝试在 Simulink 中进行仿真,我就会收到以下错误消息:

评估子系统块(掩码)“test/DymolaBlock/compmodel”的“InitFcn”回调时出错。块测试/DymolaBlock 不是最新的。请重新编译!

重新编译显然不起作用,我一次又一次地收到此消息。

我将 Dymola 2014 FD01 和 Matlab 2010b 与 Visual Studio 2008 C++ 编译器一起使用。不幸的是,我目前无法更新 Matlab,因为我正在使用大学计算机,即使我认为这是问题的原因。

但也许你们中的某个人有一个想法,甚至已经遇到过这个问题?

提前致谢!

0 投票
1 回答
412 浏览

c - 创建定制的 S 功能块,并使用实时工作室生成 C 代码

我想创建定制的 S 功能块,并使用实时研讨会为它们生成 C 代码。我无法为这项任务找到正确的文件。有人可以通过指向正确和简单的文档来帮助我吗?

0 投票
1 回答
575 浏览

c - 在 simulink 中运行用户定义的块时,Matlab 崩溃

我在 simulink 中创建了一个具有单输入和单输出的用户定义块,它工作得非常好。但是当我创建一个没有输入的用户定义块时,在 simulink 模型中运行这个块,MATLAB 崩溃。下面是 C S-function 的代码。

任何有关此的信息表示赞赏。


0 投票
0 回答
1495 浏览

c++ - 具有多个源文件的 Matlab C++ S-Function

我有一个带有 c++ s-function 的 simulink 模型。这个 s-function 需要访问很多(>50)类。每个类都由一个头文件 ( .h) 和一个源文件 (.cpp) 组成。我还将我的代码分成多个目录:

对于 s 函数的编译,我使用了 mex 函数:

http://de.mathworks.com/help/matlab/ref/mex.html

但是随着文件越来越多,这会变得很长而且很难看,因为我需要分别指定每个头文件夹和每个源文件。有没有更好的方法来创建需要访问大量源文件的 mex 文件?

我有以下想法,但我不确定什么是正确和最简单的方法:

  1. 将所有头文件和源文件 (fileX.h/fileX.cpp) 添加到 Visual Studio 项目并将它们编译为 *.lib 文件。然后使用 mex 工具仅编译 sfun.cpp 并提供对 *.lib 文件的访问

  2. 将所有头文件和源文件移动到一个目录中。这将缩短命令行如下:

    /li>
  3. 使所有内容都内联,这样就不需要源文件。(非常丑陋的解决方案)

  4. mex 编译器是否有某种生成文件?

  5. 通过#include 指令不仅包括头文件,还包括源文件。

目前,我不相信任何这些想法,我将不胜感激。

谢谢

Edit1:一个注释:这个项目应该在后期移植到 dspace pc。在这种情况下,我需要考虑一些特殊的事情吗?

0 投票
1 回答
820 浏览

matlab - 将 Level-2 Matlab S-Function Block Sample-Time 设置为特定的时间间隔

这里是 Matlab 初学者,我遇到了一些问题,Matlab 文档和这里的其他帖子都不能帮助我。我正在开发一个 Level-2 Matlab S-Function,它通过 USB(陀螺仪、磁力计和加速器信号)接收传感器信号,我必须每 200 毫秒分析一次这些数据以完成更高级别的任务。起初我以为我可以将 Simulink 模型的仿真时间设置为 Start time 0 和 Stop time 10 并通过 block.SampleTimes = [0.2 0] 将我的模块采样时间设置为 0.2;但是在得到一些意外行为之后,我发现通过文档模拟时间与 Simulink 中的时钟时间不同:

模拟时间与时钟时间不同。例如,运行 10 秒的模拟通常不需要 10 秒。总仿真时间取决于模型复杂性、求解器步长和计算机速度等因素。

我现在真的被困住了,因为我需要每 200 毫秒准确地输出一次传感器数据,而且我之前根本没有任何使用 Matlab 或 Simulink 的经验。我希望我的问题足够清楚,但如果需要,我会提供更多细节。感谢您提前提供任何帮助。

0 投票
1 回答
907 浏览

matlab - How to pass a Matrix in Simulink using S-Function

I have written a S-Function in MATLAB. Now I want to pass a Matrix into the input via the 'simin' Source. I have initialized the time of the simin variable with simin.time = 0 and the values are stored in a dynamically sized matrix. So for example simin.signals.values = ones(4). Now MATLAB tells me that 'time and data values must have the same number of rows'. I understand that but how can I pass a matrix in one timestep? And is it possible to simulate a S-Function only once and not cyclic?

0 投票
1 回答
510 浏览

matlab - s 功能作为总线选择器

我需要知道如何使 s-function 充当总线选择器。我有一个结构作为 s-function 的输入。这个结构有 283 个元素(将来可能更多)并且作为总线提供。我希望 s-function 输出结构的各个元素(因此就像一个总线选择器)。当然,我可以通过手动输入轻松做到这一点:

但是我需要知道所有结构元素的名称,并且还需要手动输入它们。有没有一种方法我只需要使用一个简单的 for 循环并将单个元素输入分配给 s 函数的输出。

你可以给我提示,因为我只是被困在这里

更新

在建议的答案之后,我尝试写这样的东西。

但首先我怎样才能使 y1 y2 y3 等成为循环的一部分。当然我不能写 yi,因为它是一个完全不同的变量。这部分也是我在 s-function builder 的代码描述部分中写的,我认为这又是错误的。任何人都可以建议我到底应该做什么。

另一个重要的一点是,我正在发送具有不同数据类型(如 uint8、uint16、single)的字段的结构,因此我还需要确定输入数据类型。这怎么可能以及如何在循环中将此数据类型设置为我的输出?

0 投票
0 回答
642 浏览

matlab - 在 Matlab 代码 S-Function 中使用运行时参数

我必须在 Matlab 代码(C 不可行)中编写一个 Level-2 S-Function,它接受一些参数并单独和组合使用它们。

首先我尝试了可调参数,但不幸的是我没有成功调整它们(文档没有说明如何set_param实现此目的)。

然后我碰到了运行时参数的文档,上面写着

对应于多个对话参数的运行时参数的值通常是对话参数值的函数。

所以我推断出运行时参数会很合适,但是相同的文档没有说明如何从 Matlab S 函数中调整和访问它们,而只是从 C 函数中。
此外,在此页面中记录了一个RuntimePrm看起来类似于 的对象DialogPrm,但尝试写入值会导致错误。

有没有什么方法可以在不使用 DWorks 的情况下“缓存”参数组合,这会影响后续带有假状态的线性化?