⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfunxy3.m

📁 this is file used for design of three phase current controller
💻 M
字号:
function [sys, x0, str, ts] = sfunxy2(t,x,u,flag,ax,varargin)%SFUNXY S-function that acts as an X-Y scope using MATLAB plotting functions.%   This M-file is designed to be used in a Simulink S-function block.%   It draws a line from the previous input point, which is stored using%   discrete states, and the current point.  It then stores the current%   point for use in the next invocation.%%   See also SFUNXYS, LORENZS.%   Copyright (c) 1990-97 by The MathWorks, Inc.%   $Revision: 1.30 $%   Andrew Grace 5-30-91.%   Revised Wes Wang 4-28-93, 8-17-93, 12-15-93%   Revised Craig Santos 10-28-96switch flag  %%%%%%%%%%%%%%%%%%  % Initialization %  %%%%%%%%%%%%%%%%%%  case 0    [sys,x0,ts] = mdlInitializeSizes(ax,varargin{:});    SetBlockCallbacks(gcbh);  %%%%%%%%%%  % Update %  %%%%%%%%%%  case 2    sys = mdlUpdate(t,x,u,flag,ax,varargin{:});  %%%%%%%%%  % Start %  %%%%%%%%%  case 'Start'    LocalBlockStartFcn  %%%%%%%%  % Stop %  %%%%%%%%  case 'Stop'    LocalBlockStopFcn  %%%%%%%%%%%%%%  % NameChange %  %%%%%%%%%%%%%%  case 'NameChange'    LocalBlockNameChangeFcn  %%%%%%%%%%%%%%%%%%%%%%%%  % CopyBlock, LoadBlock %  %%%%%%%%%%%%%%%%%%%%%%%%  case { 'CopyBlock', 'LoadBlock' }    LocalBlockLoadCopyFcn  %%%%%%%%%%%%%%%  % DeleteBlock %  %%%%%%%%%%%%%%%  case 'DeleteBlock'    LocalBlockDeleteFcn  %%%%%%%%%%%%%%%%  % DeleteFigure %  %%%%%%%%%%%%%%%%  case 'DeleteFigure'    LocalFigureDeleteFcn  %%%%%%%%%%%%%%%%  % Unused flags %  %%%%%%%%%%%%%%%%  case { 3, 9 }    sys = [];  %%%%%%%%%%%%%%%%%%%%  % Unexpected flags %  %%%%%%%%%%%%%%%%%%%%  otherwise    if ischar(flag),      errmsg=sprintf('Unhandled flag: ''%s''', flag);    else      errmsg=sprintf('Unhandled flag: %d', flag);    end    error(errmsg);end% end sfunxy%%=============================================================================% mdlInitializeSizes% Return the sizes, initial conditions, and sample times for the S-function.%=============================================================================%function [sys,x0,ts] = mdlInitializeSizes(ax,varargin)if length (ax)~=4  error(['Axes limits must be defined.'])endsizes = simsizes;sizes.NumContStates  = 0;sizes.NumDiscStates  = 0;sizes.NumOutputs     = 0;sizes.NumInputs      = 4;sizes.DirFeedthrough = 0;sizes.NumSampleTimes = 1;sys = simsizes(sizes);x0 = [];%% initialize the array of sample times, note that in earlier% versions of this scope, a sample time was not one of the input% arguments, the varargs checks for this and if not present, assigns% the sample time to -1 (inherited)%if ~isempty(varargin) > 0  ts = [varargin{1} 0];else  ts = [-1 0];end% end mdlInitializeSizes%%=============================================================================% mdlUpdate% Handle discrete state updates, sample time hits, and major time step% requirements.%=============================================================================%function sys=mdlUpdate(t,x,u,flag,ax,varargin)%% always return empty, there are no states...%sys = [];%% Locate the figure window associated with this block.  If it's not a valid% handle (it may have been closed by the user), then return.%FigHandle=GetSfunXYFigure(gcbh);if ~ishandle(FigHandle),   returnend%% Get UserData of the figure.%ud = get(FigHandle,'UserData');x_data = [0 u(1) 0 u(3)];y_data = [0 u(2) 0 u(4)];% plot the input linesset(ud.XYAxes, ...    'Visible','on',...    'Xlim', ax(1:2),...    'Ylim', ax(3:4));set(ud.XYLine,...    'Xdata',x_data,...    'Ydata',y_data,...	'Erasemode','background',...    'LineStyle','-');set(ud.XYTitle,'String','X Y Plot');set(FigHandle,'Color',get(FigHandle,'Color'))  drawnow% end mdlUpdate%%=============================================================================% LocalBlockStartFcn% Function that is called when the simulation starts.  Initialize the% XY Graph scope figure.%=============================================================================%function LocalBlockStartFcn%% get the figure associated with this block, create a figure if it doesn't% exist%FigHandle = GetSfunXYFigure(gcbh);if ~ishandle(FigHandle),  FigHandle = CreateSfunXYFigure;endud = get(FigHandle,'UserData');set(ud.XYLine,'Erasemode','xor');set(ud.XYLine,'XData',[],'YData',[]);set(ud.XYLine,'XData',0,'YData',0,'Erasemode','xor');ud.XData = [];ud.YData = [];set(FigHandle,'UserData',ud);% end LocalBlockStartFcn%%=============================================================================% LocalBlockStopFcn% At the end of the simulation, set the line's X and Y data to contain% the complete set of points that were acquire during the simulation.% Recall that during the simulation, the lines are only small segments from% the last time step to the current one.%=============================================================================%function LocalBlockStopFcnFigHandle=GetSfunXYFigure(gcbh);if ishandle(FigHandle),  %  % Get UserData of the figure.  %  ud = get(FigHandle,'UserData');  set(ud.XYLine,...      'Xdata',ud.XData,...      'Ydata',ud.YData,...      'LineStyle','-');end% end LocalBlockStopFcn%%=============================================================================% LocalBlockNameChangeFcn% Function that handles name changes on the Graph scope block.%=============================================================================%function LocalBlockNameChangeFcn%% get the figure associated with this block, if it's valid, change% the name of the figure%FigHandle = GetSfunXYFigure(gcbh);if ishandle(FigHandle),  set(FigHandle,'Name',get_param(gcbh,'Name'));end% end LocalBlockNameChangeFcn%%=============================================================================% LocalBlockLoadCopyFcn% This is the XYGraph block's LoadFcn and CopyFcn.  Initialize the block's% UserData such that a figure is not associated with the block.%=============================================================================%function LocalBlockLoadCopyFcnSetSfunXYFigure(gcbh,-1);% end LocalBlockLoadCopyFcn%%=============================================================================% LocalBlockDeleteFcn% This is the XY Graph block'DeleteFcn.  Delete the block's figure window,% if present, upon deletion of the block.%=============================================================================%function LocalBlockDeleteFcn%% Get the figure handle associated with the block, if it exists, delete% the figure.%FigHandle=GetSfunXYFigure(gcbh);if ishandle(FigHandle),  delete(FigHandle);  SetSfunXYFigure(gcbh,-1);end% end LocalBlockDeleteFcn%%=============================================================================% LocalFigureDeleteFcn% This is the XY Graph figure window's DeleteFcn.  The figure window is% being deleted, update the XY Graph block's UserData to reflect the change.%=============================================================================%function LocalFigureDeleteFcn%% Get the block associated with this figure and set it's figure to -1%ud=get(gcbf,'UserData');SetSfunXYFigure(ud.Block,-1)% end LocalFigureDeleteFcn%%=============================================================================% GetSfunXYFigure% Retrieves the figure window associated with this S-function XY Graph block% from the block's parent subsystem's UserData.%=============================================================================%function FigHandle=GetSfunXYFigure(block)if strcmp(get_param(block,'BlockType'),'S-Function'),  block=get_param(block,'Parent');endFigHandle=get_param(block,'UserData');if isempty(FigHandle),  FigHandle=-1;end% end GetSfunXYFigure%%=============================================================================% SetSfunXYFigure% Stores the figure window associated with this S-function XY Graph block% in the block's parent subsystem's UserData.%=============================================================================%function SetSfunXYFigure(block,FigHandle)if strcmp(get_param(bdroot,'BlockDiagramType'),'model'),  if strcmp(get_param(block,'BlockType'),'S-Function'),    block=get_param(block,'Parent');  end  set_param(block,'UserData',FigHandle);end% end SetSfunXYFigure%%=============================================================================% CreateSfunXYFigure% Creates the figure window associated with this S-function XY Graph block.%=============================================================================%function FigHandle=CreateSfunXYFigure%% the figure doesn't exist, create one%FigHandle = figure('Units',          'pixel',...                   'Position',       [100 100 400 300],...                   'Name',           get_param(gcbh,'Name'),...                   'NumberTitle',    'off',...                   'IntegerHandle',  'off',...                   'DeleteFcn',      'sfunxy2([],[],[],''DeleteFigure'')');%% store the block's handle in the figure's UserData%ud.Block=gcbh;%% create various objects in the figure%ud.XYAxes   = axes;ud.XYLine   = plot(0,0,'EraseMode','xor');ud.XYXlabel = xlabel('X Axis');ud.XYYlabel = ylabel('Y Axis');ud.XYTitle  = get(ud.XYAxes,'Title');ud.XData    = [];ud.YData    = [];set(ud.XYAxes,'Visible','off');%% Associate the figure with the block, and set the figure's UserData.%SetSfunXYFigure(gcbh,FigHandle);set(FigHandle,'HandleVisibility','callback','UserData',ud);% end CreateSfunXYFigure%%=============================================================================% SetBlockCallbacks% This sets the callbacks of the block if it is not a reference.%=============================================================================%function SetBlockCallbacks(block)%% the actual source of the block is the parent subsystem%block=get_param(block,'Parent');%% if the block isn't linked, issue a warning, and then set the callbacks% for the block so that it has the proper operation%if strcmp(get_param(block,'LinkStatus'),'none'),  warnmsg=sprintf(['The XY Graph scope ''%s'' should be replaced with a ' ...                   'new version from the Simulink block library'],...                   block);  warning(warnmsg);  callbacks={    'CopyFcn',       'sfunxy([],[],[],''CopyBlock'')' ;    'DeleteFcn',     'sfunxy([],[],[],''DeleteBlock'')' ;    'LoadFcn',       'sfunxy([],[],[],''LoadBlock'')' ;    'StartFcn',      'sfunxy([],[],[],''Start'')' ;    'StopFcn'        'sfunxy([],[],[],''Stop'')'     'NameChangeFcn', 'sfunxy([],[],[],''NameChange'')' ;  };  for i=1:length(callbacks),    if ~strcmp(get_param(block,callbacks{i,1}),callbacks{i,2}),      set_param(block,callbacks{i,1},callbacks{i,2})    end  endend% end SetBlockCallbacks

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -