找回密码
 注册
Simdroid-非首页
查看: 63|回复: 4

请问s-function中如何保存数组的值而不会被初始化

[复制链接]
发表于 2012-6-13 09:46:07 | 显示全部楼层 |阅读模式 来自 江苏南京
s-function的文件如下:
function [sys,x0,str,ts] = xsd(t,x,u,flag,G)
a=[1;2;3;4;5];
switch flag
  case 0
    [sys,x0,str,ts]=mdlInitializeSizes(G);
  case 3
    sys=mdlOutputs(t,x,u,a,G);
  case {1,2,4,9}
    sys=[];
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));

end

function [sys,x0,str,ts]=mdlInitializeSizes(G)

sizes = simsizes;

sizes.NumContStates  = 0;

sizes.NumDiscStates  = 0;

sizes.NumOutputs     = -1;

sizes.NumInputs      = -1;

sizes.DirFeedthrough = 1;

sizes.NumSampleTimes = 1;


sys = simsizes(sizes);


x0  = [];


str = [];

ts  = [0 0];

function sys=mdlOutputs(t,x,u,a,G)

%  此处填写计算模块输出向量的指令
%  []是模块的默认值
%  用户必须把算得的模块输出向量赋给sys

switch (floor(t/0.2)-9)
    case 1
        if abs(t-floor((t)/0.2)*0.2)<=G
            a(1)=u;
            sys=a(1);
        else
            sys=a(1);
        end
        
    case 2
        if abs(t-floor((t)/0.2)*0.2)<=G
            a(2)=u;
            sys=a(2);
        else
            sys=a(2);
        end
            
    case 3
        if abs(t-floor((t)/0.2)*0.2)<=G
            a(3)=u;
            sys=a(3);
        else
            sys=a(3);
        end
            
    case 4
        if abs(t-floor((t)/0.2)*0.2)<=G
            a(4)=u;
            sys=a(4);
        else
            sys=a(4);
        end
            
    case 5
        if abs(t-floor((t)/0.2)*0.2)<=G
            a(5)=u;
            sys=a(5);
        else
            sys=a(5);
        end
            
    otherwise
            sys=0;
end
在这一步
case 1
        if abs(t-floor((t)/0.2)*0.2)<=G
            a(1)=u;
            sys=a(1);
我想保留a(1)的值,但是每个仿真周期数组a都会被初始化,请问有没有什么办法能记录a的值啊?
发表于 2012-6-13 18:58:41 | 显示全部楼层 来自 河南三门峡
Simdroid开发平台
lz想怎么保留a(1)的值,保持不变还是存到文件里还是神马?
回复 不支持

使用道具 举报

 楼主| 发表于 2012-6-13 19:27:18 | 显示全部楼层 来自 江苏南京
kokyo52 发表于 2012-6-13 18:58
lz想怎么保留a(1)的值,保持不变还是存到文件里还是神马?

就是 在这儿
case 1
        if abs(t-floor((t)/0.2)*0.2)<=G
            a(1)=u;将该时刻的u值赋值给a(1)后,在以后的仿真时间保持这个值而不会被初始化
            sys=a(1);
回复 不支持

使用道具 举报

 楼主| 发表于 2012-6-13 21:24:35 | 显示全部楼层 来自 江苏南京
求大侠知道啊!!!!!
回复 不支持

使用道具 举报

发表于 2012-7-9 20:49:44 | 显示全部楼层 来自 河南三门峡
wyy20071127 发表于 2012-6-13 21:24
求大侠知道啊!!!!!

这里的a(1)得是global型才能达到你的目的啊,否则我看你的时间条件,很可能a(1)是没有被赋值的
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-3 14:19 , Processed in 0.030981 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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