Stell dir einen Eimer mit Füllstandsanzeige vor.
Der Zufluss entspricht dem Pulsgeber und es gibt einen konstantem Abfluss. Der Merker wird gesetzt bei Eimer voll und gelöscht bei Eimer leer.
Voraussetzung: Deine Zykluszeit ist schnell genug, dass Du die 50 Hz Pulse sauber verarbeiten kannst (also <= 10ms).
Annahme: Zykluszeit=5ms(also 200Hz)
Den Puls würde ich über eine Flankenerkennung auf einen Zähler geben. Der Zähler zählt bei jeder Flanke 8 rauf und in jedem Zyklus 1 runter. Erreicht er Null, geht der Merker aus, erreicht er 400, geht er an.
Hier der Versuch, das in ST auszudrücken:
VARpuls at %I*:BOOL; (* Phys. Pulseingang *)flanke: R_TRIG;level:INT:=0;merker:BOOL;END_VARIF level > 0 THENlevel:= level - 1; ELSEmerker:=FALSE;END_IFflanke(CLK:=puls);IF flanke.Q THEN IF level < 400 THENlevel:=level + 8;ELSE merker:=TRUE;END_IFEND_IF(* Ärkx, ohne IDE-Unterstützung den Kram von Hand zu schreiben ist ja echt ätzend! *)
Was passiert da: Nach 2s Pulserei ist der Zähler 100 x 8 =800 hochgezählt
und gleichzeitig um 2 x 200 =400 runtergezählt. (200 ist natürlich die Zyklusfrequenz). Also steht der Zähler dann auf 400 und der Merker geht an.
Nach 2s pulsfreier Zeit ist der Zähler von 400 wieder auf 0 gelaufen und der Merker geht aus.
Fehlen ein paar Pulse, dauert es halt etwas länger als 2 Sekunden, bis der merker angeht. Ist er an und es kommen noch sporadich Pulse, dauert es ebenfalls etwas länger, bis der Merker wieder aus geht.
Hope that helps.
Gruß,
Zabex