# SPS Programmierung. Edge Down und Edge Up?



## DerAskTyp (4. Dezember 2017)

Hallo ich hätte eine Frage zu SPS. Kann mir jemand erklären wann man das Edge Down und Edge Up benutzt. Ich weis nur das es auf Flanken reagiert, kann mir aber jemand ein leichtes Beispiel vorführen, wann man das verwendet?


----------



## sheel (8. Dezember 2017)

Hi

um welche SPS usw. gehts überhaupt?


----------



## cwriter (9. Dezember 2017)

DerAskTyp hat gesagt.:


> Ich weis nur das es auf Flanken reagiert, kann mir aber jemand ein leichtes Beispiel vorführen, wann man das verwendet?


Im Prinzip ist Edge up (bzw. posedge) ja einfach die Transition von low zu high und edge down (negedge) umgekehrt.
Für die Maschine kann es nun recht praktisch sein, eine Flankenlogik zu machen, statt immer zu pollen und die Logik zu invertieren. Als Beispiel:
Du hast einen Taster und willst beim Auslösen einen Rollladen hoch- und runterfahren lassen. Da der Laden nur 2 Positionen {voll offen, voll zu} kennt, ist ein Halten der Taste gleichwertig zum ganz kurz Tasten.

Nun willst du nicht ständig den Status des Tasters prüfen. Kostet ja Strom, und wenn du nur jede Sekunde prüfst, werden einzelne Eingaben schlicht nicht erkannt (Nyquist-Shannon und so).
Daher baut man einen Interrupt Controller ein: Dieser löst einfach bei einer gewissen Bedingung aus und weckt die CPU. Aber wenn du einfach als Bedingung (Taster = HIGH) nimmst, dann würde der Interrupt immer wieder neu ausgelöst werden, wenn die ISR (Interrupt Service Routine) verlassen wurde und der Taster noch gedrückt ist, was durchaus vorkommen kann (man will aus gewissen Gründen nicht zu viel Zeit im Interrupt Mode verbringen, u.a. weil es andere Interrupts geben könnte, die wichtiger sind).
Dann würde also sehr wahrscheinlich bei einem Druck der Taste mehrmals die Richtung geswitched (also z.B. hoch-runter-hoch-runter, was ja nicht das Ziel des Nutzers war, der den Laden oben haben wollte).

Daher haben heutzutage fast alle Mikrokontroller noch eine Edge-Detection, an die sich eine ISR anschliessen lässt. So wird pro Drücken einmal eine posedge ausgelöst, und erst durch Loslassen und nochmals drücken wird wieder eine ISR ausgelöst.

Das entspricht nach Wikipedia der "Zyklischen SPS mit Unterbrechungsverarbeitung" (igitt, was für ein Name).

Falls du eine Maschine ohne Interruptcontroller hast, kannst du dasselbe wie oben immer noch machen, und die Edgedetection setzt einfach ein Bit, statt einen Interrupt auszulösen. Für das Beispiel eines (zeitunkritischen) Tasters sind aber Interrupts die gängige Lösung.
Ohne Interrupts ist der einzige Vorteil der Edgedetection, dass Hardware die Erkennung übernimmt, die wahrscheinlich schneller ist als deine CPU. Aber der Stromverbrauch ist dann nicht wesentlich kleiner als ohne Edgedetection, das Programmieren ist ein bisschen leichter.



sheel hat gesagt.:


> um welche SPS usw. gehts überhaupt?


Falls es genauer haben willst, wäre das schon interessant zu wissen.

Gruss
cwriter


----------

