Hinweise zur Dokumentation

Diese Beschreibung wendet sich ausschließlich an ausgebildetes Fachpersonal der Steuerungs- und Automatisierungstechnik, das mit den geltenden nationalen Normen vertraut ist.
Zur Installation und Inbetriebnahme der Komponenten ist die Beachtung der Dokumentation und der nachfolgenden Hinweise und Erklärungen unbedingt notwendig.
Das Fachpersonal ist verpflichtet, für jede Installation und Inbetriebnahme die zu dem Zeitpunkt veröffentlichte Dokumentation zu verwenden.

Das Fachpersonal hat sicherzustellen, dass die Anwendung bzw. der Einsatz der beschriebenen Produkte alle Sicherheitsanforderungen, einschließlich sämtlicher anwendbaren Gesetze, Vorschriften, Bestimmungen und Normen erfüllt.

Disclaimer

Diese Dokumentation wurde sorgfältig erstellt. Die beschriebenen Produkte werden jedoch ständig weiter entwickelt.
Wir behalten uns das Recht vor, die Dokumentation jederzeit und ohne Ankündigung zu überarbeiten und zu ändern.
Aus den Angaben, Abbildungen und Beschreibungen in dieser Dokumentation können keine Ansprüche auf Änderung bereits gelieferter Produkte geltend gemacht werden.

Marken

Beckhoff®, TwinCAT®, EtherCAT®, EtherCAT G®, EtherCAT G10®, EtherCAT P®, Safety over EtherCAT®, TwinSAFE®, XFC®, XTS® und XPlanar® sind eingetragene und lizenzierte Marken der Beckhoff Automation GmbH.
Die Verwendung anderer in dieser Dokumentation enthaltenen Marken oder Kennzeichen durch Dritte kann zu einer Verletzung von Rechten der Inhaber der entsprechenden Bezeichnungen führen.

Patente

Die EtherCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP1590927, EP1789857, EP1456722, EP2137893, DE102015105702
mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

EtherCAT® ist eine eingetragene Marke und patentierte Technologie lizenziert durch die Beckhoff Automation GmbH, Deutschland.

Copyright

© Beckhoff Automation GmbH & Co. KG, Deutschland.
Weitergabe sowie Vervielfältigung dieses Dokuments, Verwertung und Mitteilung seines Inhalts sind verboten, soweit nicht ausdrücklich gestattet.
Zuwiderhandlungen verpflichten zu Schadenersatz. Alle Rechte für den Fall der Patent-, Gebrauchsmuster- oder Geschmacksmustereintragung vorbehalten.


Beckhoff Information System - German

TwinCAT AdsToJava.dll

Einleitung

Mit der AdsToJava.dll Bibliothek kann der eigenen Software die Kommunikation zu ADS-Geräten ermöglicht werden.

Zu beachten: Um in einem Projekt Zugriff auf die AdsToJava.dll zu haben, muss die TcJavaToAds.jar zu diesem Projekt hinzugefügt werden. Danach werden durch das Importieren des Pakets "de.beckhoff.jni.tcads" die entsprechenden Funktionen, Objekte und Konstanten verfügbar.

Die TcJavaToAds.jar befindet sich im Verzeichnis "TwinCAT\ADS Api\AdsToJava". Die AdsToJava.dll liegt im Unterverzeichnis "XP" (Eine zusätzliche WinCE-Version existiert ebenfalls, sie liegt im Unterordner "CE").

Hier finden Sie Artikel mit Beispielprogrammen in denen die Benutzung der AdsToJava.dll in Kombination mit der TcJavaToAds.jar erklärt ist.


Beckhoff Information System - German

TwinCAT AdsToJava.dll

Einbinden in Eclipse Galileo

Um die AdsToJava.dll im aktuellen Eclipse-Projekt nutzen zu können, muss die TcJavaToAds.jar zu diesem hinzugefügt werden. Dieser Artikel zeigt, wie die Bibliothek hinzuzufügen ist und welche Importe aus dieser benötigt werden (Bitte beachten Sie, dass die Anweisungen auf Ihrem System leicht variiert werden müssen, falls die benutzte Version von dieser abweicht):

Zunächst muss Eclipse gestartet und ein neues Projekt angelegt werden. Danach navigieren Sie bitte zum "Package Explorer" und klicken Sie mit der rechten Maustaste auf ihr neues Projekt. In dem sich öffnenden Menü wählen Sie "Properties".

Accessing the properties window

Im nächsten Schritt wählen Sie die Kategorie "Java Build Path" aus und klicken Sie auf die Schaltfläche "Add External JARs...". In dem nun erscheinenden Dateibrowser suchen Sie die Datei TcJavaToAds.jar.

Sie befindet sich im Verzeichnis "TwinCAT\ADS Api\AdsToJava".

Adding the TcJavaToAds.jar

Zuletzt müssen die Pakete deren Komponenten Sie nutzen wollen importiert werden. Dazu finden Sie dokumentierte Beispielprogramme im Information System.

   import de.beckhoff.jni.AdsConstants;
   import de.beckhoff.jni.Convert;
   import de.beckhoff.jni.JNIByteBuffer;
   import de.beckhoff.jni.JNILong;
   import de.beckhoff.jni.JNIBool;

   import de.beckhoff.jni.tcads.AdsCallDllFunction;
   import de.beckhoff.jni.tcads.AdsCallbackObject;
   import de.beckhoff.jni.tcads.AdsDevName;
   import de.beckhoff.jni.tcads.AdsNotificationAttrib;
   import de.beckhoff.jni.tcads.AdsNotificationHeader;
   import de.beckhoff.jni.tcads.AdsState;
   import de.beckhoff.jni.tcads.AdsSymbolEntry;
   import de.beckhoff.jni.tcads.AdsVersion;
   import de.beckhoff.jni.tcads.AmsAddr;
   import de.beckhoff.jni.tcads.AmsNetId;
   import de.beckhoff.jni.tcads.CallbackListenerAdsRouter;
   import de.beckhoff.jni.tcads.CallbackListenerAdsState;


Beckhoff Information System - German

TwinCAT AdsToJava.dll

Einbinden in Netbeans 6.7.1

Um die AdsToJava.dll im aktuellen Netbeans-Projekt nutzen zu können, muss die TcJavaToAds.jar zu diesem hinzugefügt werden. Dieser Artikel zeigt, wie die Bibliothek hinzuzufügen ist und welche Importe aus dieser benötigt werden (Bitte beachten Sie, dass die Anweisungen auf Ihrem System leicht variiert werden müssen, falls die benutzte Version von dieser abweicht):

Zunächst muss Netbeans gestartet muss ein neues Projekt angelegt werden. Danach navigieren Sie bitte zu "Project" und klicken Sie mit der rechten Maustaste auf ihr neues Projekt. In dem sich öffnenden Menü wähle Sie "Properties".

Accessing the properties window

Im nächsten Schritt wählen Sie die Kategorie "Libraries" aus und klicken Sie auf die Schaltfläche "Add JAR/Folder". In dem nun erscheinenden Dateibrowser suchen Sie die Datei TcJavaToAds.jar.

Sie befindet sich im Verzeichnis "TwinCAT\ADS Api\AdsToJava".

Adding the TcJavaToAds.jar

Zuletzt müssen die Pakete deren Komponenten Sie nutzen wollen importiert werden. Dazu finden Sie dokumentierte Beispielprogramme im Information System.

   import de.beckhoff.jni.AdsConstants;
   import de.beckhoff.jni.Convert;
   import de.beckhoff.jni.JNIByteBuffer;
   import de.beckhoff.jni.JNILong;
   import de.beckhoff.jni.JNIBool;

   import de.beckhoff.jni.tcads.AdsCallDllFunction;
   import de.beckhoff.jni.tcads.AdsCallbackObject;
   import de.beckhoff.jni.tcads.AdsDevName;
   import de.beckhoff.jni.tcads.AdsNotificationAttrib;
   import de.beckhoff.jni.tcads.AdsNotificationHeader;
   import de.beckhoff.jni.tcads.AdsState;
   import de.beckhoff.jni.tcads.AdsSymbolEntry;
   import de.beckhoff.jni.tcads.AdsVersion;
   import de.beckhoff.jni.tcads.AmsAddr;
   import de.beckhoff.jni.tcads.AmsNetId;
   import de.beckhoff.jni.tcads.CallbackListenerAdsRouter;
   import de.beckhoff.jni.tcads.CallbackListenerAdsState;


adsGetDllVersion

Liefert die Versionnummer, Revisionnummer und die Buildnummer der ADS-DLL zurück.

    AdsVersion adsGetDllVersion (
    );

Parameter

Return value

AdsVersion: Gibt eine AdsVersion Objekt, mit entsprechend gesetzter Versionsnummer, Revisionsnummer und Buildnummer zurück.


adsPortOpen

Stellt eine Verbindung (Kommunikationsport) zum TwinCAT Messagerouter her.

Wenn kein TwinCAT-MessageRouter vorhanden ist wird die Funktion AdsPortOpenEx fehlschlagen.

    long adsPortOpen (
    );

Parameter

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsPortClose

Die Verbindung (Kommunikationsport) zum TwinCAT Messagerouter wird beendet.

    long adsPortClose (
    );

Parameter

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsGetLocalAddress

Liefert die lokale NetId und die eigene Portnummer zurück.

    long adsGetLocalAddress (
        AmsAddr		lj_AmsAddr
    );

Parameter

  • AmsAddr lj_AmsAddr: AmsAddr Objekt, welches nach dem Aufruf die lokale NetId und Portnummer enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncWriteReq

Schreibt Daten synchron in ein ADS-Gerät.

    long adsSyncWriteReq (
        AmsAddr		lj_AmsAddr
        long		lj_indexGroup,
        long		lj_indexOffset,
        long		lj_length,
        JNIByteBuffer	lj_pData
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_indexGroup: Index Group
  • long lj_indexOffset: Index Offset
  • long lj_length: Länge der Daten in Byte, die in den ADS-Server geschrieben werden.
  • JNIByteBuffer lj_pData: JNIByteBuffer, dessen Daten in den ADS Server geschrieben werden.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncWriteReqArray

Schreibt Daten synchron in ein ADS-Gerät.

    long adsSyncWriteReqArray (
        AmsAddr		lj_AmsAddr
        long		lj_indexGroup,
        long		lj_indexOffset,
        long		lj_length,
        byte[]		lj_pData
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_indexGroup: Index Group
  • long lj_indexOffset: Index Offset
  • long lj_length: Länge der Daten in Byte, die in den ADS-Server geschrieben werden.
  • byte[] lj_pData: ein Byte-Puffer, dessen Daten in den ADS Server geschrieben werden.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadReq

Liest Daten synchron aus einem ADS-Server.

    long adsSyncReadReq (
        AmsAddr		lj_AmsAddr
        long		lj_indexGroup,
        long		lj_indexOffset,
        long		lj_length,
        JNIByteBuffer	lj_pData
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long: lj_indexGroup Index Group.
  • long: lj_indexOffset Index Offset.
  • long lj_length: Länge der Daten in Byte.
  • JNIByteBuffer lj_pData: JNIByteBuffer, der die zu lesenden Daten aufnimmt.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadReqEx

Liest Daten synchron aus einem ADS-Server.

Der zusätzliche JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

    long adsSyncReadReqEx (
        AmsAddr 	lj_AmsAddr,
        long 		lj_indexGroup,
        long 		lj_indexOffset,
        long 		lj_length,
        JNIByteBuffer 	lj_pData,
        JNILong 	lj_pBytesRead
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long: lj_indexGroup Index Group.
  • long: lj_indexOffset Index Offset.
  • long lj_length: Länge der Daten in Byte.
  • JNIByteBuffer lj_pData: JNIByteBuffer, der die zu lesenden Daten aufnimmt.
  • JNILong: lj_pBytesRead JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadWriteReq

Schreibt Daten synchron in ein ADS-Server und bekommt von dem ADS-Gerät Daten wieder zurück.

    long adsSyncReadWriteReq (
        AmsAddr		lj_AmsAddr
        long		lj_indexGroup,
        long		lj_indexOffset,
        long		lj_lengthRead,
        JNIByteBuffer	lj_pDataRead,
        long		lj_lengthWrite,
        JNIByteBuffer	lj_pDataWrite
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long: lj_indexGroup Index Group.
  • long: lj_indexOffset Index Offset.
  • long lj_lengthRead: Länge der Daten in Byte, die das ADS-Gerät zurückliefert.
  • JNIByteBuffer: lj_pDataRead Buffer mit Daten, die das ADS-Gerät zurückliefert.
  • long: lj_lengthWrite Länge der Daten in Byte, die in das ADS-Gerät geschrieben werden.
  • JNIByteBuffer: lj_pDataWrite Buffer mit Daten, die in das ADS-Gerät geschrieben werden.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadWriteReqEx

Schreibt Daten synchron in einen ADS-Server und bekommt von dem ADS-Gerät Daten wieder zurück (erweiterte Funktion).

Der zusätzliche JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

    long adsSyncReadWriteReqEx (
        AmsAddr 	lj_AmsAddr,
        long 		lj_indexGroup,
        long 		lj_indexOffset,
        long 		lj_lengthRead,
        JNIByteBuffer 	lj_pDataRead,
        long 		lj_lengthWrite,
        JNIByteBuffer 	lj_pDataWrite,
        JNILong 	lj_pBytesRead
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long: lj_indexGroup Index Group.
  • long: lj_indexOffset Index Offset.
  • long lj_lengthRead: Länge der Daten in Byte, die das ADS-Gerät zurückliefert.
  • JNIByteBuffer: lj_pDataRead Puffer mit Daten, die das ADS-Gerät zurückliefert.
  • long: lj_lengthWrite Länge der Daten in Byte, die in das ADS-Gerät geschrieben werden.
  • JNIByteBuffer: lj_pDataWrite Puffer mit Daten, die in das ADS-Gerät geschrieben werden.
  • JNILong: lj_pBytesRead JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadDeviceInfoReq

Liest die Bezeichnung und die Versionsnummer von einem ADS-Server.

    long adsSyncReadDeviceInfoReq (
        AmsAddr		lj_AmsAddr
        AdsDevName	lj_pDevName,
        AdsVersion	lj_pVersion
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • AdsDevName lj_pDevName: AdsDeviceName Objekt, welches nach dem Aufruf den ADS-Gerätenamen enthält.
  • AdsVersion lj_pVersion: AdsDeviceName Objekt, welches nach dem Aufruf die verwendete Versionsnummer, Revisionsnummer und Buildnummer enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncWriteControlReq

Ändert den ADS-Status und den Geräte-Status von einem ADS-Server.

    long adsSyncWriteControlReq (
        AmsAddr		lj_AmsAddr
        int		lj_adsState,
        int		lj_deviceState,
        long		lj_length,
        JNIByteBuffer	lj_pData
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_adsState: Neuer ADS-Status.
  • long lj_deviceState: Neuer Geräte-Status.
  • long lj_length: Länge der Daten in Byte, die zusätzlich in den ADS-Server geschrieben werden.
  • JNIByteBuffer: lj_pDataWrite JNIByteBuffer mit Daten, die zusätzlich in den ADS-Server geschrieben werden.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.

Comments

In addition to change the ADS status and the device status, it is also possible to send data to the ADS server in order to transfer further information. In the current ADS devices (PLC, NC, ...) this data has no further effect. Any ADS device can inform another ADS device of its current state. A distinction is drawn here between the status of the device itself (DeviceState) and the status of the ADS interface of the ADS device (AdsState). The states that the ADS interface can adopt are laid down in the ADS specification.


adsSyncReadStateReq

Liest den ADS-Status und den Geräte-Status von einem ADS-Server.

    long adsSyncReadStateReq (
        AmsAddr		lj_AmsAddr
        AdsState	lj_nAdsState,
        AdsState	lj_nDeviceState
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • AdsState lj_nAdsState: AdsState welcher nach dem Aufruf den aktuellen Ads-Status enthält
  • AdsState lj_nDeviceState: AdsState welcher nach dem Aufruf den aktuellen Geräte-Status enthält

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncAddDeviceNotificationReq

Innerhalb eines ADS-Servers (z.B. SPS) wird eine Notification definiert. Beim Eintreten bestimmter Ereignisse, wird eine Funktion (Callbackfunktion) im ADS-Client aufgerufen.

Ein AdsCallbackObject muss erstellt werden, um Informationen zu den gewünschten Ereignissen erhalten zu können. Diesem muss ein Listener zugewiesen werden, welcher das CallbackListenerAdsState-Interface implementiert. Der Listener wird aufgerufen, sobald das Ereignis eintritt.

    long adsSyncAddDeviceNotificationReq (
        AmsAddr			lj_AmsAddr
        long			lj_indexGroup,
        long			lj_indexOffset,
        AdsNotificationAttrib	lj_pNoteAttrib,
        long			lj_hUser,
        JNILong			lj_pNotification
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_indexGroup: Index Group
  • long lj_indexOffset: Index Offset
  • AdsNotificationAttrib lj_pNoteAttrib: AdsNotificationAttrib Objekt, welches zusaätzliche Informationen zur Ereignismeldung enthält.
  • long lj_hUser: Benutzer-Handle
  • JNILong lj_pNotification: JNILong-Buffer, welcher nach dem Aufruf die Notification-Nummer beinhaltet.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncDelDeviceNotificationReq

Eine zuvor definierte Notification wird in einem ADS-Server gelöscht.

Dies hat keinen Effekt auf das AdsCallbackObjekt.

    long adsSyncDelDeviceNotificationReq (
        AmsAddr		lj_AmsAddr
        JNILong		lj_hNotification
    );

Parameter

  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • JNILong lj_hNotification: JNILong Objekt, welches die zu löschende Notification-Nummer enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncSetTimeout

Verändert die Timeoutzeit für die ADS-Funktionen. Der Standardwert ist 5000ms.

    long adsSyncSetTimeout (
        long		lj_nMs
    );

Parameter

  • long lj_nMs: Timeoutzeit in ms.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncGetTimeout

Liefert die aktuell gesetzte Timeoutzeit für ADS-Aufrufe. Der Standardwert beträgt 5000 ms.

    long adsSyncGetTimeout (
        JNILong		lj_pMs
    );

Parameter

  • JNILong lj_pMs: JNILong Objekt, welches nach dem Aufruf die aktuelle Timeoutzeit beinhaltet.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsAmsRegisterRouterNotification

Mit Hilfe der Funktion AdsAmsRegisterNotificationReq() kann eine Statusänderung des TwinCAT-Routers erkannt werden. Bei jeder Statusänderung wird die angegebende Callback-Funktion aufgerufen. Durch die Funktion AdsAmsUnRegisterNotification() wird die Statusüberwachung des Routers wieder beendet.

Ein AdsCallbackObject muss erstellt werden, um Informationen zu den gewünschten Ereignissen erhalten zu können. Diesem muss ein Listener zugewiesen werden, welcher das CallbackListenerAdsRouter-Interface implementiert. Der Listener wird aufgerufen, sobald das Ereignis eintritt.

    long adsAmsRegisterRouterNotification (
    );

Parameter

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsAmsUnRegisterRouterNotification

Durch die Funktion AdsAmsUnRegisterNotification() wird die Statusüberwachung des TwinCAT-Routers beendet. Siehe auch AdsAmsRegisterNotificationReq().

Dies hat keinen Effekt auf das AdsCallbackObjekt.

    long adsAmsUnRegisterRouterNotification (
    );

Parameter

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsAmsPortEnabled

Liefert einen Wahrheitswert der angibt, ob der übergebene Port geöffnet ist.

    long adsAmsPortEnabled (
        JNIBool  		lj_pEnabled
    );

Parameter

  • JNIBool: j_pEnabled JNIBool-Buffer, welcher nach dem Aufruf den Wahrheitswert enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


getAdsCallbackObject

Gibt das zugehörige AdsCallbackObjekt zurück.

    AdsCallbackObject getAdsCallbackObject (
    );

Parameter

Return value

AdsCallbackObject: Das AdsCallbackObject Objekt


Übersicht

TwinCAT TcAdsToJava: Referenz

Erweiterte Funktionen (für Multithreaded Applikationen)

Mit den bisherigen Funktionen konnte nur ein ADS-Port pro Prozess erzeugt werden. Dies ist vor allem für Mulithreaded Anwendungen nicht ausreichend, da die einzelnen ADS Kommandos sich gegenseitig blockieren.

Mit den neuen Funktionen ist es nun möglich mehr als einen Port zu verwenden. Damit könnte z.B. pro Thread ein ADS-Port verwendet werden. Mit Hilfe der Funktion AdsPortOpenEx können neue Ports geöffnet werden. Die zurückgelieferte Port-Nummer wird dann als Parameter an die einzelnen Sync-Funktionen übergeben.


adsPortOpenEx

Stellt eine Verbindung (Kommunikationsport) zum TwinCAT Messagerouter her. Im Gegensatz zu AdsPortOpen wird jedesmal ein neuer ADS-Port geöffnet. Den als threadsicher markierten Methoden wird die von AdsPortOpenEx zurückgegebene Port-Nummer als Parameter übergeben.

Wenn kein TwinCAT-MessageRouter vorhanden ist wird die Funktion AdsPortOpenEx fehlschlagen.

    long adsPortOpenEx (
    );

Parameter

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsPortCloseEx

Die Verbindung (Kommunikationsport) zum TwinCAT Messagerouter wird beendet. Der Port der geschlossen werden soll, muss vorher durch einen Aufruf von AdsPortOpenEx geöffnet worden sein.

    long adsPortCloseEx (
        long		lj_port
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsGetLocalAddressEx

Liefert die lokale NetId und die eigene Portnummer zurück (threadsicher).

    long adsGetLocalAddressEx (
        long		lj_port
        AmsAddr		lj_AmsAddr
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: AmsAddr Objekt, welches nach dem Aufruf die lokale NetId und Portnummer enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncWriteReqEx

Schreibt Daten synchron in ein ADS-Gerät (threadsicher).

    long adsSyncWriteReqEx (
        long		lj_port
        AmsAddr		lj_AmsAddr
        long		lj_indexGroup,
        long		lj_indexOffset,
        long		lj_length,
        JNIByteBuffer	lj_pData
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_indexGroup: Index Group
  • long lj_indexOffset: Index Offset
  • long lj_length: Länge der Daten in Byte, die in den ADS-Server geschrieben werden.
  • JNIByteBuffer lj_pData: JNIByteBuffer, dessen Daten in den ADS Server geschrieben werden.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncWriteReqExArray

Schreibt Daten synchron in ein ADS-Gerät (threadsicher).

    long adsSyncWriteReqExArray (
        long		lj_port
        AmsAddr		lj_AmsAddr
        long		lj_indexGroup,
        long		lj_indexOffset,
        long		lj_length,
        byte[]		lj_pData
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_indexGroup: Index Group
  • long lj_indexOffset: Index Offset
  • long lj_length: Länge der Daten in Byte, die in den ADS-Server geschrieben werden.
  • byte[] lj_pData: ein Byte-Array-Buffer, dessen Daten in den ADS Server geschrieben werden.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadReqEx2

Liest Daten synchron aus einem ADS-Server (threadsicher).

Der zusätzliche JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

    long adsSyncReadReqEx2 (
        long		lj_port
        AmsAddr 	lj_AmsAddr,
        long 		lj_indexGroup,
        long 		lj_indexOffset,
        long 		lj_length,
        JNIByteBuffer 	lj_pData,
        JNILong 	lj_pBytesRead
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long: lj_indexGroup Index Group.
  • long: lj_indexOffset Index Offset.
  • long lj_length: Länge der Daten in Byte.
  • JNIByteBuffer lj_pData: JNIByteBuffer, der die zu lesenden Daten aufnimmt.
  • JNILong: lj_pBytesRead JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadWriteReqEx2

Schreibt Daten synchron in ein ADS-Server und bekommt von dem ADS-Gerät Daten wieder zurück (threadsicher).

Der zusätzliche JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

    long adsSyncReadWriteReqEx2 (
        long		lj_port
        AmsAddr 	lj_AmsAddr,
        long 		lj_indexGroup,
        long 		lj_indexOffset,
        long 		lj_lengthRead,
        JNIByteBuffer 	lj_pDataRead,
        long 		lj_lengthWrite,
        JNIByteBuffer 	lj_pDataWrite,
        JNILong 	lj_pBytesRead
    );

Parameter

  • long: lj_port Portnummer eines Ads-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long: lj_indexGroup Index Group.
  • long: lj_indexOffset Index Offset.
  • long lj_lengthRead: Länge der Daten in Byte, die das ADS-Gerät zurückliefert.
  • JNIByteBuffer: lj_pDataRead Puffer mit Daten, die das ADS-Gerät zurückliefert.
  • long: lj_lengthWrite Länge der Daten in Byte, die in das ADS-Gerät geschrieben werden.
  • JNIByteBuffer: lj_pDataWrite Puffer mit Daten, die in das ADS-Gerät geschrieben werden.
  • JNILong: lj_pBytesRead JNILong-Buffer beinhaltet nach dem Aufruf die Zahl der gelesenen Bytes.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncReadDeviceInfoReqEx

Liest die Bezeichnung und die Versionsnummer von einem ADS-Server (threadsafe).

    long adsSyncReadDeviceInfoReqEx (
        long		lj_port
        AmsAddr		lj_AmsAddr
        AdsDevName	lj_pDevName,
        AdsVersion	lj_pVersion
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • AdsDevName lj_pDevName: AdsDeviceName Objekt, welches nach dem Aufruf den ADS-Gerätenamen enthält.
  • AdsVersion lj_pVersion: AdsDeviceName Objekt, welches nach dem Aufruf die verwendete Versionsnummer, Revisionsnummer und Buildnummer enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncWriteControlReqEx

Ändert den ADS-Status und den Geräte-Status von einem ADS-Server (threadsicher).

    long adsSyncWriteControlReqEx (
        long		lj_port
        AmsAddr		lj_AmsAddr
        int		lj_adsState,
        int		lj_deviceState,
        long		lj_length,
        JNIByteBuffer	lj_pData
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_adsState: Neuer ADS-Status.
  • long lj_deviceState: Neuer Geräte-Status.
  • long lj_length: Länge der Daten in Byte, die in den ADS-Server geschrieben werden.
  • byte[] lj_pData: ein JNIByteBuffer-Objekt, dessen Daten zusätzlich in den ADS Server geschrieben werden.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.

Comments

In addition to change the ADS status and the device status, it is also possible to send data to the ADS server in order to transfer further information. In the current ADS devices (PLC, NC, ...) this data has no further effect. Any ADS device can inform another ADS device of its current state. A distinction is drawn here between the status of the device itself (DeviceState) and the status of the ADS interface of the ADS device (AdsState). The states that the ADS interface can adopt are laid down in the ADS specification.


adsSyncReadStateReqEx

Liest den ADS-Status und den Geräte-Status von einem ADS-Server (threadsicher).

    long adsSyncReadStateReqEx (
        long		lj_port
        AmsAddr		lj_AmsAddr
        AdsState	lj_nAdsState,
        AdsState	lj_nDeviceState
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • AdsState lj_nAdsState: AdsState welcher nach dem Aufruf den aktuellen Ads-Status enthält
  • AdsState lj_nDeviceState: AdsState welcher nach dem Aufruf den aktuellen Geräte-Status enthält

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncAddDeviceNotificationReqEx

Innerhalb eines ADS-Servers (z.B. SPS) wird eine Notification definiert. Beim Eintreten bestimmter Ereignisse, wird eine Funktion (Callbackfunktion) im ADS-Client aufgerufen (threadsicher).

Ein AdsCallbackObject muss erstellt werden, um Informationen zu den gewünschten Ereignissen erhalten zu können. Diesem muss ein Listener zugewiesen werden, welcher das CallbackListenerAdsState-Interface implementiert. Der Listener wird aufgerufen, sobald das Ereignis eintritt.

    long adsSyncAddDeviceNotificationReqEx (
        long			lj_port
        AmsAddr			lj_AmsAddr
        long			lj_indexGroup,
        long			lj_indexOffset,
        AdsNotificationAttrib	lj_pNoteAttrib,
        long			lj_hUser,
        JNILong			lj_pNotification
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • long lj_indexGroup: Index Group
  • long lj_indexOffset: Index Offset
  • AdsNotificationAttrib lj_pNoteAttrib: AdsNotificationAttrib Objekt, welches zusaätzliche Informationen zur Ereignismeldung enthält.
  • long lj_hUser: Benutzer-Handle
  • JNILong lj_pNotification: JNILong-Buffer, welcher nach dem Aufruf die Notification-Nummer beinhaltet.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncDelDeviceNotificationReqEx

Eine zuvor definierte Notification wird in einem ADS-Server gelöscht (threadsicher).

Dies hat keinen Effekt auf das AdsCallbackObjekt.

    long adsSyncDelDeviceNotificationReqEx (
        long		lj_port
        AmsAddr		lj_AmsAddr
        JNILong		lj_hNotification
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • AmsAddr lj_AmsAddr: Objekt mit NetId und Portnummer vom ADS-Server.
  • JNILong lj_hNotification: JNILong Objekt, welches die zu löschende Notification-Nummer enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncSetTimeoutEx

Verändert die Timeoutzeit für die ADS-Funktionen. Der Standardwert ist 5000ms (threadsicher).

    long adsSyncSetTimeoutEx (
        long		lj_port
        long		lj_nMs
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • long lj_nMs: Timeoutzeit in ms.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsSyncGetTimeoutEx

Liefert die aktuell gesetzte Timeoutzeit für ADS-Aufrufe. Der Standardwert beträgt 5000 ms (threadsicher).

    long adsSyncGetTimeoutEx (
        long		lj_port
        JNILong		lj_pMs
    );

Parameter

  • long: lj_port Portnummer eines ADS-Ports, der zuvor mit AdsPortOpenEx oder AdsPortOpen geöffnet worden ist.
  • JNILong lj_pMs: JNILong Objekt, welches nach dem Aufruf die aktuelle Timeoutzeit beinhaltet.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


adsAmsPortEnabledEx

Liefert einen Wahrheitswert der angibt, ob der übergebene Port geöffnet ist (threadsicher).

    long adsAmsPortEnabledEx (
        long		lj_port
        JNIBool  	lj_pEnabled
    );

Parameter

  • JNIBool: j_pEnabled JNIBool-Buffer, welcher nach dem Aufruf den Wahrheitswert enthält.

Rückgabewert

long: Gibt den Fehlerstatus der Funktion zurück.


ADS Return Codes

Error codes: 0x000..., 0x500..., 0x700..., 0x1000..., 0x274C...

Global Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x0 | 0 | no error |  |
0x1 | 1 | Internal error |  |
0x2 | 2 | No Rtime |  |
0x3 | 3 | Allocation locked memory error |  |
0x4 | 4 | Insert mailbox error | No ADS mailbox was available to process this message. | Reduce the number of ADS calls (e.g ADS-Sum commands or Max Delay Parameter)
0x5 | 5 | Wrong receive HMSG |  |
0x6 | 6 | target port not found | ADS Server not started |
0x7 | 7 | target machine not found | Missing ADS routes |
0x8 | 8 | Unknown command ID |  |
0x9 | 9 | Bad task ID |  |
0xA | 10 | No IO |  |
0xB | 11 | Unknown ADS command |  |
0xC | 12 | Win 32 error |  |
0xD | 13 | Port not connected |  |
0xE | 14 | Invalid ADS length |  |
0xF | 15 | Invalid AMS Net ID |  |
0x10 | 16 | Low Installation level |  |
0x11 | 17 | No debug available |  |
0x12 | 18 | Port disabled |  |
0x13 | 19 | Port already connected |  |
0x14 | 20 | ADS Sync Win32 error |  |
0x15 | 21 | ADS Sync Timeout |  |
0x16 | 22 | ADS Sync AMS error |  |
0x17 | 23 | ADS Sync no index map |  |
0x18 | 24 | Invalid ADS port |  |
0x19 | 25 | No memory |  |
0x1A | 26 | TCP send error |  |
0x1B | 27 | Host unreachable |  |
0x1C | 28 | Invalid AMS fragment |  |

Router Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x500 | 1280 | ROUTERERR_NOLOCKEDMEMORY | No locked memory can be allocated |
0x501 | 1281 | ROUTERERR_RESIZEMEMORY | The size of the router memory could not be changed |
0x502 | 1282 | ROUTERERR_MAILBOXFULL | The mailbox has reached the maximum number of possible messages. The current sent message was rejected | Check the connection between the communication partners
0x503 | 1283 | ROUTERERR_DEBUGBOXFULL | The mailbox has reached the maximum number of possible messages. The sent message will not be displayed in the debug monitor | Check the connection to the debug monitor
0x504 | 1284 | ROUTERERR_UNKNOWNPORTTYPE | The port type is unknown |
0x505 | 1285 | ROUTERERR_NOTINITIALIZED | Router is not initialised |
0x506 | 1286 | ROUTERERR_PORTALREADYINUSE | The desired port number is already assigned |
0x507 | 1287 | ROUTERERR_NOTREGISTERED | Port not registered |
0x508 | 1288 | ROUTERERR_NOMOREQUEUES | The maximum number of Ports reached |
0x509 | 1289 | ROUTERERR_INVALIDPORT | The port is invalid. |
0x50A | 1290 | ROUTERERR_NOTACTIVATED | TwinCAT Router not active |
0x50B | 1291 | ROUTERERR_FRAGMENTBOXFULL |  |
0x50C | 1292 | ROUTERERR_FRAGMENTTIMEOUT |  |
0x50D | 1293 | ROUTERERR_TOBEREMOVED |  |

General ADS Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x700 | 1792 | error class <device error> |  |
0x701 | 1793 | Service is not supported by server |  |
0x702 | 1794 | invalid index group |  |
0x703 | 1795 | invalid index offset |  |
0x704 | 1796 | reading/writing not permitted |  |
0x705 | 1797 | parameter size not correct |  |
0x706 | 1798 | invalid parameter value(s) |  |
0x707 | 1799 | device is not in a ready state |  |
0x708 | 1800 | device is busy |  |
0x709 | 1801 | invalid context (must be in Windows) |  |
0x70A | 1802 | out of memory |  |
0x70B | 1803 | invalid parameter value(s) |  |
0x70C | 1804 | not found (files, ...) |  |
0x70D | 1805 | syntax error in command or file |  |
0x70E | 1806 | objects do not match |  |
0x70F | 1807 | object already exists |  |
0x710 | 1808 | symbol not found |  |
0x711 | 1809 | symbol version invalid | Onlinechange | Release handle and get a new one
0x712 | 1810 | server is in invalid state |  |
0x713 | 1811 | AdsTransMode not supported |  |
0x714 | 1812 | Notification handle is invalid | Onlinechange | Release handle and get a new one
0x715 | 1813 | Notification client not registered |  |
0x716 | 1814 | no more notification handles |  |
0x717 | 1815 | size for watch too big |  |
0x718 | 1816 | device not initialized |  |
0x719 | 1817 | device has a timeout |  |
0x71A | 1818 | query interface failed |  |
0x71B | 1819 | wrong interface required |  |
0x71C | 1820 | class ID is invalid |  |
0x71D | 1821 | object ID is invalid |  |
0x71E | 1822 | request is pending |  |
0x71F | 1823 | request is aborted |  |
0x720 | 1824 | signal warning |  |
0x721 | 1825 | invalid array index |  |
0x722 | 1826 | symbol not active | Onlinechange | Release handle and get a new one
0x723 | 1827 | access denied |  |
0x724 | 1828 | missing license |  | Activate license for TwinCAT 3 function
0x72c | 1836 | exception occured during system start |  | Check each device transistions
0x740 | 1856 | Error class <client error> |  |
0x741 | 1857 | invalid parameter at service |  |
0x742 | 1858 | polling list is empty |  |
0x743 | 1859 | var connection already in use |  |
0x744 | 1860 | invoke ID in use |  |
0x745 | 1861 | timeout elapsed |  | Check ADS routes of sender and receiver and your firewall setting
0x746 | 1862 | error in win32 subsystem |  |
0x747 | 1863 | Invalid client timeout value |  |
0x748 | 1864 | ads-port not opened |  |
0x750 | 1872 | internal error in ads sync |  |
0x751 | 1873 | hash table overflow |  |
0x752 | 1874 | key not found in hash |  |
0x753 | 1875 | no more symbols in cache |  |
0x754 | 1876 | invalid response received |  |
0x755 | 1877 | sync port is locked |  |

RTime Error Codes

Hex | Dec | Description | Possible Causes
0x1000 | 4096 | RTERR_INTERNAL | Internal fatal error in the TwinCAT real-time system
0x1001 | 4097 | RTERR_BADTIMERPERIODS | Timer value not vaild
0x1002 | 4098 | RTERR_INVALIDTASKPTR | Task pointer has the invalid value ZERO
0x1003 | 4099 | RTERR_INVALIDSTACKPTR | Task stack pointer has the invalid value ZERO
0x1004 | 4100 | RTERR_PRIOEXISTS | The demand task priority is already assigned
0x1005 | 4101 | RTERR_NOMORETCB | No more free TCB (Task Control Block) available. Maximum number of TCBs is 64
0x1006 | 4102 | RTERR_NOMORESEMAS | No more free semaphores available. Maximum number of semaphores is 64
0x1007 | 4103 | RTERR_NOMOREQUEUES | No more free queue available. Maximum number of queue is 64
0x1008 | 4104 | TwinCAT reserved. |
0x1009 | 4105 | TwinCAT reserved. |
0x100A | 4106 | TwinCAT reserved. |
0x100B | 4107 | TwinCAT reserved. |
0x100C | 4108 | TwinCAT reserved. |
0x100D | 4109 | RTERR_EXTIRQALREADYDEF | An external synchronisation interrupt is already applied
0x100E | 4110 | RTERR_EXTIRQNOTDEF | No external synchronsiation interrupt applied
0x100F | 4111 | RTERR_EXTIRQINSTALLFAILED | The apply of the external synchronisation interrupt failed
0x1010 | 4112 | RTERR_IRQLNOTLESSOREQUAL | Call of a service function in the wrong context
0x1017 | 4119 | RTERR_VMXNOTSUPPORTED | Intel VT-x extension is not supported.
0x1018 | 4120 | RTERR_VMXDISABLED | Intel VT-x extension is not enabled in BIOS.
0x1019 | 4121 | RTERR_VMXCONTROLSMISSING | Missing feature in Intel VT-x extension.
0x101A | 4122 | RTERR_VMXENABLEFAILS | Enabling Intel VT-x fails.

TCP Winsock Error Codes

Hex | Dec | Description | Possible Causes | Solution
0x274c | 10060 | A socket operation was attempted to an unreachable host | Host unreachable | Check network connection via ping
0x274d | 10061 | A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. | Host unreachable | Check network connection via ping
0x2751 | 10065 | No connection could be made because the target machine actively refused it |  |
 |  | Further Winsock error codes: Win32 Error Codes |  |