×
Siemens Industry Online Support
Siemens AG
Beitragstyp: FAQ Beitrags-ID: 20443243, Beitragsdatum: 04.03.2010
(14)
Bewerten

Wie können Bausteine parametriert werden, die Parameter vom Datentyp "ANY" oder "Pointer" enthalten?

  • Beitrag
  • Betrifft Produkt(e)

Beschreibung
Der Parametertyp ANY ist 10 Byte lang und enthält Informationen über den Datentyp (Byte 1), den Wiederholfaktor bzw. die Anzahl der Datentypen zur Übergabe am Parameter (Byte 2 und 3), die DB-Nummer (Byte 4 und 5), den Speicherbereich (Byte 6), die Bit- und die Byteadresse. Weitere Informationen zu dem Format des Parametertyps ANY finden Sie in der STEP 7 Onlinehilfe unter

  • Format des Parametertyps ANY,
  • Format des Parametertyps POINTER.
Die nachstehende Tabelle enthält einige Beispiele, wie Sie Bausteine mit Parametern vom Typ ANY und Pointer parametrieren können:
  1. Parametrierung einer Systemfunktion im Funktionsbaustein
  2. Dynamische Versorgung des ANY-Pointers mit einem Datenbaustein und Übergabe der DB-Nummer an einem SFC84
  3. Parametrierung der Funktion FC81 "IBLKMOV" 
Nr. Beispiele
1

Parametrierung einer Systemfunktion im Funktionsbaustein
Im folgenden Beispiel wird die Parametrierung des ANY-Pointers bei der Systemfunktion SFC50 "RD_LGADR" (Read Modul Logical Addresses) erläutert. Die Programmierung gliedert sich z.B. für einen Funktionsbaustein FB1 in folgende Schritte:

  1. Deklaration einer IN-Variable "test" und einer TEMP-Variable "test2" jeweils vom Typ ANY (Bild 01).
  2. Übergabe des Parameters "PEADDR" der SFC50 z.B. an die Variable "test2" (Bild 02).
  3. Durch die Auswertung des ANY-Zeigers "test" werden die Daten der temporären Variable "test2" übergeben:


Bild 01

Die Anweisung L P##test lädt die Adresse zunächst in den Akku1 und anschließend mit der Anweisung LAR1 ins Adressregister AR1 (mögliche Kurzform: LAR1 P##test). Nach jedem Lesen des Adressregisters AR1 erfolgt die jeweilige Ablage bzw. Zwischenspeicherung (z.B. T LW 0) der Daten in der temporären Variable "test2" (ANY-Pointer). Mit der Anweisungsfolge im Netzwerk 1 wird der an den Funktionsbaustein FB1 übergebene ANY in die temporäre Variable "test2" kopiert.


Bild 02

2 Dynamische Versorgung des ANY-Pointers mit einem Datenbaustein und Übergabe der DB-Nummer an einem SFC84
Im unten aufgeführten Programmbeispiel werden im Funktionsbaustein FB1 die temporären Variablen des ANY-Pointers (SRCBLK_ANY und DSTBLK_ANY) mit der Nummer des Datenbausteins der IN-Variablen (SRCBLK_DB_NR und DSTBLK_DB_NR) versorgt. Diese Variablen werden dann dem SFC84 übergeben.

Bild 03 zeigt ein Beispiel für die Parametrierung des ANY-Pointers (temporäre Variablen) und die Übergabe am SFC84


Bild 03

Der Funktionsbaustein FB1 wird dann z.B. im Organisationsbaustein OB1 aufgerufen und die Eingangsparameter des FB1 mit der entsprechenden Nummer der DBs parametriert.


Bild 04

3 Parametrierung der Funktion FC81 "IBLKMOV"
Mit der Funktion FC81 "IBLKMOV" werden Datenbereiche indirekt übertragen. An einem Beispiel wird im Folgenden die Parametrierung des Bausteins erläutert:
  1. Im OB100 werden die Pointer initialisiert. In diesem Beispiel werden aus dem DB1 (ab der Adresse 50.0) zwei Worte in den DB2 (ab der Adresse 10.0) übertragen.
  2. Im ersten Block wird der Pointer für die Ausleseadresse geladen.
  3. Der zweite Block dient zur Initialisierung der zu übertragenden Länge. Im darauffolgenden Block wird die Zieladresse in den Datenbaustein geschrieben.
  4. Die nächsten beiden Blöcke sind nicht für den Ablauf des Bausteins relevant. Hier werden nur Daten in die Adressen geschrieben, um eine Veränderung der Daten in der Zieladresse beobachten zu können.


Bild 05

  1. Im OB 1 wird dann die Funktion "IBLKMOV" (FC 81) aufgerufen.
  2. Der Merker 10.0 dient zum einmaligen Aufruf des Bausteins.
  3. Merker 10.1 bestätigt die fehlerfreie Übertragung des Datensatzes.
  4. An den Eingängen "S_DATA", "LEN" und "D_DATA" müssen die Variablen als Pointer eingegeben werden. Das bedeutet, dass der Eingang "S_DATA" mit der Variable "P#DB1.DBX0.0" versorgt wird. Am Eingang "LEN" wird der Pointer "P#DB1.dbx10.0" eingetragen und am Eingang "D_DATA" wird ebenfalls vor die Bitadresse das Pointersymbol ("P#DB1.DBX20.0") geschrieben. Die Angabe des Pointerformats (P#)entfällt in der Bildschirmdarstellung.
  5. Die letzte Eingangsvariable dient zur Angabe des Datentyps, der zu übertragenden Daten. In diesem Beispiel sollen Daten vom Datentype "Word" übergeben werden, daraus folgt die Parametrierung mit B#16#04.


Bild 06

Weitere Informationen zur FC81 finden Sie in der STEP 7 Onlinehilfe, indem Sie im SIMATIC Manager die FC81 markieren und die "F1"-Taste betätigen.

Hinweis
Um den oben genannten Funktionsbaustein FB1 als Multiinstanz nutzen zu können, ersetzen Sie die beiden ersten Anweisungen (L P#test; und LAR1;) wie folgt:
 

Nr.

Code Kommentar
1 TAR2 Die in AR2 (Multiinstanz!) stehende Adresse wird in Akku1 geschrieben
2 UD DW#16#00FF_FFFF Ausmaskieren unwichtiger Informationen
3 LAR1 P##test AR1 mit der Adresse von "test" beschreiben
4 +AR1 Die in Akku1 stehende Adresse (von Multiinstanz) wird zur Adresse von "test" addiert und endgültig ins AR1 geschrieben

Als Ergebnis steht die Adresse der Variablen #test im Adressregister AR1. Beachten Sie aber, dass mit "+AR1" nur ein begrenzter Wertebereich zur Erhöhung des Adressregisters 1 zur Verfügung steht (-32768 ... +32767). Das oben beschriebene Beispiel müssen Sie noch an Ihre Applikation anpassen. Weitere Informationen finden Sie auch in unserem Beitrag:

  • Wie können Multiinstanzen erstellt und aktualisiert werden?
    Beitrags-ID 18723826.

Suchbegriffe
indirekte Adressierung, VL (Vorherigen Lokaldaten)

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.