Simulink Matlab Function 空调更换模块后出现问题使用问题求教

matlab simulink S-Function m文件的写法
s函数是system
Function的简称,用它来写自己的simulink模块。可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)。
先讲讲为什么要用s函数,用s函数可以利用matlab的丰富资源,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还能操作windows的API等。
先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、更新连续状态等等,这个阶段需要反复运行,直至结束。
在matlab的workspace里打edit
sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。它的第一行是这样的:
function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
先讲输入与输出变量的含义:
t:代表当前的仿真时间,这个输入参数通常用于决定下一个采样时刻,或者在多采样速率系统中,用来区分不同的采样时刻点,并据此进行不同的处理。
x:表示状态向量,这个参数是必须的,甚至在系统中不存在状态时也是如此。它具有很灵活的运用。
u:表示输入向量。(是做成simulink模块的输入)
flag:是一个控制在每一个仿真阶段调用哪一个子函数的参数,由Simulink在调用时自动取值。
sys:是一个通用的返回参数,它所返回值的意义取决于flag的值。
x0:是初始的状态值(没有状态时是一个空矩阵[]),这个返回参数只在flag值为0时才有效,其他时候都会被忽略。
str是保留参数(mathworks公司还没想好该怎么用它,一般在初始化中将它置空就可以了,str=[])。
ts是一个1×2的向量,ts(1)是采样周期,ts(2)是偏移量。
下面结合sfuntmpl.m中的代码来讲具体的结构:
switch flag,
%判断flag,看当前处于哪个状态
[sys,x0,str,ts]=mdlInitializeS
%flag=0,表示处于初始化状态,跑去调用函数mdlInitializeSizes进行初始化,在初始化状态下,sys是一个结构体,其各个参数详细说明如下
%用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates
%模块中连续状态变量的个数(状态向量连续部分的宽度)
sizes.NumDiscStates
%模块中离散状态变量的个数(状态向量离散部分的宽度)
sizes.NumOutputs
%模块输出变量的个数(输出向量的宽度)
sizes.NumInputs
%模块输入变量的个数(输入向量的宽度)
sizes.DirFeedthrough
%模块是否存在直接贯通(直接贯通我的理解是输入能直接控制输出)
sizes.NumSampleTimes
%模块的采样时间个数,至少是一个
= simsizes(sizes);
%设置完后赋给sys输出
如果字段代表的向量宽度为动态可变,则可以将它们赋值为-1。
NumSampleTimes表示采样时间的个数,也就是ts变量的行数,与用户对ts的定义有关。
需要指出的是,由于s-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块将多个单一输入合成一个复合输入向量或将一个复合输出向量分解为多个单一输出。
举个例子,考虑如下模型:
dx/dt=fc(t,x,u)(也可以用连续状态方程描述:dx/dt=A*x+B*u)
x(k+1)=fd(t,x,u)(也可以用离散状态方程描述:x(k+1)=H*x(k)+G*u(k))
y=fo(t,x,u)(也可以用输出状态方程描述:y=C*x+D*u)
设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为1个,我们就只需改上面那一段代码为:(一般连续状态与离散状态不会一块用,我这儿是为了方便说明)
sizes.NumContStates=1;
sizes.NumDiscStates=1;
sizes.NumOutputs=1;
sizes.NumInputs=1;
其他的可以不变。继续在mdlInitializeSizes函数中往下看:
%状态变量设置为空,表示没有状态变量,以我们上面的假设,为x0=[0,0](离散和连续的状态变量我们都设它初值为0)
%这个就不用说了,保留参数嘛,置[]就可以了,反正没什么用
%ts(1)是采样周期,ts(2)是偏移量。采样周期设为0表示是连续系统。
在sfuntmpl继续往下看:
sys=mdlDerivatives(t,x,u);
flag=1表示此时要计算连续状态的微分,跑去调用函数mdlDerivatives,即上面提到的dx/dt=fc(t,x,u)中的dx/dt。找到mdlDerivatives函数如果设置连续状态变量个数为0,此处只需sys=[];就可以了;按我们上述讨论的那个模型,此处改成 sys=fc(t,x(1),u)或sys=A*x(1)+B*u;我们这儿x(1)是连续状态变量,而x(2)是离散的,这儿只用到连续的,此时的输出sys就是微分。不同的状态下,sys代表的意义不一样,该函数下sys代表微分。
sys=mdlUpdate(t,x,u);
flag=2表示此时要计算下一个离散状态,跑去调用函数mdlUpdate,即上面提到的x(k+1)=fd(t,x,u),找到mdlUpdate函数,模板文件这儿sys=[];表示没有离散状态,我们这而可以改成sys=fd(t,x(2),u)或sys=H*x(2)+G*u;
%sys即为x(k+1)看来后面几个一两句话就可了,呵呵,在sfuntmpl的118行
sys=mdlOutputs(t,x,u);
flag=3表示此时要计算输出,跑去调用函数mdlOutputs,即y=fo(t,x,u),找到mdlOutputs函数,如果sys=[]表示没有输出,我们改成sys=fo(t,x,u)或sys=C*x+D*u
%sys此时为输出y
sys=mdlGetTimeOfNextVarHit(t,x,u);
flag=4表示此时要计算下一次采样的时间,只在离散采样系统中有用(即上文的初始化函数mdlInitializeSizes中提到的ts设置ts(1)不为0)。连续系统(ts(1)=0)中只需在mdlGetTimeOfNextVarHit函数中写上sys=[];这个函数主要用于变步长的设置,具体实现大家可以用edit
vsfunc看vsfunc.m这个例子
sys=mdlTerminate(t,x,u);
flag=9表示此时系统要结束,一般来说在mdlTerminate函数中写上sys=[]就可,如果你在结束时还要设置什么,就在此函数中码相关代码。
关于sfuntmpl这个s函数的模板讲完了。
和simulink下的gain模块功能一样。注:s函数还可以带用户参数function [sys,x0,str,ts] = sfungain(t,x,u,flag,gain)switch flag,case 0,
function [sys,x0,str,ts] = sfungain(t,x,u,flag,gain)switch flag,case 0,
sizes.NumContStates
sizes.NumDiscStates
sizes.NumOutputs
sizes.NumInputs
sizes.DirFeedthrough
sizes.NumSampleTimes
= simsizes(sizes);
sys=gain*u;
case {1,2,4,9},
使用模板编写s-function,如果需要额外的输入参量,可以在输入参数列表的后面增加这些参数,因为前面的4个参数是simulink调用s-function时自动传入的。对于输出参数,最好不做修改。
例子2dx1=x2dx2=9.81*sin(x(1))-2*x(2)+u求出系统在单位阶跃输入下的x1的状态变化曲线,假设x1,x2初值为0。
function [sys,x0]=dong(t,x,u,flag)
if flag==0
sys=[2;0;2;1;0;0];
elseif flag==1
sys=[x(2);9.81*sin(x(1))-2*x(2)+u];
elseif flag==3
sys=[x(1);x(2)];
[Matlab心得] 搭建最基本的S-function模块
Simulink中S-Function和MATLAB-Function的区别
Simulink之S-function函数笔记之三(sfuntmpl_doc.c)
Simulink之S-function函数笔记之二
(Matlab) simulink和m文件的相互调用
simulink中s-function使用
Matlab中S-函数的编写
Simulink之S-function函数笔记之一
没有更多推荐了,当前位置:
function求助
function求助
作者 姜子风
function X = compa(u)
% u(1)=alpha
% u(2)=w2
% u(4)=sita2
% u(5)=sita3
A=[r3*sin(u(5)) 1;-r3*cos(u(5)) 0];
b=[r2*u(1)*sin(u(4))-r2*u(2)^2*cos(u(4))-r3*u(3)^2*cos(u(5));r2*u(1)*cos(u(4))-r2*u(2)^2*sin(u(4))-r3*u(3)*u(3)^2*sin(u(5))];
& &为什么会提示这个啊,怎么改Failed to resolve data 'X' in 'MATLAB Function' to a valid Simulink.Signal object.
我试了一下,好像没有问题,u=[0.1,00*pi,10*pi,pi/3,pi/4],其结果是
& &1.0e+06 *
& & 0.0310
& &-4.5245
不知道你的问题在哪儿?
引用回帖:: Originally posted by xifengni at
我试了一下,好像没有问题,u=,其结果是
& &1.0e+06 *
& & 0.0310
& &-4.5245
不知道你的问题在哪儿? 我就在function模块输入那个程序,然后提示Failed to resolve data 'X' in 'MATLAB Function' to a valid Simulink.Signal object.每次都这样。求帮助。我用的2013a版本的matlab
IMG_401.jpg
引用回帖:: Originally posted by xifengni at
我试了一下,好像没有问题,u=,其结果是
& &1.0e+06 *
& & 0.0310
& &-4.5245
不知道你的问题在哪儿? 我刚开始学matlab,请想写说明一下,xiexie
应该写S函数,Simulink仿真数据是靠S函数去调用和刷新数据的
楼主,请问你的问题怎么解决的?我也是遇到同样的问题,很纠结
请问你解决了吗?真的需要你的帮助,我也遇到了这种问题,我的扣扣:
24小时热帖
下载小木虫APP
与700万科研达人随时交流matlab simulink中的matlab function怎么输入自己想输的程序_百度知道
matlab simulink中的matlab function怎么输入自己想输的程序
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
hyysTrike知道合伙人
擅长:暂未定制
你找的matlabfunction找错了,找Embedded MATLAB Function,双击那个就可以加你的程序
ruifengcao知道合伙人
ruifengcao
采纳数:1719
获赞数:7505
建立一个function,然后在里面进行调用就行了
能不能用图片把步骤搞出了
第一步,在editor中建立一个function文件,保存起来第二步,在simulink中加入一个matlab function,双击打开,在里面的MATLAB function选项中填写你的函数的名字和输入参数就这么简单!
可以叫我具体操作吗
本回答被提问者采纳
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Simulink中matlab Function模块全局变量的使用方法总结
近期工作需要在Simulink中的Matlab Function模块中使用全局变量(Global Variable),在网上找了好久没有很好的总结,为不辜负一晚上的苦苦查阅,遂决定对Matlab Function中使用全局变量方法进行详解。本文总结完全借鉴matlab help文档,英文好的同学可直接参阅
。本文采用的matlab 2016a版本。
Matlab Function中使用全局变量的步骤如下:
1. 在Simulink中新建.mdl(或.slx)文件,假设名为“TestGlobal.slx”,将Matlab Function,拖入新建文件中;
2. 双击Matlab Function,进入MATLAB Function Block Editor,在此文本中声明所需用到全局变量(假设为变量名 A)形如 global A;
function y = fcn
y = A;此处应该注意,当双击Matlab Function,进入MATLAB Function Block Editor后,工具栏中有个“Edit Data"的按键,下步将用到,不太起眼,应当注意,如下图所示:
3. 在MATLAB Function Block Editor(进入方式就是双击Matlab Function模块)中,点击工具栏中的“Edit Data”,此时,将显示“Ports and Data Manager”窗口,如下图
点击图中左上角的蓝线标记的“Add Data”按钮,左侧面版中将出现变量“Data”,点击该变量,在右侧修改其名字为全局变量的名字A;点击Scope下拉菜单,将Input修改为“Data Store Memory”;点击右下角“Apply”后关闭该对话框;
4. 在Simulink Library Browser中,点击左侧Simulink--Signal Routing右侧面版将出现Data Store Memory模块,将其拽入至窗口中,双击该Data Store Memory模块,Main标签页修改变量名字为全局变量名,Signal Attributes中设置初值,Data Type(数据类型)以及Signal Type(该项不可以设置为auto)即可,本处设置初值为1,Data
Type为int8,Signal type设置为real;同样点击右下角Apply,关闭该窗口。如下图:
5. 最后一步用示波器显示结果,整体效果如下图:
仿真效果如下:
如果帮到你了,别忘点赞哦。
Matlab函数间通过workspace进行数据共享的方法
在simulink中使用全局变量的方法
[Matlab心得] 搭建最基本的S-function模块
simulink中设置使用全局变量
Matlab function如何使用全局变量
simulink状态变量初值如何设定
MATLAB全局变量
matlab:使用全局变量
Simulink中S-Function和MATLAB-Function的区别
matlab/simulink中自定义m-s函数作为simulink模块使用实例
没有更多推荐了,只需一步,快速开始
扫一扫,访问微社区
请完成以下验证码
查看: 2023|回复: 7|关注: 0
SIMULINK中自定义函数MATLAB function模块问题
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
本帖最后由 litingishu104 于
17:46 编辑
simulink新手,完全不会,求大神指导。图一为仿真图的错误。图二为仿真流程图。图三为我想使用的MATLAB function自定义函数。图4为我想从空间工
作区导入的数据。为SS 文件名。,其实就是K时刻的离散数据。
那么问题来了。请问,为何会出现这种错误?为何SIMULINK中的自定义函数MATLAB function模块在这里运行不了。我可以在MATLAB中运行的程序。
只需将输入参数导入就可以在MATLAB中运行的。但是我想在Simulink中输入输出然后去调试。
其实说白了。就是想调试图5所示的流程图。其中N-1和N 为我想自定义的函数。
就是想请大神指教一下。MATLAB function这个模块怎么实现自定义函数?
174465-daf5d56654.jpg (121.86 KB, 下载次数: 0)
17:44 上传
38741-cfeae9bc31f99f5b376c12de163d311e.jpg (33.36 KB, 下载次数: 0)
17:44 上传
37795-01eeced07b4620fbca3336fe.jpg (28.23 KB, 下载次数: 1)
17:44 上传
ecaf9f1e19a272683.jpg (24.79 KB, 下载次数: 0)
17:44 上传
.jpg (35.69 KB, 下载次数: 0)
17:43 上传
file:///C:\Users\li\AppData\Roaming\duowan\yy\cache\image\c5\46022-~1.JPG
<h1 style="color:# 麦片财富积分
你可以把你的模型放上来
<h1 style="color:# 麦片财富积分
from workspace这个模块的使用有误,不是直接把数据的变量放进去,每个数据对应一个时间,时间与数据共同放在一个变量里面使用。
<h1 style="color:# 麦片财富积分
宁静而致远 发表于
from workspace这个模块的使用有误,不是直接把数据的变量放进去,每个数据对应一个时间,时间与数据共同放 ...
如果我要输入一个向量数据,是不是同时要把向量中每个元素对应的时间输入。如果在variable里是矩阵形式,我想导入其中一列数据到simulink,那应该在from workspace里面如何设置
<h1 style="color:# 麦片财富积分
from workspace这个模块的使用有误,不是直接把数据的变量放进去,每个数据对应一个时间,时间与数据共同放 ...
怎么让我的数据对应相应的时间?最近在网上学习。也发现了这个问题
<h1 style="color:# 麦片财富积分
如果我要输入一个向量数据,是不是同时要把向量中每个元素对应的时间输入。如果在variable里是矩阵形式, ...
我也发现了这个问题,老铁。和我的想法差不多。他们说要对应时间
论坛优秀回答者
<h1 style="color:#88 麦片财富积分
关注者: 390
怎么让我的数据对应相应的时间?最近在网上学习。也发现了这个问题
为啥要去网上学,右键模块有帮助,比啥都靠谱
<h1 style="color:# 麦片财富积分
求问楼主会做了吗?我也不懂怎么把svm模型放入simulink仿真,请问怎么实现的?谢谢啦
站长推荐 /3
Simulink工具定制实现高效模型验证
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区}

我要回帖

更多关于 xposed框架指纹模块 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信