Advertisement
Guest User

controller

a guest
May 18th, 2024
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 203.35 KB | None | 0 0
  1. classdef R23ReglerApp_Steinbrink < matlab.apps.AppBase
  2.  
  3. % Properties that correspond to app components
  4. properties (Access = public)
  5. PIDTool matlab.ui.Figure
  6. TabGroup matlab.ui.container.TabGroup
  7. Messwert matlab.ui.container.Tab
  8. DropDown matlab.ui.control.DropDown
  9. DropDownLabel matlab.ui.control.Label
  10. UebertragungsfunktionerzeugenButton matlab.ui.control.Button
  11. bergangsfunktionTextArea matlab.ui.control.TextArea
  12. bergangsfunktionTextAreaLabel matlab.ui.control.Label
  13. UebertragungsfunktionButtonGroup matlab.ui.container.ButtonGroup
  14. PT2mitUeberschwingenButton matlab.ui.control.ToggleButton
  15. PT2Button matlab.ui.control.ToggleButton
  16. PT1Button matlab.ui.control.ToggleButton
  17. MesswertgraphErzeugenButton matlab.ui.control.Button
  18. TextausrichtungSwitchLabel matlab.ui.control.Label
  19. TextausrichtungSwitch matlab.ui.control.Switch
  20. DateinichtvorhandenLabel matlab.ui.control.Label
  21. DateinameinklEndungEditField matlab.ui.control.EditField
  22. DateinameinklEndungEditFieldLabel matlab.ui.control.Label
  23. Messwerte matlab.ui.control.UIAxes
  24. StreckenpanelTab matlab.ui.container.Tab
  25. PT2GliedoderhherLabel matlab.ui.control.Label
  26. PT1GliedliegtvorLabel matlab.ui.control.Label
  27. StreckebernehmeninDBRButton matlab.ui.control.Button
  28. RegelbarkeitTextArea matlab.ui.control.TextArea
  29. RegelbarkeitTextAreaLabel matlab.ui.control.Label
  30. StreckeneingabeFehlerTextArea matlab.ui.control.TextArea
  31. Label matlab.ui.control.Label
  32. Totzeitwirdauf0gesetztLabel matlab.ui.control.Label
  33. TotzeitEditField matlab.ui.control.EditField
  34. TotzeitEditFieldLabel matlab.ui.control.Label
  35. StreckenreduktonButton matlab.ui.control.Button
  36. ErstellenButton matlab.ui.control.Button
  37. EditField matlab.ui.control.EditField
  38. ZhlerLabel matlab.ui.control.Label
  39. KoeffizientdesZaehlersEditField matlab.ui.control.EditField
  40. HurwitzTextArea matlab.ui.control.TextArea
  41. StreckenuebertragungsfunktionTextArea matlab.ui.control.TextArea
  42. StreckenanalysePanel matlab.ui.container.Panel
  43. VerhaeltnisTuzuTgTextArea matlab.ui.control.TextArea
  44. VerhltnisTuzuTgTextAreaLabel matlab.ui.control.Label
  45. AusgleichszeitTgTextArea matlab.ui.control.TextArea
  46. AusgleichszeitTgTextAreaLabel matlab.ui.control.Label
  47. VerzugszeitTuTextArea matlab.ui.control.TextArea
  48. VerzugszeitTuTextAreaLabel matlab.ui.control.Label
  49. EigenkreisfrequenzweTextArea matlab.ui.control.TextArea
  50. EigenkreisfrequenzweLabel matlab.ui.control.Label
  51. berschwingweiteTextArea matlab.ui.control.TextArea
  52. berschwingweiteLabel_2 matlab.ui.control.Label
  53. DmpfungDTextArea matlab.ui.control.TextArea
  54. DmpfungDTextAreaLabel matlab.ui.control.Label
  55. TuooAusgleichTextArea matlab.ui.control.TextArea
  56. TuooAusgleichTextAreaLabel matlab.ui.control.Label
  57. SteigungKisoAusgleichTextArea matlab.ui.control.TextArea
  58. SteigungKisoAusgleichTextAreaLabel matlab.ui.control.Label
  59. TauTextArea matlab.ui.control.TextArea
  60. TauTextAreaLabel matlab.ui.control.Label
  61. ProportionalbeiwertKpsTextArea matlab.ui.control.TextArea
  62. ProportionalbeiwertKpsTextAreaLabel matlab.ui.control.Label
  63. FktWertimWendepunktTextArea matlab.ui.control.TextArea
  64. FktWertimWendepunktTextAreaLabel matlab.ui.control.Label
  65. SteigungimWendepunktTextArea matlab.ui.control.TextArea
  66. SteigungimWendepunktTextAreaLabel matlab.ui.control.Label
  67. WendepunktbeitTextArea matlab.ui.control.TextArea
  68. WendepunktbeitTextAreaLabel matlab.ui.control.Label
  69. OrdnungTextArea matlab.ui.control.TextArea
  70. OrdnungTextAreaLabel matlab.ui.control.Label
  71. orginalFunktionLabel matlab.ui.control.Label
  72. reduzierteFunktionLabel matlab.ui.control.Label
  73. StabilitaetdesSystemsnachHurwitzLabel matlab.ui.control.Label
  74. StreckenbertragungsfunktionTextAreaLabel matlab.ui.control.Label
  75. ModStreckeneingabeButtonGroup matlab.ui.container.ButtonGroup
  76. PolynomdirektButton matlab.ui.control.RadioButton
  77. KoeffizientenButton matlab.ui.control.RadioButton
  78. UebergangsfunktionDiagramm matlab.ui.control.UIAxes
  79. RegelpanelTab matlab.ui.container.Tab
  80. PolstellendesPIDReglersTextArea matlab.ui.control.TextArea
  81. NullstellendesPIDReglersTextArea matlab.ui.control.TextArea
  82. PIDUebertragungsfunktionTextArea matlab.ui.control.TextArea
  83. PolstellendesPIDReglersTextAreaLabel matlab.ui.control.Label
  84. NullstellendesPIDReglersTextAreaLabel matlab.ui.control.Label
  85. bertragungsfunktiondesPIDReglersLabel matlab.ui.control.Label
  86. LimitfehlerLabel matlab.ui.control.Label
  87. DmpfungThetaTextArea matlab.ui.control.TextArea
  88. KnobEditButton matlab.ui.control.Button
  89. DmpfungThetaTextAreaLabel matlab.ui.control.Label
  90. DummySim1feldTextArea matlab.ui.control.TextArea
  91. Modellsimulierendummyfunktion matlab.ui.control.TextArea
  92. TextAreaLabel matlab.ui.control.Label
  93. DummySim1feldTextAreaLabel matlab.ui.control.Label
  94. KnobEditMax matlab.ui.control.NumericEditField
  95. KnobEditMin matlab.ui.control.NumericEditField
  96. SimulationszeitEditField matlab.ui.control.EditField
  97. SimulationszeitEditFieldLabel matlab.ui.control.Label
  98. GuetezielkriterienPanel matlab.ui.container.Panel
  99. VerhaltenButtonGroup matlab.ui.container.ButtonGroup
  100. DummyButton5 matlab.ui.control.ToggleButton
  101. FuehrungsverhaltenButton matlab.ui.control.ToggleButton
  102. StoerverhaltenButton matlab.ui.control.ToggleButton
  103. ParametersatzButtonGroup matlab.ui.container.ButtonGroup
  104. DummyButton4 matlab.ui.control.ToggleButton
  105. ueberschwingButton matlab.ui.control.ToggleButton
  106. AperiodischButton matlab.ui.control.ToggleButton
  107. MaxLabel matlab.ui.control.Label
  108. MinLabel matlab.ui.control.Label
  109. KnobEditDropDown matlab.ui.control.DropDown
  110. KnobEditLabel matlab.ui.control.Label
  111. RegelfehlermeldungLabel matlab.ui.control.Label
  112. TnEditField matlab.ui.control.NumericEditField
  113. TvEditField matlab.ui.control.NumericEditField
  114. KpEditField matlab.ui.control.NumericEditField
  115. ReglerberechnenButton matlab.ui.control.Button
  116. TnKnobLabel matlab.ui.control.Label
  117. TvKnobLabel matlab.ui.control.Label
  118. KpKnobLabel matlab.ui.control.Label
  119. RegelparameterPanel matlab.ui.container.Panel
  120. DigitalreglerButtonGroup matlab.ui.container.ButtonGroup
  121. DummyButtonPID matlab.ui.control.ToggleButton
  122. TakahashiPIDButton matlab.ui.control.ToggleButton
  123. TCAButton matlab.ui.control.ToggleButton
  124. ohneAusgleichButtonGroup matlab.ui.container.ButtonGroup
  125. CHRButtonoA matlab.ui.control.ToggleButton
  126. DummyButton3 matlab.ui.control.ToggleButton
  127. DrFiegerButton matlab.ui.control.ToggleButton
  128. mitAusgleichButtonGroup matlab.ui.container.ButtonGroup
  129. CHRButtonmA matlab.ui.control.ToggleButton
  130. DummyButton matlab.ui.control.ToggleButton
  131. ZieglerNicholsButton matlab.ui.control.ToggleButton
  132. TnKnob matlab.ui.control.Knob
  133. TvKnob matlab.ui.control.Knob
  134. KpKnob matlab.ui.control.Knob
  135. ReglertypButtonGroup matlab.ui.container.ButtonGroup
  136. DummyButton2 matlab.ui.control.ToggleButton
  137. PIDButton matlab.ui.control.ToggleButton
  138. PDButton matlab.ui.control.ToggleButton
  139. PIButton matlab.ui.control.ToggleButton
  140. PButton matlab.ui.control.ToggleButton
  141. ReglerartButtonGroup matlab.ui.container.ButtonGroup
  142. AbtastzeitinSekundenEditField matlab.ui.control.NumericEditField
  143. AbtastzeitinSekLabel matlab.ui.control.Label
  144. DigitalButton matlab.ui.control.ToggleButton
  145. AnalogButton matlab.ui.control.ToggleButton
  146. FrequenzkennlinienverfahrenTab matlab.ui.container.Tab
  147. RampeButton matlab.ui.control.Button
  148. MittenfreqLagTextArea matlab.ui.control.TextArea
  149. MittenfreqLagTextAreaLabel matlab.ui.control.Label
  150. MittenfreqLeadTextArea matlab.ui.control.TextArea
  151. MittenfreqLeadTextAreaLabel matlab.ui.control.Label
  152. ReglerG_RsTextArea matlab.ui.control.TextArea
  153. PReglerLabel matlab.ui.control.Label
  154. konstPhasedegreeEditField matlab.ui.control.NumericEditField
  155. konstPhasedegreeEditFieldLabel matlab.ui.control.Label
  156. FuehrungDropDown matlab.ui.control.DropDown
  157. FhrungDropDownLabel matlab.ui.control.Label
  158. Regelabweichunge_inftyEditField matlab.ui.control.NumericEditField
  159. Regelabweichunge_inftyEditFieldLabel matlab.ui.control.Label
  160. berschwingenddotuEditField matlab.ui.control.NumericEditField
  161. berschwingenLabel matlab.ui.control.Label
  162. Anstiegszeitt_rsEditField matlab.ui.control.NumericEditField
  163. Anstiegszeitt_rsEditFieldLabel matlab.ui.control.Label
  164. AuswertungPanel matlab.ui.container.Panel
  165. GridLayout matlab.ui.container.GridLayout
  166. tr_sollTextArea matlab.ui.control.TextArea
  167. u_sollTextArea matlab.ui.control.TextArea
  168. tr_Label matlab.ui.control.Label
  169. u_Label matlab.ui.control.Label
  170. wc_Label matlab.ui.control.Label
  171. IST_Label matlab.ui.control.Label
  172. SOLL_Label matlab.ui.control.Label
  173. pm_Label matlab.ui.control.Label
  174. wc_istTextArea matlab.ui.control.TextArea
  175. wc_sollTextArea matlab.ui.control.TextArea
  176. pm_istTextArea matlab.ui.control.TextArea
  177. pm_sollTextArea matlab.ui.control.TextArea
  178. u_istTextArea matlab.ui.control.TextArea
  179. tr_istTextArea matlab.ui.control.TextArea
  180. Lamp_FKV matlab.ui.control.Lamp
  181. HelpButton matlab.ui.control.Button
  182. FKVButton matlab.ui.control.Button
  183. BodevonG0sPanel matlab.ui.container.Panel
  184. MarginLabel_FKV matlab.ui.control.Label
  185. PhaseDiagramm_FKV matlab.ui.control.UIAxes
  186. MagnitudeDiagramm_FKV matlab.ui.control.UIAxes
  187. VorgabenanTsLabel matlab.ui.control.Label
  188. GeschlossenerRegelkreisDiagramm_FKV matlab.ui.control.UIAxes
  189. FuehrungspanelTab matlab.ui.container.Tab
  190. StellgrenbegrenzungLabel matlab.ui.control.Label
  191. Switch_stellgr matlab.ui.control.Switch
  192. ErstellenButton_stellgr matlab.ui.control.Button
  193. untereStellgrenbegrenzungEditField matlab.ui.control.NumericEditField
  194. untereStellgrenbegrenzungEditFieldLabel matlab.ui.control.Label
  195. obereStellgrenbegrenzungEditField matlab.ui.control.NumericEditField
  196. obereStellgrenbegrenzungEditFieldLabel matlab.ui.control.Label
  197. PolstellenTsTextArea matlab.ui.control.TextArea
  198. PolstellenTsTextAreaLabel matlab.ui.control.Label
  199. FuehrungsfunktionTextArea matlab.ui.control.TextArea
  200. FhrungsanalysePanel matlab.ui.container.Panel
  201. SchnittKreisfrequenzTextArea matlab.ui.control.TextArea
  202. SchnittKreisfrequenzLabel matlab.ui.control.Label
  203. PhasenrandTextArea matlab.ui.control.TextArea
  204. PhasenrandLabel matlab.ui.control.Label
  205. AmplitudenrandTextArea matlab.ui.control.TextArea
  206. AmplitudenrandLabel matlab.ui.control.Label
  207. AusregelzeitTextArea matlab.ui.control.TextArea
  208. AusregelzeitLabel matlab.ui.control.Label
  209. AnschwingzeitTextArea matlab.ui.control.TextArea
  210. AnschwingzeitLabel matlab.ui.control.Label
  211. UeberschwingweiteTextArea matlab.ui.control.TextArea
  212. berschwingweiteLabel matlab.ui.control.Label
  213. AnstiegszeitTextArea matlab.ui.control.TextArea
  214. AnstiegszeitLabel matlab.ui.control.Label
  215. FhrungsbertragungsfunktionTsLabel matlab.ui.control.Label
  216. Ausgang_Regler matlab.ui.control.UIAxes
  217. GeschlossenerRegelkreisDiagramm matlab.ui.control.UIAxes
  218. PolNullstellenDiagramm matlab.ui.control.UIAxes
  219. BodepanelTab matlab.ui.container.Tab
  220. VerschiebungindBEditField matlab.ui.control.NumericEditField
  221. VerschiebungindBEditFieldLabel matlab.ui.control.Label
  222. SchleifenfunktionTextArea matlab.ui.control.TextArea
  223. SchleifenbertragungsfunktionG0Label matlab.ui.control.Label
  224. BodeDiagrammderoffenenSchleifeG0sPanel matlab.ui.container.Panel
  225. MarginLabel matlab.ui.control.Label
  226. PhaseDiagramm matlab.ui.control.UIAxes
  227. MagnitudeDiagramm matlab.ui.control.UIAxes
  228. OrtskurveDiagramm matlab.ui.control.UIAxes
  229. DeadBeatReglerTab matlab.ui.container.Tab
  230. DebugTextArea matlab.ui.control.TextArea
  231. DebugTextAreaLabel matlab.ui.control.Label
  232. RegelstrategieButtonGroup matlab.ui.container.ButtonGroup
  233. AbtastzeitButton matlab.ui.control.RadioButton
  234. SollwertkorrekturButton matlab.ui.control.RadioButton
  235. keineButton matlab.ui.control.RadioButton
  236. StartButton matlab.ui.control.Button
  237. StreckeausStreckenpanelTextArea matlab.ui.control.TextArea
  238. StreckeausStreckenpanelTextAreaLabel matlab.ui.control.Label
  239. AbtastzeitEditField matlab.ui.control.NumericEditField
  240. AbtastzeitEditFieldLabel matlab.ui.control.Label
  241. U_minEditField matlab.ui.control.NumericEditField
  242. U_minEditFieldLabel matlab.ui.control.Label
  243. U_maxEditField matlab.ui.control.NumericEditField
  244. U_maxEditFieldLabel matlab.ui.control.Label
  245. MesswerteTable matlab.ui.control.Table
  246. AusregelschritteLabel matlab.ui.control.Label
  247. GesamtregeldauerLabel matlab.ui.control.Label
  248. TrsEditField matlab.ui.control.NumericEditField
  249. TrsEditFieldLabel matlab.ui.control.Label
  250. kEditField matlab.ui.control.NumericEditField
  251. kEditFieldLabel matlab.ui.control.Label
  252. RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel matlab.ui.control.Label
  253. DeadBeatReglerTextArea matlab.ui.control.TextArea
  254. DeadBeatReglerTextAreaLabel matlab.ui.control.Label
  255. StreckeTextArea matlab.ui.control.TextArea
  256. TextArea2Label matlab.ui.control.Label
  257. bertragungsfunktionenLabel matlab.ui.control.Label
  258. RegelAxes matlab.ui.control.UIAxes
  259. StellAxes matlab.ui.control.UIAxes
  260. end
  261.  
  262. methods (Access = private)
  263. %Lokale Frontend-Funktionen
  264.  
  265. %Funktion zum Setzen des sekundaeren Textareainhalts
  266. function setDisp(app)
  267. %Zuweisung der Ausgabewerte aus dem Zwischenspeicher an die Textarea-Objekte
  268. if(evalin('base','lastEvent') == "Reglerpanel") % Tobias Rockel
  269. app.PIDUebertragungsfunktionTextArea.Value = evalin('base','gPIDDisp');
  270. app.NullstellendesPIDReglersTextArea.Value = evalin('base','zgPID');
  271. app.PolstellendesPIDReglersTextArea.Value = evalin('base','pgPID');
  272. app.SchleifenfunktionTextArea.Value = evalin('base','G0Disp');
  273. app.FuehrungsfunktionTextArea.Value = evalin('base','TsDisp');
  274. app.PolstellenTsTextArea.Value = evalin('base','pTs');
  275. else % Tobias Rockel
  276. app.SchleifenfunktionTextArea.Value = evalin('base','FKV_G0Disp');
  277. app.FuehrungsfunktionTextArea.Value = evalin('base','FKV_TDisp');
  278. app.PolstellenTsTextArea.Value = evalin('base','pTs');
  279. end
  280. end
  281.  
  282.  
  283. %Analyse der Strecke
  284. function strecken_analyse(app,strecke)
  285. assignin('base','AnaCounter',1);
  286. assignin('base','stell_begrenz_anlog',0);
  287. assignin('base','alpha_dB',0);
  288. assignin('base','AnaFunktion',strecke);
  289. PidDesigner_Mod('AnaStep');
  290. %Darstellung der Analyseergebnisse
  291. app.OrdnungTextArea.Value = num2str(evalin('base','Ogs'));
  292. assignin('base','Verschiebung_Kp',0); %
  293. % Erstmal alle Analyse Textfelder sichtbar machen
  294. set(app.WendepunktbeitTextArea,'visible','on');
  295. set(app.SteigungimWendepunktTextArea,'visible','on');
  296. set(app.FktWertimWendepunktTextArea,'visible','on');
  297. set(app.VerzugszeitTuTextArea,'visible','on');
  298. set(app.AusgleichszeitTgTextArea,'visible','on');
  299. set(app.VerhaeltnisTuzuTgTextArea,'visible','on');
  300. set(app.ProportionalbeiwertKpsTextArea,'visible','on');
  301. set(app.berschwingweiteTextArea,'visible','on');
  302. set(app.DmpfungDTextArea,'visible','on');
  303. set(app.EigenkreisfrequenzweTextArea,'visible','on');
  304. set(app.SteigungKisoAusgleichTextArea,'visible','on');
  305. set(app.TuooAusgleichTextArea,'visible','on');
  306. set(app.OrdnungTextArea,'visible','on');
  307. set(app.SteigungKisoAusgleichTextArea,'visible','on');
  308. set(app.TauTextArea,'visible','on');
  309. set(app.PT1GliedliegtvorLabel,'visible','off');
  310. set(app.PT2GliedoderhherLabel,'visible','off');
  311.  
  312. % Hier Fehlerhandling falls Strecke instabil oder grenzstabil ist
  313. if (evalin('base','Fehler') == -2)
  314. % Strecke instabil
  315. set(app.WendepunktbeitTextArea,'visible','off');
  316. set(app.SteigungimWendepunktTextArea,'visible','off');
  317. set(app.FktWertimWendepunktTextArea,'visible','off');
  318. set(app.VerzugszeitTuTextArea,'visible','off');
  319. set(app.AusgleichszeitTgTextArea,'visible','off');
  320. set(app.VerhaeltnisTuzuTgTextArea,'visible','off');
  321. set(app.ProportionalbeiwertKpsTextArea,'visible','off');
  322. set(app.berschwingweiteTextArea,'visible','off');
  323. set(app.DmpfungDTextArea,'visible','off');
  324. set(app.EigenkreisfrequenzweTextArea,'visible','off');
  325. set(app.SteigungKisoAusgleichTextArea,'visible','off');
  326. set(app.TuooAusgleichTextArea,'visible','off');
  327. set(app.SteigungKisoAusgleichTextArea,'visible','off');
  328. set(app.TauTextArea,'visible','off');
  329. set(app.ProportionalbeiwertKpsTextArea,'visible','off');
  330. set(app.TauTextArea,'visible','off');
  331. else
  332. if (evalin('base','Fehler') == -1)
  333. % Strecke Grenzstabil
  334. % Strecke ohne Ausgleich
  335. % Nicht gebrauchte Textfelder im Analysepannel unsichtbar machen
  336. set(app.WendepunktbeitTextArea,'visible','off');
  337. set(app.SteigungimWendepunktTextArea,'visible','off');
  338. set(app.FktWertimWendepunktTextArea,'visible','off');
  339. set(app.VerzugszeitTuTextArea,'visible','off');
  340. set(app.AusgleichszeitTgTextArea,'visible','off');
  341. set(app.VerhaeltnisTuzuTgTextArea,'visible','off');
  342. set(app.ProportionalbeiwertKpsTextArea,'visible','off');
  343. set(app.berschwingweiteTextArea,'visible','off');
  344. set(app.DmpfungDTextArea,'visible','off');
  345. set(app.EigenkreisfrequenzweTextArea,'visible','off');
  346. set(app.TauTextArea,'visible','off');
  347.  
  348. %Zusweisungen
  349. app.SteigungKisoAusgleichTextArea.Value = [evalin('base','Kis'),' s'];
  350. app.TuooAusgleichTextArea.Value = [evalin('base','Tu_o')];
  351.  
  352. else
  353. % Strecke stabil
  354. if evalin('base','Status')==1
  355. %Strecke mit Ausgleich
  356. set(app.SteigungKisoAusgleichTextArea,'visible','off');
  357. set(app.TuooAusgleichTextArea,'visible','off');
  358. if str2num(evalin('base','Ogs')) < 2 && evalin('base','totz')==0
  359. % Es liegt ein VZ1 Glied vor
  360. set(app.PT1GliedliegtvorLabel,'visible','on');
  361. % Nicht gebrauchte Textfelder im Analysepannel unsichtbar machen
  362. set(app.WendepunktbeitTextArea,'visible','off');
  363. set(app.SteigungimWendepunktTextArea,'visible','off');
  364. set(app.FktWertimWendepunktTextArea,'visible','off');
  365. set(app.VerzugszeitTuTextArea,'visible','off');
  366. set(app.AusgleichszeitTgTextArea,'visible','off');
  367. set(app.VerhaeltnisTuzuTgTextArea,'visible','off');
  368. set(app.DmpfungDTextArea,'visible','off');
  369. set(app.berschwingweiteTextArea,'visible','off');
  370. set(app.EigenkreisfrequenzweTextArea,'visible','off');
  371. set(app.RegelbarkeitTextArea,'visible','off');
  372. set(app.RegelbarkeitTextAreaLabel,'visible','off');
  373. set(app.SteigungKisoAusgleichTextArea,'visible','off');
  374.  
  375. %Zusweisungen
  376. app.ProportionalbeiwertKpsTextArea.Value = evalin('base','Kps');
  377. app.TauTextArea.Value = [evalin('base','Tau'), 's'];
  378. else
  379. % VZ2 Glied oder höher
  380. set(app.TauTextArea,'visible','off');
  381. app.WendepunktbeitTextArea.Value = [evalin('base','Tw'),' s'];
  382. app.SteigungimWendepunktTextArea.Value = evalin('base','Wdydt');
  383. app.FktWertimWendepunktTextArea.Value = evalin('base','Yw');
  384. app.ProportionalbeiwertKpsTextArea.Value = evalin('base','Kps');
  385. app.VerzugszeitTuTextArea.Value = [evalin('base','Tu'),' s'];
  386. app.AusgleichszeitTgTextArea.Value = [evalin('base','Tg'),' s'];
  387. app.VerhaeltnisTuzuTgTextArea.Value = evalin('base','Tu_zu_Tg');
  388. app.DmpfungDTextArea.Value = evalin('base','D');
  389. app.berschwingweiteTextArea.Value = evalin('base','UeWeite');
  390. app.EigenkreisfrequenzweTextArea.Value = evalin('base','we');
  391. set(app.PT2GliedoderhherLabel,'visible','on');
  392. end
  393. set(app.RegelbarkeitTextArea,'visible','on');
  394. set(app.RegelbarkeitTextAreaLabel,'visible','on');
  395.  
  396. end
  397.  
  398. end
  399. %Regelbarkeit abhaengig von Tu_zu_Tg
  400. if (evalin('base','Fehler') ~= -1)
  401. r=str2double(evalin('base','Tu_zu_Tg'));
  402. if(r > 0.8)
  403. app.RegelbarkeitTextArea.Value='...Strecke nicht geeignet fuer den Einsatz empirischer Einstellungen';
  404. elseif(r > 0.4)
  405. app.RegelbarkeitTextArea.Value='...schlecht regelbar bei Verwendung empirischer Einstellregeln';
  406. elseif(r > 0.2)
  407. app.RegelbarkeitTextArea.Value='...gut regelbar bei Verwendung empirischer Einstellregeln';
  408.  
  409. elseif(str2double(evalin('base','Ogs'))==1 & evalin('base','totz')==0)
  410. app.RegelbarkeitTextArea.Value='...ein PT1-Glied ist nicht regelbar bei Verwendung empirischer Einstellregeln';
  411. else
  412. app.RegelbarkeitTextArea.Value='...sehr gut regelbar bei Verwendung empirischer Einstellregeln';
  413. end
  414. end
  415. end
  416. %Bestimmung der Systemstabilitaet mit und der Polstellen
  417. %Aufruf der Backend-Funktion "Stabilitaet"
  418. PidDesigner_Mod('Stabilitaet');
  419. set(app.HurwitzTextArea,'visible','on');
  420. set(app.StabilitaetdesSystemsnachHurwitzLabel,'visible','on');
  421. app.HurwitzTextArea.Value =[newline,newline,evalin('base','Textbox')];
  422. Pgsunterschiedlich = evalin('base','Pgsunterschiedlich');
  423. if Pgsunterschiedlich == 1
  424. set(app.StreckebernehmeninDBRButton,'enable','on');
  425. else
  426. set(app.StreckebernehmeninDBRButton,'enable','off');
  427. end
  428.  
  429. %////Visibility entfernt
  430. set(app.ReglerberechnenButton,'enable','on');
  431. set(app.GuetezielkriterienPanel,'visible','off');
  432. set(app.RegelfehlermeldungLabel,'visible','off');
  433. set(app.DmpfungThetaTextArea, 'visible','off');
  434. set(app.DmpfungThetaTextAreaLabel, 'visible','off');
  435. app.DmpfungThetaTextArea.Value='';
  436. if(evalin('base','Status')==-1)
  437. set(app.DigitalreglerButtonGroup,'visible','off');
  438. set(app.mitAusgleichButtonGroup,'visible','off');
  439. set(app.ohneAusgleichButtonGroup,'visible','on');
  440. else
  441. set(app.DigitalreglerButtonGroup,'visible','off');
  442. set(app.ohneAusgleichButtonGroup,'visible','off');
  443. set(app.mitAusgleichButtonGroup,'visible','on');
  444. end
  445. %Aufruf der setDummys-Funktion
  446. setDummys(app);
  447. %Aufruf der setReset-Funktion
  448. setReset(app);
  449. %Sicht- und Waehlbarmachen des Regelpanels durch Parent-Zuweisung
  450. app.RegelpanelTab.Parent=app.TabGroup;
  451. app.FrequenzkennlinienverfahrenTab.Parent=app.TabGroup;
  452.  
  453.  
  454.  
  455. end
  456.  
  457.  
  458. %Funktion zum Setzen der sekundaeren Darstellungen und der Analyseergebnisse
  459. function setSekPlots(app)
  460. if(evalin('base','Digitalregler')==0 | evalin('base','lastEvent')=="FKVPanel") % Tobias Rockel
  461. set(app.SchnittKreisfrequenzTextArea,'visible','on');
  462. set(app.PhasenrandTextArea,'visible','on');
  463. set(app.AmplitudenrandTextArea,'visible','on');
  464.  
  465. %Uebergabe der Bode-Parameter
  466. Mag=evalin('base','Mag');
  467. Phase=evalin('base','Phase');
  468.  
  469. %Plotten eines logarithmischen Umfelds fuer das Bode-Diagramm
  470. semilogx(app.MagnitudeDiagramm_FKV, evalin('base','Wout'),Mag); % Tobias Rockel
  471. semilogx(app.MagnitudeDiagramm, evalin('base','Wout'),Mag);
  472. semilogx(app.PhaseDiagramm_FKV, evalin('base','Wout'),Phase); % Tobias Rockel
  473. semilogx(app.PhaseDiagramm, evalin('base','Wout'),Phase);
  474. 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
  475. app.MarginLabel.Text = ['Gm = ',num2str(evalin('base','Gm')),evalin('base','at'),' ','Pm = ',num2str(evalin('base','Pm')),' deg (at ',num2str(evalin('base','Wcp')),' rad/s)'];
  476.  
  477. %Plotten der sekundaeren Darstellungen
  478. plot(app.GeschlossenerRegelkreisDiagramm, evalin('base','tTs'),evalin('base','yTs'));
  479. plot(app.GeschlossenerRegelkreisDiagramm_FKV, evalin('base','tTs'),evalin('base','yTs')); % Tobias Rockel
  480. plot(app.PolNullstellenDiagramm, evalin('base','pzP'),'x');
  481. hold(app.PolNullstellenDiagramm,'on');
  482. plot(app.PolNullstellenDiagramm, evalin('base','pzZ'),'o');
  483. hold(app.PolNullstellenDiagramm,'off');
  484. plot(app.OrtskurveDiagramm, evalin('base','re'), evalin('base','im'));
  485. hold(app.OrtskurveDiagramm, 'on');
  486. plot(app.OrtskurveDiagramm, evalin('base','re'), -evalin('base','im'));
  487. hold(app.OrtskurveDiagramm, 'off');
  488.  
  489. %Zuweisen der Analyseergebnisse
  490. app.AnstiegszeitTextArea.Value=evalin('base','Tr');
  491. app.UeberschwingweiteTextArea.Value=evalin('base','UeWeite');
  492. app.AnschwingzeitTextArea.Value=evalin('base','Tan');
  493. app.AusregelzeitTextArea.Value=evalin('base','Teps');
  494. app.AmplitudenrandTextArea.Value=num2str(evalin('base','Gm'));
  495. app.PhasenrandTextArea.Value=num2str(evalin('base','Pm'));
  496. app.SchnittKreisfrequenzTextArea.Value=num2str(evalin('base','Wcp'));
  497.  
  498. %Ausgangregler
  499. cla(app.Ausgang_Regler); %löschen des aktuellen Diagramms
  500. draw_stell_begrenz(app); %Zeichnen der Linien im Digramm
  501. hold(app.Ausgang_Regler,'on');
  502. plot(app.Ausgang_Regler, evalin('base','t_r_aus'), evalin('base','y_r_aus'));
  503.  
  504. else
  505. plot(app.GeschlossenerRegelkreisDiagramm, evalin('base','tTs'),evalin('base','yTs'));
  506. app.AnstiegszeitTextArea.Value=evalin('base','Tr');
  507. app.UeberschwingweiteTextArea.Value=evalin('base','UeWeite');
  508. app.AnschwingzeitTextArea.Value=evalin('base','Tan');
  509. app.AusregelzeitTextArea.Value=evalin('base','Teps');
  510.  
  511. %Ausgangregler
  512. cla(app.Ausgang_Regler); %löschen des aktuellen Diagramms
  513. draw_stell_begrenz(app); %Zeichnen der Linien im Digramm
  514. hold(app.Ausgang_Regler,'on');
  515. plot(app.Ausgang_Regler, evalin('base','t_r_aus'), evalin('base','y_r_aus'));
  516.  
  517.  
  518. set(app.SchnittKreisfrequenzTextArea,'visible','off');
  519. set(app.PhasenrandTextArea,'visible','off');
  520. set(app.AmplitudenrandTextArea,'visible','off');
  521.  
  522.  
  523.  
  524.  
  525.  
  526. end %end if Digitalregler==0
  527.  
  528. end
  529.  
  530. %Funktion zum Ruecksetzen der sekundaeren Ausgabetabs bzw. Herstellung des Vor-Regelungs-Zustands
  531. function setReset(app)
  532. app.FuehrungspanelTab.Parent=[];
  533. app.BodepanelTab.Parent=[];
  534. app.PIDUebertragungsfunktionTextArea.Value ='';
  535. app.PolstellendesPIDReglersTextArea.Value='';
  536. app.NullstellendesPIDReglersTextArea.Value='';
  537. app.SchleifenfunktionTextArea.Value = '';
  538. app.FuehrungsfunktionTextArea.Value = '';
  539. app.PolstellenTsTextArea.Value = '';
  540. app.AnstiegszeitTextArea.Value='';
  541. app.UeberschwingweiteTextArea.Value='';
  542. app.AnschwingzeitTextArea.Value='';
  543. app.AusregelzeitTextArea.Value='';
  544. app.AmplitudenrandTextArea.Value='';
  545. app.PhasenrandTextArea.Value='';
  546. app.SchnittKreisfrequenzTextArea.Value='';
  547. app.DmpfungThetaTextArea.Value='';
  548. app.KpKnob.Limits=[0 10];
  549. app.TvKnob.Limits=[0 10];
  550. app.TnKnob.Limits=[0 10];
  551. app.KpEditField.Limits=[0 10];
  552. app.TvEditField.Limits=[0 10];
  553. app.TnEditField.Limits=[0 10];
  554. app.KpKnob.Value=0;
  555. app.TvKnob.Value=0;
  556. app.TnKnob.Value=0;
  557. app.KpEditField.Value=0;
  558. app.TvEditField.Value=0;
  559. app.TnEditField.Value=0;
  560. app.KnobEditMin.Value=0;
  561. app.KnobEditMax.Value=0;
  562. app.KnobEditDropDown.Value='Kp';
  563. set(app.KpKnob,'enable','off');
  564. set(app.TvKnob,'enable','off');
  565. set(app.TnKnob,'enable','off');
  566. set(app.KpEditField,'enable','off');
  567. set(app.TvEditField,'enable','off');
  568. set(app.TnEditField,'enable','off');
  569. set(app.KnobEditDropDown, 'enable','off');
  570. set(app.KnobEditMin, 'enable','off');
  571. set(app.KnobEditMax, 'enable','off');
  572. set(app.KnobEditButton, 'enable','off');
  573. set(app.LimitfehlerLabel,'visible','off');
  574. set(app.MinLabel,'enable','off');
  575. set(app.MaxLabel,'enable','off');
  576. app.MarginLabel.Text = '';
  577. cla(app.MagnitudeDiagramm);
  578. cla(app.PhaseDiagramm);
  579. cla(app.GeschlossenerRegelkreisDiagramm);
  580. cla(app.PolNullstellenDiagramm);
  581. cla(app.OrtskurveDiagramm);
  582. app.AbtastzeitinSekundenEditField.Value=0;
  583.  
  584. end
  585.  
  586. %Funktion zum funktionalen Zuruecksetzen von Buttongroups
  587. function setDummys(app)
  588. %Aktivitaetszuweisungen an funktionslose, nicht waehlbare Buttons
  589. app.DummyButton.Value=true;
  590. app.DummyButton2.Value=true;
  591. app.DummyButton3.Value=true;
  592. app.DummyButton4.Value=true;
  593. app.DummyButton5.Value=true;
  594. app.DummyButtonPID.Value=true;
  595. app.AnalogButton.Value=true;
  596. end
  597.  
  598. %Funktion zum Aktualisieren geaenderter Werte
  599. function setChangedValues(app)
  600. %Aufrufen des Backend-cases "Regelung"
  601.  
  602. if(app.DigitalButton.Value==true & evalin('base','lastEvent') ~= "FKVPanel") % Tobias Rockel
  603. % Christopher Seipt 12.05.2021
  604. assignin('base','Simulationszeit',str2num(app.SimulationszeitEditField.Value));
  605. PidDesigner_Mod('Regelung');
  606. PidDesigner_Mod('AnaDigital');
  607.  
  608. set(app.FuehrungsfunktionTextArea, 'visible','off');
  609. set(app.PolstellenTsTextArea, 'visible','off');
  610. set(app.PolNullstellenDiagramm, 'visible','off');
  611. %set(app.Switch_stellgr,'visible','on');
  612. cla(app.PolNullstellenDiagramm);
  613.  
  614.  
  615. elseif(app.AnalogButton.Value==true | evalin('base','lastEvent') == "FKVPanel") % Tobias Rockel
  616. if(evalin("base",'lastEvent') ~= "FKVPanel") % Tobias Rockel
  617. PidDesigner_Mod('Regelung');%alt
  618. end
  619. if(evalin("base",'lastEvent') == "FKVPanel") % Tobias Rockel
  620. simOut=sim('FKV_Modell_Simulink','SimulationMode','normal');
  621. anlog_begrenz=simOut.get('y_z');
  622. anlog_begrenz_ra=simOut.get('y_r'); %Ausgang des Reglers
  623.  
  624. t=anlog_begrenz.Time; %zeit zur Simulation
  625. y=anlog_begrenz.Data; %Ergbnis der Simualation/ Sprungantwort (y)
  626. y_r_aus=anlog_begrenz_ra.Data;
  627. t_r_aus=anlog_begrenz_ra.Time;
  628. assignin('base','yTs',y);
  629. assignin('base','tTs',t);
  630. assignin('base','y_r_aus',y_r_aus);
  631. assignin('base','t_r_aus',t_r_aus);
  632. end
  633.  
  634. %merken des originalen Kp (für Verschiebung)
  635.  
  636. if (evalin('base','alpha_dB')==0)
  637. assignin('base','or_KP',evalin('base','Kp'));
  638. end
  639.  
  640. if evalin('base','stell_begrenz_anlog')==1 % Stellgrößenbegrenzung für analoge Regler
  641. PidDesigner_Mod('AnaDigital'); %Analyse mit AnaDigital, da Simulink benutzt wird
  642. assignin('base','Digitalregler',1); %soll sich genau wie bei digital Reglern verhalten (Simulink wird genutzt)
  643. set(app.FuehrungsfunktionTextArea, 'visible','off');
  644. set(app.PolstellenTsTextArea, 'visible','off');
  645. cla(app.PolNullstellenDiagramm);
  646. set(app.PolNullstellenDiagramm, 'visible','off');
  647. else %"analog ohne Begrenzung
  648. assignin('base','AnaCounter',2);
  649. if(evalin("base",'lastEvent') == "Reglerpanel")%neu
  650. assignin('base','AnaFunktion',evalin('base','Ts'));
  651. else%neu
  652. assignin('base','AnaFunktion',evalin('base','FKV_T'));%neu
  653. end%neu
  654. PidDesigner_Mod('AnaStep');
  655.  
  656. %set(app.Switch_stellgr,'visible','off');
  657.  
  658. set(app.FuehrungsfunktionTextArea, 'visible','on');
  659. set(app.PolstellenTsTextArea, 'visible','on');
  660. set(app.PolNullstellenDiagramm, 'visible','on');
  661. cla(app.PolNullstellenDiagramm);
  662.  
  663.  
  664. %Aufrufen des Backend-cases "Anastep" zur Analyse der Fuehrungsuebertragungsfunktion
  665. end
  666. %Aufrufen der lokalen "setDisp()"-Funktion
  667. setDisp(app);
  668.  
  669. end
  670. end
  671.  
  672.  
  673.  
  674. function draw_stell_begrenz(app) %Christopher Seipt
  675. array_grenze_oben=[evalin('base','obere_grenze_stllg')];
  676. array_grenze_unten=[evalin('base','untere_grenze_stllg')];
  677. for i = 1:(length(evalin('base','t_r_aus'))-1)
  678. array_grenze_oben(end+1)=evalin('base','obere_grenze_stllg');
  679. array_grenze_unten(end+1)=evalin('base','untere_grenze_stllg');
  680. end
  681. hold(app.Ausgang_Regler,'off');
  682. plot(app.Ausgang_Regler, evalin('base','t_r_aus'), evalin('base','y_r_aus'));
  683. hold(app.Ausgang_Regler,'on');
  684. plot(app.Ausgang_Regler, evalin('base','t_r_aus'), array_grenze_oben);
  685. plot(app.Ausgang_Regler, evalin('base','t_r_aus'), array_grenze_unten);
  686. end
  687.  
  688.  
  689.  
  690.  
  691. end
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698. % Callbacks that handle component events
  699. methods (Access = private)
  700.  
  701. % Code that executes after component creation
  702. function startupFcn(app)
  703. %Funktion zur Ausfuehrung bei Erstellung des Applikationsfensters
  704.  
  705. %Aufhebung der Parent-Child-Bindung von ausgewaehlten Tabs zum
  706. %"unsichtbar" und "unwaehlbar" machen
  707. app.RegelpanelTab.Parent=[];
  708. app.FrequenzkennlinienverfahrenTab.Parent=[];
  709. app.FuehrungspanelTab.Parent=[];
  710. app.BodepanelTab.Parent=[];
  711. set(app.DateinichtvorhandenLabel,'visible','off');
  712.  
  713. end
  714.  
  715. % Callback function: EditField, ErstellenButton
  716. function ErstellenButtonPushed(app, event)
  717. %Funktion wird nach dem Druecken des Erstellen-Buttons im Streckenpanel ausgeloest
  718. clearvars Standinvar;
  719. clearvars Standinvar2;
  720. %Darstellung der Streckenuebergangsfunktion
  721. set(app.StreckeneingabeFehlerTextArea,'visible','off');
  722. %Uebergabe der Koeffizienteneingabefelder
  723. assignin('base','zKoef',app.KoeffizientdesZaehlersEditField.Value);
  724. assignin('base','nKoef',app.EditField.Value);
  725. assignin('base','ModEingabeS',app.KoeffizientenButton.Value);
  726.  
  727. if 0.05<=str2num(app.TotzeitEditField.Value) %Totzeit min 0,05 sonst 0
  728. assignin('base','totz',str2num(app.TotzeitEditField.Value));
  729. set(app.Totzeitwirdauf0gesetztLabel,'visible','off');
  730.  
  731. else
  732. assignin('base','totz',0);
  733. app.TotzeitEditField.Value
  734. set(app.Totzeitwirdauf0gesetztLabel,'visible','on');
  735. app.TotzeitEditField.Value='0';
  736. end % if 0>=str2num(app.TotzeitEditField.Value)
  737.  
  738.  
  739. %Aufrufen der Backend-Funktion "GetGs"
  740.  
  741.  
  742. Koeffizientenmatrix=str2num(app.EditField.Value);
  743. PTntypkoefanzahl=numel(Koeffizientenmatrix);
  744. assignin('base','PTntypkoefanzahl',PTntypkoefanzahl);
  745.  
  746. PidDesigner_Mod('GetGs');
  747. Koefn=str2num(app.EditField.Value);
  748. Koefz=str2num(app.KoeffizientdesZaehlersEditField.Value);
  749. assignin('base','Koefz',Koefz);
  750. assignin('base','Koefn',Koefn);
  751.  
  752.  
  753. %Eingabenfehlerhandling
  754. if (evalin('base','Fehler') == -1)
  755. %Fehlerzweig
  756. app.RegelpanelTab.Parent=[];
  757. app.FrequenzkennlinienverfahrenTab.Parent=[];
  758. set(app.StreckeneingabeFehlerTextArea,'visible','on');
  759.  
  760. app.StreckeneingabeFehlerTextArea.Value ='Streckeneingabe fehlerhaft bitte korrigeren';
  761. app.OrdnungTextArea.Value = '';
  762. app.WendepunktbeitTextArea.Value = '';
  763. app.SteigungimWendepunktTextArea.Value = '';
  764. app.FktWertimWendepunktTextArea.Value = '';
  765. app.ProportionalbeiwertKpsTextArea.Value = '';
  766. app.SteigungKisoAusgleichTextArea.Value='';
  767. app.VerzugszeitTuTextArea.Value = '';
  768. app.AusgleichszeitTgTextArea.Value = '';
  769. app.VerhaeltnisTuzuTgTextArea.Value = '';
  770.  
  771. app.DmpfungDTextArea.Value ='';
  772. app.berschwingweiteTextArea.Value ='';
  773. app.EigenkreisfrequenzweTextArea.Value='';
  774.  
  775. app.StreckenuebertragungsfunktionTextArea.Value ='';
  776. app.HurwitzTextArea.Value ='';
  777. app.RegelbarkeitTextArea.Value='';
  778. cla(app.UebergangsfunktionDiagramm);
  779. set(app.ReglerberechnenButton,'enable','off');
  780.  
  781. set(app.RegelfehlermeldungLabel,'visible','off');
  782. set(app.DmpfungThetaTextArea, 'visible','off');
  783. set(app.DmpfungThetaTextAreaLabel, 'visible','off');
  784. set(app.GuetezielkriterienPanel,'visible','off');
  785. set(app.mitAusgleichButtonGroup,'visible','off');
  786. set(app.ohneAusgleichButtonGroup,'visible','off');
  787. app.DmpfungThetaTextArea.Value='';
  788. %Aufruf der setDummys-Funktion
  789. setDummys(app);
  790. %Aufruf der setReset-Funktion
  791. setReset(app);
  792.  
  793. else
  794. %Ausfuehrungszweig
  795. %Darstellung der Uebergangsfunktion
  796. app.StreckenuebertragungsfunktionTextArea.Value = evalin('base','GsDisp');
  797. plot(app.UebergangsfunktionDiagramm,evalin('base','t'),evalin('base','y'));
  798. assignin('base','stellgr_beschk',0) % deaktiviert die Stellengrößenbeschränkung zu Beginn
  799. %default Werte Stellgrößenbegrenzung
  800. assignin('base','obere_grenze_stllg',5)
  801. assignin('base','untere_grenze_stllg',0)
  802.  
  803. %Analyse der Strecke
  804. strecken_analyse(app, evalin('base','Gs'));
  805. set(app.reduzierteFunktionLabel, 'visible','off');
  806. set(app.orginalFunktionLabel,'visible','on');
  807.  
  808. end
  809.  
  810. end
  811.  
  812. % Button pushed function: ReglerberechnenButton
  813. function ReglerberechnenButtonPushed(app, event)
  814. %Funktion wird nach dem Druecken des Regeln-Buttons im Regelpanel ausgeloest
  815. assignin("base",'lastEvent', "Reglerpanel");
  816. app.Lamp_FKV.Color='r';
  817.  
  818. ReglerStatus = 1;
  819. set(app.RegelfehlermeldungLabel,'visible','off');
  820. set(app.PIDUebertragungsfunktionTextArea, 'visible','on');
  821. set(app.NullstellendesPIDReglersTextArea, 'visible','on');
  822. set(app.PolstellendesPIDReglersTextArea, 'visible','on');
  823.  
  824. %Auswahl des Reglertyps ueber die Reglertyp-Buttongroup
  825. if (app.PButton.Value == true)
  826. Reglertyp='P';
  827. assignin('base','Reglertyp',Reglertyp);
  828. elseif (app.PDButton.Value == true)
  829. Reglertyp='PD';
  830. assignin('base','Reglertyp',Reglertyp);
  831. elseif (app.PIButton.Value == true)
  832. Reglertyp='PI';
  833. assignin('base','Reglertyp',Reglertyp);
  834. elseif (app.PIDButton.Value == true)
  835. Reglertyp='PID';
  836. assignin('base','Reglertyp',Reglertyp);
  837. else
  838. ReglerStatus=-1;
  839. end
  840.  
  841. %Auswahl der Regelparameter und ButtonGroup Handling
  842. if(app.AnalogButton.Value==true)
  843. assignin('base','Digitalregler',0)
  844. if (evalin('base','Status')==1)%o.Ausgleich
  845. app.DummyButton3.Value = true;
  846. app.DummyButtonPID.Value=true;
  847. if (app.ZieglerNicholsButton.Value == true)
  848. RegelParameter='Ziegler-Nichols';
  849. assignin('base','RegelParameter',RegelParameter);
  850. elseif (app.CHRButtonmA.Value == true)
  851. RegelParameter='CHRmA';
  852. assignin('base','RegelParameter',RegelParameter);
  853. else
  854. ReglerStatus=-1;
  855. end
  856. else
  857. app.DummyButton.Value = true;
  858. app.DummyButtonPID.Value=true;
  859. if (app.DrFiegerButton.Value == true)
  860. RegelParameter='DrFieger';
  861. assignin('base','RegelParameter',RegelParameter);
  862. elseif (app.CHRButtonoA.Value == true)
  863. RegelParameter='CHRoA';
  864. assignin('base','RegelParameter',RegelParameter);
  865. else
  866. ReglerStatus=-1;
  867. end
  868. end
  869. else %Digital
  870. assignin('base','Digitalregler',1)
  871.  
  872. %Sichtbarkeit entfernen
  873. set(app.PIDUebertragungsfunktionTextArea, 'visible','off');
  874. set(app.NullstellendesPIDReglersTextArea, 'visible','off');
  875. set(app.PolstellendesPIDReglersTextArea, 'visible','off');
  876.  
  877. app.DummyButton.Value = true;
  878. app.DummyButton3.Value = true;
  879. if(app.TCAButton.Value == true)
  880. RegelParameter='TCA';
  881. assignin('base','RegelParameter',RegelParameter);
  882. assignin('base','Tab',app.AbtastzeitinSekundenEditField.Value);
  883. Standinvar='0';
  884. assignin("base","Standinvar",Standinvar);
  885. app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
  886. elseif(app.TakahashiPIDButton.Value == true)
  887. RegelParameter='TakahashiPid'; %TakahashiPid falsch geschrieben Pid war PID
  888. assignin('base','RegelParameter',RegelParameter);
  889. assignin('base','Tab',app.AbtastzeitinSekundenEditField.Value);
  890. Standinvar='0';
  891. assignin("base","Standinvar",Standinvar);
  892. app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
  893.  
  894.  
  895.  
  896. else
  897. ReglerStatus=-1;
  898. end
  899. end
  900. %Auswahl der Guetekriterien fuer CHR ueber die entsprechenden Buttongroups
  901. if ((app.CHRButtonmA.Value || app.CHRButtonoA.Value) == true)
  902. if (app.AperiodischButton.Value == true)
  903. Parameter='Aperiodisch';
  904. assignin('base','Parameter',Parameter);
  905. elseif (app.ueberschwingButton.Value == true)
  906. Parameter='Ueberschwingen';
  907. assignin('base','Parameter',Parameter);
  908. else
  909. ReglerStatus=-1;
  910. end
  911.  
  912. if(app.StoerverhaltenButton.Value == true)
  913. Verhalten='Stoerverhalten';
  914. assignin('base','Verhalten',Verhalten);
  915. elseif(app.FuehrungsverhaltenButton.Value == true)
  916. Verhalten='Fuehrungsverhalten';
  917. assignin('base','Verhalten',Verhalten);
  918. else
  919. ReglerStatus=-1;
  920. end
  921. end
  922.  
  923. %Eingabefeld fuer die Daempfung Theta und das dazugehoerige Inputhandling
  924. if (app.DrFiegerButton.Value == true && app.PButton.Value == true)
  925. Theta = app.DmpfungThetaTextArea.Value;
  926. ThetaStr = char(Theta);
  927. ThetaIn = ThetaStr(~isspace(ThetaStr));
  928. LengthTheta = length(ThetaIn);
  929. ThetaCount= ~(all(isstrprop(ThetaIn,'digit'),2));
  930. if LengthTheta == 0 | ThetaIn == '0' %Änderung Christopher Seipt 24.04.2021 % ThetaCount aus der IF Abfrage entfernt --> Eingabefeld funktioniert
  931. ReglerStatus=-1;
  932. else
  933. assignin('base','Theta',ThetaIn);
  934. end
  935. end
  936.  
  937. %Verarbeitung der gewaehlten Parameter
  938. if (ReglerStatus == -1)
  939. %Fehlerzweig
  940. set(app.RegelfehlermeldungLabel,'visible','on');
  941. %Aufrufen der setReset-Funktion
  942. setReset(app);
  943. else
  944. %Ausfuehren jeglicher Funktionen zum Setzen sekundaerer Darstellungen
  945. %und Aktivieren aller Objekte mit berechneten Parametern
  946. set(app.KpKnob,'enable','on');
  947. set(app.TvKnob,'enable','on');
  948. set(app.TnKnob,'enable','on');
  949. set(app.KpEditField,'enable','on');
  950. set(app.TvEditField,'enable','on');
  951. set(app.TnEditField,'enable','on');
  952. set(app.KnobEditDropDown, 'enable','on');
  953. set(app.KnobEditMin, 'enable','on');
  954. set(app.KnobEditMax, 'enable','on');
  955. set(app.KnobEditButton, 'enable','on');
  956. set(app.MinLabel, 'enable','on');
  957. set(app.MaxLabel, 'enable','on');
  958. set(app.LimitfehlerLabel, 'visible','off');
  959. PidDesigner_Mod(evalin('base','RegelParameter'));
  960. %Aufrufen der setChangedValues-Funktion
  961. setChangedValues(app);
  962. %Aufrufen der Backend-Funktion "KnobLimits"
  963. PidDesigner_Mod('KnobLimits');
  964. app.KpKnob.Limits = evalin('base','KpLimit');
  965. app.TvKnob.Limits = evalin('base','TvLimit');
  966. app.TnKnob.Limits = evalin('base','TnLimit');
  967. app.KpEditField.Limits = evalin('base','KpLimit');
  968. app.TvEditField.Limits = evalin('base','TvLimit');
  969. app.TnEditField.Limits = evalin('base','TnLimit');
  970. app.KnobEditMin.Value=0;
  971. app.KnobEditMax.Value=0;
  972. app.KnobEditDropDown.Value='Kp';
  973. app.KpKnob.Value = evalin('base','Kp');
  974. app.TvKnob.Value = evalin('base','Tv');
  975. app.TnKnob.Value = evalin('base','Tn');
  976. app.KpEditField.Value = evalin('base','Kp');
  977. app.TvEditField.Value = evalin('base','Tv');
  978. app.TnEditField.Value = evalin('base','Tn');
  979. %Aufrufen der setSekPlots-Funktion
  980. setSekPlots(app);
  981. %Sicht- und Waehlbarmachen des Fuehrungs- und des Bodepanels durch Parent-Zuweisung
  982. app.FuehrungspanelTab.Parent=app.TabGroup;
  983. if(app.AnalogButton.Value==true)
  984. app.BodepanelTab.Parent=app.TabGroup;
  985. else
  986. app.BodepanelTab.Parent=[];
  987. end
  988.  
  989. end
  990. end
  991.  
  992. % Selection changed function: mitAusgleichButtonGroup
  993. function mitAusgleichButtonGroupSelectionChanged(app, event)
  994. %Funktion zum Buttongrouphandling fuer Strecken mit Ausgleich
  995. selectedButton = app.mitAusgleichButtonGroup.SelectedObject;
  996. if (selectedButton == app.CHRButtonmA)
  997. %CHR mit Ausgleich-Steuerung
  998. set(app.GuetezielkriterienPanel,'visible','on');
  999. set(app.PDButton,'enable','off');
  1000. %Setzen des Dummybuttons
  1001. if (app.PDButton.Value == true)
  1002. app.DummyButton2.Value = true;
  1003. end
  1004. elseif(selectedButton ~= app.CHRButtonmA)
  1005. %Ruecksetzen
  1006. set(app.GuetezielkriterienPanel,'visible','off');
  1007. set(app.PDButton,'enable','on');
  1008.  
  1009. elseif(app.DigitalButton.Value == 1)
  1010. %Ruecksetzen
  1011. set(app.GuetezielkriterienPanel,'visible','off');
  1012. set(app.PDButton,'enable','on');
  1013. end
  1014. end
  1015.  
  1016. % Selection changed function: ohneAusgleichButtonGroup
  1017. function ohneAusgleichButtonGroupSelectionChanged(app, event)
  1018. %Funktion zum Buttongrouphandling fuer Strecken ohne Ausgleich
  1019. selectedButton = app.ohneAusgleichButtonGroup.SelectedObject;
  1020. if (selectedButton == app.CHRButtonoA)
  1021. %CHR ohne Ausgleich-Steuerung
  1022. set(app.GuetezielkriterienPanel,'visible','on');
  1023. set(app.PDButton,'enable','off');
  1024. if (app.PDButton.Value == true)
  1025. %Setzen des Dummybuttons
  1026. app.DummyButton2.Value = true;
  1027. end
  1028. else
  1029. %Ruecksetzen
  1030. set(app.GuetezielkriterienPanel,'visible','off');
  1031. set(app.PDButton,'enable','on');
  1032. end
  1033.  
  1034. if (selectedButton == app.DrFiegerButton && app.PButton.Value == true)
  1035. %DrFieger-Steurung
  1036. set(app.DmpfungThetaTextArea,'visible','on');
  1037. set(app.DmpfungThetaTextAreaLabel,'visible','on');
  1038. else
  1039. %Ruecksetzen
  1040. set(app.DmpfungThetaTextArea,'visible','off');
  1041. set(app.DmpfungThetaTextAreaLabel,'visible','off');
  1042. app.DmpfungThetaTextArea.Value='';
  1043. end
  1044. end
  1045.  
  1046. % Selection changed function: ReglertypButtonGroup
  1047. function ReglertypButtonGroupSelectionChanged(app, event)
  1048. %Funktion zur Steuerung durch die Aenderung der Reglertypwahl
  1049. selectedButton = app.ReglertypButtonGroup.SelectedObject;
  1050. if (selectedButton == app.PButton && app.DrFiegerButton.Value == true)
  1051. %Daempfung aktivieren
  1052. set(app.DmpfungThetaTextArea,'visible','on');
  1053. set(app.DmpfungThetaTextAreaLabel,'visible','on');
  1054. else
  1055. %Ruecksetzen
  1056. set(app.DmpfungThetaTextArea,'visible','off');
  1057. set(app.DmpfungThetaTextAreaLabel,'visible','off');
  1058. app.DmpfungThetaTextArea.Value='';
  1059. end
  1060. end
  1061.  
  1062. % Value changing function: KpKnob
  1063. function KpKnobValueChanging(app, event)
  1064. %Funktion zur Echtzeit-Aktualisierung der Funktionswerte durch den Drehknauf Kp
  1065. changingValue = event.Value;
  1066. app.KpEditField.Value = changingValue;
  1067. assignin('base','Kp',changingValue);
  1068. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1069. setChangedValues(app);
  1070. end
  1071.  
  1072. % Value changing function: TvKnob
  1073. function TvKnobValueChanging(app, event)
  1074. %Funktion zur Echtzeit-Aktualisierung der Funktionswerte durch den Drehknauf Tv
  1075. changingValue = event.Value;
  1076. app.TvEditField.Value = changingValue;
  1077. assignin('base','Tv',changingValue);
  1078. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1079. setChangedValues(app);
  1080. end
  1081.  
  1082. % Value changing function: TnKnob
  1083. function TnKnobValueChanging(app, event)
  1084. %Funktion zur Echtzeit-Aktualisierung der Funktionswerte durch den Drehknauf Tn
  1085. changingValue = event.Value;
  1086. app.TnEditField.Value = changingValue;
  1087. assignin('base','Tn',changingValue);
  1088. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1089. setChangedValues(app);
  1090.  
  1091. end
  1092.  
  1093. % Value changed function: KpEditField
  1094. function KpEditFieldValueChanged(app, event)
  1095. %Funktion zur Aenderung des Kp-Parameters ueber ein Editfield
  1096. value = app.KpEditField.Value;
  1097.  
  1098. app.KpKnob.Value=value;
  1099. assignin('base','Kp',value);
  1100. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1101. setChangedValues(app);
  1102. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1103. setSekPlots(app);
  1104. end
  1105.  
  1106. % Value changed function: TvEditField
  1107. function TvEditFieldValueChanged(app, event)
  1108. %Funktion zur Aenderung des Tv-Parameters ueber ein Editfield
  1109. value = app.TvEditField.Value;
  1110. app.TvKnob.Value=value;
  1111. assignin('base','Tv',value);
  1112. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1113. setChangedValues(app);
  1114. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1115. setSekPlots(app);
  1116. end
  1117.  
  1118. % Value changed function: TnEditField
  1119. function TnEditFieldValueChanged(app, event)
  1120. %Funktion zur Aenderung des Tn-Parameters ueber ein Editfield
  1121. value = app.TnEditField.Value;
  1122. app.TnKnob.Value=value;
  1123. assignin('base','Tn',value);
  1124. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1125. setChangedValues(app);
  1126. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1127. setSekPlots(app);
  1128. end
  1129.  
  1130. % Value changed function: KpKnob
  1131. function KpKnobValueChanged(app, event)
  1132. %Aktualisierung der sekundaeren Plots am Ende der Drehknauflaufzeit Kp
  1133. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1134. if(app.DigitalButton.Value==true)
  1135. Standinvar='1';
  1136. assignin("base","Standinvar",Standinvar);
  1137. set(app.GuetezielkriterienPanel,'visible','off');
  1138. app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
  1139. %ModellsimulierendummyfunktionValueChanged(app); %Änderung Christopher Seipt 26.05.2021 simulieren funktion werden nicht benutzt
  1140. setSekPlots(app);%Änderung Christopher Seipt 26.05.2021
  1141. elseif(app.AnalogButton.Value==true)
  1142.  
  1143. setSekPlots(app);
  1144. end
  1145. end
  1146.  
  1147. % Value changed function: TvKnob
  1148. function TvKnobValueChanged(app, event)
  1149. %Aktualisierung der sekundaeren Plots am Ende der Drehknauflaufzeit Tv
  1150. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1151. if(app.DigitalButton.Value==true)
  1152. Standinvar='1';
  1153. assignin("base","Standinvar",Standinvar);
  1154. app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
  1155. %ModellsimulierendummyfunktionValueChanged(app);
  1156. setSekPlots(app); %anstatt ModellsimulierendummyfunktionValueChanged(app) Christopher Seipt 26.05.2021
  1157. elseif(app.AnalogButton.Value==true)
  1158.  
  1159. setSekPlots(app);
  1160. end
  1161. end
  1162.  
  1163. % Value changed function: TnKnob
  1164. function TnKnobValueChanged(app, event)
  1165. %Aktualisierung der sekundaeren Plots am Ende der Drehknauflaufzeit Tn
  1166. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1167. if(app.DigitalButton.Value==true)
  1168. %if(app.TakahashiPIDButton.Value==true)
  1169. Standinvar='1';
  1170. assignin("base","Standinvar",Standinvar);
  1171. app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
  1172. %ModellsimulierendummyfunktionValueChanged(app);
  1173. setSekPlots(app); %anstatt ModellsimulierendummyfunktionValueChanged(app) Christopher Seipt 26.05.2021
  1174. % elseif(app.TakahashiPIDButton.Value==true) %Auskommentiert Christopher Seipt 26.05.2021
  1175. % Standinvar='1';
  1176. % assignin("base","Standinvar",Standinvar);
  1177. % app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
  1178. % ModellsimulierendummyfunktionValueChanged(app);
  1179. % end
  1180. elseif(app.AnalogButton.Value==true)
  1181. setSekPlots(app);
  1182. end
  1183. end
  1184.  
  1185. % Button pushed function: KnobEditButton
  1186. function KnobEditButtonPushed(app, event)
  1187. %Funktion zur manuellen Aenderung der Drehknaufgrenzen
  1188. set(app.LimitfehlerLabel,'visible','off');
  1189. selectedParameter = app.KnobEditDropDown.Value;
  1190. KnobMin = app.KnobEditMin.Value;
  1191. KnobMax = app.KnobEditMax.Value;
  1192. %Uebergabe und Fehlerhandling der Drehknaufgrenzen
  1193. KnobLimits=[KnobMin KnobMax];
  1194. if((selectedParameter == 'Kp') & (KnobMin<evalin('base','Kp')) & (evalin('base','Kp')<KnobMax))
  1195. app.KpKnob.Limits = KnobLimits;
  1196. app.KpEditField.Limits = KnobLimits;
  1197. elseif((selectedParameter == 'Tv') & (KnobMin<evalin('base','Tv')) & (evalin('base','Tv')<KnobMax))
  1198. app.TvKnob.Limits = KnobLimits;
  1199. app.TvEditField.Limits = KnobLimits;
  1200. elseif((selectedParameter == 'Tn') & (KnobMin<evalin('base','Tn')) & (evalin('base','Tn')<KnobMax))
  1201. app.TnKnob.Limits = KnobLimits;
  1202. app.TnEditField.Limits = KnobLimits;
  1203. else
  1204. set(app.LimitfehlerLabel,'visible','on');
  1205. end
  1206. end
  1207.  
  1208. % Button pushed function: MesswertgraphErzeugenButton
  1209. function MesswertgraphErzeugenButtonPushed(app, event)
  1210.  
  1211. set(app.DateinichtvorhandenLabel,'visible','off'); %Deaktviert das Label Christopher Seipt 05.06.2021
  1212. %AufgMesswerte = readmatrix(app.DateinameinklEndungEditField.Value,"Range",Bereich);
  1213. try %verhindert Probleme bei falschen Dateinamen; Christopher Seipt 05.06.2021
  1214. AufgMesswerte=xlsread(app.DateinameinklEndungEditField.Value)
  1215.  
  1216. app.TextausrichtungSwitch.Value
  1217.  
  1218. if(app.TextausrichtungSwitch.Value=="Zeilenweise")
  1219. AufgMesswerte=AufgMesswerte';
  1220. else
  1221. AufgMesswerte=AufgMesswerte;
  1222. end
  1223. plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
  1224. assignin('base','AufgMesswerte',AufgMesswerte);
  1225.  
  1226. catch
  1227. set(app.DateinichtvorhandenLabel,'visible','on');%aktviert das Label Christopher Seipt 05.06.2021 (fehlerhafter Dateinmane)
  1228.  
  1229. end
  1230.  
  1231.  
  1232.  
  1233. end
  1234.  
  1235. % Button pushed function: UebertragungsfunktionerzeugenButton
  1236. function UebertragungsfunktionerzeugenButtonPushed(app, event)
  1237. clearvars AufgMesswerte;
  1238.  
  1239. AufgMesswerte=evalin('base','AufgMesswerte');
  1240.  
  1241. [Maxf,Indx] = max(AufgMesswerte)
  1242. ji= Indx(:,2)
  1243. AnzahlelemAufgMes=numel(AufgMesswerte(:,2));
  1244. h=0;
  1245. for ji=ji:+1:AnzahlelemAufgMes
  1246. A(1+h,:)= AufgMesswerte(ji,:);
  1247. h= h+1;
  1248. end
  1249. disp(A)
  1250. %A ist nun die gekürzte Matrix
  1251. Amax=Maxf(:,2)
  1252. Amin1= A(:,2)
  1253. Amin2= min(Amin1)
  1254.  
  1255. Endwert= AufgMesswerte(AnzahlelemAufgMes,2)
  1256. Endzeitpunkt= AufgMesswerte(AnzahlelemAufgMes,1)
  1257.  
  1258. WPvalue=Endwert/2
  1259. wptest=AufgMesswerte(:,2);
  1260. [Minwpabs,Indexwp]= min(abs(wptest-WPvalue));
  1261. Aind = AufgMesswerte(:,1);
  1262. WPzeitpunkt = Aind(Indexwp)
  1263.  
  1264. %Anstieg im WPunkt
  1265. WPt25=Endwert/4;
  1266. wptest=AufgMesswerte(:,2);
  1267. [Minwpabs1,Indexwp1]= min(abs(wptest-WPt25));
  1268. Aind1 = AufgMesswerte(:,1);
  1269. WPt25zeitpunkt = Aind1(Indexwp1);
  1270.  
  1271.  
  1272. WPt75=Endwert*3/4;
  1273. wptest=AufgMesswerte(:,2);
  1274. [Minwpabs2,Indexwp2]= min(abs(wptest-WPt75));
  1275. Aind2 = AufgMesswerte(:,1);
  1276. WPt75zeitpunkt = Aind2(Indexwp2);
  1277.  
  1278. Anstiegzeitpunkt=WPt75zeitpunkt-WPt25zeitpunkt;
  1279. Anstiegy=WPt75-WPt25;
  1280.  
  1281. Anstieg=Anstiegy/Anstiegzeitpunkt
  1282.  
  1283. ntang=Anstiegy-(Anstieg*Anstiegzeitpunkt)
  1284.  
  1285. %Tangentewp=Anstieg*x+ntang ==y=m*x+n
  1286. %Schnittpunkt mit y=0
  1287. xnulp=-(ntang/Anstieg)
  1288. %Schnittpunkt mit y=Endwert
  1289. xendp=(Endwert-ntang)/Anstieg %y=m*x+n--> -n-->y-n=m*x--> (y-n)/m=x
  1290.  
  1291. Tg1=xendp-xnulp
  1292. Tu1=0+WPzeitpunkt
  1293.  
  1294. Ueberschwingendiff= Amax-Endwert;
  1295. Ueberschwingen= (Ueberschwingendiff*100)/Endwert
  1296.  
  1297.  
  1298. %Ü testen alles berechnen für richtiges Zeichnen
  1299. if(app.PT1Button.Value==true)
  1300.  
  1301. ft=fittype('Endwert*(1-exp(-x/T))');
  1302. fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0]);
  1303. Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);
  1304. x=AufgMesswerte(:,1);
  1305. y=feval(Geglaettet,x);
  1306. plot(app.Messwerte,x,y);
  1307. hold(app.Messwerte,'on');
  1308. plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
  1309. hold(app.Messwerte,'off');
  1310.  
  1311.  
  1312. elseif(app.PT2Button.Value==true)
  1313.  
  1314. DPT2=1/(sqrt(1+( (pi.^2)/(log((Amax/Amin2).^2)) )))
  1315.  
  1316. AufgMesswerte=evalin('base','AufgMesswerte');
  1317. T2=Tg1 %(T75-T25)/(TParamX*(1+1/TParamP)) ;
  1318. T1=Tu1
  1319.  
  1320. Kps=Endwert;
  1321. Kpstest=Kps;
  1322. assignin('base','Kpstest',Kpstest);
  1323.  
  1324. Omegae=pi/Amax %omegae=Omegad
  1325. Omegan=Omegae/(sqrt(1-DPT2)) %omegan=Omeganull
  1326. p1= (-1*DPT2*Omegan)+(Omegan*sqrt((DPT2^2)-1));
  1327. p2= (-1*DPT2*Omegan)-(Omegan*sqrt((DPT2^2)-1));
  1328. Tgross=1/Omegan
  1329. assignin('base','Tgross',Tgross);
  1330. assignin('base','Omegan',Omegan);
  1331.  
  1332. %MyErr="bitte erneut versuchen oder die Exceltabelle berichtigen"
  1333.  
  1334. count = 0;
  1335. err_count = 0;
  1336. while count ==err_count
  1337. try
  1338. ft=fittype('Endwert*((1-T1/(T1-T2)*exp(-x/T1)+T2/(T1-T2)*exp(-x/T2)))');
  1339. fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0,0]);
  1340. Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);
  1341. x=AufgMesswerte(:,1);
  1342. y=feval(Geglaettet,x);
  1343. plot(app.Messwerte,x,y);
  1344. hold(app.Messwerte,'on');
  1345. plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
  1346. hold(app.Messwerte,'off');
  1347.  
  1348.  
  1349.  
  1350. catch MyErr
  1351. err_count=err_count +1;
  1352.  
  1353. end
  1354.  
  1355. count=count+1;
  1356.  
  1357. end
  1358.  
  1359.  
  1360.  
  1361.  
  1362. % ft=fittype('Endwert*((1-T1/(T1-T2)*exp(-x/T1)+T2/(T1-T2)*exp(-x/T2)))');
  1363. % fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0,0]);
  1364. % Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);%komischer error der mit Exceltabelle zusammenhängt
  1365. % x=AufgMesswerte(:,1);
  1366. % y=feval(Geglaettet,x);
  1367. % hold(app.Messwerte,'on');
  1368. % plot(app.Messwerte,x,y);
  1369. % hold(app.Messwerte,'off');
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377. %weiter unten Tu ung Tg fürs zeichnen
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383. elseif(app.PT2mitUeberschwingenButton.Value==true)
  1384.  
  1385. DPT2=1/(sqrt(1+( (pi.^2)/(log((Amax/Amin2).^2)) )))
  1386.  
  1387. AufgMesswerte=evalin('base','AufgMesswerte');
  1388.  
  1389.  
  1390. T2=Tg1 %(T75-T25)/(TParamX*(1+1/TParamP)) ;
  1391. T1=Tu1
  1392. Kps=Endwert;
  1393. Kpstest=Kps;
  1394. assignin('base','Kpstest',Kpstest);
  1395.  
  1396. %Omeganull=wurzel1/T^2
  1397. Omegae=pi/Amax %omegae=Omegad
  1398. Omegan=Omegae/(sqrt(1-DPT2)) %omegan=Omeganull
  1399. p1= (-1*DPT2*Omegan)+(Omegan*sqrt((DPT2^2)-1));
  1400. p2= (-1*DPT2*Omegan)-(Omegan*sqrt((DPT2^2)-1));
  1401. Tgross=1/Omegan
  1402. assignin('base','Tgross',Tgross);
  1403.  
  1404.  
  1405. count = 0;
  1406. err_count = 0;
  1407. while count ==err_count
  1408. try
  1409. %pi
  1410. %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))))');
  1411. dd=0.1;
  1412. Pshift=atan(sqrt(1-dd)/dd);
  1413. ft=fittype('Endwert*(1+exp(-dd*x/T)*sin(sqrt(1-dd^2)*x/T-Pshift)/sqrt(1-dd^2))')
  1414. fo=fitoptions('Method','NonlinearLeastSquares','Lower',[0,0]);
  1415. Geglaettet=fit(AufgMesswerte(:,1),AufgMesswerte(:,2),ft,fo);
  1416. x=AufgMesswerte(:,1);
  1417. y=feval(Geglaettet,x);
  1418. plot(app.Messwerte,x,y);
  1419. hold(app.Messwerte,'on');
  1420. plot(app.Messwerte,AufgMesswerte(:,1),AufgMesswerte(:,2));%zeichnet die Messwerte ein
  1421. hold(app.Messwerte,'off');
  1422.  
  1423.  
  1424.  
  1425. catch MyErr
  1426. err_count=err_count +1;
  1427.  
  1428. end
  1429.  
  1430. count=count+1;
  1431.  
  1432. end
  1433.  
  1434.  
  1435.  
  1436.  
  1437. Uebtragfktoben= [Kps*(Omegan^2)]
  1438. Uebtragfktunten= [1 2*DPT2*Omegan Omegan^2]
  1439. %zeichnet tatsächlich
  1440. assignin('base','Omegan',Omegan);
  1441. %Ki1= 0.27/Kps*(Tgross*Tg1)/((Tu1+0.5*Tgross)^2)
  1442. %assignin('base','Ki',Ki1);
  1443.  
  1444.  
  1445. else
  1446.  
  1447.  
  1448. end
  1449.  
  1450.  
  1451. assignin('base','Geglaettet',Geglaettet);
  1452. fitobject=Geglaettet;
  1453.  
  1454. cvalues = coeffvalues(fitobject) %werte der unteren Koef komische werte
  1455. cnames = coeffnames(fitobject) %Koeffizienten Namen
  1456. output = formula(fitobject) %string der formel
  1457.  
  1458. %Startwert:step:endwert
  1459. for ii=1:1:numel(cvalues)%3 Koef
  1460. cname = cnames{ii};%Name des 1.,2.,3.Koef
  1461. cvalue = num2str(round(cvalues(ii),3));%runde Koefwertnr:1,auf drei stellen nach komma-->string in cvalue gespeichert
  1462.  
  1463. output = strrep(output, cname , cvalue)%stringreplace ersetzt in output Koeffizientennamen in formel durch koef wert
  1464. Params{ii}=cvalue %Params wird nacheinander mit den string für den jeweiligen wert gefüllt
  1465. end
  1466.  
  1467. app.bergangsfunktionTextArea.Value=output;
  1468.  
  1469.  
  1470. if(app.PT1Button.Value==true)
  1471.  
  1472. app.KoeffizientdesZaehlersEditField.Value=Params{1}; %='1' geändert zu Params{1} --> Kps
  1473. app.EditField.Value=[Params{2},' 1'];%[Params{1},' 1'] geändert zu Params{2} --> Tau,' 1'
  1474. %Feheler Behoben Christopher Seipt 27.05.2021
  1475.  
  1476. IstPT1=true;
  1477.  
  1478. elseif(app.PT2Button.Value==true)
  1479. % Zeit-Prozent-Kennwertverfahren
  1480. % for ii=1:1:1000 %Auskommentiert Christopher Seipt 31.05.2021
  1481. % i=ii*y(end)/1000;
  1482. % T=feval(Geglaettet,i);
  1483. % if(T<0.25)
  1484. % T25=i ;
  1485. % end
  1486. % if(T<0.75)
  1487. % T75=i ;
  1488. % end
  1489. % end
  1490. %Bestimmung der Zeitkonstanten T25 und T75
  1491. i=1;
  1492. t=AufgMesswerte(:,1);
  1493. y=feval(Geglaettet,t);
  1494. %T25
  1495. while y(i)<y(length(y))*0.25
  1496. i=i+1;
  1497.  
  1498. end %end while T25
  1499. T25=t(i);
  1500. %T75
  1501. a=i
  1502. while y(a)<y(length(y))*0.75
  1503. a=a+1;
  1504. end
  1505. T75=t(a);
  1506. TParamR=T25/T75 ;
  1507. TParamP=(-18.56075*TParamR)+0.57311/(TParamR-0.20747)+4.16423 ;
  1508. TParamX=14.2797*TParamR^3-9.3891*TParamR^2+0.25437*TParamR+1.32148 ;
  1509. T2=(T75-T25)/(TParamX*(1+1/TParamP)) ;%Tg1
  1510. T1=T2/TParamP ;%Tu1
  1511. KoeffQuad=T1*T2 ;
  1512. KoeffLin=T1+T2 ;
  1513. Kps1=Kps;
  1514. assignin('base','Kps1',Kps1);
  1515. app.KoeffizientdesZaehlersEditField.Value=num2str(Kps);
  1516. app.EditField.Value=[num2str(KoeffQuad),' ',num2str(KoeffLin),' 1'];
  1517.  
  1518.  
  1519.  
  1520.  
  1521. elseif(app.PT2mitUeberschwingenButton.Value==true)
  1522. %Zeit-Prozent-Kennwertverfahren
  1523. % for ii=1:1:1000
  1524. % i=ii*y(end)/1000;
  1525. % T=feval(Geglaettet,i);
  1526. % if(T<0.25)
  1527. % T25=i ;
  1528. % end %if (T<0.25)
  1529. % if(T<0.75)
  1530. % T75=i ;
  1531. % end % if(T<0.75)
  1532. % end %for ii ....
  1533. % TParamR=T25/T75 ;
  1534. % TParamP=(-18.56075*TParamR)+0.57311/(TParamR-0.20747)+4.16423 ;
  1535. % TParamX=14.2797*TParamR^3-9.3891*TParamR^2+0.25437*TParamR+1.32148 ;
  1536. % T2=(T75-T25)/(TParamX*(1+1/TParamP)) ; %Tg1
  1537. % T1=T2/TParamP ; %Tu1
  1538. % KoeffQuad=T1*T2 ; %checken ob richtig
  1539. % KoeffLin=T1+T2 ; %checken ob richtig
  1540. % Kps1=Kps;
  1541. % assignin('base','Kps1',Kps1);
  1542. % app.KoeffizientdesZaehlersEditField.Value= num2str(Uebtragfktoben) ;
  1543. % app.EditField.Value=num2str(Uebtragfktunten);
  1544. %Änderung Christopher Seipt
  1545. %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)
  1546.  
  1547. %Vorgehen: [-0. Bestimmung der Amplitude HW 1 (A1) und HW 2 (A2)- nicht mehr gebruacht -]
  1548. % 1. Bestimmung der Dämpfung mit Werten der Überschwingweite
  1549. % 2. Bestimmung der Periodendauer für 3.
  1550. % 3. Bestimmung des Koeffizient T
  1551. % 4. Aufstellen und Übertragen der Funktion
  1552.  
  1553. % %1.
  1554. t=AufgMesswerte(:,1);
  1555. y=feval(Geglaettet,t);
  1556. % %A1
  1557. % [y_A1,i_A1]=max(y);
  1558. % %A2
  1559. % y_2 =y(i_A1:length(y)); %Liste ab A1
  1560. % [y_A2, i_A2]=min(y_2);
  1561. % i_A2=i_A2+i_A1;
  1562.  
  1563. %1. Dämpfung (Formelen Foliensatz F. 87)
  1564. %D=(1/(sqrt(1+pi^2/(log(y_A1/y_A2))^2)));
  1565. UeWeite= (max(y)-y(length(y)))/y(length(y)); %Bestimmung der Überschwingweite
  1566. D = log(1/UeWeite)/sqrt((log(1/UeWeite))^2 +pi^2); %Bestimmung der Dämpfung
  1567.  
  1568. %2. Periodendauer Formelen Foliensatz F. 87)
  1569. [y_A1,i_A1]=max(y);
  1570. T_0=2*(x(i_A1))
  1571. %T_0=3.1656
  1572.  
  1573. %3. T
  1574. T=T_0*sqrt(1-D^2)/(2*pi);
  1575.  
  1576. %4.
  1577. app.KoeffizientdesZaehlersEditField.Value=num2str(y(length(y))); %Kps , Zähler
  1578. app.EditField.Value=[num2str(T^2),' ',num2str(2*D*T),' 1']; %Nenner
  1579.  
  1580. %zum Debuggen
  1581. assignin('base','y_A1',y_A1);
  1582. %assignin('base','y_A2',y_A2);
  1583.  
  1584. %assignin('base','y_2',y_2);
  1585.  
  1586. assignin('base','i_A1',i_A1);
  1587. assignin('base','t_A1',x(i_A1));
  1588. %assignin('base','i_A2',i_A2);
  1589. %assignin('base','t_A2',x(i_A2));
  1590.  
  1591. assignin('base','x_test',x);
  1592. assignin('base','y_test',y);
  1593. assignin('base','De',D);
  1594. assignin('base','T_q',T);
  1595.  
  1596. assignin('base','Perioded',T_0);
  1597. %Ende der Änderung
  1598.  
  1599.  
  1600. end %elseif (app.PT2mitUeberschwingenButton.Value==true)
  1601.  
  1602. Tg1
  1603. Tu1
  1604.  
  1605. assignin('base','Tg1',Tg1);
  1606. assignin('base','Tu1',Tu1);
  1607.  
  1608.  
  1609. end
  1610.  
  1611. % Selection changed function: ReglerartButtonGroup
  1612. function ReglerartButtonGroupSelectionChanged(app, event)
  1613. if(app.AnalogButton.Value==true)
  1614. set(app.PButton,'enable','on');
  1615. set(app.PIButton,'enable','on');
  1616. set(app.PDButton,'enable','on');
  1617. set(app.PIDButton,'enable','on');
  1618. set(app.ReglerberechnenButton,'enable','on');
  1619. set(app.SimulationszeitEditField,'visible','off');
  1620. set(app.AbtastzeitinSekundenEditField,'visible','off')
  1621. set(app.AbtastzeitinSekLabel,'visible','off')
  1622. app.AbtastzeitinSekundenEditField.Value = 0 ;
  1623. % Visibilityhandling und Herstellen der Ausgangszustaende ´
  1624. %Bestimmung der anzuzeigenden Buttongroups
  1625. if(evalin('base','Status')==-1)
  1626. set(app.DigitaleReglungButtonGroup,'visible','off');
  1627. set(app.mitAusgleichButtonGroup,'visible','off');
  1628. set(app.ohneAusgleichButtonGroup,'visible','on');
  1629. else
  1630. set(app.DigitalreglerButtonGroup,'visible','off');
  1631. set(app.ohneAusgleichButtonGroup,'visible','off');
  1632. set(app.mitAusgleichButtonGroup,'visible','on');
  1633. end
  1634. elseif(app.DigitalButton.Value==true)
  1635. set(app.GuetezielkriterienPanel,'visible','off');
  1636. set(app.PButton,'enable','on'); %Christopher Seipt 21.05.2021 off --> on
  1637. set(app.SimulationszeitEditField,'visible','on');
  1638. set(app.PIButton,'enable','on'); %Christopher Seipt 21.05.2021 off --> on
  1639. set(app.ReglerberechnenButton,'enable','on'); %Christopher Seipt 12.05.2021 / off zu on
  1640. set(app.PIDButton,'enable','on');
  1641. set(app.PDButton,'enable','off');
  1642. Standinvar='0';
  1643. assignin("base","Standinvar",Standinvar);
  1644. app.DummySim1feldTextArea.Value = evalin('base','Standinvar');
  1645. set(app.ohneAusgleichButtonGroup,'visible','off');
  1646. set(app.mitAusgleichButtonGroup,'visible','off');
  1647. set(app.DigitalreglerButtonGroup,'visible','on');
  1648. set(app.AbtastzeitinSekundenEditField,'visible','on');
  1649. set(app.AbtastzeitinSekLabel,'visible','on');
  1650.  
  1651. end
  1652.  
  1653. end
  1654.  
  1655. % Button pushed function: StreckenreduktonButton
  1656. function StreckenreduktonButtonPushed(app, event)
  1657. Standinvar='0';
  1658. assignin("base","Standinvar",Standinvar);
  1659. app.DummySim1feldTextArea.Value = evalin('base','Standinvar')
  1660. assignin("base","hallo",app.U_maxEditField.Value)
  1661.  
  1662.  
  1663. PidDesigner_Mod('OrdRed')
  1664. if(evalin('base','OrdRedFehler')==0)
  1665. hold(app.UebergangsfunktionDiagramm,'on')
  1666. plot(app.UebergangsfunktionDiagramm,evalin('base','tRed'),evalin('base','yRed'));
  1667. hold(app.UebergangsfunktionDiagramm,'off')
  1668. Gs_r=evalin('base','Gs_r')
  1669. Gs_r=tf(Gs_r)
  1670. app.StreckenuebertragungsfunktionTextArea.Value=matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(Gs_r);
  1671. strecken_analyse(app, Gs_r)
  1672. set(app.reduzierteFunktionLabel, 'visible','on');
  1673. set(app.orginalFunktionLabel,'visible','off');
  1674. else
  1675. disp('Fehler')
  1676. end
  1677. end
  1678.  
  1679. % Value changed function: AbtastzeitinSekundenEditField
  1680. function AbtastzeitinSekundenEditFieldValueChanged(app, event)
  1681. Tab = app.AbtastzeitinSekundenEditField.Value;
  1682. assignin('base','Tab',Tab)
  1683. Tg=str2num(evalin('base','Tg'));
  1684. Tu=str2num(evalin('base','Tu'));
  1685.  
  1686. app.TCAButton.BackgroundColor = 'r';
  1687. app.TakahashiPIDButton.BackgroundColor= 'r';
  1688.  
  1689. if(Tab/Tg <= (1/10))
  1690. app.TCAButton.BackgroundColor = 'g';
  1691. end
  1692. if(Tab <= (2*Tu))
  1693. app.TakahashiPIDButton.BackgroundColor= 'g';
  1694. end
  1695. if(Tab == 0)
  1696. app.TCAButton.BackgroundColor = [0.96,0.96,0.96];
  1697. app.TakahashiPIDButton.BackgroundColor= [0.96,0.96,0.96];
  1698. end
  1699. end
  1700.  
  1701. % Callback function
  1702. function Modellsimulieren(app, event)
  1703. clearvars Ysimmesswerte;
  1704. clearvars Ysim;
  1705. clearvars tout;
  1706. app.DummySim1feldTextArea.Value='0';
  1707.  
  1708. %app.DummyfunktionlenderEditField.Value=
  1709. %app.Modellsimulierendummyfunktion.Value='1';
  1710. %ModellsimulierendummyfunktionValueChanged(app) Christopher Seipt 12.05.2021 /auskommentiert
  1711.  
  1712.  
  1713.  
  1714. end
  1715.  
  1716. % Value changed function: SimulationszeitEditField
  1717. function SimulationszeitEditFieldValueChanged(app, event)
  1718. simend = app.SimulationszeitEditField.Value;
  1719. assignin("base","Simulationszeit",str2num(simend));
  1720. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1721. setChangedValues(app);
  1722. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1723. setSekPlots(app);
  1724.  
  1725.  
  1726.  
  1727. end
  1728.  
  1729. % Callback function
  1730. function DummyfunktionlenderEditFieldValueChanged(app, event)
  1731. %fehlerhaftern code sollte nicht mehr existieren
  1732.  
  1733. end
  1734.  
  1735. % Value changed function: Modellsimulierendummyfunktion
  1736. function ModellsimulierendummyfunktionValueChanged(app, event)
  1737.  
  1738. end
  1739.  
  1740. % Button pushed function: ErstellenButton_stellgr
  1741. function ErstellenButton_stellgrPushed(app, event)
  1742. %Christopher Seipt 16.07.2021
  1743. %liest Grenzen der Stellgröße ein
  1744. assignin('base','obere_grenze_stllg',app.obereStellgrenbegrenzungEditField.Value+0.001)
  1745. assignin('base','untere_grenze_stllg',app.untereStellgrenbegrenzungEditField.Value-0.001)
  1746.  
  1747. %falls die Bregenzung aktiv ist, wird neu berechnet
  1748. if evalin('base','stellgr_beschk')==1
  1749. cla(app.Ausgang_Regler);
  1750. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1751. setChangedValues(app);
  1752. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1753. setSekPlots(app);
  1754. end
  1755. draw_stell_begrenz(app) %Zeichnen der Linien im Digramm
  1756.  
  1757. if evalin('base','stell_begrenz_anlog')==1
  1758. assignin('base','Digitalregler',0);
  1759. end
  1760.  
  1761. end
  1762.  
  1763. % Value changed function: Switch_stellgr
  1764. function Switch_stellgrValueChanged(app, event)
  1765.  
  1766. value = app.Switch_stellgr.Value;
  1767. switch value
  1768. case 'On'
  1769.  
  1770. assignin('base','stellgr_beschk',1)
  1771. if(app.AnalogButton.Value==true)
  1772. assignin('base','stell_begrenz_anlog',1);
  1773. end
  1774.  
  1775. case 'Off'
  1776.  
  1777. assignin('base','stellgr_beschk',0)
  1778. assignin('base','stell_begrenz_anlog',0);
  1779. end
  1780. cla(app.Ausgang_Regler); %löschen des aktuellen Diagramms
  1781. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1782. setChangedValues(app);
  1783. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1784. setSekPlots(app);
  1785. draw_stell_begrenz(app); %Zeichnen der Linien im Digramm
  1786.  
  1787. %Zurücksetzen Regler Typ Digital für Analoge Regler mit Stellgrößenbegrenzung
  1788. if evalin('base','stell_begrenz_anlog')==1
  1789. assignin('base','Digitalregler',0);
  1790. end
  1791.  
  1792. end
  1793.  
  1794. % Value changed function: VerschiebungindBEditField
  1795. function VerschiebungindBEditFieldValueChanged(app, event)
  1796. %Christopher Seipt
  1797. alpha_dB = app.VerschiebungindBEditField.Value;
  1798. assignin('base','alpha_dB',alpha_dB);
  1799. alpha = 10^(alpha_dB/20);
  1800. assignin('base','alpha',alpha);
  1801. assignin('base','Verschiebung_Kp',1); %für Kp_changed zum Speichern des Original Werts
  1802. if (alpha_dB==0) %Reset
  1803. assignin('base','Kp',evalin('base','or_KP')); %
  1804. else
  1805. assignin('base','Kp',alpha*evalin('base','or_KP'));
  1806.  
  1807. end
  1808. %Aufrufen der setChangedValues-Funktion zur Aktualisierung
  1809. setChangedValues(app);
  1810. %Aufrufen der setSekPlots-Funktion zur Aktualisierung
  1811. setSekPlots(app);
  1812. PidDesigner_Mod('KnobLimits'); %neues Limit für die Drehknöpfe
  1813. app.KpKnob.Limits = evalin('base','KpLimit');
  1814. app.KpEditField.Limits =evalin('base','KpLimit');
  1815. app.KpEditField.Value = evalin('base','Kp');
  1816. app.KpKnob.Value = evalin('base','Kp');
  1817.  
  1818.  
  1819.  
  1820. end
  1821.  
  1822. % Button pushed function: FKVButton
  1823. function FKVButtonPushed(app, event)
  1824.  
  1825. % Aktualisierungsindikator setzen
  1826. app.Lamp_FKV.Color='g';
  1827.  
  1828. % Sicht- und Waehlbarmachen des Fuehrungs- und des Bodepanels
  1829. % durch Parent-Zuweisung
  1830. app.FuehrungspanelTab.Parent=app.TabGroup;
  1831. app.BodepanelTab.Parent=app.TabGroup;
  1832.  
  1833. % Merkvariable lastEvent:
  1834. % lastEvent='FKVPanel' --> zuletzt wurde FKV berechnet
  1835. % lastEvent='ReglerPanel' --> zuletzt mit Regelpanel gerechnet
  1836. assignin('base','lastEvent', "FKVPanel")
  1837.  
  1838. % Einlesen der Inputs
  1839. FKV_Eingang = string(app.FuehrungDropDown.Value);
  1840. FKV_tr = app.Anstiegszeitt_rsEditField.Value;
  1841. FKV_u = app.berschwingenddotuEditField.Value;
  1842. FKV_e = app.Regelabweichunge_inftyEditField.Value;
  1843. FKV_konstPhase = app.konstPhasedegreeEditField.Value;
  1844.  
  1845. if(FKV_konstPhase < 0.00000001)
  1846. % wenn konstPhase = 0 dann T = Inf (s. addLag)
  1847. % also wzlag,wnlag = 0
  1848. FKV_konstPhase = 0.00000001;
  1849. end
  1850. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1851. %%%%%%% BEGINN DES VERFAHRENS %%%%%%%%
  1852. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1853.  
  1854. % Berechnung der Durchtrittsfrequenz wc und des Phasenrands pm
  1855. [FKV_wc, FKV_pm] = myFKV_functions.calcWc_pm(FKV_tr, FKV_u);
  1856.  
  1857. % Strecke aus dem Workspace extrahieren, Regler erstellen und
  1858. % die Strecke auf Legitimität prüfen
  1859. FKV_Gs = evalin('base','Gs');
  1860. FKV_Gr = tf([1],[1]); % Regler vorerst 1
  1861.  
  1862. % Hinzufügen der nötigen Integratoren für eine bleibende
  1863. % Regelabweichung von Null in Abhäng. des Eingangs
  1864. % nach Tabelle
  1865. FKV_anzIntsGs = myFKV_functions.getNumIntegrators(FKV_Gs);
  1866. [FKV_Gr, FKV_K0] = myFKV_functions.calcK0_addInts(FKV_Gr, FKV_e, FKV_Eingang, FKV_anzIntsGs);
  1867.  
  1868. % Hinzufügen eines P-Glieds zum Einstellen der gewünschten
  1869. % Durchtrittsfrequenz oder der gewünschten Regelabweichung
  1870. [FKV_Gr, FKV_Kr] = myFKV_functions.addPGlied(FKV_Gr, FKV_Gs, FKV_wc, FKV_e, FKV_K0, FKV_anzIntsGs);
  1871.  
  1872. % Hinzufügen eines Lead-Glieds zum Einstellen des gewünschten
  1873. % Phasenrands
  1874. [FKV_Gr, FKV_wmlead] = myFKV_functions.addLead(FKV_Gr, FKV_Gs, FKV_wc, FKV_pm, FKV_konstPhase);
  1875.  
  1876. % Hinzufügen eines Lag-Glieds zum Kompensieren der
  1877. % Betragserhöhung durch das Lead-Glied
  1878. [FKV_Gr, FKV_wmlag] = myFKV_functions.addLag(FKV_Gr, FKV_Gs, FKV_wc, FKV_wmlead, FKV_konstPhase);
  1879.  
  1880.  
  1881. % Berechung von G0(s) und T(s)
  1882. FKV_G0 = FKV_Gr*FKV_Gs;
  1883. FKV_T = feedback(FKV_G0,1,-1); % Feedback-Funktion nutzen, sonst wird nicht gekürzt
  1884.  
  1885.  
  1886. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1887. %%%%%%% ENDE DES VERFAHRENS %%%%%%%%
  1888. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1889.  
  1890. % Erstellung eines darstellbaren Strings für den Regler Gr
  1891. FKV_GrDisp = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(zpk(FKV_Gr));
  1892. FKV_G0Disp = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(zpk(FKV_G0));
  1893. FKV_TDisp = matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(zpk(FKV_T));
  1894.  
  1895. % Anzeigen von ausgewählten Werten/Übertragungsfunktionen
  1896. app.ReglerG_RsTextArea.Value = FKV_GrDisp;
  1897. %app.G0TextArea.Value = FKV_G0Disp;
  1898. %app.TTextArea.Value = FKV_TDisp;
  1899. app.MittenfreqLeadTextArea.Value = num2str(FKV_wmlead);
  1900. app.MittenfreqLagTextArea.Value = num2str(FKV_wmlag);
  1901. %app.PGliedTextArea.Value = num2str(FKV_Kr); %gelöscht
  1902. app.pm_sollTextArea.Value = num2str(FKV_pm);
  1903. app.wc_sollTextArea.Value = num2str(FKV_wc);
  1904. app.u_sollTextArea.Value = num2str(FKV_u);
  1905. app.tr_sollTextArea.Value = num2str(FKV_tr);
  1906.  
  1907.  
  1908. % Hinzufügen aller verwendeten/berechneten Größen zum Workspace
  1909. assignin('base','FKV_tr', FKV_tr);
  1910. assignin('base','FKV_u', FKV_u);
  1911. assignin('base','FKV_e', FKV_e);
  1912. assignin('base','FKV_konstPhase', FKV_konstPhase);
  1913. assignin('base','FKV_Eingang', FKV_Eingang);
  1914. assignin('base','FKV_wc', FKV_wc);
  1915. assignin('base','FKV_pm', FKV_pm);
  1916. assignin('base','FKV_Gr', FKV_Gr);
  1917. assignin('base','FKV_G0', FKV_G0);
  1918. assignin('base','FKV_T', FKV_T);
  1919. assignin('base','FKV_wmlag', FKV_wmlag);
  1920. assignin('base','FKV_wmlead', FKV_wmlead);
  1921. assignin('base','FKV_Kr', FKV_Kr);
  1922. assignin('base','FKV_K0', FKV_K0);
  1923. assignin('base','FKV_GrDisp',FKV_GrDisp);
  1924. assignin('base','FKV_G0Disp',FKV_G0Disp);
  1925. assignin('base','FKV_TDisp',FKV_TDisp);
  1926.  
  1927.  
  1928. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1929. %%%%%%%% AKTUALISIERUNG DER PLOTS %%%%%%%%%%%%
  1930. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1931.  
  1932. % Ersetzen der yTs und tTs Vektoren im Zusammenspiel mit dem
  1933. % bestehendem Code, um T(s) anzeigen zu lassen
  1934. [FKV_y,FKV_t] = step(FKV_T);
  1935. assignin('base','yTs', FKV_y);
  1936. assignin('base','tTs', FKV_t);
  1937.  
  1938. % Ersetzen der Bodeparameter im Zusammenspiel mit dem
  1939. % bestehendem Code, um G0(s) anzeigen zu lassen
  1940. [Mag,Phase,Wout]=bode(FKV_G0);
  1941. [Gm,Pm,Wcg,Wcp]=margin(FKV_G0);
  1942. Mag = reshape(Mag,[],1);
  1943. Phase = reshape(Phase,[],1);
  1944. magdb = 20*log10(Mag);
  1945. Gm = 20*log10(Gm);
  1946. if (Gm == Inf)
  1947. at = ' ';
  1948. assignin('base','at',at);
  1949. else
  1950. at = [' dB (at ',num2str(Wcg),' rad/s)'];
  1951. assignin('base','at',at);
  1952. end
  1953.  
  1954. assignin('base','Mag',magdb);
  1955. assignin('base','Phase',Phase);
  1956. assignin('base','Wout',Wout);
  1957. assignin('base','Gm',Gm);
  1958. assignin('base','Pm',Pm);
  1959. assignin('base','Wcg',Wcg);
  1960. assignin('base','Wcp',Wcp);
  1961.  
  1962. % Parameterberechnung und Uebergabe der Ortskurve
  1963. [re,im,wnyq]=nyquist(FKV_T);
  1964. re = reshape(re,[],1);
  1965. im = reshape(im,[],1);
  1966. assignin('base','re',re);
  1967. assignin('base','im',im);SimulationMode
  1968. assignin('base','wnyq',wnyq);
  1969.  
  1970. % Parameterberechnung und Uebergabe des
  1971. % Pol-Nullstellendiagramms
  1972. pout=pole(FKV_T); %funktioniert mit Totzeit
  1973. z=zero(FKV_T);
  1974. assignin('base','pzP',pout);
  1975. assignin('base','pzZ',complex(z));
  1976.  
  1977. % Parameterberechnung und Uebergabe des
  1978. % Ausgang_Regler-Diagramms
  1979. if(evalin('base','stell_begrenz_anlog') == 0)
  1980. Sum=sumblk('e=w-y'); % Summenpunkt Regelfehler
  1981. FKV_Gr.u='e'; FKV_Gr.y='ur'; % Regler Ein- und Ausgänge
  1982. FKV_Gs.u='ur'; FKV_Gs.y='y';
  1983. aus_regler=connect(FKV_Gr,FKV_Gs,Sum,'w','ur'); %tf Reglerausgang
  1984.  
  1985. t_max=max(FKV_t);
  1986. [y_r_aus,t_r_aus]=step(aus_regler,t_max);
  1987. assignin('base','y_r_aus',y_r_aus);
  1988. assignin('base','t_r_aus',t_r_aus);
  1989. end
  1990. if (evalin('base','stell_begrenz_anlog') == 1)
  1991. simOut=sim('FKV_Modell_Simulink','SimulationMode','normal');
  1992. anlog_begrenz=simOut.get('y_z');
  1993. anlog_begrenz_ra=simOut.get('y_r'); %Ausgang des Reglers
  1994.  
  1995. t=anlog_begrenz.Time; %zeit zur Simulation
  1996. y=anlog_begrenz.Data; %Ergbnis der Simualation/ Sprungantwort (y)
  1997. y_r_aus=anlog_begrenz_ra.Data;
  1998. t_r_aus=anlog_begrenz_ra.Time;
  1999. assignin('base','yTs',y);
  2000. assignin('base','tTs',t);
  2001. assignin('base','y_r_aus',y_r_aus);
  2002. assignin('base','t_r_aus',t_r_aus);
  2003. end
  2004.  
  2005. % P-Glied unter 'or_KP' ablegen, um VerschiebungindB-Feld
  2006. % weiterhin nutzen zu können
  2007. assignin('base','or_Kp', FKV_Kr);
  2008. assignin('base','Kp', FKV_Kr);
  2009. %Fix reicht nicht: setChangedValues muss verändert werden
  2010.  
  2011.  
  2012. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2013. %%%%%%%% AKTUALISIERUNG DER WERTE/FUNKTIONEN %%%%%%%%
  2014. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2015.  
  2016.  
  2017. %AKTUELLES PROBLEM: Die Funktionen zum Aktualisieren
  2018. %setsekplots und setchangedvalues sind nicht einsetzbar ohne
  2019. %änderungen, denn sie arbeitet nur mit reglerpanel
  2020.  
  2021. % Anzeigen der neuen Polstellen von FKV_T
  2022. pTsBox = '';
  2023. pTs = pole(FKV_T);
  2024. o=length(pTs);
  2025. for p=1:o
  2026. pTsBox=[pTsBox,num2str(pTs(p,1)),newline];
  2027. p=p+1;
  2028. end
  2029. assignin('base','pTs',pTsBox);
  2030.  
  2031. % Anstiegszeit,Überschwingweite,Anschwingzeit,Ausregelzeit
  2032. % sollen für FKV_T neu berechnet werden,
  2033. % AnaStep bietet sich an
  2034. assignin('base','AnaFunktion', FKV_T);
  2035. assignin('base','AnaCounter', 2);
  2036. PidDesigner_Mod('AnaStep');
  2037.  
  2038. % Aufruf der bestehenden Funktionen zur Aktualisierung der
  2039. % Plots, Werte und Funktionen
  2040. % Digitalregler=0 muss gesetzt werden
  2041. assignin('base','Digitalregler', 0);
  2042. setSekPlots(app);
  2043. setDisp(app);
  2044.  
  2045. % aktuelles Problem: für die ersten 4 Werte/Zeiten im
  2046. % Führungspanel gibt das sisotool andere Werte
  2047. % Lösung: ist nicht mein Problem/nicht meine Schuld
  2048. % Problem: konstPhase = 0 gibt einen error in piddesigner_mod
  2049. % Lösung: = 0 nicht zulassen -> instabiles Lag-Glied
  2050. % Problem: Kr ist ein double -> zB 20.0000 / Phasenrand wird
  2051. % dann 40.00007 angezeigt
  2052. % Lösung: ist unwichtig, kann so bleiben
  2053. % Problem: ich möchte bandbreite wb anzeigen lassen, aber wie
  2054. % ist sie definiert? -3dB von der maximalen Verstärkung oder
  2055. % -3dB von der DC-Verstärkung (0 Hz)
  2056. % Problem: Verschiebung in dB Feld funktioniert nicht nach FKV
  2057. % Problem: Ausgang On funktioniert nicht bei FKV
  2058.  
  2059. % Hinzufügen von Ist-Werten nach der Berechnung durch
  2060. % PidDesigner_Mod('AnaStep')
  2061. app.tr_istTextArea.Value = num2str(evalin("base",'Tr'));
  2062. app.pm_istTextArea.Value = num2str(evalin("base",'Pm'));
  2063. app.u_istTextArea.Value = num2str(str2num(evalin("base",'UeWeite'))*100);
  2064. app.wc_istTextArea.Value = num2str(evalin('base','Wcp'));
  2065. end
  2066.  
  2067. % Button pushed function: HelpButton
  2068. function HelpButtonPushed(app, event)
  2069. message={'Hinweise zur Nutzung des FKV',['Die Lampe in der ' ...
  2070. 'oberen rechten Ecke zeigt Ihnen, ob die angezeigten ' ...
  2071. 'Informationen aktuell sind.'],['\color{magenta}magenta: ' ...
  2072. 'keine Regelung berechnet'],['\color{red}rot: nicht ' ...
  2073. 'aktualisert'],'\color{green}grün: aktualisiert',['\color{black}' ...
  2074. 'Haben Sie zuletzt einen Regler mithilfe des Reglerpanels ' ...
  2075. 'berechnet, nutzen Sie das Führungs- und Bodepanel, um ' ...
  2076. 'aktualisierte Werte einzusehen.'],['Tragen Sie die ' ...
  2077. 'Vorgaben an die Sprungantwort der ' ...
  2078. 'Führungsübertragungsfunktion T(s) ein und betätigen ' ...
  2079. 'den FKV-Button.'],['Wurde ein Regler berechnet kann der ' ...
  2080. 'Rampe-Button genutzt werden, um sich die Rampenantwort ' ...
  2081. 'des geschlossenen Regelkreises ausgeben zu lassen.'],['Der ' ...
  2082. 'Wert konstPhase gibt an, wie ' ...
  2083. 'weit die Phase durch das Lead-Glied zusätzlich erhöht ' ...
  2084. 'werden muss, um die darauffolgende Phasenabsenkung des Lag-Glieds im Bereich der Durchtrittsfrequenz zu ' ...
  2085. 'kompensieren. 5\circ bis 10\circ sind üblich und werden ' ...
  2086. 'empfohlen.'],['Das FKV beruht auf Näherungsbeziehungen.' ...
  2087. ' Es ist ratsam anschließend eine Feineinstellung ' ...
  2088. 'vorzunehmen.'],['Schauen Sie sich zum Verständnis der ' ...
  2089. 'eingefügten Kompensationsglieder die Phasenanhebung und ' ...
  2090. '-absenkung und deren Mittenfrequenzen im Bode-Diagramm von G0(s) an.']};
  2091. uialert(app.PIDTool,message,'Help',...
  2092. 'Icon','info',...
  2093. 'Interpreter','tex');
  2094. end
  2095.  
  2096. % Button pushed function: RampeButton
  2097. function RampeButtonPushed(app, event)
  2098.  
  2099. % figure erstellen und vorherige löschen
  2100. figureName = 'Rampenantwort von T(s)';
  2101. existingFigures = findall(0,'Type','figure');
  2102. existingFigureNames = get(existingFigures,'Name');
  2103. if any(strcmp(existingFigureNames,figureName))
  2104. delete(existingFigures(strcmp(existingFigureNames,figureName)));
  2105. end
  2106. figure('Name',figureName,'NumberTitle','off');
  2107.  
  2108. % Rampe plotten
  2109. [~,ramp_x]=step(evalin("base",'FKV_T'));
  2110. ramp_maxtime = ramp_x(length(ramp_x));
  2111. ramp_t= 0:0.01* ramp_maxtime:ramp_maxtime;
  2112. ramp_y=lsim(evalin("base",'FKV_T'),ramp_t,ramp_t);
  2113. plot(ramp_t,ramp_y);
  2114. hold on;
  2115. plot(ramp_t,ramp_t);
  2116. ramp_e=ramp_t-ramp_y';
  2117. plot(ramp_t,ramp_e);
  2118. legend('Rampenantwort','Rampe', 'Regelfehler','location','northwest');
  2119. title('Rampenantwort des geschlossenen Regelkreises');
  2120. grid on;
  2121.  
  2122. end
  2123.  
  2124. % Callback function
  2125. function EingabeButtonPushed(app, event)
  2126. %sinnloser code, nicht löschbar
  2127. end
  2128.  
  2129. % Callback function
  2130. function EingabeButtonValueChanged(app, event)
  2131. %% Auswahl der Ordnung über Switch (PT2. oder IT2)
  2132.  
  2133. Verhalten = app.VerhaltenSwitch.Value;
  2134.  
  2135. %% Eingabe der Parameter der Regelstrecke
  2136.  
  2137. Kp = app.KpKiEditField.Value;
  2138. Ki = app.KpKiEditField.Value;
  2139. T1 = app.T1sEditField.Value;
  2140. T2 = app.T2sEditField.Value;
  2141. ts = app.TssEditField.Value;
  2142.  
  2143. %% Regelstrecke mit PT₂-Verhalten (2. Ordnung)
  2144.  
  2145. if strcmp(Verhalten, 'PT₂')
  2146.  
  2147. % Z-Transformation der gegeben Regelstrecke
  2148. A = (Kp*T1)/(T1-T2);
  2149. B = (Kp*T2)/(T2-T1);
  2150. z1 = exp(-ts/T1);
  2151. z2 = exp(-ts/T2);
  2152. b1 = A*(1-z1)+B*(1-z2);
  2153. b2 = -(A*z2*(1-z1)+B*z1*(1-z2));
  2154. a1 = -(z1+z2);
  2155. a2 = z1*z2;
  2156. z = tf('z');
  2157.  
  2158. % z-transformierte Streckenfunktion Gs
  2159. Zs = b1*z+b2;
  2160. Ns = z^2+a1*z+a2;
  2161. Gs = Zs/Ns;
  2162.  
  2163. % Übertragungsfunktion des Dead-Beat-Reglers
  2164. Zr = Ns;
  2165. Nr = (b1+b2)*z^2-b1*z-b2;
  2166. Gr = Zr/Nr;
  2167.  
  2168. % Ausgabe der Streckenübertragungsfunktion Gs
  2169. app.StreckeTextArea.Value = sprintf('\t%.5fz + %.5f\nGs(z) = ―――――――――――― \n\tz² + %.5fz + %.5f',b1,b2,a1,a2);
  2170.  
  2171. % Ausgabe des Dead-Beat-Reglers Gr
  2172. app.DeadBeatReglerTextArea.Value = sprintf('\tz² + %.5fz + %.5f\nGr(z) = ―――――――――――――――― \n\t%.5fz² + %.5fz + %.5f',a1,a2,b1+b2,-b1,-b2);
  2173.  
  2174. % Ausgabe Ausregelschritte und Gesamtregeldauer
  2175. app.kEditField.Value = 2;
  2176. app.TrsEditField.Value = 2*ts;
  2177.  
  2178. % Übertragungsfunktion des geschlossenen Regelkreises
  2179. Gm = (Gs*Gr)/(1+(Gs*Gr));
  2180. [y, t] = step(Gm);
  2181.  
  2182. % Regelgröße, Regeldifferenz und Stellgröße bestimmen
  2183. ti0 = 0; ti1 = 1; ti2 = 2;
  2184. x1 = interp1(t,y,ti0); x2 = interp1(t,y,ti1); x3 = interp1(t,y,ti2);
  2185. e1 = 1-x1; e2 = 1-x2; e3 = 1-x3;
  2186. u1 = (1/(b1+b2))*e1; u2 = (1+a1/(b1+b2))*e2; u3 = (1+a1+a2/(b1+b2))*e3;
  2187.  
  2188. % Tabelle mit Regel- und Stellgrößen zu den Abtastzeitpunkten
  2189. t = [0; ts; 2*ts];
  2190. k = [1; 2; 3];
  2191. x = [x1; x2; x3];
  2192. e = [e1; e2; e3];
  2193. u = [u1; u2; u3];
  2194. app.MesswerteTable.Data = table(t, k, x, e, u);
  2195.  
  2196. % Plot der Stellgröße
  2197. yStell = [0 u1 u1 u2 u2 u3 u3];
  2198. xStell = [0 0 ts ts 2*ts 2*ts 3*ts];
  2199. plot(app.StellAxes, xStell, yStell, "LineWidth", 1.5);
  2200.  
  2201. % Plot der Regelgröße
  2202. yRegel = [x1 x2 x3 x3];
  2203. xRegel = [0 ts 2*ts 3*ts];
  2204. plot(app.RegelAxes, xRegel, yRegel, "LineWidth", 1.5);
  2205.  
  2206. %% Regelstrecke mit IT₂-Verhalten (3.Ordnung)
  2207.  
  2208. elseif strcmp(Verhalten,'IT₂')
  2209.  
  2210. % Z-Transformation der gegebenen Regelstrecke
  2211. A = Ki;
  2212. B = ((A*T2^2)/(T2-T1))-A*(T1+T2);
  2213. C = (A*T2^2)/(T1-T2);
  2214. z1 = exp(-ts/T1);
  2215. z2 = exp(-ts/T2);
  2216. b1 = A*ts+B*(1-z1)+C*(1-z2);
  2217. b2 = -(A*ts*(z1+z2)+B*(1-z1)*(1+z2)+C*(1-z2)*(1+z1));
  2218. b3 = A*ts*z1*z2+B*(1-z1)*z2+C*(1-z2)*z1;
  2219. a1 = -z1-z2-1;
  2220. a2 = z1*(z2+1)+z2;
  2221. a3 = -z1*z2;
  2222. z = tf('z');
  2223.  
  2224. % z-transformierte Streckenfunktion Gs
  2225. Zs = b1*z^2+b2*z+b3;
  2226. Ns = z^3+a1*z^2+a2*z+a3;
  2227. Gs = Zs/Ns;
  2228.  
  2229. % Übertragungsfunktion des Dead-Beat-Reglers
  2230. Zr = Ns;
  2231. Nr = (b1+b2+b3)*z^3-Zs;
  2232. Gr = Zr/Nr;
  2233.  
  2234. % Ausgabe der Streckenübertragungsfunktion Gs
  2235. app.StreckeTextArea.Value = sprintf('\t%.5fz² + %.5fz + %.5f\nGs(z) = ―――――――――――――――――― \n\tz³ + %.5fz² + %.5fz + %.5f',b1,b2,b3,a1,a2,a3);
  2236.  
  2237. % Ausgabe des Dead-Beat-Reglers Gr
  2238. 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);
  2239.  
  2240. % Ausgabe Ausregelschritte und Gesamtregeldauer
  2241. app.kEditField.Value = 3;
  2242. app.TrsEditField.Value = 3*ts;
  2243.  
  2244. % Übertragungsfunktion des geschlossenen Regelkreises
  2245. Gm = (Gs*Gr)/(1+(Gs*Gr));
  2246. [y, t] = step(Gm);
  2247.  
  2248. % Regelgröße, Regeldifferenz und Stellgröße bestimmen
  2249. ti0 = 0; ti1 = 1; ti2 = 2; ti3 = 3;
  2250. x1 = interp1(t,y,ti0); x2 = interp1(t,y,ti1); x3 = interp1(t,y,ti2); x4 = interp1(t,y,ti3);
  2251. e1 = 1-x1; e2 = 1-x2; e3 = 1-x3; e4 = 1 - x4;
  2252. 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;
  2253.  
  2254. % Tabelle mit Regel- und Stellgrößen zu den Abtastzeitpunkten
  2255. t = [0; ts; 2*ts; 3*ts];
  2256. k = [1; 2; 3; 4];
  2257. x = [x1; x2; x3; x4];
  2258. e = [e1; e2; e3; e4];
  2259. u = [u1; u2; u3; u4];
  2260. app.MesswerteTable.Data = table(t, k, x, e, u);
  2261.  
  2262. % Plot der Stellgröße
  2263. yStell = [0 u1 u1 u2 u2 u3 u3 u4 u4];
  2264. xStell = [0 0 ts ts 2*ts 2*ts 3*ts 3*ts 4*ts];
  2265. plot(app.StellAxes, xStell, yStell, "LineWidth", 1.5);
  2266.  
  2267. % Plot der Regelgröße
  2268. yRegel = [x1 x2 x3 x4 x4];
  2269. xRegel = [0 ts 2*ts 3*ts 4*ts];
  2270. plot(app.RegelAxes, xRegel, yRegel, "LineWidth", 1.5);
  2271.  
  2272. end
  2273.  
  2274. %% Fehlerausgabe, wenn einer der Werte 0 beträgt
  2275.  
  2276. if Kp == 0
  2277.  
  2278. app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2279. app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2280.  
  2281. elseif Ki == 0
  2282.  
  2283. app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2284. app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2285.  
  2286. elseif T1 == 0
  2287.  
  2288. app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2289. app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2290.  
  2291. elseif T2 == 0
  2292.  
  2293. app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2294. app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2295.  
  2296. elseif ts == 0
  2297.  
  2298. app.StreckeTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2299. app.DeadBeatReglerTextArea.Value = 'Alle Parameter müssen größer als 0 sein!';
  2300.  
  2301. elseif T1 == T2
  2302.  
  2303. app.StreckeTextArea.Value = 'Die Streckenzeitkonstanten T₁ und T₂ dürfen nicht den gleichen Wert haben!'
  2304. app.DeadBeatReglerTextArea.Value = 'Die Streckenzeitkonstanten T₁ und T₂ dürfen nicht den gleichen Wert haben!'
  2305.  
  2306. end
  2307.  
  2308. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2309. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2310. %%%% %%%%
  2311. %%%% App für den Entwurf eines Dead-Beat-Regelers %%%%
  2312. %%%% Final Version 18.01.2024 %%%%
  2313. %%%% © Paul Steinbrink (ET21, SPII) %%%%
  2314. %%%% %%%%
  2315. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2316. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2317.  
  2318.  
  2319. end
  2320.  
  2321. % Button pushed function: StreckebernehmeninDBRButton
  2322. function StreckebernehmeninDBRButtonPushed(app, event)
  2323. GsDisp = evalin('base', 'GsDisp');
  2324. assignin('base','gs',GsDisp);
  2325. app.StreckeausStreckenpanelTextArea.Value = GsDisp;
  2326. end
  2327.  
  2328. % Button pushed function: StartButton
  2329. function StartButtonPushed(app, event)
  2330.  
  2331. %Löschen aller Text- und Diagramm-Inhalte
  2332. app.StreckeTextArea.Value = '';
  2333. app.DeadBeatReglerTextArea.Value = '';
  2334. app.MesswerteTable.Data = {};
  2335. cla(app.RegelAxes);
  2336. cla(app.StellAxes);
  2337.  
  2338. %Streckenübertragungsfunktion in die Funktion holen
  2339. Gs = evalin('base','Gs');
  2340.  
  2341. %Entscheidung, welche Strategie gewählt wird
  2342. % IT2_Strecke = 0 -> PT2 oder IT2_Strecke = 1 -> IT2
  2343.  
  2344. %Teststrecke
  2345. %IT2_Strecke = 0;
  2346. %PT2 = tf(3, [0.1 0.7 1]);
  2347. %IT2 = tf(10, [0.02 0.3 1 0]);
  2348.  
  2349.  
  2350. %Eingabewerte auslesen und übergeben
  2351. assignin('base','u_max',app.U_maxEditField.Value);
  2352. assignin('base','u_min',app.U_minEditField.Value);
  2353. assignin('base','tau',app.AbtastzeitEditField.Value);
  2354. %assignin('base','IT2',0);
  2355. IT2_Strecke = evalin('base','IT2_Strecke');
  2356. %auswahlModi = app.RegelstrategieButtonGroup.Text;
  2357. u_max = evalin('base','u_max');
  2358. u_min = evalin('base','u_min');
  2359. if IT2_Strecke < 1
  2360.  
  2361. %%%%%%%%%%%%%%%
  2362. % PT2-Strecke %
  2363. %%%%%%%%%%%%%%%
  2364.  
  2365. %gs = PT2;
  2366. tau = evalin('base', 'tau');
  2367. gz = c2d(Gs, tau); % kontinuierliche Strecke diskretisieren
  2368.  
  2369. [numerator, denominator] = tfdata(gz); % Koeffizienten der diskretiesierten Strecke extrahieren
  2370.  
  2371. % Zähler
  2372. b2 = numerator{1}(1);
  2373. b1 = numerator{1}(2);
  2374. b0 = numerator{1}(3); % niedrigster Exponent
  2375.  
  2376. % Nenner
  2377. a2 = denominator{1}(1);
  2378. a1 = denominator{1}(2);
  2379. a0 = denominator{1}(3); % niedrigster Exponent
  2380.  
  2381. assignin('base','b2',b2);
  2382. assignin('base','b1',b2);
  2383. assignin('base','b0',b0);
  2384.  
  2385. assignin('base','a2',a2);
  2386. assignin('base','a1',a1);
  2387. assignin('base','a0',a0);
  2388.  
  2389. else
  2390.  
  2391. %%%%%%%%%%%%%%%
  2392. % IT2-Strecke %
  2393. %%%%%%%%%%%%%%%
  2394.  
  2395. %gs = IT2;
  2396. tau = evalin('base', 'tau');
  2397. gz = c2d(Gs, tau); % kontinuierliche Strecke diskretisieren
  2398.  
  2399. [numerator, denominator] = tfdata(gz); % Koeffizienten der diskretiesierten Strecke extrahieren
  2400.  
  2401. % Zähler
  2402. b2 = numerator{1}(2);
  2403. b1 = numerator{1}(3);
  2404. b0 = numerator{1}(4); % niedrigster Exponent
  2405.  
  2406. % Nenner
  2407. a2 = denominator{1}(2);
  2408. a1 = denominator{1}(3);
  2409. a0 = denominator{1}(4); % niedrigster Exponent
  2410.  
  2411. assignin('base','b2',b2);
  2412. assignin('base','b1',b2);
  2413. assignin('base','b0',b0);
  2414.  
  2415. assignin('base','a2',a2);
  2416. assignin('base','a1',a1);
  2417. assignin('base','a0',a0);
  2418.  
  2419. end
  2420.  
  2421.  
  2422. %Debug
  2423. %gs = evalin('base', 'gs');
  2424. %app.DebugTextArea.Value = gs;
  2425.  
  2426.  
  2427.  
  2428. %Werte aus Simulation holen
  2429. simOut = sim('Deadbeatregler.slx','SimulationMode','normal');
  2430. Sollwert_korr_w = simOut.get('Sollwert_korr_w');
  2431. Sollwert_korr_e = simOut.get('Sollwert_korr_e');
  2432. Sollwert_korr_u = simOut.get('Sollwert_korr_u');
  2433. Sollwert_Regelgroesse = simOut.get('Sollwert_Regelgroesse');
  2434. Sollwert_Stellgroesse = simOut.get('Sollwert_Stellgroesse');
  2435. Abtastzeit_Regelgroesse = simOut.get('Abtastzeit_Regelgroesse');
  2436. Abtastzeit_Stellgroesse = simOut.get('Abtastzeit_Stellgroesse');
  2437.  
  2438. %Debug
  2439. assignin('base',"Sollwert_Stellgroesse",Sollwert_Stellgroesse);
  2440. assignin('base',"Abtastzeit_Stellgroesse",Abtastzeit_Stellgroesse);
  2441. assignin('base',"Sollwert_korr_u",Sollwert_korr_u);
  2442. assignin('base',"Sollwert_korr_w",Sollwert_korr_w);
  2443. assignin('base',"Sollwert_korr_e",Sollwert_korr_e);
  2444.  
  2445. if IT2_Strecke < 1
  2446. % Ausgabe der Streckenübertragungsfunktion Gz
  2447. app.StreckeTextArea.Value = sprintf('\t%.5fz + %.5f\nGz(z) = ―――――――――――――――――― \n\t%.5fz² + %.5fz',b2,b1,a2,a1);
  2448.  
  2449. % Ausgabe des Dead-Beat-Reglers Gz
  2450. app.DeadBeatReglerTextArea.Value = sprintf('\tz² + %.5fz + %.5f\nGr(z) = ―――――――――――――――――――――― \n\t%.5fz³ + %.5fz² + %.5fz',a1,a2,b1+b2,-b1,-b2);
  2451. else
  2452. % Ausgabe der Streckenübertragungsfunktion Gz
  2453. app.StreckeTextArea.Value = sprintf('\t%.5fz² + %.5fz + %.5f\nGz(z) = ―――――――――――――――――― \n\tz³ + %.5fz² + %.5fz + %.5f',b1,b2,b3,a1,a2,a3);
  2454.  
  2455. % Ausgabe des Dead-Beat-Reglers Gz
  2456. 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);
  2457. end
  2458.  
  2459. % Ausgabe Ausregelschritte und Gesamtregeldauer
  2460. letzter_zeitpunkt = app.AbtastzeitEditField.Value(end);
  2461. if IT2_Strecke == 0
  2462. app.kEditField.Value = 1;%countervariable;
  2463. app.TrsEditField.Value = 1;%zeitvariable;
  2464. else
  2465. app.kEditField.Value = 1;%countervariable;
  2466. app.TrsEditField.Value = 1;%zeitvariable;
  2467. end
  2468.  
  2469. %Tabelle für U, W, E
  2470. %Wenn Abtastzeit
  2471. %Wenn Sollwert
  2472. %Wenn Keine
  2473. tabellenzeit = Sollwert_korr_u.time;
  2474. values1 = Sollwert_korr_u.signals.values;
  2475. values2 = Sollwert_korr_w.signals.values;
  2476. values3 = Sollwert_korr_e.signals.values;
  2477. Data = table(tabellenzeit, values1, values2, values3);
  2478. uitable_data = table2cell(Data);
  2479. app.MesswerteTable.Data = uitable_data;
  2480.  
  2481.  
  2482. % Plot der Stellgröße
  2483. if app.SollwertkorrekturButton.Value
  2484. stairs(app.StellAxes, Sollwert_Stellgroesse.time, Sollwert_Stellgroesse.signals.values, "LineWidth", 1.5);
  2485.  
  2486. elseif app.AbtastzeitButton.Value
  2487. stairs(app.StellAxes, Abtastzeit_Stellgroesse.time, Abtastzeit_Stellgroesse.signals.values, "LineWidth", 1.5);
  2488.  
  2489. elseif app.keineButton.Value %für 'keine' wird der Graph für Sollwertkorrektur verwendet
  2490. stairs(app.StellAxes, Sollwert_Stellgroesse.time, Sollwert_Stellgroesse.signals.values, "LineWidth", 1.5);
  2491.  
  2492. end
  2493.  
  2494. %Plot der Regelgröße
  2495. if app.SollwertkorrekturButton.Value == 1
  2496. plot(app.RegelAxes, Sollwert_Regelgroesse.time, [Sollwert_Regelgroesse.signals.values], "LineWidth", 1.5);
  2497.  
  2498. elseif app.AbtastzeitButton.Value == 1
  2499. plot(app.RegelAxes, Abtastzeit_Regelgroesse.time, [Abtastzeit_Regelgroesse.signals.values], "LineWidth", 1.5);
  2500.  
  2501. else app.keineButton.Value%für 'keine' wird der Graph für Sollwertkorrektur verwendet
  2502. plot(app.RegelAxes, Sollwert_Regelgroesse.time, [Sollwert_Regelgroesse.signals.values], "LineWidth", 1.5);
  2503.  
  2504. end
  2505.  
  2506. %% Fehlerausgabe
  2507.  
  2508. if app.AbtastzeitEditField.Value <= 0
  2509.  
  2510. app.StreckeTextArea.Value = 'Abtastzeit muss größer als 0 sein!';
  2511. app.DeadBeatReglerTextArea.Value = 'Abtastzeit muss größer als 0 sein!';
  2512.  
  2513. elseif app.U_maxEditField.Value < app.U_minEditField.Value
  2514.  
  2515. app.StreckeTextArea.Value = 'U_max muss größer als U_min sein!';
  2516. app.DeadBeatReglerTextArea.Value = 'U_max muss größer als U_min sein!';
  2517.  
  2518. elseif app.U_maxEditField.Value <= 0
  2519. app.StreckeTextArea.Value = 'U_max muss positiv sein!';
  2520. app.DeadBeatReglerTextArea.Value = 'U_max muss positiv sein!';
  2521.  
  2522. elseif app.U_minEditField.Value > app.U_maxEditField.Value
  2523.  
  2524. app.StreckeTextArea.Value = 'U_min muss größer als U_max sein!';
  2525. app.DeadBeatReglerTextArea.Value = 'U_min muss größer als U_max sein!';
  2526.  
  2527. elseif app.U_minEditField.Value >= 0
  2528. app.StreckeTextArea.Value = 'U_min muss negativ sein!';
  2529. app.DeadBeatReglerTextArea.Value = 'U_min muss negativ sein!';
  2530.  
  2531. end
  2532.  
  2533.  
  2534.  
  2535. end
  2536. end
  2537.  
  2538. % Component initialization
  2539. methods (Access = private)
  2540.  
  2541. % Create UIFigure and components
  2542. function createComponents(app)
  2543.  
  2544. % Get the file path for locating images
  2545. pathToMLAPP = fileparts(mfilename('fullpath'));
  2546.  
  2547. % Create PIDTool and hide until all components are created
  2548. app.PIDTool = uifigure('Visible', 'off');
  2549. app.PIDTool.Position = [96 96 1024 576];
  2550. app.PIDTool.Name = 'PID Tool';
  2551. app.PIDTool.Resize = 'off';
  2552.  
  2553. % Create TabGroup
  2554. app.TabGroup = uitabgroup(app.PIDTool);
  2555. app.TabGroup.AutoResizeChildren = 'off';
  2556. app.TabGroup.Position = [1 1 1024 576];
  2557.  
  2558. % Create Messwert
  2559. app.Messwert = uitab(app.TabGroup);
  2560. app.Messwert.Title = 'Messwertpanel';
  2561.  
  2562. % Create Messwerte
  2563. app.Messwerte = uiaxes(app.Messwert);
  2564. title(app.Messwerte, 'Messwerte inkl. Korrektur')
  2565. xlabel(app.Messwerte, 'Zeit in s')
  2566. ylabel(app.Messwerte, 'Y')
  2567. app.Messwerte.YGrid = 'on';
  2568. app.Messwerte.Position = [405 192 444 297];
  2569.  
  2570. % Create DateinameinklEndungEditFieldLabel
  2571. app.DateinameinklEndungEditFieldLabel = uilabel(app.Messwert);
  2572. app.DateinameinklEndungEditFieldLabel.HorizontalAlignment = 'right';
  2573. app.DateinameinklEndungEditFieldLabel.Position = [74 467 133 22];
  2574. app.DateinameinklEndungEditFieldLabel.Text = 'Dateiname inkl. Endung';
  2575.  
  2576. % Create DateinameinklEndungEditField
  2577. app.DateinameinklEndungEditField = uieditfield(app.Messwert, 'text');
  2578. app.DateinameinklEndungEditField.Position = [100 446 100 22];
  2579.  
  2580. % Create DateinichtvorhandenLabel
  2581. app.DateinichtvorhandenLabel = uilabel(app.Messwert);
  2582. app.DateinichtvorhandenLabel.HorizontalAlignment = 'center';
  2583. app.DateinichtvorhandenLabel.FontWeight = 'bold';
  2584. app.DateinichtvorhandenLabel.FontColor = [1 0 0];
  2585. app.DateinichtvorhandenLabel.Position = [82 417 136 22];
  2586. app.DateinichtvorhandenLabel.Text = 'Datei nicht vorhanden!';
  2587.  
  2588. % Create TextausrichtungSwitch
  2589. app.TextausrichtungSwitch = uiswitch(app.Messwert, 'slider');
  2590. app.TextausrichtungSwitch.Items = {'Zeilenweise', 'Spaltenweise'};
  2591. app.TextausrichtungSwitch.Position = [124 381 45 20];
  2592. app.TextausrichtungSwitch.Value = 'Zeilenweise';
  2593.  
  2594. % Create TextausrichtungSwitchLabel
  2595. app.TextausrichtungSwitchLabel = uilabel(app.Messwert);
  2596. app.TextausrichtungSwitchLabel.HorizontalAlignment = 'center';
  2597. app.TextausrichtungSwitchLabel.Position = [102.5 344 90 22];
  2598. app.TextausrichtungSwitchLabel.Text = 'Textausrichtung';
  2599.  
  2600. % Create MesswertgraphErzeugenButton
  2601. app.MesswertgraphErzeugenButton = uibutton(app.Messwert, 'push');
  2602. app.MesswertgraphErzeugenButton.ButtonPushedFcn = createCallbackFcn(app, @MesswertgraphErzeugenButtonPushed, true);
  2603. app.MesswertgraphErzeugenButton.Position = [71 265 152 22];
  2604. app.MesswertgraphErzeugenButton.Text = 'Messwertgraph Erzeugen';
  2605.  
  2606. % Create UebertragungsfunktionButtonGroup
  2607. app.UebertragungsfunktionButtonGroup = uibuttongroup(app.Messwert);
  2608. app.UebertragungsfunktionButtonGroup.TitlePosition = 'centertop';
  2609. app.UebertragungsfunktionButtonGroup.Title = 'Uebertragungsfunktion';
  2610. app.UebertragungsfunktionButtonGroup.Position = [71 53 152 106];
  2611.  
  2612. % Create PT1Button
  2613. app.PT1Button = uitogglebutton(app.UebertragungsfunktionButtonGroup);
  2614. app.PT1Button.Text = 'PT1';
  2615. app.PT1Button.Position = [7 53 143 22];
  2616. app.PT1Button.Value = true;
  2617.  
  2618. % Create PT2Button
  2619. app.PT2Button = uitogglebutton(app.UebertragungsfunktionButtonGroup);
  2620. app.PT2Button.Text = 'PT2';
  2621. app.PT2Button.Position = [7 32 143 22];
  2622.  
  2623. % Create PT2mitUeberschwingenButton
  2624. app.PT2mitUeberschwingenButton = uitogglebutton(app.UebertragungsfunktionButtonGroup);
  2625. app.PT2mitUeberschwingenButton.Text = 'PT2 mit Ueberschwingen';
  2626. app.PT2mitUeberschwingenButton.Position = [3 11 150 22];
  2627.  
  2628. % Create bergangsfunktionTextAreaLabel
  2629. app.bergangsfunktionTextAreaLabel = uilabel(app.Messwert);
  2630. app.bergangsfunktionTextAreaLabel.HorizontalAlignment = 'right';
  2631. app.bergangsfunktionTextAreaLabel.Position = [411 135 106 22];
  2632. app.bergangsfunktionTextAreaLabel.Text = 'Übergangsfunktion';
  2633.  
  2634. % Create bergangsfunktionTextArea
  2635. app.bergangsfunktionTextArea = uitextarea(app.Messwert);
  2636. app.bergangsfunktionTextArea.Position = [562 76 287 83];
  2637.  
  2638. % Create UebertragungsfunktionerzeugenButton
  2639. app.UebertragungsfunktionerzeugenButton = uibutton(app.Messwert, 'push');
  2640. app.UebertragungsfunktionerzeugenButton.ButtonPushedFcn = createCallbackFcn(app, @UebertragungsfunktionerzeugenButtonPushed, true);
  2641. app.UebertragungsfunktionerzeugenButton.Position = [53 33 191 22];
  2642. app.UebertragungsfunktionerzeugenButton.Text = 'Uebertragungsfunktion erzeugen';
  2643.  
  2644. % Create DropDownLabel
  2645. app.DropDownLabel = uilabel(app.Messwert);
  2646. app.DropDownLabel.HorizontalAlignment = 'right';
  2647. app.DropDownLabel.Position = [326 483 66 22];
  2648. app.DropDownLabel.Text = 'Drop Down';
  2649.  
  2650. % Create DropDown
  2651. app.DropDown = uidropdown(app.Messwert);
  2652. app.DropDown.Position = [407 483 100 22];
  2653.  
  2654. % Create StreckenpanelTab
  2655. app.StreckenpanelTab = uitab(app.TabGroup);
  2656. app.StreckenpanelTab.AutoResizeChildren = 'off';
  2657. app.StreckenpanelTab.Title = 'Streckenpanel';
  2658.  
  2659. % Create UebergangsfunktionDiagramm
  2660. app.UebergangsfunktionDiagramm = uiaxes(app.StreckenpanelTab);
  2661. title(app.UebergangsfunktionDiagramm, 'Übergangsfunktion der Strecke')
  2662. xlabel(app.UebergangsfunktionDiagramm, 'Zeit[s]')
  2663. ylabel(app.UebergangsfunktionDiagramm, 'h(t)')
  2664. app.UebergangsfunktionDiagramm.YGrid = 'on';
  2665. app.UebergangsfunktionDiagramm.Position = [31 5 535 270];
  2666.  
  2667. % Create ModStreckeneingabeButtonGroup
  2668. app.ModStreckeneingabeButtonGroup = uibuttongroup(app.StreckenpanelTab);
  2669. app.ModStreckeneingabeButtonGroup.AutoResizeChildren = 'off';
  2670. app.ModStreckeneingabeButtonGroup.Title = 'Gegben Sie ein:';
  2671. app.ModStreckeneingabeButtonGroup.Position = [31 462 123 73];
  2672.  
  2673. % Create KoeffizientenButton
  2674. app.KoeffizientenButton = uiradiobutton(app.ModStreckeneingabeButtonGroup);
  2675. app.KoeffizientenButton.Text = 'Koeffizienten';
  2676. app.KoeffizientenButton.Position = [11 27 91 22];
  2677. app.KoeffizientenButton.Value = true;
  2678.  
  2679. % Create PolynomdirektButton
  2680. app.PolynomdirektButton = uiradiobutton(app.ModStreckeneingabeButtonGroup);
  2681. app.PolynomdirektButton.Text = 'Polynom direkt';
  2682. app.PolynomdirektButton.Position = [11 5 101 22];
  2683.  
  2684. % Create StreckenbertragungsfunktionTextAreaLabel
  2685. app.StreckenbertragungsfunktionTextAreaLabel = uilabel(app.StreckenpanelTab);
  2686. app.StreckenbertragungsfunktionTextAreaLabel.HorizontalAlignment = 'right';
  2687. app.StreckenbertragungsfunktionTextAreaLabel.Position = [263 499 166 22];
  2688. app.StreckenbertragungsfunktionTextAreaLabel.Text = 'Streckenübertragungsfunktion';
  2689.  
  2690. % Create StabilitaetdesSystemsnachHurwitzLabel
  2691. app.StabilitaetdesSystemsnachHurwitzLabel = uilabel(app.StreckenpanelTab);
  2692. app.StabilitaetdesSystemsnachHurwitzLabel.HorizontalAlignment = 'center';
  2693. app.StabilitaetdesSystemsnachHurwitzLabel.Position = [519.5 499 130 22];
  2694. app.StabilitaetdesSystemsnachHurwitzLabel.Text = 'Stabilität und Polstellen';
  2695.  
  2696. % Create StreckenanalysePanel
  2697. app.StreckenanalysePanel = uipanel(app.StreckenpanelTab);
  2698. app.StreckenanalysePanel.AutoResizeChildren = 'off';
  2699. app.StreckenanalysePanel.TitlePosition = 'centertop';
  2700. app.StreckenanalysePanel.Title = 'Streckenanalyse';
  2701. app.StreckenanalysePanel.Position = [703 76 275 445];
  2702.  
  2703. % Create reduzierteFunktionLabel
  2704. app.reduzierteFunktionLabel = uilabel(app.StreckenanalysePanel);
  2705. app.reduzierteFunktionLabel.FontColor = [1 0.4118 0.1608];
  2706. app.reduzierteFunktionLabel.Visible = 'off';
  2707. app.reduzierteFunktionLabel.Position = [83 406 108 22];
  2708. app.reduzierteFunktionLabel.Text = 'reduzierte Funktion';
  2709.  
  2710. % Create orginalFunktionLabel
  2711. app.orginalFunktionLabel = uilabel(app.StreckenanalysePanel);
  2712. app.orginalFunktionLabel.Position = [91 406 91 22];
  2713. app.orginalFunktionLabel.Text = 'orginal Funktion';
  2714.  
  2715. % Create OrdnungTextAreaLabel
  2716. app.OrdnungTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2717. app.OrdnungTextAreaLabel.HorizontalAlignment = 'center';
  2718. app.OrdnungTextAreaLabel.Position = [11 384 52 22];
  2719. app.OrdnungTextAreaLabel.Text = 'Ordnung';
  2720.  
  2721. % Create OrdnungTextArea
  2722. app.OrdnungTextArea = uitextarea(app.StreckenanalysePanel);
  2723. app.OrdnungTextArea.Editable = 'off';
  2724. app.OrdnungTextArea.Position = [164 384 103 22];
  2725.  
  2726. % Create WendepunktbeitTextAreaLabel
  2727. app.WendepunktbeitTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2728. app.WendepunktbeitTextAreaLabel.HorizontalAlignment = 'center';
  2729. app.WendepunktbeitTextAreaLabel.Position = [11 356 99 22];
  2730. app.WendepunktbeitTextAreaLabel.Text = 'Wendepunkt bei t';
  2731.  
  2732. % Create WendepunktbeitTextArea
  2733. app.WendepunktbeitTextArea = uitextarea(app.StreckenanalysePanel);
  2734. app.WendepunktbeitTextArea.Editable = 'off';
  2735. app.WendepunktbeitTextArea.Position = [164 355 103 22];
  2736.  
  2737. % Create SteigungimWendepunktTextAreaLabel
  2738. app.SteigungimWendepunktTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2739. app.SteigungimWendepunktTextAreaLabel.HorizontalAlignment = 'right';
  2740. app.SteigungimWendepunktTextAreaLabel.Position = [11 328 139 22];
  2741. app.SteigungimWendepunktTextAreaLabel.Text = 'Steigung im Wendepunkt';
  2742.  
  2743. % Create SteigungimWendepunktTextArea
  2744. app.SteigungimWendepunktTextArea = uitextarea(app.StreckenanalysePanel);
  2745. app.SteigungimWendepunktTextArea.Editable = 'off';
  2746. app.SteigungimWendepunktTextArea.Position = [164 326 103 22];
  2747.  
  2748. % Create FktWertimWendepunktTextAreaLabel
  2749. app.FktWertimWendepunktTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2750. app.FktWertimWendepunktTextAreaLabel.HorizontalAlignment = 'center';
  2751. app.FktWertimWendepunktTextAreaLabel.Position = [11 302 141 22];
  2752. app.FktWertimWendepunktTextAreaLabel.Text = 'Fkt.-Wert im Wendepunkt';
  2753.  
  2754. % Create FktWertimWendepunktTextArea
  2755. app.FktWertimWendepunktTextArea = uitextarea(app.StreckenanalysePanel);
  2756. app.FktWertimWendepunktTextArea.Editable = 'off';
  2757. app.FktWertimWendepunktTextArea.Position = [164 297 103 22];
  2758.  
  2759. % Create ProportionalbeiwertKpsTextAreaLabel
  2760. app.ProportionalbeiwertKpsTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2761. app.ProportionalbeiwertKpsTextAreaLabel.HorizontalAlignment = 'center';
  2762. app.ProportionalbeiwertKpsTextAreaLabel.Position = [10 274 133 22];
  2763. app.ProportionalbeiwertKpsTextAreaLabel.Text = 'Proportionalbeiwert Kps';
  2764.  
  2765. % Create ProportionalbeiwertKpsTextArea
  2766. app.ProportionalbeiwertKpsTextArea = uitextarea(app.StreckenanalysePanel);
  2767. app.ProportionalbeiwertKpsTextArea.Editable = 'off';
  2768. app.ProportionalbeiwertKpsTextArea.Position = [163 268 104 22];
  2769.  
  2770. % Create TauTextAreaLabel
  2771. app.TauTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2772. app.TauTextAreaLabel.HorizontalAlignment = 'center';
  2773. app.TauTextAreaLabel.Position = [9 245 25 22];
  2774. app.TauTextAreaLabel.Text = 'Tau';
  2775.  
  2776. % Create TauTextArea
  2777. app.TauTextArea = uitextarea(app.StreckenanalysePanel);
  2778. app.TauTextArea.Editable = 'off';
  2779. app.TauTextArea.Position = [164 239 103 22];
  2780.  
  2781. % Create SteigungKisoAusgleichTextAreaLabel
  2782. app.SteigungKisoAusgleichTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2783. app.SteigungKisoAusgleichTextAreaLabel.HorizontalAlignment = 'center';
  2784. app.SteigungKisoAusgleichTextAreaLabel.Position = [9 209 150 22];
  2785. app.SteigungKisoAusgleichTextAreaLabel.Text = 'Steigung Kis (o. Ausgleich)';
  2786.  
  2787. % Create SteigungKisoAusgleichTextArea
  2788. app.SteigungKisoAusgleichTextArea = uitextarea(app.StreckenanalysePanel);
  2789. app.SteigungKisoAusgleichTextArea.Editable = 'off';
  2790. app.SteigungKisoAusgleichTextArea.Position = [164 210 103 22];
  2791.  
  2792. % Create TuooAusgleichTextAreaLabel
  2793. app.TuooAusgleichTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2794. app.TuooAusgleichTextAreaLabel.HorizontalAlignment = 'center';
  2795. app.TuooAusgleichTextAreaLabel.Position = [11 184 103 22];
  2796. app.TuooAusgleichTextAreaLabel.Text = 'Tuo (o. Ausgleich)';
  2797.  
  2798. % Create TuooAusgleichTextArea
  2799. app.TuooAusgleichTextArea = uitextarea(app.StreckenanalysePanel);
  2800. app.TuooAusgleichTextArea.Editable = 'off';
  2801. app.TuooAusgleichTextArea.Position = [164 181 103 22];
  2802.  
  2803. % Create DmpfungDTextAreaLabel
  2804. app.DmpfungDTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2805. app.DmpfungDTextAreaLabel.HorizontalAlignment = 'center';
  2806. app.DmpfungDTextAreaLabel.Position = [11 152 73 22];
  2807. app.DmpfungDTextAreaLabel.Text = 'Dämpfung D';
  2808.  
  2809. % Create DmpfungDTextArea
  2810. app.DmpfungDTextArea = uitextarea(app.StreckenanalysePanel);
  2811. app.DmpfungDTextArea.Editable = 'off';
  2812. app.DmpfungDTextArea.Position = [164 152 103 22];
  2813.  
  2814. % Create berschwingweiteLabel_2
  2815. app.berschwingweiteLabel_2 = uilabel(app.StreckenanalysePanel);
  2816. app.berschwingweiteLabel_2.HorizontalAlignment = 'center';
  2817. app.berschwingweiteLabel_2.Position = [9 123 118 22];
  2818. app.berschwingweiteLabel_2.Text = 'Überschwingweite ü';
  2819.  
  2820. % Create berschwingweiteTextArea
  2821. app.berschwingweiteTextArea = uitextarea(app.StreckenanalysePanel);
  2822. app.berschwingweiteTextArea.Editable = 'off';
  2823. app.berschwingweiteTextArea.Position = [164 123 102 22];
  2824.  
  2825. % Create EigenkreisfrequenzweLabel
  2826. app.EigenkreisfrequenzweLabel = uilabel(app.StreckenanalysePanel);
  2827. app.EigenkreisfrequenzweLabel.Position = [13 96 140 22];
  2828. app.EigenkreisfrequenzweLabel.Text = 'Eigenkreisfrequenz we';
  2829.  
  2830. % Create EigenkreisfrequenzweTextArea
  2831. app.EigenkreisfrequenzweTextArea = uitextarea(app.StreckenanalysePanel);
  2832. app.EigenkreisfrequenzweTextArea.Editable = 'off';
  2833. app.EigenkreisfrequenzweTextArea.Position = [164 94 103 22];
  2834.  
  2835. % Create VerzugszeitTuTextAreaLabel
  2836. app.VerzugszeitTuTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2837. app.VerzugszeitTuTextAreaLabel.HorizontalAlignment = 'center';
  2838. app.VerzugszeitTuTextAreaLabel.Position = [9 67 84 22];
  2839. app.VerzugszeitTuTextAreaLabel.Text = 'Verzugszeit Tu';
  2840.  
  2841. % Create VerzugszeitTuTextArea
  2842. app.VerzugszeitTuTextArea = uitextarea(app.StreckenanalysePanel);
  2843. app.VerzugszeitTuTextArea.Editable = 'off';
  2844. app.VerzugszeitTuTextArea.Position = [164 65 103 22];
  2845.  
  2846. % Create AusgleichszeitTgTextAreaLabel
  2847. app.AusgleichszeitTgTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2848. app.AusgleichszeitTgTextAreaLabel.HorizontalAlignment = 'center';
  2849. app.AusgleichszeitTgTextAreaLabel.Position = [9 40 100 22];
  2850. app.AusgleichszeitTgTextAreaLabel.Text = 'Ausgleichszeit Tg';
  2851.  
  2852. % Create AusgleichszeitTgTextArea
  2853. app.AusgleichszeitTgTextArea = uitextarea(app.StreckenanalysePanel);
  2854. app.AusgleichszeitTgTextArea.Editable = 'off';
  2855. app.AusgleichszeitTgTextArea.Position = [164 36 103 22];
  2856.  
  2857. % Create VerhltnisTuzuTgTextAreaLabel
  2858. app.VerhltnisTuzuTgTextAreaLabel = uilabel(app.StreckenanalysePanel);
  2859. app.VerhltnisTuzuTgTextAreaLabel.HorizontalAlignment = 'center';
  2860. app.VerhltnisTuzuTgTextAreaLabel.Position = [9 7 108 22];
  2861. app.VerhltnisTuzuTgTextAreaLabel.Text = 'Verhältnis Tu zu Tg';
  2862.  
  2863. % Create VerhaeltnisTuzuTgTextArea
  2864. app.VerhaeltnisTuzuTgTextArea = uitextarea(app.StreckenanalysePanel);
  2865. app.VerhaeltnisTuzuTgTextArea.Editable = 'off';
  2866. app.VerhaeltnisTuzuTgTextArea.Position = [164 8 103 22];
  2867.  
  2868. % Create StreckenuebertragungsfunktionTextArea
  2869. app.StreckenuebertragungsfunktionTextArea = uitextarea(app.StreckenpanelTab);
  2870. app.StreckenuebertragungsfunktionTextArea.Editable = 'off';
  2871. app.StreckenuebertragungsfunktionTextArea.HorizontalAlignment = 'center';
  2872. app.StreckenuebertragungsfunktionTextArea.Position = [232 392 227 108];
  2873.  
  2874. % Create HurwitzTextArea
  2875. app.HurwitzTextArea = uitextarea(app.StreckenpanelTab);
  2876. app.HurwitzTextArea.Position = [485 321 200 175];
  2877.  
  2878. % Create KoeffizientdesZaehlersEditField
  2879. app.KoeffizientdesZaehlersEditField = uieditfield(app.StreckenpanelTab, 'text');
  2880. app.KoeffizientdesZaehlersEditField.Position = [31 425 183 22];
  2881.  
  2882. % Create ZhlerLabel
  2883. app.ZhlerLabel = uilabel(app.StreckenpanelTab);
  2884. app.ZhlerLabel.HorizontalAlignment = 'right';
  2885. app.ZhlerLabel.Position = [162 446 39 22];
  2886. app.ZhlerLabel.Text = 'Zähler';
  2887.  
  2888. % Create EditField
  2889. app.EditField = uieditfield(app.StreckenpanelTab, 'text');
  2890. app.EditField.ValueChangedFcn = createCallbackFcn(app, @ErstellenButtonPushed, true);
  2891. app.EditField.Position = [31 383 183 22];
  2892.  
  2893. % Create ErstellenButton
  2894. app.ErstellenButton = uibutton(app.StreckenpanelTab, 'push');
  2895. app.ErstellenButton.ButtonPushedFcn = createCallbackFcn(app, @ErstellenButtonPushed, true);
  2896. app.ErstellenButton.Position = [33 352 110 22];
  2897. app.ErstellenButton.Text = 'Erstellen';
  2898.  
  2899. % Create StreckenreduktonButton
  2900. app.StreckenreduktonButton = uibutton(app.StreckenpanelTab, 'push');
  2901. app.StreckenreduktonButton.ButtonPushedFcn = createCallbackFcn(app, @StreckenreduktonButtonPushed, true);
  2902. app.StreckenreduktonButton.Position = [33 333 110 22];
  2903. app.StreckenreduktonButton.Text = 'Streckenredukton';
  2904.  
  2905. % Create TotzeitEditFieldLabel
  2906. app.TotzeitEditFieldLabel = uilabel(app.StreckenpanelTab);
  2907. app.TotzeitEditFieldLabel.HorizontalAlignment = 'right';
  2908. app.TotzeitEditFieldLabel.Position = [197 339 40 22];
  2909. app.TotzeitEditFieldLabel.Text = 'Totzeit';
  2910.  
  2911. % Create TotzeitEditField
  2912. app.TotzeitEditField = uieditfield(app.StreckenpanelTab, 'text');
  2913. app.TotzeitEditField.Position = [252 339 100 22];
  2914.  
  2915. % Create Totzeitwirdauf0gesetztLabel
  2916. app.Totzeitwirdauf0gesetztLabel = uilabel(app.StreckenpanelTab);
  2917. app.Totzeitwirdauf0gesetztLabel.FontSize = 13;
  2918. app.Totzeitwirdauf0gesetztLabel.FontWeight = 'bold';
  2919. app.Totzeitwirdauf0gesetztLabel.FontColor = [1 0 0];
  2920. app.Totzeitwirdauf0gesetztLabel.Visible = 'off';
  2921. app.Totzeitwirdauf0gesetztLabel.Position = [220 312 163 22];
  2922. app.Totzeitwirdauf0gesetztLabel.Text = 'Totzeit wird auf 0 gesetzt!';
  2923.  
  2924. % Create Label
  2925. app.Label = uilabel(app.StreckenpanelTab);
  2926. app.Label.HorizontalAlignment = 'right';
  2927. app.Label.FontSize = 16;
  2928. app.Label.Visible = 'off';
  2929. app.Label.Position = [142 191 25 22];
  2930. app.Label.Text = '';
  2931.  
  2932. % Create StreckeneingabeFehlerTextArea
  2933. app.StreckeneingabeFehlerTextArea = uitextarea(app.StreckenpanelTab);
  2934. app.StreckeneingabeFehlerTextArea.FontSize = 16;
  2935. app.StreckeneingabeFehlerTextArea.Visible = 'off';
  2936. app.StreckeneingabeFehlerTextArea.Position = [182 174 327 41];
  2937. app.StreckeneingabeFehlerTextArea.Value = {'Fehler bei der Streckeneingabe!'};
  2938.  
  2939. % Create RegelbarkeitTextAreaLabel
  2940. app.RegelbarkeitTextAreaLabel = uilabel(app.StreckenpanelTab);
  2941. app.RegelbarkeitTextAreaLabel.HorizontalAlignment = 'center';
  2942. app.RegelbarkeitTextAreaLabel.Position = [803 55 73 22];
  2943. app.RegelbarkeitTextAreaLabel.Text = 'Regelbarkeit';
  2944.  
  2945. % Create RegelbarkeitTextArea
  2946. app.RegelbarkeitTextArea = uitextarea(app.StreckenpanelTab);
  2947. app.RegelbarkeitTextArea.Editable = 'off';
  2948. app.RegelbarkeitTextArea.HorizontalAlignment = 'center';
  2949. app.RegelbarkeitTextArea.Position = [702 5 275 46];
  2950.  
  2951. % Create StreckebernehmeninDBRButton
  2952. app.StreckebernehmeninDBRButton = uibutton(app.StreckenpanelTab, 'push');
  2953. app.StreckebernehmeninDBRButton.ButtonPushedFcn = createCallbackFcn(app, @StreckebernehmeninDBRButtonPushed, true);
  2954. app.StreckebernehmeninDBRButton.Position = [485 290 176 23];
  2955. app.StreckebernehmeninDBRButton.Text = 'Strecke übernehmen in D-B-R';
  2956.  
  2957. % Create PT1GliedliegtvorLabel
  2958. app.PT1GliedliegtvorLabel = uilabel(app.StreckenpanelTab);
  2959. app.PT1GliedliegtvorLabel.FontSize = 13;
  2960. app.PT1GliedliegtvorLabel.FontWeight = 'bold';
  2961. app.PT1GliedliegtvorLabel.FontColor = [1 0 0];
  2962. app.PT1GliedliegtvorLabel.Visible = 'off';
  2963. app.PT1GliedliegtvorLabel.Position = [518 512 119 22];
  2964. app.PT1GliedliegtvorLabel.Text = 'PT1 Glied liegt vor';
  2965.  
  2966. % Create PT2GliedoderhherLabel
  2967. app.PT2GliedoderhherLabel = uilabel(app.StreckenpanelTab);
  2968. app.PT2GliedoderhherLabel.FontSize = 13;
  2969. app.PT2GliedoderhherLabel.FontWeight = 'bold';
  2970. app.PT2GliedoderhherLabel.FontColor = [1 0 0];
  2971. app.PT2GliedoderhherLabel.Visible = 'off';
  2972. app.PT2GliedoderhherLabel.Position = [518 511 136 22];
  2973. app.PT2GliedoderhherLabel.Text = 'PT2 Glied oder höher';
  2974.  
  2975. % Create RegelpanelTab
  2976. app.RegelpanelTab = uitab(app.TabGroup);
  2977. app.RegelpanelTab.AutoResizeChildren = 'off';
  2978. app.RegelpanelTab.Title = 'Regelpanel';
  2979.  
  2980. % Create ReglerartButtonGroup
  2981. app.ReglerartButtonGroup = uibuttongroup(app.RegelpanelTab);
  2982. app.ReglerartButtonGroup.AutoResizeChildren = 'off';
  2983. app.ReglerartButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @ReglerartButtonGroupSelectionChanged, true);
  2984. app.ReglerartButtonGroup.TitlePosition = 'centertop';
  2985. app.ReglerartButtonGroup.Title = 'Reglerart';
  2986. app.ReglerartButtonGroup.Position = [28 417 192 106];
  2987.  
  2988. % Create AnalogButton
  2989. app.AnalogButton = uitogglebutton(app.ReglerartButtonGroup);
  2990. app.AnalogButton.Text = 'Analog';
  2991. app.AnalogButton.Position = [26 63 141 22];
  2992. app.AnalogButton.Value = true;
  2993.  
  2994. % Create DigitalButton
  2995. app.DigitalButton = uitogglebutton(app.ReglerartButtonGroup);
  2996. app.DigitalButton.Text = 'Digital';
  2997. app.DigitalButton.Position = [26 40 141 22];
  2998.  
  2999. % Create AbtastzeitinSekLabel
  3000. app.AbtastzeitinSekLabel = uilabel(app.ReglerartButtonGroup);
  3001. app.AbtastzeitinSekLabel.HorizontalAlignment = 'right';
  3002. app.AbtastzeitinSekLabel.Visible = 'off';
  3003. app.AbtastzeitinSekLabel.Position = [-10 4 98 22];
  3004. app.AbtastzeitinSekLabel.Text = 'Abtastzeit in Sek.';
  3005.  
  3006. % Create AbtastzeitinSekundenEditField
  3007. app.AbtastzeitinSekundenEditField = uieditfield(app.ReglerartButtonGroup, 'numeric');
  3008. app.AbtastzeitinSekundenEditField.ValueChangedFcn = createCallbackFcn(app, @AbtastzeitinSekundenEditFieldValueChanged, true);
  3009. app.AbtastzeitinSekundenEditField.Visible = 'off';
  3010. app.AbtastzeitinSekundenEditField.Position = [100 3 87 22];
  3011.  
  3012. % Create ReglertypButtonGroup
  3013. app.ReglertypButtonGroup = uibuttongroup(app.RegelpanelTab);
  3014. app.ReglertypButtonGroup.AutoResizeChildren = 'off';
  3015. app.ReglertypButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @ReglertypButtonGroupSelectionChanged, true);
  3016. app.ReglertypButtonGroup.TitlePosition = 'centertop';
  3017. app.ReglertypButtonGroup.Title = 'Reglertyp';
  3018. app.ReglertypButtonGroup.Position = [274 397 123 122];
  3019.  
  3020. % Create PButton
  3021. app.PButton = uitogglebutton(app.ReglertypButtonGroup);
  3022. app.PButton.Text = 'P';
  3023. app.PButton.Position = [12 69 100 22];
  3024.  
  3025. % Create PIButton
  3026. app.PIButton = uitogglebutton(app.ReglertypButtonGroup);
  3027. app.PIButton.Text = 'PI';
  3028. app.PIButton.Position = [12 48 100 22];
  3029.  
  3030. % Create PDButton
  3031. app.PDButton = uitogglebutton(app.ReglertypButtonGroup);
  3032. app.PDButton.Text = 'PD';
  3033. app.PDButton.Position = [12 27 100 22];
  3034.  
  3035. % Create PIDButton
  3036. app.PIDButton = uitogglebutton(app.ReglertypButtonGroup);
  3037. app.PIDButton.Text = 'PID';
  3038. app.PIDButton.Position = [12 6 100 22];
  3039.  
  3040. % Create DummyButton2
  3041. app.DummyButton2 = uitogglebutton(app.ReglertypButtonGroup);
  3042. app.DummyButton2.Enable = 'off';
  3043. app.DummyButton2.Visible = 'off';
  3044. app.DummyButton2.Text = '';
  3045. app.DummyButton2.Position = [12 -15 100 22];
  3046. app.DummyButton2.Value = true;
  3047.  
  3048. % Create KpKnob
  3049. app.KpKnob = uiknob(app.RegelpanelTab, 'continuous');
  3050. app.KpKnob.Limits = [0 10];
  3051. app.KpKnob.ValueChangedFcn = createCallbackFcn(app, @KpKnobValueChanged, true);
  3052. app.KpKnob.ValueChangingFcn = createCallbackFcn(app, @KpKnobValueChanging, true);
  3053. app.KpKnob.Enable = 'off';
  3054. app.KpKnob.Position = [466 442 60 60];
  3055.  
  3056. % Create TvKnob
  3057. app.TvKnob = uiknob(app.RegelpanelTab, 'continuous');
  3058. app.TvKnob.Limits = [0 10];
  3059. app.TvKnob.ValueChangedFcn = createCallbackFcn(app, @TvKnobValueChanged, true);
  3060. app.TvKnob.ValueChangingFcn = createCallbackFcn(app, @TvKnobValueChanging, true);
  3061. app.TvKnob.Enable = 'off';
  3062. app.TvKnob.Position = [616 441 60 60];
  3063.  
  3064. % Create TnKnob
  3065. app.TnKnob = uiknob(app.RegelpanelTab, 'continuous');
  3066. app.TnKnob.Limits = [0 10];
  3067. app.TnKnob.ValueChangedFcn = createCallbackFcn(app, @TnKnobValueChanged, true);
  3068. app.TnKnob.ValueChangingFcn = createCallbackFcn(app, @TnKnobValueChanging, true);
  3069. app.TnKnob.Enable = 'off';
  3070. app.TnKnob.Position = [768 440 60 60];
  3071.  
  3072. % Create RegelparameterPanel
  3073. app.RegelparameterPanel = uipanel(app.RegelpanelTab);
  3074. app.RegelparameterPanel.AutoResizeChildren = 'off';
  3075. app.RegelparameterPanel.TitlePosition = 'centertop';
  3076. app.RegelparameterPanel.Title = 'Regelparameter';
  3077. app.RegelparameterPanel.Position = [27 257 193 158];
  3078.  
  3079. % Create mitAusgleichButtonGroup
  3080. app.mitAusgleichButtonGroup = uibuttongroup(app.RegelparameterPanel);
  3081. app.mitAusgleichButtonGroup.AutoResizeChildren = 'off';
  3082. app.mitAusgleichButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @mitAusgleichButtonGroupSelectionChanged, true);
  3083. app.mitAusgleichButtonGroup.TitlePosition = 'centertop';
  3084. app.mitAusgleichButtonGroup.Title = 'mit Ausgleich';
  3085. app.mitAusgleichButtonGroup.Visible = 'off';
  3086. app.mitAusgleichButtonGroup.Position = [27 22 141 95];
  3087.  
  3088. % Create ZieglerNicholsButton
  3089. app.ZieglerNicholsButton = uitogglebutton(app.mitAusgleichButtonGroup);
  3090. app.ZieglerNicholsButton.Text = 'Ziegler-Nichols';
  3091. app.ZieglerNicholsButton.Position = [11 42 119 22];
  3092.  
  3093. % Create DummyButton
  3094. app.DummyButton = uitogglebutton(app.mitAusgleichButtonGroup);
  3095. app.DummyButton.Enable = 'off';
  3096. app.DummyButton.Visible = 'off';
  3097. app.DummyButton.Text = '';
  3098. app.DummyButton.Position = [11 1 150 22];
  3099. app.DummyButton.Value = true;
  3100.  
  3101. % Create CHRButtonmA
  3102. app.CHRButtonmA = uitogglebutton(app.mitAusgleichButtonGroup);
  3103. app.CHRButtonmA.Text = 'CHR';
  3104. app.CHRButtonmA.Position = [11 11 119 22];
  3105.  
  3106. % Create ohneAusgleichButtonGroup
  3107. app.ohneAusgleichButtonGroup = uibuttongroup(app.RegelparameterPanel);
  3108. app.ohneAusgleichButtonGroup.AutoResizeChildren = 'off';
  3109. app.ohneAusgleichButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @ohneAusgleichButtonGroupSelectionChanged, true);
  3110. app.ohneAusgleichButtonGroup.TitlePosition = 'centertop';
  3111. app.ohneAusgleichButtonGroup.Title = 'ohne Ausgleich';
  3112. app.ohneAusgleichButtonGroup.Visible = 'off';
  3113. app.ohneAusgleichButtonGroup.Position = [25 21 141 95];
  3114.  
  3115. % Create DrFiegerButton
  3116. app.DrFiegerButton = uitogglebutton(app.ohneAusgleichButtonGroup);
  3117. app.DrFiegerButton.Text = 'Dr. Fieger';
  3118. app.DrFiegerButton.Position = [11 42 119 22];
  3119.  
  3120. % Create DummyButton3
  3121. app.DummyButton3 = uitogglebutton(app.ohneAusgleichButtonGroup);
  3122. app.DummyButton3.Enable = 'off';
  3123. app.DummyButton3.Visible = 'off';
  3124. app.DummyButton3.Text = '';
  3125. app.DummyButton3.Position = [11 1 151 22];
  3126. app.DummyButton3.Value = true;
  3127.  
  3128. % Create CHRButtonoA
  3129. app.CHRButtonoA = uitogglebutton(app.ohneAusgleichButtonGroup);
  3130. app.CHRButtonoA.Text = 'CHR';
  3131. app.CHRButtonoA.Position = [12 13 118 22];
  3132.  
  3133. % Create DigitalreglerButtonGroup
  3134. app.DigitalreglerButtonGroup = uibuttongroup(app.RegelparameterPanel);
  3135. app.DigitalreglerButtonGroup.AutoResizeChildren = 'off';
  3136. app.DigitalreglerButtonGroup.Tooltip = {'grün hinterlegt bei ausreichender Abtastzeit'; ' sonst rot hinterlegt'};
  3137. app.DigitalreglerButtonGroup.TitlePosition = 'centertop';
  3138. app.DigitalreglerButtonGroup.Title = 'Digitalregler';
  3139. app.DigitalreglerButtonGroup.Visible = 'off';
  3140. app.DigitalreglerButtonGroup.Scrollable = 'on';
  3141. app.DigitalreglerButtonGroup.Position = [27 23 139 86];
  3142.  
  3143. % Create TCAButton
  3144. app.TCAButton = uitogglebutton(app.DigitalreglerButtonGroup);
  3145. app.TCAButton.Text = 'TCA';
  3146. app.TCAButton.Position = [11 33 117 22];
  3147. app.TCAButton.Value = true;
  3148.  
  3149. % Create TakahashiPIDButton
  3150. app.TakahashiPIDButton = uitogglebutton(app.DigitalreglerButtonGroup);
  3151. app.TakahashiPIDButton.Text = 'Takahashi-PID';
  3152. app.TakahashiPIDButton.Position = [11 12 117 22];
  3153.  
  3154. % Create DummyButtonPID
  3155. app.DummyButtonPID = uitogglebutton(app.DigitalreglerButtonGroup);
  3156. app.DummyButtonPID.Visible = 'off';
  3157. app.DummyButtonPID.Text = 'DummyButtonPID';
  3158. app.DummyButtonPID.Position = [5 -9 112 22];
  3159.  
  3160. % Create KpKnobLabel
  3161. app.KpKnobLabel = uilabel(app.RegelpanelTab);
  3162. app.KpKnobLabel.HorizontalAlignment = 'center';
  3163. app.KpKnobLabel.Enable = 'off';
  3164. app.KpKnobLabel.Position = [485 386 25 22];
  3165. app.KpKnobLabel.Text = 'Kp';
  3166.  
  3167. % Create TvKnobLabel
  3168. app.TvKnobLabel = uilabel(app.RegelpanelTab);
  3169. app.TvKnobLabel.HorizontalAlignment = 'center';
  3170. app.TvKnobLabel.Enable = 'off';
  3171. app.TvKnobLabel.Position = [634 385 25 22];
  3172. app.TvKnobLabel.Text = 'Tv';
  3173.  
  3174. % Create TnKnobLabel
  3175. app.TnKnobLabel = uilabel(app.RegelpanelTab);
  3176. app.TnKnobLabel.HorizontalAlignment = 'center';
  3177. app.TnKnobLabel.Enable = 'off';
  3178. app.TnKnobLabel.Position = [786 384 25 22];
  3179. app.TnKnobLabel.Text = 'Tn';
  3180.  
  3181. % Create ReglerberechnenButton
  3182. app.ReglerberechnenButton = uibutton(app.RegelpanelTab, 'push');
  3183. app.ReglerberechnenButton.ButtonPushedFcn = createCallbackFcn(app, @ReglerberechnenButtonPushed, true);
  3184. app.ReglerberechnenButton.Enable = 'off';
  3185. app.ReglerberechnenButton.Position = [280.5 361 111 26];
  3186. app.ReglerberechnenButton.Text = 'Regler berechnen';
  3187.  
  3188. % Create KpEditField
  3189. app.KpEditField = uieditfield(app.RegelpanelTab, 'numeric');
  3190. app.KpEditField.Limits = [0 Inf];
  3191. app.KpEditField.ValueDisplayFormat = '%.5f';
  3192. app.KpEditField.ValueChangedFcn = createCallbackFcn(app, @KpEditFieldValueChanged, true);
  3193. app.KpEditField.Enable = 'off';
  3194. app.KpEditField.Position = [435 363 121 22];
  3195.  
  3196. % Create TvEditField
  3197. app.TvEditField = uieditfield(app.RegelpanelTab, 'numeric');
  3198. app.TvEditField.Limits = [0 Inf];
  3199. app.TvEditField.ValueDisplayFormat = '%.5f';
  3200. app.TvEditField.ValueChangedFcn = createCallbackFcn(app, @TvEditFieldValueChanged, true);
  3201. app.TvEditField.Enable = 'off';
  3202. app.TvEditField.Position = [589 365 113 22];
  3203.  
  3204. % Create TnEditField
  3205. app.TnEditField = uieditfield(app.RegelpanelTab, 'numeric');
  3206. app.TnEditField.Limits = [0 Inf];
  3207. app.TnEditField.ValueDisplayFormat = '%.5f';
  3208. app.TnEditField.ValueChangedFcn = createCallbackFcn(app, @TnEditFieldValueChanged, true);
  3209. app.TnEditField.Enable = 'off';
  3210. app.TnEditField.Position = [745 365 105 22];
  3211.  
  3212. % Create RegelfehlermeldungLabel
  3213. app.RegelfehlermeldungLabel = uilabel(app.RegelpanelTab);
  3214. app.RegelfehlermeldungLabel.HorizontalAlignment = 'center';
  3215. app.RegelfehlermeldungLabel.FontWeight = 'bold';
  3216. app.RegelfehlermeldungLabel.Position = [236 305 212 42];
  3217. app.RegelfehlermeldungLabel.Text = {'Bitte Regelparameter und'; 'Reglertyp auswählen!'};
  3218.  
  3219. % Create KnobEditLabel
  3220. app.KnobEditLabel = uilabel(app.RegelpanelTab);
  3221. app.KnobEditLabel.HorizontalAlignment = 'center';
  3222. app.KnobEditLabel.Position = [595 325 104 22];
  3223. app.KnobEditLabel.Text = 'Drehknaufgrenzen';
  3224.  
  3225. % Create KnobEditDropDown
  3226. app.KnobEditDropDown = uidropdown(app.RegelpanelTab);
  3227. app.KnobEditDropDown.Items = {'Kp', 'Tv', 'Tn'};
  3228. app.KnobEditDropDown.Enable = 'off';
  3229. app.KnobEditDropDown.Position = [597 296 100 22];
  3230. app.KnobEditDropDown.Value = 'Kp';
  3231.  
  3232. % Create MinLabel
  3233. app.MinLabel = uilabel(app.RegelpanelTab);
  3234. app.MinLabel.HorizontalAlignment = 'right';
  3235. app.MinLabel.Enable = 'off';
  3236. app.MinLabel.Position = [573 267 25 22];
  3237. app.MinLabel.Text = 'Min';
  3238.  
  3239. % Create MaxLabel
  3240. app.MaxLabel = uilabel(app.RegelpanelTab);
  3241. app.MaxLabel.HorizontalAlignment = 'right';
  3242. app.MaxLabel.Enable = 'off';
  3243. app.MaxLabel.Position = [695 267 28 22];
  3244. app.MaxLabel.Text = 'Max';
  3245.  
  3246. % Create GuetezielkriterienPanel
  3247. app.GuetezielkriterienPanel = uipanel(app.RegelpanelTab);
  3248. app.GuetezielkriterienPanel.AutoResizeChildren = 'off';
  3249. app.GuetezielkriterienPanel.TitlePosition = 'centertop';
  3250. app.GuetezielkriterienPanel.Title = 'Gütezielkriterien';
  3251. app.GuetezielkriterienPanel.Visible = 'off';
  3252. app.GuetezielkriterienPanel.Position = [28 33 193 222];
  3253.  
  3254. % Create ParametersatzButtonGroup
  3255. app.ParametersatzButtonGroup = uibuttongroup(app.GuetezielkriterienPanel);
  3256. app.ParametersatzButtonGroup.AutoResizeChildren = 'off';
  3257. app.ParametersatzButtonGroup.TitlePosition = 'centertop';
  3258. app.ParametersatzButtonGroup.Title = 'Parametersatz';
  3259. app.ParametersatzButtonGroup.Position = [10 104 171 95];
  3260.  
  3261. % Create AperiodischButton
  3262. app.AperiodischButton = uitogglebutton(app.ParametersatzButtonGroup);
  3263. app.AperiodischButton.Text = 'Aperiodisch';
  3264. app.AperiodischButton.Position = [11 42 151 22];
  3265.  
  3266. % Create ueberschwingButton
  3267. app.ueberschwingButton = uitogglebutton(app.ParametersatzButtonGroup);
  3268. app.ueberschwingButton.Text = '20% Überschwingen';
  3269. app.ueberschwingButton.Position = [11 11 150 22];
  3270.  
  3271. % Create DummyButton4
  3272. app.DummyButton4 = uitogglebutton(app.ParametersatzButtonGroup);
  3273. app.DummyButton4.Enable = 'off';
  3274. app.DummyButton4.Visible = 'off';
  3275. app.DummyButton4.Text = '';
  3276. app.DummyButton4.Position = [11 1 150 22];
  3277. app.DummyButton4.Value = true;
  3278.  
  3279. % Create VerhaltenButtonGroup
  3280. app.VerhaltenButtonGroup = uibuttongroup(app.GuetezielkriterienPanel);
  3281. app.VerhaltenButtonGroup.AutoResizeChildren = 'off';
  3282. app.VerhaltenButtonGroup.TitlePosition = 'centertop';
  3283. app.VerhaltenButtonGroup.Title = 'Verhalten';
  3284. app.VerhaltenButtonGroup.Position = [10 -1 171 95];
  3285.  
  3286. % Create StoerverhaltenButton
  3287. app.StoerverhaltenButton = uitogglebutton(app.VerhaltenButtonGroup);
  3288. app.StoerverhaltenButton.Text = 'Störverhalten';
  3289. app.StoerverhaltenButton.Position = [11 42 151 22];
  3290.  
  3291. % Create FuehrungsverhaltenButton
  3292. app.FuehrungsverhaltenButton = uitogglebutton(app.VerhaltenButtonGroup);
  3293. app.FuehrungsverhaltenButton.Text = 'Führungsverhalten';
  3294. app.FuehrungsverhaltenButton.Position = [11 11 150 22];
  3295.  
  3296. % Create DummyButton5
  3297. app.DummyButton5 = uitogglebutton(app.VerhaltenButtonGroup);
  3298. app.DummyButton5.Enable = 'off';
  3299. app.DummyButton5.Visible = 'off';
  3300. app.DummyButton5.Text = '';
  3301. app.DummyButton5.Position = [11 1 150 22];
  3302. app.DummyButton5.Value = true;
  3303.  
  3304. % Create SimulationszeitEditFieldLabel
  3305. app.SimulationszeitEditFieldLabel = uilabel(app.RegelpanelTab);
  3306. app.SimulationszeitEditFieldLabel.HorizontalAlignment = 'right';
  3307. app.SimulationszeitEditFieldLabel.Position = [248 222 86 22];
  3308. app.SimulationszeitEditFieldLabel.Text = 'Simulationszeit';
  3309.  
  3310. % Create SimulationszeitEditField
  3311. app.SimulationszeitEditField = uieditfield(app.RegelpanelTab, 'text');
  3312. app.SimulationszeitEditField.ValueChangedFcn = createCallbackFcn(app, @SimulationszeitEditFieldValueChanged, true);
  3313. app.SimulationszeitEditField.Position = [349 222 100 22];
  3314. app.SimulationszeitEditField.Value = '10';
  3315.  
  3316. % Create KnobEditMin
  3317. app.KnobEditMin = uieditfield(app.RegelpanelTab, 'numeric');
  3318. app.KnobEditMin.Limits = [0 Inf];
  3319. app.KnobEditMin.HorizontalAlignment = 'center';
  3320. app.KnobEditMin.Enable = 'off';
  3321. app.KnobEditMin.Position = [536 246 100 22];
  3322.  
  3323. % Create KnobEditMax
  3324. app.KnobEditMax = uieditfield(app.RegelpanelTab, 'numeric');
  3325. app.KnobEditMax.Limits = [0 Inf];
  3326. app.KnobEditMax.HorizontalAlignment = 'center';
  3327. app.KnobEditMax.Enable = 'off';
  3328. app.KnobEditMax.Position = [659 246 100 22];
  3329.  
  3330. % Create DummySim1feldTextAreaLabel
  3331. app.DummySim1feldTextAreaLabel = uilabel(app.RegelpanelTab);
  3332. app.DummySim1feldTextAreaLabel.HorizontalAlignment = 'right';
  3333. app.DummySim1feldTextAreaLabel.Visible = 'off';
  3334. app.DummySim1feldTextAreaLabel.Position = [748 220 94 22];
  3335. app.DummySim1feldTextAreaLabel.Text = 'DummySim1feld';
  3336.  
  3337. % Create TextAreaLabel
  3338. app.TextAreaLabel = uilabel(app.RegelpanelTab);
  3339. app.TextAreaLabel.HorizontalAlignment = 'right';
  3340. app.TextAreaLabel.Visible = 'off';
  3341. app.TextAreaLabel.Position = [768 226 56 22];
  3342. app.TextAreaLabel.Text = 'Text Area';
  3343.  
  3344. % Create Modellsimulierendummyfunktion
  3345. app.Modellsimulierendummyfunktion = uitextarea(app.RegelpanelTab);
  3346. app.Modellsimulierendummyfunktion.ValueChangedFcn = createCallbackFcn(app, @ModellsimulierendummyfunktionValueChanged, true);
  3347. app.Modellsimulierendummyfunktion.Visible = 'off';
  3348. app.Modellsimulierendummyfunktion.Position = [839 190 150 60];
  3349.  
  3350. % Create DummySim1feldTextArea
  3351. app.DummySim1feldTextArea = uitextarea(app.RegelpanelTab);
  3352. app.DummySim1feldTextArea.Visible = 'off';
  3353. app.DummySim1feldTextArea.Position = [857 184 150 60];
  3354.  
  3355. % Create DmpfungThetaTextAreaLabel
  3356. app.DmpfungThetaTextAreaLabel = uilabel(app.RegelpanelTab);
  3357. app.DmpfungThetaTextAreaLabel.HorizontalAlignment = 'center';
  3358. app.DmpfungThetaTextAreaLabel.Visible = 'off';
  3359. app.DmpfungThetaTextAreaLabel.Position = [264 203 95 22];
  3360. app.DmpfungThetaTextAreaLabel.Text = 'Dämpfung Theta';
  3361.  
  3362. % Create KnobEditButton
  3363. app.KnobEditButton = uibutton(app.RegelpanelTab, 'push');
  3364. app.KnobEditButton.ButtonPushedFcn = createCallbackFcn(app, @KnobEditButtonPushed, true);
  3365. app.KnobEditButton.Enable = 'off';
  3366. app.KnobEditButton.Position = [599 204 100 22];
  3367. app.KnobEditButton.Text = 'Ändern';
  3368.  
  3369. % Create DmpfungThetaTextArea
  3370. app.DmpfungThetaTextArea = uitextarea(app.RegelpanelTab);
  3371. app.DmpfungThetaTextArea.Visible = 'off';
  3372. app.DmpfungThetaTextArea.Position = [236 179 150 25];
  3373.  
  3374. % Create LimitfehlerLabel
  3375. app.LimitfehlerLabel = uilabel(app.RegelpanelTab);
  3376. app.LimitfehlerLabel.FontWeight = 'bold';
  3377. app.LimitfehlerLabel.Visible = 'off';
  3378. app.LimitfehlerLabel.Position = [532 169 227 22];
  3379. app.LimitfehlerLabel.Text = 'Gewählte Grenzen sind nicht zulässig!';
  3380.  
  3381. % Create bertragungsfunktiondesPIDReglersLabel
  3382. app.bertragungsfunktiondesPIDReglersLabel = uilabel(app.RegelpanelTab);
  3383. app.bertragungsfunktiondesPIDReglersLabel.HorizontalAlignment = 'center';
  3384. app.bertragungsfunktiondesPIDReglersLabel.Position = [342 137 213 22];
  3385. app.bertragungsfunktiondesPIDReglersLabel.Text = 'Übertragungsfunktion des PID-Reglers';
  3386.  
  3387. % Create NullstellendesPIDReglersTextAreaLabel
  3388. app.NullstellendesPIDReglersTextAreaLabel = uilabel(app.RegelpanelTab);
  3389. app.NullstellendesPIDReglersTextAreaLabel.HorizontalAlignment = 'center';
  3390. app.NullstellendesPIDReglersTextAreaLabel.Position = [571 137 152 22];
  3391. app.NullstellendesPIDReglersTextAreaLabel.Text = 'Nullstellen des PID-Reglers';
  3392.  
  3393. % Create PolstellendesPIDReglersTextAreaLabel
  3394. app.PolstellendesPIDReglersTextAreaLabel = uilabel(app.RegelpanelTab);
  3395. app.PolstellendesPIDReglersTextAreaLabel.HorizontalAlignment = 'center';
  3396. app.PolstellendesPIDReglersTextAreaLabel.Position = [735 137 149 22];
  3397. app.PolstellendesPIDReglersTextAreaLabel.Text = 'Polstellen des PID-Reglers';
  3398.  
  3399. % Create PIDUebertragungsfunktionTextArea
  3400. app.PIDUebertragungsfunktionTextArea = uitextarea(app.RegelpanelTab);
  3401. app.PIDUebertragungsfunktionTextArea.Editable = 'off';
  3402. app.PIDUebertragungsfunktionTextArea.HorizontalAlignment = 'center';
  3403. app.PIDUebertragungsfunktionTextArea.Position = [334 32 227 108];
  3404.  
  3405. % Create NullstellendesPIDReglersTextArea
  3406. app.NullstellendesPIDReglersTextArea = uitextarea(app.RegelpanelTab);
  3407. app.NullstellendesPIDReglersTextArea.Editable = 'off';
  3408. app.NullstellendesPIDReglersTextArea.Position = [567 33 159 105];
  3409.  
  3410. % Create PolstellendesPIDReglersTextArea
  3411. app.PolstellendesPIDReglersTextArea = uitextarea(app.RegelpanelTab);
  3412. app.PolstellendesPIDReglersTextArea.Editable = 'off';
  3413. app.PolstellendesPIDReglersTextArea.Position = [735 33 149 105];
  3414.  
  3415. % Create FrequenzkennlinienverfahrenTab
  3416. app.FrequenzkennlinienverfahrenTab = uitab(app.TabGroup);
  3417. app.FrequenzkennlinienverfahrenTab.Title = 'Frequenzkennlinienverfahren';
  3418.  
  3419. % Create GeschlossenerRegelkreisDiagramm_FKV
  3420. app.GeschlossenerRegelkreisDiagramm_FKV = uiaxes(app.FrequenzkennlinienverfahrenTab);
  3421. title(app.GeschlossenerRegelkreisDiagramm_FKV, 'Sprungantwort von T(s)')
  3422. xlabel(app.GeschlossenerRegelkreisDiagramm_FKV, 'Zeit[s]')
  3423. ylabel(app.GeschlossenerRegelkreisDiagramm_FKV, 'Amplitude')
  3424. app.GeschlossenerRegelkreisDiagramm_FKV.YGrid = 'on';
  3425. app.GeschlossenerRegelkreisDiagramm_FKV.Position = [10 8 439 247];
  3426.  
  3427. % Create VorgabenanTsLabel
  3428. app.VorgabenanTsLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3429. app.VorgabenanTsLabel.Position = [187 526 106 22];
  3430. app.VorgabenanTsLabel.Text = 'Vorgaben an $T(s)$';
  3431.  
  3432. % Create BodevonG0sPanel
  3433. app.BodevonG0sPanel = uipanel(app.FrequenzkennlinienverfahrenTab);
  3434. app.BodevonG0sPanel.TitlePosition = 'centertop';
  3435. app.BodevonG0sPanel.Title = 'Bode von G0(s)';
  3436. app.BodevonG0sPanel.FontWeight = 'bold';
  3437. app.BodevonG0sPanel.FontSize = 14;
  3438. app.BodevonG0sPanel.Position = [527 9 489 518];
  3439.  
  3440. % Create MagnitudeDiagramm_FKV
  3441. app.MagnitudeDiagramm_FKV = uiaxes(app.BodevonG0sPanel);
  3442. ylabel(app.MagnitudeDiagramm_FKV, 'Magnitude(dB)')
  3443. app.MagnitudeDiagramm_FKV.YGrid = 'on';
  3444. app.MagnitudeDiagramm_FKV.Position = [40 240 433 228];
  3445.  
  3446. % Create PhaseDiagramm_FKV
  3447. app.PhaseDiagramm_FKV = uiaxes(app.BodevonG0sPanel);
  3448. xlabel(app.PhaseDiagramm_FKV, 'Frequency(rad/s)')
  3449. ylabel(app.PhaseDiagramm_FKV, 'Phase(deg)')
  3450. app.PhaseDiagramm_FKV.YGrid = 'on';
  3451. app.PhaseDiagramm_FKV.Position = [40 13 433 228];
  3452.  
  3453. % Create MarginLabel_FKV
  3454. app.MarginLabel_FKV = uilabel(app.BodevonG0sPanel);
  3455. app.MarginLabel_FKV.HorizontalAlignment = 'center';
  3456. app.MarginLabel_FKV.FontWeight = 'bold';
  3457. app.MarginLabel_FKV.Position = [41 465 433 22];
  3458. app.MarginLabel_FKV.Text = '';
  3459.  
  3460. % Create FKVButton
  3461. app.FKVButton = uibutton(app.FrequenzkennlinienverfahrenTab, 'push');
  3462. app.FKVButton.ButtonPushedFcn = createCallbackFcn(app, @FKVButtonPushed, true);
  3463. app.FKVButton.FontWeight = 'bold';
  3464. app.FKVButton.Position = [174 403 111 26];
  3465. app.FKVButton.Text = 'FKV';
  3466.  
  3467. % Create HelpButton
  3468. app.HelpButton = uibutton(app.FrequenzkennlinienverfahrenTab, 'push');
  3469. app.HelpButton.ButtonPushedFcn = createCallbackFcn(app, @HelpButtonPushed, true);
  3470. app.HelpButton.Icon = fullfile(pathToMLAPP, 'Info_icon-72a7cf.svg.png');
  3471. app.HelpButton.IconAlignment = 'center';
  3472. app.HelpButton.Tooltip = {'Hilfe'};
  3473. app.HelpButton.Position = [7 511 36 34];
  3474. app.HelpButton.Text = '';
  3475.  
  3476. % Create Lamp_FKV
  3477. app.Lamp_FKV = uilamp(app.FrequenzkennlinienverfahrenTab);
  3478. app.Lamp_FKV.Tooltip = {'siehe Hilfe für Zustandsbeschreibung'};
  3479. app.Lamp_FKV.Position = [998 533 12 12];
  3480. app.Lamp_FKV.Color = [0.7216 0.2706 1];
  3481.  
  3482. % Create AuswertungPanel
  3483. app.AuswertungPanel = uipanel(app.FrequenzkennlinienverfahrenTab);
  3484. app.AuswertungPanel.TitlePosition = 'centertop';
  3485. app.AuswertungPanel.Title = 'Auswertung';
  3486. app.AuswertungPanel.BackgroundColor = [0.902 0.902 0.902];
  3487. app.AuswertungPanel.FontWeight = 'bold';
  3488. app.AuswertungPanel.Position = [301 261 216 187];
  3489.  
  3490. % Create GridLayout
  3491. app.GridLayout = uigridlayout(app.AuswertungPanel);
  3492. app.GridLayout.ColumnWidth = {'2x', '3x', '1x', '3x', '1x'};
  3493. app.GridLayout.RowHeight = {'0.8x', '1x', '1x', '1x', '1x'};
  3494. app.GridLayout.ColumnSpacing = 0;
  3495. app.GridLayout.RowSpacing = 10.8120771408081;
  3496. app.GridLayout.Padding = [0 10.8120771408081 0 10.8120771408081];
  3497.  
  3498. % Create tr_istTextArea
  3499. app.tr_istTextArea = uitextarea(app.GridLayout);
  3500. app.tr_istTextArea.Editable = 'off';
  3501. app.tr_istTextArea.Layout.Row = 5;
  3502. app.tr_istTextArea.Layout.Column = 4;
  3503.  
  3504. % Create u_istTextArea
  3505. app.u_istTextArea = uitextarea(app.GridLayout);
  3506. app.u_istTextArea.Editable = 'off';
  3507. app.u_istTextArea.Layout.Row = 4;
  3508. app.u_istTextArea.Layout.Column = 4;
  3509.  
  3510. % Create pm_sollTextArea
  3511. app.pm_sollTextArea = uitextarea(app.GridLayout);
  3512. app.pm_sollTextArea.Editable = 'off';
  3513. app.pm_sollTextArea.Tooltip = {'Soll-Phasenrand'};
  3514. app.pm_sollTextArea.Layout.Row = 2;
  3515. app.pm_sollTextArea.Layout.Column = 2;
  3516.  
  3517. % Create pm_istTextArea
  3518. app.pm_istTextArea = uitextarea(app.GridLayout);
  3519. app.pm_istTextArea.Editable = 'off';
  3520. app.pm_istTextArea.Tooltip = {'Ist-Phasenrand'};
  3521. app.pm_istTextArea.Layout.Row = 2;
  3522. app.pm_istTextArea.Layout.Column = 4;
  3523.  
  3524. % Create wc_sollTextArea
  3525. app.wc_sollTextArea = uitextarea(app.GridLayout);
  3526. app.wc_sollTextArea.Editable = 'off';
  3527. app.wc_sollTextArea.Tooltip = {'Soll-Durchtrittsfrequenz'};
  3528. app.wc_sollTextArea.Layout.Row = 3;
  3529. app.wc_sollTextArea.Layout.Column = 2;
  3530.  
  3531. % Create wc_istTextArea
  3532. app.wc_istTextArea = uitextarea(app.GridLayout);
  3533. app.wc_istTextArea.Editable = 'off';
  3534. app.wc_istTextArea.Tooltip = {'Ist-Durchtrittsfrequenz'};
  3535. app.wc_istTextArea.Layout.Row = 3;
  3536. app.wc_istTextArea.Layout.Column = 4;
  3537.  
  3538. % Create pm_Label
  3539. app.pm_Label = uilabel(app.GridLayout);
  3540. app.pm_Label.HorizontalAlignment = 'center';
  3541. app.pm_Label.Layout.Row = 2;
  3542. app.pm_Label.Layout.Column = 1;
  3543. app.pm_Label.Text = '$\varphi_{pm}$ :';
  3544.  
  3545. % Create SOLL_Label
  3546. app.SOLL_Label = uilabel(app.GridLayout);
  3547. app.SOLL_Label.HorizontalAlignment = 'center';
  3548. app.SOLL_Label.Layout.Row = 1;
  3549. app.SOLL_Label.Layout.Column = 2;
  3550. app.SOLL_Label.Text = 'SOLL';
  3551.  
  3552. % Create IST_Label
  3553. app.IST_Label = uilabel(app.GridLayout);
  3554. app.IST_Label.HorizontalAlignment = 'center';
  3555. app.IST_Label.Layout.Row = 1;
  3556. app.IST_Label.Layout.Column = 4;
  3557. app.IST_Label.Text = 'IST';
  3558.  
  3559. % Create wc_Label
  3560. app.wc_Label = uilabel(app.GridLayout);
  3561. app.wc_Label.HorizontalAlignment = 'center';
  3562. app.wc_Label.Layout.Row = 3;
  3563. app.wc_Label.Layout.Column = 1;
  3564. app.wc_Label.Text = '$\omega_c$ :';
  3565.  
  3566. % Create u_Label
  3567. app.u_Label = uilabel(app.GridLayout);
  3568. app.u_Label.HorizontalAlignment = 'center';
  3569. app.u_Label.Layout.Row = 4;
  3570. app.u_Label.Layout.Column = 1;
  3571. app.u_Label.Text = '$\ddot{u}$ :';
  3572.  
  3573. % Create tr_Label
  3574. app.tr_Label = uilabel(app.GridLayout);
  3575. app.tr_Label.HorizontalAlignment = 'center';
  3576. app.tr_Label.Layout.Row = 5;
  3577. app.tr_Label.Layout.Column = 1;
  3578. app.tr_Label.Text = '$t_r$ :';
  3579.  
  3580. % Create u_sollTextArea
  3581. app.u_sollTextArea = uitextarea(app.GridLayout);
  3582. app.u_sollTextArea.Editable = 'off';
  3583. app.u_sollTextArea.Layout.Row = 4;
  3584. app.u_sollTextArea.Layout.Column = 2;
  3585.  
  3586. % Create tr_sollTextArea
  3587. app.tr_sollTextArea = uitextarea(app.GridLayout);
  3588. app.tr_sollTextArea.Editable = 'off';
  3589. app.tr_sollTextArea.Layout.Row = 5;
  3590. app.tr_sollTextArea.Layout.Column = 2;
  3591.  
  3592. % Create Anstiegszeitt_rsEditFieldLabel
  3593. app.Anstiegszeitt_rsEditFieldLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3594. app.Anstiegszeitt_rsEditFieldLabel.HorizontalAlignment = 'right';
  3595. app.Anstiegszeitt_rsEditFieldLabel.Position = [61 501 107 22];
  3596. app.Anstiegszeitt_rsEditFieldLabel.Text = 'Anstiegszeit $t_r$ [s]';
  3597.  
  3598. % Create Anstiegszeitt_rsEditField
  3599. app.Anstiegszeitt_rsEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
  3600. app.Anstiegszeitt_rsEditField.Limits = [0 Inf];
  3601. app.Anstiegszeitt_rsEditField.Position = [183 501 100 22];
  3602.  
  3603. % Create berschwingenLabel
  3604. app.berschwingenLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3605. app.berschwingenLabel.HorizontalAlignment = 'right';
  3606. app.berschwingenLabel.Position = [39 472 129 22];
  3607. app.berschwingenLabel.Text = 'Überschwingen $\ddot{u}$ [\%]';
  3608.  
  3609. % Create berschwingenddotuEditField
  3610. app.berschwingenddotuEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
  3611. app.berschwingenddotuEditField.Limits = [0 Inf];
  3612. app.berschwingenddotuEditField.Position = [183 472 100 22];
  3613.  
  3614. % Create Regelabweichunge_inftyEditFieldLabel
  3615. app.Regelabweichunge_inftyEditFieldLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3616. app.Regelabweichunge_inftyEditFieldLabel.HorizontalAlignment = 'right';
  3617. app.Regelabweichunge_inftyEditFieldLabel.Position = [41 444 126 22];
  3618. app.Regelabweichunge_inftyEditFieldLabel.Text = 'Regelabweichung $e_{\infty}$';
  3619.  
  3620. % Create Regelabweichunge_inftyEditField
  3621. app.Regelabweichunge_inftyEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
  3622. app.Regelabweichunge_inftyEditField.Limits = [0 0.99999];
  3623. app.Regelabweichunge_inftyEditField.Position = [183 444 100 22];
  3624.  
  3625. % Create FhrungDropDownLabel
  3626. app.FhrungDropDownLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3627. app.FhrungDropDownLabel.HorizontalAlignment = 'right';
  3628. app.FhrungDropDownLabel.Position = [330 470 56 22];
  3629. app.FhrungDropDownLabel.Text = 'Führung';
  3630.  
  3631. % Create FuehrungDropDown
  3632. app.FuehrungDropDown = uidropdown(app.FrequenzkennlinienverfahrenTab);
  3633. app.FuehrungDropDown.Items = {'Sprung', 'Rampe'};
  3634. app.FuehrungDropDown.Tooltip = {'Form der Führungsgröße'};
  3635. app.FuehrungDropDown.Position = [399 471 100 22];
  3636. app.FuehrungDropDown.Value = 'Sprung';
  3637.  
  3638. % Create konstPhasedegreeEditFieldLabel
  3639. app.konstPhasedegreeEditFieldLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3640. app.konstPhasedegreeEditFieldLabel.HorizontalAlignment = 'right';
  3641. app.konstPhasedegreeEditFieldLabel.Position = [297 501 89 22];
  3642. app.konstPhasedegreeEditFieldLabel.Text = 'konstPhase [\degree]';
  3643.  
  3644. % Create konstPhasedegreeEditField
  3645. app.konstPhasedegreeEditField = uieditfield(app.FrequenzkennlinienverfahrenTab, 'numeric');
  3646. app.konstPhasedegreeEditField.Limits = [0 15];
  3647. app.konstPhasedegreeEditField.Position = [399 501 100 22];
  3648. app.konstPhasedegreeEditField.Value = 6;
  3649.  
  3650. % Create PReglerLabel
  3651. app.PReglerLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3652. app.PReglerLabel.HorizontalAlignment = 'center';
  3653. app.PReglerLabel.Position = [75 364 166 22];
  3654. app.PReglerLabel.Text = 'Regler $G_R(s)$';
  3655.  
  3656. % Create ReglerG_RsTextArea
  3657. app.ReglerG_RsTextArea = uitextarea(app.FrequenzkennlinienverfahrenTab);
  3658. app.ReglerG_RsTextArea.Editable = 'off';
  3659. app.ReglerG_RsTextArea.HorizontalAlignment = 'center';
  3660. app.ReglerG_RsTextArea.Position = [43 268 231 98];
  3661.  
  3662. % Create MittenfreqLeadTextAreaLabel
  3663. app.MittenfreqLeadTextAreaLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3664. app.MittenfreqLeadTextAreaLabel.HorizontalAlignment = 'center';
  3665. app.MittenfreqLeadTextAreaLabel.FontWeight = 'bold';
  3666. app.MittenfreqLeadTextAreaLabel.Position = [529 528 98 22];
  3667. app.MittenfreqLeadTextAreaLabel.Text = 'Mittenfreq. Lead';
  3668.  
  3669. % Create MittenfreqLeadTextArea
  3670. app.MittenfreqLeadTextArea = uitextarea(app.FrequenzkennlinienverfahrenTab);
  3671. app.MittenfreqLeadTextArea.Editable = 'off';
  3672. app.MittenfreqLeadTextArea.Tooltip = {'Mittenfrequenz des Lead-Glieds'};
  3673. app.MittenfreqLeadTextArea.Position = [640 528 103 22];
  3674.  
  3675. % Create MittenfreqLagTextAreaLabel
  3676. app.MittenfreqLagTextAreaLabel = uilabel(app.FrequenzkennlinienverfahrenTab);
  3677. app.MittenfreqLagTextAreaLabel.HorizontalAlignment = 'center';
  3678. app.MittenfreqLagTextAreaLabel.FontWeight = 'bold';
  3679. app.MittenfreqLagTextAreaLabel.Position = [763 528 91 22];
  3680. app.MittenfreqLagTextAreaLabel.Text = 'Mittenfreq. Lag';
  3681.  
  3682. % Create MittenfreqLagTextArea
  3683. app.MittenfreqLagTextArea = uitextarea(app.FrequenzkennlinienverfahrenTab);
  3684. app.MittenfreqLagTextArea.Editable = 'off';
  3685. app.MittenfreqLagTextArea.Tooltip = {'Mittenfrequenz des Lag-Glieds'};
  3686. app.MittenfreqLagTextArea.Position = [865 528 103 22];
  3687.  
  3688. % Create RampeButton
  3689. app.RampeButton = uibutton(app.FrequenzkennlinienverfahrenTab, 'push');
  3690. app.RampeButton.ButtonPushedFcn = createCallbackFcn(app, @RampeButtonPushed, true);
  3691. app.RampeButton.Position = [464 148 47 32];
  3692. app.RampeButton.Text = 'Rampe';
  3693.  
  3694. % Create FuehrungspanelTab
  3695. app.FuehrungspanelTab = uitab(app.TabGroup);
  3696. app.FuehrungspanelTab.Title = 'Führungspanel';
  3697.  
  3698. % Create PolNullstellenDiagramm
  3699. app.PolNullstellenDiagramm = uiaxes(app.FuehrungspanelTab);
  3700. title(app.PolNullstellenDiagramm, 'Pol-Nullstellendiagramm von Ts')
  3701. xlabel(app.PolNullstellenDiagramm, 'Re')
  3702. ylabel(app.PolNullstellenDiagramm, 'Im')
  3703. app.PolNullstellenDiagramm.GridLineWidth = 0.2;
  3704. app.PolNullstellenDiagramm.MinorGridLineWidth = 0.2;
  3705. app.PolNullstellenDiagramm.GridLineStyle = '--';
  3706. app.PolNullstellenDiagramm.XAxisLocation = 'origin';
  3707. app.PolNullstellenDiagramm.YAxisLocation = 'origin';
  3708. app.PolNullstellenDiagramm.LineWidth = 0.2;
  3709. app.PolNullstellenDiagramm.Box = 'on';
  3710. app.PolNullstellenDiagramm.YGrid = 'on';
  3711. app.PolNullstellenDiagramm.ZGrid = 'on';
  3712. app.PolNullstellenDiagramm.Position = [691 20 292 198];
  3713.  
  3714. % Create GeschlossenerRegelkreisDiagramm
  3715. app.GeschlossenerRegelkreisDiagramm = uiaxes(app.FuehrungspanelTab);
  3716. title(app.GeschlossenerRegelkreisDiagramm, 'Übergangsfunktion des geschlossenen Regelkreises')
  3717. xlabel(app.GeschlossenerRegelkreisDiagramm, 'Zeit[s]')
  3718. ylabel(app.GeschlossenerRegelkreisDiagramm, 'Amplitude')
  3719. app.GeschlossenerRegelkreisDiagramm.YGrid = 'on';
  3720. app.GeschlossenerRegelkreisDiagramm.Position = [31 270 440 251];
  3721.  
  3722. % Create Ausgang_Regler
  3723. app.Ausgang_Regler = uiaxes(app.FuehrungspanelTab);
  3724. title(app.Ausgang_Regler, 'Ausgang des Reglers')
  3725. xlabel(app.Ausgang_Regler, 'Zeit[s]')
  3726. ylabel(app.Ausgang_Regler, 'Amplitude')
  3727. app.Ausgang_Regler.YGrid = 'on';
  3728. app.Ausgang_Regler.Position = [31 15 440 251];
  3729.  
  3730. % Create FhrungsbertragungsfunktionTsLabel
  3731. app.FhrungsbertragungsfunktionTsLabel = uilabel(app.FuehrungspanelTab);
  3732. app.FhrungsbertragungsfunktionTsLabel.HorizontalAlignment = 'center';
  3733. app.FhrungsbertragungsfunktionTsLabel.Position = [508 506 184 22];
  3734. app.FhrungsbertragungsfunktionTsLabel.Text = 'Führungsübertragungsfunktion Ts';
  3735.  
  3736. % Create FhrungsanalysePanel
  3737. app.FhrungsanalysePanel = uipanel(app.FuehrungspanelTab);
  3738. app.FhrungsanalysePanel.AutoResizeChildren = 'off';
  3739. app.FhrungsanalysePanel.TitlePosition = 'centertop';
  3740. app.FhrungsanalysePanel.Title = 'Führungsanalyse';
  3741. app.FhrungsanalysePanel.Position = [747 217 276 311];
  3742.  
  3743. % Create AnstiegszeitLabel
  3744. app.AnstiegszeitLabel = uilabel(app.FhrungsanalysePanel);
  3745. app.AnstiegszeitLabel.HorizontalAlignment = 'center';
  3746. app.AnstiegszeitLabel.Position = [11 254 70 22];
  3747. app.AnstiegszeitLabel.Text = 'Anstiegszeit';
  3748.  
  3749. % Create AnstiegszeitTextArea
  3750. app.AnstiegszeitTextArea = uitextarea(app.FhrungsanalysePanel);
  3751. app.AnstiegszeitTextArea.Editable = 'off';
  3752. app.AnstiegszeitTextArea.Position = [163 254 103 22];
  3753.  
  3754. % Create berschwingweiteLabel
  3755. app.berschwingweiteLabel = uilabel(app.FhrungsanalysePanel);
  3756. app.berschwingweiteLabel.HorizontalAlignment = 'center';
  3757. app.berschwingweiteLabel.Position = [11 214 103 22];
  3758. app.berschwingweiteLabel.Text = 'Überschwingweite';
  3759.  
  3760. % Create UeberschwingweiteTextArea
  3761. app.UeberschwingweiteTextArea = uitextarea(app.FhrungsanalysePanel);
  3762. app.UeberschwingweiteTextArea.Editable = 'off';
  3763. app.UeberschwingweiteTextArea.Position = [163 212 103 22];
  3764.  
  3765. % Create AnschwingzeitLabel
  3766. app.AnschwingzeitLabel = uilabel(app.FhrungsanalysePanel);
  3767. app.AnschwingzeitLabel.HorizontalAlignment = 'right';
  3768. app.AnschwingzeitLabel.Position = [11 173 82 22];
  3769. app.AnschwingzeitLabel.Text = 'Anschwingzeit';
  3770.  
  3771. % Create AnschwingzeitTextArea
  3772. app.AnschwingzeitTextArea = uitextarea(app.FhrungsanalysePanel);
  3773. app.AnschwingzeitTextArea.Editable = 'off';
  3774. app.AnschwingzeitTextArea.Position = [163 170 103 22];
  3775.  
  3776. % Create AusregelzeitLabel
  3777. app.AusregelzeitLabel = uilabel(app.FhrungsanalysePanel);
  3778. app.AusregelzeitLabel.HorizontalAlignment = 'center';
  3779. app.AusregelzeitLabel.Position = [11 131 72 22];
  3780. app.AusregelzeitLabel.Text = 'Ausregelzeit';
  3781.  
  3782. % Create AusregelzeitTextArea
  3783. app.AusregelzeitTextArea = uitextarea(app.FhrungsanalysePanel);
  3784. app.AusregelzeitTextArea.Editable = 'off';
  3785. app.AusregelzeitTextArea.Position = [163 128 103 22];
  3786.  
  3787. % Create AmplitudenrandLabel
  3788. app.AmplitudenrandLabel = uilabel(app.FhrungsanalysePanel);
  3789. app.AmplitudenrandLabel.HorizontalAlignment = 'center';
  3790. app.AmplitudenrandLabel.Position = [11 88 90 22];
  3791. app.AmplitudenrandLabel.Text = 'Amplitudenrand';
  3792.  
  3793. % Create AmplitudenrandTextArea
  3794. app.AmplitudenrandTextArea = uitextarea(app.FhrungsanalysePanel);
  3795. app.AmplitudenrandTextArea.Editable = 'off';
  3796. app.AmplitudenrandTextArea.Position = [163 86 103 22];
  3797.  
  3798. % Create PhasenrandLabel
  3799. app.PhasenrandLabel = uilabel(app.FhrungsanalysePanel);
  3800. app.PhasenrandLabel.HorizontalAlignment = 'center';
  3801. app.PhasenrandLabel.Position = [11 44 70 22];
  3802. app.PhasenrandLabel.Text = 'Phasenrand';
  3803.  
  3804. % Create PhasenrandTextArea
  3805. app.PhasenrandTextArea = uitextarea(app.FhrungsanalysePanel);
  3806. app.PhasenrandTextArea.Editable = 'off';
  3807. app.PhasenrandTextArea.Position = [163 44 103 22];
  3808.  
  3809. % Create SchnittKreisfrequenzLabel
  3810. app.SchnittKreisfrequenzLabel = uilabel(app.FhrungsanalysePanel);
  3811. app.SchnittKreisfrequenzLabel.HorizontalAlignment = 'center';
  3812. app.SchnittKreisfrequenzLabel.Position = [11 5 115 22];
  3813. app.SchnittKreisfrequenzLabel.Text = 'Schnitt-Kreisfrequenz';
  3814.  
  3815. % Create SchnittKreisfrequenzTextArea
  3816. app.SchnittKreisfrequenzTextArea = uitextarea(app.FhrungsanalysePanel);
  3817. app.SchnittKreisfrequenzTextArea.Editable = 'off';
  3818. app.SchnittKreisfrequenzTextArea.Position = [163 3 103 22];
  3819.  
  3820. % Create FuehrungsfunktionTextArea
  3821. app.FuehrungsfunktionTextArea = uitextarea(app.FuehrungspanelTab);
  3822. app.FuehrungsfunktionTextArea.Editable = 'off';
  3823. app.FuehrungsfunktionTextArea.HorizontalAlignment = 'center';
  3824. app.FuehrungsfunktionTextArea.Position = [470 401 261 108];
  3825.  
  3826. % Create PolstellenTsTextAreaLabel
  3827. app.PolstellenTsTextAreaLabel = uilabel(app.FuehrungspanelTab);
  3828. app.PolstellenTsTextAreaLabel.HorizontalAlignment = 'center';
  3829. app.PolstellenTsTextAreaLabel.Position = [616 367 73 22];
  3830. app.PolstellenTsTextAreaLabel.Text = 'Polstellen Ts';
  3831.  
  3832. % Create PolstellenTsTextArea
  3833. app.PolstellenTsTextArea = uitextarea(app.FuehrungspanelTab);
  3834. app.PolstellenTsTextArea.Editable = 'off';
  3835. app.PolstellenTsTextArea.Position = [578 262 149 106];
  3836.  
  3837. % Create obereStellgrenbegrenzungEditFieldLabel
  3838. app.obereStellgrenbegrenzungEditFieldLabel = uilabel(app.FuehrungspanelTab);
  3839. app.obereStellgrenbegrenzungEditFieldLabel.VerticalAlignment = 'top';
  3840. app.obereStellgrenbegrenzungEditFieldLabel.Position = [484 205 168 18];
  3841. app.obereStellgrenbegrenzungEditFieldLabel.Text = 'obere Stellgrößenbegrenzung';
  3842.  
  3843. % Create obereStellgrenbegrenzungEditField
  3844. app.obereStellgrenbegrenzungEditField = uieditfield(app.FuehrungspanelTab, 'numeric');
  3845. app.obereStellgrenbegrenzungEditField.Position = [516 183 100 22];
  3846. app.obereStellgrenbegrenzungEditField.Value = 5;
  3847.  
  3848. % Create untereStellgrenbegrenzungEditFieldLabel
  3849. app.untereStellgrenbegrenzungEditFieldLabel = uilabel(app.FuehrungspanelTab);
  3850. app.untereStellgrenbegrenzungEditFieldLabel.VerticalAlignment = 'top';
  3851. app.untereStellgrenbegrenzungEditFieldLabel.Position = [484 130 168 22];
  3852. app.untereStellgrenbegrenzungEditFieldLabel.Text = 'untere Stellgrößenbegrenzung';
  3853.  
  3854. % Create untereStellgrenbegrenzungEditField
  3855. app.untereStellgrenbegrenzungEditField = uieditfield(app.FuehrungspanelTab, 'numeric');
  3856. app.untereStellgrenbegrenzungEditField.Position = [516 112 100 22];
  3857.  
  3858. % Create ErstellenButton_stellgr
  3859. app.ErstellenButton_stellgr = uibutton(app.FuehrungspanelTab, 'push');
  3860. app.ErstellenButton_stellgr.ButtonPushedFcn = createCallbackFcn(app, @ErstellenButton_stellgrPushed, true);
  3861. app.ErstellenButton_stellgr.Position = [493 74 149 22];
  3862. app.ErstellenButton_stellgr.Text = 'Erstellen';
  3863.  
  3864. % Create Switch_stellgr
  3865. app.Switch_stellgr = uiswitch(app.FuehrungspanelTab, 'slider');
  3866. app.Switch_stellgr.ValueChangedFcn = createCallbackFcn(app, @Switch_stellgrValueChanged, true);
  3867. app.Switch_stellgr.Position = [549 47 45 20];
  3868.  
  3869. % Create StellgrenbegrenzungLabel
  3870. app.StellgrenbegrenzungLabel = uilabel(app.FuehrungspanelTab);
  3871. app.StellgrenbegrenzungLabel.HorizontalAlignment = 'center';
  3872. app.StellgrenbegrenzungLabel.Position = [507.5 10 130 22];
  3873. app.StellgrenbegrenzungLabel.Text = 'Stellgrößenbegrenzung';
  3874.  
  3875. % Create BodepanelTab
  3876. app.BodepanelTab = uitab(app.TabGroup);
  3877. app.BodepanelTab.Title = 'Bodepanel';
  3878.  
  3879. % Create OrtskurveDiagramm
  3880. app.OrtskurveDiagramm = uiaxes(app.BodepanelTab);
  3881. title(app.OrtskurveDiagramm, 'Ortskurve')
  3882. xlabel(app.OrtskurveDiagramm, 'Re')
  3883. ylabel(app.OrtskurveDiagramm, 'Im')
  3884. app.OrtskurveDiagramm.GridLineWidth = 0.2;
  3885. app.OrtskurveDiagramm.MinorGridLineWidth = 0.2;
  3886. app.OrtskurveDiagramm.GridLineStyle = '--';
  3887. app.OrtskurveDiagramm.XAxisLocation = 'origin';
  3888. app.OrtskurveDiagramm.YAxisLocation = 'origin';
  3889. app.OrtskurveDiagramm.LineWidth = 0.2;
  3890. app.OrtskurveDiagramm.Box = 'on';
  3891. app.OrtskurveDiagramm.YGrid = 'on';
  3892. app.OrtskurveDiagramm.ZGrid = 'on';
  3893. app.OrtskurveDiagramm.Position = [569 30 440 251];
  3894.  
  3895. % Create BodeDiagrammderoffenenSchleifeG0sPanel
  3896. app.BodeDiagrammderoffenenSchleifeG0sPanel = uipanel(app.BodepanelTab);
  3897. app.BodeDiagrammderoffenenSchleifeG0sPanel.TitlePosition = 'centertop';
  3898. app.BodeDiagrammderoffenenSchleifeG0sPanel.Title = 'Bode-Diagramm der offenen Schleife G0(s)';
  3899. app.BodeDiagrammderoffenenSchleifeG0sPanel.FontWeight = 'bold';
  3900. app.BodeDiagrammderoffenenSchleifeG0sPanel.FontSize = 14;
  3901. app.BodeDiagrammderoffenenSchleifeG0sPanel.Position = [33 17 489 518];
  3902.  
  3903. % Create MagnitudeDiagramm
  3904. app.MagnitudeDiagramm = uiaxes(app.BodeDiagrammderoffenenSchleifeG0sPanel);
  3905. ylabel(app.MagnitudeDiagramm, 'Magnitude(dB)')
  3906. app.MagnitudeDiagramm.YGrid = 'on';
  3907. app.MagnitudeDiagramm.Position = [40 240 433 228];
  3908.  
  3909. % Create PhaseDiagramm
  3910. app.PhaseDiagramm = uiaxes(app.BodeDiagrammderoffenenSchleifeG0sPanel);
  3911. xlabel(app.PhaseDiagramm, 'Frequency(rad/s)')
  3912. ylabel(app.PhaseDiagramm, 'Phase(deg)')
  3913. app.PhaseDiagramm.YGrid = 'on';
  3914. app.PhaseDiagramm.Position = [40 13 433 228];
  3915.  
  3916. % Create MarginLabel
  3917. app.MarginLabel = uilabel(app.BodeDiagrammderoffenenSchleifeG0sPanel);
  3918. app.MarginLabel.HorizontalAlignment = 'center';
  3919. app.MarginLabel.FontWeight = 'bold';
  3920. app.MarginLabel.Position = [40 467 433 22];
  3921. app.MarginLabel.Text = '';
  3922.  
  3923. % Create SchleifenbertragungsfunktionG0Label
  3924. app.SchleifenbertragungsfunktionG0Label = uilabel(app.BodepanelTab);
  3925. app.SchleifenbertragungsfunktionG0Label.HorizontalAlignment = 'center';
  3926. app.SchleifenbertragungsfunktionG0Label.Position = [697 484 187 22];
  3927. app.SchleifenbertragungsfunktionG0Label.Text = 'Schleifenübertragungsfunktion G0';
  3928.  
  3929. % Create SchleifenfunktionTextArea
  3930. app.SchleifenfunktionTextArea = uitextarea(app.BodepanelTab);
  3931. app.SchleifenfunktionTextArea.Editable = 'off';
  3932. app.SchleifenfunktionTextArea.HorizontalAlignment = 'center';
  3933. app.SchleifenfunktionTextArea.Position = [675 379 227 108];
  3934.  
  3935. % Create VerschiebungindBEditFieldLabel
  3936. app.VerschiebungindBEditFieldLabel = uilabel(app.BodepanelTab);
  3937. app.VerschiebungindBEditFieldLabel.HorizontalAlignment = 'right';
  3938. app.VerschiebungindBEditFieldLabel.Position = [530 371 109 22];
  3939. app.VerschiebungindBEditFieldLabel.Text = 'Verschiebung in dB';
  3940.  
  3941. % Create VerschiebungindBEditField
  3942. app.VerschiebungindBEditField = uieditfield(app.BodepanelTab, 'numeric');
  3943. app.VerschiebungindBEditField.ValueChangedFcn = createCallbackFcn(app, @VerschiebungindBEditFieldValueChanged, true);
  3944. app.VerschiebungindBEditField.Tooltip = {'Zum Rücksetzten 0 eingeben '};
  3945. app.VerschiebungindBEditField.Position = [530 350 109 22];
  3946.  
  3947. % Create DeadBeatReglerTab
  3948. app.DeadBeatReglerTab = uitab(app.TabGroup);
  3949. app.DeadBeatReglerTab.Title = 'Dead-Beat-Regler';
  3950.  
  3951. % Create StellAxes
  3952. app.StellAxes = uiaxes(app.DeadBeatReglerTab);
  3953. title(app.StellAxes, 'Stellgröße')
  3954. xlabel(app.StellAxes, 't(s)')
  3955. ylabel(app.StellAxes, 'u(t)')
  3956. zlabel(app.StellAxes, 'Z')
  3957. app.StellAxes.XLimitMethod = 'tight';
  3958. app.StellAxes.YLimitMethod = 'padded';
  3959. app.StellAxes.XGrid = 'on';
  3960. app.StellAxes.YGrid = 'on';
  3961. app.StellAxes.Position = [573 281 416 257];
  3962.  
  3963. % Create RegelAxes
  3964. app.RegelAxes = uiaxes(app.DeadBeatReglerTab);
  3965. title(app.RegelAxes, 'Regelgröße')
  3966. xlabel(app.RegelAxes, 't(s)')
  3967. ylabel(app.RegelAxes, 'x(t)')
  3968. zlabel(app.RegelAxes, 'Z')
  3969. app.RegelAxes.XLimitMethod = 'tight';
  3970. app.RegelAxes.YLimitMethod = 'padded';
  3971. app.RegelAxes.XGrid = 'on';
  3972. app.RegelAxes.YGrid = 'on';
  3973. app.RegelAxes.Position = [573 16 416 257];
  3974.  
  3975. % Create bertragungsfunktionenLabel
  3976. app.bertragungsfunktionenLabel = uilabel(app.DeadBeatReglerTab);
  3977. app.bertragungsfunktionenLabel.FontWeight = 'bold';
  3978. app.bertragungsfunktionenLabel.Position = [43 166 145 22];
  3979. app.bertragungsfunktionenLabel.Text = 'Übertragungsfunktionen';
  3980.  
  3981. % Create TextArea2Label
  3982. app.TextArea2Label = uilabel(app.DeadBeatReglerTab);
  3983. app.TextArea2Label.Position = [43 118 46 22];
  3984. app.TextArea2Label.Text = 'Strecke';
  3985.  
  3986. % Create StreckeTextArea
  3987. app.StreckeTextArea = uitextarea(app.DeadBeatReglerTab);
  3988. app.StreckeTextArea.Editable = 'off';
  3989. app.StreckeTextArea.HorizontalAlignment = 'center';
  3990. app.StreckeTextArea.Position = [151 104 367 51];
  3991.  
  3992. % Create DeadBeatReglerTextAreaLabel
  3993. app.DeadBeatReglerTextAreaLabel = uilabel(app.DeadBeatReglerTab);
  3994. app.DeadBeatReglerTextAreaLabel.Position = [43 56 102 22];
  3995. app.DeadBeatReglerTextAreaLabel.Text = 'Dead-Beat-Regler';
  3996.  
  3997. % Create DeadBeatReglerTextArea
  3998. app.DeadBeatReglerTextArea = uitextarea(app.DeadBeatReglerTab);
  3999. app.DeadBeatReglerTextArea.Editable = 'off';
  4000. app.DeadBeatReglerTextArea.HorizontalAlignment = 'center';
  4001. app.DeadBeatReglerTextArea.Position = [151 42 367 51];
  4002.  
  4003. % Create RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel
  4004. app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel = uilabel(app.DeadBeatReglerTab);
  4005. app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel.FontWeight = 'bold';
  4006. app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel.Position = [43 327 404 22];
  4007. app.RegelgreRegeldifferenzundStellgrezudenAbtastzeitpunktenLabel.Text = 'Regelgröße, Regeldifferenz und Stellgröße zu den Abtastzeitpunkten';
  4008.  
  4009. % Create kEditFieldLabel
  4010. app.kEditFieldLabel = uilabel(app.DeadBeatReglerTab);
  4011. app.kEditFieldLabel.BackgroundColor = [0.9412 0.9412 0.9412];
  4012. app.kEditFieldLabel.Position = [423 468 25 22];
  4013. app.kEditFieldLabel.Text = 'k';
  4014.  
  4015. % Create kEditField
  4016. app.kEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
  4017. app.kEditField.Editable = 'off';
  4018. app.kEditField.BackgroundColor = [0.9412 0.9412 0.9412];
  4019. app.kEditField.Position = [460 468 53 22];
  4020.  
  4021. % Create TrsEditFieldLabel
  4022. app.TrsEditFieldLabel = uilabel(app.DeadBeatReglerTab);
  4023. app.TrsEditFieldLabel.BackgroundColor = [0.9412 0.9412 0.9412];
  4024. app.TrsEditFieldLabel.Position = [423 407 30 22];
  4025. app.TrsEditFieldLabel.Text = 'Tr (s)';
  4026.  
  4027. % Create TrsEditField
  4028. app.TrsEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
  4029. app.TrsEditField.Editable = 'off';
  4030. app.TrsEditField.BackgroundColor = [0.9412 0.9412 0.9412];
  4031. app.TrsEditField.Position = [460 407 53 22];
  4032.  
  4033. % Create GesamtregeldauerLabel
  4034. app.GesamtregeldauerLabel = uilabel(app.DeadBeatReglerTab);
  4035. app.GesamtregeldauerLabel.FontWeight = 'bold';
  4036. app.GesamtregeldauerLabel.Position = [422 437 111 22];
  4037. app.GesamtregeldauerLabel.Text = 'Gesamtregeldauer';
  4038.  
  4039. % Create AusregelschritteLabel
  4040. app.AusregelschritteLabel = uilabel(app.DeadBeatReglerTab);
  4041. app.AusregelschritteLabel.FontWeight = 'bold';
  4042. app.AusregelschritteLabel.Position = [422 499 99 22];
  4043. app.AusregelschritteLabel.Text = 'Ausregelschritte';
  4044.  
  4045. % Create MesswerteTable
  4046. app.MesswerteTable = uitable(app.DeadBeatReglerTab);
  4047. app.MesswerteTable.ColumnName = {'t(s)'; 'u'; 'w'; 'e'};
  4048. app.MesswerteTable.RowName = {};
  4049. app.MesswerteTable.Position = [43 193 404 126];
  4050.  
  4051. % Create U_maxEditFieldLabel
  4052. app.U_maxEditFieldLabel = uilabel(app.DeadBeatReglerTab);
  4053. app.U_maxEditFieldLabel.HorizontalAlignment = 'right';
  4054. app.U_maxEditFieldLabel.Position = [60 411 43 22];
  4055. app.U_maxEditFieldLabel.Text = 'U_max';
  4056.  
  4057. % Create U_maxEditField
  4058. app.U_maxEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
  4059. app.U_maxEditField.Position = [118 411 100 22];
  4060.  
  4061. % Create U_minEditFieldLabel
  4062. app.U_minEditFieldLabel = uilabel(app.DeadBeatReglerTab);
  4063. app.U_minEditFieldLabel.HorizontalAlignment = 'right';
  4064. app.U_minEditFieldLabel.Position = [63 379 40 22];
  4065. app.U_minEditFieldLabel.Text = 'U_min';
  4066.  
  4067. % Create U_minEditField
  4068. app.U_minEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
  4069. app.U_minEditField.Position = [118 379 100 22];
  4070.  
  4071. % Create AbtastzeitEditFieldLabel
  4072. app.AbtastzeitEditFieldLabel = uilabel(app.DeadBeatReglerTab);
  4073. app.AbtastzeitEditFieldLabel.HorizontalAlignment = 'right';
  4074. app.AbtastzeitEditFieldLabel.Position = [45 440 58 22];
  4075. app.AbtastzeitEditFieldLabel.Text = 'Abtastzeit';
  4076.  
  4077. % Create AbtastzeitEditField
  4078. app.AbtastzeitEditField = uieditfield(app.DeadBeatReglerTab, 'numeric');
  4079. app.AbtastzeitEditField.Position = [118 440 100 22];
  4080.  
  4081. % Create StreckeausStreckenpanelTextAreaLabel
  4082. app.StreckeausStreckenpanelTextAreaLabel = uilabel(app.DeadBeatReglerTab);
  4083. app.StreckeausStreckenpanelTextAreaLabel.HorizontalAlignment = 'right';
  4084. app.StreckeausStreckenpanelTextAreaLabel.Position = [11 496 82 30];
  4085. app.StreckeausStreckenpanelTextAreaLabel.Text = {'Strecke aus'; 'Streckenpanel'};
  4086.  
  4087. % Create StreckeausStreckenpanelTextArea
  4088. app.StreckeausStreckenpanelTextArea = uitextarea(app.DeadBeatReglerTab);
  4089. app.StreckeausStreckenpanelTextArea.Position = [108 468 150 60];
  4090.  
  4091. % Create StartButton
  4092. app.StartButton = uibutton(app.DeadBeatReglerTab, 'push');
  4093. app.StartButton.ButtonPushedFcn = createCallbackFcn(app, @StartButtonPushed, true);
  4094. app.StartButton.Position = [43 350 100 23];
  4095. app.StartButton.Text = 'Start';
  4096.  
  4097. % Create RegelstrategieButtonGroup
  4098. app.RegelstrategieButtonGroup = uibuttongroup(app.DeadBeatReglerTab);
  4099. app.RegelstrategieButtonGroup.Title = 'Regelstrategie';
  4100. app.RegelstrategieButtonGroup.Position = [264 422 152 106];
  4101.  
  4102. % Create keineButton
  4103. app.keineButton = uiradiobutton(app.RegelstrategieButtonGroup);
  4104. app.keineButton.Text = 'keine';
  4105. app.keineButton.Position = [11 60 58 22];
  4106. app.keineButton.Value = true;
  4107.  
  4108. % Create SollwertkorrekturButton
  4109. app.SollwertkorrekturButton = uiradiobutton(app.RegelstrategieButtonGroup);
  4110. app.SollwertkorrekturButton.Text = 'Sollwertkorrektur';
  4111. app.SollwertkorrekturButton.Position = [11 38 112 22];
  4112.  
  4113. % Create AbtastzeitButton
  4114. app.AbtastzeitButton = uiradiobutton(app.RegelstrategieButtonGroup);
  4115. app.AbtastzeitButton.Text = 'Abtastzeit';
  4116. app.AbtastzeitButton.Position = [11 16 75 22];
  4117.  
  4118. % Create DebugTextAreaLabel
  4119. app.DebugTextAreaLabel = uilabel(app.DeadBeatReglerTab);
  4120. app.DebugTextAreaLabel.HorizontalAlignment = 'right';
  4121. app.DebugTextAreaLabel.Visible = 'off';
  4122. app.DebugTextAreaLabel.Position = [338 374 40 22];
  4123. app.DebugTextAreaLabel.Text = 'Debug';
  4124.  
  4125. % Create DebugTextArea
  4126. app.DebugTextArea = uitextarea(app.DeadBeatReglerTab);
  4127. app.DebugTextArea.Visible = 'off';
  4128. app.DebugTextArea.Position = [393 338 150 60];
  4129.  
  4130. % Show the figure after all components are created
  4131. app.PIDTool.Visible = 'on';
  4132. end
  4133. end
  4134.  
  4135. % App creation and deletion
  4136. methods (Access = public)
  4137.  
  4138. % Construct app
  4139. function app = R23ReglerApp_Steinbrink
  4140.  
  4141. % Create UIFigure and components
  4142. createComponents(app)
  4143.  
  4144. % Register the app with App Designer
  4145. registerApp(app, app.PIDTool)
  4146.  
  4147. % Execute the startup function
  4148. runStartupFcn(app, @startupFcn)
  4149.  
  4150. if nargout == 0
  4151. clear app
  4152. end
  4153. end
  4154.  
  4155. % Code that executes before app deletion
  4156. function delete(app)
  4157.  
  4158. % Delete UIFigure when app is deleted
  4159. delete(app.PIDTool)
  4160. end
  4161. end
  4162. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement