Advertisement
Guest User

controller 1

a guest
May 18th, 2024
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.60 KB | None | 0 0
  1. function [korr_w, korr_e, u] = myFunction(IT2_Strecke, a2, a1, a0, b2, b1, b0, u_max, u_min, w, x)
  2.  
  3. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  4. % Initialisierung der persistenten Variablen %
  5. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  6.  
  7. persistent ek_1; % vorheriger interne Regelfehler
  8. persistent ek_2; % interner Regelfehler vor zwei Zyklen
  9. persistent ek_3; % interner Regelfehler vor drei Zyklen
  10.  
  11. persistent uk_1; % vorherige ausgegebene Stellgröße
  12. persistent uk_2; % ausgegebene Stellgröße vor zwei Zyklen
  13. persistent uk_3; % ausgegebene Stellgröße vor drei Zyklen
  14.  
  15. if isempty(ek_1)
  16. ek_1 = 0;
  17. ek_2 = 0;
  18. ek_3 = 0;
  19.  
  20. uk_1 = 0;
  21. uk_2 = 0;
  22. uk_3 = 0;
  23. end
  24.  
  25. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  26. % Berechnung des Regelfehlers %
  27. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  28.  
  29. ek = w -x; % aktueller Regelfehler im Vergleich zum w0 - x
  30.  
  31. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  32. % Dead-Beat-Regelalgorithmus %
  33. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  34.  
  35. % Bei a1, a2 und b1 gibt die Zahl den Exponenten an -> a*z, a*z^2 und b*z
  36. b1b0 = b1 + b0;
  37. b2b1b0 = b2 + b1 + b0;
  38.  
  39. if IT2_Strecke < 1
  40. % PT2
  41. uk = (1 / b1b0) * (ek + a1 * ek_1 + a0 * ek_2 + b1 * uk_1 + b0 * uk_2);
  42. else
  43. % IT2
  44. uk = (1 / b2b1b0) * (ek + a2 * ek_1 + a1 * ek_2 + a0 * ek_3 + b2 * uk_1 + b1 * uk_2 + b0 * uk_3);
  45. end
  46.  
  47. %%%%%%%%%%%%%%%%%%%%%
  48. % Sollwertkorrektur %
  49. %%%%%%%%%%%%%%%%%%%%%
  50.  
  51. if (uk > u_max)
  52. if IT2_Strecke < 1
  53. % PT2
  54. ek = b1b0 * u_max - b1 * uk_1 - b0 * uk_2 - a1 * ek_1 - a0 * ek_2;
  55. else
  56. % IT2
  57. ek = b2b1b0 * u_max - b2 * uk_1 - b1 * uk_2 - b0 * uk_3 - a2 * ek_1 - a1 * ek_2 - a0 * ek_3;
  58. end
  59.  
  60. uk = u_max;
  61. end
  62.  
  63. if (uk < u_min)
  64. if IT2_Strecke < 1
  65. % PT2
  66. ek = b1b0 * u_min - b1 * uk_1 - b0 * uk_2 - a1 * ek_1 - a0 * ek_2;
  67. else
  68. % IT2
  69. ek = b2b1b0 * u_min - b2 * uk_1 - b1 * uk_2 - b0 * uk_3 - a2 * ek_1 - a1 * ek_2 - a0 * ek_3;
  70. end
  71.  
  72. uk = u_min;
  73. end
  74.  
  75. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  76. % Aktualisieren der Vergangenheitswerte %
  77. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  78.  
  79. ek_3 = ek_2;
  80. ek_2 = ek_1;
  81. ek_1 = ek;
  82.  
  83. uk_3 = uk_2;
  84. uk_2 = uk_1;
  85. uk_1 = uk;
  86.  
  87. %%%%%%%%%%%%%%%%%%%%%
  88. % Ausgabe der Werte %
  89. %%%%%%%%%%%%%%%%%%%%%
  90.  
  91. korr_w = x + ek;
  92. korr_e = ek;
  93. u = uk;
  94.  
  95. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement