Regler

xXyYzZ

Level-1
Beiträge
67
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo miteinander,

folgende Aufgabenstellung habe ich:

Es liegt ein Wert X_IST vor (Geschwindigkeit). Dieser wird während des Betriebes in bestimmten Situationen begrenzt auf X_GRENZE.
Jetzt soll der Wert nicht direkt von X_IST auf X_GRENZE springen sondern sich diesem langsam annähern (linear).

Sozusagen:

Code:
Do Loop
X_SOLL = X_IST - LINEAR_FAKTOR
//X_SOLL wird dann im System verarbeitet
UNTIL X_IST<= X_GRENZE

Die Anpassung mit dem Faktor soll einmal pro Sekunde geschehen.
Wie kann ich das am Besten umsetzen? Hab heut schon ein wenig probiert, stehe aber voll auf dem Schlauch...

Dankeschön!
 
Hmm eine Schleife hilft dir da nicht wirklich weiter ... geschieht ja alles im gleichen Zyklus.

Code:
IF X_IST >= (oder <=) X_SOLL THEN
// deine Anweisung was passieren soll wenn Ist = Soll
else 
X_IST := X_IST ± Linearfaktor;
END_IF;

Aufrufen entweder im Weckalarm OB (sekündlich) oder über einen Taktmerker anstoßen ... ist jetzt was mir auf die schnelle einfallen würde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist mir klar, wollte es nur so darstellen um das zu verdeutlichen mit der Schleife... und das ganze sollte natürlich in FUP/AWL passieren. Habe mir schon fertige Regler angeschaut. Aber das ist ja mal alles zu kompliziert...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
folgende Aufgabenstellung habe ich:

Es liegt ein Wert X_IST vor (Geschwindigkeit). Dieser wird während des Betriebes in bestimmten Situationen begrenzt auf X_SOLL.
Jetzt soll der Wert nicht direkt von X_IST auf X_GRENZE springen sondern sich diesem langsam annähern (linear).

Code:
VAR_INPUT
    X_SOLL: INT;
    OB_Zyklus: INT;
END_VAR

VAR_IN_OUT
    X_IST: INT;
END_VAR

BEGIN

IF X_IST < X_SOLL AND NOT (X_IST = X_SOLL) THEN
   X_IST := X_IST + (OB_Zyklus/1000);
ELSIF
   X_IST > X_SOLL AND NOT (X_IST = X_SOLL) THEN
   X_IST := X_IST - (OB_Zyklus/1000);
END_IF;

Bsp: X_SOLL = 0 und X_IST = 0 ... nichts passiert ...
X_SOLL ändert seinen Wert auf 10 => X_IST nähert sich jetzt jede Sekunde um den Wert 1, bis er 10 erreicht hat (dauert also 10 Sek.)
X_SOLL ändert seinen Wert wieder auf 0 => X_IST nähert sich jetzt jede Sekunde um den Wert 1, bis er 0 erreicht hat (dauert also 10 Sek.)

Das war es, was ich aus deiner Fragestellung herausgelesen habe.

Du hast dann im Post #3 geschrieben, dass es dir klar ist! Was ist/war dir klar??

EDIT: Das ganze natürlich nicht im OB1 aufgerufen um Missverständnisse zu vermeiden!
 
Zurück
Oben