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

Ergebnis 1 bis 7 von 7

Thema: Im DB Bit bestimmen

  1. #1
    Registriert seit
    30.01.2009
    Beiträge
    442
    Danke
    25
    Erhielt 48 Danke für 44 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    eine Frage, gibt es einen Baustein, der mir sagen kann welches Bit innerhalb eines Array gesetzt ist.
    Beispiel: DB20.DBX0.0 WORD 4, also DBW0, DBW2, DBW4
    Wenn jetzt hier ein Bit gesetzt wird müsste ich wissen es ist z.b das 20igste Bit (zählweise müsste man dann noch klären).

    Gruß
    Move
    Zitieren Zitieren Im DB Bit bestimmen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    Sollte schon gehen.

    Variante 1:

    Du legst das AR1 auf das erste Word und incrementierst in einer Schleife das AR1 um jeweils P#0.1. Zusätzlich zählst du die Schleifendurchläufe.

    Variante 2:

    Du legst das AR1 auf das erste Word incrementierst in einer Schleife das AR1 um jeweils P#0.1. Wenn dann das indirekt adressierte Bit 1 ist, errechnest du aus dem Pointer das Word und das Bit. Die Bitadresse ergibt sich aus Bit 0+1+2 des Pointers, die Wordadresse hast du, nachdem du den Pointer um 3 nach rechts geschoben hast. (SRD 3)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Code:
    *
          AUF   DB    20                    //Quell-DB
          AUF   DI    30                    //Ablage DB für Nummern gesetzter Bits
    
          L     0                           //Adressregister
          LAR1                              // 
          LAR2                              //vorbereiten
    
          L     64                          //Anzahl der zu Überprüfenden Bits
    next: T     MW    10                    //in Schleifenzähler
          U     DBX [AR1,P#0.0]                //ist Bit true
          SPBN  not
          L     MW    10                    //dann die Stelle des Bits
          L     -1
          *I    
          L     64
          +I    
          T     DIW [AR2,P#0.0]             //in Ablage-DB schreiben
          +AR2  P#2.0                       //für nächstes Ablagefach vorbereiten
    not:  +AR1  P#0.1                       //nächstes Bit vorbereiten
          L     MW    10
          LOOP  next                        //und LOOOOOOOOOP
    Geändert von vierlagig (17.03.2010 um 16:45 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Move ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.01.2009
    Beiträge
    442
    Danke
    25
    Erhielt 48 Danke für 44 Beiträge

    Standard

    Hi,

    also mit Thematik tue ich mich immer schwer.
    Was muss ich jetzt machen?
    Habe deine AWL so übernommen
    Habe einen DB20 angelegt und einen DB30
    Setzte im DB20 DW0 ein Bit und dann....?
    Da tut sich erstmal nix

    Gruß
    Move

  5. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Move Beitrag anzeigen
    Hi,

    also mit Thematik tue ich mich immer schwer.
    Was muss ich jetzt machen?
    Habe deine AWL so übernommen
    Habe einen DB20 angelegt und einen DB30
    Setzte im DB20 DW0 ein Bit und dann....?
    Da tut sich erstmal nix

    Gruß
    Move
    ein kleiner fehler hat sich eingeschlichen ... es muß natürlich DBX heißen... hab ich oben geändert...

    der DB30 enthält ein ARRAY[0..63] of INT, darin werden die einzelnen bit nummern gespeichert ... siehe anhang...
    Angehängte Grafiken Angehängte Grafiken
    Geändert von vierlagig (17.03.2010 um 16:45 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Move (18.03.2010)

  7. #6
    Move ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.01.2009
    Beiträge
    442
    Danke
    25
    Erhielt 48 Danke für 44 Beiträge

    Standard

    Hi,

    jo jetzt funzt es, ist genau das was ich gesucht habe.
    Danke.

  8. #7
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Move Beitrag anzeigen
    Hi,

    jo jetzt funzt es, ist genau das was ich gesucht habe.
    Danke.
    mußt halt für eine neue zählung den DB30 inhalt wieder nullen ... ich würd ja -1 vorschlagen...

    in einer welt, die mit 1 beginnt will ich nicht existieren!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Gradient in PCS7 bestimmen
    Von RaffniX im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 23.08.2011, 15:39
  2. Motorauslastung bestimmen an FU 8200vector
    Von MatthiasP im Forum Antriebstechnik
    Antworten: 1
    Letzter Beitrag: 18.08.2011, 16:38
  3. Größe der MMC bestimmen
    Von MeisterLampe81 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.01.2010, 15:14
  4. Hauptschalter bestimmen
    Von Fabian im Forum Schaltschrankbau
    Antworten: 9
    Letzter Beitrag: 06.10.2008, 21:16
  5. Weckalarm von FB bestimmen [SCL]
    Von dewenni im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.08.2007, 11:49

Lesezeichen

Berechtigungen

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