Geschwindigkeitsrampe mit FT_RMP

Begonnen von Bodensee123, 21. Januar 2021, 14:54:55

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 3 Gäste betrachten dieses Thema.

Bodensee123

Hallo Zusammen,

ich Suche für ein Projekt nach einer Möglichkeit ein Geschwindigkeitsrampe zu implementieren. Es soll eine Zielgeschwindigkeit vorgeben werden können, welche dann langsam bis zur Zielgeschwindigkeit ansteigt. Die Geschwindigkeit soll beim erreichen des Zielwertes beibehalten werden und sich erst wieder ändern, wenn ein neuer Wert eingegeben wurde.

Abhängig der Geschwindigkeit soll dann eine Variable inkrementiert werden (z.B: Geschwindigkeit 100 entspricht 100 Inkremente pro Sekunde, Geschwindigkeit 10 entspricht 10 Inkremente pro Sekunde ).

Ich habe es bereits mit dem Funktionsbaustein FT_RMP versucht, jedoch scheint dieser nicht zu funktionieren, da der Ausgang sofort auf den Wert des Eingangssignals springt und nicht wie angegeben diesen langsam erreicht.

Hier der Code dazu:

test2: OSCAT_BASIC.FT_RMP;
out: REAL;

test2(RMP := TRUE, in := 1000,KR:= 100,KF:=100);
out := test2.out;

Hat jemand eine Idee was ich falsch gemacht habe oder wie man so etwas einfach implementieren könnte?

Vielen Dank im voraus

Zamag

Hallo Bodensee

Zu deinem Anwendungsbeschrieb würde eigentlich die Funktion SRAMP besser passen.
Versuch es einmal damit.

Gruss Zamag

Bodensee123

Hallo Zamag,
vielen Dank für deine Antwort!
Die SRAMP habe ich tatsächlich schon probiert, nur leider kann man bei diesem FB nur eine Zielposition angeben. Das bedeutet wenn die Zielposition erreicht wurde, dann ist die Geschwindigkeit 0. Ich benötige eine Rampe die eine Geschwindigkeit auch halten kann. Ansonsten würde der FB sehr gut passen, nur leider muss man eben eine Zielposition angeben.


Ignat

#3
Hallo Bodensee123,

das Ding ist, der FT_RMP Block ist mit "in" Wert erst initialisiert. In dem Block steht:

IF NOT init THEN
init := TRUE;
last := tx;
tx := t#0s;
out := in;
END_IF;


So in deinem Fall, du rufst den Block mit IN:=1000 und aufm erstem Zyklus der Program ist OUT mit diesem Wert initialisiert.

Was du ausprobieren könnte ist:
- haben noch eine Variable für "rSpeed_SET", und wechseln die dynamisch in der Programm

test2: OSCAT_BASIC.FT_RMP;
out: REAL;
rSpeed_SET :REAL;
xStart :BOOL;

test2(RMP := TRUE, in := rSpeed_SET, KR:= 100,KF:=100);
out := test2.out;

IF xStart THEN
rSpeed_SET := 1000; // give a SP to the Ramp Block, ramp up
ELSE
rSpeed_SET := 0; // stop by ramp, when no command


UPD1: zu spät gerade, glaube ich... =)