| 查看: 2294 | 回复: 0 | ||
[求助]
simulink里S函数的封装问题
|
|
我要用simulink做一个读写器的系统级仿真,其中有一个PIE编码模块需要用S函数编写然后封装。S函数的程序是书上的,应该没什么大问题,但是一仿真就出现‘X0 returned by M-File S-function 'PIEcoder' in 'fmoma/S-Function1' must be a vector of length 0.’和‘Error evaluating parameter 'p' in 'fmoma/S-Function': Undefined function or variable 'p'.’的错误,这是怎么回事啊?下面是S函数程序 function[sys,x0,str,ts]=PIEcoder(t,x,u,flag) switch flag, %判断仿真状态 case 0,[sys,x0,str,ts]=mdlInitializeSizes; %初始化 case 3,sys=mdlOutputs(t,x,u); %计算输出 case 1,sys=[]; %导数计算 case 2,sys=mdlUpdate(t,x,u); %更新离散状态 case 4,sys=mdlGetTimeOfNextVarHit(t,x,u); %计算下一个采样时刻 case 9,sys=[]; %仿真结束 otherwise error(['Unhandlede flag=',num2str(flag)]); %错误处理 end function[sys,x0,str,ts]=mdlInitializeSizes() %定义基本属性 sizes=simsizes; %返回空的SIZE结构 size.NumContStates =0; %连续状态数目 size.NumDiscStates =1000; %离散状态数目 size.NumOutputs =-1; %输出端口数目 size.NumInputs =-1; %输入端口数目 size.DirFeedthrough=1; %是否直通 size.NumSampleTimes=1; %采样周期数目 sys=simsizes(sizes); str=[]; x0=zeros(1,1000); x0(1)=0; x0(2)=0; x0(3)=5; x0(4)=5; ts=[0.00001 0]; function sys=mdlOutputs(t,x,u) %计算连续状态变量的导数 switch x(1), case 0 %SOF switch x(2), case 0, sys=-1; case 1, sys=+1; case 2, sys=-1; case 3, sys=+1; case 4, sys=+1; case 5, sys=+1; case 6, sys=+1; case 7, sys=+1; otherwise error(['初始化输出错误']) end case 1 switch x(2), case 0, sys=-1; case 1, sys=+1; otherwise error(['符号0输出错误']); end case 2 switch x(2), case 0, sys=-1; case 1, sys=+1; case 2, sys=+1; case 3, sys=+1; otherwise error(['符号1输出错误']); end case 3 switch x(2), case 0, sys=-1; case 1, sys=+1; case 2, sys=+1; case 3, sys=+1; case 4, sys=+1; case 5, sys=+1; case 6, sys=+1; case 7, sys=+1; otherwise error(['结束输出错误']); end otherwise error(['状态判定错误']); end function sys=mdlUpdate(t,x,u) %更新离散状态变量、采样时间和最大步长 if t>0.00031 n=x(3); sys(3)=x(3); sys(4)=x(4); sys(1)=x(1); m=5:1:1000; sys(m)=x(m); if rem(t*10,0.0002)==0 sys(3)=x(3)+1; sys(n)=u; end switch x(1), case 0, sys(2)=mod(x(2)+1,8); case 1, sys(2)=mod(x(2)+1,2); case 2, sys(2)=mod(x(2)+1,4); case 3, sys(2)=mod(x(2)+1,8); otherwise error(['状态更新错误']); end end if sys(2)==0; if t<0.19988 switch x(x(4)), case 0, sys(1)=1; case 1, sys(1)=2; end x(x(4)); sys(4)=x(4)+1; else sys(1)=3; end else m=1:1000; sys(m)=x(m); end 系统模型在附件里 |
» 本帖附件资源列表
-
欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com - 附件 1 : fmoma.mdl.autosave
2012-10-09 23:28:13, 30.89 K
» 猜你喜欢
求推荐博导
已经有4人回复
拟解决的关键科学问题还要不要写
已经有8人回复
为什么nbs上溴 没有产物点出现呢
已经有5人回复
存款400万可以在学校里躺平吗
已经有34人回复
求助一下有机合成大神
已经有4人回复
最失望的一年
已经有16人回复
求推荐英文EI期刊
已经有5人回复
26申博
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
疑惑?
已经有5人回复













回复此楼