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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: einen von Zehn Merker auf 1 abfragen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Klassiker:
    http://www.sps-forum.de/showthread.p...197#post215197

    Das mit diesen 10 Bits abfragen scheint wohl öfters gebraucht zu werden...

  2. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Servernexus (21.11.2011)

  3. #12
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Klassiker:
    http://www.sps-forum.de/showthread.p...197#post215197

    Das mit diesen 10 Bits abfragen scheint wohl öfters gebraucht zu werden...
    Erklär mir bitte mal, wie Du diesen Thread gefunden hast.
    Ich hab' danach gesucht wie ein Blöder, weil mir diese Lösung auch gleich einfiel.
    Nur fündig geworden bin ich nicht.

  4. #13
    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 hucki Beitrag anzeigen
    Erklär mir bitte mal, wie Du diesen Thread gefunden hast.
    Ich hab' danach gesucht wie ein Blöder, weil mir diese Lösung auch gleich einfiel.
    Nur fündig geworden bin ich nicht.
    er hat den beitrag geschrieben ... an die meisten sinnvollen erinnert man sich
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #14
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Da weiß man natürlich nach welchem Namen man suchen muss. Aber das sind trotzdem über 1.600 Beiträge.
    Ich kann mich ja kaum an meine paar erinnern (und die waren sicher nicht alle unsinnig) und müßte vor allem stark überlegen, mit welchen Stichwörtern ich da wieder fündig werde, denn das war bei der obigen Suche sicher mein Hauptproblem.
    Also

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

    Standard

    Naja, wenn man die Suche nach Beiträgen von sich selbst einschränkt funktioniert das schon ganz gut. Musste aber auch mit dem Suchwort probieren.

    Nach dem Schema kann man übrigens auch nach gesetzten mehr als 2 Bits prüfen. Wobei dann schon fast die einfache Vorgehensweise mit Abfragen der gesetzten Bits in einer Schleife so wie es auch der BITSUM-Baustein macht schneller ist.
    Code:
          L     #wIN                        // zu prüfendes Wort
          ITD   
          DTR   
          T     #rIn
          UD    DW#16#7FFFFF                // 23 Bits Mantisse
          L     0
          <>D   
          =     #MehrAlsEin                 // Es ist mehr als 1 Bit gesetzt
    
          L     #rIn
          SRD   23                          // Exponent extrahieren
          L     127                         // Bias des Exponenten abziehen
          -D                                // Anzahl um die geshiftet wird
          L     1                           // Bitmuster das geshiftet wird
          SLD                               // Shift-Operation nach links entspricht Multiplikation mit 2
          DTR   
          T     #r_2hochExp                 // Ergibt 2^Exponent
    
          L     #rIn                        // Restwert bestimmen der über dem Ganzzahligen vielfachen
          L     #r_2hochExp                 // von 2^x liegt.
          -R                                // Mit diesem Wert nochmal das gleiche wie bei Schritt 1
          UD    DW#16#7FFFFF
          L     0
          <>D   
          =     #MehrAlsZwei                // Es sind mehr als 2 Bits gesetzt

  7. #16
    Avatar von Servernexus
    Servernexus ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.08.2008
    Ort
    im gelobten Land Bayern
    Beiträge
    213
    Danke
    35
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Approx Beitrag anzeigen
    Traut sich eigentlich niemand folgenden Vorschlag zu posten?
    "Nimm ein ODER-Glied mit 10 Beinchen und beschalte die 10 Beinchen mit deinen Merkern..."

    Gruß Approx

    edit: was den nun eigentlich? 1 von 10 oder >=2 von 10 ...?
    Wenn mehr als 1 Merker 1 Signal dann Störung
    Das größte Problem eines PC ist der, der davor sitzt!

  8. #17
    Avatar von Servernexus
    Servernexus ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.08.2008
    Ort
    im gelobten Land Bayern
    Beiträge
    213
    Danke
    35
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Der Vorschlag von Thomas aus dem Schowtreat funktioniert einwand frei. Nur wie sieht das ganze aus wenn ich 30 Bits habe? Wenn ich also mit einem Doppelwort arbeiten muss.
    Geändert von Servernexus (21.11.2011 um 09:59 Uhr)
    Das größte Problem eines PC ist der, der davor sitzt!

  9. #18
    Registriert seit
    15.04.2011
    Beiträge
    1.122
    Danke
    229
    Erhielt 208 Danke für 176 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Hier mal eine Variante ohne Umweg über Gleitpunktzahl:
    Code:
          L     #IN_WORD
          PUSH
          +     -1
          UW
          U     <>0
          =     #Fehler   //true wenn mehr als 1 Bit gesetzt ist
    ... die auch für 32 Bit DWORD funktioniert:
    Code:
          L     #IN_DWORD
          PUSH
          +     L#-1
          UD
          U     <>0
          =     #Fehler   //true wenn mehr als 1 Bit gesetzt ist
    ... und wenn man auf "genau 1 Bit gesetzt" abfragen will:
    Code:
          L     #IN_DWORD
          PUSH
          UD
          U     ==0
          SPB   MNOT
          +     L#-1
          UD
          U     <>0
    MNOT: NOT
          =     #Genau1   //true wenn genau 1 Bit gesetzt ist
    Die Varianten beruhen zugegebenerweise auf einem schönen uralten Algorithmus, den nicht ich erfunden habe.

    Harald
    Das stammt aus dem Thread http://www.sps-forum.de/showthread.p...-Eingabe/page2 Beitrag 13 und im Beitrag #14 eine kürzere Variante.

    Diese Beiträge hast wirst Du heute morgen wohl gelesen haben, denn im Beitrag #20 hast Dich bedankt.

    Deswegen verstehe ich Deine Frage nicht mehr.
    Gruß
    190B

  10. #19
    Registriert seit
    15.04.2011
    Beiträge
    1.122
    Danke
    229
    Erhielt 208 Danke für 176 Beiträge

    Standard

    Ich habe mir mal vor Jahren eine FC dazu geschrieben, vielleicht hlift sie Dir.

    Code:
    FUNCTION FC 2 : VOID
    TITLE =Zählung der gesetzten Bit's innerhalb eines Doppelworts (32 Bit)
    //Der Baustein zählt die 1-Signal führenden Bits innerhalb eines Doppelworts. 
    //Sollen die 1-Signal führenden Bits innerhalb eines Worts (16 Bit) gezählt 
    //werden,sind folgende Änderungen vor zu nehmen:
    //1.) In den Deklarationszeilen sind ZAEHLWORT und ZW_Speicher als WORD zu dela-
    //    rieren.
    //2.) Der Schleifenzähler ist statt 32 mit 16 vor zu besetzen.
    AUTHOR : 190B
    FAMILY : 
    NAME : BIT_Z_32
    VERSION : 0.1
    
    VAR_INPUT
      ZAEHLWORT : DWORD ; //Doppelwort, dessen gesetzte Bits gezählt werden sollen.
    END_VAR
    VAR_OUTPUT
      ANZAHL : INT ; //Anzahl der gezählten, 1-Signal führenden Bit's.
    END_VAR
    VAR_TEMP
      Zaehler : INT ; //Schleifenzähler
      ZW_Speicher : DWORD ; //Zwischenspeicher
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          L     #ZAEHLWORT; // Zählwort an
          T     #ZW_Speicher; // Zwischenspeicher übergeben.
          L     0; // Anzahl mit dem Wert 0
          T     #ANZAHL; // vorbesetzen.
          LAR1  P##ZW_Speicher; // Adressregister vorbelegen.
    //;
          L     32; // Schleifenzähler mit 32
    Next: T     #Zaehler; // vorbesetzen.
          UN    L [AR1,P#0.0]; // Bit n auf 0-Signal abfragen.
          SPB   M001; // Wenn 0-Signal, dann springen.
          L     #ANZAHL; // Anzahl laden,
          INC   1; // 1 hinzu addieren
          T     #ANZAHL; // und neuen Wert wegspeichern.
    M001: +AR1  P#0.1; // Adressregister auf nächstes Bit setzen.
          L     #Zaehler; // Wert des Schleifenzählers laden und bei
          LOOP  Next; // NICHT NULL an den Schleifenanfang springen.
    END_FUNCTION
    Gruß
    190B

  11. #20
    Avatar von Servernexus
    Servernexus ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.08.2008
    Ort
    im gelobten Land Bayern
    Beiträge
    213
    Danke
    35
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hat sich erledigt, klappt
    Das größte Problem eines PC ist der, der davor sitzt!

Ähnliche Themen

  1. Mittelwert von zehn Temperaturen bilden
    Von husox81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.11.2010, 15:03
  2. Antworten: 71
    Letzter Beitrag: 06.04.2008, 16:18
  3. Antworten: 5
    Letzter Beitrag: 21.06.2007, 17:04
  4. Antworten: 1
    Letzter Beitrag: 03.01.2007, 08:43
  5. Antworten: 8
    Letzter Beitrag: 07.07.2006, 09:09

Lesezeichen

Berechtigungen

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