FUNKTION_BLOCK FB_MotorControl VAR_INPUT Startknopf: BOOL; Stoppknopf: BOOL; Überlastsignal: BOOL; END_VAR VAR_OUTPUT laufendStatus: BOOL; Fehlerindikator: BOOL;END_VAR BEGIN // Start-Stop-Logik, wenn Startknopf und nicht Stopknopf und nicht überladenSignal DAN RunningStatus := TRUE; ELSIF StopButton OR OverloadSignal THEN RunningStatus := FALSE; END_IF; // Fehleranzeige Fehlerindikator := ÜberlastSignal; END_FUNCTION_BLOCK
Schnellen
Fall 3: PID-Temperaturkontrolle
FUNCTION_BLOCK FB_TempControl VAR_INPUT Setpoint: REAL; ProcessValue: REAL; END_VAR VAR_OUTPUT ControlAusgabe: REAL; END_VAR VAR Kp: REAL := 2.0; Ki: REAL: = 0.05; Kd: REAL:= 0.5; IntegralTerm: REAL := 0; LastError: REAL := 0; Timer: TON; END_VAR BEGIN // Ausführen periodisch (100ms) Timer(IN := NICHT Timer.Q, PT := T#100ms); IF Timer.Q DAN VAR Fehler:= Setpoint - Prozesswert; IntegralTerm := IntegralTerm + Error; VAR DerivativeTerm := Error - LastError; LastError := Error; ControlOutput := Kp * Error + Ki * IntegralTerm + Kd * DerivativeTerm; ControlOutput := LIMIT(0.0, ControlOutput, 100.0); Timer ((IN:= FALSE); END_IF; END_FUNCTION_BLOCK
Schnellen
Fall 5: Sicherheitsausgangssperrkontrolle
FUNKTION_BLOCK FB_SafetyGate VAR_INPUT Gate1Closed, Gate2Closed: BOOL; EStopButton: BOOL; ResetButton: BOOL; END_VAR VAR_OUTPUT SafetyStatus: BOOL; END_VAR VAR LockoutStatus: BOOL= FALSE:Lock-out-Timer: TON; END_VAR BEGIN // Sicherheitszustand VAR AllGatesClosed := Gate1Closed AND Gate2Closed; // Notfallstopp höchste Priorität IF EStopButton THEN SafetyStatus := FALSE; LockoutStatus := TRUE;Lock-out-Timer:= TRUE, PT := T#10S); RETURN; END_IF; // Logik freischalten, wenn ResetButton AND LockkoutStatus AND LockkoutTimer.Q DAN LockkoutStatus:= FALSE; END_IF;// Normaler Betrieb, wenn nicht Sperrstatus, dann Sicherheitsstatus := AllGatesClosed; END_IF;