Hallo,
hier ein Hochlaufgeber in SCL.
FUNCTION FC210 : VOID
TITLE = 'Hochlaufgeber'
(*
Der Baustein erzeugt einen Hochlaufgeber für Integer- Werte.
Wenn der Baustein im 100ms- Takt aufgerufen (OB35)wird,
beträgt bei einer Rampe = 100 die Zeit für einen Sollwertsprung
von 0 auf 10.000 = 10 Sec.
*)
VERSION : '1.0'
AUTHOR : Old_Willi
NAME : Hoch_Geb
FAMILY : Strg
//************ Bausteinparameter ******************
VAR_INPUT // Eingangsparameter
TAKT :BOOL; // Taktzeit für Erhöhung bzw. Absenkung
SOLL_EING :WORD; // Sollwert- Eingang
RAMPE :INT; // bei 100 ist die Zeit für einen Sollwertsprung von 0 auf 10.000 = 10 Sec.
END_VAR
//************ Durchgangsparameter ******************
VAR_IN_OUT
SOLL_AUSG :WORD; // Sollwert- Ausgang
END_VAR
//************ Ausgangsparameter ******************
VAR_OUTPUT
END_VAR
//************ temporäre Parameter ******************
VAR_TEMP
SOLL_AUSG_TEMP :INT;
SOLL_EING_TEMP :INT;
END_VAR
//************ Anweisungsteil ******************
BEGIN
SOLL_AUSG_TEMP := WORD_TO_INT (SOLL_AUSG);
SOLL_EING_TEMP := WORD_TO_INT (SOLL_EING);
//****** Rampe größer *************
IF SOLL_EING_TEMP >= SOLL_AUSG_TEMP AND Takt THEN
SOLL_AUSG_TEMP := SOLL_AUSG_TEMP + RAMPE;
IF SOLL_EING_TEMP < SOLL_AUSG_TEMP THEN
SOLL_AUSG_TEMP := SOLL_EING_TEMP;
END_IF;
END_IF;
//****** Rampe kleiner *************
IF SOLL_EING_TEMP <= SOLL_AUSG_TEMP AND Takt THEN
SOLL_AUSG_TEMP := SOLL_AUSG_TEMP - (RAMPE);
IF SOLL_EING_TEMP > SOLL_AUSG_TEMP THEN
SOLL_AUSG_TEMP := SOLL_EING_TEMP;
END_IF;
END_IF;
SOLL_AUSG := INT_TO_WORD (SOLL_AUSG_TEMP);
END_FUNCTION