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

Ergebnis 1 bis 8 von 8

Thema: BIT nach BYTE in SCL

  1. #1
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe folgende Aufgabenstellung:

    Zu jedem Palettenplatz (100 Plätze) gibt es mehrere Binärinformationen. Z.B. die Belegung.
    Für die VISU (macht jemand anderes) muss ich die Binärinformationen in ein Byte eintragen.
    Byteaufbau: Bit0 = Belegung, Bit1 = Fehler, ...
    Ich möchte das in SCL lösen, indem ich in einer Schleife die Binärinformationen abfrage und auf das Byte übertrage.
    Folgender Code funktioniert, sieht aber nicht so elegant aus.
    Gibt es da einen schöneren Weg?

    Code:
    FOR ii := 1 TO 100 DO
        "VISU".Info[ii] := B#16#00; // Infobyte initialisieren
    
    // Belegungsbit abfragen
        IF "Platzdaten".NR[ii].Belegung THEN
            tmp := B#16#01;
        ELSE
            tmp := B#16#00;
        END_IF;
        "VISU".Info[ii] := "VISU".Info[ii] OR tmp;
    
    // Fehlerbit abfragen
        IF "Platzdaten".NR[ii].Fehler THEN
            tmp := B#16#02;
        ELSE
            tmp := B#16#00;
        END_IF;
        "VISU".Info[ii] := "VISU".Info[ii] OR tmp;
    END_FOR;
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.
    Zitieren Zitieren BIT nach BYTE in SCL  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    ja ... du könntest eine AT-Sicht erstellen, die das Array_of_Bool als Array_of_struct mit gleichem Aufbau darstellt.
    Nun könntest du dann mit den Elementen der AT-Sicht arbeiten.

    Weißt du, was ich meine ?

    Gruß
    Larry

  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:
    *
        FOR ii := 1 TO 100 DO
            "VISU".Info[ii] := B#16#00; // Infobyte initialisieren
        
        // Belegungsbit abfragen
            IF "Platzdaten".NR[ii].Belegung THEN
                "VISU".Info[ii] := INT_TO_BYTE(BYTE_TO_INT("VISU".Info[ii]) + 1);
            END_IF;
            
        // Fehlerbit abfragen
            IF "Platzdaten".NR[ii].Fehler THEN
                "VISU".Info[ii] := INT_TO_BYTE(BYTE_TO_INT("VISU".Info[ii]) + 2);
            END_IF;
            
        // Anderesbit abfragen
            IF "Platzdaten".NR[ii].AnderesBit THEN
                "VISU".Info[ii] := INT_TO_BYTE(BYTE_TO_INT("VISU".Info[ii]) + 4);
            END_IF;
        
        END_FOR;
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    Tigerente1974 (28.03.2012)

  5. #4
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Ich fürchte nicht...

    Die AT-Sicht wollte ich zuerst auch nehmen, aber irgendwie fehlte mir dann die Idee wie ich das bewerkstelligen kann. Außerdem habe ich damit noch nicht gearbeitet.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  6. #5
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Hallo 4L.

    Deine Lösung gefällt mir auf jeden Fall schon besser als meine
    Hätte man ja selbst drauf kommen können...

    Trotzdem würde ich auch gerne mal die Lösung mit der AT-Sicht probieren. Für weitere Tips dazu bin ich dankbar.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Das geht in etwa so :
    Code:
    myArray : Array [1..100] of Byte ;
    atArray AT myArray : Array [1..100] of struct
       Belegung : bool ;
       Fehler : bool ;
       anderes_Bit : bool ;
    end_struct ;
    Nun kannst du die Elemente mit z.B. "atArray[ii].Belegung := true" ansprechen ...

    Gruß
    Larry

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Tigerente1974 (28.03.2012)

  9. #7
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Das wäre aber doch der Weg andersherum, oder nicht?

    Es wird eine AT-Sicht auf das BYTE gelegt um die Bits auszulesen. Ich möchte ja die Bits auf das BYTE schreiben. Ich nehme diesen Ansatz aber trotzdem auf und versuche das mal so zuschreiben, wie ich es brauche.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  10. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die AT-Sicht ist keine Einbahnstrasse - sie ist einfach eine andere Sicht- und/oder Darstellungsweise einer Variablen oder einer Variablen-Struktur - das heißt die Aktuialisierung geht in beide Richtungen, da ich ja immer noch die gleich Variable anfasse.
    Sieh es vielleicht einfach wie bei den Merkern. Der M1.0 gehört ins MB1 und in das MW0 und in das MW1 usw. Änderst du seinen Zustand so ist er in den zusammenfassenden Bytes,Word,DWords auch gleich mitgeändert.
    Oder Vielleicht eine Temp-Variable deines FC's. Die kannst du auch mit L #myVar oder genauso mit L LB0 oder L LD0 oder oder ansprechen - gleiches gilt auch für den Transfer ...

    Aber die AT-Sicht ist eine interessante Sache - damit kann man in der SCL-Welt nützliche und aber auch böse Dinge anstellen.

    Gruß
    Larry

Ähnliche Themen

  1. Byte in 8 bit teilen
    Von d3nnis.c im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 19.01.2010, 01:30
  2. Umwandeln von INT nach Byte u Byte + n
    Von Gerold im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.04.2009, 10:07
  3. bit and byte
    Von PG710 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 30.12.2008, 21:57
  4. Bit/Byte toggle
    Von Farinin im Forum HMI
    Antworten: 13
    Letzter Beitrag: 19.09.2008, 08:55
  5. Antworten: 5
    Letzter Beitrag: 15.07.2008, 16:38

Lesezeichen

Berechtigungen

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