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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: AT-Sichten

  1. #1
    Registriert seit
    14.02.2008
    Beiträge
    24
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe folgendes Problem.
    Ich habe in SCL ein PEB Namens Statusbyte welches ich gerne zur Auswertung in einzelne Bits zerlegen möchte.
    Ungefähr so:
    Code:
    
    FUNCTION_BLOCK FB852
    
    
    VAR_INPUT
        Adresse:INT;
    END_VAR
    VAR
        StatusByte:BYTE;
        StatusBit AT StatusByte : STRUCT
                                    TA:BOOL;
                                    RR:BOOL;
                                    IA:BOOL;
                                    BUF_F:BOOL;
                                    IL0:BOOL;
                                    IL1:BOOL;
                                    IL2:BOOL;
                                    REG:BOOL;
                                END_STRUCT;
    
    
    
    
    
    
    END_VAR
    
    
        // Anweisungsteil
        ;
    END_FUNCTION_BLOCK
    Kann es sein, dass das mit dem Byte gar nicht geht? Da der selbe Code auf WORD umgeschrieben
    keinen Fehler wirft.
    Zitieren Zitieren AT-Sichten  

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

    Standard

    Der Speicher der von der AT-Sicht benötigt wird, muss kleiner oder gleich der überlagerten Variable sein.
    Wenn du deine At-Sicht auf ein Word anstelle eines Bytes legst, kannst du nur nicht auf alle Bits zugreifen, es kann aber nichts schiefgehen.

    Andersherum, also wenn man z.B. ein 16 Bit Struct (was zwei Bytes benötigt) auf ein Byte legt, könntest du auf ganz andere Variablen / Speicherbereiche als angegeben schreiben. Darum wird das mit einem Fehler abgewiesen.

  3. #3
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.476
    Danke
    1.140
    Erhielt 1.238 Danke für 971 Beiträge

    Standard

    Leg mal dein Statusbyte ebenfalls in eine Struct.
    Wenn ich's recht im Kopf hab, belegt eine Struct mind. 16Bit.
    Deshalb geht es auch mit dem Word.

    Gruß
    Dieter

  4. #4
    siemek ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.02.2008
    Beiträge
    24
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ok also einfach ein struct mit 16bit anlegen und dann 8bit einfach als reserve nehmen?

  5. #5
    Registriert seit
    20.11.2006
    Ort
    Hamburg
    Beiträge
    225
    Danke
    35
    Erhielt 35 Danke für 32 Beiträge

    Standard

    Die AT-Sicht darf nie größer sein als das Quell-Objekt.
    Du solltest dein Byte in einem Temp-Word abspeichern und auf dieses die AT-Sicht anwenden.

    Gruß

    Dotzi

  6. #6
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.476
    Danke
    1.140
    Erhielt 1.238 Danke für 971 Beiträge

    Standard

    Zitat Zitat von siemek Beitrag anzeigen
    ok also einfach ein struct mit 16bit anlegen und dann 8bit einfach als reserve nehmen?
    Nein, eine Struct mit deinem Statusbyte und einem Dummybyte.


    Gruß

    Dieter

  7. #7
    siemek ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.02.2008
    Beiträge
    24
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Nein, eine Struct mit deinem Statusbyte und einem Dummybyte.


    Gruß

    Dieter
    ja genau so meine ich das ^^ ja habe es jetzt ein wenig mehr verwirrend angelegt ^^
    aber mit den richtigen Kommentaren sollte es eigentlich klappen ^^

    Code:
        StatusByte:WORD;
        StatusBit AT StatusByte : STRUCT
                                    TA:BOOL;
                                    RR:BOOL;
                                    IA:BOOL;
                                    BUF_F:BOOL;
                                    IL0:BOOL;
                                    IL1:BOOL;
                                    IL2:BOOL;
                                    REG:BOOL;
                                    Platzhalter10:BOOL;
                                    Platzhalter11:BOOL;
                                    Platzhalter12:BOOL;
                                    Platzhalter13:BOOL;
                                    Platzhalter14:BOOL;
                                    Platzhalter15:BOOL;
                                    Platzhalter16:BOOL;
                                    Platzhalter17:BOOL;
                                END_STRUCT;

  8. #8
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.616
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Ich bin ziemlich überzeugt das man die Bytes tauschen muss, wegen "Big Endian":


    Code:
        StatusByte:WORD;
        StatusBit AT StatusByte : STRUCT
                                    Platzhalter10:BOOL;
                                    Platzhalter11:BOOL;
                                    Platzhalter12:BOOL;
                                    Platzhalter13:BOOL;
                                    Platzhalter14:BOOL;
                                    Platzhalter15:BOOL;
                                    Platzhalter16:BOOL;
                                    Platzhalter17:BOOL;
                                    TA:BOOL;
                                    RR:BOOL;
                                    IA:BOOL;
                                    BUF_F:BOOL;
                                    IL0:BOOL;
                                    IL1:BOOL;
                                    IL2:BOOL;
                                    REG:BOOL;
                                END_STRUCT;
    Jesper M. Pedersen

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.709
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Ich bin ziemlich überzeugt das man die Bytes tauschen muss, wegen "Big Endian"
    sehe ich auch so ...

  10. #10
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.476
    Danke
    1.140
    Erhielt 1.238 Danke für 971 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Blockmove Beitrag anzeigen
    Nein, eine Struct mit deinem Statusbyte und einem Dummybyte.
    Ich meinte eigentlich, dass du dein Statusbyte selbst in eine Struct legen sollst ...
    Code:
        stStatus : STRUCT
            byDaten : BYTE;
            byDummy : BYTE;
            END_STRUCT;
    Gruß
    Dieter

Ähnliche Themen

  1. SCL, Any und Sichten
    Von Ralle im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 09.01.2008, 12:48
  2. Antworten: 0
    Letzter Beitrag: 01.06.2006, 15:04
  3. WinCC User-Archive -> Sichten
    Von vido im Forum HMI
    Antworten: 1
    Letzter Beitrag: 14.01.2006, 18:16

Lesezeichen

Berechtigungen

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