Externe Variablen (V.E.) (#INIT V.E.)
Mit dem Befehl "V.E. ..." kann im NC-Programm auf externe Adressen geschrieben und/oder von externen Adressen gelesen werden. Dies wird durch die direkte, speichergekoppelte Kommunikation zwischen dem NC-Kanal und externen Teilnehmern, typischerweise der SPS, ermöglicht.
Der Zugriff vom NC-Kanal aus kann synchron durch den Interpolator, oder asynchron durch den Decoder durchgeführt werden.
Hinweis
Ein Lesen einer synchronen V.E.-Variable verursacht ein Leeren des NC-Kanals.
Dies ist bei aktiver WRK, aktivem Polynomüberschleifen oder aktivem HSC-Modus nicht zulässig.
Weitere Informationen zur Konfiguration und Parametrierung sind in der Dokumentation der externen Variablen beschrieben [8].
Programmierbeispiel
Externe Variablen (V.E.)
N100 $IF V.E.EXT1 >= 100 (Entsprechend dem Wert von V.E.EXT1)
(wird in die verschiedenen Fälle)
(verzweigt.)
N110 G01 X100 Y100 F1000
N120 $ELSE
N130 G01 X100 YV.E.EXT1 F1000 (Geradeninterpolation in Y-Richtung)
(mit dem Wert von V.E.EXT1)
N140 $ENDIF
N150 V.E.EXT1 = V.A.ABS.X (Der externen Variablen wird die)
(absolute X-Koordinate zugewiesen)
N160 G01 XV.E.EXT2 (Geradeninterpolation in X-Richtung)
(mit dem Wert von V.E.EXT2)
Nach Steuerungshochlauf sind die konfigurierten V.E.-Variablen mit "Null" initialisiert.
Danach können V.E.-Variablen im NC-Programm über den Befehl #INIT bei Bedarf erneut initialisiert werden. Dem Befehl können eine oder mehrere V.E.-Variablen folgen, die vollständig abgelöscht werden. Neben einzelnen V.E.-Variablen können auch komplette V.E.-Arrays und V.E.-Strukturen sowie Unterelemente von V.E.-Strukturen initialisiert werden.
Syntax: |
#INIT V.E.<name> {, V.E.<name>} |
Achtung
Zugriffsrechte:
Hat eine Variable nur Leserechte, kann diese nicht mit dem #INIT-Befehl initialisiert werden. Gleiches gilt für V.E.-Strukturen, wenn mindestens ein Unterelement enthalten ist, das nur gelesen werden kann.
Achtung
Synchrone V.E.-Variablen:
Sobald eine V.E.-Struktur eine synchrone Variable enthält, ist der gesamte Initialisierungsvorgang mit #INIT synchron, d.h. er wird erst im Interpolatorkontext ausgeführt. Mögliche asynchrone Unterelemente sind also von diesem Vorgang ebenfalls betroffen, da diese möglicherweise bei einem nachfolgenden lesenden Zugriff noch nicht neu initialisiert sind!
Um in diesen Fällen eine vollständige Synchronität zu erreichen, sollte der Benutzer daher manuell vor dem #INIT-Befehl einen #FLUSH WAIT-Befehl programmieren.
Tipp:
Bei Verwendung des #INIT-Befehls wird empfohlen, V.E.-Strukturvariablen so anzulegen, dass alle Elemente vollständig synchron oder vollständig asynchron sind!
Programmierbeispiel
Initialisieren einzelner V.E.-Variablen:
Nxx #INIT V.E.EXT1, V.E.EXT2, V.E.EXT3
Initialisieren einer V.E.-Arrayvariable:
Nxx #INIT V.E.ARRAY1
Initialisieren bestimmter V.E.-Arrayvariablen:
Nxx #INIT V.E.ARRAY1[5], V.E.ARRAY1[8], V.E.ARRAY1[20]
Initialisieren einer V.E.-Strukturvariable:
Nxx #INIT V.E.STRUCT1
Initialisieren bestimmter Elemente einer V.E.-Strukturvariable:
Nxx #INIT V.E.STRUCT1.NBR_POINTS, V.E.STRUCT1.POINTS
Kombiniertes Initialisieren von V.E.-Variablen:
Nxx #INIT V.E.EXT2, V.E.ARRAY1[5], V.E.STRUCT1.POINTS
...