Rampe bei digital wert?

GSOhm

Level-1
Beiträge
48
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich habe in einem Datenbaustein einen Doppelinteger-Wert gespeichert und möchte diesen mit einer Rampe (Zeit ca. 5 s) an ein PAD transferieren, weiss da jemand eine gute Lösung?

Vielen dank im Vorraus

Gruß

GSOhm
 
Naja, zuerst brauchst Du eine Definition was die 5s bedeuten.
Von 0 auf Maximum in der Zeit, oder zB 5s für jede Änderung.
Was ist das Maximum?
Nebenbei Frage: was soll an dem PAD passieren, ist das ein PB-Teilnehmer?

Ansonsten einfach in Zeitscheiben zB 100ms um einen bestimmten Wert (Steigungsgeschwindigkeit) vergrößern oder verkleinern.

Alternativ gibts einen fertigen Baustein "RAMP_P", FB52 aus der PCS7 Bibliothek.
Funktioniert aber mit REAL, müsstest den Wert vorher wandeln.
 
Hi,

ich habe in einem Datenbaustein einen Doppelinteger-Wert gespeichert und möchte diesen mit einer Rampe (Zeit ca. 5 s) an ein PAD transferieren, weiss da jemand eine gute Lösung?

Vielen dank im Vorraus

Gruß

GSOhm

Kommt der DINT aus einem HMI E/A-Feld oder wird er aus dem Programm ermittelt?
Bei HMI >> Nutzung der Variableneigenschaften Skalierung
Bei Programm >> Stichwort Skalierung selbst programmieren bzw. wie oben vorgeschlagen Bibliothek nutzen

MfG MK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ja es soll bei jeder änderung über die rampe laufen und ja es handelt dich um PB-Teilnehmer.

Danke im Vorraus

Das heisst, bei Änderung DINT pro Zeiteinheit mehr oder weniger.....

Code:
L #WERT_AKT //aktueller Stellwert aufs PAD
L #WERT_SOLL //aktueller Sollwert
>D //Stellwert größer Sollwert
SPB DEK
SPA WEIT

DEK: L #WERT_AKT
L #V_RAMPE //Änderung pro Zeiteinheit
-D
T #WERT_AKT

L #WERT_AKT //wenn zuwenig....
L #WERT_SOLL
>D
SPB OK
L #WERT_SOLL//... dann Stellwert=Sollwert
T #WERT_AKT

WEIT: L #WERT_AKT //aktueller Stellwert aufs PAD
L #WERT_SOLL //aktueller Sollwert
<D //Stellwert kleiner Sollwert
SPB INK
SPA OK

INK: L #WERT_AKT
L #V_RAMPE //Änderung pro Zeiteinheit
+D
T #WERT_AKT

L #WERT_AKT //wenn zuviel .....
L #WERT_SOLL
<D
SPB OK
L #WERT_SOLL //... dann Stellwert=Sollwert
T #WERT_AKT

OK: NOP0

nur so runtergetippt, nicht getestet, braucht man nur in gewünschten Zeitintervall aufrufen.
 
ich habe in einem Datenbaustein einen Doppelinteger-Wert gespeichert und möchte diesen mit einer Rampe (Zeit ca. 5 s) an ein PAD transferieren, weiss da jemand eine gute Lösung?

Hallo,
es gibt da, wie immer, viele Möglichkeiten um ans Ziel zu kommen.
Mein Weg wäre der folgende :
- einen FB dafür erstellen.
- dieser hat als INPUT-Informationen den max.Wert (auf den zu inkrementieren ist), die Zeit , die dafür zur Verfügung steht, die aktuelle Systemzeit und natürlich den Trigger (oder eine Freigabe).
- nun würde ich mir mir der steigenden Flanke des Trigger ausrechnen, wie hoch das Inkrement pro Millisekunde ist (sinnig wäre hierfür ein REAL). Außerdem den Ausgabewert auf Null schreiben. Die Variable "letzte Systemzeit" auf den Wert der aktuellen Systemzeit setzen.
- läuft nun das Inkrementieren ... Hierfür die Differenz der aktuellen Systemzeit zur letzten bilden und mit dem Wert das Inkremnt multiplizieren und auf den Ausgabewert aufaddieren (solange das Maximum oder die maximale Zeit noch nicht erreicht ist).

Gruß
Larry
 
Vielleicht noch eine Ergänzung:

Möglicherweise ist der Ausgabewert zum Zeitpunkt des Sollwertspungs <> 0. Dann wäre es ggf. nicht ideal den Ausgabewert auf 0 zu schreiben. Daher würde ich sicherheitshalber den letzten Sollwert speichern und bei einer Sollwertänderung die Differenz zum letzten Sollwert berechnen. Startwert für die Ausgabe wäre dann der letzte Sollwert.
 
Zurück
Oben