s函数的问题
写完S函数后编辑参数的时候为什么总是出现错误啊?回复 #1 franny4611 的帖子
输出向量和设置的不对应吧,你的错误根本看不清楚 原帖由 spare 于 2007-5-12 16:45 发表 http://forum.vibunion.com/forum/images/common/back.gif输出向量和设置的不对应吧,你的错误根本看不清楚
呵呵,点下图片,然后打开就可以看清楚错误了
你的M文件,准确的说是你的S函数里面的错误
X0估计是输入吧,初始向量,因为你的输入是2个,你看下呢,变成一个是不是不存在这个错误
当然你会需要2个,那么就把你的X0设置下
实在不行,把你的程序传上来看下 function =area_sel(t,x,u,flag)
switch flag,
case 0,
= mdlInitializeSizes;
case 2,
sys=[];
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=[];
case 9,
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 2;
sizes.NumDiscStates= 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0= [];
function sys=mdIOutputs(t,x,u)
if(u(1)>0)
if(u(2)/u(1)<1/sqrt(3)&&u(2)/u(1)>-1/sqrt(3))
sys=1;
end
if(u(2)/u(1)>1/sqrt(3))
sys=2;
end
if(u(2)/u(1)<-1/sqrt(3))
sys=6;
end
end
if(u(1)<0)
if(u(2)/u(1)<-1/sqrt(3))
sys=3;
end
if(u(2)/u(1)<1/sqrt(3)&&u(2)/u(1)>-1/sqrt(3))
sys=4;
end
if(u(2)/u(1)>1/sqrt(3))
sys=5;
end
end
if(u(1)==0)
if(u(2)>0)
sys=3;
else
sys=6;
end
end
这是我的程序,也就是上面那个帖子里面的,问题就是单独编译M文件的时候出错,现在明白是不可能通过了,但是为什么我改不了参数呢?每次点OK就报错。 恩,我看下,你先把你模型传上来哈,一起,我懒得搭建:lol 看下能否帮助你。 就是上面那个啊,其实这个我就是试试s 函数的用法,我的模型有些复杂,其他地方不知道有没有错,所以先试试这个,我就是随便选了两个信号,通过判断来确定输出信号 函数的功能是为了实现磁链区间的判断 先看了一部分
上面的给你整洁了一下,下面发现个小错误
function =area_sel(t,x,u,flag)
switch flag,
case 0,
=mdlInitializeSizes;
case 3,
sys=mdlOutputs(t,x,u);
case{2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 2;
sizes.NumDiscStates= 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0= [];
str = [];
ts = ;
function sys=mdlOutputs(t,x,u)
红笔的地方是l不是I
[ 本帖最后由 cdwxg 于 2007-5-12 21:52 编辑 ] 嗯,谢谢,是打错了,不过问题依然存在
回复 #9 franny4611 的帖子
你根本没有用到状态啊,怎么连续状态数是两个呢 把你的if与end换成if else,好像没有你这样的写法吧?你把模型传给我,我来看你的sin输入的数据都是多少啊?我知道你随便弄的
那我也要看下你的情况,否则我的搭建可能跟你不同呢? 嗯,我是没用状态,我看网上别人写的资料说这两句是说明系统是连续的还是离散的sizes.NumContStates= 2;
sizes.NumDiscStates= 0;
由于我也是初次接触这个,也不知道我是否理解错误,还望各位指教!
回复 #12 franny4611 的帖子
你去掉试试啊 原帖由 franny4611 于 2007-5-12 22:09 发表 http://forum.vibunion.com/forum/images/common/back.gif嗯,我是没用状态,我看网上别人写的资料说这两句是说明系统是连续的还是离散的sizes.NumContStates= 2;
sizes.NumDiscStates= 0;
由于我也是初次接触这个,也不知道我是否理解错误,还望各位指教!
不是,第一个表示连续状态变量个数,第二个表示离散变量个数,我这个地方忽略了,我认为你应该是output的错误。。。。
就一直在那找。。。汗,估计是这里错了。 改为sizes.NumContStates= 0;
sizes.NumDiscStates= 0;后可以编辑参数了,但是运行报错Error in block 'qujian/S-Function' while executing M-File S-function block 'area_sel', flag = 3 (output), at time 0. MATLAB error message:
One or more output arguments not assigned during call to 'area_sel (mdlOutputs)'
两个sin幅值我分别取的1和2