Fel és lefutó él detektálása

Az élfigyelés lényege az,  hogy nem a bit statikus 0 vagy 1 állapotát használjuk fel mint információ, hanem a bit állapotának megváltozását.
Jellemzően a bit állapotváltozás vizsgálatát minden PLC ciklusban elvégezzük és abban az egy ciklusban, amikor a változás bekövetkezik, egy másik bitet 1-be billentünk. Tehát keletkezik egy egy ciklusidejű impulzus a figyelt bit állapotának megfelelő megváltozásakor.
Az élfigyelés lehet lefutó, illetve felfutó. Ha lefutó él figyeléséről van szó, akkor az 1->0 átmenetet figyeli, ha felfutó él figyelésről, akkor a 0->1 átmenetet.
Egy bit változásának figyelésére a jól bevált positive/negative edge utasítás használható.
Létradiagram formában:



STL-ben:
      A     I      0.0
      FP    M      1.0
      =     M      2.0
      A     I      0.0
      FN    M      1.1
      =     M      2.1
Az M2.0 az I0.0-ás bemenet felfutó élénél (0->1 átmeneténél) kapcsol be egy ciklusidőre, az M2.1 pedig az I0.0 bemenet lefutó élénél (1->0 átmenetnél):


 
Ha sok biten kell éleket detektálni, akkor sok ilyen sorra lesz szükség (bitenként egyre).

Ennek elkerülésére ilyen esetben célszerű egy funkciót írni, ami egyben elvégzi több it figyelését is.
Az alábbi rövid blokk egyszerre 8 bit állapotát figyeli az #IN bemeneten.
Ha bármelyik bit megváltozik (akár több is), akkor a kimenetén jelzést ad.
Két kimenet szolgál a bemenő byte bitjeinek jelzésre. Az #Up akkor kerül egy ciklus ideig (azaz a funkció két meghívása között eltelő ideig) 1 állapotba, amikor #IN byte bármelyik bitjén felfutó élet detektál. A #Dn akkor lesz 1 állapotú szintén egy ciklus ideig, amikor #IN byte bármelyikén lefutó élet detektál.
Ha #IN byte előző futáskori tartalma úgy változik meg, hogy bizonyos bitek fel, mások lefutó élt produkálnak, akkor mindkét kimenet 1 állapotú lesz.

A blokk változólistája:


A blokk forrásprogramja STL-ben:


A blokk hívása létrában így néz ki:


Működési elv:
A blokk a bemeneti bitek változásának érzékeléséhez egy átmeneti változót használ, amit kívülről kell megadni neki a #TMP paraméterben. Erre azért van szükség, hogy a blokk lefutása után is megmaradjon az átmeneti tár tartalma.
A blokk először törli mindkét jelzőkimenetet.
Ezután egy XOR művelet segítségével összehasonlítja az #IN bemenet pillanatnyi tartalmát a krábban tárolt tartalommal, azaz #TMP-vel.
A XOR eredményeképpen az ACCU1-ben minden olyan helyiértéken lévő bit 1 lesz, amelyik helyiértéken eltérés van a korábbi és a pillanatnyi bit állapotok között.
Ha tehát #IN tartalma binárisan: 01011101, #TMP tartalma pedig 01111001, akkor ACCU1 tartalma XOR után 00100100 lesz, mivel a 2-es és 5-ös bit változott meg az előző hívás óta.
A XOR eredményét átmenetileg eltárolja #T-ben.
Ezután végrehajt egy AND műveletet a XOR eredménye és az #IN bemenet között. Az eredmény az ACCU1-ben képződik, ahol a művelet után minden olyan bit 1 lesz, amelyen felfutó él keletkezett #IN-ben.
Ezután már csak azt kell megvizsgálni, hogy az AND eredménye nulla-e. Az AND beállítja a CC1 jelzőbitet  ha az eredmény nem nulla. Ilyenkor az ugrási feltétel nem teljesül és bekapcsolja az #Up kimenetet jelezve a felfutó él bekövetkeztét.
Ha az eredmény nulla, akkor a feltételes JZ ugrás átugorja az #Up kimenet bekapcsolását, mert nincs felfutó él.
Ezután újra beolvasásra kerül ACCU1-be az #IN bemenet, majd egy XOR FFh segítségével invertálja, majd az #IN inverze és az #X-ből visszanyert korábbi XOR eredmény között AND műveletet hajt végre. Az ACCU1-ben ekkor azok a bitek lesznek 1 állapotúak, melyeken lefutó él keletkezett. Ha nem volt lefutó él, akkor az eredmény nulla.
Ezt a fentihez hasonló módon egy feltételes ugrás vizsgálja meg, ha az eredmény nem nulla, akkor 1-be állítja a #Dn kimenetet.
Utolsó lépésként az #IN bemenetet elmenti a #TMP tárolóba és kilép.

A fent ismertetett funkció jól használható pl. hibállapot változás érzékelésére.
Minden hibajelzést egy-egy bithez rendelünk hozzá. Ha valamelyik hiba bekövetkezik, akkor a funkció #Up kimenetén keletkezik egy impulzus. Akkor is, ha meglévő hibajelzés mellé (korábban érkezett és még fennálló hiba mellé) érkezik további jelzés.

Szirty