TIA Lifebeat / Watchdog

Patrick.lu

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich möchte ein Aggregat per Profinet einbinden, welches mir einen Lifebeat jede Sekunde zur Verfügung stellt.
Dieses Lifebeat möchte ich nun nutzen, um zu überprüfen, ob die Verbindung zum Aggregat steht.

Leider bin ich noch recht neu in Sachen AWL/SCL/FUP und weiß mich nicht so recht anzulegen.

Ich möchte zB. während 6 Sekunden (Timer) prüfen, ob sowohl eine negative wie positive Flanke vom Lifebeatsignal aufgetaucht ist.
Ein Timer von 6 Sekunden habe ich.
Per [P] sprich [N] kann ich auf negative oder positive Flanke testen.
Ich weiß jedoch nicht wie es umsetzen kann, dass ich während 6 Sekunden prüfe, ob beides erfolgreich war, also sowohl P wie N von meinem Signal.

Könnte bitte jemand mir eine Tipp geben? Bin auch offenen für eine andere Lösung, falls mein Gedanke nicht richtig sein sollte.

Würde mich freuen.

Gruß,
Patrick
 
Guten Tag,

ich möchte ein Aggregat per Profinet einbinden, welches mir einen Lifebeat jede Sekunde zur Verfügung stellt.
Dieses Lifebeat möchte ich nun nutzen, um zu überprüfen, ob die Verbindung zum Aggregat steht.

Leider bin ich noch recht neu in Sachen AWL/SCL/FUP und weiß mich nicht so recht anzulegen.

Ich möchte zB. während 6 Sekunden (Timer) prüfen, ob sowohl eine negative wie positive Flanke vom Lifebeatsignal aufgetaucht ist.
Ein Timer von 6 Sekunden habe ich.
Per [P] sprich [N] kann ich auf negative oder positive Flanke testen.
Ich weiß jedoch nicht wie es umsetzen kann, dass ich während 6 Sekunden prüfe, ob beides erfolgreich war, also sowohl P wie N von meinem Signal.

Könnte bitte jemand mir eine Tipp geben? Bin auch offenen für eine andere Lösung, falls mein Gedanke nicht richtig sein sollte.

Würde mich freuen.

Gruß,
Patrick

Ich mache das immer mit 2 Timer
Timer 1 läuft bei Signal 0 des lifebits
Timer 2 läuft bei Signal 1.
die Verzögerungszeit ist bei 5s.

Ist ein Timer abgelaufen ist die Verbindung gestört.

Gruss
Guenni


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Antwort.

Verstehe ich das richtig, du machst anschließend eine Differenz der beiden Timer, falls diese Differenz größer gleich 5 Sekunden ist, gibst du einen Fehler raus?
Oder denke ich zu kompliziert?

Gruß,
Patrick
 
Du denkst zu kompliziert. ;) Guenni schaut, ob es eine von 2 Einschaltverzögerungen schafft abzulaufen.


Man muß nicht (mehr oder weniger umständlich) unterscheiden, ob das Signal 0 bleibt oder 1 bleibt oder eine P-Flanke oder eine N-Flanke hat und danach (womöglich mehrere) Timer verwenden. Man kann einfach ganz universell prüfen, ob das Signal sich ändert (*) und dahinter z.B. eine Ausschaltverzögerung (TOF) verwenden. Wenn der Timer abläuft dann ist die letzte Signal-Änderung zu lange her. Bei TOF entspricht der Timer-Ausgang dem Gut-Fall: Timer.Q = 1: Signaländerung war da / Timer.Q = 0: Signal ändert sich nicht (mehr). Die Prüfung auf Änderung kann man mit einem Lifebit oder auch mit einem sich ändernden Zahlenwert (z.B. Telegrammnummer) machen.

(*)
binäre/boolsche Signale prüft man auf Änderung mit XOR (Signal_jetzt XOR Signal_vorher ...; Signal_vorher := Signal_jetzt;)
numerische Werte prüft man auf Änderung mit Vergleichern (Wert_jetzt <> Wert_vorher ...; Wert_vorher := Wert_jetzt;)

Harald
 
. . . Per [P] sprich [N] kann ich auf negative oder positive Flanke testen.
Ich weiß jedoch nicht wie es umsetzen kann, dass ich während 6 Sekunden prüfe, ob beides erfolgreich war, also sowohl P wie N von meinem Signal. . . .
Hallo Patrick!

Wenn ein Signal vom 0-Pegel auf den 1-Pegel wechselt, dann spricht man von einer positiven Flanke und im umgekehrten Fall von einer negativen Flanke - entschuldige bitte, dass ich so weit aushole, das wird Dir nicht neu sein.
Wenn z.B. nach einer positiven Flanke keine negative Flanke kommt, dann kann auch nicht wieder eine positive Flanke kommen, da das Signal unverändert auf 1-Pegel "festhängt".
Auch hier gilt entsprechendes für den umgekehrten Fall, also die negative Flanke. Das klingt alles so selbstverständlich, dass man eigentlich nicht extra darauf hinweisen möchte.
Aber wichtig ist die Schlussfolgerung daraus: prinzipiell genügt es, nur die positiven oder nur die negativen Flanken zu überwachen.
In Deinem Fall erwartest Du, dass 1 s nach einer positiven Flanke eine negative kommt und 1 s nach einer negativen eine positive.
Fragst Du z.B. nur die positiven Flanken ab, so dauert es schlimmsten Falls 1 s länger, bis Du ein Absterben der Verbindung feststellen kannst.

Du brauchst nicht extra per [P] oder per [N] die Flanken zu erkennen, weil die Timer "von Hause aus" nur durch (positive) FlankenWechsel gestartet ("getriggert") "werden.
Gibst Du das Signal, das Du überwachen willst, auf den Timer für die positiven Flanken und das negierte Signal auf den anderen Timer für die negativen Flanken, musst Du nur noch die Ausgänge der beiden Timer "verodern" und das war's.

Hast Du einen Timer zur Verfügung, bei dem die Zeit weiterläuft, wenn sein Eingang wieder auf 0-Pegel zurückgeht, dann ist Haralds Vorschlag aus #4 interessant, mit einer XOR-Verknüpfung den aktuellen Zustand des EingangsSignals mit dem Zustand im vorherigen Zyklus zu vergleichen, denn am Ausgang der XOR-Verknüpfung erhältst Du Impulse, die nur 1 Zyklus lang andauern.

TriggerImpuls := SignalAlt XOR SignalNeu
SignalAlt := SignalNeu

"SignalAlt" ist der "selbstgemachte" FlankenMerker. Er muss natürlich im jeweils nächsten PLC-Zyklus noch unverändert zur Verfügung stehen.

Gruss, Heinileini

PS:
Ich habe oben geschrieben "Du brauchst nicht extra per [P] oder per [N] die Flanken zu erkennen, weil . . .".
Es stört sogar, wenn Du die Timer mit 1-Zyklus-langen Impulsen triggerst und Du Timer "erwischst", die mit Ende des 1-Pegels am Eingang die ZeitZählung vorzeitig stoppen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für eure ausführlichen Antworten.

Ich hoffe ich habe etwas brauchbares daraus interpretiert.

Meine Lösung sieht nun wie folgt aus:
SPS_Forum_watchdog.JPG

Es scheint zu klappen, also nochmal vielen Dank euch allen! :)
 
Also ich persönlich arbeite für bei solchen Sachen nicht gern mit Timern.
Ich mache das so:
CPU-Taktmerker (1s) zählt einen Wert hoch.
Flanke vom Lifebit nullt diesen Wert wieder.
Dann vergleichen ob Wert gleich oder größer als 6 ist.
Wenn das der Fall ist war länger als 6 Sekunden keine Flanke vom Lifebit da.
Dann Störung setzen! (nicht mit "=" zuweisen weil nach Überlauf der Wert irgendwann wieder bei Null anfängt)
Störungsquittierung setzt den Zählwert natürlich auch auf Null

Beim CPU Taktmerker kann ich darauf verlassen, dass er zuverlässig ohne Wenn und Aber kommt.
Bei zwei Timern die sich gegenseitig abstoßen ist das immer so eine Sache.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei zwei Timern die sich gegenseitig abstoßen ist das immer so eine Sache.
Ja ja Paul das stimmt schon, aber hier war nicht die Rede davon, einen Zeittakt mit zwei Timern zu stricken, sondern die Pausen zwischen den Flanken des WachHundSignals mit 1 oder 2 Timern zu überbrücken.
(Für irgendwas müssen die Timer doch zu gebrauchen sein! ;o)
 
Ja ja Paul das stimmt schon, aber hier war nicht die Rede davon, einen Zeittakt mit zwei Timern zu stricken, sondern ....
Ich hab mir die ganzen Vorschläge und Ansätze jetzt nicht bis ins Detail durchgelesen.
Wollte einfach nur einen Vorschlag bringen wie sich das robust und relativ einfach umsetzen lässt.


Die Lösung die der TE dann gepostet hat, weißt meiner Ansicht nach schon ein paar Schwachstellen auf.
1. Bevor das Lifebit zum ersten mal kommt ist der TOF ja False --- > d.h. wir haben erst mal immer für ein paar Zyklen den Fehler anstehen
2. Da der Fehler nicht gesetzt, sondern nur mit "=" zugewiesen wird, verschwindet er von selbst wieder (evtl. stoppt deshalb die Maschine und niemand weiß warum)

Nichts für Ungut Harald, aber ich hab mich gewundert, dass Du das ausdrücklich gelobt hast ;)
 
Die Lösung die der TE dann gepostet hat, weißt meiner Ansicht nach schon ein paar Schwachstellen auf.
1. Bevor das Lifebit zum ersten mal kommt ist der TOF ja False --- > d.h. wir haben erst mal immer für ein paar Zyklen den Fehler anstehen
Das finde ich richtig so - es gab ja noch keine Bestätigung, daß auf der Verbindung irgendwas bzw. ein Lifebit-Toggle empfangen wurde.

2. Da der Fehler nicht gesetzt, sondern nur mit "=" zugewiesen wird, verschwindet er von selbst wieder (evtl. stoppt deshalb die Maschine und niemand weiß warum)

Nichts für Ungut Harald, aber ich hab mich gewundert, dass Du das ausdrücklich gelobt hast ;)
Die einfache Schaltung mit dem TOF gibt exakt den Zustand der Verbindungsüberwachung an.
Bevor überhaupt eine Flanke erkannt wurde, zeigt der TOF zunächst "Fehler" an.
Sobald nach einem Timeout wieder eine Flanke erkannt wird, zeigt der TOF wieder "Gut" an.
Ob ein aufgetretener Timeout-Zustand irgendwie gespeichert werden soll und ob das eine (speichernde und/oder quittierpflichtige) Meldung oder sonstwas auslöst steht auf einem anderen Blatt. Die anderen beschriebenen (umständlicheren) Lösungen mit den teils mehreren Timern waren auch "selbstheilend".

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Harald
Passt schon so.
Ich bin auch immer für einfache, gut lesbare Programmierung wo man sogar noch was in den Querverweisen findet.
Leider geht der Trend komplett in die andere Richtung
 
Ich nehme keine Flanken, denn wenn von Anfang an kein Signal da ist funktioniert ja weder P noch N.
Ich nehme 2 TON Timer einen mit dem Lifebit auf "und" den anderen Timer mit dem Lifebit auf "und nicht" beschalten.
Wenn einer der Timer es schafft durch zu laufen war kein Signalwechsel da.
Dann ist es auch egal ob das Lifebit immer da ist oder nicht da ist. Deckt für mich alles ab.



Gruß

Jens
 
Ich nehme keine Flanken, denn wenn von Anfang an kein Signal da ist funktioniert ja weder P noch N.
Na, wenn das sooo ist, dann bleibe ich doch lieber bei meiner zu-Fuss-gestrickten-FlankenErkennung ;o)
Ich nehme 2 TON Timer einen mit dem Lifebit auf "und" den anderen Timer mit dem Lifebit auf "und nicht" beschalten.
Wenn einer der Timer es schafft durch zu laufen war kein Signalwechsel da.

Das hatte ich doch in #5 gemeint, als ich schrieb:
Du brauchst nicht extra per [P] oder per [N] die Flanken zu erkennen, weil die Timer "von Hause aus" nur durch (positive) FlankenWechsel gestartet ("getriggert") werden.
Gibst Du das Signal, das Du überwachen willst, auf den Timer für die positiven Flanken und das negierte Signal auf den anderen Timer für die negativen Flanken, musst Du nur noch die Ausgänge der beiden Timer "verodern" und das war's.
Mit "Timer" hatte ich TON gemeint und unterschlagen, zu erwähnen - sorry.
Beim TOF wird die negative Flanke ausgewertet, um den Timer zu starten.
Da Deine Logik mit 2 "TÖNEN" arbeitet, also letztendlich mit einer positven Flanke von "kein Signal" und einer positiven Flanke von NICHT "kein Signal", solltest Du vielleicht mal überlegen/testen, warum letztere doch erkannt wird, obwohl "eigentlich" keine Flanke aufgetreten ist (und dennoch erkannt wird).

Gruss, Heinileini
 
Zurück
Oben