📄 zhcqjiaozheng.asv
字号:
function varargout = zhcqjiaozheng(varargin)%ZHCQJIAOZHENG M-file for zhcqjiaozheng.fig% ZHCQJIAOZHENG, by itself, creates a new ZHCQJIAOZHENG or raises the existing% singleton*.%% H = ZHCQJIAOZHENG returns the handle to a new ZHCQJIAOZHENG or the handle to% the existing singleton*.%% ZHCQJIAOZHENG('Property','Value',...) creates a new ZHCQJIAOZHENG using the% given property value pairs. Unrecognized properties are passed via% varargin to zhcqjiaozheng_OpeningFcn. This calling syntax produces a% warning when there is an existing singleton*.%% ZHCQJIAOZHENG('CALLBACK') and ZHCQJIAOZHENG('CALLBACK',hObject,...) call the% local function named CALLBACK in ZHCQJIAOZHENG.M with the given input% arguments.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help zhcqjiaozheng% Last Modified by GUIDE v2.5 12-Jun-2005 15:04:32% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @zhcqjiaozheng_OpeningFcn, ... 'gui_OutputFcn', @zhcqjiaozheng_OutputFcn, ... 'gui_LayoutFcn', [], ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before zhcqjiaozheng is made visible.function zhcqjiaozheng_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin unrecognized PropertyName/PropertyValue pairs from the% command line (see VARARGIN)% Choose default command line output for zhcqjiaozhenghandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes zhcqjiaozheng wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout = zhcqjiaozheng_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on button press in zhcq.function zhcq_Callback(hObject, eventdata, handles)% hObject handle to zhcq (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)Val_Selection = get(findobj('Tag','passorzp'),'Value');Val_clooporopen = get(findobj('Tag','clooporopen'),'Value');%--------根据判断建立相应的模型---------switch Val_Selection%----获得传递函数形式的输入 ---------- case 1 Handle_numorzero = findobj( 'Tag','numorzero'); Val_numzero = get(Handle_numorzero,'String'); Val_num = str2num(Val_numzero); Handle_denorp = findobj('Tag','denorp'); Val_denp = get(Handle_denorp,'String'); Val_den = str2num(Val_denp); Handle_kedit = findobj('Tag','kedit'); Val_kedit = get (Handle_kedit,'String'); %Val_k = str2num(Val_kedit); num = Val_num%*Val_k; den = Val_den;%获得零极点形式的输入 case 2 Handle_numorzero = findobj( 'Tag','numorzero'); Val_numzero = get (Handle_numorzero,'String'); Val_zero = str2num(Val_numzero); Handle_denorp = findobj('Tag','denorp'); Val_denorp = get(Handle_denorp,'String'); Val_p = str2num(Val_denorp); Handle_kedit = findobj('Tag','kedit'); Val_kedit = get (Handle_kedit,'String'); Val_k = str2num(Val_kedit); [num,den] = zp2tf(Val_zero,Val_p,Val_k); end%------判断输入模型为开环or闭环并建立相应的模型-------if (Val_clooporopen ==2) [numc,denc] = cloop(num,den); sys = tf(numc,denc); [z,p,k] = tf2zp(numc,denc);else numc = num; denc = den; sys = tf(numc,denc); [z,p,k] = tf2zp(numc,denc);endHandle_edit5 = findobj('Tag','edit5');Val_edit5 = get(Handle_edit5,'string');val5 = str2num(Val_edit5);Handle_edit6 = findobj('Tag','edit6');Val_edit6 = get(Handle_edit6,'string');val6 = str2num(Val_edit6);n1 = length(numc);n2 = length(denc);if denc(n2) ~= 0 k1 = numc(n1)/denc(n2);elseif denc(n2-1) ~=0 k1 = numc(n1)/denc(n2-1);elseif denc(n2-2) ~=0 k1 = numc(n1)/denc(n2-2);end kc = val5/k1;%确定校正后的系统的穿越频率wc。 [Mg1,Pg1,w] = bode(kc*numc,denc); wc = spline(Pg1,w,-180); %确定滞后部分的转折频率。 W2 = wc/10; T2 = 1/W2; %取得希望得到的相角裕量。 phi = val6; %循环增加希望的相角裕量。 Pm = 0; dpm = 0; while (Pm<val6) %确定校正装置的超前部分的转折频率。 phim = (phi+dpm)*pi/180; beta = (1+sin(phim))/(1-sin(phim)); Mg1wc = spline(w,Mg1,wc); W3 = (Mg1wc/beta)*wc; T1 = 1/W3; %建立校正装置的传递函数。 numt = conv([T1,1],[T2,1])*kc; dent = conv([T1/beta,1],[beta*T2,1]); syst = tf(numt,dent); %建立校正后系统的传递函数,供后续程序使用。 [num,den] = series(numc,denc,numt,dent); sys = tf(num,den); %取值进行判断取得的校正装置是否满足要求。 [Gm,Pm,Wcg,Wcp] = margin(num,den); dpm = dpm+0.1; end %在命令窗口中输出校正装置的参数及传递函数模型。 numt dent syst = tf(numt,dent) end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -