Step 7 AT Sicht auf ein Element eines UDT für S7-300 unter Classic

ducati

Level-3
Beiträge
9.713
Reaktionspunkte
2.788
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

steh grad auf dem Schlauch, kann ich eine AT Sicht auch auf ein Element eines UDTs in SCL realisieren?

Code:
VAR_IN_OUT
    test      : UDT123;            // IN_OUT Variable
    test_ar AT test.var123.Signal_by : ARRAY[0..7] OF BOOL;
END_VAR

funktioniert so nicht: "Ein Komma oder ein Doppelpunkt fehlt"
Signal_by ist ein Byte.
Das ganze ins so in nem FC in SCL deklariert unter Step7 Classic.

Danke.
 
Hi!

Ein UDT ist ein zusammengesetzter Datentyp.
In einem FC oder FB ist eine Sicht auf einen zusammengesetzten Datentyp nur möglich, wenn der Datentyp der Sicht dem Datentyp der Variablen entspricht.
https://support.industry.siemens.co...-oder-dword-zugegriffen-werden?dti=0&lc=de-WW
(Tabelle 01)

Du musst also die Variable "test_ar" auch in der Struktur des UDT deklarieren.
Leider geht meine VM-Ware derzeit nicht, weshalb ich es nicht selbst testen kann.

Viel Erfolg,

Gruß,

Ottmar
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die AT muß sich meines Wissens auf den Anfang der Variable/des STRUCT/UDT beziehen. Beginn bei einem Unter-Element ist nicht möglich. (Die SCL-Hilfe ist da allerdings nicht eindeutig.)

Es ist aber möglich, die ersten Delarationen der STRUCT/UDT zu wiederholen bis zu dem gewünschten zu überlagernden Element oder ein Dummy-Array zur Offset-Steuerung einzufügen:
Code:
VAR_IN_OUT
  test   : STRUCT
    m1 : WORD;
    m2 : BYTE;
    m3 : BYTE;
  END_STRUCT;

  test_ar1 AT test : STRUCT
    m1 : WORD; //Wiederholung, Dummy-Element
    m2 : BYTE; //Wiederholung, Dummy-Element
    ar : ARRAY[0..7] OF BOOL; //sollte auf test.m3 liegen
  END_STRUCT;

  test_ar2 AT test : STRUCT
    dummy : ARRAY[0..1] OF BYTE; //Dummy-Array nur für Offset-Verschiebung
    ar : ARRAY[0..7] OF BOOL; //liegt vermutlich auf test.m2
  END_STRUCT;
END_VAR
Ich habe jetzt nicht geprüft, wo das BOOL-Array tatsächlich anfängt

Harald
 
(Die SCL-Hilfe ist da allerdings nicht eindeutig.)

Jo, deshalb hab ich hier gefragt, die Tabelle in der SCL Hilfe ist leider nicht selbsterklärend...

@ Ottmar, das UDT kann ich nicht ändern, da es fest vordefiniert ist (Firmenstandard)

@ Harald, zur Zeit kopiere ich das UDT-Element in ne Temp-Variable und mach dann ne AT Sicht drauf. Das wollte ich mir eigentlich ersparen. Aber das komplette UDT in die AT Sicht zu legen machts jetzt auch nicht übersichtlicher.

Gruß.
 
Die AT muß sich meines Wissens auf den Anfang der Variable/des STRUCT/UDT beziehen. Beginn bei einem Unter-Element ist nicht möglich. (Die SCL-Hilfe ist da allerdings nicht eindeutig.)

Es ist aber möglich, die ersten Delarationen der STRUCT/UDT zu wiederholen bis zu dem gewünschten zu überlagernden Element oder ein Dummy-Array zur Offset-Steuerung einzufügen:
Code:
VAR_IN_OUT
  test   : STRUCT
    m1 : WORD;
    m2 : BYTE;
    m3 : BYTE;
  END_STRUCT;

  test_ar1 AT test : STRUCT
    m1 : WORD; //Wiederholung, Dummy-Element
    m2 : BYTE; //Wiederholung, Dummy-Element
    ar : ARRAY[0..7] OF BOOL; //sollte auf test.m3 liegen
  END_STRUCT;

  test_ar2 AT test : STRUCT
    dummy : ARRAY[0..1] OF BYTE; //Dummy-Array nur für Offset-Verschiebung
    ar : ARRAY[0..7] OF BOOL; //liegt vermutlich auf test.m2
  END_STRUCT;
END_VAR
Ich habe jetzt nicht geprüft, wo das BOOL-Array tatsächlich anfängt

Harald

Auch diese Variante funktioniert bei mir mit nem UDT leider nicht...

Noch jemand ne Idee

PS: funktioniert doch, hatte noch nen Schreibfehler drin... Aber trotzdem nicht das, was ich eigentlich suche...

schön wäre ne AT Sicht auf ein einzelnen Element (Array[0..7] of BOOL Sicht auf ein Byte)
 
Zuletzt bearbeitet:
Zurück
Oben