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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: SCL Parität ermitteln

  1. #1
    Registriert seit
    11.12.2009
    Beiträge
    2.113
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum,

    mal wieder ein kleines "Problem", welches ich gern geschickt lösen möchte, aber noch nicht so recht weiß wie.

    Es ist folgendes: Ich habe ein Byte mit einer Nummer (0-254), und würde gern die Bitparität daraus ermitteln.

    Also: Wenn die Anzahl der Bits gerade ist: Parität = 0, wenn die Anzahl der Bits ungerade ist: Parität = 1

    Das ganze würde ich gern in SCL lösen.

    Mein erster Gedanke war es zu berechnen, aber irgendwie fehlt mir eine Formel, um die Zahlen zu erreichen die eine Parität bilden.
    Der zweite war alle Zahlenwerte die die Parität ergeben mit einem Vergleicher auszuwerten, sieht sehr beschissen aus,
    und ist auch irgendwie nicht toll.

    Sollte ich vielleicht die AT-Deklaration benutzen, und ein Array of Bool aus dem Byte machen, und dies in einer Schleife vergleichen?
    Oder gibt es elegantere Lösungen?

    Grüße

    Marcel
    Zitieren Zitieren SCL Parität ermitteln  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Könnte Dir ne Schleife über die Bits und ein XOR darüber helfen?
    Zitat Zitat von Manfred Stangl Beitrag anzeigen
    Die Aussage dieses XOR-Beispiels ist:
    Wenn genau EIN Eingang HI ist, ist auch der Ausgang HI.
    Ein Kollege hier hat mal gefragt, ab man XOR kaskadieren kann.
    Ja man kann. So kommt man zur Erkenntnis, dass der Ausgang immer dann HI ist, wenn eine ungerade Anzahl der Eingänge HI ist.

  3. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    Matze001 (19.03.2012)

  4. #3
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.569
    Danke
    63
    Erhielt 258 Danke für 218 Beiträge

    Standard

    War zu schnell...
    Geändert von Tigerente1974 (19.03.2012 um 14:17 Uhr) Grund: falsch gelesen...
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  5. Folgender Benutzer sagt Danke zu Tigerente1974 für den nützlichen Beitrag:

    Matze001 (19.03.2012)

  6. #4
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Auf die Schnelle:
    Code:
    FUNCTION CheckPari : BOOL
    VAR_INPUT
        InByte : BYTE;
    END_VAR
    
    
    VAR_TEMP
        TmpByte : BYTE;
        TmpArray AT TmpByte : ARRAY[0..7] OF BOOL ;
        i : INT;
        count : INT;
    END_VAR
       
        TmpByte := InByte;
        count := 0;
        FOR i := 0 TO 7 DO
            IF TmpArray[i] = True THEN 
                count := count + 1;
            END_IF;
        END_FOR;
        
                
        CheckPari := (count MOD 2) = 0;
    END_FUNCTION
    If you open your Mind too much, your Brain will fall out.

  7. Folgender Benutzer sagt Danke zu zotos für den nützlichen Beitrag:

    Matze001 (19.03.2012)

  8. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    @Zotos,
    ich vermute, daß es von der Syntax nicht richtig ist - aber für mich zum Üben - würde die Logik funktionieren?
    Code:
    FUNCTION CheckPari : BOOL
    
    VAR_INPUT
        InByte : BYTE;
    END_VAR
    
    VAR_TEMP
        TmpByte : BYTE;
        TmpArray AT TmpByte : ARRAY[0..7] OF BOOL ;
        i : INT;
    END_VAR
    
        TmpByte := InByte;
        CheckPari := NOT TmpArray[0];
        FOR i := 1 TO 7 DO
            CheckPari := CheckPari XOR TmpArray[i];
        END_FOR;
    
    END_FUNCTION

  9. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    Matze001 (19.03.2012)

  10. #6
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    @hucki: Dein Code funktionierte auf Anhieb und lieferte das gleiche Ergebnis.
    If you open your Mind too much, your Brain will fall out.

  11. Folgende 2 Benutzer sagen Danke zu zotos für den nützlichen Beitrag:

    hucki (19.03.2012),Matze001 (19.03.2012)

  12. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Könnte man bei der Variablen-Deklaration das tmpByte weglassen und das ARRAY gleich aus dem InByte bilden und sich dadurch auch noch die erste Programmzeile sparen?

  13. #8
    Matze001 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.12.2009
    Beiträge
    2.113
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Danke für die Antworten!

    Ich werde es einmal testen, es sieht aber sehr vielversprechend aus!

    Grüße

    Marcel

  14. #9
    Registriert seit
    17.03.2011
    Ort
    im Wald
    Beiträge
    284
    Danke
    11
    Erhielt 36 Danke für 35 Beiträge

    Standard

    Hallo,

    reicht es nicht das Bit xxx.0 abzufragen, ist es nicht gesetzt ist der Zahlenwert gerade.

    Gruß, Voxe

  15. #10
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Voxe Beitrag anzeigen
    ...
    reicht es nicht das Bit xxx.0 abzufragen, ist es nicht gesetzt ist der Zahlenwert gerade.
    ...
    Nein, denn er wollte nicht wissen, ob der Bytewert gerade ist, sondern ob die Anzahl der gesetzten Bits ungerade ist.
    Zitat Zitat von Matze001 Beitrag anzeigen
    ...
    Es ist folgendes: Ich habe ein Byte mit einer Nummer (0-254), und würde gern die Bitparität daraus ermitteln.

    Also: Wenn die Anzahl der Bits gerade ist: Parität = 0, wenn die Anzahl der Bits ungerade ist: Parität = 1
    ...
    Beispiele:
    10101010 = FALSE
    11100000 = TRUE

  16. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    Matze001 (19.03.2012)

Ähnliche Themen

  1. CFC / SCL - Nummer des Instanz-DB ermitteln?
    Von TVG206 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.12.2015, 13:19
  2. in SCL Adresse von String im IDB ermitteln
    Von Ralle im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 03.03.2011, 09:39
  3. Array länge mit SCL ermitteln
    Von Linowitch im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 08.07.2010, 12:12
  4. SCL DB Länge ermitteln
    Von Dotzi im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.07.2010, 20:01
  5. Parität aus einem DW ermitteln
    Von spunky im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 07.06.2005, 09:37

Lesezeichen

Berechtigungen

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