精华内容
下载资源
问答
  • simulink 自定义函数S-function的字符串传递方法

    1、Embedded MATLAB不支持unicode,因此不支持中文

    2、输出函数,把字符串转换为整型数组

    function y = fcn()
    %#eml
    u='F:\1\1.jpg';
    y = int32(u);

    3、接收函数把整型数组转换为字符串

    function fcn(u)
    %#eml
    eml.extrinsic('imshow');
    nLen=length(u);       %计算字符串长度
    sFile=zeros(1,nLen);%初始化字符串
    sFile=char(u);          %整型数组转换为字符串
    imshow(sFile);

    展开全文
  • 文章目录1 Simulink自定义函数MATLAB Function2 Simulink中Switch Case模块的用法 1 Simulink自定义函数MATLAB Function 首先写一个函数,能根据两个输出,产生不同的输出值,在Simulink库中搜索MATLAB Function: ...

    1 Simulink自定义函数MATLAB Function

    首先写一个函数,能根据两个输出,产生不同的输出值,在Simulink库中搜索MATLAB Function
    在这里插入图片描述

    然后选择第3个,拖拽到工作区

    在这里插入图片描述

    双击自定义函数,输入:

    function y = fcn(throttle_value,throttle_delta)
    
    if throttle_value < 60
        velocity_period = 1;
    elseif (throttle_value>=60)&&(throttle_value<90)
        velocity_period = 2;
    else 
        velocity_period = 3;
    end
    
    if throttle_delta > 0
        acc_dec_mode = 0;
    else
        acc_dec_mode = 3;
    end
    
    operation_period = velocity_period + acc_dec_mode;
    
    y = operation_period;
    

    保存退出即可。


    2 Simulink中Switch Case模块的用法

    switch case的标准用法是:
    在这里插入图片描述

    首先,在simulink库中搜索case:把两个模块拖拽到工作区中:

    根据自己的模块逻辑连线,最终如图所示:

    在这里插入图片描述

    设计1个正弦信号输入,将运行时间设置为100秒,双击scope打开示波器,测试运行

    在这里插入图片描述


    参考文章:

    使用类似于 switch 语句的逻辑选择子系统执行 - Simulink - MathWorks 中国
    https://ww2.mathworks.cn/help/simulink/slref/switchcase.html

    展开全文
  • matlab simulink自定义结构体变量并在函数模块中应用

    千次阅读 多人点赞 2019-05-15 21:34:58
    前段时间“硬着头皮”给一个simulink模型添加了一个函数模块,函数的输出是4个结构体变量,因此涉及到在simulink自定义结构体类型的变量,以及显示输出的结构体变量。 完成这一任务的过程还是费了一些劲的,在...

    能“徒手”写matlab脚本,却是simulink小白一枚。前段时间“硬着头皮”给一个simulink模型添加了一个函数模块,函数的输出是4个结构体变量,因此涉及到在simulink中自定义结构体类型的变量,以及显示输出的结构体变量。

    完成这一任务的过程还是费了一些劲的,在翻阅各大网站查找问题的解决方法的过程中,也发现很多帖子并没有把问题解决得明明白白,当时就立下flag:当我完成这个任务之后,我一定要把这个过程写下来(而且越详细越好!!!),说不定还可以帮助碰到类似问题的同志们少走些弯路少踩些坑,同时也是记录下这次摸索的过程......

    废话也说了不少了,接下来说正事儿了......

            1. 一些基础的步骤

    在Simulink Library Browser里找到MATLAB Function这个模块,把它拖出来放到显示Simulink模型界面的空白处,然后双击这个模块,窗口会自动切换到matlab主界面,编辑器中出现一个名为MATLAB Function的空白脚本正在等着你发挥自己的创造力。在这个脚本里,根据自己的需要写下该函数模块需要实现的功能的相关代码并保存,再切回simulink界面,你会发现之前那个函数模块的左边就是你写的函数的输入变量,函数模块的右边就是函数的输出变量。具体操作如下图,至于这个函数模块的输入变量从哪里来的,这不是本文需要操心的问题......

     本来我这个函数模块就是输入一堆数值矩阵,再输出一堆数值矩阵,然后把输出display一下确认函数实现了它应该实现的功能就完事儿了。然而......几天之后我被告知,要把它改成输出结构体类型的变量!!!

    于是,我开始了simulink自定义结构体变量的漫漫摸索之路......

    2. Simulink自定义结构体变量

    Simulink自带的变量类型只有uint8,uint32,long......这样一类的基础数值类型,要用结构体,那就只能靠自己了。我这里用的方法是:先写一个.h文件,定义好自己要用的结构体长啥样,然后把它import到simulink里面去,接着就可以在模块里面用它了。以下开始详细描述这一过程(由于不太熟悉simulink的一些专业术语,C/C++也是用到哪里学到哪里,所以描述的语言可能不太专业......):

    (1) 写一个.h文件,把自己要用的结构体定义好,然后把这个.h文件放到模型所在的文件夹下

    (2) 通过mex命令,在工作区(workspace)生成自定义的结构体变量并完成函数脚本编写

    matlab是不认识.h文件的,要用mex这样的一种工具作为matlab和C/C++之间的桥梁以让它俩认识。那么,我们要先确认一下自己的matlab是否安装了可以执行mex命令的工具,我是在matlab的附加功能里装了一个mingw,然后才使得我在命令行窗口输入带mex的语句而不报错的......

    详细过程继续看图......

    在我查找解决问题的方法的过程中,大多数的帖子教我做到这一步就没有然后了,可是对一个simulink小白(痴)的我来说,做到这一步,后面呢?我还是不会呀!!!

    请教了身边会这一系列操作的人,再加上自己慢慢摸索,后面的步骤是这样的......

    变量类型已经改好了,在写函数脚本的过程中,就大胆的按照这个变量是结构体的样子来写就可以了,不用担心,没问题哒!

    写完之后运行一下simulink模型,可以看到函数模块有如下变化:输入输出变量的size会出现在横线上,结构体变量的那根表示输出的箭头线会变粗。

    到这里,我们的问题就都解决了,但是!!!当你满心欢喜的关掉simulink,又关掉了matlab去休息玩耍了,然后过了几个小时或者一两天以后,你再次打开matlab,想再次运行一下这个模型,然后你就会惊讶的发现!!!模型在生成的过程中出错了!!!它跟我说输出的变量类型是它不认识的!!!什么毛病???我辛辛苦苦费了半天劲才跑通的模型咋是个只能成功一次的???很好,你已经成功的激发了我的斗志,新的挑战又来了,继续摸索......

    (3) 将混合编译.h文件的步骤放进模型里

    冷静下来想想,出现上述重新打开matlab 模型就不认识自定义变量的状况也是正常的,我们前面用mex对自己编写的.h文件进行编译使得matlab认识了它,但是生成在工作区的变量,随着matlab的关闭它就消失了啊,我们又没保存它,那么matlab重新打开的时候它当然不认识了......可是每次跑模型之前都要来一遍(2)中的这一套步骤也太麻烦了吧,而且这样岂不是显得我很愚蠢嘛?!那么有没有什么办法可以让模型在运行之前自己去跑那两句编译.h文件的语句,这样你matlab不能说你不认识它了吧,那我们的问题也就有了靠谱的解决方案了......

    强大如matlab/Simulink,这样的解决方案当然是有办法实现的,来看图解步骤:

    由于在(2)中进行过定义函数输入输出变量类型的操作,因此完成上述设置模型的Callback函数的操作之后问题就搞定了。不放心的话(那搁谁第一次操作完这一波都不放心啊),我们把Simulink关掉,matlab也关掉,然后再重新启动matlab,打开模型,直接点击Run,可以看到模型运行毫无问题,这回是真的可以安心啦!

    3. 显示输出的自定义结构体变量

    本来问题是都解决了的,但有时候我们需要通过函数的输出来确认一下这个函数的脚本写得对不对,它是不是按着我们的思路去执行了它应该实现的功能。本来呢,如果输出是矩阵的话,我们在输出的地方加几个display的模块,就可以看到函数输出的变量的数值了,多么的直观和简单啊。可是display它不能显示结构体啊,那么有什么办法可以解决一下嘛?

    在这里,我只能说,好在我这个函数本来就是输入几个矩阵,然后让函数脚本对它操作一番,最后再输出几个矩阵,只是因为有特殊要求,要把输出的矩阵重新整合一下变成结构体,这些个结构体里的每一个元素本质上还是数值,那么我用笨办法也得让它display出来。请教了一下周围的人,再开发一下自己贫乏的创造力,我找到了一种显示结构体变量的方法:给每个输出的结构体变量接上一个Scope模块,这个Scope虽然不能显示具体的数值,但是它能显示一条一条的曲线,也算是有个可以比较朦胧的看到结构体里每个变量的值的一种方法了,而为了能够显示结构体里每个元素的具体数值,不得已我把改造输出之前的那几个矩阵也放到函数的输出里了,然后给它接上display,一样可以看嘛。直观一点就是这个模型的样子被我改成了下图中这样:

    既不耽误输出结构体的要求,也能帮助我们通过观察输出值确认函数脚本写得有没有毛病,这方法我觉得还不错。

    至此,所有问题都得到了解决。

    The End......

    一点感想:第一次写帖子,挺不容易的,要把问题讲清楚,就得图文并茂,做这几个图可是费了我老大的劲了,用电脑自带的画图工具来把截下来的图拼起来,还要在图上加文字,纠结截图会不会把一些不该显示的信息泄露了,还要涂掉一些文件名和变量名,真的还挺费劲。一篇文章断断续续也写了三个晚上才完成,中间还经历了一次因为网络不佳,一部分已经写完的内容没有被保存,又自己重新措辞重新写。最后,致敬那些常年在各大网站上写原创技术帖的大佬们!

    展开全文
  • 教你如何创建simulink自定义模块,以及S函数的应用!
  • SIMULINK自定义模块的创建与封装,介绍SIMULINK 中用S-函数(System Function)创建和封装用户自定义算法模块的方法, 并利用S-函数基本的程序框架资源,编写了实现跟踪-微分器算法的M 源文件,应用测试模型测试 了...
  • simulink调用自定义函数S-Function

    千次阅读 2018-01-28 22:38:27
    1,在simulink中使用s-function模块,打开模块后进行编辑,s-function...连续状态的数量,如果在simulink中,你的这个模块的上一级给出了一个连续的变量,比方说正弦函数的输出值,那么这里就可以让该参数等于1;  

    1,在simulink中使用s-function模块,打开模块后进行编辑,s-function是一个在matlab中有模版的m文件,需要自己在其中的一些部分进行修改,s-fun有几个需要初始化的参数,分别是

    NumContStates=;

    连续状态的数量,如果在simulink中,你的这个模块的上一级给出了一个连续的变量,比方说正弦函数的输出值,那么这里就可以让该参数等于1;

     

    sizes.NumDiscStates=;离散状态的数量,和上边一个参数的定义一样,只不过是离散的 

    sizes.NumOutputs=;

    输出的个数,代表你这个模块将要输出几个结果,比方输入一个阶跃函

    数,你想要看到阶跃函数本身和你设计的模块后的响应结果,这里就可以将他设为

    2

     

    sizes.DirFeedthtough=;

    直接馈通的标志,这个用不到,直接写

    0

     

    sizes.NumSampleTimes=;

    采样时间的数量,一般为

    1

     

    还有几个参数,

    str

    ts

    x0

     

    这三个参数,

    str

    是人家

     

    公司自己设计留着将来用的,咱用的时候让

    str=[]

    ,就可以了;

     

    ts

    是一个两列的矩阵,如果你想让

    s-function

    在每个时间步都运行,让他为

    [0,0]

    就可以,如

    果你希望让他在仿真开始后的

    1

    秒每

    0.5

    秒运行,就可以把它设为

    [0.5 1]; 

    这样

    mdlInitializeSizes 

    函数的基本设置就完成了,然后就是修改你要让

    s-fun

    模块完成的功

    能了,如果你要完成连续的状态的微分,就再

    case1

    中把函数写清楚,如果是离散状态的微

    分,

    就在

    case2

    中完成,

    如果你很简单的单纯计算输出,

    case3

    中把函数写清楚就行了,

    sys

    就是这个模块的输出;

     

    2

    当你的

    s-fun

    模块都完成编辑了,

    simulink

    中双击打开,

    然后在

    s-function name

    中输入

    刚刚写好的文件的名字,如果没有额外的参数,即没有除了

    t,x,u,flag,

    外的参数,那么在这

    个对话框中的

    s-function 

    parameters

    中就不要写东西了,到这个时候,基本上所有的工作就

    完成了,点击

    ok 

    3

    ,运行

    simulink 

    ,观察结果

    展开全文
  • matlab中simulink建模知识,matlab的强大毋庸赘述,simulink内含有很多的库和函数,用起来更方便
  • pso优化pid参数如何在simulink设置自定义模块与s函数
  • 给出用自定义的C语言实现自定义Simulink组件的例程,并提供了记录文档
  • Simulink自定义菜单栏功能 使用cm对象的addCustomMenuFcn函数,添加自定义菜单 function sl_customization(cm) cm.addCustomMenuFcn('Simulink:ToolsMenu',@getMyMenuItems) end 自定义菜单创建函数 function ...
  • 自定义S函数模块构成的Simulink模型C代码转化

    千次阅读 热门讨论 2017-10-24 14:21:53
    本文是在下对过去一个多月工作的总结,也是人生中第一个技术博客。前段日子,由于老师课题需要,分配给我任务是将现存的Simulink...Simulink中能够直接生成C代码的只有其自带的各种模块构成的系统,也就是说如果你要
  • 一般而言matlab/simulink能满足多数使用要求,但是往往在研究中会使用User-difinition s-function或者调用c,c++的库函数,这时候就...User-Definition的s-fun可以作为一个simulink模块使用,这样在工程和科研中就可...
  • 一般而言matlab/simulink能满足多数使用要求,但是往往在研究中会使用User-difinition s-function或者调用c,c++的库函数,这时候就...User-Definition的s-fun可以作为一个simulink模块使用,这样在工程和科研中就可...
  • 概述在实际项目设计中,使用simulink提供的基本模块很难实现的时候,此时就需要一种用户可以自定义的方式,定做自己的模块。在这种情况下,Matlab的s函数应运而生,S-函数是系统函数(...
  • 在某些情况下,用户可能希望创建具有自定义功能的 Simulink 模块。 本文档简要介绍了如何创建 Simulink 模块。 该文档提供了一个示例示例,其中包含逐步的过程以及C S函数源代码。 使用这种方法可以构建更复杂的块,...
  • 概述simulink建模不同于代码编程,整个项目以模块/模型为单元展开,在之前的文章中,小编已经介绍过如何自定义模块,以及设置参数等信息,不懂的小伙伴可以先移步看看以前的文章,正因为sim...
  • Simulink中提供了各种各样的模块,使得研究人员通过搭积木的方式,可以实现大部分功能需求。但总会有一些场景,是必须要研究人员自行编写代码,来满足自己的个性化需求。Simulink正是通过Matlab function、s-...
  • simulink支持自定义目标系统设置,需要以下几个文件: 1.xx.tlc 系统目标文件 主文件xx名称可自定义 2.xx_callback_handler.m RTW工具箱回调函数 3.xx_make_rtw_hook.m tlc文件调用,该文件后缀为_make_rtw_hook 4....
  • 在MATLAB开发环境中,Simulink仿真平 台可以建立用户自定义的库文件,并将它们显示在Library Browser窗口下,方便用户进行模块的操作。用户可以将一些平时使用比较频繁,或者自己建立的一些封装子模块集中在一块,...
  • 双击simulink模块调用自定义matlab脚本1. 模块设置回调函数2. 通过脚本打开模块 参考:http://blog.sina.com.cn/s/blog_627927570102wq0d.html 1. 模块设置回调函数 回调函数所用的脚本放置搜索路径内; 2. 通过...
  • 在MATLAB开发环境中,Simulink仿真平台可以建立用户自定义的库文件,并将它们显示在Library Browser窗口下,方便用户进行模块的操作。用户可以将一些平时使用比较频繁,或者自己建立的一些封装子模块集中在一块,...
  • 在MATLAB开发环境中,Simulink仿真平 台可以建立用户自定义的库文件,并将它们显示在Library Browser窗口下,方便用户进行模块的操作。用户可以将一些平时使用比较频繁,或者自己建立的一些封装子模块集中在一块,...
  • 回调函数回调函数的概念及作用model的回调函数,为什么只显示CloseFcnblock的回调函数模块端口的回调函数 回调函数的概念及作用 回调是当某些事件发生时被调用的方法,例如在玩游戏时,键盘上键可以控制方向向上,是...
  • [Simulink] 从S函数模块代码生成

    千次阅读 2019-03-30 23:15:20
    Simulink默认提供的模块不能够满足用户的需求时,用户可以通过S函数打造自己的模块,实现自定义的算法或期望的动作。 S函数类型 S函数的类型,按照所支持的功能分类,可以分为 Level 1 —— 编写...
  • [Simulink] 从Simulink S函数的使用

    千次阅读 2019-04-16 11:21:42
    Simulink自动代码生成 这部分涉及到对Simulink建模的控制,从而生成我们可读、可进一步编写或修改的代码。因此,建模时需要遵循一定的建模规范,并进行对应的检查,例如:ISO26262、MAAB、MISRA C等检查,MAAB的建模...
  • 6412人[提问前请先在知道搜索,谢谢]MATLAB是一门计算机编程语言,取名来源于Matrix Laboratory,本意是专门以矩阵的方式来处理计算机数据,它把数值计算和可视化环境集成到一起,非常直观,而且提供了大量的函数,使...
  • 序实现特殊非线性函数、应用S_Funtion 定制跟踪微分器和扩张状态观测器等新型动态系统模块、利 用子系统封装技术完成控制律组合和常用自抗扰控制器算法,按照模块化建模思想,创建了用户自定 义的自抗扰控制器模块库...
  • Simulink浏览器中创建自定义模块

    千次阅读 2013-11-01 09:21:44
    4、要显示自定义模块库,还需要拷贝slblocks.m函数到新建的路径下。在Matlab的命令窗口中输入: >> which('slblocks.m', '-all')    >> open('D:\MATLAB\R2006a\toolbox\Simulink\blocks\slblocks.m')    ...
  • 在使用Simulink的过程中经常会遇到一个问题,我希望我自己封装的模块中(一个Mask)的参数实时变化,例如 1.我想要模拟负载电阻突然变化(一开始电阻为2Ω,在1s后电阻变为1Ω) 2.电机运行过程模拟参数实时变化的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 642
精华内容 256
关键字:

simulink自定义函数模块