- Beiträge
- 25.095
- Reaktionspunkte
- 8.085
-> 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 12negative 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 16Fü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
 
	 
  
 
		 
 