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

Ergebnis 1 bis 4 von 4

Thema: SCL Struct in Struct

  1. #1
    Registriert seit
    16.02.2011
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich bin neu hier im Forum und vielleicht könnt ihr mir helfen. Ich mache eine Technikerarbeit und muß ein Lesegerät über eine Profibusschnittstelle mit der SPS verbinden. Es handelt sich hierbei um eine S7-317 PN.
    Das Programm muß ich in SCL programmieren.

    Meine Frage:

    Ich bekomme vom Lesegerät 16 Eingangsbytes. Dazu habe ich ein Struct angelegt, mit den Bezeichnungen der Bytes:

    IN_DATA_STRUCT AT IN_DATA : STRUCT
    Status :BYTE;
    Length :BYTE;
    Databyte_1 :BYTE;
    Databyte_2 :BYTE;
    Databyte_3 :BYTE;
    Databyte_4 :BYTE;
    Databyte_5 :BYTE;
    Databyte_6 :BYTE;
    Databyte_7 :BYTE;
    Databyte_8 :BYTE;
    Databyte_9 :BYTE;
    Databyte_10 :BYTE;
    Databyte_11 :BYTE;
    Databyte_12 :BYTE;
    Databyte_13 :BYTE;
    Databyte_14 :BYTE;
    END_STRUCT ;

    Das Problem:
    Ich möchte beim ersten Byte Status, die Bits auch noch mal bezeichnen, damit ich dann z.b. wie folgt zugreifen kann: IN_DATA_STRUCT.Status.Busy.

    Wie kann ich noch die Bits von den Bytes bezeichnen und diese in den Struct einbinden? Bin für jede Hilfe dankbar!!
    Zitieren Zitieren SCL Struct in Struct  

  2. #2
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Hallo Techniker,

    wenn du dir ein UDT anlegst und diesen in einem DB verwendest, dann kannst du als Eingangsparameter direkt diesen UDT als Datentyp verwenden. Dann sparst du dir auch diese AT-Sicht. Das wäre die einfachste Variante.

    Code:
    TYPE UDT_TECHNIKER
      STRUCT
        Status:
        STRUCT
          Busy       : BOOL;                 // 0.0
          Bit1       : BOOL;
          Bit2       : BOOL;
          Bit3       : BOOL;
          Bit4       : BOOL;
          Bit5       : BOOL;
          Bit6       : BOOL;
          Bit7       : BOOL;
        END_STRUCT;
        Length       :BYTE;                  // 2.0 !!!!!!!!!
        Databyte_1   :BYTE;
        Databyte_2   :BYTE;
        Databyte_3   :BYTE;
        Databyte_4   :BYTE;
        Databyte_5   :BYTE;
        Databyte_6   :BYTE;
        Databyte_7   :BYTE;
        Databyte_8   :BYTE;
        Databyte_9   :BYTE;
        Databyte_10  :BYTE;
        Databyte_11  :BYTE;
        Databyte_12  :BYTE;
        Databyte_13  :BYTE;
        Databyte_14  :BYTE;
      END_STRUCT
    END_TYPE
    Geändert von Onkel Dagobert (16.02.2011 um 19:51 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. #3
    Techniker_85 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.02.2011
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Antwort, aber ich möchte den UDT in ein Array von 16 Byte kopieren und das geht leider nicht.

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... dann mußt du wohl, wie von Onkel Dagobert schon angedeutet, eine AT-Sicht auf die Struktur machen, die das betreffende Byte (und dummerweise auch das folgende) dann binär darstellt.

    Also so :
    Code:
    var struct_TECHNIKER : STRUCT
        Status       : byte ;
        Length       :BYTE;                
        Databyte   : array[1..14] of BYTE;
      END_STRUCT
    
    var struct2_TECHNIKER at  struct_TECHNIKER : STRUCT
        Status:    STRUCT
          Busy       : BOOL;                
          Bit1       : BOOL;
          Bit2       : BOOL;
          Bit3       : BOOL;
          Bit4       : BOOL;
          Bit5       : BOOL;
          Bit6       : BOOL;
          Bit7       : BOOL;     // Achtung : die Length ist jetzt mit in der Struct drin
        END_STRUCT;
        Databyte   : array[1..14] of BYTE;
      END_STRUCT
    ... so in etwa ...

    Gruß
    Larry

Ähnliche Themen

  1. DB Struct
    Von redscorpion im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.04.2011, 23:44
  2. Antworten: 5
    Letzter Beitrag: 08.04.2011, 14:36
  3. Struct??
    Von broesel im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 20.12.2007, 09:41
  4. DB-Struct in DB-Struct transferieren
    Von Marvin II im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 20.11.2007, 08:29
  5. UDT- STRUCT Frage
    Von tomatensaft im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.02.2007, 14:24

Lesezeichen

Berechtigungen

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