TIA Wertänderung im WORD erkennen

S7Anfänger

Level-2
Beiträge
318
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

Ich habe insgesamt 48 Bit (Fehlermeldungen) die ich in 3 Word schreibe. Jetzt möchte ich gern erkennen, wann sich der zustand des WORD ändert. Ist so etwas möglich?
Hintergrund: ich muss bei allen 48 Fehlermeldungen die Positive und Negative Flanke auswerten um einen Trigger auf "1" zu erhalten.
Wie kann ich so etwas in FUP lösen?
Klar könnte ich 48 positive und 48 negative Flanken auswerten um diese dann mit einem riesigen OR zu verschalten. aber vielleicht geht es ja auch mit weniger aufwand.
 
Hiermit machst du eine FLANKE bei einer Änderung deines Wortes. Bei kommender und gehender Meldung.
Code:
IrgendeineStatusaenderung : BOOL;  // Statusaenderung wird ein Zyklus TRUE bei Aenderung irgendeines BIT, egal ab 0=>1 oder 1=>0
AltwertVonDeinemWort : WORD;

IrgendeineStatusaenderung := DeinWort <> AltwertVonDeinemWort;
AltwertVonDeinemWort:= DeinWort;

Für drei Worte könntest du entweder 3x den Code schreiben oder du arbeitest je mit ARRAY Variablen und legst dann eine FOR Schleife drüber.

Wie kann ich so etwas in FUP lösen?
In FUP kannst du es genauso machen. Die zwei Worte auf <> miteinander vergleichen, wenn unterschiedlich das Flankenbit zuweisen und ein Netzwerk darunter den aktuellen WORD-Status in den Altwert speichern.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hiermit machst du eine FLANKE bei einer Änderung deines Wortes. Bei kommender und gehender Meldung.
Code:
PositiveFlankeWertwechsel : BOOL;
AltwertVonDeinemWort : WORD;

PositiveFlankeWertwechsel := DeinWort <> AltwertVonDeinemWort;
AltwertVonDeinemWort:= DeinWort;

Für drei Worte könntest du entweder 3x den Code schreiben oder du arbeitest je mit ARRAY Variablen und legst dann eine FOR Schleife drüber.


In FUP kannst du es genauso machen. Die zwei Worte auf <> miteinander vergleichen, wenn unterschiedlich das Flankenbit zuweisen und ein Netzwerk darunter den aktuellen WORD-Status in den Altwert speichern.
Flanke aus Word.jpg

Das wär dann ja das. Richtig? bei jedem Zyklus wird das alte WORD mit dem neuen verglichen. ist dieses ungleich, bekomme ich für einen Zyklus eine "1"

meine Überlegung ging tatsächlich auch in diese Richtung, war mir aber nicht sicher ob es funktioniert
 
Ja, das sollte funktionieren. Die Bezeichnung "Pos.Flanke" ist wie von @Oberchefe schon bemerkt falsch. Andererseits ist es eine positive Flanke wenn man es auf die Wertänderung bezieht und nicht auf die Bits ob eines kommt oder geht. Die Flanke kommt ja bei 0=>1 und bei 1=>0 Signal. Also bei jeder Wertänderung. Wichtig: Die Variable "Word alt" darf keine temporäre Variable sein.

PS:
Ich würde auf Leerzeichen in Variablennamen verzichten. Auch auf Sonderzeichen. Aber das kannst du selber entscheiden.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, das sollte funktionieren. Die Bezeichnung "Pos.Flanke" ist wie von @Oberchefe schon bemerkt falsch. Die Flanke kommt ja bei 0=>1 und bei 1=>0 Signal. Also bei jeder Wertänderung. Wichtig: Die Variable "Word alt" darf keine temporäre Variable sein.

PS:
Ich würde auf Leerzeichen in Variablennamen verzichten. Auch auf Sonderzeichen. Aber das kannst du selber entscheiden.
Super. Danke. Das ist dann genau das, was ich brauche.
 
Moin,

man kann natürlich auch positive oder negative Flanken an einem ganzen Word abfragen:

Beispiel für das Taktmerkerbyte:
Code:
#Tb_Edge_Aux := "Clock_Byte" XOR "Clock_Byte_FP_HM";
"Clock_Byte_FP" := "Clock_Byte" AND #Tb_Edge_Aux;
"Clock_Byte_FP_HM" := "Clock_Byte";

1762338271986.png

Wenn man zwischen XOR und AND noch ein INVERT einfügt, kann man die negativen Flanken abfragen.

VG
MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt möchte ich gern erkennen, wann sich der zustand des WORD ändert. Ist so etwas möglich?
Wenn das deine Aufgabenstellung ist, dann nichts leichter als das: Vergleiche den aktuellen Wert (Wert_jetzt) mit dem vorherigen Wert (Wert_vorher). Und merke dir den aktuellen Wert für den nächsten Vergleich. Genau so wie es jetzt im Beitrag #2 steht. Dass jede Änderung gleichzeitig auch irgendeine Flanke ist, ist für die Aufgabe nicht relevant. Es sei denn, du willst vielleicht auch "Kommen" (Änderung von 0 zu 1) und "Gehen" (Änderung von 1 zu 0) unterscheiden, oder willst wissen, genau welches Bit sich geändert hat. Dann reicht ein einfacher Vergleich auf <> nicht mehr, sondern man braucht etwas Verknüpfungs-Logik (AND OR XOR NOT).
 
Code:
/ Bitweise (einzelne) Flanken pro WORT bilden:
A1_W_MusterNegFl  := NOT A1_W_MusterNeu AND A1_WMusterAlt ;  / bei Bedarf: NeuNegiert UND Alt
A1_W_MusterPosFl  := A1_W_MusterNeu AND NOT A1_WMusterAlt ;  / bei Bedarf: Neu UND AltNegiert
A1_W_MusterAlleFl := A1_W_MusterNeu XOR A1_W_MusterAlt    ;  / bei Bedarf: Neu <> Alt
A1_W_MusterAlt    := A1_W_MusterNeu ; / immer: aktuellen Zustand für Vergleich im NÄCHSTEN Zyklus merken
                                      / A1_W_MusterAlt muss STATIC sein (NICHT Temporär)!

/ ggfs zusätzlich daraus je 1 BIT SammelMeldung pro WORT *) bilden, falls benötigt:
A1_Y_SammelNeg  := A1_W_MusterNegFl  <> 0 ;
A1_Y_SammelPos  := A1_W_MusterPosFl  <> 0 ;
A1_Y_SammelAlle := A1_W_MusterAlleFl <> 0 ; / a-l-t-e-r-n-a-t-i-v : A1_Y_SammelAlle := A1_Y_SammelNeg OR A1_Y_SammelPos

/ Für zusätzliche Worte bzw. EinzelBits: ggfs wie oben, aber mit A2 statt A1, mit A3 statt A1, u.s.w. ...
*) Statt Worte zu vergleichen kann man alternativ auch Bytes mit Bytes oder DoppelWorte mit DoppelWorten vergleichen.
Die SammelBits beziehen sich dann dementsprechend auf die verglichenen Bytes oder DoppelWorte.

Das evtl. gewünschte weitere Zusammenfassen von oben genannten SammelMeldungen per OR wird hier nicht gezeigt und dürfte auf Anhieb gelingen. ;)

Alle festgestellten Flanken müssen noch im selben Zyklus ausgewertet werden, um nicht "verloren" zu gehen!
Das Abarbeiten in mehreren Zyklen würde zusätzlichen Aufwand (zusätzlichen statischen DatenSpeicher, zusätzlichen ProgrammSpeicher und zusätzliche BearbeitungsZeit) erfordern und sollte möglichst vermieden werden, da u.a. die Reihenfolge der Abarbeitungen durcheinander geraten könnte.
 
Zuletzt bearbeitet:
Zurück
Oben