einfach Formel in Twincat schreiben

kungp1

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend Leute!

Ich muss in Twincat 2.11 eine Kraftregelung implementieren. Ich habe mir die Controller Toolbox besorgt, darf diese aber noch nicht gebrauchen (Studentenprojekt). Bis jetzt habe ich das System identifiziert und damit einen Regler ausgelegt, welchen ich dann mit Matlab in einen diskreten Regler umgewandelt habe, sodass man ihn dann in Twincat implementieren könnte. Die Frage ist eigentlich ziemlich klein und für Euch wahrscheinlich einfach --> Das Fett gedruckte ganz unten;)

Der Regler sieht wie folgt aus:

5.293 z + 89.79
---------------
z^2 + 72.58 z

Ich habe ihn dann wiederum so umgeformt, dass ich ihn in Twincat implementieren könnte.

a*z+b a*z^-1+b*z^2
C(z) = ----------- = -----------------
z^2+c*z+d 1+c*z^-1+d*z^2

u(t) = Stellgrösse
e(t) = Regelfehler
y(t) = aktuelle Kraft (Kraftsensor)

a*z^-1+b*z^2
u(t) = C(z)*e(t) = ----------------- *e(t)
1+c*z^-1+d*z^2

(1+c*z^-1+d*z^2)* u(t) = (a*z^-1+b*z^2)*e(t)

u(t)+c*u(t-1)+d*u(t-2) = a*e(t-1)+b*e(t-2)

u(t) = -c*u(t-1)-d*u(t-2)+a*e(t-1)+b*e(t-2)

Mein Lösungsvorschlag wäre folgender:

u(t-1), u(t-2) sind vorige Werte der Stellgrösse (Motorstrome Linearantrieb LinMot)
e(t-1), e(t-1) sind vorige Werte des Regelfehlers (Differenz zwischen Kraftsensor und gewünschter Kraft)

das soll dann in TwinCat irgendwie so aussehen:

u(t) = -c*u(t-1)-d*u(t-2)+a*e(t-1)+b*e(t-2)
e(t) = r(t)-y(t)
u(t-2) = u(t-1)
u(t-1) = u(t)
e(t-2) = e(t-1)
e(t-1) = e(t)

Wie Ihre sehen könnt, geht es darum die die älteren Werte mit den neueren zu überschreiben...

Kann mir jemand helfen?! Ich schaffe es einfach nicht, das in Twincat zu realisieren:/

Dank schon mal im Voraus
 
Das kannst du in Twincat in ST fast genauso hinschreiben.

Entweder du nimmst für die vorigen Werte eigene Variablennamen wie:
u_t, u_t1, u_t2 : REAL;

u_t2 := u_t1;
usw.

oder verwendest Arrays:
u : ARRAY [0..2] OF REAL;
u[2] := u[1];
usw.
 
Zurück
Oben