simulink 中 s-function builder的坑

如何使用s-function builder

1. 双击页面空白处,搜索找到S-Function Builder

在这里插入图片描述
2. 双击模块键入编辑界面
在这里插入图片描述

注意:(1)模块的数据处理部分(即要实现的功能)都在下面这个函数里写。

void system_Outputs_wrapper(const real_T *u0,
                            real_T *y0,
                            const real_T *p0, const int_T p_width0)
{
/* Output_BEGIN */
要编写的代码
/* Output_END */
}

(2)real_T 即 c语言中的double类型,输入u0、输出y0和参数p0的声明加了指针*,且观察端口和参数栏他们的维度,可知输入、参数的后面要加[0],输出的格式应该为:

//此示例将输出设置为输入*参数
*y0 = u0[0] * p0[0]

如果中间定义了什么变量,可以直接用以下定义,不用加指针*。

int_T a;
real_T b;

  1. 因为s-function builder用的是C mex环境,代码可以直接在前面提到的函数
    void system_Outputs_wrapper()中写,然后按编译按钮;会生成6个文件,分别是rtwmakecfg.m文件(没什么用)、FUN.mexw64文件、.mat文件(没什么用)、tlc文件、FUN.c文件、FUN_wrapper.c文件。
    也可以把wrapper.c文件用visual studio打开,这样写代码比较方便,然后在matlab的命令行 打出 mex FUN.c FUN_wrapper.c进行编译。
  2. s-function builder 对精度要求比较高,如果将一大串式子赋给A,A再赋给B,会丢失好多值,建议直接将一大串式子直接赋给B,减少中间变量的过程。(如果画的图不理想很大可能是这个原因)
    事实证明,并不是这个原因哈哈哈哈。因为输出的定义为指针类型,我最开始是按照编辑器自带的示例y0[0] = u0[0]写的,但可能是野指针跑飞的原因,换成了*y0 = u0[0],结果就好了
  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值