Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- classdef R23ReglerApp_Steinbrink < matlab.apps.AppBase
- % Properties that correspond to app components
- properties (Access = public)
- PIDTool matlab.ui.Figure
- TabGroup matlab.ui.container.TabGroup
- Messwert matlab.ui.container.Tab
- DropDown matlab.ui.control.DropDown
- DropDownLabel matlab.ui.control.Label
- UebertragungsfunktionerzeugenButton matlab.ui.control.Button
- bergangsfunktionTextArea matlab.ui.control.TextArea
- bergangsfunktionTextAreaLabel matlab.ui.control.Label
- UebertragungsfunktionButtonGroup matlab.ui.container.ButtonGroup
- PT2mitUeberschwingenButton matlab.ui.control.ToggleButton
- PT2Button matlab.ui.control.ToggleButton
- PT1Button matlab.ui.control.ToggleButton
- MesswertgraphErzeugenButton matlab.ui.control.Button
- TextausrichtungSwitchLabel matlab.ui.control.Label
- TextausrichtungSwitch matlab.ui.control.Switch
- DateinichtvorhandenLabel matlab.ui.control.Label
- DateinameinklEndungEditField matlab.ui.control.EditField
- DateinameinklEndungEditFieldLabel matlab.ui.control.Label
- Messwerte matlab.ui.control.UIAxes
- StreckenpanelTab matlab.ui.container.Tab
- PT2GliedoderhherLabel matlab.ui.control.Label
- PT1GliedliegtvorLabel matlab.ui.control.Label
- StreckebernehmeninDBRButton matlab.ui.control.Button
- RegelbarkeitTextArea matlab.ui.control.TextArea
- RegelbarkeitTextAreaLabel matlab.ui.control.Label
- StreckeneingabeFehlerTextArea matlab.ui.control.TextArea
- Label matlab.ui.control.Label
- Totzeitwirdauf0gesetztLabel matlab.ui.control.Label
- TotzeitEditField matlab.ui.control.EditField
- TotzeitEditFieldLabel matlab.ui.control.Label
- StreckenreduktonButton matlab.ui.control.Button
- ErstellenButton matlab.ui.control.Button
- EditField matlab.ui.control.EditField
- ZhlerLabel matlab.ui.control.Label
- KoeffizientdesZaehlersEditField matlab.ui.control.EditField
- HurwitzTextArea matlab.ui.control.TextArea
- StreckenuebertragungsfunktionTextArea matlab.ui.control.TextArea
- StreckenanalysePanel matlab.ui.container.Panel
- VerhaeltnisTuzuTgTextArea matlab.ui.control.TextArea
- VerhltnisTuzuTgTextAreaLabel matlab.ui.control.Label
- AusgleichszeitTgTextArea matlab.ui.control.TextArea
- AusgleichszeitTgTextAreaLabel matlab.ui.control.Label
- VerzugszeitTuTextArea matlab.ui.control.TextArea
- VerzugszeitTuTextAreaLabel matlab.ui.control.Label
- EigenkreisfrequenzweTextArea matlab.ui.control.TextArea
- EigenkreisfrequenzweLabel matlab.ui.control.Label
- berschwingweiteTextArea matlab.ui.control.TextArea
- berschwingweiteLabel_2 matlab.ui.control.Label
- DmpfungDTextArea matlab.ui.control.TextArea
- DmpfungDTextAreaLabel matlab.ui.control.Label
- TuooAusgleichTextArea matlab.ui.control.TextArea
- TuooAusgleichTextAreaLabel matlab.ui.control.Label
- SteigungKisoAusgleichTextArea matlab.ui.control.TextArea
- SteigungKisoAusgleichTextAreaLabel matlab.ui.control.Label
- TauTextArea matlab.ui.control.TextArea
- TauTextAreaLabel matlab.ui.control.Label
- ProportionalbeiwertKpsTextArea matlab.ui.control.TextArea
- ProportionalbeiwertKpsTextAreaLabel matlab.ui.control.Label
- FktWertimWendepunktTextArea matlab.ui.control.TextArea
- FktWertimWendepunktTextAreaLabel matlab.ui.control.Label
- SteigungimWendepunktTextArea matlab.ui.control.TextArea
- SteigungimWendepunktTextAreaLabel matlab.ui.control.Label
- WendepunktbeitTextArea matlab.ui.control.TextArea
- WendepunktbeitTextAreaLabel matlab.ui.control.Label
- OrdnungTextArea matlab.ui.control.TextArea
- OrdnungTextAreaLabel matlab.ui.control.Label
- orginalFunktionLabel matlab.ui.control.Label
- reduzierteFunktionLabel matlab.ui.control.Label
- StabilitaetdesSystemsnachHurwitzLabel matlab.ui.control.Label
- StreckenbertragungsfunktionTextAreaLabel matlab.ui.control.Label
- ModStreckeneingabeButtonGroup matlab.ui.container.ButtonGroup
- PolynomdirektButton matlab.ui.control.RadioButton
- KoeffizientenButton matlab.ui.control.RadioButton
- UebergangsfunktionDiagramm matlab.ui.control.UIAxes
- RegelpanelTab matlab.ui.container.Tab
- PolstellendesPIDReglersTextArea matlab.ui.control.TextArea
- NullstellendesPIDReglersTextArea matlab.ui.control.TextArea
- PIDUebertragungsfunktionTextArea matlab.ui.control.TextArea
- PolstellendesPIDReglersTextAreaLabel matlab.ui.control.Label
- NullstellendesPIDReglersTextAreaLabel matlab.ui.control.Label
- bertragungsfunktiondesPIDReglersLabel matlab.ui.control.Label
- LimitfehlerLabel matlab.ui.control.Label
- DmpfungThetaTextArea matlab.ui.control.TextArea
- KnobEditButton matlab.ui.control.Button
- DmpfungThetaTextAreaLabel matlab.ui.control.Label
- DummySim1feldTextArea matlab.ui.control.TextArea
- Modellsimulierendummyfunktion matlab.ui.control.TextArea
- TextAreaLabel matlab.ui.control.Label
- DummySim1feldTextAreaLabel matlab.ui.control.Label
- KnobEditMax matlab.ui.control.NumericEditField
- KnobEditMin matlab.ui.control.NumericEditField
- SimulationszeitEditField matlab.ui.control.EditField
- SimulationszeitEditFieldLabel matlab.ui.control.Label
- GuetezielkriterienPanel matlab.ui.container.Panel
- VerhaltenButtonGroup matlab.ui.container.ButtonGroup
- DummyButton5 matlab.ui.control.ToggleButton
- FuehrungsverhaltenButton matlab.ui.control.ToggleButton
- StoerverhaltenButton matlab.ui.control.ToggleButton
- ParametersatzButtonGroup matlab.ui.container.ButtonGroup
- DummyButton4 matlab.ui.control.ToggleButton
- ueberschwingButton matlab.ui.control.ToggleButton
- AperiodischButton matlab.ui.control.ToggleButton
- MaxLabel matlab.ui.control.Label
- MinLabel matlab.ui.control.Label
- KnobEditDropDown matlab.ui.control.DropDown
- KnobEditLabel matlab.ui.control.Label
- RegelfehlermeldungLabel matlab.ui.control.Label
- TnEditField matlab.ui.control.NumericEditField
- TvEditField matlab.ui.control.NumericEditField
- KpEditField matlab.ui.control.NumericEditField
- ReglerberechnenButton matlab.ui.control.Button
- TnKnobLabel matlab.ui.control.Label
- TvKnobLabel matlab.ui.control.Label
- KpKnobLabel matlab.ui.control.Label
- RegelparameterPanel matlab.ui.container.Panel
- DigitalreglerButtonGroup matlab.ui.container.ButtonGroup
- DummyButtonPID matlab.ui.control.ToggleButton
- TakahashiPIDButton matlab.ui.control.ToggleButton
- TCAButton matlab.ui.control.ToggleButton
- ohneAusgleichButtonGroup matlab.ui.container.ButtonGroup
- CHRButtonoA matlab.ui.control.ToggleButton
- DummyButton3 matlab.ui.control.ToggleButton
- DrFiegerButton matlab.ui.control.ToggleButton
- mitAusgleichButtonGroup matlab.ui.container.ButtonGroup
- CHRButtonmA matlab.ui.control.ToggleButton
- DummyButton matlab.ui.control.ToggleButton
- ZieglerNicholsButton matlab.ui.control.ToggleButton
- TnKnob matlab.ui.control.Knob
- TvKnob matlab.ui.control.Knob
- KpKnob matlab.ui.control.Knob
- ReglertypButtonGroup matlab.ui.container.ButtonGroup
- DummyButton2 matlab.ui.control.ToggleButton
- PIDButton matlab.ui.control.ToggleButton
- PDButton matlab.ui.control.ToggleButton
- PIButton matlab.ui.control.ToggleButton
- PButton matlab.ui.control.ToggleButton
- ReglerartButtonGroup matlab.ui.container.ButtonGroup
- AbtastzeitinSekundenEditField matlab.ui.control.NumericEditField
- AbtastzeitinSekLabel matlab.ui.control.Label
- DigitalButton matlab.ui.control.ToggleButton
- AnalogButton matlab.ui.control.ToggleButton
- FrequenzkennlinienverfahrenTab matlab.ui.container.Tab
- RampeButton matlab.ui.control.Button
- MittenfreqLagTextArea matlab.ui.control.TextArea
- MittenfreqLagTextAreaLabel matlab.ui.control.Label
- MittenfreqLeadTextArea matlab.ui.control.TextArea
- MittenfreqLeadTextAreaLabel matlab.ui.control.Label
- ReglerG_RsTextArea matlab.ui.control.TextArea
- PReglerLabel matlab.ui.control.Label
- konstPhasedegreeEditField matlab.ui.control.NumericEditField
- konstPhasedegreeEditFieldLabel matlab.ui.control.Label
- FuehrungDropDown matlab.ui.control.DropDown
- FhrungDropDownLabel matlab.ui.control.Label
- Regelabweichunge_inftyEditField matlab.ui.control.NumericEditField
- Regelabweichunge_inftyEditFieldLabel matlab.ui.control.Label
- berschwingenddotuEditField matlab.ui.control.NumericEditField
- berschwingenLabel matlab.ui.control.Label
- Anstiegszeitt_rsEditField matlab.ui.control.NumericEditField
- Anstiegszeitt_rsEditFieldLabel matlab.ui.control.Label
- AuswertungPanel matlab.ui.container.Panel
- GridLayout matlab.ui.container.GridLayout
- tr_sollTextArea matlab.ui.control.TextArea
- u_sollTextArea matlab.ui.control.TextArea
- tr_Label matlab.ui.control.Label
- u_Label matlab.ui.control.Label
- wc_Label matlab.ui.control.Label
- IST_Label matlab.ui.control.Label
- SOLL_Label matlab.ui.control.Label
- pm_Label matlab.ui.control.Label
- wc_istTextArea matlab.ui.control.TextArea
- wc_sollTextArea matlab.ui.control.TextArea
- pm_istTextArea matlab.ui.control.TextArea
- pm_sollTextArea matlab.ui.control.TextArea
- u_istTextArea matlab.ui.control.TextArea
- tr_istTextArea matlab.ui.control.TextArea
- Lamp_FKV matlab.ui.control.Lamp
- HelpButton matlab.ui.control.Button
- FKVButton matlab.ui.control.Button
- BodevonG0sPanel matlab.ui.container.Panel
- MarginLabel_FKV matlab.ui.control.Label
- PhaseDiagramm_FKV matlab.ui.control.UIAxes
- MagnitudeDiagramm_FKV matlab.ui.control.UIAxes
- VorgabenanTsLabel matlab.ui.control.Label
- GeschlossenerRegelkreisDiagramm_FKV matlab.ui.control.UIAxes
- FuehrungspanelTab matlab.ui.container.Tab
- StellgrenbegrenzungLabel matlab.ui.control.Label
- Switch_stellgr matlab.ui.control.Switch
- ErstellenButton_stellgr matlab.ui.control.Button
- untereStellgrenbegrenzungEditField matlab.ui.control.NumericEditField
- untereStellgrenbegrenzungEditFieldLabel matlab.ui.control.Label
- obereStellgrenbegrenzungEditField matlab.ui.control.NumericEditField
- obereStellgrenbegrenzungEditFieldLabel matlab.ui.control.Label
- PolstellenTsTextArea matlab.ui.control.TextArea
- PolstellenTsTextAreaLabel matlab.ui.control.Label
- FuehrungsfunktionTextArea matlab.ui.control.TextArea
- FhrungsanalysePanel matlab.ui.container.Panel
- SchnittKreisfrequenzTextArea matlab.ui.control.TextArea
- SchnittKreisfrequenzLabel matlab.ui.control.Label
- PhasenrandTextArea matlab.ui.control.TextArea
- PhasenrandLabel matlab.ui.control.Label
- AmplitudenrandTextArea matlab.ui.control.TextArea
- AmplitudenrandLabel matlab.ui.control.Label
- AusregelzeitTextArea matlab.ui.control.TextArea
- AusregelzeitLabel matlab.ui.control.Label
- AnschwingzeitTextArea matlab.ui.control.TextArea
- AnschwingzeitLabel matlab.ui.control.Label
- UeberschwingweiteTextArea matlab.ui.control.TextArea
- berschwingweiteLabel matlab.ui.control.Label
- AnstiegszeitTextArea matlab.ui.control.TextArea
- AnstiegszeitLabel matlab.ui.control.Label
- FhrungsbertragungsfunktionTsLabel matlab.ui.control.Label
- Ausgang_Regler matlab.ui.control.UIAxes
- GeschlossenerRegelkreisDiagramm matlab.ui.control.UIAxes
- PolNullstellenDiagramm matlab.ui.control.UIAxes
- BodepanelTab matlab.ui.container.Tab
- VerschiebungindBEditField matlab.ui.control.NumericEditField
- VerschiebungindBEditFieldLabel matlab.ui.control.Label
- SchleifenfunktionTextArea matlab.ui.control.TextArea
- SchleifenbertragungsfunktionG0Label matlab.ui.control.Label
- BodeDiagrammderoffenenSchleifeG0sPanel matlab.ui.container.Panel
- MarginLabel matlab.ui.control.Label
- PhaseDiagramm matlab.ui.control.UIAxes
- MagnitudeDiagramm matlab.ui.control.UIAxes
- OrtskurveDiagramm matlab.ui.control.UIAxes
- DeadBeatReglerTab matlab.ui.container.Tab
- DebugTextArea matlab.ui.control.TextArea
- DebugTextAreaLabel matlab.ui.control.Label
- RegelstrategieButtonGroup matlab.ui.container.ButtonGroup
- AbtastzeitButton matlab.ui.control.RadioButton
- SollwertkorrekturButton matlab.ui.control.RadioButton
- keineButton matlab.ui.control.RadioButton
- StartButton matlab.ui.control.Button
- StreckeausStreckenpanelTextArea matlab.ui.control.TextArea
- StreckeausStreckenpanelTextAreaLabel matlab.ui.control.Label
- AbtastzeitEditField matlab.ui.control.NumericEditField
- AbtastzeitEditFieldLabel matlab.ui.control.Label
- U_minEditField matlab.ui.control.NumericEditField
- U_minEditFieldLabel matlab.ui.control.Label
- U_maxEditField matlab.ui.control.NumericEditField
- U_maxEditFieldLabel matlab.ui.control.Label
- MesswerteTable matlab.ui.control.Table
- AusregelschritteLabel matlab.ui.control.Label
- GesamtregeldauerLabel matlab.ui.control.Label
- TrsEditField matlab.ui.control.NumericEditField
- TrsEditFieldLabel matlab.ui.control.Label
- kEditField matlab.ui.control.NumericEditField
- kEditFieldLabel matlab.ui.control.Label
- RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel matlab.ui.control.Label
- DeadBeatReglerTextArea matlab.ui.control.TextArea
- DeadBeatReglerTextAreaLabel matlab.ui.control.Label
- StreckeTextArea matlab.ui.control.TextArea
- TextArea2Label matlab.ui.control.Label
- bertragungsfunktionenLabel matlab.ui.control.Label
- RegelAxes matlab.ui.control.UIAxes
- StellAxes matlab.ui.control.UIAxes
- end
- methods (Access = private)
- %Lokale Frontend-Funktionen
- %Funktion zum Setzen des sekundaeren Textareainhalts
- function setDisp(app)
- %Zuweisung der Ausgabewerte aus dem Zwischenspeicher an die Textarea-Objekte
- if(evalin('base','lastEvent') == "Reglerpanel") % Tobias Rockel
- app.PIDUebertragungsfunktionTextArea.Value = evalin('base','gPIDDisp');
- app.NullstellendesPIDReglersTextArea.Value = evalin('base','zgPID');
- app.PolstellendesPIDReglersTextArea.Value = evalin('base','pgPID');
- app.SchleifenfunktionTextArea.Value = evalin('base','G0Disp');
- app.FuehrungsfunktionTextArea.Value = evalin('base','TsDisp');
- app.PolstellenTsTextArea.Value = evalin('base','pTs');
- else % Tobias Rockel
- app.SchleifenfunktionTextArea.Value = evalin('base','FKV_G0Disp');
- app.FuehrungsfunktionTextArea.Value = evalin('base','FKV_TDisp');
- app.PolstellenTsTextArea.Value = evalin('base','pTs');
- end
- end
- %Analyse der Strecke
- function strecken_analyse(app,strecke)
- assignin('base','AnaCounter',1);
- assignin('base','stell_begrenz_anlog',0);
- assignin('base','alpha_dB',0);
- assignin('base','AnaFunktion',strecke);
- PidDesigner_Mod('AnaStep');
- %Darstellung der Analyseergebnisse
- app.OrdnungTextArea.Value = num2str(evalin('base','Ogs'));
- assignin('base','Verschiebung_Kp',0); %
- % Erstmal alle Analyse Textfelder sichtbar machen
- set(app.WendepunktbeitTextArea,'visible','on');
- set(app.SteigungimWendepunktTextArea,'visible','on');
- set(app.FktWertimWendepunktTextArea,'visible','on');
- set(app.VerzugszeitTuTextArea,'visible','on');
- set(app.AusgleichszeitTgTextArea,'visible','on');
- set(app.VerhaeltnisTuzuTgTextArea,'visible','on');
- set(app.ProportionalbeiwertKpsTextArea,'visible','on');
- set(app.berschwingweiteTextArea,'visible','on');
- set(app.DmpfungDTextArea,'visible','on');
- set(app.EigenkreisfrequenzweTextArea,'visible','on');
- set(app.SteigungKisoAusgleichTextArea,'visible','on');
- set(app.TuooAusgleichTextArea,'visible','on');
- set(app.OrdnungTextArea,'visible','on');
- set(app.SteigungKisoAusgleichTextArea,'visible','on');
- set(app.TauTextArea,'visible','on');
- set(app.PT1GliedliegtvorLabel,'visible','off');
- set(app.PT2GliedoderhherLabel,'visible','off');
- % Hier Fehlerhandling falls Strecke instabil oder grenzstabil ist
- if (evalin('base','Fehler') == -2)
- % Strecke instabil
- set(app.WendepunktbeitTextArea,'visible','off');
- set(app.SteigungimWendepunktTextArea,'visible','off');
- set(app.FktWertimWendepunktTextArea,'visible','off');
- set(app.VerzugszeitTuTextArea,'visible','off');
- set(app.AusgleichszeitTgTextArea,'visible','off');
- set(app.VerhaeltnisTuzuTgTextArea,'visible','off');
- set(app.ProportionalbeiwertKpsTextArea,'visible','off');
- set(app.berschwingweiteTextArea,'visible','off');
- set(app.DmpfungDTextArea,'visible','off');
- set(app.EigenkreisfrequenzweTextArea,'visible','off');
- set(app.SteigungKisoAusgleichTextArea,'visible','off');
- set(app.TuooAusgleichTextArea,'visible','off');
- set(app.SteigungKisoAusgleichTextArea,'visible','off');
- set(app.TauTextArea,'visible','off');
- set(app.ProportionalbeiwertKpsTextArea,'visible','off');
- set(app.TauTextArea,'visible','off');
- else
- if (evalin('base','Fehler') == -1)
- % Strecke Grenzstabil
- % Strecke ohne Ausgleich
- % Nicht gebrauchte Textfelder im Analysepannel unsichtbar machen
- set(app.WendepunktbeitTextArea,'visible','off');
- set(app.SteigungimWendepunktTextArea,'visible','off');
- set(app.FktWertimWendepunktTextArea,'visible','off');
- set(app.VerzugszeitTuTextArea,'visible','off');
- set(app.AusgleichszeitTgTextArea,'visible','off');
- set(app.VerhaeltnisTuzuTgTextArea,'visible','off');
- set(app.ProportionalbeiwertKpsTextArea,'visible','off');
- set(app.berschwingweiteTextArea,'visible','off');
- set(app.DmpfungDTextArea,'visible','off');
- set(app.EigenkreisfrequenzweTextArea,'visible','off');
- set(app.TauTextArea,'visible','off');
- %Zusweisungen
- app.SteigungKisoAusgleichTextArea.Value = [evalin('base','Kis'),' s'];
- app.TuooAusgleichTextArea.Value = [evalin('base','Tu_o')];
- else
- % Strecke stabil
- if evalin('base','Status')==1
- %Strecke mit Ausgleich
- set(app.SteigungKisoAusgleichTextArea,'visible','off');
- set(app.TuooAusgleichTextArea,'visible','off');
- if str2num(evalin('base','Ogs')) < 2 && evalin('base','totz')==0
- % Es liegt ein VZ1 Glied vor
- set(app.PT1GliedliegtvorLabel,'visible','on');
- % Nicht gebrauchte Textfelder im Analysepannel unsichtbar machen
- set(app.WendepunktbeitTextArea,'visible','off');
- set(app.SteigungimWendepunktTextArea,'visible','off');
- set(app.FktWertimWendepunktTextArea,'visible','off');
- set(app.VerzugszeitTuTextArea,'visible','off');
- set(app.AusgleichszeitTgTextArea,'visible','off');
- set(app.VerhaeltnisTuzuTgTextArea,'visible','off');
- set(app.DmpfungDTextArea,'visible','off');
- set(app.berschwingweiteTextArea,'visible','off');
- set(app.EigenkreisfrequenzweTextArea,'visible','off');
- set(app.RegelbarkeitTextArea,'visible','off');
- set(app.RegelbarkeitTextAreaLabel,'visible','off');
- set(app.SteigungKisoAusgleichTextArea,'visible','off');
- %Zusweisungen
- app.ProportionalbeiwertKpsTextArea.Value = evalin('base','Kps');
- app.TauTextArea.Value = [evalin('base','Tau'), 's'];
- else
- % VZ2 Glied oder höher
- set(app.TauTextArea,'visible','off');
- app.WendepunktbeitTextArea.Value = [evalin('base','Tw'),' s'];
- app.SteigungimWendepunktTextArea.Value = evalin('base','Wdydt');
- app.FktWertimWendepunktTextArea.Value = evalin('base','Yw');
- app.ProportionalbeiwertKpsTextArea.Value = evalin('base','Kps');
- app.VerzugszeitTuTextArea.Value = [evalin('base','Tu'),' s'];
- app.AusgleichszeitTgTextArea.Value = [evalin('base','Tg'),' s'];
- app.VerhaeltnisTuzuTgTextArea.Value = evalin('base','Tu_zu_Tg');
- app.DmpfungDTextArea.Value = evalin('base','D');
- app.berschwingweiteTextArea.Value = evalin('base','UeWeite');
- app.EigenkreisfrequenzweTextArea.Value = evalin('base','we');
- set(app.PT2GliedoderhherLabel,'visible','on');
- end
- set(app.RegelbarkeitTextArea,'visible','on');
- set(app.RegelbarkeitTextAreaLabel,'visible','on');
- end
- end
- %Regelbarkeit abhaengig von Tu_zu_Tg
- if (evalin('base','Fehler') ~= -1)
- r=str2double(evalin('base','Tu_zu_Tg'));
- if(r > 0.8)
- app.RegelbarkeitTextArea.Value='...Strecke nicht geeignet fuer den Einsatz empirischer Einstellungen';
- elseif(r > 0.4)
- app.RegelbarkeitTextArea.Value='...schlecht regelbar bei Verwendung empirischer Einstellregeln';
- elseif(r > 0.2)
- app.RegelbarkeitTextArea.Value='...gut regelbar bei Verwendung empirischer Einstellregeln';
- elseif(str2double(evalin('base','Ogs'))==1 & evalin('base','totz')==0)
- app.RegelbarkeitTextArea.Value='...ein PT1-Glied ist nicht regelbar bei Verwendung empirischer Einstellregeln';
- else
- app.RegelbarkeitTextArea.Value='...sehr gut regelbar bei Verwendung empirischer Einstellregeln';
- end
- end
- end
- %Bestimmung der Systemstabilitaet mit und der Polstellen
- %Aufruf der Backend-Funktion "Stabilitaet"
- PidDesigner_Mod('Stabilitaet');
- set(app.HurwitzTextArea,'visible','on');
- set(app.StabilitaetdesSystemsnachHurwitzLabel,'visible','on');
- app.HurwitzTextArea.Value =[newline,newline,evalin('base','Textbox')];
- Pgsunterschiedlich = evalin('base','Pgsunterschiedlich');
- if Pgsunterschiedlich == 1
- set(app.StreckebernehmeninDBRButton,'enable','on');
- else
- set(app.StreckebernehmeninDBRButton,'enable','off');
- end
- %////Visibility entfernt
- set(app.ReglerberechnenButton,'enable','on');
- set(app.GuetezielkriterienPanel,'visible','off');
- set(app.RegelfehlermeldungLabel,'visible','off');
- set(app.DmpfungThetaTextArea, 'visible','off');
- set(app.DmpfungThetaTextAreaLabel, 'visible','off');
- app.DmpfungThetaTextArea.Value='';
- if(evalin('base','Status')==-1)
- set(app.DigitalreglerButtonGroup,'visible','off');
- set(app.mitAusgleichButtonGroup,'visible','off');
- set(app.ohneAusgleichButtonGroup,'visible','on');
- else
- set(app.DigitalreglerButtonGroup,'visible','off');
- set(app.ohneAusgleichButtonGroup,'visible','off');
- set(app.mitAusgleichButtonGroup,'visible','on');
- end
- %Aufruf der setDummys-Funktion
- setDummys(app);
- %Aufruf der setReset-Funktion
- setReset(app);
- %Sicht- und Waehlbarmachen des Regelpanels durch Parent-Zuweisung
- app.RegelpanelTab.Parent=app.TabGroup;
- app.FrequenzkennlinienverfahrenTab.Parent=app.TabGroup;
- end
- %Funktion zum Setzen der sekundaeren Darstellungen und der Analyseergebnisse
- function setSekPlots(app)
- if(evalin('base','Digitalregler')==0 | evalin('base','lastEvent')=="FKVPanel") % Tobias Rockel
- set(app.SchnittKreisfrequenzTextArea,'visible','on');
- set(app.PhasenrandTextArea,'visible','on');
- set(app.AmplitudenrandTextArea,'visible','on');
- %Uebergabe der Bode-Parameter
- Mag=evalin('base','Mag');
- Phase=evalin('base','Phase');
- %Plotten eines logarithmischen Umfelds fuer das Bode-Diagramm
- semilogx(app.MagnitudeDiagramm_FKV, evalin('base','Wout'),Mag); % Tobias Rockel
- semilogx(app.MagnitudeDiagramm, evalin('base','Wout'),Mag);
- semilogx(app.PhaseDiagramm_FKV, evalin('base','Wout'),Phase); % Tobias Rockel
- semilogx(app.PhaseDiagramm, evalin('base','Wout'),Phase);
- app.MarginLabel_FKV.Text = ['Gm = ',num2str(evalin('base','Gm')),evalin('base','at'),' ','Pm = ',num2str(evalin('base','Pm')),' deg (at ',num2str(evalin('base','Wcp')),' rad/s)']; % Tobias Rockel
- app.MarginLabel.Text = ['Gm = ',num2str(evalin('base','Gm')),evalin('base','at'),' ','Pm = ',num2str(evalin('base','Pm')),' deg (at ',num2str(evalin('base','Wcp')),' rad/s)'];
- %Plotten der sekundaeren Darstellungen
- plot(app.GeschlossenerRegelkreisDiagramm, evalin('base','tTs'),evalin('base','yTs'));
- plot(app.GeschlossenerRegelkreisDiagramm_FKV, evalin('base','tTs'),evalin('base','yTs')); % Tobias Rockel
- plot(app.PolNullstellenDiagramm, evalin('base','pzP'),'x');
- hold(app.PolNullstellenDiagramm,'on');
- plot(app.PolNullstellenDiagramm, evalin('base','pzZ'),'o');
- hold(app.PolNullstellenDiagramm,'off');
- plot(app.OrtskurveDiagramm, evalin('base','re'), evalin('base','im'));
- hold(app.OrtskurveDiagramm, 'on');
- plot(app.OrtskurveDiagramm, evalin('base','re'), -evalin('base','im'));
- hold(app.OrtskurveDiagramm, 'off');
- %Zuweisen der Analyseergebnisse
- app.AnstiegszeitTextArea.Value=evalin('base','Tr');
- app.UeberschwingweiteTextArea.Value=evalin('base','UeWeite');
- app.AnschwingzeitTextArea.Value=evalin('base','Tan');
- app.AusregelzeitTextArea.Value=evalin('base','Teps');
- app.AmplitudenrandTextArea.Value=num2str(evalin('base','Gm'));
- app.PhasenrandTextArea.Value=num2str(evalin('base','Pm'));
- app.SchnittKreisfrequenzTextArea.Value=num2str(evalin('base','Wcp'));
- %Ausgangregler
- cla(app.Ausgang_Regler); %löschen des aktuellen Diagramms
- draw_stell_begrenz(app); %Zeichnen der Linien im Digramm
- hold(app.Ausgang_Regler,'on');
- plot(app.Ausgang_Regler, evalin('base','t_r_aus'), evalin('base','y_r_aus'));
- else
- plot(app.GeschlossenerRegelkreisDiagramm, evalin('base','tTs'),evalin('base','yTs'));
- app.AnstiegszeitTextArea.Value=evalin('base','Tr');
- app.UeberschwingweiteTextArea.Value=evalin('base','UeWeite');
- app.AnschwingzeitTextArea.Value=evalin('base','Tan');
- app.AusregelzeitTextArea.Value=evalin('base','Teps');
- %Ausgangregler
- cla(app.Ausgang_Regler); %löschen des aktuellen Diagramms
- draw_stell_begrenz(app); %Zeichnen der Linien im Digramm
- hold(app.Ausgang_Regler,'on');
- plot(app.Ausgang_Regler, evalin('base','t_r_aus'), evalin('base','y_r_aus'));
- set(app.SchnittKreisfrequenzTextArea,'visible','off');
- set(app.PhasenrandTextArea,'visible','off');
- set(app.AmplitudenrandTextArea,'visible','off');
- end %end if Digitalregler==0
- end
- %Funktion zum Ruecksetzen der sekundaeren Ausgabetabs bzw. Herstellung des Vor-Regelungs-Zustands
- function setReset(app)
- app.FuehrungspanelTab.Parent=[];
- app.BodepanelTab.Parent=[];
- app.PIDUebertragungsfunktionTextArea.Value ='';
- app.PolstellendesPIDReglersTextArea.Value='';
- app.NullstellendesPIDReglersTextArea.Value='';
- app.SchleifenfunktionTextArea.Value = '';
- app.FuehrungsfunktionTextArea.Value = '';
- app.PolstellenTsTextArea.Value = '';
- app.AnstiegszeitTextArea.Value='';
- app.UeberschwingweiteTextArea.Value='';
- app.AnschwingzeitTextArea.Value='';
- app.AusregelzeitTextArea.Value='';
- app.AmplitudenrandTextArea.Value='';
- app.PhasenrandTextArea.Value='';
- app.SchnittKreisfrequenzTextArea.Value='';
- app.DmpfungThetaTextArea.Value='';
- app.KpKnob.Limits=[0 10];
- app.TvKnob.Limits=[0 10];
- app.TnKnob.Limits=[0 10];
- app.KpEditField.Limits=[0 10];
- app.TvEditField.Limits=[0 10];
- app.TnEditField.Limits=[0 10];
- app.KpKnob.Value=0;
- app.TvKnob.Value=0;
- app.TnKnob.Value=0;
- app.KpEditField.Value=0;
- app.TvEditField.Value=0;
- app.TnEditField.Value=0;
- app.KnobEditMin.Value=0;
- app.KnobEditMax.Value=0;
- app.KnobEditDropDown.Value='Kp';
- set(app.KpKnob,'enable','off');
- set(app.TvKnob,'enable','off');
- set(app.TnKnob,'enable','off');
- set(app.KpEditField,'enable','off');
- set(app.TvEditField,'enable','off');
- set(app.TnEditField,'enable','off');
- set(app.KnobEditDropDown, 'enable','off');
- set(app.KnobEditMin, 'enable','off');
- set(app.KnobEditMax, 'enable','off');
- set(app.KnobEditButton, 'enable','off');
- set(app.LimitfehlerLabel,'visible','off');
- set(app.MinLabel,'enable','off');
- set(app.MaxLabel,'enable','off');
- app.MarginLabel.Text = '';
- cla(app.MagnitudeDiagramm);
- cla(app.PhaseDiagramm);
- cla(app.GeschlossenerRegelkreisDiagramm);
- cla(app.PolNullstellenDiagramm);
- cla(app.OrtskurveDiagramm);
- app.AbtastzeitinSekundenEditField.Value=0;
- end
- %Funktion zum funktionalen Zuruecksetzen von Buttongroups
- function setDummys(app)
- %Aktivitaetszuweisungen an funktionslose, nicht waehlbare Buttons
- app.DummyButton.Value=true;
- app.DummyButton2.Value=true;
- app.DummyButton3.Value=true;
- app.DummyButton4.Value=true;
- app.DummyButton5.Value=true;
- app.DummyButtonPID.Value=true;
- app.AnalogButton.Value=true;
- end
- %Funktion zum Aktualisieren geaenderter Werte
- function setChangedValues(app)
- %Aufrufen des Backend-cases "Regelung"
- if(app.DigitalButton.Value==true & evalin('base','lastEvent') ~= "FKVPanel") % Tobias Rockel
- % Christopher Seipt 12.05.2021
- assignin('base','Simulationszeit',str2num(app.SimulationszeitEditField.Value));
- PidDesigner_Mod('Regelung');
- PidDesigner_Mod('AnaDigital');
- set(app.FuehrungsfunktionTextArea, 'visible','off');
- set(app.PolstellenTsTextArea, 'visible','off');
- set(app.PolNullstellenDiagramm, 'visible','off');
- %set(app.Switch_stellgr,'visible','on');
- cla(app.PolNullstellenDiagramm);
- elseif(app.AnalogButton.Value==true | evalin('base','lastEvent') == "FKVPanel") % Tobias Rockel
- if(evalin("base",'lastEvent') ~= "FKVPanel") % Tobias Rockel
- PidDesigner_Mod('Regelung');%alt
- end
- if(evalin("base",'lastEvent') == "FKVPanel") % Tobias Rockel
- simOut=sim('FKV_Modell_Simulink','SimulationMode','normal');
- anlog_begrenz=simOut.get('y_z');
- anlog_begrenz_ra=simOut.get('y_r'); %Ausgang des Reglers
- t=anlog_begrenz.Time; %zeit zur Simulation
- y=anlog_begrenz.Data; %Ergbnis der Simualation/ Sprungantwort (y)
- y_r_aus=anlog_begrenz_ra.Data;
- t_r_aus=anlog_begrenz_ra.Time;
- assignin('base','yTs',y);
- assignin('base','tTs',t);
- assignin('base','y_r_aus',y_r_aus);
- assignin('base','t_r_aus',t_r_aus);
- end
- %merken des originalen Kp (für Verschiebung)
- if (evalin('base','alpha_dB')==0)
- assignin('base','or_KP',evalin('base','Kp'));
- end
- if evalin('base','stell_begrenz_anlog')==1 % Stellgrößenbegrenzung für analoge Regler
- PidDesigner_Mod('AnaDigital'); %Analyse mit AnaDigital, da Simulink benutzt wird
- assignin('base','Digitalregler',1); %soll sich genau wie bei digital Reglern verhalten (Simulink wird genutzt)
- set(app.FuehrungsfunktionTextArea, 'visible','off');
- set(app.PolstellenTsTextArea, 'visible','off');
- cla(app.PolNullstellenDiagramm);
- set(app.PolNullstellenDiagramm, 'visible','off');
- else %"analog ohne Begrenzung
- assignin('base','AnaCounter',2);
- if(evalin("base",'lastEvent') == "Reglerpanel")%neu
- assignin('base','AnaFunktion',evalin('base','Ts'));
- else%neu
- assignin('base','AnaFunktion',evalin('base','FKV_T'));%neu
- end%neu
- PidDesigner_Mod('AnaStep');
- %set(app.Switch_stellgr,'visible','off');
- set(app.FuehrungsfunktionTextArea, 'visible','on');
- set(app.PolstellenTsTextArea, 'visible','on');
- set(app.PolNullstellenDiagramm, 'visible','on');
- cla(app.PolNullstellenDiagramm);
- %Aufrufen des Backend-cases "Anastep" zur Analyse der Fuehrungsuebertragungsfunktion
- end
- %Aufrufen der lokalen "setDisp()"-Funktion
- setDisp(app);
- end
- end
- function draw_stell_begrenz(app) %Christopher Seipt
- array_grenze_oben=[evalin('base','obere_grenze_stllg')];
- array_grenze_unten=[evalin('base','untere_grenze_stllg')];
- for i = 1:(length(evalin('base','t_r_aus'))-1)
- array_grenze_oben(end+1)=evalin('base','obere_grenze_stllg');
- array_grenze_unten(end+1)=evalin('base','untere_grenze_stllg');
- end
- hold(app.Ausgang_Regler,'off');
- plot(app.Ausgang_Regler, evalin('base','t_r_aus'), evalin('base','y_r_aus'));
- hold(app.Ausgang_Regler,'on');
- plot(app.Ausgang_Regler, evalin('base','t_r_aus'), array_grenze_oben);
- plot(app.Ausgang_Regler, evalin('base','t_r_aus'), array_grenze_unten);
- end
- end
- % Callbacks that handle component events
- methods (Access = private)
- % Code that executes after component creation
- function startupFcn(app)
- %Funktion zur Ausfuehrung bei Erstellung des Applikationsfensters
- %Aufhebung der Parent-Child-Bindung von ausgewaehlten Tabs zum
- %"unsichtbar" und "unwaehlbar" machen
- app.RegelpanelTab.Parent=[];
- app.FrequenzkennlinienverfahrenTab.Parent=[];
- app.FuehrungspanelTab.Parent=[];
- app.BodepanelTab.Parent=[];
- set(app.DateinichtvorhandenLabel,'visible','off');
- end
- % Callback function: EditField, ErstellenButton
- function ErstellenButtonPushed(app, event)
- %Funktion wird nach dem Druecken des Erstellen-Buttons im Streckenpanel ausgeloest
- clearvars Standinvar;
- clearvars Standinvar2;
- %Darstellung der Streckenuebergangsfunktion
- set(app.StreckeneingabeFehlerTextArea,'visible','off');
- %Uebergabe der Koeffizienteneingabefelder
- assignin('base','zKoef',app.KoeffizientdesZaehlersEditField.Value);
- assignin('base','nKoef',app.EditField.Value);
- assignin('base','ModEingabeS',app.KoeffizientenButton.Value);
- if 0.05<=str2num(app.TotzeitEditField.Value) %Totzeit min 0,05 sonst 0
- assignin('base','totz',str2num(app.TotzeitEditField.Value));
- set(app.Totzeitwirdauf0gesetztLabel,'visible','off');
- else
- assignin('base','totz',0);
- app.TotzeitEditField.Value
- set(app.Totzeitwirdauf0gesetztLabel,'visible','on');
- app.TotzeitEditField.Value='0';
- end % if 0>=str2num(app.TotzeitEditField.Value)
- %Aufrufen der Backend-Funktion "GetGs"
- Koeffizientenmatrix=str2num(app.EditField.Value);
- PTntypkoefanzahl=numel(Koeffizientenmatrix);
- assignin('base','PTntypkoefanzahl',PTntypkoefanzahl);
- PidDesigner_Mod('GetGs');
- Koefn=str2num(app.EditField.Value);
- Koefz=str2num(app.KoeffizientdesZaehlersEditField.Value);
- assignin('base','Koefz',Koefz);
- assignin('base','Koefn',Koefn);
- %Eingabenfehlerhandling
- if (evalin('base','Fehler') == -1)
- %Fehlerzweig
- app.RegelpanelTab.Parent=[];
- app.FrequenzkennlinienverfahrenTab.Parent=[];
- set(app.StreckeneingabeFehlerTextArea,'visible','on');
- app.StreckeneingabeFehlerTextArea.Value ='Streckeneingabe fehlerhaft bitte korrigeren';
- app.OrdnungTextArea.Value = '';
- app.WendepunktbeitTextArea.Value = '';
- app.SteigungimWendepunktTextArea.Value = '';
- app.FktWertimWendepunktTextArea.Value = '';
- app.ProportionalbeiwertKpsTextArea.Value = '';
- app.SteigungKisoAusgleichTextArea.Value='';
- app.VerzugszeitTuTextArea.Value = '';
- app.AusgleichszeitTgTextArea.Value = '';
- app.VerhaeltnisTuzuTgTextArea.Value = '';
- app.DmpfungDTextArea.Value ='';
- app.berschwingweiteTextArea.Value ='';
- app.EigenkreisfrequenzweTextArea.Value='';
- app.StreckenuebertragungsfunktionTextArea.Value ='';
- app.HurwitzTextArea.Value ='';
- app.RegelbarkeitTextArea.Value='';
- cla(app.UebergangsfunktionDiagramm);
- set(app.ReglerberechnenButton,'enable','off');
- set(app.RegelfehlermeldungLabel,'visible','off');
- set(app.DmpfungThetaTextArea, 'visible','off');
- set(app.DmpfungThetaTextAreaLabel, 'visible','off');
- set(app.GuetezielkriterienPanel,'visible','off');
- set(app.mitAusgleichButtonGroup,'visible','off');
- set(app.ohneAusgleichButtonGroup,'visible','off');
- app.DmpfungThetaTextArea.Value='';
- %Aufruf der setDummys-Funktion
- setDummys(app);
- %Aufruf der setReset-Funktion
- setReset(app);
- else
- %Ausfuehrungszweig
- %Darstellung der Uebergangsfunktion
- app.StreckenuebertragungsfunktionTextArea.Value = evalin('base','GsDisp');
- plot(app.UebergangsfunktionDiagramm,evalin('base','t'),evalin('base','y'));
- assignin('base','stellgr_beschk',0) % deaktiviert die Stellengrößenbeschränkung zu Beginn
- %default Werte Stellgrößenbegrenzung
- assignin('base','obere_grenze_stllg',5)
- assignin('base','untere_grenze_stllg',0)
- %Analyse der Strecke
- strecken_analyse(app, evalin('base','Gs'));
- set(app.reduzierteFunktionLabel, 'visible','off');
- set(app.orginalFunktionLabel,'visible','on');
- end
- end
- % Button pushed function: ReglerberechnenButton
- function ReglerberechnenButtonPushed(app, event)
- %Funktion wird nach dem Druecken des Regeln-Buttons im Regelpanel ausgeloest
- assignin("base",'lastEvent', "Reglerpanel");
- app.Lamp_FKV.Color='r';
- ReglerStatus = 1;
- set(app.RegelfehlermeldungLabel,'visible','off');
- set(app.PIDUebertragungsfunktionTextArea, 'visible','on');
- set(app.NullstellendesPIDReglersTextArea, 'visible','on');
- set(app.PolstellendesPIDReglersTextArea, 'visible','on');
- %Auswahl des Reglertyps ueber die Reglertyp-Buttongroup
- if (app.PButton.Value == true)
- Reglertyp='P';
- assignin('base','Reglertyp',Reglertyp);
- elseif (app.PDButton.Value == true)
- Reglertyp='PD';
- assignin('base','Reglertyp',Reglertyp);
- elseif (app.PIButton.Value == true)
- Reglertyp='PI';
- assignin('base','Reglertyp',Reglertyp);
- elseif (app.PIDButton.Value == true)
- Reglertyp='PID';
- assignin('base','Reglertyp',Reglertyp);
- else
- ReglerStatus=-1;
- end
- %Auswahl der Regelparameter und ButtonGroup Handling
- if(app.AnalogButton.Value==true)
- assignin('base','Digitalregler',0)
- if (evalin('base','Status')==1)%o.Ausgleich
- app.DummyButton3.Value = true;
- app.DummyButtonPID.Value=true;
- if (app.ZieglerNicholsButton.Value == true)
- RegelParameter='Ziegler-Nichols';
- assignin('base','RegelParameter',RegelParameter);
- elseif (app.CHRButtonmA.Value == true)
- RegelParameter='CHRmA';
- assignin('base','RegelParameter',RegelParameter);
- else
- ReglerStatus=-1;
- end
- else
- app.DummyButton.Value = true;
- app.DummyButtonPID.Value=true;
- if (app.DrFiegerButton.Value == true)
- RegelParameter='DrFieger';
- assignin('base','RegelParameter',RegelParameter);
- elseif (app.CHRButtonoA.Value == true)
- RegelParameter='CHRoA';
- assignin('base','RegelParameter',RegelParameter);
- else
- ReglerStatus=-1;
- end
- end
- else %Digital
- assignin('base','Digitalregler',1)
- %Sichtbarkeit entfernen
- set(app.PIDUebertragungsfunktionTextArea, 'visible','off');
- set(app.NullstellendesPIDReglersTextArea, 'visible','off');
- set(app.PolstellendesPIDReglersTextArea, 'visible','off');
- app.DummyButton.Value = true;
- app.DummyButton3.Value = true;
- if(app.TCAButton.Value == true)
- RegelParameter='TCA';
- assignin('base','RegelParameter',RegelParameter);
- assignin('base','Tab',app.AbtastzeitinSekundenEditField.Value);
- Standinvar='0';
- assignin("base","Standinvar",Standinvar);
- app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
- elseif(app.TakahashiPIDButton.Value == true)
- RegelParameter='TakahashiPid'; %TakahashiPid falsch geschrieben Pid war PID
- assignin('base','RegelParameter',RegelParameter);
- assignin('base','Tab',app.AbtastzeitinSekundenEditField.Value);
- Standinvar='0';
- assignin("base","Standinvar",Standinvar);
- app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
- else
- ReglerStatus=-1;
- end
- end
- %Auswahl der Guetekriterien fuer CHR ueber die entsprechenden Buttongroups
- if ((app.CHRButtonmA.Value || app.CHRButtonoA.Value) == true)
- if (app.AperiodischButton.Value == true)
- Parameter='Aperiodisch';
- assignin('base','Parameter',Parameter);
- elseif (app.ueberschwingButton.Value == true)
- Parameter='Ueberschwingen';
- assignin('base','Parameter',Parameter);
- else
- ReglerStatus=-1;
- end
- if(app.StoerverhaltenButton.Value == true)
- Verhalten='Stoerverhalten';
- assignin('base','Verhalten',Verhalten);
- elseif(app.FuehrungsverhaltenButton.Value == true)
- Verhalten='Fuehrungsverhalten';
- assignin('base','Verhalten',Verhalten);
- else
- ReglerStatus=-1;
- end
- end
- %Eingabefeld fuer die Daempfung Theta und das dazugehoerige Inputhandling
- if (app.DrFiegerButton.Value == true && app.PButton.Value == true)
- Theta = app.DmpfungThetaTextArea.Value;
- ThetaStr = char(Theta);
- ThetaIn = ThetaStr(~isspace(ThetaStr));
- LengthTheta = length(ThetaIn);
- ThetaCount= ~(all(isstrprop(ThetaIn,'digit'),2));
- if LengthTheta == 0 | ThetaIn == '0' %Änderung Christopher Seipt 24.04.2021 % ThetaCount aus der IF Abfrage entfernt --> Eingabefeld funktioniert
- ReglerStatus=-1;
- else
- assignin('base','Theta',ThetaIn);
- end
- end
- %Verarbeitung der gewaehlten Parameter
- if (ReglerStatus == -1)
- %Fehlerzweig
- set(app.RegelfehlermeldungLabel,'visible','on');
- %Aufrufen der setReset-Funktion
- setReset(app);
- else
- %Ausfuehren jeglicher Funktionen zum Setzen sekundaerer Darstellungen
- %und Aktivieren aller Objekte mit berechneten Parametern
- set(app.KpKnob,'enable','on');
- set(app.TvKnob,'enable','on');
- set(app.TnKnob,'enable','on');
- set(app.KpEditField,'enable','on');
- set(app.TvEditField,'enable','on');
- set(app.TnEditField,'enable','on');
- set(app.KnobEditDropDown, 'enable','on');
- set(app.KnobEditMin, 'enable','on');
- set(app.KnobEditMax, 'enable','on');
- set(app.KnobEditButton, 'enable','on');
- set(app.MinLabel, 'enable','on');
- set(app.MaxLabel, 'enable','on');
- set(app.LimitfehlerLabel, 'visible','off');
- PidDesigner_Mod(evalin('base','RegelParameter'));
- %Aufrufen der setChangedValues-Funktion
- setChangedValues(app);
- %Aufrufen der Backend-Funktion "KnobLimits"
- PidDesigner_Mod('KnobLimits');
- app.KpKnob.Limits = evalin('base','KpLimit');
- app.TvKnob.Limits = evalin('base','TvLimit');
- app.TnKnob.Limits = evalin('base','TnLimit');
- app.KpEditField.Limits = evalin('base','KpLimit');
- app.TvEditField.Limits = evalin('base','TvLimit');
- app.TnEditField.Limits = evalin('base','TnLimit');
- app.KnobEditMin.Value=0;
- app.KnobEditMax.Value=0;
- app.KnobEditDropDown.Value='Kp';
- app.KpKnob.Value = evalin('base','Kp');
- app.TvKnob.Value = evalin('base','Tv');
- app.TnKnob.Value = evalin('base','Tn');
- app.KpEditField.Value = evalin('base','Kp');
- app.TvEditField.Value = evalin('base','Tv');
- app.TnEditField.Value = evalin('base','Tn');
- %Aufrufen der setSekPlots-Funktion
- setSekPlots(app);
- %Sicht- und Waehlbarmachen des Fuehrungs- und des Bodepanels durch Parent-Zuweisung
- app.FuehrungspanelTab.Parent=app.TabGroup;
- if(app.AnalogButton.Value==true)
- app.BodepanelTab.Parent=app.TabGroup;
- else
- app.BodepanelTab.Parent=[];
- end
- end
- end
- % Selection changed function: mitAusgleichButtonGroup
- function mitAusgleichButtonGroupSelectionChanged(app, event)
- %Funktion zum Buttongrouphandling fuer Strecken mit Ausgleich
- selectedButton = app.mitAusgleichButtonGroup.SelectedObject;
- if (selectedButton == app.CHRButtonmA)
- %CHR mit Ausgleich-Steuerung
- set(app.GuetezielkriterienPanel,'visible','on');
- set(app.PDButton,'enable','off');
- %Setzen des Dummybuttons
- if (app.PDButton.Value == true)
- app.DummyButton2.Value = true;
- end
- elseif(selectedButton ~= app.CHRButtonmA)
- %Ruecksetzen
- set(app.GuetezielkriterienPanel,'visible','off');
- set(app.PDButton,'enable','on');
- elseif(app.DigitalButton.Value == 1)
- %Ruecksetzen
- set(app.GuetezielkriterienPanel,'visible','off');
- set(app.PDButton,'enable','on');
- end
- end
- % Selection changed function: ohneAusgleichButtonGroup
- function ohneAusgleichButtonGroupSelectionChanged(app, event)
- %Funktion zum Buttongrouphandling fuer Strecken ohne Ausgleich
- selectedButton = app.ohneAusgleichButtonGroup.SelectedObject;
- if (selectedButton == app.CHRButtonoA)
- %CHR ohne Ausgleich-Steuerung
- set(app.GuetezielkriterienPanel,'visible','on');
- set(app.PDButton,'enable','off');
- if (app.PDButton.Value == true)
- %Setzen des Dummybuttons
- app.DummyButton2.Value = true;
- end
- else
- %Ruecksetzen
- set(app.GuetezielkriterienPanel,'visible','off');
- set(app.PDButton,'enable','on');
- end
- if (selectedButton == app.DrFiegerButton && app.PButton.Value == true)
- %DrFieger-Steurung
- set(app.DmpfungThetaTextArea,'visible','on');
- set(app.DmpfungThetaTextAreaLabel,'visible','on');
- else
- %Ruecksetzen
- set(app.DmpfungThetaTextArea,'visible','off');
- set(app.DmpfungThetaTextAreaLabel,'visible','off');
- app.DmpfungThetaTextArea.Value='';
- end
- end
- % Selection changed function: ReglertypButtonGroup
- function ReglertypButtonGroupSelectionChanged(app, event)
- %Funktion zur Steuerung durch die Aenderung der Reglertypwahl
- selectedButton = app.ReglertypButtonGroup.SelectedObject;
- if (selectedButton == app.PButton && app.DrFiegerButton.Value == true)
- %Daempfung aktivieren
- set(app.DmpfungThetaTextArea,'visible','on');
- set(app.DmpfungThetaTextAreaLabel,'visible','on');
- else
- %Ruecksetzen
- set(app.DmpfungThetaTextArea,'visible','off');
- set(app.DmpfungThetaTextAreaLabel,'visible','off');
- app.DmpfungThetaTextArea.Value='';
- end
- end
- % Value changing function: KpKnob
- function KpKnobValueChanging(app, event)
- %Funktion zur Echtzeit-Aktualisierung der Funktionswerte durch den Drehknauf Kp
- changingValue = event.Value;
- app.KpEditField.Value = changingValue;
- assignin('base','Kp',changingValue);
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- end
- % Value changing function: TvKnob
- function TvKnobValueChanging(app, event)
- %Funktion zur Echtzeit-Aktualisierung der Funktionswerte durch den Drehknauf Tv
- changingValue = event.Value;
- app.TvEditField.Value = changingValue;
- assignin('base','Tv',changingValue);
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- end
- % Value changing function: TnKnob
- function TnKnobValueChanging(app, event)
- %Funktion zur Echtzeit-Aktualisierung der Funktionswerte durch den Drehknauf Tn
- changingValue = event.Value;
- app.TnEditField.Value = changingValue;
- assignin('base','Tn',changingValue);
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- end
- % Value changed function: KpEditField
- function KpEditFieldValueChanged(app, event)
- %Funktion zur Aenderung des Kp-Parameters ueber ein Editfield
- value = app.KpEditField.Value;
- app.KpKnob.Value=value;
- assignin('base','Kp',value);
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- setSekPlots(app);
- end
- % Value changed function: TvEditField
- function TvEditFieldValueChanged(app, event)
- %Funktion zur Aenderung des Tv-Parameters ueber ein Editfield
- value = app.TvEditField.Value;
- app.TvKnob.Value=value;
- assignin('base','Tv',value);
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- setSekPlots(app);
- end
- % Value changed function: TnEditField
- function TnEditFieldValueChanged(app, event)
- %Funktion zur Aenderung des Tn-Parameters ueber ein Editfield
- value = app.TnEditField.Value;
- app.TnKnob.Value=value;
- assignin('base','Tn',value);
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- setSekPlots(app);
- end
- % Value changed function: KpKnob
- function KpKnobValueChanged(app, event)
- %Aktualisierung der sekundaeren Plots am Ende der Drehknauflaufzeit Kp
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- if(app.DigitalButton.Value==true)
- Standinvar='1';
- assignin("base","Standinvar",Standinvar);
- set(app.GuetezielkriterienPanel,'visible','off');
- app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
- %ModellsimulierendummyfunktionValueChanged(app); %Änderung Christopher Seipt 26.05.2021 simulieren funktion werden nicht benutzt
- setSekPlots(app);%Änderung Christopher Seipt 26.05.2021
- elseif(app.AnalogButton.Value==true)
- setSekPlots(app);
- end
- end
- % Value changed function: TvKnob
- function TvKnobValueChanged(app, event)
- %Aktualisierung der sekundaeren Plots am Ende der Drehknauflaufzeit Tv
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- if(app.DigitalButton.Value==true)
- Standinvar='1';
- assignin("base","Standinvar",Standinvar);
- app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
- %ModellsimulierendummyfunktionValueChanged(app);
- setSekPlots(app); %anstatt ModellsimulierendummyfunktionValueChanged(app) Christopher Seipt 26.05.2021
- elseif(app.AnalogButton.Value==true)
- setSekPlots(app);
- end
- end
- % Value changed function: TnKnob
- function TnKnobValueChanged(app, event)
- %Aktualisierung der sekundaeren Plots am Ende der Drehknauflaufzeit Tn
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- if(app.DigitalButton.Value==true)
- %if(app.TakahashiPIDButton.Value==true)
- Standinvar='1';
- assignin("base","Standinvar",Standinvar);
- app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
- %ModellsimulierendummyfunktionValueChanged(app);
- setSekPlots(app); %anstatt ModellsimulierendummyfunktionValueChanged(app) Christopher Seipt 26.05.2021
- % elseif(app.TakahashiPIDButton.Value==true) %Auskommentiert Christopher Seipt 26.05.2021
- % Standinvar='1';
- % assignin("base","Standinvar",Standinvar);
- % app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
- % ModellsimulierendummyfunktionValueChanged(app);
- % end
- elseif(app.AnalogButton.Value==true)
- setSekPlots(app);
- end
- end
- % Button pushed function: KnobEditButton
- function KnobEditButtonPushed(app, event)
- %Funktion zur manuellen Aenderung der Drehknaufgrenzen
- set(app.LimitfehlerLabel,'visible','off');
- selectedParameter = app.KnobEditDropDown.Value;
- KnobMin = app.KnobEditMin.Value;
- KnobMax = app.KnobEditMax.Value;
- %Uebergabe und Fehlerhandling der Drehknaufgrenzen
- KnobLimits=[KnobMin KnobMax];
- if((selectedParameter == 'Kp') & (KnobMin<evalin('base','Kp')) & (evalin('base','Kp')<KnobMax))
- app.KpKnob.Limits = KnobLimits;
- app.KpEditField.Limits = KnobLimits;
- elseif((selectedParameter == 'Tv') & (KnobMin<evalin('base','Tv')) & (evalin('base','Tv')<KnobMax))
- app.TvKnob.Limits = KnobLimits;
- app.TvEditField.Limits = KnobLimits;
- elseif((selectedParameter == 'Tn') & (KnobMin<evalin('base','Tn')) & (evalin('base','Tn')<KnobMax))
- app.TnKnob.Limits = KnobLimits;
- app.TnEditField.Limits = KnobLimits;
- else
- set(app.LimitfehlerLabel,'visible','on');
- end
- end
- % Button pushed function: MesswertgraphErzeugenButton
- function MesswertgraphErzeugenButtonPushed(app, event)
- set(app.DateinichtvorhandenLabel,'visible','off'); %Deaktviert das Label Christopher Seipt 05.06.2021
- %AufgMesswerte = readmatrix(app.DateinameinklEndungEditField.Value,"Range",Bereich);
- try %verhindert Probleme bei falschen Dateinamen; Christopher Seipt 05.06.2021
- AufgMesswerte=xlsread(app.DateinameinklEndungEditField.Value)
- app.TextausrichtungSwitch.Value
- if(app.TextausrichtungSwitch.Value=="Zeilenweise")
- AufgMesswerte=AufgMesswerte';
- else
- AufgMesswerte=AufgMesswerte;
- end
- plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
- assignin('base','AufgMesswerte',AufgMesswerte);
- catch
- set(app.DateinichtvorhandenLabel,'visible','on');%aktviert das Label Christopher Seipt 05.06.2021 (fehlerhafter Dateinmane)
- end
- end
- % Button pushed function: UebertragungsfunktionerzeugenButton
- function UebertragungsfunktionerzeugenButtonPushed(app, event)
- clearvars AufgMesswerte;
- AufgMesswerte=evalin('base','AufgMesswerte');
- [Maxf,Indx] = max(AufgMesswerte)
- ji= Indx(:,2)
- AnzahlelemAufgMes=numel(AufgMesswerte(:,2));
- h=0;
- for ji=ji:+1:AnzahlelemAufgMes
- A(1+h,:)= AufgMesswerte(ji,:);
- h= h+1;
- end
- disp(A)
- %A ist nun die gekürzte Matrix
- Amax=Maxf(:,2)
- Amin1= A(:,2)
- Amin2= min(Amin1)
- Endwert= AufgMesswerte(AnzahlelemAufgMes,2)
- Endzeitpunkt= AufgMesswerte(AnzahlelemAufgMes,1)
- WPvalue=Endwert/2
- wptest=AufgMesswerte(:,2);
- [Minwpabs,Indexwp]= min(abs(wptest-WPvalue));
- Aind = AufgMesswerte(:,1);
- WPzeitpunkt = Aind(Indexwp)
- %Anstieg im WPunkt
- WPt25=Endwert/4;
- wptest=AufgMesswerte(:,2);
- [Minwpabs1,Indexwp1]= min(abs(wptest-WPt25));
- Aind1 = AufgMesswerte(:,1);
- WPt25zeitpunkt = Aind1(Indexwp1);
- WPt75=Endwert*3/4;
- wptest=AufgMesswerte(:,2);
- [Minwpabs2,Indexwp2]= min(abs(wptest-WPt75));
- Aind2 = AufgMesswerte(:,1);
- WPt75zeitpunkt = Aind2(Indexwp2);
- Anstiegzeitpunkt=WPt75zeitpunkt-WPt25zeitpunkt;
- Anstiegy=WPt75-WPt25;
- Anstieg=Anstiegy/Anstiegzeitpunkt
- ntang=Anstiegy-(Anstieg*Anstiegzeitpunkt)
- %Tangentewp=Anstieg*x+ntang ==y=m*x+n
- %Schnittpunkt mit y=0
- xnulp=-(ntang/Anstieg)
- %Schnittpunkt mit y=Endwert
- xendp=(Endwert-ntang)/Anstieg %y=m*x+n--> -n-->y-n=m*x--> (y-n)/m=x
- Tg1=xendp-xnulp
- Tu1=0+WPzeitpunkt
- Ueberschwingendiff= Amax-Endwert;
- Ueberschwingen= (Ueberschwingendiff*100)/Endwert
- %Ü testen alles berechnen für richtiges Zeichnen
- if(app.PT1Button.Value==true)
- ft=fittype('Endwert*(1-exp(-x/T))');
- fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0]);
- Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);
- x=AufgMesswerte(:,1);
- y=feval(Geglaettet,x);
- plot(app.Messwerte,x,y);
- hold(app.Messwerte,'on');
- plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
- hold(app.Messwerte,'off');
- elseif(app.PT2Button.Value==true)
- DPT2=1/(sqrt(1+( (pi.^2)/(log((Amax/Amin2).^2)) )))
- AufgMesswerte=evalin('base','AufgMesswerte');
- T2=Tg1 %(T75-T25)/(TParamX*(1+1/TParamP)) ;
- T1=Tu1
- Kps=Endwert;
- Kpstest=Kps;
- assignin('base','Kpstest',Kpstest);
- Omegae=pi/Amax %omegae=Omegad
- Omegan=Omegae/(sqrt(1-DPT2)) %omegan=Omeganull
- p1= (-1*DPT2*Omegan)+(Omegan*sqrt((DPT2^2)-1));
- p2= (-1*DPT2*Omegan)-(Omegan*sqrt((DPT2^2)-1));
- Tgross=1/Omegan
- assignin('base','Tgross',Tgross);
- assignin('base','Omegan',Omegan);
- %MyErr="bitte erneut versuchen oder die Exceltabelle berichtigen"
- count = 0;
- err_count = 0;
- while count ==err_count
- try
- ft=fittype('Endwert*((1-T1/(T1-T2)*exp(-x/T1)+T2/(T1-T2)*exp(-x/T2)))');
- fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0,0]);
- Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);
- x=AufgMesswerte(:,1);
- y=feval(Geglaettet,x);
- plot(app.Messwerte,x,y);
- hold(app.Messwerte,'on');
- plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
- hold(app.Messwerte,'off');
- catch MyErr
- err_count=err_count +1;
- end
- count=count+1;
- end
- % ft=fittype('Endwert*((1-T1/(T1-T2)*exp(-x/T1)+T2/(T1-T2)*exp(-x/T2)))');
- % fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0,0]);
- % Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);%komischer error der mit Exceltabelle zusammenhängt
- % x=AufgMesswerte(:,1);
- % y=feval(Geglaettet,x);
- % hold(app.Messwerte,'on');
- % plot(app.Messwerte,x,y);
- % hold(app.Messwerte,'off');
- %weiter unten Tu ung Tg fürs zeichnen
- elseif(app.PT2mitUeberschwingenButton.Value==true)
- DPT2=1/(sqrt(1+( (pi.^2)/(log((Amax/Amin2).^2)) )))
- AufgMesswerte=evalin('base','AufgMesswerte');
- T2=Tg1 %(T75-T25)/(TParamX*(1+1/TParamP)) ;
- T1=Tu1
- Kps=Endwert;
- Kpstest=Kps;
- assignin('base','Kpstest',Kpstest);
- %Omeganull=wurzel1/T^2
- Omegae=pi/Amax %omegae=Omegad
- Omegan=Omegae/(sqrt(1-DPT2)) %omegan=Omeganull
- p1= (-1*DPT2*Omegan)+(Omegan*sqrt((DPT2^2)-1));
- p2= (-1*DPT2*Omegan)-(Omegan*sqrt((DPT2^2)-1));
- Tgross=1/Omegan
- assignin('base','Tgross',Tgross);
- count = 0;
- err_count = 0;
- while count ==err_count
- try
- %pi
- %ft=fittype('Endwert*(1+1/sqrt(1-D^2)*exp(-D/T*x)*cos(sqrt(1-D^2)/T*x-3.14159265359-atan(-D/sqrt(1-D^2))))');
- dd=0.1;
- Pshift=atan(sqrt(1-dd)/dd);
- ft=fittype('Endwert*(1+exp(-dd*x/T)*sin(sqrt(1-dd^2)*x/T-Pshift)/sqrt(1-dd^2))')
- fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0,0]);
- Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);
- x=AufgMesswerte(:,1);
- y=feval(Geglaettet,x);
- plot(app.Messwerte,x,y);
- hold(app.Messwerte,'on');
- plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
- hold(app.Messwerte,'off');
- catch MyErr
- err_count=err_count +1;
- end
- count=count+1;
- end
- Uebtragfktoben= [Kps*(Omegan^2)]
- Uebtragfktunten= [1 2*DPT2*Omegan Omegan^2]
- %zeichnet tatsächlich
- assignin('base','Omegan',Omegan);
- %Ki1= 0.27/Kps*(Tgross*Tg1)/((Tu1+0.5*Tgross)^2)
- %assignin('base','Ki',Ki1);
- else
- end
- assignin('base','Geglaettet',Geglaettet);
- fitobject=Geglaettet;
- cvalues = coeffvalues(fitobject) %werte der unteren Koef komische werte
- cnames = coeffnames(fitobject) %Koeffizienten Namen
- output = formula(fitobject) %string der formel
- %Startwert:step:endwert
- for ii=1:1:numel(cvalues)%3 Koef
- cname = cnames{ii};%Name des 1.,2.,3.Koef
- cvalue = num2str(round(cvalues(ii),3));%runde Koefwertnr:1,auf drei stellen nach komma-->string in cvalue gespeichert
- output = strrep(output, cname , cvalue)%stringreplace ersetzt in output Koeffizientennamen in formel durch koef wert
- Params{ii}=cvalue %Params wird nacheinander mit den string für den jeweiligen wert gefüllt
- end
- app.bergangsfunktionTextArea.Value=output;
- if(app.PT1Button.Value==true)
- app.KoeffizientdesZaehlersEditField.Value=Params{1}; %='1' geändert zu Params{1} --> Kps
- app.EditField.Value=[Params{2},' 1'];%[Params{1},' 1'] geändert zu Params{2} --> Tau,' 1'
- %Feheler Behoben Christopher Seipt 27.05.2021
- IstPT1=true;
- elseif(app.PT2Button.Value==true)
- % Zeit-Prozent-Kennwertverfahren
- % for ii=1:1:1000 %Auskommentiert Christopher Seipt 31.05.2021
- % i=ii*y(end)/1000;
- % T=feval(Geglaettet,i);
- % if(T<0.25)
- % T25=i ;
- % end
- % if(T<0.75)
- % T75=i ;
- % end
- % end
- %Bestimmung der Zeitkonstanten T25 und T75
- i=1;
- t=AufgMesswerte(:,1);
- y=feval(Geglaettet,t);
- %T25
- while y(i)<y(length(y))*0.25
- i=i+1;
- end %end while T25
- T25=t(i);
- %T75
- a=i
- while y(a)<y(length(y))*0.75
- a=a+1;
- end
- T75=t(a);
- TParamR=T25/T75 ;
- TParamP=(-18.56075*TParamR)+0.57311/(TParamR-0.20747)+4.16423 ;
- TParamX=14.2797*TParamR^3-9.3891*TParamR^2+0.25437*TParamR+1.32148 ;
- T2=(T75-T25)/(TParamX*(1+1/TParamP)) ;%Tg1
- T1=T2/TParamP ;%Tu1
- KoeffQuad=T1*T2 ;
- KoeffLin=T1+T2 ;
- Kps1=Kps;
- assignin('base','Kps1',Kps1);
- app.KoeffizientdesZaehlersEditField.Value=num2str(Kps);
- app.EditField.Value=[num2str(KoeffQuad),' ',num2str(KoeffLin),' 1'];
- elseif(app.PT2mitUeberschwingenButton.Value==true)
- %Zeit-Prozent-Kennwertverfahren
- % for ii=1:1:1000
- % i=ii*y(end)/1000;
- % T=feval(Geglaettet,i);
- % if(T<0.25)
- % T25=i ;
- % end %if (T<0.25)
- % if(T<0.75)
- % T75=i ;
- % end % if(T<0.75)
- % end %for ii ....
- % TParamR=T25/T75 ;
- % TParamP=(-18.56075*TParamR)+0.57311/(TParamR-0.20747)+4.16423 ;
- % TParamX=14.2797*TParamR^3-9.3891*TParamR^2+0.25437*TParamR+1.32148 ;
- % T2=(T75-T25)/(TParamX*(1+1/TParamP)) ; %Tg1
- % T1=T2/TParamP ; %Tu1
- % KoeffQuad=T1*T2 ; %checken ob richtig
- % KoeffLin=T1+T2 ; %checken ob richtig
- % Kps1=Kps;
- % assignin('base','Kps1',Kps1);
- % app.KoeffizientdesZaehlersEditField.Value= num2str(Uebtragfktoben) ;
- % app.EditField.Value=num2str(Uebtragfktunten);
- %Änderung Christopher Seipt
- %Bestimmung der Koeffzieten aus dem Amplitudenverhältnis der ersten zwei Halbwellen (https://de.wikipedia.org/wiki/PT2-Glied#Bestimmung_der_%C3%9Cbertragungsfunktion_eines_%7F'%22%60UNIQ--postMath-00000048-QINU%60%22'%7F-Gliedes_aus_einer_gegebenen_graphischen_Darstellung_der_Sprungantwort)
- %Vorgehen: [-0. Bestimmung der Amplitude HW 1 (A1) und HW 2 (A2)- nicht mehr gebruacht -]
- % 1. Bestimmung der Dämpfung mit Werten der Überschwingweite
- % 2. Bestimmung der Periodendauer für 3.
- % 3. Bestimmung des Koeffizient T
- % 4. Aufstellen und Übertragen der Funktion
- % %1.
- t=AufgMesswerte(:,1);
- y=feval(Geglaettet,t);
- % %A1
- % [y_A1,i_A1]=max(y);
- % %A2
- % y_2 =y(i_A1:length(y)); %Liste ab A1
- % [y_A2, i_A2]=min(y_2);
- % i_A2=i_A2+i_A1;
- %1. Dämpfung (Formelen Foliensatz F. 87)
- %D=(1/(sqrt(1+pi^2/(log(y_A1/y_A2))^2)));
- UeWeite= (max(y)-y(length(y)))/y(length(y)); %Bestimmung der Überschwingweite
- D = log(1/UeWeite)/sqrt((log(1/UeWeite))^2 +pi^2); %Bestimmung der Dämpfung
- %2. Periodendauer Formelen Foliensatz F. 87)
- [y_A1,i_A1]=max(y);
- T_0=2*(x(i_A1))
- %T_0=3.1656
- %3. T
- T=T_0*sqrt(1-D^2)/(2*pi);
- %4.
- app.KoeffizientdesZaehlersEditField.Value=num2str(y(length(y))); %Kps , Zähler
- app.EditField.Value=[num2str(T^2),' ',num2str(2*D*T),' 1']; %Nenner
- %zum Debuggen
- assignin('base','y_A1',y_A1);
- %assignin('base','y_A2',y_A2);
- %assignin('base','y_2',y_2);
- assignin('base','i_A1',i_A1);
- assignin('base','t_A1',x(i_A1));
- %assignin('base','i_A2',i_A2);
- %assignin('base','t_A2',x(i_A2));
- assignin('base','x_test',x);
- assignin('base','y_test',y);
- assignin('base','De',D);
- assignin('base','T_q',T);
- assignin('base','Perioded',T_0);
- %Ende der Änderung
- end %elseif (app.PT2mitUeberschwingenButton.Value==true)
- Tg1
- Tu1
- assignin('base','Tg1',Tg1);
- assignin('base','Tu1',Tu1);
- end
- % Selection changed function: ReglerartButtonGroup
- function ReglerartButtonGroupSelectionChanged(app, event)
- if(app.AnalogButton.Value==true)
- set(app.PButton,'enable','on');
- set(app.PIButton,'enable','on');
- set(app.PDButton,'enable','on');
- set(app.PIDButton,'enable','on');
- set(app.ReglerberechnenButton,'enable','on');
- set(app.SimulationszeitEditField,'visible','off');
- set(app.AbtastzeitinSekundenEditField,'visible','off')
- set(app.AbtastzeitinSekLabel,'visible','off')
- app.AbtastzeitinSekundenEditField.Value = 0 ;
- % Visibilityhandling und Herstellen der Ausgangszustaende ´
- %Bestimmung der anzuzeigenden Buttongroups
- if(evalin('base','Status')==-1)
- set(app.DigitaleReglungButtonGroup,'visible','off');
- set(app.mitAusgleichButtonGroup,'visible','off');
- set(app.ohneAusgleichButtonGroup,'visible','on');
- else
- set(app.DigitalreglerButtonGroup,'visible','off');
- set(app.ohneAusgleichButtonGroup,'visible','off');
- set(app.mitAusgleichButtonGroup,'visible','on');
- end
- elseif(app.DigitalButton.Value==true)
- set(app.GuetezielkriterienPanel,'visible','off');
- set(app.PButton,'enable','on'); %Christopher Seipt 21.05.2021 off --> on
- set(app.SimulationszeitEditField,'visible','on');
- set(app.PIButton,'enable','on'); %Christopher Seipt 21.05.2021 off --> on
- set(app.ReglerberechnenButton,'enable','on'); %Christopher Seipt 12.05.2021 / off zu on
- set(app.PIDButton,'enable','on');
- set(app.PDButton,'enable','off');
- Standinvar='0';
- assignin("base","Standinvar",Standinvar);
- app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
- set(app.ohneAusgleichButtonGroup,'visible','off');
- set(app.mitAusgleichButtonGroup,'visible','off');
- set(app.DigitalreglerButtonGroup,'visible','on');
- set(app.AbtastzeitinSekundenEditField,'visible','on');
- set(app.AbtastzeitinSekLabel,'visible','on');
- end
- end
- % Button pushed function: StreckenreduktonButton
- function StreckenreduktonButtonPushed(app, event)
- Standinvar='0';
- assignin("base","Standinvar",Standinvar);
- app.DummySim1feldTextArea.Value = evalin('base','Standinvar')
- assignin("base","hallo",app.U_maxEditField.Value)
- PidDesigner_Mod('OrdRed')
- if(evalin('base','OrdRedFehler')==0)
- hold(app.UebergangsfunktionDiagramm,'on')
- plot(app.UebergangsfunktionDiagramm,evalin('base','tRed'),evalin('base','yRed'));
- hold(app.UebergangsfunktionDiagramm,'off')
- Gs_r=evalin('base','Gs_r')
- Gs_r=tf(Gs_r)
- app.StreckenuebertragungsfunktionTextArea.Value=matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(Gs_r);
- strecken_analyse(app, Gs_r)
- set(app.reduzierteFunktionLabel, 'visible','on');
- set(app.orginalFunktionLabel,'visible','off');
- else
- disp('Fehler')
- end
- end
- % Value changed function: AbtastzeitinSekundenEditField
- function AbtastzeitinSekundenEditFieldValueChanged(app, event)
- Tab = app.AbtastzeitinSekundenEditField.Value;
- assignin('base','Tab',Tab)
- Tg=str2num(evalin('base','Tg'));
- Tu=str2num(evalin('base','Tu'));
- app.TCAButton.BackgroundColor = 'r';
- app.TakahashiPIDButton.BackgroundColor= 'r';
- if(Tab/Tg <= (1/10))
- app.TCAButton.BackgroundColor = 'g';
- end
- if(Tab <= (2*Tu))
- app.TakahashiPIDButton.BackgroundColor= 'g';
- end
- if(Tab == 0)
- app.TCAButton.BackgroundColor = [0.96,0.96,0.96];
- app.TakahashiPIDButton.BackgroundColor= [0.96,0.96,0.96];
- end
- end
- % Callback function
- function Modellsimulieren(app, event)
- clearvars Ysimmesswerte;
- clearvars Ysim;
- clearvars tout;
- app.DummySim1feldTextArea.Value='0';
- %app.DummyfunktionlenderEditField.Value=
- %app.Modellsimulierendummyfunktion.Value='1';
- %ModellsimulierendummyfunktionValueChanged(app) Christopher Seipt 12.05.2021 /auskommentiert
- end
- % Value changed function: SimulationszeitEditField
- function SimulationszeitEditFieldValueChanged(app, event)
- simend = app.SimulationszeitEditField.Value;
- assignin("base","Simulationszeit",str2num(simend));
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- setSekPlots(app);
- end
- % Callback function
- function DummyfunktionlenderEditFieldValueChanged(app, event)
- %fehlerhaftern code sollte nicht mehr existieren
- end
- % Value changed function: Modellsimulierendummyfunktion
- function ModellsimulierendummyfunktionValueChanged(app, event)
- end
- % Button pushed function: ErstellenButton_stellgr
- function ErstellenButton_stellgrPushed(app, event)
- %Christopher Seipt 16.07.2021
- %liest Grenzen der Stellgröße ein
- assignin('base','obere_grenze_stllg',app.obereStellgrenbegrenzungEditField.Value+0.001)
- assignin('base','untere_grenze_stllg',app.untereStellgrenbegrenzungEditField.Value-0.001)
- %falls die Bregenzung aktiv ist, wird neu berechnet
- if evalin('base','stellgr_beschk')==1
- cla(app.Ausgang_Regler);
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- setSekPlots(app);
- end
- draw_stell_begrenz(app) %Zeichnen der Linien im Digramm
- if evalin('base','stell_begrenz_anlog')==1
- assignin('base','Digitalregler',0);
- end
- end
- % Value changed function: Switch_stellgr
- function Switch_stellgrValueChanged(app, event)
- value = app.Switch_stellgr.Value;
- switch value
- case 'On'
- assignin('base','stellgr_beschk',1)
- if(app.AnalogButton.Value==true)
- assignin('base','stell_begrenz_anlog',1);
- end
- case 'Off'
- assignin('base','stellgr_beschk',0)
- assignin('base','stell_begrenz_anlog',0);
- end
- cla(app.Ausgang_Regler); %löschen des aktuellen Diagramms
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- setSekPlots(app);
- draw_stell_begrenz(app); %Zeichnen der Linien im Digramm
- %Zurücksetzen Regler Typ Digital für Analoge Regler mit Stellgrößenbegrenzung
- if evalin('base','stell_begrenz_anlog')==1
- assignin('base','Digitalregler',0);
- end
- end
- % Value changed function: VerschiebungindBEditField
- function VerschiebungindBEditFieldValueChanged(app, event)
- %Christopher Seipt
- alpha_dB = app.VerschiebungindBEditField.Value;
- assignin('base','alpha_dB',alpha_dB);
- alpha = 10^(alpha_dB/20);
- assignin('base','alpha',alpha);
- assignin('base','Verschiebung_Kp',1); %für Kp_changed zum Speichern des Original Werts
- if (alpha_dB==0) %Reset
- assignin('base','Kp',evalin('base','or_KP')); %
- else
- assignin('base','Kp',alpha*evalin('base','or_KP'));
- end
- %Aufrufen der setChangedValues-Funktion zur Aktualisierung
- setChangedValues(app);
- %Aufrufen der setSekPlots-Funktion zur Aktualisierung
- setSekPlots(app);
- PidDesigner_Mod('KnobLimits'); %neues Limit für die Drehknöpfe
- app.KpKnob.Limits = evalin('base','KpLimit');
- app.KpEditField.Limits =evalin('base','KpLimit');
- app.KpEditField.Value = evalin('base','Kp');
- app.KpKnob.Value = evalin('base','Kp');
- end
- % Button pushed function: FKVButton
- function FKVButtonPushed(app, event)
- % Aktualisierungsindikator setzen
- app.Lamp_FKV.Color='g';
- % Sicht- und Waehlbarmachen des Fuehrungs- und des Bodepanels
- % durch Parent-Zuweisung
- app.FuehrungspanelTab.Parent=app.TabGroup;
- app.BodepanelTab.Parent=app.TabGroup;
- % Merkvariable lastEvent:
- % lastEvent='FKVPanel' --> zuletzt wurde FKV berechnet
- % lastEvent='ReglerPanel' --> zuletzt mit Regelpanel gerechnet
- assignin('base','lastEvent', "FKVPanel")
- % Einlesen der Inputs
- FKV_Eingang = string(app.FuehrungDropDown.Value);
- FKV_tr = app.Anstiegszeitt_rsEditField.Value;
- FKV_u = app.berschwingenddotuEditField.Value;
- FKV_e = app.Regelabweichunge_inftyEditField.Value;
- FKV_konstPhase = app.konstPhasedegreeEditField.Value;
- if(FKV_konstPhase < 0.00000001)
- % wenn konstPhase = 0 dann T = Inf (s. addLag)
- % also wzlag,wnlag = 0
- FKV_konstPhase = 0.00000001;
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%% BEGINN DES VERFAHRENS %%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Berechnung der Durchtrittsfrequenz wc und des Phasenrands pm
- [FKV_wc, FKV_pm] = myFKV_functions.calcWc_pm(FKV_tr, FKV_u);
- % Strecke aus dem Workspace extrahieren, Regler erstellen und
- % die Strecke auf Legitimität prüfen
- FKV_Gs = evalin('base','Gs');
- FKV_Gr = tf([1],[1]); % Regler vorerst 1
- % Hinzufügen der nötigen Integratoren für eine bleibende
- % Regelabweichung von Null in Abhäng. des Eingangs
- % nach Tabelle
- FKV_anzIntsGs = myFKV_functions.getNumIntegrators(FKV_Gs);
- [FKV_Gr, FKV_K0] = myFKV_functions.calcK0_addInts(FKV_Gr, FKV_e, FKV_Eingang, FKV_anzIntsGs);
- % Hinzufügen eines P-Glieds zum Einstellen der gewünschten
- % Durchtrittsfrequenz oder der gewünschten Regelabweichung
- [FKV_Gr, FKV_Kr] = myFKV_functions.addPGlied(FKV_Gr, FKV_Gs, FKV_wc, FKV_e, FKV_K0, FKV_anzIntsGs);
- % Hinzufügen eines Lead-Glieds zum Einstellen des gewünschten
- % Phasenrands
- [FKV_Gr, FKV_wmlead] = myFKV_functions.addLead(FKV_Gr, FKV_Gs, FKV_wc, FKV_pm, FKV_konstPhase);
- % Hinzufügen eines Lag-Glieds zum Kompensieren der
- % Betragserhöhung durch das Lead-Glied
- [FKV_Gr, FKV_wmlag] = myFKV_functions.addLag(FKV_Gr, FKV_Gs, FKV_wc, FKV_wmlead, FKV_konstPhase);
- % Berechung von G0(s) und T(s)
- FKV_G0 = FKV_Gr*FKV_Gs;
- FKV_T = feedback(FKV_G0,1,-1); % Feedback-Funktion nutzen, sonst wird nicht gekürzt
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%% ENDE DES VERFAHRENS %%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Erstellung eines darstellbaren Strings für den Regler Gr
- FKV_GrDisp = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(zpk(FKV_Gr));
- FKV_G0Disp = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(zpk(FKV_G0));
- FKV_TDisp = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(zpk(FKV_T));
- % Anzeigen von ausgewählten Werten/Übertragungsfunktionen
- app.ReglerG_RsTextArea.Value = FKV_GrDisp;
- %app.G0TextArea.Value = FKV_G0Disp;
- %app.TTextArea.Value = FKV_TDisp;
- app.MittenfreqLeadTextArea.Value = num2str(FKV_wmlead);
- app.MittenfreqLagTextArea.Value = num2str(FKV_wmlag);
- %app.PGliedTextArea.Value = num2str(FKV_Kr); %gelöscht
- app.pm_sollTextArea.Value = num2str(FKV_pm);
- app.wc_sollTextArea.Value = num2str(FKV_wc);
- app.u_sollTextArea.Value = num2str(FKV_u);
- app.tr_sollTextArea.Value = num2str(FKV_tr);
- % Hinzufügen aller verwendeten/berechneten Größen zum Workspace
- assignin('base','FKV_tr', FKV_tr);
- assignin('base','FKV_u', FKV_u);
- assignin('base','FKV_e', FKV_e);
- assignin('base','FKV_konstPhase', FKV_konstPhase);
- assignin('base','FKV_Eingang', FKV_Eingang);
- assignin('base','FKV_wc', FKV_wc);
- assignin('base','FKV_pm', FKV_pm);
- assignin('base','FKV_Gr', FKV_Gr);
- assignin('base','FKV_G0', FKV_G0);
- assignin('base','FKV_T', FKV_T);
- assignin('base','FKV_wmlag', FKV_wmlag);
- assignin('base','FKV_wmlead', FKV_wmlead);
- assignin('base','FKV_Kr', FKV_Kr);
- assignin('base','FKV_K0', FKV_K0);
- assignin('base','FKV_GrDisp',FKV_GrDisp);
- assignin('base','FKV_G0Disp',FKV_G0Disp);
- assignin('base','FKV_TDisp',FKV_TDisp);
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%% AKTUALISIERUNG DER PLOTS %%%%%%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Ersetzen der yTs und tTs Vektoren im Zusammenspiel mit dem
- % bestehendem Code, um T(s) anzeigen zu lassen
- [FKV_y,FKV_t] = step(FKV_T);
- assignin('base','yTs', FKV_y);
- assignin('base','tTs', FKV_t);
- % Ersetzen der Bodeparameter im Zusammenspiel mit dem
- % bestehendem Code, um G0(s) anzeigen zu lassen
- [Mag,Phase,Wout]=bode(FKV_G0);
- [Gm,Pm,Wcg,Wcp]=margin(FKV_G0);
- Mag = reshape(Mag,[],1);
- Phase = reshape(Phase,[],1);
- magdb = 20*log10(Mag);
- Gm = 20*log10(Gm);
- if (Gm == Inf)
- at = ' ';
- assignin('base','at',at);
- else
- at = [' dB (at ',num2str(Wcg),' rad/s)'];
- assignin('base','at',at);
- end
- assignin('base','Mag',magdb);
- assignin('base','Phase',Phase);
- assignin('base','Wout',Wout);
- assignin('base','Gm',Gm);
- assignin('base','Pm',Pm);
- assignin('base','Wcg',Wcg);
- assignin('base','Wcp',Wcp);
- % Parameterberechnung und Uebergabe der Ortskurve
- [re,im,wnyq]=nyquist(FKV_T);
- re = reshape(re,[],1);
- im = reshape(im,[],1);
- assignin('base','re',re);
- assignin('base','im',im);SimulationMode
- assignin('base','wnyq',wnyq);
- % Parameterberechnung und Uebergabe des
- % Pol-Nullstellendiagramms
- pout=pole(FKV_T); %funktioniert mit Totzeit
- z=zero(FKV_T);
- assignin('base','pzP',pout);
- assignin('base','pzZ',complex(z));
- % Parameterberechnung und Uebergabe des
- % Ausgang_Regler-Diagramms
- if(evalin('base','stell_begrenz_anlog') == 0)
- Sum=sumblk('e=w-y'); % Summenpunkt Regelfehler
- FKV_Gr.u='e'; FKV_Gr.y='ur'; % Regler Ein- und Ausgänge
- FKV_Gs.u='ur'; FKV_Gs.y='y';
- aus_regler=connect(FKV_Gr,FKV_Gs,Sum,'w','ur'); %tf Reglerausgang
- t_max=max(FKV_t);
- [y_r_aus,t_r_aus]=step(aus_regler,t_max);
- assignin('base','y_r_aus',y_r_aus);
- assignin('base','t_r_aus',t_r_aus);
- end
- if (evalin('base','stell_begrenz_anlog') == 1)
- simOut=sim('FKV_Modell_Simulink','SimulationMode','normal');
- anlog_begrenz=simOut.get('y_z');
- anlog_begrenz_ra=simOut.get('y_r'); %Ausgang des Reglers
- t=anlog_begrenz.Time; %zeit zur Simulation
- y=anlog_begrenz.Data; %Ergbnis der Simualation/ Sprungantwort (y)
- y_r_aus=anlog_begrenz_ra.Data;
- t_r_aus=anlog_begrenz_ra.Time;
- assignin('base','yTs',y);
- assignin('base','tTs',t);
- assignin('base','y_r_aus',y_r_aus);
- assignin('base','t_r_aus',t_r_aus);
- end
- % P-Glied unter 'or_KP' ablegen, um VerschiebungindB-Feld
- % weiterhin nutzen zu können
- assignin('base','or_Kp', FKV_Kr);
- assignin('base','Kp', FKV_Kr);
- %Fix reicht nicht: setChangedValues muss verändert werden
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%% AKTUALISIERUNG DER WERTE/FUNKTIONEN %%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %AKTUELLES PROBLEM: Die Funktionen zum Aktualisieren
- %setsekplots und setchangedvalues sind nicht einsetzbar ohne
- %änderungen, denn sie arbeitet nur mit reglerpanel
- % Anzeigen der neuen Polstellen von FKV_T
- pTsBox = '';
- pTs = pole(FKV_T);
- o=length(pTs);
- for p=1:o
- pTsBox=[pTsBox,num2str(pTs(p,1)),newline];
- p=p+1;
- end
- assignin('base','pTs',pTsBox);
- % Anstiegszeit,Überschwingweite,Anschwingzeit,Ausregelzeit
- % sollen für FKV_T neu berechnet werden,
- % AnaStep bietet sich an
- assignin('base','AnaFunktion', FKV_T);
- assignin('base','AnaCounter', 2);
- PidDesigner_Mod('AnaStep');
- % Aufruf der bestehenden Funktionen zur Aktualisierung der
- % Plots, Werte und Funktionen
- % Digitalregler=0 muss gesetzt werden
- assignin('base','Digitalregler', 0);
- setSekPlots(app);
- setDisp(app);
- % aktuelles Problem: für die ersten 4 Werte/Zeiten im
- % Führungspanel gibt das sisotool andere Werte
- % Lösung: ist nicht mein Problem/nicht meine Schuld
- % Problem: konstPhase = 0 gibt einen error in piddesigner_mod
- % Lösung: = 0 nicht zulassen -> instabiles Lag-Glied
- % Problem: Kr ist ein double -> zB 20.0000 / Phasenrand wird
- % dann 40.00007 angezeigt
- % Lösung: ist unwichtig, kann so bleiben
- % Problem: ich möchte bandbreite wb anzeigen lassen, aber wie
- % ist sie definiert? -3dB von der maximalen Verstärkung oder
- % -3dB von der DC-Verstärkung (0 Hz)
- % Problem: Verschiebung in dB Feld funktioniert nicht nach FKV
- % Problem: Ausgang On funktioniert nicht bei FKV
- % Hinzufügen von Ist-Werten nach der Berechnung durch
- % PidDesigner_Mod('AnaStep')
- app.tr_istTextArea.Value = num2str(evalin("base",'Tr'));
- app.pm_istTextArea.Value = num2str(evalin("base",'Pm'));
- app.u_istTextArea.Value = num2str(str2num(evalin("base",'UeWeite'))*100);
- app.wc_istTextArea.Value = num2str(evalin('base','Wcp'));
- end
- % Button pushed function: HelpButton
- function HelpButtonPushed(app, event)
- message={'Hinweise zur Nutzung des FKV',['Die Lampe in der ' ...
- 'oberen rechten Ecke zeigt Ihnen, ob die angezeigten ' ...
- 'Informationen aktuell sind.'],['\color{magenta}magenta: ' ...
- 'keine Regelung berechnet'],['\color{red}rot: nicht ' ...
- 'aktualisert'],'\color{green}grün: aktualisiert',['\color{black}' ...
- 'Haben Sie zuletzt einen Regler mithilfe des Reglerpanels ' ...
- 'berechnet, nutzen Sie das Führungs- und Bodepanel, um ' ...
- 'aktualisierte Werte einzusehen.'],['Tragen Sie die ' ...
- 'Vorgaben an die Sprungantwort der ' ...
- 'Führungsübertragungsfunktion T(s) ein und betätigen ' ...
- 'den FKV-Button.'],['Wurde ein Regler berechnet kann der ' ...
- 'Rampe-Button genutzt werden, um sich die Rampenantwort ' ...
- 'des geschlossenen Regelkreises ausgeben zu lassen.'],['Der ' ...
- 'Wert konstPhase gibt an, wie ' ...
- 'weit die Phase durch das Lead-Glied zusätzlich erhöht ' ...
- 'werden muss, um die darauffolgende Phasenabsenkung des Lag-Glieds im Bereich der Durchtrittsfrequenz zu ' ...
- 'kompensieren. 5\circ bis 10\circ sind üblich und werden ' ...
- 'empfohlen.'],['Das FKV beruht auf Näherungsbeziehungen.' ...
- ' Es ist ratsam anschließend eine Feineinstellung ' ...
- 'vorzunehmen.'],['Schauen Sie sich zum Verständnis der ' ...
- 'eingefügten Kompensationsglieder die Phasenanhebung und ' ...
- '-absenkung und deren Mittenfrequenzen im Bode-Diagramm von G0(s) an.']};
- uialert(app.PIDTool,message,'Help',...
- 'Icon','info',...
- 'Interpreter','tex');
- end
- % Button pushed function: RampeButton
- function RampeButtonPushed(app, event)
- % figure erstellen und vorherige löschen
- figureName = 'Rampenantwort von T(s)';
- existingFigures = findall(0,'Type','figure');
- existingFigureNames = get(existingFigures,'Name');
- if any(strcmp(existingFigureNames,figureName))
- delete(existingFigures(strcmp(existingFigureNames,figureName)));
- end
- figure('Name',figureName,'NumberTitle','off');
- % Rampe plotten
- [~,ramp_x]=step(evalin("base",'FKV_T'));
- ramp_maxtime = ramp_x(length(ramp_x));
- ramp_t= 0:0.01* ramp_maxtime:ramp_maxtime;
- ramp_y=lsim(evalin("base",'FKV_T'),ramp_t,ramp_t);
- plot(ramp_t,ramp_y);
- hold on;
- plot(ramp_t,ramp_t);
- ramp_e=ramp_t-ramp_y';
- plot(ramp_t,ramp_e);
- legend('Rampenantwort','Rampe', 'Regelfehler','location','northwest');
- title('Rampenantwort des geschlossenen Regelkreises');
- grid on;
- end
- % Callback function
- function EingabeButtonPushed(app, event)
- %sinnloser code, nicht löschbar
- end
- % Callback function
- function EingabeButtonValueChanged(app, event)
- %% Auswahl der Ordnung über Switch (PT2. oder IT2)
- Verhalten = app.VerhaltenSwitch.Value;
- %% Eingabe der Parameter der Regelstrecke
- Kp = app.KpKiEditField.Value;
- Ki = app.KpKiEditField.Value;
- T1 = app.T1sEditField.Value;
- T2 = app.T2sEditField.Value;
- ts = app.TssEditField.Value;
- %% Regelstrecke mit PT₂-Verhalten (2. Ordnung)
- if strcmp(Verhalten, 'PT₂')
- % Z-Transformation der gegeben Regelstrecke
- A = (Kp*T1)/(T1-T2);
- B = (Kp*T2)/(T2-T1);
- z1 = exp(-ts/T1);
- z2 = exp(-ts/T2);
- b1 = A*(1-z1)+B*(1-z2);
- b2 = -(A*z2*(1-z1)+B*z1*(1-z2));
- a1 = -(z1+z2);
- a2 = z1*z2;
- z = tf('z');
- % z-transformierte Streckenfunktion Gs
- Zs = b1*z+b2;
- Ns = z^2+a1*z+a2;
- Gs = Zs/Ns;
- % Übertragungsfunktion des Dead-Beat-Reglers
- Zr = Ns;
- Nr = (b1+b2)*z^2-b1*z-b2;
- Gr = Zr/Nr;
- % Ausgabe der Streckenübertragungsfunktion Gs
- app.StreckeTextArea.Value = sprintf('\t%.5fz + %.5f\nGs(z) = ―――――――――――― \n\tz² + %.5fz + %.5f',b1,b2,a1,a2);
- % Ausgabe des Dead-Beat-Reglers Gr
- app.DeadBeatReglerTextArea.Value = sprintf('\tz² + %.5fz + %.5f\nGr(z) = ―――――――――――――――― \n\t%.5fz² + %.5fz + %.5f',a1,a2,b1+b2,-b1,-b2);
- % Ausgabe Ausregelschritte und Gesamtregeldauer
- app.kEditField.Value = 2;
- app.TrsEditField.Value = 2*ts;
- % Übertragungsfunktion des geschlossenen Regelkreises
- Gm = (Gs*Gr)/(1+(Gs*Gr));
- [y, t] = step(Gm);
- % Regelgröße, Regeldifferenz und Stellgröße bestimmen
- ti0 = 0; ti1 = 1; ti2 = 2;
- x1 = interp1(t,y,ti0); x2 = interp1(t,y,ti1); x3 = interp1(t,y,ti2);
- e1 = 1-x1; e2 = 1-x2; e3 = 1-x3;
- u1 = (1/(b1+b2))*e1; u2 = (1+a1/(b1+b2))*e2; u3 = (1+a1+a2/(b1+b2))*e3;
- % Tabelle mit Regel- und Stellgrößen zu den Abtastzeitpunkten
- t = [0; ts; 2*ts];
- k = [1; 2; 3];
- x = [x1; x2; x3];
- e = [e1; e2; e3];
- u = [u1; u2; u3];
- app.MesswerteTable.Data = table(t, k, x, e, u);
- % Plot der Stellgröße
- yStell = [0 u1 u1 u2 u2 u3 u3];
- xStell = [0 0 ts ts 2*ts 2*ts 3*ts];
- plot(app.StellAxes, xStell, yStell, "LineWidth", 1.5);
- % Plot der Regelgröße
- yRegel = [x1 x2 x3 x3];
- xRegel = [0 ts 2*ts 3*ts];
- plot(app.RegelAxes, xRegel, yRegel, "LineWidth", 1.5);
- %% Regelstrecke mit IT₂-Verhalten (3.Ordnung)
- elseif strcmp(Verhalten,'IT₂')
- % Z-Transformation der gegebenen Regelstrecke
- A = Ki;
- B = ((A*T2^2)/(T2-T1))-A*(T1+T2);
- C = (A*T2^2)/(T1-T2);
- z1 = exp(-ts/T1);
- z2 = exp(-ts/T2);
- b1 = A*ts+B*(1-z1)+C*(1-z2);
- b2 = -(A*ts*(z1+z2)+B*(1-z1)*(1+z2)+C*(1-z2)*(1+z1));
- b3 = A*ts*z1*z2+B*(1-z1)*z2+C*(1-z2)*z1;
- a1 = -z1-z2-1;
- a2 = z1*(z2+1)+z2;
- a3 = -z1*z2;
- z = tf('z');
- % z-transformierte Streckenfunktion Gs
- Zs = b1*z^2+b2*z+b3;
- Ns = z^3+a1*z^2+a2*z+a3;
- Gs = Zs/Ns;
- % Übertragungsfunktion des Dead-Beat-Reglers
- Zr = Ns;
- Nr = (b1+b2+b3)*z^3-Zs;
- Gr = Zr/Nr;
- % Ausgabe der Streckenübertragungsfunktion Gs
- app.StreckeTextArea.Value = sprintf('\t%.5fz² + %.5fz + %.5f\nGs(z) = ―――――――――――――――――― \n\tz³ + %.5fz² + %.5fz + %.5f',b1,b2,b3,a1,a2,a3);
- % Ausgabe des Dead-Beat-Reglers Gr
- app.DeadBeatReglerTextArea.Value = sprintf('\tz³ + %.5fz² + %.5fz + %.5f\nGr(z) = ―――――――――――――――――――――― \n\t%.5fz³ + %.5fz² + %.5fz + %.5f',a1,a2,a3,b1+b2+b3,-b1,-b2,-b3);
- % Ausgabe Ausregelschritte und Gesamtregeldauer
- app.kEditField.Value = 3;
- app.TrsEditField.Value = 3*ts;
- % Übertragungsfunktion des geschlossenen Regelkreises
- Gm = (Gs*Gr)/(1+(Gs*Gr));
- [y, t] = step(Gm);
- % Regelgröße, Regeldifferenz und Stellgröße bestimmen
- ti0 = 0; ti1 = 1; ti2 = 2; ti3 = 3;
- x1 = interp1(t,y,ti0); x2 = interp1(t,y,ti1); x3 = interp1(t,y,ti2); x4 = interp1(t,y,ti3);
- e1 = 1-x1; e2 = 1-x2; e3 = 1-x3; e4 = 1 - x4;
- u1 = (1/(b1+b2+b3))*e1; u2 = (1+a1/(b1+b2+b3))*e2; u3 = (1+a1+a2/(b1+b2+b3))*e3; u4 = (1+a1+a2+a3/(b1+b2+b3))*e4;
- % Tabelle mit Regel- und Stellgrößen zu den Abtastzeitpunkten
- t = [0; ts; 2*ts; 3*ts];
- k = [1; 2; 3; 4];
- x = [x1; x2; x3; x4];
- e = [e1; e2; e3; e4];
- u = [u1; u2; u3; u4];
- app.MesswerteTable.Data = table(t, k, x, e, u);
- % Plot der Stellgröße
- yStell = [0 u1 u1 u2 u2 u3 u3 u4 u4];
- xStell = [0 0 ts ts 2*ts 2*ts 3*ts 3*ts 4*ts];
- plot(app.StellAxes, xStell, yStell, "LineWidth", 1.5);
- % Plot der Regelgröße
- yRegel = [x1 x2 x3 x4 x4];
- xRegel = [0 ts 2*ts 3*ts 4*ts];
- plot(app.RegelAxes, xRegel, yRegel, "LineWidth", 1.5);
- end
- %% Fehlerausgabe, wenn einer der Werte 0 beträgt
- if Kp == 0
- app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- elseif Ki == 0
- app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- elseif T1 == 0
- app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- elseif T2 == 0
- app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- elseif ts == 0
- app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
- elseif T1 == T2
- app.StreckeTextArea.Value = 'Die Streckenzeitkonstanten T₁ und T₂ dürfen nicht den gleichen Wert haben!'
- app.DeadBeatReglerTextArea.Value = 'Die Streckenzeitkonstanten T₁ und T₂ dürfen nicht den gleichen Wert haben!'
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%% %%%%
- %%%% App für den Entwurf eines Dead-Beat-Regelers %%%%
- %%%% Final Version 18.01.2024 %%%%
- %%%% © Paul Steinbrink (ET21, SPII) %%%%
- %%%% %%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- end
- % Button pushed function: StreckebernehmeninDBRButton
- function StreckebernehmeninDBRButtonPushed(app, event)
- GsDisp = evalin('base', 'GsDisp');
- assignin('base','gs',GsDisp);
- app.StreckeausStreckenpanelTextArea.Value = GsDisp;
- end
- % Button pushed function: StartButton
- function StartButtonPushed(app, event)
- %Löschen aller Text- und Diagramm-Inhalte
- app.StreckeTextArea.Value = '';
- app.DeadBeatReglerTextArea.Value = '';
- app.MesswerteTable.Data = {};
- cla(app.RegelAxes);
- cla(app.StellAxes);
- %Streckenübertragungsfunktion in die Funktion holen
- Gs = evalin('base','Gs');
- %Entscheidung, welche Strategie gewählt wird
- % IT2_Strecke = 0 -> PT2 oder IT2_Strecke = 1 -> IT2
- %Teststrecke
- %IT2_Strecke = 0;
- %PT2 = tf(3, [0.1 0.7 1]);
- %IT2 = tf(10, [0.02 0.3 1 0]);
- %Eingabewerte auslesen und übergeben
- assignin('base','u_max',app.U_maxEditField.Value);
- assignin('base','u_min',app.U_minEditField.Value);
- assignin('base','tau',app.AbtastzeitEditField.Value);
- %assignin('base','IT2',0);
- IT2_Strecke = evalin('base','IT2_Strecke');
- %auswahlModi = app.RegelstrategieButtonGroup.Text;
- u_max = evalin('base','u_max');
- u_min = evalin('base','u_min');
- if IT2_Strecke < 1
- %%%%%%%%%%%%%%%
- % PT2-Strecke %
- %%%%%%%%%%%%%%%
- %gs = PT2;
- tau = evalin('base', 'tau');
- gz = c2d(Gs, tau); % kontinuierliche Strecke diskretisieren
- [numerator, denominator] = tfdata(gz); % Koeffizienten der diskretiesierten Strecke extrahieren
- % Zähler
- b2 = numerator{1}(1);
- b1 = numerator{1}(2);
- b0 = numerator{1}(3); % niedrigster Exponent
- % Nenner
- a2 = denominator{1}(1);
- a1 = denominator{1}(2);
- a0 = denominator{1}(3); % niedrigster Exponent
- assignin('base','b2',b2);
- assignin('base','b1',b2);
- assignin('base','b0',b0);
- assignin('base','a2',a2);
- assignin('base','a1',a1);
- assignin('base','a0',a0);
- else
- %%%%%%%%%%%%%%%
- % IT2-Strecke %
- %%%%%%%%%%%%%%%
- %gs = IT2;
- tau = evalin('base', 'tau');
- gz = c2d(Gs, tau); % kontinuierliche Strecke diskretisieren
- [numerator, denominator] = tfdata(gz); % Koeffizienten der diskretiesierten Strecke extrahieren
- % Zähler
- b2 = numerator{1}(2);
- b1 = numerator{1}(3);
- b0 = numerator{1}(4); % niedrigster Exponent
- % Nenner
- a2 = denominator{1}(2);
- a1 = denominator{1}(3);
- a0 = denominator{1}(4); % niedrigster Exponent
- assignin('base','b2',b2);
- assignin('base','b1',b2);
- assignin('base','b0',b0);
- assignin('base','a2',a2);
- assignin('base','a1',a1);
- assignin('base','a0',a0);
- end
- %Debug
- %gs = evalin('base', 'gs');
- %app.DebugTextArea.Value = gs;
- %Werte aus Simulation holen
- simOut = sim('Deadbeatregler.slx','SimulationMode','normal');
- Sollwert_korr_w = simOut.get('Sollwert_korr_w');
- Sollwert_korr_e = simOut.get('Sollwert_korr_e');
- Sollwert_korr_u = simOut.get('Sollwert_korr_u');
- Sollwert_Regelgroesse = simOut.get('Sollwert_Regelgroesse');
- Sollwert_Stellgroesse = simOut.get('Sollwert_Stellgroesse');
- Abtastzeit_Regelgroesse = simOut.get('Abtastzeit_Regelgroesse');
- Abtastzeit_Stellgroesse = simOut.get('Abtastzeit_Stellgroesse');
- %Debug
- assignin('base',"Sollwert_Stellgroesse",Sollwert_Stellgroesse);
- assignin('base',"Abtastzeit_Stellgroesse",Abtastzeit_Stellgroesse);
- assignin('base',"Sollwert_korr_u",Sollwert_korr_u);
- assignin('base',"Sollwert_korr_w",Sollwert_korr_w);
- assignin('base',"Sollwert_korr_e",Sollwert_korr_e);
- if IT2_Strecke < 1
- % Ausgabe der Streckenübertragungsfunktion Gz
- app.StreckeTextArea.Value = sprintf('\t%.5fz + %.5f\nGz(z) = ―――――――――――――――――― \n\t%.5fz² + %.5fz',b2,b1,a2,a1);
- % Ausgabe des Dead-Beat-Reglers Gz
- app.DeadBeatReglerTextArea.Value = sprintf('\tz² + %.5fz + %.5f\nGr(z) = ―――――――――――――――――――――― \n\t%.5fz³ + %.5fz² + %.5fz',a1,a2,b1+b2,-b1,-b2);
- else
- % Ausgabe der Streckenübertragungsfunktion Gz
- app.StreckeTextArea.Value = sprintf('\t%.5fz² + %.5fz + %.5f\nGz(z) = ―――――――――――――――――― \n\tz³ + %.5fz² + %.5fz + %.5f',b1,b2,b3,a1,a2,a3);
- % Ausgabe des Dead-Beat-Reglers Gz
- app.DeadBeatReglerTextArea.Value = sprintf('\tz³ + %.5fz² + %.5fz + %.5f\nGr(z) = ―――――――――――――――――――――― \n\t%.5fz³ + %.5fz² + %.5fz + %.5f',a1,a2,a3,b1+b2+b3,-b1,-b2,-b3);
- end
- % Ausgabe Ausregelschritte und Gesamtregeldauer
- letzter_zeitpunkt = app.AbtastzeitEditField.Value(end);
- if IT2_Strecke == 0
- app.kEditField.Value = 1;%countervariable;
- app.TrsEditField.Value = 1;%zeitvariable;
- else
- app.kEditField.Value = 1;%countervariable;
- app.TrsEditField.Value = 1;%zeitvariable;
- end
- %Tabelle für U, W, E
- %Wenn Abtastzeit
- %Wenn Sollwert
- %Wenn Keine
- tabellenzeit = Sollwert_korr_u.time;
- values1 = Sollwert_korr_u.signals.values;
- values2 = Sollwert_korr_w.signals.values;
- values3 = Sollwert_korr_e.signals.values;
- Data = table(tabellenzeit, values1, values2, values3);
- uitable_data = table2cell(Data);
- app.MesswerteTable.Data = uitable_data;
- % Plot der Stellgröße
- if app.SollwertkorrekturButton.Value
- stairs(app.StellAxes, Sollwert_Stellgroesse.time, Sollwert_Stellgroesse.signals.values, "LineWidth", 1.5);
- elseif app.AbtastzeitButton.Value
- stairs(app.StellAxes, Abtastzeit_Stellgroesse.time, Abtastzeit_Stellgroesse.signals.values, "LineWidth", 1.5);
- elseif app.keineButton.Value %für 'keine' wird der Graph für Sollwertkorrektur verwendet
- stairs(app.StellAxes, Sollwert_Stellgroesse.time, Sollwert_Stellgroesse.signals.values, "LineWidth", 1.5);
- end
- %Plot der Regelgröße
- if app.SollwertkorrekturButton.Value == 1
- plot(app.RegelAxes, Sollwert_Regelgroesse.time, [Sollwert_Regelgroesse.signals.values], "LineWidth", 1.5);
- elseif app.AbtastzeitButton.Value == 1
- plot(app.RegelAxes, Abtastzeit_Regelgroesse.time, [Abtastzeit_Regelgroesse.signals.values], "LineWidth", 1.5);
- else app.keineButton.Value%für 'keine' wird der Graph für Sollwertkorrektur verwendet
- plot(app.RegelAxes, Sollwert_Regelgroesse.time, [Sollwert_Regelgroesse.signals.values], "LineWidth", 1.5);
- end
- %% Fehlerausgabe
- if app.AbtastzeitEditField.Value <= 0
- app.StreckeTextArea.Value = 'Abtastzeit muss größer als 0 sein!';
- app.DeadBeatReglerTextArea.Value = 'Abtastzeit muss größer als 0 sein!';
- elseif app.U_maxEditField.Value < app.U_minEditField.Value
- app.StreckeTextArea.Value = 'U_max muss größer als U_min sein!';
- app.DeadBeatReglerTextArea.Value = 'U_max muss größer als U_min sein!';
- elseif app.U_maxEditField.Value <= 0
- app.StreckeTextArea.Value = 'U_max muss positiv sein!';
- app.DeadBeatReglerTextArea.Value = 'U_max muss positiv sein!';
- elseif app.U_minEditField.Value > app.U_maxEditField.Value
- app.StreckeTextArea.Value = 'U_min muss größer als U_max sein!';
- app.DeadBeatReglerTextArea.Value = 'U_min muss größer als U_max sein!';
- elseif app.U_minEditField.Value >= 0
- app.StreckeTextArea.Value = 'U_min muss negativ sein!';
- app.DeadBeatReglerTextArea.Value = 'U_min muss negativ sein!';
- end
- end
- end
- % Component initialization
- methods (Access = private)
- % Create UIFigure and components
- function createComponents(app)
- % Get the file path for locating images
- pathToMLAPP = fileparts(mfilename('fullpath'));
- % Create PIDTool and hide until all components are created
- app.PIDTool = uifigure('Visible', 'off');
- app.PIDTool.Position = [96 96 1024 576];
- app.PIDTool.Name = 'PID Tool';
- app.PIDTool.Resize = 'off';
- % Create TabGroup
- app.TabGroup = uitabgroup(app.PIDTool);
- app.TabGroup.AutoResizeChildren = 'off';
- app.TabGroup.Position = [1 1 1024 576];
- % Create Messwert
- app.Messwert = uitab(app.TabGroup);
- app.Messwert.Title = 'Messwertpanel';
- % Create Messwerte
- app.Messwerte = uiaxes(app.Messwert);
- title(app.Messwerte, 'Messwerte inkl. Korrektur')
- xlabel(app.Messwerte, 'Zeit in s')
- ylabel(app.Messwerte, 'Y')
- app.Messwerte.YGrid = 'on';
- app.Messwerte.Position = [405 192 444 297];
- % Create DateinameinklEndungEditFieldLabel
- app.DateinameinklEndungEditFieldLabel = uilabel(app.Messwert);
- app.DateinameinklEndungEditFieldLabel.HorizontalAlignment = 'right';
- app.DateinameinklEndungEditFieldLabel.Position = [74 467 133 22];
- app.DateinameinklEndungEditFieldLabel.Text = 'Dateiname inkl. Endung';
- % Create DateinameinklEndungEditField
- app.DateinameinklEndungEditField = uieditfield(app.Messwert, 'text');
- app.DateinameinklEndungEditField.Position = [100 446 100 22];
- % Create DateinichtvorhandenLabel
- app.DateinichtvorhandenLabel = uilabel(app.Messwert);
- app.DateinichtvorhandenLabel.HorizontalAlignment = 'center';
- app.DateinichtvorhandenLabel.FontWeight = 'bold';
- app.DateinichtvorhandenLabel.FontColor = [1 0 0];
- app.DateinichtvorhandenLabel.Position = [82 417 136 22];
- app.DateinichtvorhandenLabel.Text = 'Datei nicht vorhanden!';
- % Create TextausrichtungSwitch
- app.TextausrichtungSwitch = uiswitch(app.Messwert, 'slider');
- app.TextausrichtungSwitch.Items = {'Zeilenweise', 'Spaltenweise'};
- app.TextausrichtungSwitch.Position = [124 381 45 20];
- app.TextausrichtungSwitch.Value = 'Zeilenweise';
- % Create TextausrichtungSwitchLabel
- app.TextausrichtungSwitchLabel = uilabel(app.Messwert);
- app.TextausrichtungSwitchLabel.HorizontalAlignment = 'center';
- app.TextausrichtungSwitchLabel.Position = [102.5 344 90 22];
- app.TextausrichtungSwitchLabel.Text = 'Textausrichtung';
- % Create MesswertgraphErzeugenButton
- app.MesswertgraphErzeugenButton = uibutton(app.Messwert, 'push');
- app.MesswertgraphErzeugenButton.ButtonPushedFcn = createCallbackFcn(app, @MesswertgraphErzeugenButtonPushed, true);
- app.MesswertgraphErzeugenButton.Position = [71 265 152 22];
- app.MesswertgraphErzeugenButton.Text = 'Messwertgraph Erzeugen';
- % Create UebertragungsfunktionButtonGroup
- app.UebertragungsfunktionButtonGroup = uibuttongroup(app.Messwert);
- app.UebertragungsfunktionButtonGroup.TitlePosition = 'centertop';
- app.UebertragungsfunktionButtonGroup.Title = 'Uebertragungsfunktion';
- app.UebertragungsfunktionButtonGroup.Position = [71 53 152 106];
- % Create PT1Button
- app.PT1Button = uitogglebutton(app.UebertragungsfunktionButtonGroup);
- app.PT1Button.Text = 'PT1';
- app.PT1Button.Position = [7 53 143 22];
- app.PT1Button.Value = true;
- % Create PT2Button
- app.PT2Button = uitogglebutton(app.UebertragungsfunktionButtonGroup);
- app.PT2Button.Text = 'PT2';
- app.PT2Button.Position = [7 32 143 22];
- % Create PT2mitUeberschwingenButton
- app.PT2mitUeberschwingenButton = uitogglebutton(app.UebertragungsfunktionButtonGroup);
- app.PT2mitUeberschwingenButton.Text = 'PT2 mit Ueberschwingen';
- app.PT2mitUeberschwingenButton.Position = [3 11 150 22];
- % Create bergangsfunktionTextAreaLabel
- app.bergangsfunktionTextAreaLabel = uilabel(app.Messwert);
- app.bergangsfunktionTextAreaLabel.HorizontalAlignment = 'right';
- app.bergangsfunktionTextAreaLabel.Position = [411 135 106 22];
- app.bergangsfunktionTextAreaLabel.Text = 'Übergangsfunktion';
- % Create bergangsfunktionTextArea
- app.bergangsfunktionTextArea = uitextarea(app.Messwert);
- app.bergangsfunktionTextArea.Position = [562 76 287 83];
- % Create UebertragungsfunktionerzeugenButton
- app.UebertragungsfunktionerzeugenButton = uibutton(app.Messwert, 'push');
- app.UebertragungsfunktionerzeugenButton.ButtonPushedFcn = createCallbackFcn(app, @UebertragungsfunktionerzeugenButtonPushed, true);
- app.UebertragungsfunktionerzeugenButton.Position = [53 33 191 22];
- app.UebertragungsfunktionerzeugenButton.Text = 'Uebertragungsfunktion erzeugen';
- % Create DropDownLabel
- app.DropDownLabel = uilabel(app.Messwert);
- app.DropDownLabel.HorizontalAlignment = 'right';
- app.DropDownLabel.Position = [326 483 66 22];
- app.DropDownLabel.Text = 'Drop Down';
- % Create DropDown
- app.DropDown = uidropdown(app.Messwert);
- app.DropDown.Position = [407 483 100 22];
- % Create StreckenpanelTab
- app.StreckenpanelTab = uitab(app.TabGroup);
- app.StreckenpanelTab.AutoResizeChildren = 'off';
- app.StreckenpanelTab.Title = 'Streckenpanel';
- % Create UebergangsfunktionDiagramm
- app.UebergangsfunktionDiagramm = uiaxes(app.StreckenpanelTab);
- title(app.UebergangsfunktionDiagramm, 'Übergangsfunktion der Strecke')
- xlabel(app.UebergangsfunktionDiagramm, 'Zeit[s]')
- ylabel(app.UebergangsfunktionDiagramm, 'h(t)')
- app.UebergangsfunktionDiagramm.YGrid = 'on';
- app.UebergangsfunktionDiagramm.Position = [31 5 535 270];
- % Create ModStreckeneingabeButtonGroup
- app.ModStreckeneingabeButtonGroup = uibuttongroup(app.StreckenpanelTab);
- app.ModStreckeneingabeButtonGroup.AutoResizeChildren = 'off';
- app.ModStreckeneingabeButtonGroup.Title = 'Gegben Sie ein:';
- app.ModStreckeneingabeButtonGroup.Position = [31 462 123 73];
- % Create KoeffizientenButton
- app.KoeffizientenButton = uiradiobutton(app.ModStreckeneingabeButtonGroup);
- app.KoeffizientenButton.Text = 'Koeffizienten';
- app.KoeffizientenButton.Position = [11 27 91 22];
- app.KoeffizientenButton.Value = true;
- % Create PolynomdirektButton
- app.PolynomdirektButton = uiradiobutton(app.ModStreckeneingabeButtonGroup);
- app.PolynomdirektButton.Text = 'Polynom direkt';
- app.PolynomdirektButton.Position = [11 5 101 22];
- % Create StreckenbertragungsfunktionTextAreaLabel
- app.StreckenbertragungsfunktionTextAreaLabel = uilabel(app.StreckenpanelTab);
- app.StreckenbertragungsfunktionTextAreaLabel.HorizontalAlignment = 'right';
- app.StreckenbertragungsfunktionTextAreaLabel.Position = [263 499 166 22];
- app.StreckenbertragungsfunktionTextAreaLabel.Text = 'Streckenübertragungsfunktion';
- % Create StabilitaetdesSystemsnachHurwitzLabel
- app.StabilitaetdesSystemsnachHurwitzLabel = uilabel(app.StreckenpanelTab);
- app.StabilitaetdesSystemsnachHurwitzLabel.HorizontalAlignment = 'center';
- app.StabilitaetdesSystemsnachHurwitzLabel.Position = [519.5 499 130 22];
- app.StabilitaetdesSystemsnachHurwitzLabel.Text = 'Stabilität und Polstellen';
- % Create StreckenanalysePanel
- app.StreckenanalysePanel = uipanel(app.StreckenpanelTab);
- app.StreckenanalysePanel.AutoResizeChildren = 'off';
- app.StreckenanalysePanel.TitlePosition = 'centertop';
- app.StreckenanalysePanel.Title = 'Streckenanalyse';
- app.StreckenanalysePanel.Position = [703 76 275 445];
- % Create reduzierteFunktionLabel
- app.reduzierteFunktionLabel = uilabel(app.StreckenanalysePanel);
- app.reduzierteFunktionLabel.FontColor = [1 0.4118 0.1608];
- app.reduzierteFunktionLabel.Visible = 'off';
- app.reduzierteFunktionLabel.Position = [83 406 108 22];
- app.reduzierteFunktionLabel.Text = 'reduzierte Funktion';
- % Create orginalFunktionLabel
- app.orginalFunktionLabel = uilabel(app.StreckenanalysePanel);
- app.orginalFunktionLabel.Position = [91 406 91 22];
- app.orginalFunktionLabel.Text = 'orginal Funktion';
- % Create OrdnungTextAreaLabel
- app.OrdnungTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.OrdnungTextAreaLabel.HorizontalAlignment = 'center';
- app.OrdnungTextAreaLabel.Position = [11 384 52 22];
- app.OrdnungTextAreaLabel.Text = 'Ordnung';
- % Create OrdnungTextArea
- app.OrdnungTextArea = uitextarea(app.StreckenanalysePanel);
- app.OrdnungTextArea.Editable = 'off';
- app.OrdnungTextArea.Position = [164 384 103 22];
- % Create WendepunktbeitTextAreaLabel
- app.WendepunktbeitTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.WendepunktbeitTextAreaLabel.HorizontalAlignment = 'center';
- app.WendepunktbeitTextAreaLabel.Position = [11 356 99 22];
- app.WendepunktbeitTextAreaLabel.Text = 'Wendepunkt bei t';
- % Create WendepunktbeitTextArea
- app.WendepunktbeitTextArea = uitextarea(app.StreckenanalysePanel);
- app.WendepunktbeitTextArea.Editable = 'off';
- app.WendepunktbeitTextArea.Position = [164 355 103 22];
- % Create SteigungimWendepunktTextAreaLabel
- app.SteigungimWendepunktTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.SteigungimWendepunktTextAreaLabel.HorizontalAlignment = 'right';
- app.SteigungimWendepunktTextAreaLabel.Position = [11 328 139 22];
- app.SteigungimWendepunktTextAreaLabel.Text = 'Steigung im Wendepunkt';
- % Create SteigungimWendepunktTextArea
- app.SteigungimWendepunktTextArea = uitextarea(app.StreckenanalysePanel);
- app.SteigungimWendepunktTextArea.Editable = 'off';
- app.SteigungimWendepunktTextArea.Position = [164 326 103 22];
- % Create FktWertimWendepunktTextAreaLabel
- app.FktWertimWendepunktTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.FktWertimWendepunktTextAreaLabel.HorizontalAlignment = 'center';
- app.FktWertimWendepunktTextAreaLabel.Position = [11 302 141 22];
- app.FktWertimWendepunktTextAreaLabel.Text = 'Fkt.-Wert im Wendepunkt';
- % Create FktWertimWendepunktTextArea
- app.FktWertimWendepunktTextArea = uitextarea(app.StreckenanalysePanel);
- app.FktWertimWendepunktTextArea.Editable = 'off';
- app.FktWertimWendepunktTextArea.Position = [164 297 103 22];
- % Create ProportionalbeiwertKpsTextAreaLabel
- app.ProportionalbeiwertKpsTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.ProportionalbeiwertKpsTextAreaLabel.HorizontalAlignment = 'center';
- app.ProportionalbeiwertKpsTextAreaLabel.Position = [10 274 133 22];
- app.ProportionalbeiwertKpsTextAreaLabel.Text = 'Proportionalbeiwert Kps';
- % Create ProportionalbeiwertKpsTextArea
- app.ProportionalbeiwertKpsTextArea = uitextarea(app.StreckenanalysePanel);
- app.ProportionalbeiwertKpsTextArea.Editable = 'off';
- app.ProportionalbeiwertKpsTextArea.Position = [163 268 104 22];
- % Create TauTextAreaLabel
- app.TauTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.TauTextAreaLabel.HorizontalAlignment = 'center';
- app.TauTextAreaLabel.Position = [9 245 25 22];
- app.TauTextAreaLabel.Text = 'Tau';
- % Create TauTextArea
- app.TauTextArea = uitextarea(app.StreckenanalysePanel);
- app.TauTextArea.Editable = 'off';
- app.TauTextArea.Position = [164 239 103 22];
- % Create SteigungKisoAusgleichTextAreaLabel
- app.SteigungKisoAusgleichTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.SteigungKisoAusgleichTextAreaLabel.HorizontalAlignment = 'center';
- app.SteigungKisoAusgleichTextAreaLabel.Position = [9 209 150 22];
- app.SteigungKisoAusgleichTextAreaLabel.Text = 'Steigung Kis (o. Ausgleich)';
- % Create SteigungKisoAusgleichTextArea
- app.SteigungKisoAusgleichTextArea = uitextarea(app.StreckenanalysePanel);
- app.SteigungKisoAusgleichTextArea.Editable = 'off';
- app.SteigungKisoAusgleichTextArea.Position = [164 210 103 22];
- % Create TuooAusgleichTextAreaLabel
- app.TuooAusgleichTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.TuooAusgleichTextAreaLabel.HorizontalAlignment = 'center';
- app.TuooAusgleichTextAreaLabel.Position = [11 184 103 22];
- app.TuooAusgleichTextAreaLabel.Text = 'Tuo (o. Ausgleich)';
- % Create TuooAusgleichTextArea
- app.TuooAusgleichTextArea = uitextarea(app.StreckenanalysePanel);
- app.TuooAusgleichTextArea.Editable = 'off';
- app.TuooAusgleichTextArea.Position = [164 181 103 22];
- % Create DmpfungDTextAreaLabel
- app.DmpfungDTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.DmpfungDTextAreaLabel.HorizontalAlignment = 'center';
- app.DmpfungDTextAreaLabel.Position = [11 152 73 22];
- app.DmpfungDTextAreaLabel.Text = 'Dämpfung D';
- % Create DmpfungDTextArea
- app.DmpfungDTextArea = uitextarea(app.StreckenanalysePanel);
- app.DmpfungDTextArea.Editable = 'off';
- app.DmpfungDTextArea.Position = [164 152 103 22];
- % Create berschwingweiteLabel_2
- app.berschwingweiteLabel_2 = uilabel(app.StreckenanalysePanel);
- app.berschwingweiteLabel_2.HorizontalAlignment = 'center';
- app.berschwingweiteLabel_2.Position = [9 123 118 22];
- app.berschwingweiteLabel_2.Text = 'Überschwingweite ü';
- % Create berschwingweiteTextArea
- app.berschwingweiteTextArea = uitextarea(app.StreckenanalysePanel);
- app.berschwingweiteTextArea.Editable = 'off';
- app.berschwingweiteTextArea.Position = [164 123 102 22];
- % Create EigenkreisfrequenzweLabel
- app.EigenkreisfrequenzweLabel = uilabel(app.StreckenanalysePanel);
- app.EigenkreisfrequenzweLabel.Position = [13 96 140 22];
- app.EigenkreisfrequenzweLabel.Text = 'Eigenkreisfrequenz we';
- % Create EigenkreisfrequenzweTextArea
- app.EigenkreisfrequenzweTextArea = uitextarea(app.StreckenanalysePanel);
- app.EigenkreisfrequenzweTextArea.Editable = 'off';
- app.EigenkreisfrequenzweTextArea.Position = [164 94 103 22];
- % Create VerzugszeitTuTextAreaLabel
- app.VerzugszeitTuTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.VerzugszeitTuTextAreaLabel.HorizontalAlignment = 'center';
- app.VerzugszeitTuTextAreaLabel.Position = [9 67 84 22];
- app.VerzugszeitTuTextAreaLabel.Text = 'Verzugszeit Tu';
- % Create VerzugszeitTuTextArea
- app.VerzugszeitTuTextArea = uitextarea(app.StreckenanalysePanel);
- app.VerzugszeitTuTextArea.Editable = 'off';
- app.VerzugszeitTuTextArea.Position = [164 65 103 22];
- % Create AusgleichszeitTgTextAreaLabel
- app.AusgleichszeitTgTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.AusgleichszeitTgTextAreaLabel.HorizontalAlignment = 'center';
- app.AusgleichszeitTgTextAreaLabel.Position = [9 40 100 22];
- app.AusgleichszeitTgTextAreaLabel.Text = 'Ausgleichszeit Tg';
- % Create AusgleichszeitTgTextArea
- app.AusgleichszeitTgTextArea = uitextarea(app.StreckenanalysePanel);
- app.AusgleichszeitTgTextArea.Editable = 'off';
- app.AusgleichszeitTgTextArea.Position = [164 36 103 22];
- % Create VerhltnisTuzuTgTextAreaLabel
- app.VerhltnisTuzuTgTextAreaLabel = uilabel(app.StreckenanalysePanel);
- app.VerhltnisTuzuTgTextAreaLabel.HorizontalAlignment = 'center';
- app.VerhltnisTuzuTgTextAreaLabel.Position = [9 7 108 22];
- app.VerhltnisTuzuTgTextAreaLabel.Text = 'Verhältnis Tu zu Tg';
- % Create VerhaeltnisTuzuTgTextArea
- app.VerhaeltnisTuzuTgTextArea = uitextarea(app.StreckenanalysePanel);
- app.VerhaeltnisTuzuTgTextArea.Editable = 'off';
- app.VerhaeltnisTuzuTgTextArea.Position = [164 8 103 22];
- % Create StreckenuebertragungsfunktionTextArea
- app.StreckenuebertragungsfunktionTextArea = uitextarea(app.StreckenpanelTab);
- app.StreckenuebertragungsfunktionTextArea.Editable = 'off';
- app.StreckenuebertragungsfunktionTextArea.HorizontalAlignment = 'center';
- app.StreckenuebertragungsfunktionTextArea.Position = [232 392 227 108];
- % Create HurwitzTextArea
- app.HurwitzTextArea = uitextarea(app.StreckenpanelTab);
- app.HurwitzTextArea.Position = [485 321 200 175];
- % Create KoeffizientdesZaehlersEditField
- app.KoeffizientdesZaehlersEditField = uieditfield(app.StreckenpanelTab, 'text');
- app.KoeffizientdesZaehlersEditField.Position = [31 425 183 22];
- % Create ZhlerLabel
- app.ZhlerLabel = uilabel(app.StreckenpanelTab);
- app.ZhlerLabel.HorizontalAlignment = 'right';
- app.ZhlerLabel.Position = [162 446 39 22];
- app.ZhlerLabel.Text = 'Zähler';
- % Create EditField
- app.EditField = uieditfield(app.StreckenpanelTab, 'text');
- app.EditField.ValueChangedFcn = createCallbackFcn(app, @ErstellenButtonPushed, true);
- app.EditField.Position = [31 383 183 22];
- % Create ErstellenButton
- app.ErstellenButton = uibutton(app.StreckenpanelTab, 'push');
- app.ErstellenButton.ButtonPushedFcn = createCallbackFcn(app, @ErstellenButtonPushed, true);
- app.ErstellenButton.Position = [33 352 110 22];
- app.ErstellenButton.Text = 'Erstellen';
- % Create StreckenreduktonButton
- app.StreckenreduktonButton = uibutton(app.StreckenpanelTab, 'push');
- app.StreckenreduktonButton.ButtonPushedFcn = createCallbackFcn(app, @StreckenreduktonButtonPushed, true);
- app.StreckenreduktonButton.Position = [33 333 110 22];
- app.StreckenreduktonButton.Text = 'Streckenredukton';
- % Create TotzeitEditFieldLabel
- app.TotzeitEditFieldLabel = uilabel(app.StreckenpanelTab);
- app.TotzeitEditFieldLabel.HorizontalAlignment = 'right';
- app.TotzeitEditFieldLabel.Position = [197 339 40 22];
- app.TotzeitEditFieldLabel.Text = 'Totzeit';
- % Create TotzeitEditField
- app.TotzeitEditField = uieditfield(app.StreckenpanelTab, 'text');
- app.TotzeitEditField.Position = [252 339 100 22];
- % Create Totzeitwirdauf0gesetztLabel
- app.Totzeitwirdauf0gesetztLabel = uilabel(app.StreckenpanelTab);
- app.Totzeitwirdauf0gesetztLabel.FontSize = 13;
- app.Totzeitwirdauf0gesetztLabel.FontWeight = 'bold';
- app.Totzeitwirdauf0gesetztLabel.FontColor = [1 0 0];
- app.Totzeitwirdauf0gesetztLabel.Visible = 'off';
- app.Totzeitwirdauf0gesetztLabel.Position = [220 312 163 22];
- app.Totzeitwirdauf0gesetztLabel.Text = 'Totzeit wird auf 0 gesetzt!';
- % Create Label
- app.Label = uilabel(app.StreckenpanelTab);
- app.Label.HorizontalAlignment = 'right';
- app.Label.FontSize = 16;
- app.Label.Visible = 'off';
- app.Label.Position = [142 191 25 22];
- app.Label.Text = '';
- % Create StreckeneingabeFehlerTextArea
- app.StreckeneingabeFehlerTextArea = uitextarea(app.StreckenpanelTab);
- app.StreckeneingabeFehlerTextArea.FontSize = 16;
- app.StreckeneingabeFehlerTextArea.Visible = 'off';
- app.StreckeneingabeFehlerTextArea.Position = [182 174 327 41];
- app.StreckeneingabeFehlerTextArea.Value = {'Fehler bei der Streckeneingabe!'};
- % Create RegelbarkeitTextAreaLabel
- app.RegelbarkeitTextAreaLabel = uilabel(app.StreckenpanelTab);
- app.RegelbarkeitTextAreaLabel.HorizontalAlignment = 'center';
- app.RegelbarkeitTextAreaLabel.Position = [803 55 73 22];
- app.RegelbarkeitTextAreaLabel.Text = 'Regelbarkeit';
- % Create RegelbarkeitTextArea
- app.RegelbarkeitTextArea = uitextarea(app.StreckenpanelTab);
- app.RegelbarkeitTextArea.Editable = 'off';
- app.RegelbarkeitTextArea.HorizontalAlignment = 'center';
- app.RegelbarkeitTextArea.Position = [702 5 275 46];
- % Create StreckebernehmeninDBRButton
- app.StreckebernehmeninDBRButton = uibutton(app.StreckenpanelTab, 'push');
- app.StreckebernehmeninDBRButton.ButtonPushedFcn = createCallbackFcn(app, @StreckebernehmeninDBRButtonPushed, true);
- app.StreckebernehmeninDBRButton.Position = [485 290 176 23];
- app.StreckebernehmeninDBRButton.Text = 'Strecke übernehmen in D-B-R';
- % Create PT1GliedliegtvorLabel
- app.PT1GliedliegtvorLabel = uilabel(app.StreckenpanelTab);
- app.PT1GliedliegtvorLabel.FontSize = 13;
- app.PT1GliedliegtvorLabel.FontWeight = 'bold';
- app.PT1GliedliegtvorLabel.FontColor = [1 0 0];
- app.PT1GliedliegtvorLabel.Visible = 'off';
- app.PT1GliedliegtvorLabel.Position = [518 512 119 22];
- app.PT1GliedliegtvorLabel.Text = 'PT1 Glied liegt vor';
- % Create PT2GliedoderhherLabel
- app.PT2GliedoderhherLabel = uilabel(app.StreckenpanelTab);
- app.PT2GliedoderhherLabel.FontSize = 13;
- app.PT2GliedoderhherLabel.FontWeight = 'bold';
- app.PT2GliedoderhherLabel.FontColor = [1 0 0];
- app.PT2GliedoderhherLabel.Visible = 'off';
- app.PT2GliedoderhherLabel.Position = [518 511 136 22];
- app.PT2GliedoderhherLabel.Text = 'PT2 Glied oder höher';
- % Create RegelpanelTab
- app.RegelpanelTab = uitab(app.TabGroup);
- app.RegelpanelTab.AutoResizeChildren = 'off';
- app.RegelpanelTab.Title = 'Regelpanel';
- % Create ReglerartButtonGroup
- app.ReglerartButtonGroup = uibuttongroup(app.RegelpanelTab);
- app.ReglerartButtonGroup.AutoResizeChildren = 'off';
- app.ReglerartButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @ReglerartButtonGroupSelectionChanged, true);
- app.ReglerartButtonGroup.TitlePosition = 'centertop';
- app.ReglerartButtonGroup.Title = 'Reglerart';
- app.ReglerartButtonGroup.Position = [28 417 192 106];
- % Create AnalogButton
- app.AnalogButton = uitogglebutton(app.ReglerartButtonGroup);
- app.AnalogButton.Text = 'Analog';
- app.AnalogButton.Position = [26 63 141 22];
- app.AnalogButton.Value = true;
- % Create DigitalButton
- app.DigitalButton = uitogglebutton(app.ReglerartButtonGroup);
- app.DigitalButton.Text = 'Digital';
- app.DigitalButton.Position = [26 40 141 22];
- % Create AbtastzeitinSekLabel
- app.AbtastzeitinSekLabel = uilabel(app.ReglerartButtonGroup);
- app.AbtastzeitinSekLabel.HorizontalAlignment = 'right';
- app.AbtastzeitinSekLabel.Visible = 'off';
- app.AbtastzeitinSekLabel.Position = [-10 4 98 22];
- app.AbtastzeitinSekLabel.Text = 'Abtastzeit in Sek.';
- % Create AbtastzeitinSekundenEditField
- app.AbtastzeitinSekundenEditField = uieditfield(app.ReglerartButtonGroup, 'numeric');
- app.AbtastzeitinSekundenEditField.ValueChangedFcn = createCallbackFcn(app, @AbtastzeitinSekundenEditFieldValueChanged, true);
- app.AbtastzeitinSekundenEditField.Visible = 'off';
- app.AbtastzeitinSekundenEditField.Position = [100 3 87 22];
- % Create ReglertypButtonGroup
- app.ReglertypButtonGroup = uibuttongroup(app.RegelpanelTab);
- app.ReglertypButtonGroup.AutoResizeChildren = 'off';
- app.ReglertypButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @ReglertypButtonGroupSelectionChanged, true);
- app.ReglertypButtonGroup.TitlePosition = 'centertop';
- app.ReglertypButtonGroup.Title = 'Reglertyp';
- app.ReglertypButtonGroup.Position = [274 397 123 122];
- % Create PButton
- app.PButton = uitogglebutton(app.ReglertypButtonGroup);
- app.PButton.Text = 'P';
- app.PButton.Position = [12 69 100 22];
- % Create PIButton
- app.PIButton = uitogglebutton(app.ReglertypButtonGroup);
- app.PIButton.Text = 'PI';
- app.PIButton.Position = [12 48 100 22];
- % Create PDButton
- app.PDButton = uitogglebutton(app.ReglertypButtonGroup);
- app.PDButton.Text = 'PD';
- app.PDButton.Position = [12 27 100 22];
- % Create PIDButton
- app.PIDButton = uitogglebutton(app.ReglertypButtonGroup);
- app.PIDButton.Text = 'PID';
- app.PIDButton.Position = [12 6 100 22];
- % Create DummyButton2
- app.DummyButton2 = uitogglebutton(app.ReglertypButtonGroup);
- app.DummyButton2.Enable = 'off';
- app.DummyButton2.Visible = 'off';
- app.DummyButton2.Text = '';
- app.DummyButton2.Position = [12 -15 100 22];
- app.DummyButton2.Value = true;
- % Create KpKnob
- app.KpKnob = uiknob(app.RegelpanelTab, 'continuous');
- app.KpKnob.Limits = [0 10];
- app.KpKnob.ValueChangedFcn = createCallbackFcn(app, @KpKnobValueChanged, true);
- app.KpKnob.ValueChangingFcn = createCallbackFcn(app, @KpKnobValueChanging, true);
- app.KpKnob.Enable = 'off';
- app.KpKnob.Position = [466 442 60 60];
- % Create TvKnob
- app.TvKnob = uiknob(app.RegelpanelTab, 'continuous');
- app.TvKnob.Limits = [0 10];
- app.TvKnob.ValueChangedFcn = createCallbackFcn(app, @TvKnobValueChanged, true);
- app.TvKnob.ValueChangingFcn = createCallbackFcn(app, @TvKnobValueChanging, true);
- app.TvKnob.Enable = 'off';
- app.TvKnob.Position = [616 441 60 60];
- % Create TnKnob
- app.TnKnob = uiknob(app.RegelpanelTab, 'continuous');
- app.TnKnob.Limits = [0 10];
- app.TnKnob.ValueChangedFcn = createCallbackFcn(app, @TnKnobValueChanged, true);
- app.TnKnob.ValueChangingFcn = createCallbackFcn(app, @TnKnobValueChanging, true);
- app.TnKnob.Enable = 'off';
- app.TnKnob.Position = [768 440 60 60];
- % Create RegelparameterPanel
- app.RegelparameterPanel = uipanel(app.RegelpanelTab);
- app.RegelparameterPanel.AutoResizeChildren = 'off';
- app.RegelparameterPanel.TitlePosition = 'centertop';
- app.RegelparameterPanel.Title = 'Regelparameter';
- app.RegelparameterPanel.Position = [27 257 193 158];
- % Create mitAusgleichButtonGroup
- app.mitAusgleichButtonGroup = uibuttongroup(app.RegelparameterPanel);
- app.mitAusgleichButtonGroup.AutoResizeChildren = 'off';
- app.mitAusgleichButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @mitAusgleichButtonGroupSelectionChanged, true);
- app.mitAusgleichButtonGroup.TitlePosition = 'centertop';
- app.mitAusgleichButtonGroup.Title = 'mit Ausgleich';
- app.mitAusgleichButtonGroup.Visible = 'off';
- app.mitAusgleichButtonGroup.Position = [27 22 141 95];
- % Create ZieglerNicholsButton
- app.ZieglerNicholsButton = uitogglebutton(app.mitAusgleichButtonGroup);
- app.ZieglerNicholsButton.Text = 'Ziegler-Nichols';
- app.ZieglerNicholsButton.Position = [11 42 119 22];
- % Create DummyButton
- app.DummyButton = uitogglebutton(app.mitAusgleichButtonGroup);
- app.DummyButton.Enable = 'off';
- app.DummyButton.Visible = 'off';
- app.DummyButton.Text = '';
- app.DummyButton.Position = [11 1 150 22];
- app.DummyButton.Value = true;
- % Create CHRButtonmA
- app.CHRButtonmA = uitogglebutton(app.mitAusgleichButtonGroup);
- app.CHRButtonmA.Text = 'CHR';
- app.CHRButtonmA.Position = [11 11 119 22];
- % Create ohneAusgleichButtonGroup
- app.ohneAusgleichButtonGroup = uibuttongroup(app.RegelparameterPanel);
- app.ohneAusgleichButtonGroup.AutoResizeChildren = 'off';
- app.ohneAusgleichButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @ohneAusgleichButtonGroupSelectionChanged, true);
- app.ohneAusgleichButtonGroup.TitlePosition = 'centertop';
- app.ohneAusgleichButtonGroup.Title = 'ohne Ausgleich';
- app.ohneAusgleichButtonGroup.Visible = 'off';
- app.ohneAusgleichButtonGroup.Position = [25 21 141 95];
- % Create DrFiegerButton
- app.DrFiegerButton = uitogglebutton(app.ohneAusgleichButtonGroup);
- app.DrFiegerButton.Text = 'Dr. Fieger';
- app.DrFiegerButton.Position = [11 42 119 22];
- % Create DummyButton3
- app.DummyButton3 = uitogglebutton(app.ohneAusgleichButtonGroup);
- app.DummyButton3.Enable = 'off';
- app.DummyButton3.Visible = 'off';
- app.DummyButton3.Text = '';
- app.DummyButton3.Position = [11 1 151 22];
- app.DummyButton3.Value = true;
- % Create CHRButtonoA
- app.CHRButtonoA = uitogglebutton(app.ohneAusgleichButtonGroup);
- app.CHRButtonoA.Text = 'CHR';
- app.CHRButtonoA.Position = [12 13 118 22];
- % Create DigitalreglerButtonGroup
- app.DigitalreglerButtonGroup = uibuttongroup(app.RegelparameterPanel);
- app.DigitalreglerButtonGroup.AutoResizeChildren = 'off';
- app.DigitalreglerButtonGroup.Tooltip = {'grün hinterlegt bei ausreichender Abtastzeit'; ' sonst rot hinterlegt'};
- app.DigitalreglerButtonGroup.TitlePosition = 'centertop';
- app.DigitalreglerButtonGroup.Title = 'Digitalregler';
- app.DigitalreglerButtonGroup.Visible = 'off';
- app.DigitalreglerButtonGroup.Scrollable = 'on';
- app.DigitalreglerButtonGroup.Position = [27 23 139 86];
- % Create TCAButton
- app.TCAButton = uitogglebutton(app.DigitalreglerButtonGroup);
- app.TCAButton.Text = 'TCA';
- app.TCAButton.Position = [11 33 117 22];
- app.TCAButton.Value = true;
- % Create TakahashiPIDButton
- app.TakahashiPIDButton = uitogglebutton(app.DigitalreglerButtonGroup);
- app.TakahashiPIDButton.Text = 'Takahashi-PID';
- app.TakahashiPIDButton.Position = [11 12 117 22];
- % Create DummyButtonPID
- app.DummyButtonPID = uitogglebutton(app.DigitalreglerButtonGroup);
- app.DummyButtonPID.Visible = 'off';
- app.DummyButtonPID.Text = 'DummyButtonPID';
- app.DummyButtonPID.Position = [5 -9 112 22];
- % Create KpKnobLabel
- app.KpKnobLabel = uilabel(app.RegelpanelTab);
- app.KpKnobLabel.HorizontalAlignment = 'center';
- app.KpKnobLabel.Enable = 'off';
- app.KpKnobLabel.Position = [485 386 25 22];
- app.KpKnobLabel.Text = 'Kp';
- % Create TvKnobLabel
- app.TvKnobLabel = uilabel(app.RegelpanelTab);
- app.TvKnobLabel.HorizontalAlignment = 'center';
- app.TvKnobLabel.Enable = 'off';
- app.TvKnobLabel.Position = [634 385 25 22];
- app.TvKnobLabel.Text = 'Tv';
- % Create TnKnobLabel
- app.TnKnobLabel = uilabel(app.RegelpanelTab);
- app.TnKnobLabel.HorizontalAlignment = 'center';
- app.TnKnobLabel.Enable = 'off';
- app.TnKnobLabel.Position = [786 384 25 22];
- app.TnKnobLabel.Text = 'Tn';
- % Create ReglerberechnenButton
- app.ReglerberechnenButton = uibutton(app.RegelpanelTab, 'push');
- app.ReglerberechnenButton.ButtonPushedFcn = createCallbackFcn(app, @ReglerberechnenButtonPushed, true);
- app.ReglerberechnenButton.Enable = 'off';
- app.ReglerberechnenButton.Position = [280.5 361 111 26];
- app.ReglerberechnenButton.Text = 'Regler berechnen';
- % Create KpEditField
- app.KpEditField = uieditfield(app.RegelpanelTab, 'numeric');
- app.KpEditField.Limits = [0 Inf];
- app.KpEditField.ValueDisplayFormat = '%.5f';
- app.KpEditField.ValueChangedFcn = createCallbackFcn(app, @KpEditFieldValueChanged, true);
- app.KpEditField.Enable = 'off';
- app.KpEditField.Position = [435 363 121 22];
- % Create TvEditField
- app.TvEditField = uieditfield(app.RegelpanelTab, 'numeric');
- app.TvEditField.Limits = [0 Inf];
- app.TvEditField.ValueDisplayFormat = '%.5f';
- app.TvEditField.ValueChangedFcn = createCallbackFcn(app, @TvEditFieldValueChanged, true);
- app.TvEditField.Enable = 'off';
- app.TvEditField.Position = [589 365 113 22];
- % Create TnEditField
- app.TnEditField = uieditfield(app.RegelpanelTab, 'numeric');
- app.TnEditField.Limits = [0 Inf];
- app.TnEditField.ValueDisplayFormat = '%.5f';
- app.TnEditField.ValueChangedFcn = createCallbackFcn(app, @TnEditFieldValueChanged, true);
- app.TnEditField.Enable = 'off';
- app.TnEditField.Position = [745 365 105 22];
- % Create RegelfehlermeldungLabel
- app.RegelfehlermeldungLabel = uilabel(app.RegelpanelTab);
- app.RegelfehlermeldungLabel.HorizontalAlignment = 'center';
- app.RegelfehlermeldungLabel.FontWeight = 'bold';
- app.RegelfehlermeldungLabel.Position = [236 305 212 42];
- app.RegelfehlermeldungLabel.Text = {'Bitte Regelparameter und'; 'Reglertyp auswählen!'};
- % Create KnobEditLabel
- app.KnobEditLabel = uilabel(app.RegelpanelTab);
- app.KnobEditLabel.HorizontalAlignment = 'center';
- app.KnobEditLabel.Position = [595 325 104 22];
- app.KnobEditLabel.Text = 'Drehknaufgrenzen';
- % Create KnobEditDropDown
- app.KnobEditDropDown = uidropdown(app.RegelpanelTab);
- app.KnobEditDropDown.Items = {'Kp', 'Tv', 'Tn'};
- app.KnobEditDropDown.Enable = 'off';
- app.KnobEditDropDown.Position = [597 296 100 22];
- app.KnobEditDropDown.Value = 'Kp';
- % Create MinLabel
- app.MinLabel = uilabel(app.RegelpanelTab);
- app.MinLabel.HorizontalAlignment = 'right';
- app.MinLabel.Enable = 'off';
- app.MinLabel.Position = [573 267 25 22];
- app.MinLabel.Text = 'Min';
- % Create MaxLabel
- app.MaxLabel = uilabel(app.RegelpanelTab);
- app.MaxLabel.HorizontalAlignment = 'right';
- app.MaxLabel.Enable = 'off';
- app.MaxLabel.Position = [695 267 28 22];
- app.MaxLabel.Text = 'Max';
- % Create GuetezielkriterienPanel
- app.GuetezielkriterienPanel = uipanel(app.RegelpanelTab);
- app.GuetezielkriterienPanel.AutoResizeChildren = 'off';
- app.GuetezielkriterienPanel.TitlePosition = 'centertop';
- app.GuetezielkriterienPanel.Title = 'Gütezielkriterien';
- app.GuetezielkriterienPanel.Visible = 'off';
- app.GuetezielkriterienPanel.Position = [28 33 193 222];
- % Create ParametersatzButtonGroup
- app.ParametersatzButtonGroup = uibuttongroup(app.GuetezielkriterienPanel);
- app.ParametersatzButtonGroup.AutoResizeChildren = 'off';
- app.ParametersatzButtonGroup.TitlePosition = 'centertop';
- app.ParametersatzButtonGroup.Title = 'Parametersatz';
- app.ParametersatzButtonGroup.Position = [10 104 171 95];
- % Create AperiodischButton
- app.AperiodischButton = uitogglebutton(app.ParametersatzButtonGroup);
- app.AperiodischButton.Text = 'Aperiodisch';
- app.AperiodischButton.Position = [11 42 151 22];
- % Create ueberschwingButton
- app.ueberschwingButton = uitogglebutton(app.ParametersatzButtonGroup);
- app.ueberschwingButton.Text = '20% Überschwingen';
- app.ueberschwingButton.Position = [11 11 150 22];
- % Create DummyButton4
- app.DummyButton4 = uitogglebutton(app.ParametersatzButtonGroup);
- app.DummyButton4.Enable = 'off';
- app.DummyButton4.Visible = 'off';
- app.DummyButton4.Text = '';
- app.DummyButton4.Position = [11 1 150 22];
- app.DummyButton4.Value = true;
- % Create VerhaltenButtonGroup
- app.VerhaltenButtonGroup = uibuttongroup(app.GuetezielkriterienPanel);
- app.VerhaltenButtonGroup.AutoResizeChildren = 'off';
- app.VerhaltenButtonGroup.TitlePosition = 'centertop';
- app.VerhaltenButtonGroup.Title = 'Verhalten';
- app.VerhaltenButtonGroup.Position = [10 -1 171 95];
- % Create StoerverhaltenButton
- app.StoerverhaltenButton = uitogglebutton(app.VerhaltenButtonGroup);
- app.StoerverhaltenButton.Text = 'Störverhalten';
- app.StoerverhaltenButton.Position = [11 42 151 22];
- % Create FuehrungsverhaltenButton
- app.FuehrungsverhaltenButton = uitogglebutton(app.VerhaltenButtonGroup);
- app.FuehrungsverhaltenButton.Text = 'Führungsverhalten';
- app.FuehrungsverhaltenButton.Position = [11 11 150 22];
- % Create DummyButton5
- app.DummyButton5 = uitogglebutton(app.VerhaltenButtonGroup);
- app.DummyButton5.Enable = 'off';
- app.DummyButton5.Visible = 'off';
- app.DummyButton5.Text = '';
- app.DummyButton5.Position = [11 1 150 22];
- app.DummyButton5.Value = true;
- % Create SimulationszeitEditFieldLabel
- app.SimulationszeitEditFieldLabel = uilabel(app.RegelpanelTab);
- app.SimulationszeitEditFieldLabel.HorizontalAlignment = 'right';
- app.SimulationszeitEditFieldLabel.Position = [248 222 86 22];
- app.SimulationszeitEditFieldLabel.Text = 'Simulationszeit';
- % Create SimulationszeitEditField
- app.SimulationszeitEditField = uieditfield(app.RegelpanelTab, 'text');
- app.SimulationszeitEditField.ValueChangedFcn = createCallbackFcn(app, @SimulationszeitEditFieldValueChanged, true);
- app.SimulationszeitEditField.Position = [349 222 100 22];
- app.SimulationszeitEditField.Value = '10';
- % Create KnobEditMin
- app.KnobEditMin = uieditfield(app.RegelpanelTab, 'numeric');
- app.KnobEditMin.Limits = [0 Inf];
- app.KnobEditMin.HorizontalAlignment = 'center';
- app.KnobEditMin.Enable = 'off';
- app.KnobEditMin.Position = [536 246 100 22];
- % Create KnobEditMax
- app.KnobEditMax = uieditfield(app.RegelpanelTab, 'numeric');
- app.KnobEditMax.Limits = [0 Inf];
- app.KnobEditMax.HorizontalAlignment = 'center';
- app.KnobEditMax.Enable = 'off';
- app.KnobEditMax.Position = [659 246 100 22];
- % Create DummySim1feldTextAreaLabel
- app.DummySim1feldTextAreaLabel = uilabel(app.RegelpanelTab);
- app.DummySim1feldTextAreaLabel.HorizontalAlignment = 'right';
- app.DummySim1feldTextAreaLabel.Visible = 'off';
- app.DummySim1feldTextAreaLabel.Position = [748 220 94 22];
- app.DummySim1feldTextAreaLabel.Text = 'DummySim1feld';
- % Create TextAreaLabel
- app.TextAreaLabel = uilabel(app.RegelpanelTab);
- app.TextAreaLabel.HorizontalAlignment = 'right';
- app.TextAreaLabel.Visible = 'off';
- app.TextAreaLabel.Position = [768 226 56 22];
- app.TextAreaLabel.Text = 'Text Area';
- % Create Modellsimulierendummyfunktion
- app.Modellsimulierendummyfunktion = uitextarea(app.RegelpanelTab);
- app.Modellsimulierendummyfunktion.ValueChangedFcn = createCallbackFcn(app, @ModellsimulierendummyfunktionValueChanged, true);
- app.Modellsimulierendummyfunktion.Visible = 'off';
- app.Modellsimulierendummyfunktion.Position = [839 190 150 60];
- % Create DummySim1feldTextArea
- app.DummySim1feldTextArea = uitextarea(app.RegelpanelTab);
- app.DummySim1feldTextArea.Visible = 'off';
- app.DummySim1feldTextArea.Position = [857 184 150 60];
- % Create DmpfungThetaTextAreaLabel
- app.DmpfungThetaTextAreaLabel = uilabel(app.RegelpanelTab);
- app.DmpfungThetaTextAreaLabel.HorizontalAlignment = 'center';
- app.DmpfungThetaTextAreaLabel.Visible = 'off';
- app.DmpfungThetaTextAreaLabel.Position = [264 203 95 22];
- app.DmpfungThetaTextAreaLabel.Text = 'Dämpfung Theta';
- % Create KnobEditButton
- app.KnobEditButton = uibutton(app.RegelpanelTab, 'push');
- app.KnobEditButton.ButtonPushedFcn = createCallbackFcn(app, @KnobEditButtonPushed, true);
- app.KnobEditButton.Enable = 'off';
- app.KnobEditButton.Position = [599 204 100 22];
- app.KnobEditButton.Text = 'Ändern';
- % Create DmpfungThetaTextArea
- app.DmpfungThetaTextArea = uitextarea(app.RegelpanelTab);
- app.DmpfungThetaTextArea.Visible = 'off';
- app.DmpfungThetaTextArea.Position = [236 179 150 25];
- % Create LimitfehlerLabel
- app.LimitfehlerLabel = uilabel(app.RegelpanelTab);
- app.LimitfehlerLabel.FontWeight = 'bold';
- app.LimitfehlerLabel.Visible = 'off';
- app.LimitfehlerLabel.Position = [532 169 227 22];
- app.LimitfehlerLabel.Text = 'Gewählte Grenzen sind nicht zulässig!';
- % Create bertragungsfunktiondesPIDReglersLabel
- app.bertragungsfunktiondesPIDReglersLabel = uilabel(app.RegelpanelTab);
- app.bertragungsfunktiondesPIDReglersLabel.HorizontalAlignment = 'center';
- app.bertragungsfunktiondesPIDReglersLabel.Position = [342 137 213 22];
- app.bertragungsfunktiondesPIDReglersLabel.Text = 'Übertragungsfunktion des PID-Reglers';
- % Create NullstellendesPIDReglersTextAreaLabel
- app.NullstellendesPIDReglersTextAreaLabel = uilabel(app.RegelpanelTab);
- app.NullstellendesPIDReglersTextAreaLabel.HorizontalAlignment = 'center';
- app.NullstellendesPIDReglersTextAreaLabel.Position = [571 137 152 22];
- app.NullstellendesPIDReglersTextAreaLabel.Text = 'Nullstellen des PID-Reglers';
- % Create PolstellendesPIDReglersTextAreaLabel
- app.PolstellendesPIDReglersTextAreaLabel = uilabel(app.RegelpanelTab);
- app.PolstellendesPIDReglersTextAreaLabel.HorizontalAlignment = 'center';
- app.PolstellendesPIDReglersTextAreaLabel.Position = [735 137 149 22];
- app.PolstellendesPIDReglersTextAreaLabel.Text = 'Polstellen des PID-Reglers';
- % Create PIDUebertragungsfunktionTextArea
- app.PIDUebertragungsfunktionTextArea = uitextarea(app.RegelpanelTab);
- app.PIDUebertragungsfunktionTextArea.Editable = 'off';
- app.PIDUebertragungsfunktionTextArea.HorizontalAlignment = 'center';
- app.PIDUebertragungsfunktionTextArea.Position = [334 32 227 108];
- % Create NullstellendesPIDReglersTextArea
- app.NullstellendesPIDReglersTextArea = uitextarea(app.RegelpanelTab);
- app.NullstellendesPIDReglersTextArea.Editable = 'off';
- app.NullstellendesPIDReglersTextArea.Position = [567 33 159 105];
- % Create PolstellendesPIDReglersTextArea
- app.PolstellendesPIDReglersTextArea = uitextarea(app.RegelpanelTab);
- app.PolstellendesPIDReglersTextArea.Editable = 'off';
- app.PolstellendesPIDReglersTextArea.Position = [735 33 149 105];
- % Create FrequenzkennlinienverfahrenTab
- app.FrequenzkennlinienverfahrenTab = uitab(app.TabGroup);
- app.FrequenzkennlinienverfahrenTab.Title = 'Frequenzkennlinienverfahren';
- % Create GeschlossenerRegelkreisDiagramm_FKV
- app.GeschlossenerRegelkreisDiagramm_FKV = uiaxes(app.FrequenzkennlinienverfahrenTab);
- title(app.GeschlossenerRegelkreisDiagramm_FKV, 'Sprungantwort von T(s)')
- xlabel(app.GeschlossenerRegelkreisDiagramm_FKV, 'Zeit[s]')
- ylabel(app.GeschlossenerRegelkreisDiagramm_FKV, 'Amplitude')
- app.GeschlossenerRegelkreisDiagramm_FKV.YGrid = 'on';
- app.GeschlossenerRegelkreisDiagramm_FKV.Position = [10 8 439 247];
- % Create VorgabenanTsLabel
- app.VorgabenanTsLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.VorgabenanTsLabel.Position = [187 526 106 22];
- app.VorgabenanTsLabel.Text = 'Vorgaben an $T(s)$';
- % Create BodevonG0sPanel
- app.BodevonG0sPanel = uipanel(app.FrequenzkennlinienverfahrenTab);
- app.BodevonG0sPanel.TitlePosition = 'centertop';
- app.BodevonG0sPanel.Title = 'Bode von G0(s)';
- app.BodevonG0sPanel.FontWeight = 'bold';
- app.BodevonG0sPanel.FontSize = 14;
- app.BodevonG0sPanel.Position = [527 9 489 518];
- % Create MagnitudeDiagramm_FKV
- app.MagnitudeDiagramm_FKV = uiaxes(app.BodevonG0sPanel);
- ylabel(app.MagnitudeDiagramm_FKV, 'Magnitude(dB)')
- app.MagnitudeDiagramm_FKV.YGrid = 'on';
- app.MagnitudeDiagramm_FKV.Position = [40 240 433 228];
- % Create PhaseDiagramm_FKV
- app.PhaseDiagramm_FKV = uiaxes(app.BodevonG0sPanel);
- xlabel(app.PhaseDiagramm_FKV, 'Frequency(rad/s)')
- ylabel(app.PhaseDiagramm_FKV, 'Phase(deg)')
- app.PhaseDiagramm_FKV.YGrid = 'on';
- app.PhaseDiagramm_FKV.Position = [40 13 433 228];
- % Create MarginLabel_FKV
- app.MarginLabel_FKV = uilabel(app.BodevonG0sPanel);
- app.MarginLabel_FKV.HorizontalAlignment = 'center';
- app.MarginLabel_FKV.FontWeight = 'bold';
- app.MarginLabel_FKV.Position = [41 465 433 22];
- app.MarginLabel_FKV.Text = '';
- % Create FKVButton
- app.FKVButton = uibutton(app.FrequenzkennlinienverfahrenTab, 'push');
- app.FKVButton.ButtonPushedFcn = createCallbackFcn(app, @FKVButtonPushed, true);
- app.FKVButton.FontWeight = 'bold';
- app.FKVButton.Position = [174 403 111 26];
- app.FKVButton.Text = 'FKV';
- % Create HelpButton
- app.HelpButton = uibutton(app.FrequenzkennlinienverfahrenTab, 'push');
- app.HelpButton.ButtonPushedFcn = createCallbackFcn(app, @HelpButtonPushed, true);
- app.HelpButton.Icon = fullfile(pathToMLAPP, 'Info_icon-72a7cf.svg.png');
- app.HelpButton.IconAlignment = 'center';
- app.HelpButton.Tooltip = {'Hilfe'};
- app.HelpButton.Position = [7 511 36 34];
- app.HelpButton.Text = '';
- % Create Lamp_FKV
- app.Lamp_FKV = uilamp(app.FrequenzkennlinienverfahrenTab);
- app.Lamp_FKV.Tooltip = {'siehe Hilfe für Zustandsbeschreibung'};
- app.Lamp_FKV.Position = [998 533 12 12];
- app.Lamp_FKV.Color = [0.7216 0.2706 1];
- % Create AuswertungPanel
- app.AuswertungPanel = uipanel(app.FrequenzkennlinienverfahrenTab);
- app.AuswertungPanel.TitlePosition = 'centertop';
- app.AuswertungPanel.Title = 'Auswertung';
- app.AuswertungPanel.BackgroundColor = [0.902 0.902 0.902];
- app.AuswertungPanel.FontWeight = 'bold';
- app.AuswertungPanel.Position = [301 261 216 187];
- % Create GridLayout
- app.GridLayout = uigridlayout(app.AuswertungPanel);
- app.GridLayout.ColumnWidth = {'2x', '3x', '1x', '3x', '1x'};
- app.GridLayout.RowHeight = {'0.8x', '1x', '1x', '1x', '1x'};
- app.GridLayout.ColumnSpacing = 0;
- app.GridLayout.RowSpacing = 10.8120771408081;
- app.GridLayout.Padding = [0 10.8120771408081 0 10.8120771408081];
- % Create tr_istTextArea
- app.tr_istTextArea = uitextarea(app.GridLayout);
- app.tr_istTextArea.Editable = 'off';
- app.tr_istTextArea.Layout.Row = 5;
- app.tr_istTextArea.Layout.Column = 4;
- % Create u_istTextArea
- app.u_istTextArea = uitextarea(app.GridLayout);
- app.u_istTextArea.Editable = 'off';
- app.u_istTextArea.Layout.Row = 4;
- app.u_istTextArea.Layout.Column = 4;
- % Create pm_sollTextArea
- app.pm_sollTextArea = uitextarea(app.GridLayout);
- app.pm_sollTextArea.Editable = 'off';
- app.pm_sollTextArea.Tooltip = {'Soll-Phasenrand'};
- app.pm_sollTextArea.Layout.Row = 2;
- app.pm_sollTextArea.Layout.Column = 2;
- % Create pm_istTextArea
- app.pm_istTextArea = uitextarea(app.GridLayout);
- app.pm_istTextArea.Editable = 'off';
- app.pm_istTextArea.Tooltip = {'Ist-Phasenrand'};
- app.pm_istTextArea.Layout.Row = 2;
- app.pm_istTextArea.Layout.Column = 4;
- % Create wc_sollTextArea
- app.wc_sollTextArea = uitextarea(app.GridLayout);
- app.wc_sollTextArea.Editable = 'off';
- app.wc_sollTextArea.Tooltip = {'Soll-Durchtrittsfrequenz'};
- app.wc_sollTextArea.Layout.Row = 3;
- app.wc_sollTextArea.Layout.Column = 2;
- % Create wc_istTextArea
- app.wc_istTextArea = uitextarea(app.GridLayout);
- app.wc_istTextArea.Editable = 'off';
- app.wc_istTextArea.Tooltip = {'Ist-Durchtrittsfrequenz'};
- app.wc_istTextArea.Layout.Row = 3;
- app.wc_istTextArea.Layout.Column = 4;
- % Create pm_Label
- app.pm_Label = uilabel(app.GridLayout);
- app.pm_Label.HorizontalAlignment = 'center';
- app.pm_Label.Layout.Row = 2;
- app.pm_Label.Layout.Column = 1;
- app.pm_Label.Text = '$\varphi_{pm}$ :';
- % Create SOLL_Label
- app.SOLL_Label = uilabel(app.GridLayout);
- app.SOLL_Label.HorizontalAlignment = 'center';
- app.SOLL_Label.Layout.Row = 1;
- app.SOLL_Label.Layout.Column = 2;
- app.SOLL_Label.Text = 'SOLL';
- % Create IST_Label
- app.IST_Label = uilabel(app.GridLayout);
- app.IST_Label.HorizontalAlignment = 'center';
- app.IST_Label.Layout.Row = 1;
- app.IST_Label.Layout.Column = 4;
- app.IST_Label.Text = 'IST';
- % Create wc_Label
- app.wc_Label = uilabel(app.GridLayout);
- app.wc_Label.HorizontalAlignment = 'center';
- app.wc_Label.Layout.Row = 3;
- app.wc_Label.Layout.Column = 1;
- app.wc_Label.Text = '$\omega_c$ :';
- % Create u_Label
- app.u_Label = uilabel(app.GridLayout);
- app.u_Label.HorizontalAlignment = 'center';
- app.u_Label.Layout.Row = 4;
- app.u_Label.Layout.Column = 1;
- app.u_Label.Text = '$\ddot{u}$ :';
- % Create tr_Label
- app.tr_Label = uilabel(app.GridLayout);
- app.tr_Label.HorizontalAlignment = 'center';
- app.tr_Label.Layout.Row = 5;
- app.tr_Label.Layout.Column = 1;
- app.tr_Label.Text = '$t_r$ :';
- % Create u_sollTextArea
- app.u_sollTextArea = uitextarea(app.GridLayout);
- app.u_sollTextArea.Editable = 'off';
- app.u_sollTextArea.Layout.Row = 4;
- app.u_sollTextArea.Layout.Column = 2;
- % Create tr_sollTextArea
- app.tr_sollTextArea = uitextarea(app.GridLayout);
- app.tr_sollTextArea.Editable = 'off';
- app.tr_sollTextArea.Layout.Row = 5;
- app.tr_sollTextArea.Layout.Column = 2;
- % Create Anstiegszeitt_rsEditFieldLabel
- app.Anstiegszeitt_rsEditFieldLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.Anstiegszeitt_rsEditFieldLabel.HorizontalAlignment = 'right';
- app.Anstiegszeitt_rsEditFieldLabel.Position = [61 501 107 22];
- app.Anstiegszeitt_rsEditFieldLabel.Text = 'Anstiegszeit $t_r$ [s]';
- % Create Anstiegszeitt_rsEditField
- app.Anstiegszeitt_rsEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
- app.Anstiegszeitt_rsEditField.Limits = [0 Inf];
- app.Anstiegszeitt_rsEditField.Position = [183 501 100 22];
- % Create berschwingenLabel
- app.berschwingenLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.berschwingenLabel.HorizontalAlignment = 'right';
- app.berschwingenLabel.Position = [39 472 129 22];
- app.berschwingenLabel.Text = 'Überschwingen $\ddot{u}$ [\%]';
- % Create berschwingenddotuEditField
- app.berschwingenddotuEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
- app.berschwingenddotuEditField.Limits = [0 Inf];
- app.berschwingenddotuEditField.Position = [183 472 100 22];
- % Create Regelabweichunge_inftyEditFieldLabel
- app.Regelabweichunge_inftyEditFieldLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.Regelabweichunge_inftyEditFieldLabel.HorizontalAlignment = 'right';
- app.Regelabweichunge_inftyEditFieldLabel.Position = [41 444 126 22];
- app.Regelabweichunge_inftyEditFieldLabel.Text = 'Regelabweichung $e_{\infty}$';
- % Create Regelabweichunge_inftyEditField
- app.Regelabweichunge_inftyEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
- app.Regelabweichunge_inftyEditField.Limits = [0 0.99999];
- app.Regelabweichunge_inftyEditField.Position = [183 444 100 22];
- % Create FhrungDropDownLabel
- app.FhrungDropDownLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.FhrungDropDownLabel.HorizontalAlignment = 'right';
- app.FhrungDropDownLabel.Position = [330 470 56 22];
- app.FhrungDropDownLabel.Text = 'Führung';
- % Create FuehrungDropDown
- app.FuehrungDropDown = uidropdown(app.FrequenzkennlinienverfahrenTab);
- app.FuehrungDropDown.Items = {'Sprung', 'Rampe'};
- app.FuehrungDropDown.Tooltip = {'Form der Führungsgröße'};
- app.FuehrungDropDown.Position = [399 471 100 22];
- app.FuehrungDropDown.Value = 'Sprung';
- % Create konstPhasedegreeEditFieldLabel
- app.konstPhasedegreeEditFieldLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.konstPhasedegreeEditFieldLabel.HorizontalAlignment = 'right';
- app.konstPhasedegreeEditFieldLabel.Position = [297 501 89 22];
- app.konstPhasedegreeEditFieldLabel.Text = 'konstPhase [\degree]';
- % Create konstPhasedegreeEditField
- app.konstPhasedegreeEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
- app.konstPhasedegreeEditField.Limits = [0 15];
- app.konstPhasedegreeEditField.Position = [399 501 100 22];
- app.konstPhasedegreeEditField.Value = 6;
- % Create PReglerLabel
- app.PReglerLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.PReglerLabel.HorizontalAlignment = 'center';
- app.PReglerLabel.Position = [75 364 166 22];
- app.PReglerLabel.Text = 'Regler $G_R(s)$';
- % Create ReglerG_RsTextArea
- app.ReglerG_RsTextArea = uitextarea(app.FrequenzkennlinienverfahrenTab);
- app.ReglerG_RsTextArea.Editable = 'off';
- app.ReglerG_RsTextArea.HorizontalAlignment = 'center';
- app.ReglerG_RsTextArea.Position = [43 268 231 98];
- % Create MittenfreqLeadTextAreaLabel
- app.MittenfreqLeadTextAreaLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.MittenfreqLeadTextAreaLabel.HorizontalAlignment = 'center';
- app.MittenfreqLeadTextAreaLabel.FontWeight = 'bold';
- app.MittenfreqLeadTextAreaLabel.Position = [529 528 98 22];
- app.MittenfreqLeadTextAreaLabel.Text = 'Mittenfreq. Lead';
- % Create MittenfreqLeadTextArea
- app.MittenfreqLeadTextArea = uitextarea(app.FrequenzkennlinienverfahrenTab);
- app.MittenfreqLeadTextArea.Editable = 'off';
- app.MittenfreqLeadTextArea.Tooltip = {'Mittenfrequenz des Lead-Glieds'};
- app.MittenfreqLeadTextArea.Position = [640 528 103 22];
- % Create MittenfreqLagTextAreaLabel
- app.MittenfreqLagTextAreaLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
- app.MittenfreqLagTextAreaLabel.HorizontalAlignment = 'center';
- app.MittenfreqLagTextAreaLabel.FontWeight = 'bold';
- app.MittenfreqLagTextAreaLabel.Position = [763 528 91 22];
- app.MittenfreqLagTextAreaLabel.Text = 'Mittenfreq. Lag';
- % Create MittenfreqLagTextArea
- app.MittenfreqLagTextArea = uitextarea(app.FrequenzkennlinienverfahrenTab);
- app.MittenfreqLagTextArea.Editable = 'off';
- app.MittenfreqLagTextArea.Tooltip = {'Mittenfrequenz des Lag-Glieds'};
- app.MittenfreqLagTextArea.Position = [865 528 103 22];
- % Create RampeButton
- app.RampeButton = uibutton(app.FrequenzkennlinienverfahrenTab, 'push');
- app.RampeButton.ButtonPushedFcn = createCallbackFcn(app, @RampeButtonPushed, true);
- app.RampeButton.Position = [464 148 47 32];
- app.RampeButton.Text = 'Rampe';
- % Create FuehrungspanelTab
- app.FuehrungspanelTab = uitab(app.TabGroup);
- app.FuehrungspanelTab.Title = 'Führungspanel';
- % Create PolNullstellenDiagramm
- app.PolNullstellenDiagramm = uiaxes(app.FuehrungspanelTab);
- title(app.PolNullstellenDiagramm, 'Pol-Nullstellendiagramm von Ts')
- xlabel(app.PolNullstellenDiagramm, 'Re')
- ylabel(app.PolNullstellenDiagramm, 'Im')
- app.PolNullstellenDiagramm.GridLineWidth = 0.2;
- app.PolNullstellenDiagramm.MinorGridLineWidth = 0.2;
- app.PolNullstellenDiagramm.GridLineStyle = '--';
- app.PolNullstellenDiagramm.XAxisLocation = 'origin';
- app.PolNullstellenDiagramm.YAxisLocation = 'origin';
- app.PolNullstellenDiagramm.LineWidth = 0.2;
- app.PolNullstellenDiagramm.Box = 'on';
- app.PolNullstellenDiagramm.YGrid = 'on';
- app.PolNullstellenDiagramm.ZGrid = 'on';
- app.PolNullstellenDiagramm.Position = [691 20 292 198];
- % Create GeschlossenerRegelkreisDiagramm
- app.GeschlossenerRegelkreisDiagramm = uiaxes(app.FuehrungspanelTab);
- title(app.GeschlossenerRegelkreisDiagramm, 'Übergangsfunktion des geschlossenen Regelkreises')
- xlabel(app.GeschlossenerRegelkreisDiagramm, 'Zeit[s]')
- ylabel(app.GeschlossenerRegelkreisDiagramm, 'Amplitude')
- app.GeschlossenerRegelkreisDiagramm.YGrid = 'on';
- app.GeschlossenerRegelkreisDiagramm.Position = [31 270 440 251];
- % Create Ausgang_Regler
- app.Ausgang_Regler = uiaxes(app.FuehrungspanelTab);
- title(app.Ausgang_Regler, 'Ausgang des Reglers')
- xlabel(app.Ausgang_Regler, 'Zeit[s]')
- ylabel(app.Ausgang_Regler, 'Amplitude')
- app.Ausgang_Regler.YGrid = 'on';
- app.Ausgang_Regler.Position = [31 15 440 251];
- % Create FhrungsbertragungsfunktionTsLabel
- app.FhrungsbertragungsfunktionTsLabel = uilabel(app.FuehrungspanelTab);
- app.FhrungsbertragungsfunktionTsLabel.HorizontalAlignment = 'center';
- app.FhrungsbertragungsfunktionTsLabel.Position = [508 506 184 22];
- app.FhrungsbertragungsfunktionTsLabel.Text = 'Führungsübertragungsfunktion Ts';
- % Create FhrungsanalysePanel
- app.FhrungsanalysePanel = uipanel(app.FuehrungspanelTab);
- app.FhrungsanalysePanel.AutoResizeChildren = 'off';
- app.FhrungsanalysePanel.TitlePosition = 'centertop';
- app.FhrungsanalysePanel.Title = 'Führungsanalyse';
- app.FhrungsanalysePanel.Position = [747 217 276 311];
- % Create AnstiegszeitLabel
- app.AnstiegszeitLabel = uilabel(app.FhrungsanalysePanel);
- app.AnstiegszeitLabel.HorizontalAlignment = 'center';
- app.AnstiegszeitLabel.Position = [11 254 70 22];
- app.AnstiegszeitLabel.Text = 'Anstiegszeit';
- % Create AnstiegszeitTextArea
- app.AnstiegszeitTextArea = uitextarea(app.FhrungsanalysePanel);
- app.AnstiegszeitTextArea.Editable = 'off';
- app.AnstiegszeitTextArea.Position = [163 254 103 22];
- % Create berschwingweiteLabel
- app.berschwingweiteLabel = uilabel(app.FhrungsanalysePanel);
- app.berschwingweiteLabel.HorizontalAlignment = 'center';
- app.berschwingweiteLabel.Position = [11 214 103 22];
- app.berschwingweiteLabel.Text = 'Überschwingweite';
- % Create UeberschwingweiteTextArea
- app.UeberschwingweiteTextArea = uitextarea(app.FhrungsanalysePanel);
- app.UeberschwingweiteTextArea.Editable = 'off';
- app.UeberschwingweiteTextArea.Position = [163 212 103 22];
- % Create AnschwingzeitLabel
- app.AnschwingzeitLabel = uilabel(app.FhrungsanalysePanel);
- app.AnschwingzeitLabel.HorizontalAlignment = 'right';
- app.AnschwingzeitLabel.Position = [11 173 82 22];
- app.AnschwingzeitLabel.Text = 'Anschwingzeit';
- % Create AnschwingzeitTextArea
- app.AnschwingzeitTextArea = uitextarea(app.FhrungsanalysePanel);
- app.AnschwingzeitTextArea.Editable = 'off';
- app.AnschwingzeitTextArea.Position = [163 170 103 22];
- % Create AusregelzeitLabel
- app.AusregelzeitLabel = uilabel(app.FhrungsanalysePanel);
- app.AusregelzeitLabel.HorizontalAlignment = 'center';
- app.AusregelzeitLabel.Position = [11 131 72 22];
- app.AusregelzeitLabel.Text = 'Ausregelzeit';
- % Create AusregelzeitTextArea
- app.AusregelzeitTextArea = uitextarea(app.FhrungsanalysePanel);
- app.AusregelzeitTextArea.Editable = 'off';
- app.AusregelzeitTextArea.Position = [163 128 103 22];
- % Create AmplitudenrandLabel
- app.AmplitudenrandLabel = uilabel(app.FhrungsanalysePanel);
- app.AmplitudenrandLabel.HorizontalAlignment = 'center';
- app.AmplitudenrandLabel.Position = [11 88 90 22];
- app.AmplitudenrandLabel.Text = 'Amplitudenrand';
- % Create AmplitudenrandTextArea
- app.AmplitudenrandTextArea = uitextarea(app.FhrungsanalysePanel);
- app.AmplitudenrandTextArea.Editable = 'off';
- app.AmplitudenrandTextArea.Position = [163 86 103 22];
- % Create PhasenrandLabel
- app.PhasenrandLabel = uilabel(app.FhrungsanalysePanel);
- app.PhasenrandLabel.HorizontalAlignment = 'center';
- app.PhasenrandLabel.Position = [11 44 70 22];
- app.PhasenrandLabel.Text = 'Phasenrand';
- % Create PhasenrandTextArea
- app.PhasenrandTextArea = uitextarea(app.FhrungsanalysePanel);
- app.PhasenrandTextArea.Editable = 'off';
- app.PhasenrandTextArea.Position = [163 44 103 22];
- % Create SchnittKreisfrequenzLabel
- app.SchnittKreisfrequenzLabel = uilabel(app.FhrungsanalysePanel);
- app.SchnittKreisfrequenzLabel.HorizontalAlignment = 'center';
- app.SchnittKreisfrequenzLabel.Position = [11 5 115 22];
- app.SchnittKreisfrequenzLabel.Text = 'Schnitt-Kreisfrequenz';
- % Create SchnittKreisfrequenzTextArea
- app.SchnittKreisfrequenzTextArea = uitextarea(app.FhrungsanalysePanel);
- app.SchnittKreisfrequenzTextArea.Editable = 'off';
- app.SchnittKreisfrequenzTextArea.Position = [163 3 103 22];
- % Create FuehrungsfunktionTextArea
- app.FuehrungsfunktionTextArea = uitextarea(app.FuehrungspanelTab);
- app.FuehrungsfunktionTextArea.Editable = 'off';
- app.FuehrungsfunktionTextArea.HorizontalAlignment = 'center';
- app.FuehrungsfunktionTextArea.Position = [470 401 261 108];
- % Create PolstellenTsTextAreaLabel
- app.PolstellenTsTextAreaLabel = uilabel(app.FuehrungspanelTab);
- app.PolstellenTsTextAreaLabel.HorizontalAlignment = 'center';
- app.PolstellenTsTextAreaLabel.Position = [616 367 73 22];
- app.PolstellenTsTextAreaLabel.Text = 'Polstellen Ts';
- % Create PolstellenTsTextArea
- app.PolstellenTsTextArea = uitextarea(app.FuehrungspanelTab);
- app.PolstellenTsTextArea.Editable = 'off';
- app.PolstellenTsTextArea.Position = [578 262 149 106];
- % Create obereStellgrenbegrenzungEditFieldLabel
- app.obereStellgrenbegrenzungEditFieldLabel = uilabel(app.FuehrungspanelTab);
- app.obereStellgrenbegrenzungEditFieldLabel.VerticalAlignment = 'top';
- app.obereStellgrenbegrenzungEditFieldLabel.Position = [484 205 168 18];
- app.obereStellgrenbegrenzungEditFieldLabel.Text = 'obere Stellgrößenbegrenzung';
- % Create obereStellgrenbegrenzungEditField
- app.obereStellgrenbegrenzungEditField = uieditfield(app.FuehrungspanelTab, 'numeric');
- app.obereStellgrenbegrenzungEditField.Position = [516 183 100 22];
- app.obereStellgrenbegrenzungEditField.Value = 5;
- % Create untereStellgrenbegrenzungEditFieldLabel
- app.untereStellgrenbegrenzungEditFieldLabel = uilabel(app.FuehrungspanelTab);
- app.untereStellgrenbegrenzungEditFieldLabel.VerticalAlignment = 'top';
- app.untereStellgrenbegrenzungEditFieldLabel.Position = [484 130 168 22];
- app.untereStellgrenbegrenzungEditFieldLabel.Text = 'untere Stellgrößenbegrenzung';
- % Create untereStellgrenbegrenzungEditField
- app.untereStellgrenbegrenzungEditField = uieditfield(app.FuehrungspanelTab, 'numeric');
- app.untereStellgrenbegrenzungEditField.Position = [516 112 100 22];
- % Create ErstellenButton_stellgr
- app.ErstellenButton_stellgr = uibutton(app.FuehrungspanelTab, 'push');
- app.ErstellenButton_stellgr.ButtonPushedFcn = createCallbackFcn(app, @ErstellenButton_stellgrPushed, true);
- app.ErstellenButton_stellgr.Position = [493 74 149 22];
- app.ErstellenButton_stellgr.Text = 'Erstellen';
- % Create Switch_stellgr
- app.Switch_stellgr = uiswitch(app.FuehrungspanelTab, 'slider');
- app.Switch_stellgr.ValueChangedFcn = createCallbackFcn(app, @Switch_stellgrValueChanged, true);
- app.Switch_stellgr.Position = [549 47 45 20];
- % Create StellgrenbegrenzungLabel
- app.StellgrenbegrenzungLabel = uilabel(app.FuehrungspanelTab);
- app.StellgrenbegrenzungLabel.HorizontalAlignment = 'center';
- app.StellgrenbegrenzungLabel.Position = [507.5 10 130 22];
- app.StellgrenbegrenzungLabel.Text = 'Stellgrößenbegrenzung';
- % Create BodepanelTab
- app.BodepanelTab = uitab(app.TabGroup);
- app.BodepanelTab.Title = 'Bodepanel';
- % Create OrtskurveDiagramm
- app.OrtskurveDiagramm = uiaxes(app.BodepanelTab);
- title(app.OrtskurveDiagramm, 'Ortskurve')
- xlabel(app.OrtskurveDiagramm, 'Re')
- ylabel(app.OrtskurveDiagramm, 'Im')
- app.OrtskurveDiagramm.GridLineWidth = 0.2;
- app.OrtskurveDiagramm.MinorGridLineWidth = 0.2;
- app.OrtskurveDiagramm.GridLineStyle = '--';
- app.OrtskurveDiagramm.XAxisLocation = 'origin';
- app.OrtskurveDiagramm.YAxisLocation = 'origin';
- app.OrtskurveDiagramm.LineWidth = 0.2;
- app.OrtskurveDiagramm.Box = 'on';
- app.OrtskurveDiagramm.YGrid = 'on';
- app.OrtskurveDiagramm.ZGrid = 'on';
- app.OrtskurveDiagramm.Position = [569 30 440 251];
- % Create BodeDiagrammderoffenenSchleifeG0sPanel
- app.BodeDiagrammderoffenenSchleifeG0sPanel = uipanel(app.BodepanelTab);
- app.BodeDiagrammderoffenenSchleifeG0sPanel.TitlePosition = 'centertop';
- app.BodeDiagrammderoffenenSchleifeG0sPanel.Title = 'Bode-Diagramm der offenen Schleife G0(s)';
- app.BodeDiagrammderoffenenSchleifeG0sPanel.FontWeight = 'bold';
- app.BodeDiagrammderoffenenSchleifeG0sPanel.FontSize = 14;
- app.BodeDiagrammderoffenenSchleifeG0sPanel.Position = [33 17 489 518];
- % Create MagnitudeDiagramm
- app.MagnitudeDiagramm = uiaxes(app.BodeDiagrammderoffenenSchleifeG0sPanel);
- ylabel(app.MagnitudeDiagramm, 'Magnitude(dB)')
- app.MagnitudeDiagramm.YGrid = 'on';
- app.MagnitudeDiagramm.Position = [40 240 433 228];
- % Create PhaseDiagramm
- app.PhaseDiagramm = uiaxes(app.BodeDiagrammderoffenenSchleifeG0sPanel);
- xlabel(app.PhaseDiagramm, 'Frequency(rad/s)')
- ylabel(app.PhaseDiagramm, 'Phase(deg)')
- app.PhaseDiagramm.YGrid = 'on';
- app.PhaseDiagramm.Position = [40 13 433 228];
- % Create MarginLabel
- app.MarginLabel = uilabel(app.BodeDiagrammderoffenenSchleifeG0sPanel);
- app.MarginLabel.HorizontalAlignment = 'center';
- app.MarginLabel.FontWeight = 'bold';
- app.MarginLabel.Position = [40 467 433 22];
- app.MarginLabel.Text = '';
- % Create SchleifenbertragungsfunktionG0Label
- app.SchleifenbertragungsfunktionG0Label = uilabel(app.BodepanelTab);
- app.SchleifenbertragungsfunktionG0Label.HorizontalAlignment = 'center';
- app.SchleifenbertragungsfunktionG0Label.Position = [697 484 187 22];
- app.SchleifenbertragungsfunktionG0Label.Text = 'Schleifenübertragungsfunktion G0';
- % Create SchleifenfunktionTextArea
- app.SchleifenfunktionTextArea = uitextarea(app.BodepanelTab);
- app.SchleifenfunktionTextArea.Editable = 'off';
- app.SchleifenfunktionTextArea.HorizontalAlignment = 'center';
- app.SchleifenfunktionTextArea.Position = [675 379 227 108];
- % Create VerschiebungindBEditFieldLabel
- app.VerschiebungindBEditFieldLabel = uilabel(app.BodepanelTab);
- app.VerschiebungindBEditFieldLabel.HorizontalAlignment = 'right';
- app.VerschiebungindBEditFieldLabel.Position = [530 371 109 22];
- app.VerschiebungindBEditFieldLabel.Text = 'Verschiebung in dB';
- % Create VerschiebungindBEditField
- app.VerschiebungindBEditField = uieditfield(app.BodepanelTab, 'numeric');
- app.VerschiebungindBEditField.ValueChangedFcn = createCallbackFcn(app, @VerschiebungindBEditFieldValueChanged, true);
- app.VerschiebungindBEditField.Tooltip = {'Zum Rücksetzten 0 eingeben '};
- app.VerschiebungindBEditField.Position = [530 350 109 22];
- % Create DeadBeatReglerTab
- app.DeadBeatReglerTab = uitab(app.TabGroup);
- app.DeadBeatReglerTab.Title = 'Dead-Beat-Regler';
- % Create StellAxes
- app.StellAxes = uiaxes(app.DeadBeatReglerTab);
- title(app.StellAxes, 'Stellgröße')
- xlabel(app.StellAxes, 't(s)')
- ylabel(app.StellAxes, 'u(t)')
- zlabel(app.StellAxes, 'Z')
- app.StellAxes.XLimitMethod = 'tight';
- app.StellAxes.YLimitMethod = 'padded';
- app.StellAxes.XGrid = 'on';
- app.StellAxes.YGrid = 'on';
- app.StellAxes.Position = [573 281 416 257];
- % Create RegelAxes
- app.RegelAxes = uiaxes(app.DeadBeatReglerTab);
- title(app.RegelAxes, 'Regelgröße')
- xlabel(app.RegelAxes, 't(s)')
- ylabel(app.RegelAxes, 'x(t)')
- zlabel(app.RegelAxes, 'Z')
- app.RegelAxes.XLimitMethod = 'tight';
- app.RegelAxes.YLimitMethod = 'padded';
- app.RegelAxes.XGrid = 'on';
- app.RegelAxes.YGrid = 'on';
- app.RegelAxes.Position = [573 16 416 257];
- % Create bertragungsfunktionenLabel
- app.bertragungsfunktionenLabel = uilabel(app.DeadBeatReglerTab);
- app.bertragungsfunktionenLabel.FontWeight = 'bold';
- app.bertragungsfunktionenLabel.Position = [43 166 145 22];
- app.bertragungsfunktionenLabel.Text = 'Übertragungsfunktionen';
- % Create TextArea2Label
- app.TextArea2Label = uilabel(app.DeadBeatReglerTab);
- app.TextArea2Label.Position = [43 118 46 22];
- app.TextArea2Label.Text = 'Strecke';
- % Create StreckeTextArea
- app.StreckeTextArea = uitextarea(app.DeadBeatReglerTab);
- app.StreckeTextArea.Editable = 'off';
- app.StreckeTextArea.HorizontalAlignment = 'center';
- app.StreckeTextArea.Position = [151 104 367 51];
- % Create DeadBeatReglerTextAreaLabel
- app.DeadBeatReglerTextAreaLabel = uilabel(app.DeadBeatReglerTab);
- app.DeadBeatReglerTextAreaLabel.Position = [43 56 102 22];
- app.DeadBeatReglerTextAreaLabel.Text = 'Dead-Beat-Regler';
- % Create DeadBeatReglerTextArea
- app.DeadBeatReglerTextArea = uitextarea(app.DeadBeatReglerTab);
- app.DeadBeatReglerTextArea.Editable = 'off';
- app.DeadBeatReglerTextArea.HorizontalAlignment = 'center';
- app.DeadBeatReglerTextArea.Position = [151 42 367 51];
- % Create RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel
- app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel = uilabel(app.DeadBeatReglerTab);
- app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel.FontWeight = 'bold';
- app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel.Position = [43 327 404 22];
- app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel.Text = 'Regelgröße, Regeldifferenz und Stellgröße zu den Abtastzeitpunkten';
- % Create kEditFieldLabel
- app.kEditFieldLabel = uilabel(app.DeadBeatReglerTab);
- app.kEditFieldLabel.BackgroundColor = [0.9412 0.9412 0.9412];
- app.kEditFieldLabel.Position = [423 468 25 22];
- app.kEditFieldLabel.Text = 'k';
- % Create kEditField
- app.kEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
- app.kEditField.Editable = 'off';
- app.kEditField.BackgroundColor = [0.9412 0.9412 0.9412];
- app.kEditField.Position = [460 468 53 22];
- % Create TrsEditFieldLabel
- app.TrsEditFieldLabel = uilabel(app.DeadBeatReglerTab);
- app.TrsEditFieldLabel.BackgroundColor = [0.9412 0.9412 0.9412];
- app.TrsEditFieldLabel.Position = [423 407 30 22];
- app.TrsEditFieldLabel.Text = 'Tr (s)';
- % Create TrsEditField
- app.TrsEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
- app.TrsEditField.Editable = 'off';
- app.TrsEditField.BackgroundColor = [0.9412 0.9412 0.9412];
- app.TrsEditField.Position = [460 407 53 22];
- % Create GesamtregeldauerLabel
- app.GesamtregeldauerLabel = uilabel(app.DeadBeatReglerTab);
- app.GesamtregeldauerLabel.FontWeight = 'bold';
- app.GesamtregeldauerLabel.Position = [422 437 111 22];
- app.GesamtregeldauerLabel.Text = 'Gesamtregeldauer';
- % Create AusregelschritteLabel
- app.AusregelschritteLabel = uilabel(app.DeadBeatReglerTab);
- app.AusregelschritteLabel.FontWeight = 'bold';
- app.AusregelschritteLabel.Position = [422 499 99 22];
- app.AusregelschritteLabel.Text = 'Ausregelschritte';
- % Create MesswerteTable
- app.MesswerteTable = uitable(app.DeadBeatReglerTab);
- app.MesswerteTable.ColumnName = {'t(s)'; 'u'; 'w'; 'e'};
- app.MesswerteTable.RowName = {};
- app.MesswerteTable.Position = [43 193 404 126];
- % Create U_maxEditFieldLabel
- app.U_maxEditFieldLabel = uilabel(app.DeadBeatReglerTab);
- app.U_maxEditFieldLabel.HorizontalAlignment = 'right';
- app.U_maxEditFieldLabel.Position = [60 411 43 22];
- app.U_maxEditFieldLabel.Text = 'U_max';
- % Create U_maxEditField
- app.U_maxEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
- app.U_maxEditField.Position = [118 411 100 22];
- % Create U_minEditFieldLabel
- app.U_minEditFieldLabel = uilabel(app.DeadBeatReglerTab);
- app.U_minEditFieldLabel.HorizontalAlignment = 'right';
- app.U_minEditFieldLabel.Position = [63 379 40 22];
- app.U_minEditFieldLabel.Text = 'U_min';
- % Create U_minEditField
- app.U_minEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
- app.U_minEditField.Position = [118 379 100 22];
- % Create AbtastzeitEditFieldLabel
- app.AbtastzeitEditFieldLabel = uilabel(app.DeadBeatReglerTab);
- app.AbtastzeitEditFieldLabel.HorizontalAlignment = 'right';
- app.AbtastzeitEditFieldLabel.Position = [45 440 58 22];
- app.AbtastzeitEditFieldLabel.Text = 'Abtastzeit';
- % Create AbtastzeitEditField
- app.AbtastzeitEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
- app.AbtastzeitEditField.Position = [118 440 100 22];
- % Create StreckeausStreckenpanelTextAreaLabel
- app.StreckeausStreckenpanelTextAreaLabel = uilabel(app.DeadBeatReglerTab);
- app.StreckeausStreckenpanelTextAreaLabel.HorizontalAlignment = 'right';
- app.StreckeausStreckenpanelTextAreaLabel.Position = [11 496 82 30];
- app.StreckeausStreckenpanelTextAreaLabel.Text = {'Strecke aus'; 'Streckenpanel'};
- % Create StreckeausStreckenpanelTextArea
- app.StreckeausStreckenpanelTextArea = uitextarea(app.DeadBeatReglerTab);
- app.StreckeausStreckenpanelTextArea.Position = [108 468 150 60];
- % Create StartButton
- app.StartButton = uibutton(app.DeadBeatReglerTab, 'push');
- app.StartButton.ButtonPushedFcn = createCallbackFcn(app, @StartButtonPushed, true);
- app.StartButton.Position = [43 350 100 23];
- app.StartButton.Text = 'Start';
- % Create RegelstrategieButtonGroup
- app.RegelstrategieButtonGroup = uibuttongroup(app.DeadBeatReglerTab);
- app.RegelstrategieButtonGroup.Title = 'Regelstrategie';
- app.RegelstrategieButtonGroup.Position = [264 422 152 106];
- % Create keineButton
- app.keineButton = uiradiobutton(app.RegelstrategieButtonGroup);
- app.keineButton.Text = 'keine';
- app.keineButton.Position = [11 60 58 22];
- app.keineButton.Value = true;
- % Create SollwertkorrekturButton
- app.SollwertkorrekturButton = uiradiobutton(app.RegelstrategieButtonGroup);
- app.SollwertkorrekturButton.Text = 'Sollwertkorrektur';
- app.SollwertkorrekturButton.Position = [11 38 112 22];
- % Create AbtastzeitButton
- app.AbtastzeitButton = uiradiobutton(app.RegelstrategieButtonGroup);
- app.AbtastzeitButton.Text = 'Abtastzeit';
- app.AbtastzeitButton.Position = [11 16 75 22];
- % Create DebugTextAreaLabel
- app.DebugTextAreaLabel = uilabel(app.DeadBeatReglerTab);
- app.DebugTextAreaLabel.HorizontalAlignment = 'right';
- app.DebugTextAreaLabel.Visible = 'off';
- app.DebugTextAreaLabel.Position = [338 374 40 22];
- app.DebugTextAreaLabel.Text = 'Debug';
- % Create DebugTextArea
- app.DebugTextArea = uitextarea(app.DeadBeatReglerTab);
- app.DebugTextArea.Visible = 'off';
- app.DebugTextArea.Position = [393 338 150 60];
- % Show the figure after all components are created
- app.PIDTool.Visible = 'on';
- end
- end
- % App creation and deletion
- methods (Access = public)
- % Construct app
- function app = R23ReglerApp_Steinbrink
- % Create UIFigure and components
- createComponents(app)
- % Register the app with App Designer
- registerApp(app, app.PIDTool)
- % Execute the startup function
- runStartupFcn(app, @startupFcn)
- if nargout == 0
- clear app
- end
- end
- % Code that executes before app deletion
- function delete(app)
- % Delete UIFigure when app is deleted
- delete(app.PIDTool)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement