- Beiträge
- 24.212
- Reaktionspunkte
- 7.689
-> Hier kostenlos registrieren
Wenn man eine Aufgabenstellung klar in Umgangsprache ausdrücken kann,Frage:
Ich will in Step7 eine Flankenauswertung für ein Eingangswort realisieren. Muß ich
das für jedes Bit einzeln machen oder geht das auch für alle Bits gleichzeitig?
dann findet sich auch leicht der passende Algorithmus zur Lösung.
positive Flanke:
Ist ein Bit jetzt 1 und war im Zyklus vorher 0 ?
Code:
[COLOR="Blue"]Positive Flanke
Einzelbit 16 Bit auf einmal 16 Bit Beispiel[/COLOR]
//Flankenerkennung
U #Bit_jetzt L #Bits_jetzt L EW 12
UN #Bit_vorher L #Bits_vorher L MW 12
INVI INVI
UW UW
= #Flanke_Pos T #Flanken_Pos T MW 14
//jetzt-Zustand für nächsten Zyklus merken
U #Bit_jetzt L #Bits_jetzt L EW 12
= #Bit_vorher T #Bits_vorher T MW 12
negative Flanke:
Ist ein Bit jetzt 0 und war im Zyklus vorher 1 ?
Code:
[COLOR="Blue"]Negative Flanke
Einzelbit 16 Bit auf einmal 16 Bit Beispiel[/COLOR]
//Flankenerkennung
UN #Bit_jetzt L #Bits_jetzt L EW 16
INVI INVI
U #Bit_vorher L #Bits_vorher L MW 16
UW UW
= #Flanke_Neg T #Flanken_Neg T MW 18
//jetzt-Zustand für nächsten Zyklus merken
U #Bit_jetzt L #Bits_jetzt L EW 16
= #Bit_vorher T #Bits_vorher T MW 16
Für Einzelbits gibt es die speziellen Operationen FP und FN, die machen das genau so,
inklusive merken des Zustands "vorher". Deshalb benötigen diese Operationen einen
Hilfsmerker, der den Zustand "Bit_vorher" speichert.
Code:
[COLOR="Blue"]Positive Flanke Negative Flanke[/COLOR]
U #Bit_jetzt U #Bit_jetzt
FP #Bit_vorher FN #Bit_vorher
= #Flanke_Pos = #Flanke_Neg
- INVI negiert die unteren 16 Bits im AKKU1 ("dreht" alle Bits um)
- einen Befehl "LN Word" (Lade Not Word) analog "UN Bit" gibt es nicht,
als Ersatz dafür nimmt man "L Word" und anschließend "INVI" - UW verknüpft die unteren 16 Bits in AKKU1 mit den unteren 16 Bits im AKKU2 "UND".
Das "UND"-Verknüpungsergebnis für jedes Bit liegt danach in den unteren 16 Bits im AKKU1. - für 32 Bit auf einmal sind die Operationen INVI und UW durch INVD und UD zu ersetzen
Gruß
PN/DP