function srt04Nixgut % SRT Rechnerdemo 4 % Demonstration zur Phasenreserve % 1. Teil: Definition der verwendeten Übertragungsfunktionen % % Übertragungsfunktion der Strecke Strecke = zpk([-1],[0 -10 -20],200) % % Totzeit der Strecke Totzeit = tf(1,1); set(Totzeit,'OutputDelay',1); % % Allpassglied zur Darstellung des Einheitskreises in der Ortskurvendarstellung Allpass = tf([1 -1],[1 1]); % % IGlied zur Darstellung des 20dB-Abfalls im Bode-Diagramm IGlied = tf(1,[1 0]); k=evalin('base','k'); % Übertragungsfunktion berechnen offenerKreis = k*Totzeit*Strecke; % --- Ortskurve % % betrachteter Frequenzbereich w=logspace(-1.8,1.5,300); % Berechnen des Frequenzganges Frequenzgang = freqresp(offenerKreis,w); RealTeil = real(Frequenzgang(:)); ImagTeil = imag(Frequenzgang(:)); % Phasenreserve berechnen % 1. Phasenreserve der geregelten Strecke [Gm,Pm,Wcg,Wcp] = margin(offenerKreis); Phasenreserve = Pm; % Darstellen der Sprungantwort if isempty(findobj('tag','srt04step')) fig=figure; set (fig,'tag','srt04step','Name',['Führungssprungantwort für k=' num2str(k)]); set (fig,'NumberTitle','off'); set (fig,'Menubar','none'); scr=get(0,'Screensize'); set (fig,'position',[4 35 scr(3)-8 scr(4)-80]); else fig=figure(findobj('tag','srt04step')); set (fig,'Name',['Führungssprungantwort für k=' num2str(k)]); end open_system('srt04simul2'); sim('srt04simul2'); bdclose('srt04simul2'); plot(simout.time,simout.signals.values); hold off; % Bode-Diagramm if isempty(findobj('tag','srt04bode')) fig=figure; set (fig,'tag','srt04bode','Name',['Bode-Diagramm für k=' num2str(k)]); set (fig,'NumberTitle','off'); set (fig,'Menubar','none'); scr=get(0,'Screensize'); set (fig,'position',[4 35 scr(3)-8 scr(4)-80]); else fig=figure(findobj('tag','srt04bode')); set (fig,'Name',['Bode-Diagramm für k=' num2str(k)]); end h=bodeplot(offenerKreis,w); h.addchar('All Stability Margins','resppack.AllStabilityMarginData', ... 'resppack.BodeStabilityMarginView','visible','on'); grid on; hold on; bodeplot(IGlied,w); hold off; % Darstellen der Ortskurve if isempty(findobj('tag','srt04nyquist')) fig=figure; set (fig,'tag','srt04nyquist','Name',['Nyquist-Diagramm für k=' num2str(k)]); set (fig,'NumberTitle','off'); set (fig,'Menubar','none'); scr=get(0,'Screensize'); set (fig,'position',[4 35 scr(3)-8 scr(4)-80]); else fig=figure(findobj('tag','srt04nyquist')); set (fig,'Name',['Nyquist-Diagramm für k=' num2str(k)]); end plot(RealTeil,ImagTeil,'r','LineWidth',2); hold on; plot(-1,0,'+r'); % zum Vergleich; Einheitskreis zeigen nyquist(Allpass,'b'); axis([-2 2 -2 2]); % grid on; hold off;