Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Bit suchen

  1. #1
    Registriert seit
    10.06.2016
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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....
    Zitieren Zitieren Bit suchen  

  2. #2
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    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

  3. #3
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.341
    Danke
    449
    Erhielt 691 Danke für 516 Beiträge

    Standard

    Zitat Zitat von shrimps Beitrag anzeigen
    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.
    Geändert von RONIN (11.06.2016 um 09:45 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.182
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Mich würde ja wirklich mal interessieren, wofür diese Funktion in der Praxis so gebraucht wird. Die Frage taucht ja alle paar Wochen immer mal wieder auf.
    Ich meine, ich mache das mit dem SPS Krams ja auch schon über 10 Jahre, und ich habe so etwas wirklich noch NIE gebraucht.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  6. Folgende 5 Benutzer sagen Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Matze001 (11.06.2016),rostiger Nagel (10.06.2016),SPS-freak1 (11.06.2016),vollmi (12.06.2016),winnman (11.06.2016)

  7. #6
    ACDC3 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.06.2016
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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?

  8. #7
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.341
    Danke
    449
    Erhielt 691 Danke für 516 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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].
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

Ähnliche Themen

  1. TwinCAT 3 auf 64-Bit Rechner + Laufzeit auf 32-Bit Laptop
    Von RudolfAtITD im Forum CODESYS und IEC61131
    Antworten: 22
    Letzter Beitrag: 31.03.2015, 09:22
  2. 2 16 Bit INT nach REAL, aber in 2 16 Bit INT Register (Modbus)
    Von knuppel im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 27.02.2015, 08:50
  3. Step 7 PN Encoder 16 Bit ST und 12 Bit MT - Auswerten
    Von Pico1184 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 20.04.2013, 14:19
  4. 16-Bit Programm auf ein 64-Bit System
    Von visu90 im Forum PC- und Netzwerktechnik
    Antworten: 3
    Letzter Beitrag: 10.10.2012, 22:42
  5. Antworten: 3
    Letzter Beitrag: 21.09.2010, 11:54

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •