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

Die TwinCAT SPS Bibliothek COMlibBC bietet Funktionsbausteine und Datenstrukturen für die serielle Datenkommunikation mit den Beckhoff Buscontrollern BCxxxx. Die COMlibBC unterstützt die seriellen Beckhoff Busklemmen KL6xxx.

Die COMlibBC bietet Bausteine für byteweises Senden und Empfangen von Daten. Alle Bausteine sind mehrfach instanzierbar, so dass mehrere serielle Schnittstellen parallel bedient werden können.

Die seriellen Busklemmen sind in einer 3-Byte und in einer 5-Byte Version verfügbar. Um den Speicher des Buscontrollers BCxxxx nicht unnötig zu belasten steht für den 5-Byte Modus eine modifizierte Bibliothek ComLibBC5B zur Verfügung. Setzen Sie also je nach verwendeter Klemmenhardware eine der beiden Bibliotheken ein. Im Normalfall wird ab Werk die 3-Byte Version der seriellen Busklemme ausgeliefert.

Hinweise

Aufgrund verschiedener Versionen der Buscontroller BCxxxx ergibt sich ein unterschiedliches Speicher-Mapping der seriellen Busklemmen im 3-Byte Modus. Aus diesem Grunde wird in Zukunft nur noch der 5-Byte Modus unterstützt. Verwenden Sie daher nach Möglichkeit nur Klemmen im 5-Byte Modus, die als KL6xxx-0020 zu bestellen sind.

Ab der Version 2.0 der Kommunikationsbibliothek wurden die Versionen für den PC und die Buscontroller BC vereinheitlicht. Es wird daher auf die Dokumentation für PC verwiesen


Unterstützte Hardware

Serielle Busklemme

KL6xxx im 3-Byte Modus

Die serielle Beckhoff Busklemme wird in der ausgelieferten Standardausführung im 3-Byte Modus betrieben. D. h. es können in einem Bustelegramm 3 Datenbytes zur Klemme übertragen und von ihr empfangen werden. Da für jeden Datenaustausch zwischen SPS und Busklemme 3 SPS-Zyklen notwendig sind, kann effektiv in jedem Zyklus ein Byte übertragen werden.

Die maximale effektive Datenübertragungsrate,,, Bps ist abhängig von der Zykluszeit T der SPS, und der Anzahl der Bits pro übertragenem Datenbyte LB:

Bps = LB / T

LB = 1 Startbit + n Datenbits + p Paritätsbits + m Stopbits

Die maximale effektive Datenübertragungsrate wird nach oben durch die in der Busklemme programmierte physikalische Baudrate begrenzt.

Hinweis

Aufgrund verschiedener Versionen der Buscontroller BCxxxx ergibt sich ein unterschiedliches Speicher-Mapping der seriellen Busklemmen im 3-Byte Modus. Aus diesem Grunde unterstützt diese Library in Zukunft nur noch der 5-Byte Modus. Verwenden Sie daher nach Möglichkeit nur Klemmen im 5-Byte Modus, die als KL6xxx-0020 zu bestellen sind.

KL6xxx im 5-Byte Modus

Die serielle Busklemme kann offline durch ein Konfigurationsprogramm (Beckhoff KS2000) umprogrammiert werden, so daß im 5-Byte Modus jeweils 5 Datenbyte von und zur Klemme übertragen werden können. Dabei sind ebenfalls 3 SPS-Zyklen für einen Austausch notwendig. Die effektive Datenrate liegt bei gleicher Zykluszeit der SPS um 5/3 höher als im 3-Byte Modus.

Bps = (LB * 5/3) / T

Die Umprogrammierung der Busklemmen kann nicht zur Laufzeit der SPS erfolgen, da sich der 3-Byte und der 5-Byte Modus im Register-Mapping und in der Konfiguration im TwinCAT System Manager unterscheiden. Zur Zeit wird daher der 5-Byte Betrieb wegen der notwendigen Umprogrammierung nur für zeitkritische Anwendungen empfohlen.

Um den Speicher des Buscontrollers BCxxxx nicht unnötig zu belasten steht für den 5-Byte Modus eine modifizierte Bibliothek ComLibBC5B zur Verfügung.

Serieller Buscontroller BC8x00

Der Buscontroller BC8x00 enthält eine serielle Schnittstelle, die standardmäßig im 5-Byte Modus arbeitet. Die Schnittstelle verhält sich wie eine serielle Busklemme KL6xxx im 5-Byte Modus. Zur Programmierung ist daher die COMlibBC5B einzusetzen.


Kommunikationskonzept

Zur Entkopplung des Datentransfers zwischen Speicher und serieller Busklemme werden Datenpuffer vom Typ ComBuffer verwendet, die asynchron beschrieben und gelesen werden.

Die später beschriebenen Funktionsbausteine zum Empfangen und Senden von Daten (Send Byte, Receive Byte etc.) benutzen nur noch die Datenpuffer zum Datenaustausch und sind damit unabhängig von der verwendeten Hardware. In jedem Fall wird zusätzlich zu den Sende- und Empfangsbausteinen ein Kommunikationsbaustein (KL6ControlBC) aufgerufen, der den Datenverkehr zwischen Datenpuffer und Hardware mit maximaler Geschwindigkeit im Hintergrund abwickelt.


ComBuffer

Die Datenstruktur ComBuffer ist ein Datenpuffer zur Entkopplung der Hardware-abhängigen Kommunikationsbausteine von den Hardware-unabhängigen Bausteinen. Datenpuffer vom Typ ComBuffer werden vom Anwender niemals direkt beschrieben oder gelesen, sondern dienen nur als Zwischenspeicher für die Kommunikationsbausteine.

TYPE ComBuffer
STRUCT
    Buffer: ARRAY[0..300] OF BYTE;
    RdIdx: INT;
    WrIdx: INT;
    Count: INT; (* Anzahl der Zeichen im Ringpuffer *)
    FreeByte:INT; (* Anzahl freie Plätze im Ringpuffer *)
    Error: INT; (* Fehlercode der Schnittstelle *)
    blocked : BOOL;
END_STRUCT
END_TYPE


Datenstrukturen für serielle Busklemme KL6xxx im 3-Byte Modus

Jede serielle Busklemme benötigt zum Datenaustausch über den I/O-Bus je eine Variable des Typs KL6inDataBC und KL6outDataBC. Diese Variablen werden im Speicherabbild des Buscontrollers auf eine feste Adresse gelegt, die dem Mapping der seriellen Busklemme entspricht.

KL6inDataBC

TYPE KL6inDataBC
STRUCT
    SerStatus: BYTE;
    D: ARRAY[0..2] OF BYTE;
END_STRUCT
END_TYPE

KL6outDataBC

TYPE KL6outDataBC
STRUCT
    SerCtrl: BYTE;
    D: ARRAY[0..2] OF BYTE;
END_STRUCT
END_TYPE


Datenstrukturen für serielle Busklemme KL6xxx im 5-Byte Modus

Jede serielle Busklemme benötigt zum Datenaustausch über den I/O-Bus je eine Variable des Typs KL6inData5B und KL6outData5B. Diese Variablen werden im Speicherabbild des Buscontrollers auf eine feste Adresse gelegt, die dem Mapping der seriellen Busklemme entspricht.

KL6inData5B

TYPE KL6inData5B
STRUCT
    Status: BYTE;
    D: ARRAY[0..4] OF BYTE;
END_STRUCT
END_TYPE

KL6outData5B

TYPE KL6outData5B
STRUCT
    Ctrl: BYTE;
    D: ARRAY[0..4] OF BYTE;
END_STRUCT
END_TYPE

Um den Speicher des Buscontrollers BCxxxx nicht unnötig zu belasten, wird der 5-Byte Modus nur durch die modifizierte Bibliothek ComLibBC5B unterstützt.


ReceiveByte

Interface

VAR_OUTPUT
    ByteReceived: BOOL;
    ReceivedByte: BYTE;
    Error: INT;
END_VAR
VAR_IN_OUT
    RxBuffer : ComBuffer;
END_VAR

Beschreibung

Der Baustein ReceiveByte empfängt ein einzelnes Zeichen von der mit der Eingangsvariablen RxBuffer korrespondierenden Schnittstelle. Ist nach dem Aufruf ByteReceived=TRUE, dann steht in der Ausgangsvariablen ReceivedByte das empfangene Datenbyte zur Verfügung. Anderenfalls wurden keine Daten empfangen.


SendByte

Interface

VAR_INPUT
    SendByte: BYTE;
END_VAR
VAR_OUTPUT
    Busy : BOOL;
    Error: INT;
END_VAR
VAR_IN_OUT
    TxBuffer: ComBuffer;
END_VAR

Beschreibung

SendByte sendet ein einzelnes Zeichen an die mit der Eingangsvariablen TxBuffer korrespondierenden Schnittstelle. Solange der Ausgang Busy=TRUE ist, wurde das Senden noch nicht abgeschlossen. Das Zeichen wurde erfolgreich gesendet, sobald Busy=FALSE und Error=0 ist.

Hinweis

Solange der Sendedatenpuffer noch Daten aufnehmen kann, können in einem SPS-Zyklus mehrere Zeichen gesendet werden. Das ist jedoch nur sinnvoll, wenn die gepufferten Zeichen durch eine schnellere Kommunikations-Task zur Hardware übertragen werden.


ClearComBuffer

Interface

VAR_IN_OUT
    Buffer : ComBuffer;
END_VAR

Beschreibung

Der SPS-interne Kommunikationspuffer Buffer wird gelöscht.


KL6Init

Interface

VAR_INPUT
    Start : BOOL;
    SerStatus : BYTE;
END_VAR
VAR_OUTPUT
    Busy : BOOL;
    Ready : BOOL;
END_VAR

Beschreibung

KL6Init initialisiert die serielle Busklemme KL6xxx ohne deren Konfiguration zu verändern. Es werden dadurch die Klemmen-internen Puffer gelöscht.

Die Eingangsdaten SerStatus und SerCtrl entsprechen den mit der Klemme im TwinCAT SystemManager verknüpften Daten. Sie sind in den Datenstrukturen KL6inDataBC bzw. KL6outDataBC der COMlib definiert.

Die Klemme wurde nach dem Startsignal Start erfolgreich initialisiert, sobald Busy=FALSE und Ready=TRUE ist.


KL6ControlBC

Interface

VAR_INPUT
    COMin : KL6inDataBC;
END_VAR
VAR_IN_OUT
    COMout : KL6outDataBC;
    TxBuffer: ComBuffer;
    RxBuffer: ComBuffer;
END_VAR

Beschreibung

Der Funktionsbaustein KL6ControlBC kontrolliert die Datenübertragung zwischen den SPS-internen Datenpuffern TxBuffer und RxBuffer und der Hardware. Die Datenstrukturen KL6inDataBC und KL6outDataBC sind global deklariert und werden im Speicherabbild an eine feste Adresse gelegt. KL6ControlBC wird unabhäng von der Absicht Daten zu senden oder zu empfangen permanent aufgerufen.


KL6Control5B

Interface

VAR_INPUT
    COMin : KL6inData5B;
END_VAR
VAR_IN_OUT
    COMout : KL6outData5B;
    TxBuffer: ComBuffer;
    RxBuffer: ComBuffer;
END_VAR

Beschreibung

KL6Control5B kontrolliert analog zum Baustein KL6ControlBC die Datenübertragung zwischen den SPS-internen Datenpuffern TxBuffer und RxBuffer und der Hardware, hier jedoch für die serielle Busklemme im 5-Byte Modus

Um den Speicher des Buscontrollers BCxxxx nicht unnötig zu belasten, wird der 5-Byte Modus nur durch die modifizierte Bibliothek ComLibBC5B unterstützt.


Installation

Zur Installation werden die Bibliotheken COMlibBC.LB6 und COMlibBC5b.LB6 in das TwinCAT Verzeichnis TwinCAT\PLC\LIB kopiert.

Das beiliegende Testprogramm kopieren Sie in ein beliebiges Projektverzeichnis, z. B. nach TwinCAT\PLC.

  • Sample Program Serial Communication

Bibliotheken einbinden

Legen Sie ein neues SPS-Projekt mit dem TwinCAT PLC Control an, um die Einbindung der Bibliothek nachzuvollziehen.

Wechseln Sie in die Bibliotheksverwaltung und fügen Sie die Bibliothek ComLibBC.LIB ein.


Anpassungen an den 5-Byte Modus

Zur Programmierung der seriellen Busklemme im 5-Byte Modus bzw. der seriellen Schnittstelle des Buscontrollers BC8x00 wird alternativ zur Bibliothek ComLibBC die Bibliothek ComLibBC5B verwendet.

Der Funktionsbaustein KL6ControlBC wird dabei durch den Baustein KL6Control5B ersetzt. Weiterhin ersetzen Sie die Datenstrukturen KL6inDataBC durch KL6inData5B bzw. KL6outDataBC durch KL6outData5B.

Zu beachten ist, daß die seriellen Busklemmen KL6xxx ab Werk im 3-Byte Modus ausgeliefert werden und zunächst mit der Konfigurationssoftware KS2000 umprogrammiert werden müssen. Alternativ sind entsprechend programmierte Klemmen als KL6xxx-0020 erhältlich.


Globale Variablen

Um eine serielle Schnittstelle anzusprechen, sind vier globale Datenstrukturen notwendig. Zwei stellen die Verbindung zur Hardware in Sende- und Empfangsrichtung her. Zusätzlich werden zwei Datenpuffer als Zwischenspeicher benötigt.


Hintergrundkommunikation

Die Kommunikation zwischen der seriellen Hardware und den Datenpuffer vom Typ ComBuffer wird mit einem separaten Baustein ComControl ab-gewickelt.

Siehe auch Kommunikationskonzept.


Senden und Empfangen

Daten senden

Im beiliegenden Beispielprogramm werden Daten über die serielle Schnittstelle im Sekundentakt gesendet und das Programm reagiert sofort auf ein eintreffendes Zeichen.

Mögliche Fehler

Während eines SPS-Zyklus dürfen mehrere Zeichen gesendet werden, solange sie vom Sendepuffer aufgenommen werden können. Bei einem Überlauf des Sendepuffers wird der Busy-Ausgang des Sendebausteins nach dem Aufruf TRUE bleiben. Das letzte Zeichen wurde dann nicht gesendet und der Baustein muß im nächsten SPS-Zyklus mit unveränderten Eingangsdaten erneut aufgerufen werden.

Der Füllstand eines Puffers kann jederzeit ermittelt werden (z. B. TxBuffer.Count bzw. TxBuffer.FreeByte).


Beispielkonfiguration

Die folgende Hardwarekonfiguration wurde mit dem beiliegenden Testprogramm verwendet.

Handshake

Bei der Klemme KL6001 ist zu beachten, dass sie mit aktivem RTS/CTS Handshake geliefert wird. Die Klemme kann nur senden, wenn der CTS-Eingang aktiv ist. Im einfachsten Fall werden zum Test RTS und CTS durch eine Drahtbrücke verbunden, um das Handshake zu deaktivieren.


Fehlercodes

COMERROR_NOERROR: INT := 0;
COMERROR_TXBUFFOVERRUN: INT := 2;
COMERROR_STRINGOVERRUN: INT := 10;