问题标签 [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 回答
251 浏览

simulink - creating .txt file from S function

I have an C mex S function which can print output to the .txt file. This code inside mdlStart(SimStruct *S) creates datafile.txt file and appends the output.

So now I want to dynamically get the filename of .txt file from user through S function mask . so , How can I receive string value of filename from mask inside S function.

0 投票
1 回答
362 浏览

matlab - 具有 if/else 和不同信号维度的 Simulink

我需要在 simulink 中实现 if/else 来确定输入是标量值还是矩阵。请看,下图:

原理图

鉴于:

  • Block(1) - 输入可以是标量“1”或矩阵“[[0 15];[5 10]]”

  • Block(2) - 必须返回输入的信号维度。例如:标量为 1,矩阵为 >1

要求是:

  • 一切都必须解释或编译(Simulink 编码器)
  • 块 (4) 和 (5) 的最终输出是标量
  • 我对 CMexSFunctions 的理解一般。因此,如果我需要实施一个来解决问题,那没关系

到目前为止,我遇到了以下问题:

  • 如果我打算做的事情是可行的,我一点也不
  • 我不知道如何实现 Block(2) 以在编译模式下工作
  • 即使存在 if/else,simulink 在运行前也会执行预检查,以验证所有信号维度是否正常。在此检查期间,它给出了一个错误说 ex: that Block(5) has a input of matrix

任何线索?

0 投票
1 回答
191 浏览

simulink - 为什么 simulink cs 函数中的数据类型与普通 c 数据类型不同

在 simulink cs 函数示例中,int_T 和 real_T 用作数据类型。

如果我将它们更改为 double 和 int 它会正常工作,那么使用示例中建议的 int_T 和 real_T 的原因是什么?

0 投票
1 回答
2182 浏览

c - 带有 Visual Studio 2013 的 Matlab S-Function 构建器 - 缺少 rtwtypes.h

我正在尝试从 Simulink S-Function builder 编译预生成的代码,但出现错误:

我已经浏览了 matlab 和 simulink 中的每个包含目录,并且没有这样的头文件。我正在使用 Matlab 2014b。可能是什么问题?

顺便提一句。我可以毫无问题地编译 MEX 文件。

我的 %MATLAB_ROOT%\extern\include 文件夹

我尝试包括在网络上找到的“被黑”文件: Header rtwtypes.h source

但它并没有像我预期的那样工作,现在我的错误是:

0 投票
0 回答
264 浏览

c++ - SFunction 内存冲突

我正在编写一个输出布尔数组(4 个位置)的 S 函数

在 mdlOutputs 回调中写入输出时,我遇到了访问内存冲突。

此错误不是瞬时的。我的意思是:代码运行良好,直到后来崩溃并且 Matlab 给出了一个致命错误。我很确定错误出在 memcpy 操作中,因为我已经调试过,并且在我评论这行代码之后,它工作正常。此外,如果数据类型是标量,它可以 100% 正常运行。

所以,我有几个问题:

  1. 如何使用 memcpy 在 simulink 中写入数组的值?
  2. 我假设 simulink 输出内存是一个连续的内存块。这是对的吗?
  3. 关于如何解决它的任何提示?

伪代码在这里:

0 投票
0 回答
918 浏览

matlab - Matlab S-Function(用 VS 2013 编译) - 获取尺寸时出错(...)找不到过程

当我尝试运行我的模拟时,我从 S-Function 收到错误:

从“测试/S-Function”中的 MEX S-Function 'sfunction' 获取大小时出错。原因:无效的 MEX 文件 ($PATH)\sfunction.mexw64':找不到过程。

我的调试输出:

非常感谢您的意见,我已经寻找解决方案好几天了

0 投票
0 回答
685 浏览

c++ - Matlab:S-Function Builder Block:跨多个路径分发源文件

要构建到目标硬件,S-Function Builder 模块需要访问
其源文件和 .mex 文件。

似乎源文件和 .mex 文件
必须位于 Matlab 路径上的同一目录中。

是否可以将
.mex 文件和其他源文件
分布在多个目录
中,并且仍然能够构建到目标硬件?

配置:

  • Minseg硬件(实际上是改装的 Arduino Mega 2560)
  • 装有 OS X (10.11) 的笔记本电脑
    • XCode 6.xx( Mathworks支持的编译器)
    • Mathworks Matlab/Simulink (r2015b)
      • Mathworks Arduino 支持包(参见targetinstaller命令)
      • Mathworks Minseg 驱动程序库(基于 C 和 C++ 代码的 S-Function 库。)
      • 这两个库都在 Matlab 路径上
      • 为 C++ 语言配置的编译器(参见mex命令)
    • 最小工作示例(MWE):
      • Simulink 模型正确配置为与 Arduino Mega 6050 一起使用
      • 包含来自驱动程序库的MPU-6050 S-Function 块,连接到示波器。

MWE:

将模型构建到目标硬件
如果 .meximac64 文件S-Function 源代码文件
放在 Matlab 路径上的单个目录中,
则模型构建到目标硬件并完美运行。

0 投票
1 回答
986 浏览

c - 如何将 Bus 对象读入 C S-Function [Matlab] 中的 C 结构

我在 Matlab 中定义了一个 Bus 对象,并将它传递给一个 C S-function,它将进行一些处理。我已经在里面初始化了这样的输入mdlInitializeSizes

我还自动生成了一个 C 结构,其中包含与 Bus 对象内的信号相同的变量。

Bus 中的一些信号也是总线,因此 C 结构体是递归生成的。例如:

现在我想将 Bus 对象读入结构。为此,我这样做:

问题是 busData 没有正确的数据var4和以下变量。如果我打印从 ssGetInputPortSignal 收到的原始数据,我可以找到我期望的数据,但它不在数组中的正确位置;相反,它有一些填充

因此我想问:

  • 这是将 Bus 对象读入 C S 函数中的结构的正确方法吗?
  • 如何禁用填充以使所有数据都是连续的?

提前致谢!

0 投票
1 回答
287 浏览

simulink - Mathworks Simulink:S-Function 生成器

我有一个包含许多 S-Function Builder 块的库。

如果我想重新生成 .mex 文件(例如,在不同的平台上),
标准方法是:

  • 转到每个 S-Function 构建器块
  • 打开它的 S-Function Builder 向导
  • 点击构建

有没有一种方法可以使这个过程自动化,从而 重建
库中的每个 S-Function Builder 模块(包括所有子系统) ?

0 投票
1 回答
1024 浏览

matlab - 将参数结构传递给 Simulink 中的 1 级 m 代码 S 函数

我正在尝试将参数结构传递给 MATLAB 中的 S-Function。我有一堆参数,我想避免像这样传递它们:

% MATLAB S-Function 语法的一般形式是: % [SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)

我更喜欢传递一个包含我所有参数的单一结构。我将数据加载到模型工作区中: 在此处输入图像描述

首先我尝试(回应菲尔):

函数 [sys,x0,str,ts,simStateCompliance]=system1(t,x,u,flag,DATA_HMMWV)

大小.NumInputs = 2;

还,

Simulink 看起来像:

但我得到这个错误:

在此处输入图像描述

Phil,这就是为什么我尝试向 S-Function 添加另一个输入端口的原因,我认为它必须进入那里。

我也试过:sizes.NumInputs = 1;

我得到这个错误: 在此处输入图像描述

另外,您确定 DATA_HMMWV 是一个参数吗?它看起来与此窗口中的 Param 略有不同: 在此处输入图像描述

新:::: 2016 年 1 月 25 日

Phil,问题不在于我的导数函数,问题在于我仍然没有将结构传递给函数。这是一张图片。请注意,数据在模型工作区中,我将它 (DATA_HMMWV) 传递给函数,但是当我在第 13 行(调试模式)停止模拟时,DATA_HMMWV 不在函数工作区中。

在此处输入图像描述

如果代码继续(to flag = 1),我们得到: 在此处输入图像描述

如果代码继续运行,它会因以下错误而崩溃: 在此处输入图像描述

因此,没有足够的输入参数传递给函数。此外,该功能非常简单:

% 函数 sys = mdlDerivatives(t,x,u,DATA_HMMWV)

sys = DATA_HMMWV.g;

% 结束 mdlDerivatives

它只是试图从结构中获取一个参数。