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.


Übersicht

TwinCAT IO mit FC310x, FC510x und FC520x

TwinCAT IO enthält die Gerätetreiber und die Konfigurationssoftware (TwinCAT System Manager) für die PC-Karten FC310x, FC510x und FC520x unter Windows NT, 2000 und XP.
Die FcIoApi-DLL bietet die Schnittstellen für beliebige Windows-Anwendungen zum Zugriff auf die Prozessdaten dieser PC-Karten.


Übersicht

Für die Konfiguration des Feldbusses mit dem TwinCAT System Manager sei auf die Beschreibungen der PC-Karten FC310x, FC510x und FC520x verwiesen. Auch die Diagnoseschnittstelle des jeweiligen Feldbusses ist dort ausführlich beschrieben.

Neben der Konfiguration des Feldbusses ist im TwinCAT System Manager noch eine IO-Task einzurichten, mit der die entsprechende Feldbuskarte nachgetriggert wird. Die Zykluszeit der IO-Task entspricht der Zykluszeit auf dem Feldbus. Dazu ist mindestens eine Variable des Feldbus Devices (FC310x, FC510x bzw. FC520x) mit einer Variablen der IO-Task zu verknüpfen.


Einrichten einer IO-Task

Im Baum des TwinCAT System Manager ist unter Echtzeit-Konfiguration eine IO-Task einzurichten:

Mit der rechten Maustaste ist auf Zusätzliche Tasks zu klicken, um eine Task (IO-Task) anzufügen:

In dem erscheinenden Dialog kann der Name der Task angepasst werden:

In der rechten Fensterhälfte können jetzt die Einstellungen der IO-Task angepasst werden:

Die Check-Box Auto-Start muss angeklickt, die Zykluszeit des Feldbusses kann dann unter Zyklusticks angepasst werden. Weiterhin wird noch der Port für die Funktionsaufrufe der FcIoApi-DLL benötigt, alle anderen Parameter brauchen nicht verändert werden.

Verknüpfen der IO-Task mit dem Feldbus-Device

Weiterhin muss mindestens eine Variable der IO-Task mit dem Feldbus Device verknüpft werden. Dazu ist im Baum auf die Eingänge der IO-Task zu gehen:

Durch Klicken der rechten Maustaste erscheint ein Pop-Up-Menü, über das eine neue Variable angefügt werden kann:

In dem Variablen-Dialog können Name der Variablen, Start Address (Adresse im Prozessabbild der IO-Task) und der Variablentyp eingegeben werden:

Auf dem Karteireiter "Variable" im rechten Fenster wird jetzt durch Klicken des Buttons Verknüpft m. die zugeordnete Variable des Feldbus Devices ausgewählt:

In dem Dialog "Variablenverknüpfung" werden jetzt die Variablen angezeigt, die verknüpft werden können. Die entsprechende Variable ist auszuwählen und der Dialog mit Okay zu verlassen:

Auf dem Karteireiter "Variable" ist jetzt die Verknüpfungsinformation eingetragen.

Starten des Feldbusses

Das Projekt ist schließlich noch in der Registry zu speichern (über das Regsitry-Icon im System-Manager) und TwinCAT zu starten (über das TwinCAT-Icon im TwinCAT System Manager oder in der Icon-Leiste unten rechts).

Dann sollte der Feldbus hochlaufen, über den System-Manager können die Zustände diagnostiziert oder Ausgänge gesetzt werden.

Dokumente

Im Folgenden werden die Funktionalitäten der Beckhoff PCI-Karte FC310x (als Master und Slave) für den Einsatz unter TwinCAT (NCI, PTP, PLC und IO) beschrieben.
Die folgenden Kapitel gelten auch für die PROFIBUS-Anschaltung des CX1000 (CX1500-M310 (Master) bzw. CX1500-B310 (Slave)), die Bezeichnung FC310x bezieht sich dann auch auf die CX1500-M310-Master bzw. CX1500-B310-Slave-Anschaltung.


Zugriff auf die Prozessdaten des Feldbusses

Der konsistente Zugriff über die IO-Task funktioniert nur für die Variablen des Feldbusses, die mit der IO-Task verknüpft sind. Wie weiter oben bei der Konfiguration für eine Eingangs-Variable gezeigt, müssen für alle Feldbus-Variablen, auf die konsistent zugegriffen werden soll, entsprechende Variablen der IO-Task angelegt und mit diesen verknüpft werden. Die Offsets der Zugriffsfunktionen beziehen sich auf die Adressen der Variablen der IO-Task (die Variable BoxErrorCounter befindet sich auf Adresse 0 des Eingangsprozessabbildes der IO-Task):

Das Prozessabbild der IO-Task kann in Form einer H-Datei exportiert werden, wenn man mit der rechten Maustaste auf die IO-Task im Baum klickt:

StartImageUpdate

long StartImageUpdate(int portNo, int time, int outpLength, int inpLength);

Die Funktion StartImageUpdate muss beim Hochlauf der Anwendung einmal aufgerufen werden, um den Timer zu starten, der den konsistenten Zugriff auf die Prozessdaten durchführt. Dabei sind der Port portNo der IO-Task, die Zykluszeit time des Timers in ms sowie die Länge des Eingangs- bzw. Ausgangs-Prozessabbildes inpLength bzw. outpLength der IO-Task (entsprechend der bei der Definition der Variablen erzeugten Adressen) anzugeben. Innerhalb der Timer-Routine wird das Eingangs-Prozessabbild der IO-Task konsistent gelesen und lokal zwischengespeichert, so dass der Zugriff auf die Eingangs-Prozessdaten mit der Funktion ReadInputs sehr schnell geht. Das Ausgangs-Prozessabbild der IO-Task wird nur mit dem lokalen Prozessabbild konsistent aktualisiert, wenn durch einen Aufruf von WriteOutputs auf das lokale Prozessabbild zugegriffen wurde. Auch der Aufruf von WriteOutputs geht daher sehr schnell.

Rückgabewerte:

0: kein Fehler

-1: Timer konnte nicht gestartet werden

-2: AMS-Adresse konnte nicht gelesen werden

-3: nicht genügend Speicher für lokales Prozessabbild

-4: Timer läuft bereits

StartImageUpdateWithWd

long StartImageUpdateWithWd(int portNo, int time, int outpLength, int inpLength, int wdTime);

Die Funktion StartImageUpdateWithWd beinhaltet die gleiche Funktionalität wie StartImageUpdate und startet zusätzlich noch einen Watchdog. Der Watchdog wird nachgetriggert, wenn die Funktionen ReadInputs oder WriteOutputs aufgerufen werden. Ist das innerhalb der Watchdog-Time nicht der Fall, wird ein IO-Reset auf allen Devices durchgeführt (das führt zum Abschalten der Ausgänge) und die Outputs im Prozessabbild werden auf 0 gesetzt.

StopImageUpdate

long StopImageUpdate(void);

Die Funktion StopImageUpdate muss nur aufgerufen werden, wenn beim Beenden der Anwendung die DLL nicht automatisch entladen wird (ist bei z.B. bei Anwendung auf LabView-CVI-Basis der Fall).

Rückgabewerte:

0: kein Fehler

-5: DLL nicht mehr aktiv

ReadInputs

long ReadInputs(int offset, int length, unsigned char * pData);

Mit der Funktion ReadInputs wird das lokale Eingangs-Prozessabbild bzw. Teile davon gelesen. Dabei sind der offset innerhalb des Eingangs-Prozessabbildes der IO-Task, die Länge length der zu lesenden Daten und ein Pointer pData auf einen Speicherbereich, in den die Eingangsdaten kopiert werden können, übergeben werden.

Rückgabewerte:

0: kein Fehler

-1: Timer läuft nicht

-2: Offset ist zu groß

-5: DLL nicht mehr aktiv

WriteOutputs

long WriteOutputs(int offset, int length, unsigned char * pData);

Mit der Funktion WriteInputs wird das lokale Ausgangs-Prozessabbild bzw. Teile davon beschrieben. Dabei sind der offset innerhalb des Ausgangs-Prozessabbildes der IO-Task, die Länge length der zu lesenden Daten und ein Pointer pData auf einen Speicherbereich auf die Ausgangsdaten, übergeben werden.

Rückgabewerte:

0: kein Fehler

-1: Timer läuft nicht

-2: Offset ist zu groß

-5: DLL nicht mehr aktiv


Zugriff auf die Prozessdaten des Feldbusses

TwinCAT IO und FCxxxx

Direkter Zugriff auf DP-RAM

Alternativ zum konsistenten Zugriff über die IO-Task kann direkt auf das DP-RAM zugegriffen werden. Dabei ist nur WORD-Konsistenz möglich, dafür ist er maximal schnell, die Totzeit (Alter einer gelesenen Variable bzw. Verzögerungszeit bis eine geschriebene Variable auf dem Feldbus gesendet wird) ist maximal so groß wie die Zykluszeit der IO-Task. Es ist zu beachten, dass die Ausgangsvariablen des Feldbusses, die über direkten Zugriff beschrieben werden, nicht mit Variablen der IO- Task verknüpft sein dürfen, da diese sonst durch die IO-Task wieder überschrieben werden. Die Offsets der Zugriffsfunktionen beziehen sich auf die Variablenadressen des Feldbus Devices, d. h. die Adresse ist auf dem Karteireiter "Variable" bei der entsprechenden Variablen unter dem Feldbus Devices nachzuschauen (in dem abgebildeten Beispiel handelt es sich um die Adresse 4.1):

Bei den PROFIBUS-PC-Karten FC310x ist zu beachten, dass die 4 Bytes vor jeder ersten Eingangs- und Ausgangsvariable eines PROFIBUS-Slaves für den PROFIBUS-Protokollheader verwendet werden (daher ist der kleinste Offset einer Variablen an der FC310x auch 4), ein Beschreiben dieser jeweiligen 4 Bytes führt zu Störungen auf dem PROFIBUS. Daher sollte darauf geachtet werden, dass beim direkten Zugriff nur auf die Bereiche zugegriffen wird, in denen sich tatsächlich Variablen befinden, eine Übersicht kann man sich im rechten Fenster unten anzeigen lassen, wenn man im Baum das Prozessabbild des Devices anklickt:

Wenn man mit der rechten Maustaste auf die Liste klickt, kann diese auch gedruckt oder z.B. nach Excel kopiert werden.

Bei den Zugriffsfunktionen muss die DP-RAM-Adresse übergeben werden, die unter PCI Bus/Slot auf dem Karteireiter "FC310x", "FC510x" bzw. "FC520x" gelesen werden kann, wenn man im Baum auf das Feldbus Device klickt:

ReadInputsDirect

long _stdcall ReadInputsDirect(unsigned long dpRamAddress, int offset, int length, unsigned char * pData);

Mit der Funktion ReadInputsDirect werden Eingangsvariablen des Feldbus-Devices direkt aus dem DP-RAM gelesen, der Aufruf der Funktion geht sehr schnell (ca. je Wort ca. 1,5 µs). Dabei sind die DP-RAM-Adresse dpRamAddress des Feldbus-Devices, der offset und die Länge length der Eingangsvariablen im DP-RAM und ein Pointer pData auf einen Speicherbereich, in den die Eingangsdaten kopiert werden können, übergeben werden.

Rückgabewerte:

0: kein Fehler

-1: DP-RAM-Pointer konnte nicht alloziert werden

-2: Offset ist zu groß

-3: DP-RAM-Adresse anders als bei den vorherigen Aufrufen von ReadInputsDirect oder WriteOutputsDirect

-5: DLL nicht mehr aktiv

WriteOutputsDirect

long _stdcall WriteOutputsDirect(unsigned long dpRamAddress, int offset, int length, unsigned char * pData);

Mit der Funktion WriteOutputsDirect werden Ausgangsvariablen des Feldbus-Devices direkt in das DP-RAM geschrieben, der Aufruf der Funktion geht sehr schnell (ca. 1,5 µs je Bereich). Dabei sind die DP-RAM-Adresse dpRamAddress des Feldbus-Devices, der offset und die Länge length der Ausgangsvariablen im DP-RAM und ein Pointer pData auf die Ausgangsdaten, übergeben werden.

Rückgabewerte:

0: kein Fehler

-1: DP-RAM-Pointer konnte nicht alloziert werden

-2: Offset ist zu groß

-3: DP-RAM-Adresse anders als bei den vorherigen Aufrufen von ReadInputsDirect oder WriteOutputsDirect

-5: DLL nicht mehr aktiv

GetDirectInputPointer

void * GetDirectInputPointer(unsigned long dpRamAddress);

Mit der Funktion GetDirectInputPointer kann ein Pointer auf das Eingangsprozessabbild im DP-RAM geholt werden. Die Adressen der Eingangsvariablen müssen, wie oben beschrieben, aus dem System Manager entnommen werden. Dabei ist die DP-RAM-Adresse dpRamAddress des Feldbus Devices zu übergeben.

Rückgabewerte:

0: Fehler

!= 0: Pointer auf Eingangsvariablen im DP-RAM

GetDirectOutputPointer

void * GetDirectOutputPointer(unsigned long dpRamAddress);

Mit der Funktion GetDirectOutputPointer kann ein Pointer auf das Ausgangsprozessabbild im DP-RAM geholt werden. Die Adressen der Ausgangsvariablen müssen, wie oben beschrieben, aus dem System Manager entnommen werden. Dabei ist die DP-RAM-Adresse dpRamAddress des Feldbus Devices zu übergeben.

Rückgabewerte:

0: Fehler

!= 0: Pointer auf Eingangsvariablen im DP-RAM