-> Hier kostenlos registrieren
Hallo Zusammen,
ich würde gerne mein prinzipielles Verständnis wieder etwas auffrischen oder mir neue Lösungsansätze aneignen.
Grundsätzlich geht es um das Basic Thema Schrittketten von extern beschalten in Strukturierten Text / SCL. Wie baut man das in der Praxis am Besten auf vor allem auch im Hinblick auf z.B. Aktorsteuerung (z.B. Motoren)? Über die Suche hab ich zwar das ein oder andere Thema gefunden aber noch keinen konkreten Ansatz....
Ich habe hier für den Anfang der Diskussion mal ein prinzipielles Beispiel erstellt, gibt es hierzu Tipps oder hat jemand ein konkretes Beispiel für mich?
Bin für jeden Tipp dankbar, denn kleine Schritte führen zu großen Erfolgen!
ich würde gerne mein prinzipielles Verständnis wieder etwas auffrischen oder mir neue Lösungsansätze aneignen.
Grundsätzlich geht es um das Basic Thema Schrittketten von extern beschalten in Strukturierten Text / SCL. Wie baut man das in der Praxis am Besten auf vor allem auch im Hinblick auf z.B. Aktorsteuerung (z.B. Motoren)? Über die Suche hab ich zwar das ein oder andere Thema gefunden aber noch keinen konkreten Ansatz....
Ich habe hier für den Anfang der Diskussion mal ein prinzipielles Beispiel erstellt, gibt es hierzu Tipps oder hat jemand ein konkretes Beispiel für mich?
Bin für jeden Tipp dankbar, denn kleine Schritte führen zu großen Erfolgen!

Code:
PROGRAM PLC_PRG
VAR
fbControlSeq : FB_ControlSequence;
_xStart : BOOL;
END_VAR
_xStart := TRUE;
(* Ablaufsteuerung ausführen *)
fbControlSeq(xStart := _xStart);
fbControlSeq.Execute();
Code:
FUNCTION_BLOCK FB_Sequence
VAR_INPUT
xStart : BOOL;
xReset : BOOL;
xExternesSignal1 : BOOL;
xExternesSignal2 : BOOL;
xExternesSignal3 : BOOL;
xExternesSignal4 : BOOL;
xExternesSignal5 : BOOL;
END_VAR
VAR_OUTPUT
iZustand : INT;
xError : BOOL;
END_VAR
VAR_IN_OUT
END_VAR
VAR
END_VAR
Code:
METHOD Execute : BOOL
VAR_INPUT
END_VAR
CASE iZustand OF
0: (* Initialisierung *)
IF xStart THEN
iZustand := 1; (* Zum nächsten Zustand wechseln *)
END_IF;
1: (* Schritt 1*)
IF xExternesSignal1 THEN
iZustand := 2;
ELSE
xError := TRUE;
iZustand := 6;
END_IF;
2: (* Schritt 2*)
IF xExternesSignal2 THEN
iZustand := 3;
ELSE
xError := TRUE;
iZustand := 6;
END_IF;
3: (* Schritt 3*)
IF xExternesSignal3 THEN
iZustand := 4;
ELSE
xError := TRUE;
iZustand := 6;
END_IF;
4: (* Schritt 4*)
IF xExternesSignal4 THEN
iZustand := 5;
ELSE
xError := TRUE;
iZustand := 6;
END_IF;
5: (* Schritt 5: Finished *)
IF xExternesSignal5 THEN
iZustand := 0;
ELSE
xError := TRUE;
iZustand := 6;
END_IF;
6: (* Errorzustand *)
IF xReset THEN
xError := FALSE;
iZustand := 0;
END_IF;
END_CASE;
Code:
FUNCTION_BLOCK FB_ControlSequence
VAR_INPUT
xStart : BOOL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
Code:
METHOD Execute
VAR_INPUT
END_VAR
VAR_STAT
_fbSequence : FB_Sequence;
_xStart : BOOL;
_xExternesSignal1 : BOOL;
_xExternesSignal2 : BOOL;
_xExternesSignal3 : BOOL;
_xExternesSignal4 : BOOL;
_xExternesSignal5 : BOOL;
_xReset : BOOL;
_iZustand : INT;
_xErrorSeq : BOOL;
_xAlarm : BOOL;
END_VAR
//************************************************************************
// Sequence
_xStart := xStart ;
(* Schalten der Signale abhängig von Bedingungen *)
_xExternesSignal2 := (_iZustand = 2);
_xExternesSignal3 := (_iZustand = 3);
_xExternesSignal4 := (_iZustand = 4);
_xExternesSignal5 := (_iZustand = 5);
IF _iZustand = 6 THEN
(* Fehlerzustand überwachen *)
_xAlarm := _xErrorSeq;
END_IF
//*****************************************************************************
_fbSequence(
xStart:= _xStart,
xReset:= _xReset,
xExternesSignal1:= _xExternesSignal1,
xExternesSignal2:= _xExternesSignal2,
xExternesSignal3:= _xExternesSignal3,
xExternesSignal4:= _xExternesSignal4,
xExternesSignal5:= _xExternesSignal5,
xError => _xErrorSeq,
iZustand=> _iZustand);
_fbSequence.Execute();