Step 7 Bit suchen

ACDC3

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

möchte von einer Anzahl Merkerwörtnern herausfinden welches der Bits gesetzt ist. Habe in einem Fb schon ein Array von 1-16 erstellt. wenn ich einen merker auf 1 setze bekomm ich mit vergleichern heraus,aus welchem Wort der Merker ist. Nun weiß ich aber nicht was ich weiteres machen soll, da man bits ja nicht vergleichen kann.

Schonmals vielen Dank für Hilfe....
 
Hi,
ggf. habe ich dich nicht exakt verstanden aber wenn du nur nach bestimmten, gesetzten BITS in einem Byte/WORD suchst, so geht das doch recht einfach mit
etwas Mathematik:
Du läufst in einer Schleife von 0-7 oder 0-16 und maskierst dein Suchwert mit 2hoch[Index] und wenn es 1 ist hast du nen Treffer...

So ähnlich müsste es eigentlich funktionieren...

Viel Spaß
Shrimps
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
Du läufst in einer Schleife von 0-7 oder 0-16 und maskierst dein Suchwert mit 2hoch[Index] und wenn es 1 ist hast du nen Treffer...
Damit nutzt du Gleitkommaoperationen und Exponentialfunktionen. Aufwändiger geht's kaum.
Wenn, dann per SHL einen Einser mit N=Schleifenzähler verschieben.
Code:
FOR #j := 0 TO 15 DO

     IF #IN_WORD & SHL(IN:=1, N:=#j) THEN
        //Do Something
    END_IF;

END_FOR;
Sonst kann man auch per AT-Sicht auf ein Array_of_Bool umlegen und dann die Bits einzeln prüfen.
 
Zuletzt bearbeitet:
Zum Maskieren in einer Schleife kann man das Maskierbit links schieben oder das Testword rechts schieben.
Es gibt auch einen fertigen Baustein, der von einem DWORD die Nummer des niedrigsten gesetzten Bits zurückgibt: FC96 ENCO

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die ganzen Antworten. Ich verwende Step 7 mit WinSPS. Habe bisher noch nicht mit Schleifen zutun gehabt, falls das überhaupt geht. Gibt es denn noch andere Möglichkeiten mein "Problem" zu lösen?
 
Nun, dein Problem ist noch ganz klar da noch nicht viel dazu beschreiben.

Die zweite (bessere) Lösung die oben angesprochen wurde. AT-Sicht (Überlagerung).
Code:
VAR
    SomeDWORD: DWORD;
    SomeBitArray AT SomeDWORD : ARRAY[0..31] OF BOOL;
END_VAR
Zugriff dann via SomeBitArray[13].
 
Zurück
Oben