24小时热门版块排行榜    

查看: 2331  |  回复: 0

ww_plasma

铁虫 (初入文坛)

[求助] 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

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ww_plasma 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 听说今天filecode变了 +17 布布和一二 2026-08-06 31/1550 2026-08-06 22:34 by qusibaya
[基金申请] filecode +10 等待解的谜 2026-08-06 14/700 2026-08-06 21:16 by zhanghaozhu
[基金申请] 固定端突然变了,今天 +3 archvillain 2026-08-06 7/350 2026-08-06 21:05 by archvillain
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 6/300 2026-08-06 20:19 by 苏知砚
[基金申请] 基金中了 +4 laoda193707 2026-08-06 4/200 2026-08-06 18:56 by olivermiaoer
[有机交流] 一个有机合成实验室都需要哪些设备? 50+3 kf2781974 2026-07-31 12/600 2026-08-06 15:11 by eddyin
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[教师之家] 咨询面上基金 +4 李长云 2026-07-31 7/350 2026-08-06 11:20 by 李长云
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +9 archvillain 2026-08-04 11/550 2026-08-05 20:06 by wlwhappy
[基金申请] 面上再次挂了,太难了,躺也躺不了,倦也卷不过,小学校之殇! +22 低垂的野花 2026-07-31 30/1500 2026-08-05 18:03 by 低垂的野花
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 4/200 2026-08-05 09:59 by lfy8008
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
[论文投稿] 十年后又回来了,论文投稿求助 +3 哈哈114477 2026-08-01 3/150 2026-08-04 15:40 by tegsgjy20
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 面上提前没消息,有中的吗 +14 archvillain 2026-08-02 18/900 2026-08-04 14:42 by archvillain
[基金申请] 娱乐 +4 Tide man 2026-08-03 4/200 2026-08-04 11:51 by wgch518
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见