A
Anonymous
Guest
-> Hier kostenlos registrieren
Hallo zusammen,
ich brauche eure Hilfe. Bin ein Neuling in CoDeSys und ST.
Ich habe einen FB erstellt, der folgendes machen soll:
Wenn an einem Eingang eine pos. Flanke auftritt, dann starte einen Timer von x Sekunden, unabhängig was in der Zwischenzeit an diesem Eingang passiert.
Der Code ist noch nicht optimiert!
FRAGE: Der Timer läuft nur ein einziges mal ab, warum?
Ich habe es mit einer eigenen Version, mit einem Flag das gestzt wird, wenn der Eingang 0 ist probiert, doch dort läuft die Funktion auch nur einmal durch?
FRAGE: Mach ich vielleicht etwas mit dem Simulator falsch?
Freu mich, wenn mir jemand weiterhelfen kann. DANKE
lieven
ich brauche eure Hilfe. Bin ein Neuling in CoDeSys und ST.
Ich habe einen FB erstellt, der folgendes machen soll:
Wenn an einem Eingang eine pos. Flanke auftritt, dann starte einen Timer von x Sekunden, unabhängig was in der Zwischenzeit an diesem Eingang passiert.
Der Code ist noch nicht optimiert!
FRAGE: Der Timer läuft nur ein einziges mal ab, warum?
Ich habe es mit einer eigenen Version, mit einem Flag das gestzt wird, wenn der Eingang 0 ist probiert, doch dort läuft die Funktion auch nur einmal durch?
FRAGE: Mach ich vielleicht etwas mit dem Simulator falsch?
Code:
FUNCTION_BLOCK Flanke_Impuls_Zeit
VAR_INPUT
blImpuls_Start: BOOL;
END_VAR
VAR_OUTPUT
blZeitimpuls_Gesetzt: BOOL;
END_VAR
VAR
blFlag_Merker_Impuls_Start:BOOL;
blFlanken_Impuls: BOOL:=FALSE;
blTemp_Zeitimpuls_Gesetzt: BOOL:= FALSE;
END_VAR
VAR PERSISTENT
blFlanke_Positiv: R_TRIG;
timeZeit_Impuls: TP;
timeZeitdauer_Impuls: TIME:=T#5s;
timeAnzeige: TIME;
END_VAR
blFlanke_Positiv(CLK:= blImpuls_Start); (* Aufruf von R_TRIG *)
blFlag_Merker_Impuls_Start:= blFlanke_Positiv.Q;
IF blFlag_Merker_Impuls_Start=TRUE THEN
blFlanken_Impuls:= TRUE; (* Kopieren *)
END_IF;
IF blFlanken_Impuls=TRUE THEN (* Abfragen ob Positive Flanke *)
timeZeit_Impuls (IN := blFlanken_Impuls, PT:= timeZeitdauer_Impuls ); (* Timer TP aufrufen *)
blTemp_Zeitimpuls_Gesetzt:= timeZeit_Impuls.Q;
timeAnzeige:=timeZeit_Impuls.ET; (* ablaufende Zeit abfragen *)
IF timeAnzeige >= timeZeit_Impuls.PT THEN (* Wenn abgelaufene Zeit der gesetzten entspricht, blFlanken_Impuls zurücksetzen *)
blFlanken_Impuls:= FALSE;
END_IF;
END_IF;
Freu mich, wenn mir jemand weiterhelfen kann. DANKE
lieven