Step 7 Bits auf Änderung abfragen

bastler

Level-2
Beiträge
263
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ich bräuchte mal einen Denkanstoß, wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht.
Ich habe 128 Alarmbits, für die in einem DB jeweils ein Bit gesetzt werden. Zusätzlich wird für jeden Alarm (Bit) ein Integerwert (Errorcode) erstelt. Wenn ein Alarmbit gesetzt wird, soll der Errorcode von einen OPC-Server ausgelesen werden.
Damit kein Alarm verloren geht, speicher ich die Alarme in einem FIFO-Buffer. Dazu benutze ich den FC84 und FC85 aus der Bibliothek. Bis hier ist alles schick.
Damit die Alarme über den FC84 in den DB geschrieben werden brauche ich einen Trigger. Jetzt wollte ich die 128 Bit auf Änderung vergleichen. Wird ein oder mehrere Bit's true, soll ein oder halt mehrere Schreibvorgänge ausgelöst werden. Kann mir bitte mal einer erklären, wie ich diese 128 Bit auf Änderung vergleichen kann? Werden mehrere Bits gleichzeitig true, muss der Schreibvorgang entsprechend der Anzahl "true-Bits" wiederholt werden. Es darf praktisch kein Alarm verloren gehen.

MfG
bastler
 
Zuviel Werbung?
-> Hier kostenlos registrieren
für jedes Byte :

a) aktuellesByte XOR altesBytes wenn ergebnis <> 0 dann gibt es dort kommende oder gehende Meldung(en).
b) dann im aktuellesByte AND xor_ergebnis sind nur die kommenden Bits enthalten
c) kommende in den Fifo eintragen, ggf. auch die gegangenen
d) aktuellesByte auf altesBytes schreiben

(das ginge natürlich auch wort, oder doppelwortweise,, das müsste für XOR und AND auch geben)
 
c) kommende in den Fifo eintragen, ggf. auch die gegangenen
c) ist eine Schleife. Es muß sequentiell für jedes gesetzte Bit ausgeführt werden. Die gesetzten Bits kann man ermitteln z.B. durch Schieben/Rotieren der Bits im Ergebnis oder durch ermitteln des niedrigsten oder höchsten gesetzten Bits und dann löschen des Bits. Zum Ermitteln des niedrigsten gesetzten Bits gibt es z.B. den FC96 ENCO.

Zählen der gesetzten Bits wird nicht gebraucht, lediglich ein Vergleich auf 0, ob überhaupt mindestens ein Bit gesetzt ist.

Harald
 
Vielen Dank erstmal für sie Antworten.
Klingt für mich ziemlich kompliziert. Ihr schreibt, dass die Bits die sich bei Vergleich geändert haben, in den FIFO geschrieben werden sollen. Aber in den FIFO sollen nicht die geänderten Bits, sondern der Errorcode, der den jeweiligen Bits zugeordnet ist. Die Anzahl der geänderten Bits sollen nur als Trigger für das Ausführen des FC84 sein. Zum Beispiel 5 geänderte Bits sollen 5 mal den FC84 ausführen lassen.
Oder hab ich euch falsch verstanden?

MfG
bastler
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ob Du nun in den FIFO die Nummer eines Bits oder einen Errorcode oder Klartext reinschreibst ist doch egal (über die Umsetzungstabelle Bitnummer-->Errorcode haben wir hier nichts geschrieben, das ist Deine Implementierung). Du mußt nur dafür sorgen das für jedes gekommene Bit ein eigener spezifischer FIFO-Eintrag erzeugt wird, auch wenn mehrere Bits im selben Programmzyklus gekommen sind - Dein FIFO-Baustein also entsprechend oft angetriggert wird. Du könntest jedes der 128 Bits einzeln abfragen (WENN Bit1_gekommen DANN erzeuge_FIFO_Eintrag(Code1)...), oder Du fasst die Erkennung des "gekommen" in Word- oder DWord-Operationen zusammen und fragst ggf. in einer Schleife welche(s) Bit(s) des Words/DWords das genau betrifft.

Harald
 
oder Du fasst die Erkennung des "gekommen" in Word- oder DWord-Operationen zusammen und fragst ggf. in einer Schleife welche(s) Bit(s) des Words/DWords das genau betrifft
und genau hier weiß ich absolut nicht, wie ich das machen soll
 
Zurück
Oben