Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function [korr_w, korr_e, u] = myFunction(IT2_Strecke, a2, a1, a0, b2, b1, b0, u_max, u_min, w, x)
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Initialisierung der persistenten Variablen %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- persistent ek_1; % vorheriger interne Regelfehler
- persistent ek_2; % interner Regelfehler vor zwei Zyklen
- persistent ek_3; % interner Regelfehler vor drei Zyklen
- persistent uk_1; % vorherige ausgegebene Stellgröße
- persistent uk_2; % ausgegebene Stellgröße vor zwei Zyklen
- persistent uk_3; % ausgegebene Stellgröße vor drei Zyklen
- if isempty(ek_1)
- ek_1 = 0;
- ek_2 = 0;
- ek_3 = 0;
- uk_1 = 0;
- uk_2 = 0;
- uk_3 = 0;
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Berechnung des Regelfehlers %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- ek = w -x; % aktueller Regelfehler im Vergleich zum w0 - x
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Dead-Beat-Regelalgorithmus %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Bei a1, a2 und b1 gibt die Zahl den Exponenten an -> a*z, a*z^2 und b*z
- b1b0 = b1 + b0;
- b2b1b0 = b2 + b1 + b0;
- if IT2_Strecke < 1
- % PT2
- uk = (1 / b1b0) * (ek + a1 * ek_1 + a0 * ek_2 + b1 * uk_1 + b0 * uk_2);
- else
- % IT2
- uk = (1 / b2b1b0) * (ek + a2 * ek_1 + a1 * ek_2 + a0 * ek_3 + b2 * uk_1 + b1 * uk_2 + b0 * uk_3);
- end
- %%%%%%%%%%%%%%%%%%%%%
- % Sollwertkorrektur %
- %%%%%%%%%%%%%%%%%%%%%
- if (uk > u_max)
- if IT2_Strecke < 1
- % PT2
- ek = b1b0 * u_max - b1 * uk_1 - b0 * uk_2 - a1 * ek_1 - a0 * ek_2;
- else
- % IT2
- ek = b2b1b0 * u_max - b2 * uk_1 - b1 * uk_2 - b0 * uk_3 - a2 * ek_1 - a1 * ek_2 - a0 * ek_3;
- end
- uk = u_max;
- end
- if (uk < u_min)
- if IT2_Strecke < 1
- % PT2
- ek = b1b0 * u_min - b1 * uk_1 - b0 * uk_2 - a1 * ek_1 - a0 * ek_2;
- else
- % IT2
- ek = b2b1b0 * u_min - b2 * uk_1 - b1 * uk_2 - b0 * uk_3 - a2 * ek_1 - a1 * ek_2 - a0 * ek_3;
- end
- uk = u_min;
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Aktualisieren der Vergangenheitswerte %
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- ek_3 = ek_2;
- ek_2 = ek_1;
- ek_1 = ek;
- uk_3 = uk_2;
- uk_2 = uk_1;
- uk_1 = uk;
- %%%%%%%%%%%%%%%%%%%%%
- % Ausgabe der Werte %
- %%%%%%%%%%%%%%%%%%%%%
- korr_w = x + ek;
- korr_e = ek;
- u = uk;
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement