Newbie_frank
Level-1
- Beiträge
- 2
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo liebe und hilfsbereite Forum User,
ich bin zur Zeit an einer Beckhoff PLC mit Twincat PLC... IEC61131-3 in strukturiertem Text unterwegs und normalerweise in der "Denkwelt" LabView und C zu finden. Leider plagt mich ein schon lange anhaltendes, vermutlich lächerliches, Problem und hoffe um eure Hilfe.
Ja, Forum und gegoogelt wurde schon von mir, allerdings ohne für mich eine finale Hilfestellung zu erhalten. TP gewählt da dieser zu wählen ist, wenn für eine Zeit x eine Aktion ausgeführt werden soll.
Die ebenfalls schon vorhandene Ablaufsteuerungen funktionieren soweit i.O. die PLC bekommt von einer weiteren Steuerung (PC) in einer Case Anweisung das Commando "Mache das u.g. Programm" und ruft das Programm im Projekt immer zu der entsprechenden Zeit auf.
Zur Laufzeit ist es leider so, dass sobald das PRG aufgerufen wird, der Timer für ewig auf True steht und nicht, wie in der Doku nach Zeit PT wieder auf false gestellt wird. Im Online Modus steht bei dem Timer dann schon beim ersten Starten:
FBSpuelzeit
.Starttime = T10s...
.IN True
.PT 10s
.Q True
.ET 580ms
==> ET bricht nach x Zeit ab, ggf. immer wieder erneuter Aufruf oder wegen der größeren Startzeit?
SW: MiniMaschine mit ein paar Ventilen.
(* Instanzbildung des Timers*)
FBSpuelzeit
(
PT := t_spuelzeit);
IF b_Freigabe_spuelen_timer (*spülzeit starten*)
THEN
FBSpuelzeit.IN := TRUE;
b_interne_freigabe_timer_start :=TRUE; (*Fallende Flanke und abgelaufene Zeit Flag starten*)
ELSE
(*FBSpuelzeit.IN := FALSE;*) ;
END_IF
IF FBSpuelzeit.Q
THEN
b_Freigabe_spuelen_timer:=FALSE;
END_IF
IF b_interne_freigabe_timer_start AND NOT FBSpuelzeit.Q (*Spülzeit abgelaufen*)
THEN (*erst Timer starten, wenn die Freigabe erneut für die Spülung gekommen ist *)
bEND_Spuelen:=TRUE;
b_interne_freigabe_timer_start :=FALSE;
ELSE
bEND_Spuelen:=FALSE;
END_IF
(*Spülzeit abgelaufen *)
IF bEND_Spuelen
THEN
b_Freigabe_spuelen_timer :=FALSE;
bVor_Rueck_zu :=FALSE;
FBSpuelzeit.IN := false;
bSt1_PKW_seitlich_Kuehler_gespuelt:=TRUE; (*gespült*)
bEnd_Spuelen :=FALSE;
(*Ventile A bis Z im Original*)
ELSE
bSt1_PKW_seitlich_Kuehler_gespuelt:=FALSE; (*noch nicht gespült*)
END_IF
ich bin zur Zeit an einer Beckhoff PLC mit Twincat PLC... IEC61131-3 in strukturiertem Text unterwegs und normalerweise in der "Denkwelt" LabView und C zu finden. Leider plagt mich ein schon lange anhaltendes, vermutlich lächerliches, Problem und hoffe um eure Hilfe.
Ja, Forum und gegoogelt wurde schon von mir, allerdings ohne für mich eine finale Hilfestellung zu erhalten. TP gewählt da dieser zu wählen ist, wenn für eine Zeit x eine Aktion ausgeführt werden soll.
Die ebenfalls schon vorhandene Ablaufsteuerungen funktionieren soweit i.O. die PLC bekommt von einer weiteren Steuerung (PC) in einer Case Anweisung das Commando "Mache das u.g. Programm" und ruft das Programm im Projekt immer zu der entsprechenden Zeit auf.
Zur Laufzeit ist es leider so, dass sobald das PRG aufgerufen wird, der Timer für ewig auf True steht und nicht, wie in der Doku nach Zeit PT wieder auf false gestellt wird. Im Online Modus steht bei dem Timer dann schon beim ersten Starten:
FBSpuelzeit
.Starttime = T10s...
.IN True
.PT 10s
.Q True
.ET 580ms
==> ET bricht nach x Zeit ab, ggf. immer wieder erneuter Aufruf oder wegen der größeren Startzeit?
SW: MiniMaschine mit ein paar Ventilen.
(* Instanzbildung des Timers*)
FBSpuelzeit
(
PT := t_spuelzeit);
IF b_Freigabe_spuelen_timer (*spülzeit starten*)
THEN
FBSpuelzeit.IN := TRUE;
b_interne_freigabe_timer_start :=TRUE; (*Fallende Flanke und abgelaufene Zeit Flag starten*)
ELSE
(*FBSpuelzeit.IN := FALSE;*) ;
END_IF
IF FBSpuelzeit.Q
THEN
b_Freigabe_spuelen_timer:=FALSE;
END_IF
IF b_interne_freigabe_timer_start AND NOT FBSpuelzeit.Q (*Spülzeit abgelaufen*)
THEN (*erst Timer starten, wenn die Freigabe erneut für die Spülung gekommen ist *)
bEND_Spuelen:=TRUE;
b_interne_freigabe_timer_start :=FALSE;
ELSE
bEND_Spuelen:=FALSE;
END_IF
(*Spülzeit abgelaufen *)
IF bEND_Spuelen
THEN
b_Freigabe_spuelen_timer :=FALSE;
bVor_Rueck_zu :=FALSE;
FBSpuelzeit.IN := false;
bSt1_PKW_seitlich_Kuehler_gespuelt:=TRUE; (*gespült*)
bEnd_Spuelen :=FALSE;
(*Ventile A bis Z im Original*)
ELSE
bSt1_PKW_seitlich_Kuehler_gespuelt:=FALSE; (*noch nicht gespült*)
END_IF