ADS Zugriff auf CNC (C13)

1.1 EinleitungPAGEREF _Toc304469480 \h4

1.2 Beschreibung 5

1.2.1 Task COM 5

1.2.2 Task SDA, Task GEO 6

1.2.2.1 Klassen 6

1.2.2.2 Verwaltung, Indexgroup/-offset Adresse 13

1.3 Parameter 16

1.3.1 Übersicht 16

1.4 Dynamischer Zugriff auf Variablen 17

1.4.1 P-Parameter 18

1.4.2 V.A. Variablen 18

1.4.3 V.E. Variablen 19

1.4.4 V.G. Variablen 19

1.4.5 V.L. Variablen 20

1.4.6 V.P. Variablen 20

1.4.7 V.S. Variablen 20

1.4.8 Lese / Schreib Zugriff 23

1.4.9 Zugriff V.E.-Arrayelement 23

1.5 ADS-Schnittstelle für Variablen mit flexiblem Datentyp (V.E, V.G, V.A) 24

1.5.1 Allgemein 24

1.5.2 Schnittstellen 25

1.5.2.1 Kanalspezifische Schnittstelle 25

1.5.2.2 Achsspezifische Schnittstelle (z.B. für V.A Variablen) 26

1.5.3 Übergabeparameter und Rückgabewerte 27

1.5.3.1 Funktion Variable element number 27

1.5.3.2 Funktion Variable description by index 28

1.5.3.3 Funktion Variable handle by name 30

1.5.3.4 Funktion Read variable value by handle 30

1.5.3.5 Funktion Read variable value by name 30

1.5.3.6 Funktion Write variable value by handle 31

1.5.3.7 Funktion Write variable value by name 31

1.5.3.8 Funktion Extended description by index 32

1.5.3.9 Achsspezifische Funktion Variable handle by name 33

1.5.3.10 Achsspezifische Funktion Read variable value by name 33

1.5.3.11 Achsspezifische Funktion Write variable value by name 34

1.6 ADS Dienste 35

Mehr:

button Einleitung

button Beschreibung

button Parameter

button Dynamischer Zugriff auf Variablen

button ADS-Schnittstelle für Variablen mit flexiblem Datentyp (V.E, V.G, V.A)

button ADS Dienste


Einleitung

Daten | Die Instanzen der CNC-Klassen stellen Daten (Elemente) zur Verfügung, die unterschiedliche Attribute besitzen. Je nach CNC-Konfiguration werden von jeder CNC-Klasse Instanzen angelegt und zu einer CNC-Architektur verknüpft. Auf diese Attribute der Datebn kann über ADS-Dienste zugegriffen werden. · ADS-read · ADS-write · ADS-read/write
Architektur | Auf Daten der CNC kann über ADS zugegriffen werden. Hierzu ist das Element über die Adresse ADS-NetId, IndexGroup und IndexOffset bestimmt. Im obigen Bild sind beispielhaft folgende CNC-Klassen aufgeführt · Decodierung BF DEC · Bahnplanung BF BAVO · Interpolator BF BAHN · Lageregelung BF LR · Spindel BF SPINDEL

Plattform, Kanal, Achse

Je nach CNC-Klasse kann die Instanz plattformglobal sein (Kanalnummer = 0, z.B. Lagereger) oder entsprechend kanalspezifisch (Kanalnummer > 0) angelegt sein.

Zusätzlich kann eine Instanz sowohl eigene Elemente wie auch achsspezifische Elemente zur Verfügung stellen.

Achsen der Plattform

Die Anzahl der plattformglobalen Achsen sowie deren logische Identifikationsnummer wird durch die Hochlaufbeschreibung zum Zeitpunkt der Konfiguration des Systems festgelegt und ändert sich während der Laufzeit nicht. Die ADS-Adressierung ergibt sich aus der festen logischen Achsnummer und kann jederzeit über diese Adresse angesprochen werden.

Achsen des Kanals

Die Adressierung der Achsen eines Kanals findet über den Index im Kanal statt. Durch die Kanalparametrierung und den Achstausch kann die Einordnung einer Achse in den Kanal beliebig geändert bzw. festgelegt werden.

Ist ein Index einer Kanalachse momentan nicht durch eine Achse belegt, so kann dies durch Lesen eines leeren Dateninhalts eingesehen werden. Insbesondere ist in diesem Falle die logische Achsenummer = 0.

Spindeln

Entsprechend eines CNC-Kanals welcher für die koordinierte Bewegung mehrerer Achsen zuständig ist, steht die BF SPINDEL für die Bewegung einer einzigen unabhängigen Achse (Einzelachsinterpolator). D.h. je nach Anzahl von angelegten Spindeln können diese auch referenziert werden.

Ein Sonderfall stellt hier der High-Level-Treiber (HLD, BF CHANNEL) dar. Der HLD des ersten Kanals treibt zusätzlich zu den kanalspezifischen Elementen alle plattformglobalen Achsen auf der Schnittstelle zur SPS. Die Adressierung der Achsen ändert sich also hier nicht durch einen Achstausch, sondern ist fest durch die Hochlaufbeschreibung gegeben.

Als Basisadresse für den ADS-Zugriff auf interne CNC-Daten des Ports 0x553 (Task COM) wird als IndexGroup = 0x20100 sowie 0x20200 verwendet.

Einzelne Kanäle oder Achsen können über unterschiedliche additive Werte zu dieser Basisadresse (IndexGroup) abgefragt werden.

Als Basisadresse für den ADS-Zugriff auf interne CNC-Daten des Ports 0x552 (Task SDA) und 0x551 (Task GEO) wird als IndexGroup = 0x20300 definiert.

Einzelne Attribute eines Elements können über unterschiedliche additive Werte zu dieser Basisadresse (IndexGroup) abgefragt werden.


Beschreibung

Mehr:

button Task COM

button Task SDA, Task GEO


Task COM

Klassen der Instanzen

In der Task COM existiert nur eine Instanz, welche sämtliche Elemente (Plattform, Kanäle, Achsen) verwaltet.

Plattformdaten

Achsen der Plattform

Kanaldaten

Achsen des Kanals

IndexGroup = 0x20101, IndexOffset = <Element>

IndexGroup = 0x20200 +<Achse>, IndexOffset = <Element>

IndexGroup = 0x20100 +<Kanal>, IndexOffset = <Element>

0x20100 +<Kanal>, IndexOffset = 0x1000 * <Achse> + <Element>

Der erste Kanal (IndexGroup = 0x20101) treibt die Plattformdaten.


Task SDA, Task GEO

Mehr:

button Klassen

button Verwaltung, Indexgroup/-offset Adresse


Klassen

IndexGroup-Basis der CNC

IndexGroup = 0x20300

Klassen

Die einzelnen Klassen haben folgenden additiven Werte auf den IndexGroup der CNC:

0x0000 : Lageregler (einmal pro CNC, kanalunabhängig mit plattformglobale Achsen)

0x1000 : Interpolator (kanalspezifisch mit Kanalachsen)

0x2000 : Decoder (kanalspezifisch mit Kanalachsen)

0x3000 : HLD (kanalspezifisch, HLD des ersten Kanals enthält zusätzlich Achsen plattformglobal)

0x4000 : Bahnvorbereitung (kanalspezifisch)

0x5000 : Spindel

IndexGroup der Klassen

Folgende Klassen der CNC-Bausteine sind aktuell mit der entsprechenden IndexGroup adressierbar :

0x20300 : Lageregler (einmal pro CNC, kanalunabhängig mit plattformglobale Achsen)

0x21300 : Interpolator (kanalspezifisch mit Kanalachsen)

0x22300 : Decoder (kanalspezifisch mit Kanalachsen)

0x23300 : HLD (kanalspezifisch, HLD des ersten Kanals enthält zusätzlich Achsen plattformglobal)

0x24300 : Bahnvorbereitung (kanalspezifisch)

0x25300 : Spindel

Attribute

Folgende Attribute eines Elements können abgefragt werden (additive Werte zur IndexGroup):

0x000 : Dateninhalt (je nach Datentyp)

0x100 : Name als String

0x200 : Typ als String [UNS08;SGN08; ... ;SGN32; REAL32, REAL64]

0x300 : Länge der Daten in Bytes

0x400 : Einheit als String

0x500 : Flag BOOLEAN, ob Schreibzugriff erlaubt ist

0x600 : ADS-Adresse : In (Kanal, Achse), Out (IndexGroup, IndexOffset)


Verwaltung, Indexgroup/-offset Adresse

Verbindungsaufbau

Abfrage der existierenden Instanzen einer Klasse

Um zu ermitteln welche Instanzen einer Klasse vorhanden sind, kann über einen READ&WRITE Zugriff die ADS-Adresse des ersten Elements (IndexOffset = 0x0) abgefragt werden.

Zurückgegeben wird der IndexGroup und der IndexOffset. Wird als Adresse (0, 0) zurückgegeben, so existiert keine Instanz dieser Klasse.

Ist eine Instanz vorhanden, so können durch Inkrementieren des IndexOffsets alle weiteren vorhandenen Elemente der Instanz ermittelt werden.

 | Programmierbeispiel
Abfrage ADS-Adresse 1.Kanal | IndexGroup = 0x23900 = <CNC-Basis> + <Class = HLD>+ <Attribut=Adresse> 0x20300 + 0x3000 + 0x600 Input : Channel = 1, Axis = 0 Output : IndexGroup = 0x23301, IndexOffset = 0x0
2. Kanal | Input : Channel = 2, Axis = 0 Output : IndexGroup = 0x23302, IndexOffset = 0x0
1.Achse der Plattform | Input : Channel = 0, Axis = 1 Output : IndexGroup = 0x23300, IndexOffset = 0x1000

 | Programmierbeispiel
Abfrage ADS-Adresse 2. Decoderachse des 1. Kanals | IndexGroup = 0x22900 = <CNC-Basis> + <Class = DEC>+ <Attribut=Adresse> 0x20300 + 0x2000 + 0x600 Input : Channel = 1, Axis = 2 Output : IndexGroup = 0x22301, IndexOffset = 0x20000

Anzahl der Elementtypen einer Klasse

Die Anzahl der vorhandenen Elementtypen einer Instanz kann über den Werteinhalt des ersten Elements (IndexOffset = 0) abgefragt werden.

Zusätzlich beschreibt der Name dieses Elements die Instanz selbst.

Lageregler

Der Lageregler ist nicht kanalspezifisch, d.h. ist gilt immer Kanal = 0. Die Achsen gehen von 0 bis zur Anzahl der konfigurierten Achsen.

Interpolator, Decoder, Bahnvorbereitung

Die Kanalnummer ist im Bereich [ 1; Anzahl konfigurierter Kanäle] anzugeben.

Dia Achsen sind kanalspezifisch und müssen im Bereich [ 0; <BAHN_BAVO_AXMAX>] liegen.

Channel, HLI-Treiber

Die Kanalnummer ist im Bereich [ 1; <Anzahl konfigurierter Kanäle>] anzugeben.

Werden Achsen referenziert, so müssen diese im Bereich [ 1; <Anzahl der konfigurierten Achsen>] liegen.

Spindel

Für Spindel wird als Channel-Eintrag der Spindelindex angegeben. Der Spindelindex geht von 0 bis zur Anzahl der konfigurierten Spindelachsen - 1.

Abfrage der Attibute der Elemente

Sind alle vorhandenen Elemente einer Instanz gefunden, so können die einzelnen Attribute (Name, Typ, Datenlänge, Einheit, usw.) ausgelesen werden.

 | Programmierbeispiel
Abfrage der Attribute Element: Feedhold | IndexGroup = 0x20300 + <Class = HLD> + <Attribut> + <Kanal = 1> = 0x20300 + 0x3000 + <Attribut> + 0x1 = 0x23301 + <Attribut> Attribut Dateninhalt (+0x000): IndexGroup = 0x23301, Attribute Name (+0x100): IndexGroup = 0x23401,

Attribut Typ (+0x200) : IndexGroup = 0x23501

Attribut Länge (+0x300) : IndexGroup = 0x23601

Attribut Einheit (+0x400) : IndexGroup = 0x23701

Attribute write access (+0x500) : IndexGroup = 0x23801

Programmierbeispiel

// Test, ob Klasse vorhanden : LR 0x20300, BAHN 0x21300, DEC 0x22300, CHANNEL 0x23300, BAVO 0x24300

for (i = 0; i < 5; i++)

{

CNC_ADDRESS wr;

ADS_ADDRESS rd;

AMS_NetID = ;

port = 0x551; // task GEO

iGroup = 0x20300 + i * 0x1000;

iOffset = 0x0;

// Test, ob Plattformdaten vorhanden sind

wr.Channel = 0;

wr.Axis = 0;

ads_read( wr, rd);

if (rd.iGroup != 0)

{

... Adresse ablegen und Objekt anzeigen

}

else

{

// Test, ob Kanäle vorhanden

wr.Channel = 1;

wr.Axis = 0;

ads_read( wr, rd);

while (rd.iGroup != 0)

{

// ADS-Adresse unter Kanal "wr.Axis" intern abspeichern

wr.Axis ++ ;

ads_read( wr, rd);

}

}

// Test, ob Achsen vorhanden

wr.Channel = 0;

wr.Axis = 1;

ads_read( wr, rd);

while (rd.iGroup != 0)

{

// ADS-Adresse unter Achse "wr.Axis" intern abspeichern

wr.Axis ++ ;

ads_read( wr, rd);

}

}


Parameter

Mehr:

button Übersicht


Übersicht

Konfiguration : 2 Kanäle, 6 Achsen


Dynamischer Zugriff auf Variablen

ADS-Objekte

Die ADS-Objekte an sich sind statisch und eindeutig identifizierbar durch IndexGruppe und IndexOffset. Man kann jedoch auch dynamische Variablen / Parameter über ADS lesen. Zur Verfügung stehen:

GEO

- AEP-Parameter

SDA

- P-Parameter

- V.A.-Variablen

- V.E.-Variablen

- V.G.-Variablen

- V.L.-Variablen

- V.P.-Variablen

- V.S.-Variablen

ADS-Variablen

Da diese Variablen / Parameter abhängig vom NC-Programm angelegt werden können, muss hier der Zugriff dynamisch erfolgen. Zu diesem Zweck stehen im NC-Kern statische ADS-Variablen zur Verfügung, welche Meta-Informationen zu den Variablen / Parametern liefern. Zu beachten ist hierbei, dass diese statischen Variablen die einzigen sind, bei denen sich die IndexGruppe / IndexOffset ändern kann. Um sicher zu gehen, müssen diese ADS-Variablen über ihren Namen gesucht werden. Der Name ist bei diesen Variablen festgelegt und ändert sich nicht.

Die nachfolgenden Tabellen geben die IndexGruppe / IndexOffset als Momentaufnahme an und müssen nicht mit dem aktuellen NC-Kern übereinstimmen.

Die maximale Länge eines Variablennamens wurde von 28 byte auf 96 byte erhöht. Das betrifft alle V.-Varablen und P-Parameter.

Mehr:

button P-Parameter

button V.A. Variablen

button V.E. Variablen

button V.G. Variablen

button V.L. Variablen

button V.P. Variablen

button V.S. Variablen

button Lese / Schreib Zugriff

button Zugriff V.E.-Arrayelement


P-Parameter

Gruppe Offset Bezeichner Typ Länge

0x22301 0x2 P parameter number UNS32 4

0x22301 0x1B P-name by index UNS32/STRING 96

0x22301 0x1C P-value by name STRING/REAL64 8

0x22301 0x1D P-value by index UNS32/REAL64 8


V.A. Variablen

Gruppe Offset Bezeichner Typ Länge

0x22301 0x31 V.A-max. number UNS32 4

0x22301 0x32 V.A-name by index UNS32/STRING 96

0x22301 0x33 V.A-type by index UNS32/STRING 96

0x22301 0x34 V.A-mode by index UNS32/STRING 96

0x22301 0x37 V.A-read value by name STRING/EXT_VAR_WERT 24

0x22301 0x38 V.A-write value by name S_WRITE_VAR_DATA 120

V.A-type by index Werte:

V_BOOLEAN, V_UNS08, V_SGN08, V_UNS16, V_SGN16, V_UNS32, V_SGN32, V_REAL64, V_STRING, V_UNKNOWN_TYPE

V.A-mode by index Werte:

NO_ACCESS, UNKNOWN_ACCESS, READ_ONLY, WRITE_ONLY, PROT_ONLY, READ_WRITE, READ_WRITE_PROT, READ_PROT, WRITE_PROT

Struktur EXT_VAR_WERT:

typedef union _ext_var_wert

{

UNS08 uns08;

SGN08 sgn08;

UNS16 uns16;

SGN16 sgn16;

UNS32 uns32;

SGN32 sgn32;

REAL64 real64;

BOOLEAN boolean;

VAR_STRING string;

} EXT_VAR_WERT;

Struktur S_WRITE_VAR_DATA:

typedef struct s_write_var_data

{

ISG_CHAR name[96];

EXT_VAR_WERT value;

}WRITE_VAR_DATA;

Ab CNC Version V2.10.1503 ist ein Zugriff auf die V.A.-Variablen wie in Kapitel 1.5.2.2 möglich.


V.E. Variablen

Gruppe Offset Bezeichner Typ Länge

0x22301 0x27 V.E parameter number UNS32 4

0x22301 0x28 V.E-dim by index UNS32/UNS32 4

0x22301 0x29 V.E-name by index UNS32/STRING 20

0x22301 0x2A V.E-type by index UNS32/STRING 20

0x22301 0x2B V.E-address by index UNS32/UNS32 4

0x22301 0x2C V.E-mem-place... by index UNS32/STRING 20

0x22301 0x2D V.E-Synchron mode UNS32/UNS32 4

0x22301 0x2E V.E-value by index UNS32/EXT_VAR_WERT 24

0x22301 0x2F V.E-array-value by index STRING/EXT_VAR_WERT 24

0x22301 0x30 V.E-Size by index UNS32/UNS32 4

Ab CNC Version V2.10.1503 ist ein Zugriff auf die V.E.-Variablen wie in Kapitel 1.5.2.1 empfehlenswert.

Vorteile:

· Verwendung von V.E.-Variablen mit Strukturen

Schreiben von V.E.-Variablen


V.G. Variablen

Gruppe Offset Bezeichner Typ Länge

0x22301 0x39 V.G-max. number UNS32 4

0x22301 0x3A V.G-name by index UNS32/STRING 96

0x22301 0x3B V.G-type by index UNS32/STRING 96

0x22301 0x3C V.G-mode by index UNS32/STRING 96

0x22301 0x3D V.G-node by index UNS32/STRING 96

0x22301 0x3E V.G-read value by name STRING/EXT_VAR_WERT 24

0x22301 0x3F V.G-write value by name S_WRITE_VAR_DATA 120

V.G-type by index Werte: siehe V.A.-Variablen

V.G-mode by index Werte: siehe V.A.-Variablen

V.G-node by index Werte:

V_CONTINUE, V_AXIS_INDEX, V_AXIS_NAME, V_CP_NAME, V_USER_DEF, V_USER_DEF_ARRAY, V_ARRAY_INDEX, V_VALUE, UNKNOWN_NODE

Struktur EXT_VAR_WERT: siehe V.A.-Variablen

Struktur S_WRITE_VAR_DATA: siehe V.A.-Variablen

Ab CNC Version V2.10.1503 ist ein Zugriff auf die V.G.-Variablen wie in Kapitel 1.5.2.1 möglich


V.L. Variablen

Gruppe Offset Bezeichner Typ Länge

0x22301 0x3 V.L parameter number UNS32 4

0x22301 0x1E V.L-name by index UNS32/STRING 96

0x22301 0x1F V.L-value by name STRING/REAL64 8

0x22301 0x20 V.L-value by index UNS32/REAL64 8


V.P. Variablen

Gruppe Offset Bezeichner Typ Länge

0x22301 0x4 V.P parameter number UNS32 4

0x22301 0x21 V.P-name by index UNS32/STRING 96

0x22301 0x22 V.P-value by name STRING/REAL64 8

0x22301 0x23 V.P-value by index UNS32/REAL64 8


V.S. Variablen

Gruppe Offset Bezeichner Typ Länge

0x22301 0x5 V.S parameter number UNS32 4

0x22301 0x24 V.S-name by index UNS32/STRING 96

0x22301 0x25 V.S-value by name STRING/REAL64 8

0x22301 0x26 V.S-value by index UNS32/REAL64 8


Lese / Schreib Zugriff

Zugriffsmethoden
P-/AEP-Parameter
V.L/V.P/V.S-Variablen

Im Allgemeinen gibt es zwei verschiedene Vorgehensweisen um auf die Variablen zuzugreifen. Die erste betrifft die P-Parameter, AEP-Parmeter, V.L.-Variablen, V.P.-Variablen und V.S.-Variablen. Für diese Gruppe von Variablen sind 4 Eigenschaften gegeben: Die Anzahl der vorhandenen Variablen, der Name über den Index gelesen, der Wert über den Index gelesen und der Wert über den Namen gelesen. Der Index startet bei 0 und ist immer lückenlos, d.h. man kann über den Index von 0 bis Anzahl-1 alle Variablennamen erhalten. Das Lesen des Wertes sollte dann ausschließlich über den Namen geschehen, da sich der Index einer Variablen ändern kann, z.B. wenn eine Variable aus der Mitte gelöscht wird. Diese Gruppe von Variablen kann nur Zahlen abspeichern, deswegen ist der Typ des Wertes immer REAL64.

Zugriffsmethoden
V.A/V.G-Variablen

Die zweite Gruppe bilden die V.A.-Variablen und V.G.-Variablen. Eine Besonderheit bei diesen Variablentypen ist, dass der Name aus zwei Teilen besteht. Einem statischen Teil und einem dynamischen Teil. Der statische Teil wird übermittelt, wenn man den Namen der Variablen über den Index liest. Der dynamische Teil besteht entweder aus einem Achsnamen des jeweiligen Kanals oder aus einem Arrayindex, selten - aber möglich ist auch eine Kombination aus beidem. Der Achsname wird, mit einem Punkt getrennt, hinter dem Variablennamen (statischer Anteil) angehängt. Im Fall einer Arrayvariablen wird der maximal gültige Index in dem Namen übermittelt. Beim Zugriff ist dieser maximale Index durch den gewünschten zu ersetzen.

Beispiele

Variable ergänzen um Achsname

V.A.Variable: V.A.+SWE_MDS.X_ACHSE

Statischer Anteil: V.A.+SWE_MDS

Dynamischer Anteil: X_ACHSE

Seltener Fall: Array Zugriff + Variable ergänzen um Achsname

V.G.Variable: V.G.NP[5].V.X_ACHSE

Statischer Anteil: V.G.NP[98].V

Dynamischer Anteil: X_ACHSE

Ergänzung um Achsname

Eine Ergänzung um den Achsnamen muss bei V.A.-Variablen immer stattfinden. Bei V.G.-Variablen gibt die Eigenschaft V.G-node by index an, ob die Variable um einen Achsnamen zu ergänzen ist oder nicht. Ein Achsname ist anzuhängen wenn Node den Wert V_AXIS_NAME hat. Ob ein Array vorhanden ist, lässt sich nur durch das Durchsuchen des Namens auf die Zeichen [ oder ] prüfen.

Um die Anzahl der Aktuell vorhandenen Achsen in einem Kanal ermitteln zu können,
existiert die Variable:

Gruppe Offset Bezeichner Typ Länge

0x22301 0x35 Number of axis in channel UNS32 4

Der Achsname lässt sich durch folgende Variable ermitteln:

0x22301 0x36 Name of axis by index UNS32/STRING 96

Bestimmen des Variablentyps

Weiter ist der Typ der Variablen frei wählbar. Das heißt, dass man zusätzlich zu der Vorgehensweise wie bei P-Parametern etc. erst den Typ und die Länge bestimmen muss, um erfolgreich einen Wert lesen zu können. V.A.- und V.G.-Variablentypen unterstützen auch das Schreiben. Um ermitteln zu können ob eine Variable beschreibbar ist oder nicht, gibt es die Eigenschaft Mode. Hier wird der Schreib/Lesemodus übermittelt. Beim Schreiben der Variablen ist ein Speicherstream entsprechend der Struktur S_WRITE_VAR_DATA aufzubauen.

V.E.-Variablen

Einen weiteren Variablentyp stellen die V.E.-Variablen dar. Diese sind vom Zugriff her eine Mischung aus V.A.- / V.G.-Variablen und P-Parametern. Da die V.E.-Variablen NC-Programmunabhängig sind, können diese ausschließlich über ihren Index gelesen werden. Der Typ kann von V.E.-Variable zu V.E.-Variable unterschiedlich sein, jedoch kann sich der Typ nicht während der Laufzeit ändern (siehe [EXTV]). Dementsprechend muss das Lesen typenabhängig erfolgen (siehe z.B. P-Parameter). V.E.-Variablen können auch als Array angelegt sein.


Zugriff V.E.-Arrayelement

Der Zugriff auf ein V.E.-Arrayelement wird mittels eines Strings durchgeführt. Dieser muss folgende Form haben.

Codierung des Strings

<Index VE-Variable> @ <Index Arrayelement> @

Basis für das nachfolgende Beispiel :

Es soll die Variable A[2] ausgelesen werden, diese ist im Kanal 1 das 2. V.E. Element und hat den Index 2. Es wir das 3. Element des Arrays ausgelesen.

Programmierbeispiel

Abfrage V.E.-Arrayelement

IndexGroup = 0x22301

Input : 2@2@ ASCII String codiert

Output : datentypabhängig (24 Byte)

Datentyp + Rest = 24 Byte

Der Index der V.E.-Variablen startet mit 1, der Index der Arrayelemente mit 0.


ADS-Schnittstelle für Variablen mit flexiblem Datentyp (V.E, V.G, V.A)

Ab CNC Version V2.10.1503 ist diese Erweiterung der ADS-Schnittstelle verfügbar.

Mehr:

button Allgemein

button Schnittstellen

button Übergabeparameter und Rückgabewerte


Allgemein

· Für das Lesen und Schreiben von V.E, V.G und V.A Variablen gibt es eine gemeinsame, kanalspezifische Schnittstelle

· Für achsspezifische Variablen (V.A) gibt es zusätzlich eine achsspezifische Schnittstelle. In der kanalspezifischen Schnittstelle muss bei achsspezifischen Variablen zur Adressierung der gewünschten Achse an den Variablennamen der Achsname angehängt werden. In der achsspezifischen Schnittstelle hingegen wird implizit der Variablenwert, der aktuell auf diesem Platz einsortierten Achse gelesen. Beispiel:

Achsspezifische Schnittstelle: V.A.ACT_POS

Kanalspezifische Schnittstelle: V.A.ACT_POS.X

· Der Zugriff auf den Variablenwert kann über Name oder Handle stattfinden, wobei letzterer schneller ist.

Das Handle der Variablen ist variabel (abhängig von der Konfiguration)! Daher kann es über den Variablennamen abgefragt werden.

· Um auch ohne Vorwissen auf die Variablen zugreifen zu können, kann die Anzahl der vorhandenen Variableneinträge ermittelt und die Variablenbeschreibungen pollend (per Index) abgefragt werden.

· Variablenarrays mit elementarem Datentyp (auch mehrdimensionale Felder und Endknoten von Variablenstrukturen) werden als Einheit behandelt. Beispiel:

V.E.array_sgn32, V.E.struct.array_uns32, V.G.NP[0].V, V.G.NP[1].V

Bei Lesen oder Schreiben einer Array-Variablen kann entweder auf einzelnes Element oder komplettes Feld zugegriffen werden. Beispiel:

V.G.NP[0].V[1] -> einzelnes Element

V.G.NP[0].V -> Komplettes Array V.G.NP[0].V[0] ... V.G.NP[0].V[n]

· Variablenstrukturen werden in ihre Einzelelemente aufgelöst d.h. der Variablenname setzt sich aus Strukturnamen, Elementname und Array Indizes zusammen. Beispiele:

V.G.WZ_AKT.SPDL_AX_NR

V.E.Trajektorie.Vektor.x, V.E.Trajektorie.Vektor.y, V.E.Trajektorie.Vektor.z

V.E.struct1[0].struct2[0].array_sgn32, ..., V.E.struct1.struct1[5].struct2[8].array_sgn32

(Endknoten array_sgn32 wird als Einheit behandelt!)


Schnittstellen

Mehr:

button Kanalspezifische Schnittstelle

button Achsspezifische Schnittstelle (z.B. für V.A Variablen)


Kanalspezifische Schnittstelle

Index-Gruppe: IdxGruppe = 0x22300 + Kanal_Nr

Beispiel 1. Kanal: 0x22301:

IdxGrp | IdxOff | Funktion | Beschreibung | Input | Output
0x22301 | 0x44 | Variable element number | Anzahl vorhandener Variableneinträge der gewählten Variablenart. Ist keine Variablenart angegeben à Gesamtzahl aller verfügbaren Variablen V.E + V.G + V.A (Größter Index = Anzahl der Elemente  1) | STRING max. 255 Zeichen (s. 1.5.3.1) | UNS32 (s. 1.5.3.1)
0x22301 | 0x45 | Variable description by index | Variablenbeschreibung (Name, Handle, Variablentyp, Zugriff, Größe, Arraydimensionen, größte Indizes) | BYTE[2048] variable Länge (s. 1.5.3.2) | BYTE[2048] variable Länge (s. 1.5.3.2)
0x22301 | 0x46 | Variable handle by name | Handle für Zugriff auf die Variable | STRING max. 255 Zeichen (s. 1.5.3.3 ) | Handle (UNS32) (s. 1.5.3.3 )
0x22301 | 0x47 | Read variable value by handle | Variablenwert über Handle der Variablen lesen | BYTE[2048] variable Länge (s. 1.5.3.4 ) | BYTE[2048] variable Länge (s. 1.5.3.4 )
0x22301 | 0x48 | Read variable value by name | Variablenwert über Variablennamen lesen | STRING max. 255 Zeichen (s. 1.5.3.5 ) | BYTE[2048] variable Länge (s. 1.5.3.5 )
0x22301 | 0x49 | Write variable value by handle | Variablenwert über Handle der Variablen schreiben | BYTE[2048] variable Länge (s. 1.5.3.6 ) | -
0x22301 | 0x4A | Write variable value by name | Variablenwert über Variablennamen schreiben | BYTE[2048] variable Länge (s. 1.5.3.7 ) | -
0x22301 | 0x4B | Extended variable description by index | Erweiterte Variablenbeschreibung z.B. für V.E Variablen Synchronisierung und Gültigkeitsbereich | BYTE[2048] variable Länge (s. 1.5.3.8) | BYTE[2048] variable Länge (s. 1.5.3.8)
0x22301 | 0x4C-0x4E | reserved | Reserviert | - | -

Achsspezifische
Variablen (z.B. V.A)

Der Variablenname beinhaltet die Achsinstanz (bei V.A Variablen der Achsname), um im kanalspezifischen Interface die gewünschte Achse anzusprechen.

Beispiel: V.A.ACT_POS.X_ACHSE

Alternativ kann über das achsspezifische Interface direkt auf die gewünschte Achse zugegriffen werden.


Achsspezifische Schnittstelle (z.B. für V.A Variablen)

Index-Gruppe: IdxGruppe = 0x22300 + Kanal_Nr

Index-Offset weiterer Achsen: IdxOffset += 0x10000 * Achsindex

Beispiel 1. Kanal, 1. Achse: IdxGruppe = 0x22301

IdxGrp | IdxOffset | Funktion | Beschreibung | Input | Output
0x22301 | 0x10004 | Variable handle by name | Handle für Zugriff auf die Variable | STRING max. 255 Zeichen (s. 1.5.3.9 ) | Handle (UNS32) (s. 1.5.3.9 )
0x22301 | 0x10005 | Read variable value by name | Variablen wert über Variablennamen lesen | STRING max. 255 Zeichen (s. 1.5.3.10 ) | BYTE[2048] variable Länge (s. 1.5.3.10 )
0x22301 | 0x10006 | Write variable value by name | Variablenwert über Variablennamen schreiben | BYTE[2048] variable Länge (s. 1.5.3.11) | -
0x22301 | 0x10007-0x10009 | reserved | Reserviert | - | -

Instanzkennung

In der achsspezifischen Schnittstelle beinhalten die Variablennamen keine Instanzkennung.

Beispiel: V.A.ACT_POS

Die achsspezifische Schnittstelle liefert immer die Variablenwerte der aktuell auf diesem Platz einsortierten Achse. Bei Achstausch ändert sich daher der angezeigte Variablenwert.


Übergabeparameter und Rückgabewerte

Stream

Die Übergabeparameter und die Rückgabewerte werden als Stream behandelt.

Mehr:

button Funktion Variable element number"

button Funktion Variable description by index"

button Funktion Variable handle by name"

button Funktion Read variable value by handle"

button Funktion Read variable value by name"

button Funktion Write variable value by handle"

button Funktion Write variable value by name"

button Funktion Extended description by index"

button Achsspezifische Funktion Variable handle by name"

button Achsspezifische Funktion Read variable value by name"

button Achsspezifische Funktion Write variable value by name"


Funktion Variable element number"

TwinCAT CNC: Überblick

Funktion Variable element number

Anzahl von
Variableneinträgen

Diese Funktion liefert für die gewählte Variablenart die Anzahl der vorhandenen Variableneinträge. Ist keine Variablenart angegeben, wird die Gesamtzahl aller verfügbaren Variablen V.E + V.G + V.A zurückgeliefert. Mit den Indizes 0 ...(Anzahl der Elemente  1) kann mit der Funktion Variable description by index die jeweilige Variablenbeschreibung abgefragt werden.

Übergabeparameter:

0 1 ... 256

Bezeichner für Variablenart

mit

Inhalt | Typ | Größe
Bezeichner für Variablenart | STRING V.G - Globale Variablen V.E - Externe Variablen V.A - Achsspezifische Variablen | variabel, max. 256 Byte

=> Gesamtgröße max. 256 Byte

Rückgabewert:

0 4

Anzahl der vorhanden Variableneinträge

mit

Inhalt | Typ | Größe
Anzahl der vorhanden Variableneinträge | UNS32 | fest, max. 4 Byte

=> Gesamtgröße max. 4 Byte


Funktion Variable description by index"

TwinCAT CNC: Überblick

Funktion Variable description by index

Variablen-beschreibung

Diese Funktion liefert für gegebenen Index und Variablenart die zugehörige Variablenbeschreibung. Die Gesamtzahl der vorhanden Variableneinträge kann mit der Funktion Variable element number abgefragt werden.

Übergabeparameter:

0 | 4..260
Index | Bezeichner für Variablenart

mit

Inhalt | Typ | Größe
Index der Variablen | UNS32 | fest, 4 Byte
Bezeichner für Variablenart | STRING V.G - Globale Variablen V.E - Externe Variablen V.A - Achsspezifische Variablen | variabel, max. 256 Byte

ð Gesamtgröße max. 260 Byte

Rückgabewert:

0 | 4 | 8 | 12 | 16 | 20 | 24 | ... | 16 + 4 *n 272 + n * 4
Handle | Variablentyp | Zugriff | Größe | Array-dimension n | max. Index 1 | max. Index 2 | ... | Variablenname

mit

Inhalt | Variablentyp | Größe
Handle der Variablen | UNS32 | fest, 4 Byte
Variablentyp | Enumeration (UNS32) (*) | fest, 4 Byte
Zugriff | Enumeration (UNS32) 1 = READ_ONLY 2 = READ_WRITE | fest, 4 Byte
Größe | UNS32 | fest, 4 Byte
Anzahl der Arraydimensionen n | UNS32 ( = 0, elementare Variable) | fest, 4 Byte
Größter Arrayindex 1  n | UNS32 | variabel, 4 Byte * n
Variablenname | String | variabel, max. 256 Byte

=> Gesamtgröße 276 Byte + Anzahl Arraydimensionen n * 4 Byte, max. 2048 Byte

(*) Enumeration für Variablentyp:

1 = BOOLEAN | 4 = SGN16 | 7 = UNS32
2 = SGN08 | 5 = UNS16 | 8 = REAL64
3 = UNS08 | 6 = SGN32 | 9 = STRING


Funktion Variable handle by name"

TwinCAT CNC: Überblick

Funktion Variable handle by name

Handle über Namen

Übergibt das zum Variablennamen gehörende Handle für den Zugriff auf die Variable. Bei achsspezifischen Variablen ist das Handle abhängig vom Platz (Achsindex) der Achse, an der sie aktuell im Kanal einsortiert ist. Wird die Achse daher durch Achstausch auf einen anderen Achsindex gelegt, muss das Handle erneut ermittelt werden.

Übergabeparameter:

0 1 ... 256

Variablenname

mit

Inhalt | Typ | Größe
Variablenname (mit Instanzkennung bei achsspezifischen Variablen) | STRING | variabel, max. 256 Byte

ð Gesamtgröße 256 Byte

Rückgabewert:

0 4

Handle

mit

Inhalt | Typ | Größe
Handle auf die Variable | UNS32 | fest, max. 4 Byte

=> Gesamtgröße max. 4 Byte


Funktion Read variable value by handle"

TwinCAT CNC: Überblick

Funktion Read variable value by handle

Lesen über Handle

Mit dieser Funktion kann der Wert einer Variablen über ihren Handle gelesen werden.

Übergabeparameter:

0 | 4 | 8 | 12 | 8 + 4 Byte * n 2047
Variablen-handle | Anzahl n Arrayindizes | 1. Index | 2. Index | ...

mit

Inhalt | Typ | Größe
Handle der Variablen | UNS32 | fest, 4 Byte
Anzahl n übertragener Arrayindizes | UNS32 | fest, 4 Byte
1.  n. Arrayindex | UNS32 | variabel, n * 4 Byte

=> Gesamtgröße 8 + Anzahl Arraydimensionen n * 4 Byte, max. 2048 Byte

Rückgabewert:

0 1... 2048

Variablenwert

mit

Inhalt | Typ | Größe
Variablenwert | String, REAL64, SGN32, REAL64[ ], SGN32[ ][ ], ... | variabel, max. 2048 Byte

=> Gesamtgröße max. 2048 Byte


Funktion Read variable value by name"

TwinCAT CNC: Überblick

Funktion Read variable value by name

Lesen über Namen

Mit dieser Funktion kann der Wert einer Variablen über ihren Namen gelesen werden.

Übergabeparameter:

0 1 ... 256

Variablenname

mit

Inhalt | Typ | Größe
Variablenname (mit Instanzkennung bei achsspezifischen Variablen) | STRING | variabel, max. 256 Byte

=> Gesamtgröße 256 Byte

Rückgabewert:

0 1... 2048

Variablenwert

mit

Inhalt | Typ | Größe
Variablenwert | String, REAL64, SGN32, REAL64[ ], SGN32[ ][ ], ... | variabel, max. 2048 Byte

=> Gesamtgröße max. 2048 Byte


Funktion Write variable value by handle"

TwinCAT CNC: Überblick

Funktion Write variable value by handle

Schreiben über
Handle

Mit dieser Fuktion kann der Wert einer Variablen über ihr Handle geändert werden.

Übergabeparameter:

0 | 4 | 8 | 12 | ... | 8 + 4 * n 2047
Variablen- handle | Anzahl n Arrayindizes | 1. Index | 2. Index | ... | Variablenwert

mit

Inhalt | Typ | Größe
Handle der Variablen | UNS32 | fest, 4 Byte
Anzahl n übertragener Arrayindizes | UNS32 | fest, 4 Byte
1.  n. Arrayindex | UNS32 | variabel, n * 4 Byte
Variablenwert | String, REAL64, SGN32, REAL64[ ], SGN32[ ][ ], ... | variabel, max. 2040 Byte

=> Gesamtgröße max. 2048 Byte

Diese Funktion besitzt keinen Rückgabewert.


Funktion Write variable value by name"

TwinCAT CNC: Überblick

Funktion Write variable value by name

Schreiben über
Namen

Mit dieser Funktion kann der Wert einer Variablen über ihren Namen geändert werden. Bei achsspezifischen Variablen muss der Achsname die Instanzkennung (Bsp. Achsnamen V.A.ACT_POS.X) beinhalten.

Übergabeparameter:

0 | 1...256 2...2047
Variablenname | Variablenwert

mit

Inhalt | Typ | Größe
Variablenname (mit Instanzkennung bei achsspezifischen Variablen) | String | var iabel, max. 256 Byte
Variablenwert | String, REAL64, SGN32, REAL64[ ], SGN32[ ][ ], ... | variabel, max. 2047 Byte

=> Gesamtgröße max. 2048 Byte

Diese Funktion besitzt keinen Rückgabewert.


Funktion Extended description by index"

TwinCAT CNC: Überblick

Funktion Extended description by index

Erweiterte
Informationen

Diese Funktion liefert erweiterte Informationen über die Variable. Die übermittelten Daten sind von der jeweiligen Variablenart abhängig.

Übergabeparameter:

0 | 4..260
Index | Bezeichner für Variablenart

mit

Inhalt | Typ | Größe
Index der Variablen | UNS32 | fest, 4 Byte
Bezeichner für Variablenart | STRING V.G - Globale Variablen V.E - Externe Variablen V.A - Achsspezifische Variablen | variabel, max. 256 Byte

=> Gesamtgröße max. 260 Byte

Rückgabewert:

Der Rückgabewert ist abhängig von der Variablenart:

a.) V.G, V.A Variablen -> kein Rückgabewert, da keine erweiterte Beschreibung vorhanden.

b.) V.E. Variablen:

0 | 4 8
Synchronisation | Gültigkeitsbereich

mit:

Inhalt | Typ | Größe
Synchronisation | Enumeration (UNS32) 1 = NO_SYNC 2 = SYNCHRONIZED | fest, 4 Byte
Gültigkeitsbereich | Enumeration (UNS32) 1 = CHANNEL 2 = GLOBAL | fest, 4 Byte

=> Gesamtgröße V.E. Variable 8 Byte, max. 2048 Byte


Achsspezifische Funktion Variable handle by name"

TwinCAT CNC: Überblick

Achsspezifische Funktion Variable handle by name

Handle über Namen

Diese Funktion liefert das Handle für den angegebenen Variablenname zurück, der zu einer auf diesem Platz (Achsindex) einsortierten Achse gehört. Durch Achstausch kann sich daher der über das Handle gelesene Variablenwert ändern.

Übergabeparameter:

0 1 ... 256

Variablenname

mit

Inhalt | Typ | Größe
Variablenname (ohne Instanzkennung) | STRING | variabel, max. 256 Byte

=> Gesamtgröße 256 Byte

Rückgabewert:

0 4

Handle

mit

Inhalt | Typ | Größe
Handle auf die Variable | UNS32 | fest, max. 4 Byte

=> Gesamtgröße max. 4 Byte


Achsspezifische Funktion Read variable value by name"

TwinCAT CNC: Überblick

Achsspezifische Funktion Read variable value by name

Lesen über Namen

Mit dieser Funktion kann der Wert einer Variablen über ihren Variablennamen gelesen werden. Dabei wird immer auf die Variable zugegriffen, die zu der auf diesem Platz (Achsindex) gerade einsortierten Achse gehört.

Übergabeparameter:

0 1 ... 256

Variablenname

mit

Inhalt | Typ | Größe
Variablenname (ohne Instanzkennung) | STRING | variabel, max. 256 Byte

=> Gesamtgröße 256 Byte

Rückgabewert:

0 1... 2048

Variablenwert

mit

Inhalt | Typ | Größe
Variablenwert | String, REAL64, SGN32, REAL64[ ], SGN32[ ][ ], ... | variabel, max. 2048 Byte

=> Gesamtgröße max. 2048 Byte


Achsspezifische Funktion Write variable value by name"

TwinCAT CNC: Überblick

Achsspezifische Funktion Write variable value by name

Schreiben über
Namen

Mit dieser Funktion kann der Wert einer Variablen über ihren Variablennamen geändert werden. Dabei wird immer auf die Variable zugegriffen, die zu der auf diesem Platz (Achsindex) gerade einsortierten Achse gehört.

Übergabeparameter:

0 | 1...256 2...2047
Variablenname | Variablenwert

mit

Inhalt | Typ | Größe
Variablenname (ohne Instanzkennung) | String | variabel, max. 256 Byte
Variablenwert | String, REAL64, SGN32, REAL64[ ], SGN32[ ][ ], ... | variabel, max. 2047 Byte

=> Gesamtgröße max. 2048 Byte

Diese Funktion besitzt keinen Rückgabewert.


ADS Dienste

Interface für ADS-Dienste

Die CNC-Instanzen bieten ein Interface für den Zugriff auf die internen Elemente über folgende ADS-Dienste an:

ADS Read

Mit ADS Read werden Daten aus einem ADS Gerät ausgelesen. Adressiert werden die Daten durch die Index Group und dem Index Offset.

In : IndexGroup, 4 Byte, Index Group der Daten, die gelesen werden sollen.

IndexOffset, 4 Byte, Index Offset der Daten, die gelesen werden sollen.

Length, 4 Byte, Länge der Daten in Bytes, die gelesen werden sollen.

Out : Result, 4 Byte, ADS Fehlernummer.

Length, 4 Byte, Länge der Daten in Bytes, die zurückgeliefert werden.

Daten, n Byte, Daten die zurückgeliefert werden.

ADS Write

Mit ADS Write werden Daten in ein ADS Gerät geschrieben. Adressiert werden die Daten durch die Index Group und dem Index Offset.

In : IndexGroup, 4 Byte, Index Group der Daten, die gelesen werden sollen.

IndexOffset, 4 Byte, Index Offset der Daten, die gelesen werden sollen.

Length, 4 Byte, Länge der Daten in Bytes, die geschrieben werden sollen.

Daten, n Byte, Daten die zu schreiben sind.

Out : Result, 4 Byte, ADS Fehlernummer.

ADS Read & Write

Mit ADS ReadWrite werden Daten in ein ADS Gerät geschrieben. Zusätzlich können Daten aus dem ADS Gerät gelesen werden. Adressiert werden die zu lesenden Daten durch die Index Group und dem Index Offset.

In : IndexGroup, 4 Byte, Index Group der Daten, die gelesen werden sollen.

IndexOffset, 4 Byte, Index Offset der Daten, die gelesen werden sollen.

ReadLength, 4 Byte, Länge der Daten in Bytes, die gelesen werden sollen.

WriteLength, 4 Byte, Länge der Daten in Bytes, die geschrieben werden sollen.

Daten, n Byte, Daten die zu schreiben sind.

Out : Result, 4 Byte, ADS Fehlernummer.

Length, 4 Byte, Länge der Daten in Bytes, die zurückgeliefert werden.

Daten, n Byte, Daten die zurückgeliefert werden.