×
Siemens Industry Online Support
Siemens AG
Beitragstyp: FAQ Beitrags-ID: 21946854, Beitragsdatum: 29.03.2011
(9)
Bewerten

Wie kann in S7-SCL mit Hilfe der AT-Funktion ein ANY Pointer zusammengestellt werden?

  • Beitrag
  • Betrifft Produkt(e)

Anleitung
In S7-SCL können Sie mit dem AT-Befehl weitere Sichten auf deklarierte Variablen definieren. Die beiden folgenden Beispiele beschreiben die Deklaration der Komponenten für den ANY-Pointer, das Anlegen des ANY-Pointers und die Parametrierung des SFC20 (BLKMOV) zum Kopieren der Daten vom DB6 zum DB7.

In der nachstehenden Tabelle ist die Vorgehensweise beschrieben, wie Sie einen ANY-Pointer in einer Funktion definieren können:
 

Nr. Vorgehensweise
1 STEP 7 speichert die Daten des Parametertyps ANY in 10 Bytes. Hierzu müssen Sie eine strukturierte Variable definieren, die die Parametertypen wie "Datentyp", "Wiederholfaktor", "DB-Nummer" sowie die Byte- und Bitadresse zum Aufbau des ANY-Pointers enthalten. Bild 01 zeigt hier ein Beispiel der Deklaration der beiden strukturierten Variablen "Test1" und "Test2" innerhalb des FCs.


Bild 01

2 Mit der S7-SCL Anweisung AT legen Sie eine Schablone über die strukturierte Variable "Test1" bzw. "Test2" und für die hierzu definierte Variable, z.B. "pAny_source" deklarieren Sie vom Typ "ANY". Somit haben Sie mit der Anweisung
  • "pAny_source AT Test1: ANY;"

einen ANY-Pointer definiert.

3 Nun müssen Sie mit den strukturierten Anweisungen wie im Bild 01 den ANY-Pointer vorbelegen. Die folgenden Anweisungen entsprechen dem Aufbau des ANY-Pointers "P#DB6.DBX0.0 Byte 10":
  • "Test1.Any_id:= 16#10;"  //Hex für die Syntax-ID
  • "Test1.Source_DataType:= 16#02;"  //für Datentyp Byte
  • "Test1.Source_Lenght:= 16#0A;"  //Länge hier 10 Byte
  • "Test1.Source_DB_Nummer:= 16#06;"  //für DB6
  • "Test1.Source_Byte_Pointer:= dw#16#84000000;"  //Byte- und Bitadresse des Datenbausteins
4 Parametrieren Sie die ANY-Parameter des SFC20 (BLKMOV) mit den definierten ANY-Variablen "pAny_source" und "pAny_destin" (Bild 01), z.B.
  • "erg:= SFC20(srcblk:= pAny_source, dstblk:= pAny_destin)";

Die Variable "erg" vom Typ INT entspricht den Rückgabewert (RET_VAL) der Funktion.

In der nachstehenden Tabelle ist die Vorgehensweise beschrieben, wie Sie einen ANY-Pointer in einem UDT definieren können:
 

Nr. Vorgehensweise
1 Legen Sie zur Definition der ANY-Parameter zuerst einen UDT an, z.B. einen UDT1 mit dem symbolischen Namen "AnyPoint" für die Parameter:
  • SyntaxID: BYTE;  //Angabe der Syntax-ID
  • DataType: BYTE;  //Code für den Datentyp
  • DataCount: INT;  //Wiederholfaktor
  • DB_Number: WORD;  //Nummer für Datenbaustein
  • BytePointer: DWORD;  //Zeiger für Byte- und Bitadresse
2 Deklarieren Sie innerhalb der Funktion die Variablen z.B. "buffer_source" (für den Quell-DB) und "buffer_destin" (für den Ziel-DB) vom Typ "AnyPoint" (UDT1). Mit der S7-SCL Anweisung AT legen Sie die Schablonen über die strukturierten Variablen "buffer_source" und "buffer_destin" und die hierzu definierten Variablen, z.B. "Source_Any" und "Destin_Any" deklarieren Sie vom Typ "ANY". Somit haben Sie mit den Anweisungen
  • "Source_Any AT buffer_source: ANY;"
  • "Destin_Any AT buffer_destin: ANY;"

die ANY-Pointer wie im Bild 02 definiert.


Bild 02

3 Nun müssen Sie mit den strukturierten Anweisungen wie im Bild 02 den ANY-Pointer vorbelegen. Die folgenden Anweisungen entsprechen dem ANY-Pointer "P#DB7.DBX0.0 Byte 10" für den Zieldatenbaustein.
  • "buffer_destin.SyntaxID:= 16#10;"  //Hex für die Syntax-ID
  • "buffer_destin.DataType:= 16#02;"  //für Datentyp Byte
  • "buffer_destin.DataCount:= 16#0A;"  //Länge hier 10 Byte
  • "buffer_destin.DB_Number:= 16#07;"  //für DB7
  • "buffer_destin.BytePointer:= dw#16#84000000;"  //Byte- und Bitadresse des Datenbausteins
4 Parametrieren Sie die ANY-Parameter des SFC20 (BLKMOV) mit den definierten ANY-Variablen "Source_Any" und "Destin_Any" (Bild 02), z.B.
  • "erg:= SFC20(srcblk:= Source_Any, dstblk:= Destin_Any)";

Die Variable "erg" vom Typ INT entspricht dem Rückgabewert (RET_VAL) der Funktion.

Weitere Informationen zum Aufbau des ANY-Pointer finden Sie auch in der Onlinehilfe von STEP 7, unter dem Kapitel:

  • Format des Parametertyps ANY

Hinweis
Wird eine Funktion mit einem AWL-Programm in S7-SCL aufgerufen, die einen OUT-Parameter vom Typ ANY hat, so ist die Parametrierung mit einem ANY-Pointer wie z.B. "P#DB10.DBX0.0 BYTE 10" in S7-SCL systembedingt nicht möglich, da die Bearbeitung der ANY-Pointer in AWL und S7-SCL unterschiedlich ist. Bei der Zuweisung in S7-SCL von ANY auf ANY werden die 10 Byte von einem zum anderen Pointer (6 Byte) kopiert, um die erhaltenen ANY-Pointer der INPUT-Parameter weiterzugeben. Zur Parametrierung der ANY-OUT-Parameter eines AWL-Programms empfehlen wir hier Variablen vom Typ "STUCT" (wie oben im Beispiel beschrieben). Wenn auf einer ANY-Variablen eine Variable von einem anderen Typ als ANY zugewiesen wird, so bildet der S7-SCL-Compiler die Adresse (10 Byte) und schreibt sie in den ANY-Pointer.

Kopieren Sie die Datei "SCL_Any.zip" in ein separates Verzeichnis und starten Sie die Datei anschließend per Doppelklick. Das STEP 7 V5.5 Projekt wird jetzt automatisch mit allen dazugehörigen Unterverzeichnissen entpackt. Anschließend können Sie das entpackte Projekt mit dem SIMATIC Manager öffnen und bearbeiten. Das STEP 7 Projekt enthält zwei Stationen. Die Station_1 enthält das Programm zur Definition des ANY-Pointers in einer Funktion und die Station_2 enthält das Programm zur Definition des ANY-Pointers in einem UDT.

SCL_ANY.zip ( 88 KB )

Suchbegriffe
Filter, Filterung, Datentypen von Variablen, Sichten auf Variablen

Securityhinweise
Um technische Infrastruktur, Systeme, Maschinen und Netzwerke gegen Cyber-Bedrohungen zu sichern, ist es erforderlich, ein ganzheitliches IT Security-Konzept zu implementieren (und kontinuierlich aufrechtzuerhalten), das dem aktuellen Stand der Technik entspricht. Die Produkte und Lösungen von Siemens formen nur einen Bestandteil eines solchen Konzepts. Weitergehende Informationen über Cyber Security finden Sie unter
https://www.siemens.com/cybersecurity#Ouraspiration.