SCL Struct in Struct

Techniker_85

Level-1
Beiträge
2
Reaktionspunkte
0
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!!
 
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
 
Zuletzt bearbeitet:
... 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
 
Zurück
Oben