ich bin an einer weiteren Aufgabe dran, und suche Hilfe.
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?
FUNCTION_BLOCKFlanke_Impuls_ZeitVAR_INPUT
  blImpuls_Start: BOOL;END_VARVAR_OUTPUT
  blZeitimpuls_Gesetzt: BOOL;END_VARVAR
  blFlag_Merker_Impuls_Start:BOOL;
  blFlanken_Impuls: BOOL:=FALSE;
  blTemp_Zeitimpuls_Gesetzt: BOOL:=FALSE;END_VARVARPERSISTENT
  blFlanke_Positiv: R_TRIG;
  timeZeit_Impuls: TP;
  timeZeitdauer_Impuls: TIME:=T#5s;
  timeAnzeige: TIME;END_VARblFlanke_Positiv(CLK:=blImpuls_Start);                        (* Aufruf von R_TRIG *)blFlag_Merker_Impuls_Start:=blFlanke_Positiv.Q;IFblFlag_Merker_Impuls_Start=TRUETHEN
  blFlanken_Impuls:=TRUE;                            (* Kopieren *)END_IF;IFblFlanken_Impuls=TRUETHEN                          (*AbfragenobPositiveFlanke*)
  timeZeit_Impuls(IN := blFlanken_Impuls, PT:=timeZeitdauer_Impuls);    (* Timer TP aufrufen *)
  blTemp_Zeitimpuls_Gesetzt:=timeZeit_Impuls.Q;
  timeAnzeige:=timeZeit_Impuls.ET;                        (* ablaufende Zeit abfragen *)
  IFtimeAnzeige>=timeZeit_Impuls.PTTHEN                  (*WennabgelaufeneZeitdergesetztenentspricht, blFlanken_Impulszurücksetzen*)
    blFlanken_Impuls:=FALSE;
  END_IF;END_IF;
Freu mich, wenn mir jemand weiterhelfen kann. DANKE
lieven
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2005-06-28
Originally created by: lieven
Hab die Antwort selbst gefunden. Weis nicht warum ich die Sache so kompliziert gemacht habe, hier ne Lösung die Funktioniert:
Code:
FUNCTION_BLOCK Flanke_Impuls
( Eingang )
VAR_INPUT
Eingangs_Impuls: BOOL;
END_VAR
( Ausgang )
VAR_OUTPUT
Ausgangs_Impuls: BOOL;
END_VAR
( Lokal )
VAR
Timer: TP; ( Timer vom Typ TP, Impuls )
Flanken_Merker: BOOL:= FALSE;
Zeitdauer: TIME; ( Zeitdauer einstellbar )
Zeit: TIME; ( dient der Kontrolle )
END_VAR
( Flanken-Erkennung )
IF Eingangs_Impuls=TRUE THEN
Flanken_Merker:= TRUE;
END_IF;
( Aufruf der Timerfunktion TP aus der Standard LIB )
Timer(IN:= Flanken_Merker, PT:= Zeitdauer);
Ausgangs_Impuls:=Timer.Q;
Zeit:= Timer.ET;
IF Timer.ET >= Timer.PT THEN
Flanken_Merker:= FALSE;
END_IF;
Danke fürs lesen
gruß
lieven
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
lieven hat geschrieben:
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.
Die Beschreibung passt exakt auf the TP aus der standard.lib
Du brauchst weder einen Flankenmerker noch sonstige Dinge drum herum. Der Timer liefert bei der ersten positiven Flanke einen
Impuls für eine exakt vorgebare Zeit, egal was am Eingang passiert
Viele Grüße
Wolfgang
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Originally created by: lieven
Hi, an alle
ich bin an einer weiteren Aufgabe dran, und suche Hilfe.
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
Originally created by: lieven
Hab die Antwort selbst gefunden. Weis nicht warum ich die Sache so kompliziert gemacht habe, hier ne Lösung die Funktioniert:
Code:
FUNCTION_BLOCK Flanke_Impuls
( Eingang )
VAR_INPUT
Eingangs_Impuls: BOOL;
END_VAR
( Ausgang )
VAR_OUTPUT
Ausgangs_Impuls: BOOL;
END_VAR
( Lokal )
VAR
Timer: TP; ( Timer vom Typ TP, Impuls )
Flanken_Merker: BOOL:= FALSE;
Zeitdauer: TIME; ( Zeitdauer einstellbar )
Zeit: TIME; ( dient der Kontrolle )
END_VAR
( Flanken-Erkennung )
IF Eingangs_Impuls=TRUE THEN
Flanken_Merker:= TRUE;
END_IF;
( Aufruf der Timerfunktion TP aus der Standard LIB )
Timer(IN:= Flanken_Merker, PT:= Zeitdauer);
Ausgangs_Impuls:=Timer.Q;
Zeit:= Timer.ET;
IF Timer.ET >= Timer.PT THEN
Flanken_Merker:= FALSE;
END_IF;
Danke fürs lesen
gruß
lieven
Hi lieven !
Die Beschreibung passt exakt auf the TP aus der standard.lib
Du brauchst weder einen Flankenmerker noch sonstige Dinge drum herum. Der Timer liefert bei der ersten positiven Flanke einen
Impuls für eine exakt vorgebare Zeit, egal was am Eingang passiert
Viele Grüße
Wolfgang