# Heartbeat richtig behandeln



## rebbi (15 Oktober 2008)

Servus zusammen! 


Ich steh vor der Aufgabe, einen auf Seite der SPS realisierten Heartbeat (ich glaub ne Flanke, die sich einfach ständig ändert, sprich von 0 auf 1 auf 0 auf 1 ... umschaltet) in meiner C#-Anwendung auszuwerten - damit soll natürlich festgestellt werden, ob die Verbindung noch steht. 


Ich les also das Byte mit Hilfe von libnodave aus - dann weiß ich aber nicht mehr so recht weiter. 
Wie soll ich das denn in meiner Endlosanwendung realisieren? 

Hat einer n Denkanstoß oder n Algorithmus, nach dem man bei sowas vorgeht? 


mfG Andi


----------



## Ralle (15 Oktober 2008)

Flanke kannst du mit Sicherheit vergessen, das bekommt du mit dem PC und libnodave gar nicht sicher mit. Besser, dein Kollege macht einen Blinker, z.Bsp. 1 Sekunde an, 1 Sekunde aus. Du mußt in deinem Programm die Bool lesen und überwachen, daß die Einphase und die Ausphase des Signals nie > 1 Sekunde (zu Sicherheit 1,5 Sekunden) ist. Also eine 1 erkennen, steigende Flanke im PC-Programm, Zeit speichern, Fallende Flanke erkennen, Zeit speichern, Differenz bilden, auswerten, steigende Flanke auswerten, Zeit speichern, Differenz bilden, auswerten usw.

Wie schnell der Blinker sein darf hängt von der Geschwindigkeit der Kommunikation ab.


----------



## marlob (15 Oktober 2008)

Gib doch mal C# und Watchdog in google oder so ein. Da finden sich so einige Programmbeispiele


----------



## Key (15 Oktober 2008)

Ist es nicht einfacher nen gemeinsames Bit zu definieren was durch PC gesetzt und durch SPS rückgesetzt wird. Dann noch einen Timer auf SPS Seite sowas wie nach 5 sek info das kein lebenszeichen von pc und auf PC halt das gleiche.

Aso und wegen >1 sek Abtasttheorem beachten mindestens mit doppelter genauigkeit wie das Ursprungssignal wenn man sowas mit Flanken macht.

Also bei >1 Sek Toogle auf sps mind. <0,5 sek auf PC wobei kommunikationsdauer mit drauf kommt.

gruß Key


----------



## rebbi (15 Oktober 2008)

Key schrieb:


> Ist es nicht einfacher nen gemeinsames Bit zu definieren was durch PC gesetzt und durch SPS rückgesetzt wird. Dann noch einen Timer auf SPS Seite sowas wie nach 5 sek info das kein lebenszeichen von pc und auf PC halt das gleiche.
> 
> Aso und wegen >1 sek Abtasttheorem beachten mindestens mit doppelter genauigkeit wie das Ursprungssignal wenn man sowas mit Flanken macht.
> 
> ...




Sowas mach ich jetzt im Grunde schon.
SPS setzt Bit1, wenn Daten vorhanden sind. Ich hol die Daten ab und setz ein Bit2, dass ich die Daten abgeholt hab - daraufhin setzt das SPS Bit1 und Bit2 zurück.

Problem ist: Die Daten kommen etwa alle 50 - 100 Sekunden. Ich muss also schon vorher wissen, ob die Connection noch steht 


Habs bisher per Integer-Wert geregelt. Die SPS zählt hoch, ich les alle paar Sekunden aus. Ist der Wert identisch --> Connection lost
Unterscheidet sich der Wert --> Connection vorhanden.

Da kanns zwar passieren, dass nicht sofort beim ersten Schleifendurchlauf nach Verlust der Connection bemerkt wird, dass etwas nicht mehr stimmt. Aber spätestens beim zweiten Durchlauf würde es bemerkt werden 

Leider will aber mein Chef eben so n Heartbeat.
Daher schonmal Danke für eure Infos! Werd versuchen, das entsprechend zu implementieren


----------



## harrylask (15 Oktober 2008)

Hallo rebbi,
als Lebenssignal verwende ich gerne einen Zähler.

Möglichkeit 1: festen Wert zyklisch übertragen und auf der anderen dekrementieren, erreicht der Wert 0 besteht keine Verbindung mehr.

Möglichkeit 2: SPS seitig einen Zähler inkrementieren und zyklisch übertragen,
auf der anderen Seite zyklisch abfragen, hat sich der Wert zwischen 2 Abfragen nicht mehr geändert besteht keine Verbindung mehr.

Grüsse, harrylask

[EDIT]
sorry, hatte dein letztes Post übersehen!
[/EDIT]


----------

