www.gusucode.com > nncontrol 工具箱 matlab 源码程序 > nncontrol/private/nndataimport.m

    function nndataimport(cmd,arg1,arg2,arg3)
%NNDATAIMPORT Data Import GUI for the Neural Network Controller Toolbox.
%
%  Synopsis
%
%    nndataimport(cmd,arg1,arg2,arg3)
%
%  Warning!!
%
%    This function may be altered or removed in future
%    releases of Neural Network Toolbox. We recommend
%    you do not write code which calls this function.
%    This function is generally being called from a Simulink block.

% Orlando De Jesus, Martin Hagan, 1-25-00
% Copyright 1992-2011 The MathWorks, Inc.


% CONSTANTS
me = 'Import Data.';

% DEFAULTS
if nargin == 0, cmd = ''; else cmd = lower(cmd); end

% FIND WINDOW IF IT EXISTS
fig = findall(0,'type','figure','name',me);
if ~isempty(fig) && isempty(get(fig,'children')), fig = []; end

if ~isempty(fig)
   ud = get(fig,'userdata');
end

if strcmp(cmd,'init')
  if isempty(fig)  
    StdColor = get(0,'DefaultFigureColor');
    PointsToPixels = 72/get(0,'ScreenPixelsPerInch');
    StdUnit = 'character';
    ud.Handles.parent=arg1;
    ud.Handles.type_net=arg2;
    
    uipos = getuipos;
    
    fig = figure('Units','points', ...
      'Interruptible','off', ...
      'BusyAction','cancel', ...
      'HandleVis','Callback', ...
    'Color',StdColor, ...
    'IntegerHandle','off', ...
    'MenuBar','none', ...
    'Name',me, ...
    'NumberTitle','off', ...
    'PaperUnits','points', ...
    'Units', StdUnit, ...
    'Position',uipos.fig, ...
    'Tag','ImportIACfig', ...
     'WindowStyle','modal');
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Position',uipos.h1_1, ...
    'Style','frame');
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Position',uipos.h1_2, ...
    'Style','frame');
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Position',uipos.h1_3, ...
    'String','Import From:', ...
    'Style','text');
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Position',uipos.h1_4, ...
    'String','Type of Data:', ...
    'Style','text');
   ud.Handles.Sbutton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Callback','nncontrolutil(''nndataimport'',''radiobutton1'',gcbf);nncontrolutil(''nndataimport'',''structures'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.Sbutton, ...
    'String','Structures', ...
    'Style','radiobutton', ...
      'ToolTipStr','If selected, the data will be expected in structure form (e.g., tr_dat.U and tr_dat.Y).',...
    'Tag','Mbutton',...
    'Value',1);
   ud.Handles.Abutton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Callback','nncontrolutil(''nndataimport'',''radiobutton1'',gcbf);nncontrolutil(''nndataimport'',''arrays'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.Abutton, ...
    'String','Arrays', ...
    'Style','radiobutton', ...
    'Tag','Wbutton', ...
      'ToolTipStr','If selected, the data will be expected in array form - one for input and one for output.');
   set(ud.Handles.Abutton,'UserData',[ud.Handles.Sbutton]);
   set(ud.Handles.Sbutton,'UserData',[ud.Handles.Abutton]);
   ud.Handles.Wbutton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Callback','nncontrolutil(''nndataimport'',''radiobutton'',gcbf);nncontrolutil(''nndataimport'',''workspace'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.Wbutton, ...
    'String','Workspace', ...
    'Style','radiobutton', ...
    'Tag','Wbutton', ...
      'ToolTipStr','If selected, the data will be taken from the MATLAB workspace.',...
    'Value',1);
   ud.Handles.Mbutton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'Callback','nncontrolutil(''nndataimport'',''radiobutton'',gcbf);nncontrolutil(''nndataimport'',''matfile'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.Mbutton, ...
    'String','MAT-file', ...
    'Style','radiobutton', ...
      'ToolTipStr','If selected, the data will be taken from a MAT-file.',...
    'Tag','Mbutton');
   set(ud.Handles.Wbutton,'UserData',[ud.Handles.Mbutton]);
   set(ud.Handles.Mbutton,'UserData',[ud.Handles.Wbutton]);
   ud.Handles.FileNameText = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
     'Enable','off', ...
    'ListboxTop',0, ...
    'Position',uipos.FileNameText, ...
    'String','MAT-filename:', ...
    'Style','text', ...
      'ToolTipStr','Enter the name of the MAT-file containing the data.',...
    'Tag','FileNameText');
   ud.Handles.FileNameEdit = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',[1 1 1], ...
     'Enable','off', ...
    'Callback','nncontrolutil(''nndataimport'',''clearpath'',gcbf);nncontrolutil(''nndataimport'',''matfile'',gcbf);', ...
    'HorizontalAlignment','left', ...
    'ListboxTop',0, ...
    'Position',uipos.FileNameEdit, ...
    'String','', ...
    'Style','edit', ...
      'ToolTipStr','Enter the name of the MAT-file containing the data.',...
    'Tag','FileNameEdit');
   ud.Handles.BrowseButton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
     'Enable','off', ...
    'Callback','nncontrolutil(''nndataimport'',''browsemat'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.BrowseButton, ...
    'String','Browse', ...
      'ToolTipStr','Browse the disk to select a MAT-file.',...
    'Tag','BrowseButton');
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'ListboxTop',0, ...
    'Position',uipos.h1_5, ...
    'Style','frame');
   ud.Handles.ModelText = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'ListboxTop',0, ...
    'Position',uipos.ModelText, ...
    'String','Workspace Contents', ...
    'Style','text', ...
    'Tag','ModelText');
   ud.Handles.ModelList = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',[1 1 1], ...
    'Position',uipos.ModelList, ...
    'Style','listbox', ...
    'Tag','ModelList', ...
      'ToolTipStr','Present the data found in the MATLAB workspace or MAT-file.',...
    'Value',1);
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'ListboxTop',0, ...
    'Position',uipos.h1_6, ...
    'Style','frame');
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'ListboxTop',0, ...
    'Position',uipos.h1_7, ...
    'String','Input Output Variables', ...
    'Style','text');
    EditUd = struct('ListIndex',0,'String','');
    ud.Handles.DataText = uicontrol('Parent',fig, ...
     'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'HorizontalAlignment','left', ...
    'ListboxTop',0, ...
    'Position',uipos.DataText, ...
    'String','Structure Name:', ...
    'Style','text', ...
      'Tag','DataText');
   ud.Handles.DataEdit = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',[1 1 1], ...
    'Callback','nncontrolutil(''nndataimport'',''editcallback'',gcbf);', ...
    'HorizontalAlignment','left', ...
    'ListboxTop',0, ...
    'Position',uipos.DataEdit, ...
    'String','', ...
    'Style','edit', ...
     'UserData',EditUd,...
      'ToolTipStr','Data object to be imported.',...
    'Tag','DataEdit');
   ud.Handles.DataButton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'Callback','nncontrolutil(''nndataimport'',''buttoncallback'',gcbf);', ...
    'Position',uipos.DataButton, ...
    'String','-->', ...
     'UserData',ud.Handles.DataEdit,...
      'ToolTipStr','Select the data object to be imported.',...
    'Tag','DataButton');
    ud.Handles.InputText = uicontrol('Parent',fig, ...
     'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'HorizontalAlignment','left', ...
    'ListboxTop',0, ...
    'Position',uipos.InputText, ...
    'String','Input Array:', ...
    'Style','text', ...
      'Tag','InputText');
   ud.Handles.InputEdit = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',[1 1 1], ...
    'Callback','nncontrolutil(''nndataimport'',''editcallback'',gcbf);', ...
    'HorizontalAlignment','left', ...
    'ListboxTop',0, ...
    'Position',uipos.InputEdit, ...
    'String','', ...
    'Style','edit', ...
     'UserData',EditUd,...
      'ToolTipStr','Input data array to be imported.',...
    'Tag','InputEdit');
   ud.Handles.InputButton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'Callback','nncontrolutil(''nndataimport'',''buttoncallback'',gcbf);', ...
    'Position',uipos.InputButton, ...
    'String','-->', ...
     'UserData',ud.Handles.InputEdit,...
      'ToolTipStr','Select the input array to be imported.',...
    'Tag','InputButton');
    ud.Handles.OutputText = uicontrol('Parent',fig, ...
     'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'HorizontalAlignment','left', ...
    'ListboxTop',0, ...
    'Position',uipos.OutputText, ...
    'String','Output Array:', ...
    'Style','text', ...
      'Tag','OutputText');
   ud.Handles.OutputEdit = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',[1 1 1], ...
    'Callback','nncontrolutil(''nndataimport'',''editcallback'',gcbf);', ...
    'HorizontalAlignment','left', ...
    'ListboxTop',0, ...
    'Position',uipos.OutputEdit, ...
    'String','', ...
    'Style','edit', ...
     'UserData',EditUd,...
      'ToolTipStr','Output data array to be imported.',...
    'Tag','OutputEdit');
   ud.Handles.OutputButton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'Callback','nncontrolutil(''nndataimport'',''buttoncallback'',gcbf);', ...
    'Position',uipos.OutputButton, ...
    'String','-->', ...
     'UserData',ud.Handles.OutputEdit,...
      'ToolTipStr','Select the output array to be imported.',...
    'Tag','OutputButton');
   h1 = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'BackgroundColor',StdColor, ...
    'ListboxTop',0, ...
    'Position',uipos.h1_8, ...
    'Visible', 'off',...
    'Style','frame');
   ud.Handles.HelpButton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'Callback','nncontrolutil(''nndataimport'',''windowstyle'',gcbf,''normal'');nncontrolutil(''nndataimporthelp'',''main'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.HelpButton, ...
    'String','Help', ...
      'ToolTipStr','Call the Import Data help window.',...
    'Tag','HelpButton');
   ud.Handles.CancelButton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'Callback','nncontrolutil(''nndataimport'',''cancel'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.CancelButton, ...
    'String','Cancel', ...
      'ToolTipStr','Discard the import action and close this menu',...
    'Tag','CancelButton');
   ud.Handles.OKButton = uicontrol('Parent',fig, ...
    'Unit',StdUnit, ...
    'Callback','nncontrolutil(''nndataimport'',''apply'',gcbf);', ...
    'ListboxTop',0, ...
    'Position',uipos.OKButton, ...
    'String','OK', ...
      'ToolTipStr','Import the data into the Plant Identification window.',...
    'Tag','OKButton');

  end
   set(fig,'UserData',ud,'visible','on','WindowStyle','modal')
   nncontrolutil('nndataimport','structures',gcbf);
   nncontrolutil('nndataimport','workspace',gcbf);
   
elseif strcmp(cmd,'cancel')
   H=get(ud.Handles.parent,'userdata');
   arg1=get(H.gcbh_ptr,'userdata');
   arg2=get(H.gcb_ptr,'userdata');
   if strcmp('ref',ud.Handles.type_net)
      nnmodref('',arg1,arg2,'');
   else
      nnident('',arg1,arg2,'');
   end
   delete(fig)
   return;
   
elseif strcmp(cmd,'windowstyle')
   set(fig,'visible','on','WindowStyle',arg2)
   return;
   
elseif strcmp(cmd,'radiobutton')
   val = get(gcbo,'Value');
   sibs = get(gcbo,'UserData');
   
   if ~val,
      set(gcbo,'Value',1);
   elseif val==1,
      set(sibs,'Value',0);
      set(ud.Handles.FileNameEdit,'String','', ...
         'UserData',struct('FileName',[],'PathName',[]));
      set(ud.Handles.DataEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
      set(ud.Handles.InputEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
      set(ud.Handles.OutputEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
   end % if/else val
   
elseif strcmp(cmd,'radiobutton1')
   val = get(gcbo,'Value');
   sibs = get(gcbo,'UserData');
   
   if ~val,
      set(gcbo,'Value',1);
   elseif val==1,
      set(sibs,'Value',0);
%      set(ud.Handles.DataEdit,'String','','UserData',...
%            struct('ListIndex',0,'String',''));
%      set(ud.Handles.InputEdit,'String','','UserData',...
%            struct('ListIndex',0,'String',''));
%      set(ud.Handles.OutputEdit,'String','','UserData',...
%            struct('ListIndex',0,'String',''));
   end % if/else val
   
elseif strcmp(cmd,'arrays') | strcmp(cmd,'structures'),
   if strcmp(cmd,'arrays')
      set(ud.Handles.InputText,'enable','on');
      set(ud.Handles.InputEdit,'enable','on');
      set(ud.Handles.InputButton,'enable','on');
      set(ud.Handles.OutputText,'enable','on');
      set(ud.Handles.OutputEdit,'enable','on');
      set(ud.Handles.OutputButton,'enable','on');
      set(ud.Handles.DataText,'enable','off');
      set(ud.Handles.DataEdit,'enable','off');
      set(ud.Handles.DataButton,'enable','off');
   else
      set(ud.Handles.InputText,'enable','off');
      set(ud.Handles.InputEdit,'enable','off');
      set(ud.Handles.InputButton,'enable','off');
      set(ud.Handles.OutputText,'enable','off');
      set(ud.Handles.OutputEdit,'enable','off');
      set(ud.Handles.OutputButton,'enable','off');
      set(ud.Handles.DataText,'enable','on');
      set(ud.Handles.DataEdit,'enable','on');
      set(ud.Handles.DataButton,'enable','on');
   end
   if get(ud.Handles.Wbutton,'Value'),
      nncontrolutil('nndataimport','workspace',gcbf);
   else
      nncontrolutil('nndataimport','matfile',gcbf);
   end
   
elseif strcmp(cmd,'editcallback'),
   %---Callback for the Input, Output and Structure Edit boxes
   %---These boxes should contain an index into the List Box string
   %---The Index should be zero when an invalid name is entered
   TryString = get(gcbo,'String');
   udEdit = get(gcbo,'UserData');
   
   if isempty(TryString), % empty value, leave it that way
      udEdit.ListIndex=0;
      udEdit.String='';
   else      
      IndList = nnstring.first_match(TryString,ud.ListData.Names);
      
      if isempty(IndList),
          % Revert to last valid entry
         if isempty(udEdit.ListIndex),
            set(gcbo,'String','');
         else
            set(gcbo,'String',udEdit.String);
         end, %if/else isempty(udEdit)
         WarnStr=['You must enter an array or structure from the list box.'];
         warndlg(WarnStr,'Import Warning','modal');
      else, % Store the list index
         udEdit.ListIndex=IndList;
         udEdit.String=TryString;
      end % if/else isempty(IndList);
   end % if/else isempty(TryString);
   set(gcbo,'UserData',udEdit);
   
elseif strcmp(cmd,'matfile'),
   set(ud.Handles.ModelText,'string','MAT-file Contents');
   set([ud.Handles.FileNameText,...
         ud.Handles.FileNameEdit,...
         ud.Handles.BrowseButton],'enable','on');
   set(ud.Handles.FileNameText,'String','MAT-filename:');
   set(ud.Handles.BrowseButton,'Callback','nncontrolutil(''nndataimport'',''browsemat'',gcbf);');
   set(ud.Handles.FileNameEdit,...
      'Callback','nncontrolutil(''nndataimport'',''clearpath'',gcbf);nncontrolutil(''nndataimport'',''matfile'',gcbf);');
   
   FileName = get(ud.Handles.FileNameEdit,'String');   
   if isempty(FileName),
      Data=struct('Names','','Objects',[]);
   else
      try
         if get(ud.Handles.Abutton,'Value'),
            type_data='double';
         else
            type_data='struct';
         end
         VAR=load(FileName);
         WorkspaceVars=whos('-file',FileName);
         sysvar=cell(size(WorkspaceVars));
         s=0;
         for ct=1:size(WorkspaceVars,1),
            VarClass=WorkspaceVars(ct).class;
            if (strcmp(VarClass,type_data)) & isequal(2,length(WorkspaceVars(ct).size)) %& ~(strcmp(WorkspaceVars(ct).name,'ud')),
               % Only look for structure objects
               s=s+1;
               sysvar(s)={WorkspaceVars(ct).name};
            end % if isa
         end % for ct
         sysvar=sysvar(1:s);
         
         DataObjects = cell(2,1);
         for ctud=1:s,
            DataObjects{ctud} = eval(cat(2,'VAR.',sysvar{ctud}));
         end % for
         Data = struct('Names',{sysvar},'Objects',{DataObjects});
         
      catch me
         warndlg(me.message,'Import Warning','modal'); 
         set(ud.Handles.FileNameEdit,'String','');
         FileName='';
         Data=struct('Names','','Objects',[]);
      end % try/catch
   end % if/else check on FileName
   
   LocalFinishLoad(fig,ud,FileName,Data)
   
elseif strcmp(cmd,'workspace')
   set(ud.Handles.ModelText,'string','Workspace Contents');
   set([ud.Handles.FileNameText,...
         ud.Handles.FileNameEdit,...
         ud.Handles.BrowseButton],'enable','off');
   
   %----Look for all workspace variables of class 'ss', 'tf', or 'zpk'
   WorkspaceVars=evalin('base','whos');
   sysvar=cell(size(WorkspaceVars));
   s=0;
   
   if get(ud.Handles.Abutton,'Value'),
      type_data='double';
   else
      type_data='struct';
   end
   
   for ct=1:size(WorkspaceVars,1),
      VarClass=WorkspaceVars(ct).class;
      if (strcmp(VarClass,type_data))  & isequal(2,length(WorkspaceVars(ct).size)),
         % Only look for Non-array (TF, SS, and ZPK) LTI objects
         s=s+1;
         sysvar(s,1)={WorkspaceVars(ct).name};
      end % if isa
   end % for ct
   sysvar=sysvar(1:s,1);
   
   DataObjects = cell(s,1);
   for ctud=1:s,
      DataObjects{ctud} = evalin('base',sysvar{ctud});
   end
   
   Data = struct('Names',{sysvar},'Objects',{DataObjects});
   
   set(ud.Handles.ModelList,'String',sysvar,'value',1)
   
   %---Update the Import Figure Userdata
   ud.ListData=Data;
   set(fig,'UserData',ud);
      
elseif strcmp(cmd,'browsemat')
   filterspec = '*.mat';
   
   udFileEdit = get(ud.Handles.FileNameEdit,'UserData');
   LastPath = udFileEdit.PathName;
   CurrentPath=pwd;
   if ~isempty(LastPath),
      cd(LastPath);
   end
   [filename,pathname] = uigetfile(filterspec,'Import file:');
   if ~isempty(LastPath),
      cd(CurrentPath);
   end
   
   if filename,
      if ~strcmpi(pathname(1:end-1),CurrentPath)
         ImportStr = [pathname,filename(1:end-4)];
      else
         ImportStr = filename(1:end-4);
      end
      set(ud.Handles.FileNameEdit,'String',ImportStr);
      nncontrolutil('nndataimport','matfile',fig);
      set(ud.Handles.DataEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
      set(ud.Handles.InputEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
      set(ud.Handles.OutputEdit,'String','','UserData',...
            struct('ListIndex',0,'String',''));
   end
   
elseif strcmp(cmd,'clearpath') && ~isempty(fig)
   %---Callback for the SImulink File box
   %    Whenever a new name is entered, update the Userdata
   NewName = get(gcbo,'String');
   indDot = strfind(NewName,'.');
   if ~isempty(indDot),
      NewName=NewName(1:indDot(end)-1);
      set(ud.Handles.FileNameEdit,'String',NewName)   
   end
      
elseif strcmp(cmd,'buttoncallback')
   %---Callback for the Arrow Buttons
   EditBox = get(gcbo,'UserData');
   AllNames = get(ud.Handles.ModelList,'String');
   if ~isempty(AllNames), % Make sure these is something in the list
      SelectedName = get(ud.Handles.ModelList,'Value');
      udEdit = get(EditBox ,'UserData');
      udEdit.String = AllNames{SelectedName};
      udEdit.ListIndex = SelectedName;
      set(EditBox,'String',AllNames{SelectedName},'UserData',udEdit);
   end
   
elseif strcmp(cmd,'apply'), % Send the new Feedback structure to the Parent's Userdata
   if get(ud.Handles.Sbutton,'value')
      DataOK=0;
      %---Data
      udDataEdit = get(ud.Handles.DataEdit,'UserData');
      if udDataEdit.ListIndex~=0, 
         ud.ModelData.Data.Name = udDataEdit.String;
         ud.ModelData.Data.Object = ...
           ud.ListData.Objects{udDataEdit.ListIndex};
         
         if ~isfield(ud.ModelData.Data.Object,'U') | ~isfield(ud.ModelData.Data.Object,'Y')
            warndlg('The data structure must at least have fields U and Y for Input and Output arrays.',...
               'Import Warning','modal');
            return
         end
         size_U=size(ud.ModelData.Data.Object.U(:),1);
         size_Y=size(ud.ModelData.Data.Object.Y(:),1);
         if size_U ~= size_Y
            warndlg('The Input and Output arrays (U and Y) inside the data structure must have the same dimensions.',...
               'Import Warning','modal');
            return
         end
         
         if isfield(ud.ModelData.Data.Object,'Ts')
            H=get(ud.Handles.parent,'userdata');
            Ts=str2num(get(H.Sampling_time,'string')); 
            if Ts~=ud.ModelData.Data.Object.Ts
               temp=questdlg({['Your data structure has a different sampling time than the simulink controller block.'] ...
                     ['The simulink controller block will use the sampling time already configured.'] ...
                     ['Do you want to continue ?']},...
                  'Import Warning','Yes','No','No');
               if strcmp(temp,'No')
                  return
               end
            end
         end
         
         ImportStr=get(ud.Handles.FileNameEdit,'String');
         if strcmp(ud.Handles.type_net,'narma_l2') | strcmp(ud.Handles.type_net,'nnpredict') ...
               | strcmp(ud.Handles.type_net,'nnmodref')
            nnident('have_file',ImportStr,ud.ModelData.Data.Name);
         elseif strcmp(ud.Handles.type_net,'ref')
            nnmodref('have_file',ImportStr,ud.ModelData.Data.Name);
         end
         DataOK=1;
      end
               
      figure_variables=get(ud.Handles.parent,'userdata');
      parent_simulink=get(figure_variables.gcbh_ptr,'userdata');
      
      if DataOK
         H=get(ud.Handles.parent,'userdata');
         arg1=get(H.gcbh_ptr,'userdata');
         arg2=get(H.gcb_ptr,'userdata');
         if strcmp('ref',ud.Handles.type_net)
            nnmodref('',arg1,arg2,'');
         else
            nnident('',arg1,arg2,'');
         end
         delete(fig)   
         return
      end
   else
      U_OK=0;
      Y_OK=0;
      %---Data
      udInputEdit = get(ud.Handles.InputEdit,'UserData');
      udOutputEdit = get(ud.Handles.OutputEdit,'UserData');
      if udInputEdit.ListIndex==0 | udOutputEdit.ListIndex==0, 
         warndlg('You must define the input and output variables to be imported.',...
             'Import Warning','modal');
         return
      end
      if udInputEdit.ListIndex~=0 & udOutputEdit.ListIndex~=0, 
         ud.ModelData.DataU.Name = udInputEdit.String;
         ud.ModelData.DataU.Object = ...
           ud.ListData.Objects{udInputEdit.ListIndex};
         ud.ModelData.DataY.Name = udOutputEdit.String;
         ud.ModelData.DataY.Object = ...
           ud.ListData.Objects{udOutputEdit.ListIndex};
         
         size_U=size(ud.ModelData.DataU.Object);
         size_Y=size(ud.ModelData.DataY.Object);
         if (size_U(1)>1 & size_U(2)>1) | (size_Y(1)>1 & size_Y(2)>1)
            warndlg('The Input and Output arrays must be row (1xN) or column (Nx1) variables.',...
               'Import Warning','modal');
            return
         end
         
         size_U=size(ud.ModelData.DataU.Object,1);
         if size_U<=1
            size_U=size(ud.ModelData.DataU.Object,2);
            if size_U<=1
               warndlg('The Input Array must be empty or have only one element.',...
                  'Import Warning','modal');
               return
            end
         end
         size_Y=size(ud.ModelData.DataY.Object,1);
         if size_Y<=1
            size_Y=size(ud.ModelData.DataY.Object,2);
            if size_Y<=1
               warndlg('The Output Array must be empty or have only one element.',...
                  'Import Warning','modal');
               return
            end
         end
         if size_U ~= size_Y
            warndlg('The Input and Output arrays must have the same dimensions.',...
               'Import Warning','modal');
            return
         end
         
         ImportStr=get(ud.Handles.FileNameEdit,'String');
         if strcmp(ud.Handles.type_net,'narma_l2') | strcmp(ud.Handles.type_net,'nnpredict') ...
               | strcmp(ud.Handles.type_net,'nnmodref')
            nnident('have_file',ImportStr,ud.ModelData.DataU.Name,ud.ModelData.DataY.Name);
         elseif strcmp(ud.Handles.type_net,'ref')
            nnmodref('have_file',ImportStr,ud.ModelData.DataU.Name,ud.ModelData.DataY.Name);
         end
         DataOK=1;
      end
               
      figure_variables=get(ud.Handles.parent,'userdata');
      parent_simulink=get(figure_variables.gcbh_ptr,'userdata');
      
      if DataOK
         H=get(ud.Handles.parent,'userdata');
         arg1=get(H.gcbh_ptr,'userdata');
         arg2=get(H.gcb_ptr,'userdata');
         if strcmp('ref',ud.Handles.type_net)
            nnmodref('',arg1,arg2,'');
         else
            nnident('',arg1,arg2,'');
         end
         delete(fig)   
         return
      end
   end
      
   warndlg('You must define the variables to be imported.',...
           'Import Warning','modal');
          
   set(fig,'UserData',ud)

   uiresume(fig)
   
end

%-----------------------------Internal Functions--------------------------
%%%%%%%%%%%%%%%%%%%%%%%
%%% LocalFinishLoad %%%
%%%%%%%%%%%%%%%%%%%%%%%
function LocalFinishLoad(ImportFig,ud,FileName,Data)

%---Update the FileNameEdit Userdata
[P,F]=fileparts(FileName);
udNames = get(ud.Handles.FileNameEdit,'UserData');
udNames.PathName=P; 
udNames.FileName=F;
set(ud.Handles.FileNameEdit,'UserData',udNames)

%---Update the Import Figure Userdata
set(ud.Handles.ModelList,'String',Data.Names,'value',1)
ud.ListData=Data;
set(ImportFig,'UserData',ud);




function uipos = getuipos

sunits = get(0, 'Units');
set (0, 'Units', 'character');
ssinchar = get(0, 'ScreenSize');
set (0, 'Units', sunits);


outborder = 1.3333;
inborder = 1;
framew = 33;
butwsmall = 6;
butwbig = framew-(inborder*2);
butwmed = 12;
labelh = 1.53846;
labelw = framew - (2*outborder);

figw = (3*framew) + (2*outborder) + (3*inborder) + butwsmall;
figh = 16.53846;
figl = (ssinchar(3) - figw) / 2;
figb = (ssinchar(4) - figh) / 2;

uipos.fig = [figl,figb,figw,figh];

uipos.h1_1 = [outborder,0.692308,framew,9.61538]; % frame1 : Type of Data
uipos.h1_2 = [outborder,10.9231,framew,4.23077]; % frame 2 : Import From
uipos.h1_5 = [outborder+framew+inborder,3.38462,framew,11.7692]; %frame3 : Workspace Contents
uipos.h1_6 = [outborder+framew*2+inborder*3+butwsmall,3.38462,framew,11.7692]; %frame4 % Input Output Variables
uipos.h1_8 = [uipos.h1_5(1),0.692308,(2*framew)+(2*inborder)+butwsmall,2.15385]; %frame5 : Bottom Frame

uipos.h1_3      = [uipos.h1_1(1)+((framew-17)/2),9.23077,17,labelh];
uipos.h1_4      = [uipos.h1_2(1)+((framew-16)/2),14,16,labelh];
uipos.ModelText = [uipos.h1_5(1)+((framew-22)/2),14.1538,22,labelh];
uipos.h1_7      = [uipos.h1_6(1)+((framew-26)/2),14.1538,26,labelh];


uipos.Sbutton       = [2*outborder,12.8462,labelw,labelh];
uipos.Abutton       = [2*outborder,11.0769,labelw,labelh];
uipos.Wbutton       = [2*outborder,8.07692,labelw,labelh];
uipos.Mbutton       = [2*outborder,6.23077,labelw,labelh];
uipos.FileNameText  = [2*outborder,4.46154,labelw,labelh];
uipos.FileNameEdit  = [2*outborder,3,labelw,labelh];
uipos.BrowseButton  = [2*outborder,1.07692,labelw,labelh];


uipos.ModelList = [outborder+framew+(2*inborder),3.76923,framew-(2*inborder),10.6923];

tcl = (2*outborder)+(2*framew)+(3*inborder)+butwsmall;
uipos.DataText = [tcl,11.7692,labelw,labelh];
uipos.DataEdit = [tcl,10.6923,labelw,labelh];
uipos.DataButton = [tcl-(2*inborder)-butwsmall,10.6923,butwsmall,labelh];

uipos.InputText = [tcl,8.46154,labelw,labelh];
uipos.InputEdit = [tcl,7.38462,labelw,labelh];
uipos.InputButton = [tcl-(2*inborder)-butwsmall,7.38462,butwsmall,labelh];

uipos.OutputText = [tcl,5.15385,labelw,labelh];
uipos.OutputEdit = [tcl,4.07692,labelw,labelh];
uipos.OutputButton = [tcl-(2*inborder)-butwsmall,4.07692,butwsmall,labelh];

uipos.CancelButton = [figw-(2*outborder)-butwmed,1,butwmed,labelh];
uipos.OKButton = [uipos.CancelButton(1)-inborder-butwmed,1,butwmed,labelh];
uipos.HelpButton = [uipos.OKButton(1)-inborder-butwmed,1,butwmed,labelh];