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

📄 envtowks.m

📁 机器人控制仿真程序一书的所有源代码
💻 M
字号:
function [val1,val2,val3,val4,val5,val6,val7,val8,val9] = envtowks(flag,flag2)
% ENVTOWKS Environment to workspace. (Utility Function)
%          ENVTOWKS provides a gateway from the environment to the workspace
%          for the user during an IDE session.

% Author: Craig Borghesani
% 7/9/94
% Copyright (c) 1995-98 by The MathWorks, Inc.
%       $Revision: 1.6 $

if flag~=0,
 f2 = gcf;
 f = get(f2,'userdata');
 bthan=get(f,'userdata');
 infmat=get(bthan(16),'userdata');
 hint_bar = get(bthan(36),'userdata');
end


if flag==0, % Setup

 f = gcf;
 bthan = get(f,'userdata');
 infmat = get(bthan(16),'userdata');
 del=25;

 hint_bar = get(bthan(36),'userdata');
 proc_num = int2str(infmat(25,2));
 win_tag = findobj('tag',['qft6',proc_num]);
 fig_color = [0.5,0.5,0.5];
 if ~length(win_tag),
  infmat(31,1) = colordef('new','none');
  set(infmat(31,1),'numbertitle','off','menubar','none','name','Out to Workspace',...
                'pos',[30,50,415,170],'color',fig_color,'resize','off',...
                'userdata',f,'tag',['qft6',proc_num]);

  f2 = infmat(31,1);
% Numerator/Denominator
  uicontrol(f2,'style','text','string','Numerator/Denominator:',...
            'pos',[10,165-del,160,17],'horizontalalignment','left',...
            'backgroundcolor',[0,0.5020,0]);
  uicontrol(f2,'style','text','string','Num:',...
            'pos',[10,140-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(1) = uicontrol(f2,'style','edit','pos',[45,140-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');
  uicontrol(f2,'style','text','string','Den:',...
            'pos',[110,140-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(2) = uicontrol(f2,'style','edit','pos',[145,140-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');

% Zero/Pole/Gain
  uicontrol(f2,'style','text','string','Zero/Pole/Gain:',...
            'pos',[10,115-del,160,17],'horizontalalignment','left',...
            'backgroundcolor',[0,0.5020,0]);
  uicontrol(f2,'style','text','string','Z:',...
            'pos',[10,90-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(3) = uicontrol(f2,'style','edit','pos',[45,90-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');
  uicontrol(f2,'style','text','string','P:',...
            'pos',[110,90-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(4) = uicontrol(f2,'style','edit','pos',[145,90-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');
  uicontrol(f2,'style','text','string','K:',...
            'pos',[210,90-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(5) = uicontrol(f2,'style','edit','pos',[245,90-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');

% State Space
  uicontrol(f2,'style','text','string','State Space:',...
            'pos',[10,65-del,160,17],'horizontalalignment','left',...
            'backgroundcolor',[0,0.5020,0]);
  uicontrol(f2,'style','text','string','A:',...
            'pos',[10,40-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(6) = uicontrol(f2,'style','edit','pos',[45,40-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');
  uicontrol(f2,'style','text','string','B:',...
            'pos',[110,40-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(7) = uicontrol(f2,'style','edit','pos',[145,40-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');
  uicontrol(f2,'style','text','string','C:',...
            'pos',[210,40-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(8) = uicontrol(f2,'style','edit','pos',[245,40-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');
  uicontrol(f2,'style','text','string','D:',...
            'pos',[310,40-del,30,20],'horizontalalignment','right',...
            'back',fig_color);
  edt(9) = uicontrol(f2,'style','edit','pos',[345,40-del,60,20],'backgroundcolor','w',...
                     'callback','envtowks(1,0)');

  set(edt,'horiz','left');
  uicontrol(f2,'style','frame','pos',[346,118,66,49],'backgroundcolor',[0,0.5020,0]);
  psh(1) = uicontrol(f2,'style','push','pos',[349,144,60,20],'string','OK');
  uicontrol(f2,'style','push','pos',[349,121,60,20],'string','Cancel',...
            'callback','envtowks(3,0)');

  set(bthan(35),'userdata',[psh,edt]);
  set(bthan(16),'userdata',infmat);
  set(f2,'vis','on');
 else
  set(infmat(31,1),'vis','on');
 end

 set(hint_bar,'string','Enter variable names you wish to be passed to the workspace');
 drawnow;

elseif flag==1, % edit fields

 handles = get(bthan(35),'userdata');
 psh = handles(1);
 edt = handles(2:10);

% build output and input strings
 output_str = '[';
 input_str = '[';

 for k = 1:9,
  var_str = get(edt(k),'string');
  if length(var_str),
   output_str = [output_str,var_str,','];
   input_str = [input_str,int2str(k),','];
  end
 end

% remove extra comma and place ] at end of string
 output_str(length(output_str))=[];
 input_str(length(input_str))=[];
 output_str = [output_str,']'];
 input_str = [input_str,']'];

% setup callback to pass desired variables to workspace
 callback_str = [output_str,'=envtowks(2,',input_str,');'];
 set(psh,'callback',callback_str);

elseif flag==2, % OK

 T = get(bthan(13),'userdata');

 cont_r = get(bthan(3),'userdata');
 cont2 = get(bthan(31),'userdata');
 if length(cont2),
  cont_r(1,1) = cont_r(1,1)*cont2(1,1);
  if length(T),
   cont_r(3,1) = cont_r(3,1)+cont2(3,1);
   cont2(1:3,:) = [];
  else
   cont2(1:2,:) = [];
  end
  cont_r = [cont_r;cont2];
 end

 if any(flag2==1) | any(flag2==2),
  [var1,var2]=cntextr(cont_r,T);
 end

 if any(flag2==3) | any(flag2==4) | any(flag2==5),
  [var3,var4,var5]=cnt2zpk(cont_r,T);
 end

 if any(flag2==6) | any(flag2==7) | any(flag2==8) | any(flag2==9),
  [z,p,k]=cnt2zpk(cont_r,T);
  if ~length(T),
   [do_it,repeat,jk] = chkzp(z,p,T);
   if do_it,
    if repeat,
     [sysb,hsv]=qfwbal(z,p,k,[],'z');
    else
     [r,p,k]=qzp2rp(z,p,k);
     [sysb,hsv]=qfwbal(r,p,k,[],'r');
    end
    [sr,sc] = size(sysb);
    var6 = sysb(1:sr-2,1:sc-2);
    var7 = sysb(1:sr-2,sc-1);
    var8 = sysb(sr-1,1:sc-2);
    var9 = sysb(sr-1,sc-1);
   else
    [var6,var7,var8,var9]=zp2ss(z,p,k);
   end
  else
   [var6,var7,var8,var9]=zp2ss(z,p,k);
  end
 end

 ct=1;
 for k = flag2,
  eval(['val',int2str(ct),'=var',int2str(k),';']);
  ct=ct+1;
 end

 set(hint_bar,'string','Variables passed to workspace');

 set(infmat(31,1),'vis','off');

elseif flag==3, % Cancel

 set(infmat(31,1),'vis','off');
 handles = get(bthan(35),'userdata');
 edt = handles(2:9);
 set(edt,'string','');

end

⌨️ 快捷键说明

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