function [sys,x0,str,ts]=xiu5_9fun(t,x,u,flag,numofshowsteps)
%简单的示波器
global T Y N; %声明全局变量
switch flag
case 0, %flag=0初始化
sizes = simsizes; %获取Simulink仿真变量结构
sizes.NumContStates = 0; %连续系统的状态数为0
sizes.NumDiscStates = 0; %设置离散状态变量的个数为0
sizes.NumOutputs = 0; %设置系统输出变量的个数为0
sizes.NumInputs = 1; %设置系统输入变量的个数为1
sizes.DirFeedthrough = 1; %设置系统是直通
sizes.NumSampleTimes = 1; % 这里必须为1
sys = simsizes(sizes); %设置系统参数
str =[]; %通常为空矩阵
x0=[]; %初始状态矩阵x0(零状态情况)
ts = [0 0]; %表示连续取样时间仿真
N=0; %缓冲区全局变量初始化
T=zeros(1,numofshowsteps-1);
Y=zeros(1,numofshowsteps-1);
case 3, %flag=3计算输出
if N<numofshowsteps-1 %将输入暂存到缓冲区
N=N+1; %缓冲区数组移标
Y(N)=u; %记录当前信号
T(N)=t; %记录当前时间
else
figure(1);
plot(T-min(T),Y); %作出一幅信号波形
axis([0 max(T)-min(T) 1.1*min(Y) 1.1*max(Y)]); %坐标范围
set(gcf,'DoubleBuffer','on'); %双缓冲避免作图闪烁
drawnow; %作图
N=0; %缓冲移标复位
end
case {1,2,4,9}, %其他不处理的flag
sys=[]; %无用的flag时返回sys为空矩阵
otherwise %异常处理
error(['Unhandled flag= ',num2str(flag)]);
end