西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 1957|回复: 3

[求助] s函数的输出问题

[复制链接]

该用户从未签到

发表于 2008-12-9 20:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我用s函数编了个异步电机定子磁链u-I模型,出现系统错误:Index exceeds matrix dimensions.
Error in ==> d:\MATLAB6p5\work\sflux.m
On line 10  ==>     sys=mdlOutputs(t,x,u);
不知如何解决,希望各位帮忙,谢谢

function [sys,x0,str,ts] = sflux(t,x,u,flag)

switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;

  case 1,
    sys=mdlDerivatives(t,x,u);
  
  case 3,
    sys=mdlOutputs(t,x,u);
  
  case {2,4,9}
    sys=[];
  
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
% end sfuntmpl

function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 2;
sizes.NumInputs      = 4;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);

x0  = [];

str = [];

ts  = [0 0];
% end mdlInitializeSizes


% mdlDerivatives
% Return the derivatives for the continuous states.
%=======================================
%输入:u(1)=Uαs,u(2)=Uβs,u(3)=Iαs,u(4)=Iβs
%输出:sys(1)=vαs,sys(2)ψβ
%状态变量:x(1)=ψαs,x(2)=ψβs
% 电机参数:Rs,Pn

function sys=mdlDerivatives(t,x,u)
Rs=0.1165;
sys(1)=u(1)-Rs*u(3);
sys(2)=u(2)-Rs*u(4);
% end mdlDerivatives
%=============================
% mdlOutputs
% Return the block outputs.
%=============================
function sys=mdlOutputs(t,x,u)
sys(1)=x(1);
sys(2)=x(2);
% end mdlOutputs
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

发表于 2009-2-13 13:42 | 显示全部楼层
用sys=[x(1),x(2)];试试
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2009-3-9 18:17 | 显示全部楼层
function sys=mdlDerivatives(t,x,u)
Rs=0.1165;
sys(1)=u(1)-Rs*u(3);
sys(2)=u(2)-Rs*u(4);

在这个函数中,因为是连续的系统,所以sys(1)=u(1)-Rs*u(3);sys(2)=u(2)-Rs*u(4);是指它们的导数的值即dx(1)/dt=u(1)-Rs*u(3);  dx(2)/dt=u(2)-Rs*u(4);

你在这里没有弄明白S函数里面的东西  如果你要做的东西室和时间没关系的式子即
x(1)=u(1)-Rs*u(3);  x(2)=u(2)-Rs*u(4);
那么你就直接用
function sys=mdlOutputs(t,x,u)
x(1)=u(1)-Rs*u(3);  x(2)=u(2)-Rs*u(4);
sys(1)=x(1);
sys(2)=x(2);
就可以了 就不用调用mdlDerivatives(t,x,u)函数了

建议你再看看关于S函数的书

感觉你还是没弄明白s函数的真谛

评分

参与人数 1西莫币 +3 收起 理由
gellyares + 3 谢谢您的耐心回答!

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2012-3-2 07:59 | 显示全部楼层

有关于PMSM DTC写的扩展卡尔曼滤波器S-function的例子么?传份给我!e-mail:394441579@qq.com
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-6-27 07:10 , Processed in 0.372642 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表