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®, Safety over EtherCAT®, TwinSAFE®, XFC®und XTS® 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, DE102004044764, DE102007017835
mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

Die TwinCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP0851348, US6167425 mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

EtherCAT® ist eine eingetragene Marke und patentierte Technologie lizensiert 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.


Einführung

Crestron Electronics, mit Hauptsitz in Rockleigh (www.crestron.de), New Jersey (USA), ist einer der Marktführer für Mediensteuerungssysteme. Neben der Steuerung von Audio- und Videoanlagen lassen sich auch gebäudetechnische Komponenten integrieren.

Das folgende Beispiel zeigt wie per TCP/IP Daten zwischen Crestron Steuerungen und einer TwinCAT 3 Steuerung ausgetauscht werden können. Grundlage für dieses Beispiel ist die TwinCAT 3 Function TF6310 TCP/IP.

Für die Crestron-Steuerungen stehen SIMPL+ Macros zur Verfügung. Ein Crestron Controller kann Schreib- und Lesebefehle aufrufen und eine TwinCAT 3 Steuerung kann Daten in die Crestron-Steuerung schreiben oder aus ihr herauslesen. Hierbei können von der Crestron Steuerung beliebige ADS-Geräte der jeweiligen TwinCAT 3 Steuerng angesprochen werden.


Installation

Sämtliche Elemente, die Sie zur Ausführung des Beispiels benötigen, können Sie direkt in Ihr jeweiliges Projekt importieren. Der Quelltext ist offen und kann frei eingesehen und bei Bedarf auch angepasst werden.

Crestron - SIMPLE+ Macros

Sie können die SIMPL+ Macros direkt in ihr SIMPL-Projekt einbinden. Dazu entpacken Sie die ZIP-Datei und kopieren den Inhalt in Ihr SIMPL-Projektverzeichnis (das Verzeichnis, in dem sich die Datei *.smw befindet). Nach einem Neustart von SIMPL Windows stehen Ihnen die SIMPL+ Macros direkt zur Verfügung.

Beachten Sie, dass hierdurch jedes SIMPL Window Projekt seine eigenen Kopien der SIMPL+ Macros besitzt.

Beckhoff - TwinCAT 3 PLC Function Blocks

In der ZIP-Datei befinden sich die notwendigen Funktionsblöcke im PLCopenXML-Format. Entpacken Sie die ZIP-Datei und importieren Sie die enthaltene XML-Datei in Ihr TwinCAT 3 Projekt. Hierdurch erhalten Sie die notwendigen Funktionsblöcke.

Des Weiteren müssen Sie die Referenzen auf die SPS Bibliotheken Tc2_Utilities und Tc2_TcpIp hinzufügen.


Übersicht TwinCAT 3 Funktionsbausteine

Name | Funktion
FB_CrestronConnections | Dieser Funktionsblock repräsentiert den TCP/IP-Server und verwaltet die TCP-Verbindungen.
FB_CrestronCommunication | Dieser Funktionsblock verwaltet die Kommunikation zu den einzelnen Crestron Steuerungen.
FB_CrestronReadBoolArray | Dieser Funktionsblock erlaubt es mehrere Signale aus einer Crestron Steuerung zu lesen und in ein Bool-Arrary der SPS zu schreiben.
FB_CrestronReadByteArray | Dieser Funktionsblock erlaubt es mehrere Signale aus einer Crestron Steuerung zu lesen und in ein Byte-Arrary der SPS zu schreiben.
FB_CrestronReadUIntArray | Dieser Funktionsblock erlaubt es mehrere Signale aus einer Crestron Steuerung zu lesen und in ein UInt-Arrary der SPS zu schreiben.
FB_CrestronWriteBoolArray | Dieser Funktionsblock erlaubt es ein Bool-Array der SPS in eine Crestron Steuerung zu schreiben.
FB_CrestronWriteByteArray | Dieser Funktionsblock erlaubt es ein Byte-Array der SPS in eine Crestron Steuerung zu schreiben.
FB_CrestronWriteUIntArray | Dieser Funktionsblock erlaubt es ein UInt-Array der SPS in eine Crestron Steuerung zu schreiben.

Neben den oben genannten FBs werden noch einige Interfaces und eine Basisklasse verwendet. Da diese aber nicht direkt benutzt werden, wurde auf eine genauere Beschreibung verzichtet. Der Zusammenhang der jeweiligen Interfaces und Funktionsblöcke soll aber kurz vorgestellt werden.

Jeder FB, der einen Schreib- oder Lesebefehl darstellt, erbt vom FB_CrestronCommand. Dieser FB enthält einige allgemeine Ein- und Ausgänge (z.B. bStart, bBusy, bError und nErrorId), einige interne Variablen und eine Methode zum Erzeugen der Invoke-Id. Außerdem enthält der FB einen Interface-Pointer vom Typ I_CrestronCommunication. Über diesen Interface-Pointer werden die Methoden zum Senden und Empfangen der Datenpakte bereit gestellt. Beim Deklarieren der einzelnen FBs für die Schreib- oder Lesebefehle wird eine Instanz von FB_CrestronCommunication übergeben. Dieser FB implemetiert das Interface I_CrestronCommunication mit den Methoden SendCommand() und TryGetResponse().

Neben I_CrestronCommunication implementiert FB_CrestronCommunication auch das Interface I_CrestronSocketObserver. Über dieses Interface wird jedesmal die Methode Update() aufgerufen, wenn FB_CrestronConnections einen neuen TCP-Socket erhält. Auch hier wird bei der Deklaration von FB_CrestronCommuncation die Instanz von FB_CrestronConnections übergeben.

Dieser Ansatz bietet den Vorteil, das keine globalen- oder IN_OUT-Variablen zur Kommunikation der einzelnen Instanzen untereinander notwendig sind. Alle Funktionsblöcke sind durch Interfaces voneinander entkoppelt.


FB_CrestronConnections

Dieser Funktionsblock repräsentiert den TCP/IP-Server und verwaltet die TCP-Verbindungen.

Hierzu werden alle Socketverbindungen auf TCP-Port 48798 angenommen und zu allen Instanzen von FB_CrestronCommunication weitergeleitet. Jede Instanz von FB_CrestronCommunication prüft ob der eingehende Socket die gewünschte IP-Adresse besitzt. Ist dieses der Fall, wird der Socket gespeichert. Besitzt dieser keine gültige IP-Adresse, wird der Socket umgehend wieder geschlossen.

FB_CrestronConnections kann bis zu 10 Socketverbindungen verwalten und benötigt auf dem TwinCAT 3 Zielsystem die TwinCAT 3 Function TF6310 TC3 TCP/IP.

Im gesamten SPS-Programm darf es nur eine Instanz von FB_CrestronConnections geben. Diese Instanz sollte in einer schnelleren Task aufgerufen werden, als die Instanzen für die Schreib- und Lesebefehle.


FB_CrestronCommunication

Dieser Funktionsblock verwaltet die Kommunikation zu den einzelnen Crestron Steuerungen.

Erhält der Baustein FB_CrestronConnections eine TCP-Verbindung auf TCP-Port 48798, so werden alle Instanzen von FB_CrestronCommunication benachrichtigt. Diese prüfen ob der Socket die gewünschte IP-Adresse besitzt. Ist dieses bei keinen der Instanzen der Fall, wird der Socket wieder geschlossen. Ist die IP-Adresse korrekt, speichert sich der Baustein FB_CrestronCommunication das Socket.

Je Crestron Steuerung muss eine Instanz von FB_CrestronCommunication angelegt werden. Diese Instanzen sollten in einer schnelleren Task aufgerufen werden, als die Instanzen für die Schreib- und Lesebefehle. Auch muss die Priorität der schnelleren Task höher sein, als die der Task in der die Schreib- und Lesebefehle aufgerufen werden.

Bei der Deklaration wird die IP-Adresse der Crestron Steuerung, als auch die Instanz von FB_CrestronConnections angegeben. Auch mss die Instanz von FB_CrestronConnections vor den Instanzen von FB_CrestronCommunication deklariert werden.

Beispiel:

PROGRAM Communication
VAR
    fbCrestronConnections           : FB_CrestronConnections;
    fbCrestronCommunicationA        : FB_CrestronCommunication(Communication.fbCrestronConnections, '192.168.0.200');
    fbCrestronCommunicationB        : FB_CrestronCommunication(Communication.fbCrestronConnections, '192.168.0.201');
END_VAR

fbCrestronConnections();
fbCrestronCommunicationA();
fbCrestronCommunicationB();


FB_CrestronReadBoolArray

Dieser Funktionsblock dient dazu, mehrere Signale aus einer Crestron Steuerung zu lesen und in ein Bool-Arrary der SPS zu schreiben.

Die Kommunikation erfolgt hierbei über eine Instanz von FB_CrestronCommunication. Bei der Deklaration von FB_CrestronReadBoolArray wird die gewünschte Instanz von FB_CrestronCommunication angegeben.

Beispiel:

VAR
    fbCrestronReadBoolArray  : FB_CrestronReadBoolArray(Communication.fbCrestronCommunication);
END_VAR

VAR_INPUT

bStart            : BOOL;
pData             : POINTER TO BOOL;
nElements         : INT;
nReadOffset       : INT;

bStart: Durch eine positive Flanke wird der Lesebefehl versendet.

pData: Zeiger auf ein Bool-Array, in dem die gelesene Werte abgelegt werden. Der Programmierer ist selbst dafür verantwortlich das Bool-Array in der Größe so zu dimensionieren, dass es die gesamten Daten aufnehmen kann.

nElements: Gibt die Anzahl der Elemente an, die aus dem SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung ausgelesen werden sollen. Der Zeiger pData verweist somit auf ein Bool-Array, das mindestens so viele Elemente hat, wie durch nElements angegeben (1-500).

nReadOffsets: Gibt an, ab welcher Position die Daten aus dem SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung ausgelesen werden sollen (1-500).

VAR_OUTPUT

bBusy            : BOOL;
bError           : BOOL;
nErrorId         : UDINT;

bBusy: Während des Lesevorgangs wird der Ausgang bBusy auf TRUE gesetzt und bleibt so lange TRUE, bis das Lesen abgeschlossen wurde. Während dieser Zeit können über diesen Baustein keine weiteren Befehle aktiviert werden.

bError: Der Ausgang ist TRUE, sobald beim Ausführen des Befehls ein Fehler auftritt.

nErrorId: Enthält den Fehlercode, der bei der Ausführung des Bausteins auftreten kann. Ist kein Fehler aufgetreten, so ist der Wert 0.


FB_CrestronReadByteArray

Dieser Funktionsblock dient dazu, mehrere Signale aus einer Crestron Steuerung zu lesen und in ein Byte-Arrary der SPS zu schreiben.

Die Kommunikation erfolgt hierbei über eine Instanz von FB_CrestronCommunication. Bei der Deklaration von FB_CrestronReadByteArray wird die gewünschte Instanz von FB_CrestronCommunication angegeben.

Beispiel:

VAR
    fbCrestronReadByteArray  : FB_CrestronReadByteArray(Communication.fbCrestronCommunication);
END_VAR

VAR_INPUT

bStart            : BOOL;
pData             : POINTER TO BYTE;
nElements         : INT;
nReadOffset       : INT;

bStart: Durch eine positive Flanke wird der Lesebefehl versendet.

pData: Zeiger auf ein Byte-Array, in dem die gelesene Werte abgelegt werden. Der Programmierer ist selbst dafür verantwortlich das Byte-Array in der Größe so zu dimensionieren, dass es die gesamten Daten aufnehmen kann.

nElements: Gibt die Anzahl der Elemente an, die aus dem SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung ausgelesen werden sollen. Der Zeiger pData verweist somit auf ein Byte-Array, das mindestens so viele Elemente hat, wie durch nElements angegeben (1-500).

nReadOffsets: Gibt an, ab welcher Position die Daten aus dem SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung ausgelesen werden sollen (1-500).

VAR_OUTPUT

bBusy            : BOOL;
bError           : BOOL;
nErrorId         : UDINT;

bBusy: Während des Lesevorgangs wird der Ausgang bBusy auf TRUE gesetzt und bleibt so lange TRUE, bis das Lesen abgeschlossen wurde. Während dieser Zeit können über diesen Baustein keine weiteren Befehle aktiviert werden.

bError: Der Ausgang ist TRUE, sobald beim Ausführen des Befehls ein Fehler auftritt.

nErrorId: Enthält den Fehlercode, der bei der Ausführung des Bausteins auftreten kann. Ist kein Fehler aufgetreten, so ist der Wert 0.


FB_CrestronReadUIntArray

Dieser Funktionsblock dient dazu, mehrere Signale aus einer Crestron Steuerung zu lesen und in ein UInt-Arrary der SPS zu schreiben.

Die Kommunikation erfolgt hierbei über eine Instanz von FB_CrestronCommunication. Bei der Deklaration von FB_CrestronReadUIntArray wird die gewünschte Instanz von FB_CrestronCommunication angegeben.

Beispiel:

VAR
    fbCrestronReadUIntArray  : FB_CrestronReadUIntArray(Communication.fbCrestronCommunication);
END_VAR

VAR_INPUT

bStart            : BOOL;
pData             : POINTER TO UINT;
nElements         : INT;
nReadOffset       : INT;

bStart: Durch eine positive Flanke wird der Lesebefehl versendet.

pData: Zeiger auf ein UInt-Array, in dem die gelesene Werte abgelegt werden. Der Programmierer ist selbst dafür verantwortlich das UInt-Array in der Größe so zu dimensionieren, dass es die gesamten Daten aufnehmen kann.

nElements: Gibt die Anzahl der Elemente an, die aus dem SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung ausgelesen werden sollen. Der Zeiger pData verweist somit auf ein UInt-Array, das mindestens so viele Elemente hat, wie durch nElements angegeben (1-500).

nReadOffsets: Gibt an, ab welcher Position die Daten aus dem SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung ausgelesen werden sollen (1-500).

VAR_OUTPUT

bBusy            : BOOL;
bError           : BOOL;
nErrorId         : UDINT;

bBusy: Während des Lesevorgangs wird der Ausgang bBusy auf TRUE gesetzt und bleibt so lange TRUE, bis das Lesen abgeschlossen wurde. Während dieser Zeit können über diesen Baustein keine weiteren Befehle aktiviert werden.

bError: Der Ausgang ist TRUE, sobald beim Ausführen des Befehls ein Fehler auftritt.

nErrorId: Enthält den Fehlercode, der bei der Ausführung des Bausteins auftreten kann. Ist kein Fehler aufgetreten, so ist der Wert 0.


FB_CrestronWriteBoolArray

Dieser Funktionsblock dient dazu, ein Bool-Array der SPS in eine Crestron Steuerung zu schreiben.

Die Kommunikation erfolgt hierbei über eine Instanz von FB_CrestronCommunication. Bei der Deklaration von FB_CrestronWriteBoolArray wird die gewünschte Instanz von FB_CrestronCommunication angegeben.

Beispiel:

VAR
    fbCrestronWriteBoolArray : FB_CrestronWriteBoolArray(Communication.fbCrestronCommunication);
END_VAR

VAR_INPUT

bStart            : BOOL;
pData             : POINTER TO BOOL;
nElements         : INT;
nWriteOffset      : INT;

bStart: Durch eine positive Flanke wird der Schreibbefehl versendet.

pData: Zeiger auf ein Bool-Array, im dem sich die Werte befinden, die geschrieben werden sollen. Der Programmierer ist selbst dafür verantwortlich das UInt-Array in der Größe so zu dimensionieren, dass es die gesamten Daten enthält.

nElements: Gibt die Anzahl der Elemente an, die in das SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung geschrieben werden sollen. Der Zeiger pData verweist somit auf ein Bool-Array, das mindestens so viele Elemente hat, wie durch nElements angegeben (1-500).

nWriteOffsets: Gibt an, ab welcher Position die Daten in das SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung geschrieben werden sollen (1-500).

VAR_OUTPUT

bBusy            : BOOL;
bError           : BOOL;
nErrorId         : UDINT;

bBusy: Während des Schreibvorgangs wird der Ausgang bBusy auf TRUE gesetzt und bleibt so lange TRUE, bis das Schreiben abgeschlossen wurde. Während dieser Zeit können über diesen Baustein keine weiteren Befehle aktiviert werden.

bError: Der Ausgang ist TRUE, sobald beim Ausführen des Befehls ein Fehler auftritt.

nErrorId: Enthält den Fehlercode, der bei der Ausführung des Bausteins auftreten kann. Ist kein Fehler aufgetreten, so ist der Wert 0.


FB_CrestronWriteByteArray

Dieser Funktionsblock dient dazu, ein Byte-Array der SPS in eine Crestron Steuerung zu schreiben.

Die Kommunikation erfolgt hierbei über eine Instanz von FB_CrestronCommunication. Bei der Deklaration von FB_CrestronWriteByteArray wird die gewünschte Instanz von FB_CrestronCommunication angegeben.

Beispiel:

VAR
    fbCrestronWriteByteArray : FB_CrestronWriteByteArray(Communication.fbCrestronCommunication);\
END_VAR

VAR_INPUT

bStart            : BOOL;
pData             : POINTER TO BYTE;
nElements         : INT;
nWriteOffset      : INT;

bStart: Durch eine positive Flanke wird der Schreibbefehl versendet.

pData: Zeiger auf ein Byte-Array, im dem sich die Werte befinden, die geschrieben werden sollen. Der Programmierer ist selbst dafür verantwortlich das UInt-Array in der Größe so zu dimensionieren, dass es die gesamten Daten enthält.

nElements: Gibt die Anzahl der Elemente an, die in das SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung geschrieben werden sollen. Der Zeiger pData verweist somit auf ein Byte-Array, das mindestens so viele Elemente hat, wie durch nElements angegeben (1-500).

nWriteOffsets: Gibt an, ab welcher Position die Daten in das SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung geschrieben werden sollen (1-500).

VAR_OUTPUT

bBusy            : BOOL;
bError           : BOOL;
nErrorId         : UDINT;

bBusy: Während des Schreibvorgangs wird der Ausgang bBusy auf TRUE gesetzt und bleibt so lange TRUE, bis das Schreiben abgeschlossen wurde. Während dieser Zeit können über diesen Baustein keine weiteren Befehle aktiviert werden.

bError: Der Ausgang ist TRUE, sobald beim Ausführen des Befehls ein Fehler auftritt.

nErrorId: Enthält den Fehlercode, der bei der Ausführung des Bausteins auftreten kann. Ist kein Fehler aufgetreten, so ist der Wert 0.


FB_CrestronWriteUIntArray

Dieser Funktionsblock dient dazu, ein UInt-Array der SPS in eine Crestron Steuerung zu schreiben.

Die Kommunikation erfolgt hierbei über eine Instanz von FB_CrestronCommunication. Bei der Deklaration von FB_CrestronWriteUIntArray wird die gewünschte Instanz von FB_CrestronCommunication angegeben.

Beispiel:

VAR
    fbCrestronWriteUIntArray : FB_CrestronWriteUIntArray(Communication.fbCrestronCommunication);
END_VAR

VAR_INPUT

bStart            : BOOL;
pData             : POINTER TO UINT;
nElements         : INT;
nWriteOffset      : INT;

bStart: Durch eine positive Flanke wird der Schreibbefehl versendet.

pData: Zeiger auf ein UInt-Array, im dem sich die Werte befinden, die geschrieben werden sollen. Der Programmierer ist selbst dafür verantwortlich das UInt-Array in der Größe so zu dimensionieren, dass es die gesamten Daten enthält.

nElements: Gibt die Anzahl der Elemente an, die in das SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung geschrieben werden sollen. Der Zeiger pData verweist somit auf ein UInt-Array, das mindestens so viele Elemente hat, wie durch nElements angegeben (1-500).

nWriteOffsets: Gibt an, ab welcher Position die Daten in das SIMPL+ Macro TwinCAT 3 Communication der Crestron Steuerung geschrieben werden sollen (1-500).

VAR_OUTPUT

bBusy            : BOOL;
bError           : BOOL;
nErrorId         : UDINT;

bBusy: Während des Schreibvorgangs wird der Ausgang bBusy auf TRUE gesetzt und bleibt so lange TRUE, bis das Schreiben abgeschlossen wurde. Während dieser Zeit können über diesen Baustein keine weiteren Befehle aktiviert werden.

bError: Der Ausgang ist TRUE, sobald beim Ausführen des Befehls ein Fehler auftritt.

nErrorId: Enthält den Fehlercode, der bei der Ausführung des Bausteins auftreten kann. Ist kein Fehler aufgetreten, so ist der Wert 0.


Übersicht Crestron SIMPL+ Modules

Name | Funktion
TwinCAT 3 Communication | Dieses SIMPL+ Macro stellt die Basis der Kommunikation zwischen der Crestron Steuerung und der TwinCAT 3 Steuerung dar.
TwinCAT 3 Read Bool | Dieses SIMPL+ Macro liest eine 1-Bit-Variable aus ein ADS-Gerät aus.
TwinCAT 3 Read Byte | Dieses SIMPL+ Macro liest eine 8-Bit-Variable aus ein ADS-Gerät aus.
TwinCAT 3 Read UInt | Dieses SIMPL+ Macro liest eine 16-Bit-Variable aus ein ADS-Gerät aus.
TwinCAT 3 Write Bool | Dieses SIMPL+ Macro schreibt den Wert eines digitalen Signals in eine 1-Bit-Variable eines ADS-Gerätes.
TwinCAT 3 Write Byte | Dieses SIMPL+ Macro schreibt den Wert eines analogen Signals in eine 8-Bit-Variable eines ADS-Gerätes.
TwinCAT 3 Write UInt | Dieses SIMPL+ Macro schreibt den Wert eines analogen Signals in eine 16-Bit-Variable eines ADS-Gerätes.


TwinCAT 3 Communication

Dieses SIMPL+ Macro stellt die Basis der Kommunikation zwischen der Crestron Steuerung und der TwinCAT 3 Steuerung dar.

Er nimmt Schreib- und Lesebefehle von der TwinCAT 3 Steuerung über TCP/IP entgegen und gibt diese an die jeweiligen SIMPL+ Macros weiter.

Die Signale To_TwinCAT3 (bis zu 500) können direkt von einer TwinCAT 3 Steuerung gelesen werden, während die Signale From_TwinCAT3 (bis zu 500) von einer TwinCAT 3 Steuerung aus beschrieben werden können.

Eingänge

Send_KeepAlive        : DIGITAL_INPUT;
Command_Req           : BUFFER_INPUT;
To_TwinCAT3           : ANALOG_INPUT[500];

Send_KeepAlive: Wechselt das Signal von low auf high, so wird ein Überwachungstelegram an die TwinCAT 3 SPS gesendet. Dieses Überwachungstelegram baut auch die TCP/IP-Verbindung zwischen der Crestron Steuerung und der TwinCAT 3 Steuerung auf. Das Signal sollte ca. alle 4 Sekunden von low auf high wechseln. Hierzu kann das Crestron Modul Oscillator verwendet werden (siehe Beispiel).

Command_Req: Signal von den einzelnen Schreib- und Lesebausteinen. In diesem Signal ist das Kommando enthalten, welches an die TwinCAT 3 SPS weitergeleitet wird.

To_TwinCAT3: Daten, auf die lesend von außen zugegriffen werden kann.

Ausgänge

Command_Res            : STRING_OUTPUT;
TCP_Client_Status      : ANALOG_OUTPUT;
From_TwinCAT3          : ANALOG_OUTPUT[500];

Command_Res: Signal mit den Rückmeldungen der einzelnen Schreib- und Lesebausteine.

TCP_Client_Status: Dieses analoge Signal enthält den Status der TCP-Verbindung.

Value | Connection Status
0 | Not Connected
1 | Waiting for Connection
2 | Connected
3 | Connection Failed
4 | Connection Broken Remotely
5 | Connection Broken Locally
6 | Performing DNS Lookup
7 | DNS Lookup Failed
8 | DNS Name Resolved

From_TwinCAT3: Daten, auf die schreibend von Außen zugegriffen werden kann.


TwinCAT 3 Read Bool

Dieses SIMPL+ Macro liest eine 1-Bit-Variable aus einem ADS-Gerät aus und stellt diese als digitales Signal an dem Ausgang Output zur Verfügung.

Eingänge

Read                    : DIGITAL_INPUT;
Commande_Res            : STRING_INPUT;

Read: Über eine positive Flanke an diesem Eingang wird der Lesebefehl versendet.

Command_Res: Dieses Signal wird mit dem Ausgang Command_Res des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Rückmeldungen.

Ausgänge

Busy                    : DIGITAL_OUTPUT;
Output                  : DIGITAL_OUTPUT;
ErrorId                 : ANALOG_OUTPUT;
Command_Req             : STRING_OUTPUT;

Busy: Während der Übertragung wird der Ausgang gesetzt und bleibt so lange aktiv, bis das Signal gelesen wurde. In dieser Zeit können über diesen Baustein keine weiteren Lesebefehle aktiviert werden.

Output: Der ausgelesene Wert wird über dieses Signal ausgegeben.

ErrorId: Dieses analoge Signal enthält den Fehlercode, der bei der Ausführung des Befehls auftreten kann. Ist kein Fehler aufgetreten, so hat dieses Signal den Wert 0.

Command_Req: Dieses Signal wird mit dem Eingang Command_Req des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Befehle.

Parameter

AdsPort                 : INTEGER_PARAMETER;
IndexGroup              : LONG_INTEGER_PARAMETER;
IndexOffset             : LONG_INTEGER_PARAMETER;

AdsPort: Enthält die Portnummer des ADS-Gerätes.

IndexGroup: Enthält die Index-Gruppennummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.

IndexOffset: Enthält die Index-Offsetnummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.


TwinCAT 3 Read Byte

Dieses SIMPL+ Macro liest eine 8-Bit-Variable aus einem ADS-Gerät aus und stellt diese als analoges Signal an dem Ausgang Output zur Verfügung.

Eingänge

Read                    : DIGITAL_INPUT;
Commande_Res            : STRING_INPUT;

Read: Über eine positive Flanke an diesem Eingang wird der Lesebefehl versendet.

Command_Res: Dieses Signal wird mit dem Ausgang Command_Res des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Rückmeldungen.

Ausgänge

Busy                    : DIGITAL_OUTPUT;
Output                  : ANALOG_OUTPUT;
ErrorId                 : ANALOG_OUTPUT;
Command_Req             : STRING_OUTPUT;

Busy: Während der Übertragung wird der Ausgang gesetzt und bleibt so lange aktiv, bis das Signal gelesen wurde. In dieser Zeit können über diesen Baustein keine weiteren Lesebefehle aktiviert werden.

Output: Der ausgelesene Wert wird über dieses Signal ausgegeben.

ErrorId: Dieses analoge Signal enthält den Fehlercode, der bei der Ausführung des Befehls auftreten kann. Ist kein Fehler aufgetreten, so hat dieses Signal den Wert 0.

Command_Req: Dieses Signal wird mit dem Eingang Command_Req des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Befehle.

Parameter

AdsPort                 : INTEGER_PARAMETER;
IndexGroup              : LONG_INTEGER_PARAMETER;
IndexOffset             : LONG_INTEGER_PARAMETER;

AdsPort: Enthält die Portnummer des ADS-Gerätes.

IndexGroup: Enthält die Index-Gruppennummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.

IndexOffset: Enthält die Index-Offsetnummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.


TwinCAT 3 Read UInt

Dieses SIMPL+ Macro liest eine 16-Bit-Variable aus einem ADS-Gerät aus und stellt diese als analoges Signal an dem Ausgang Output zur Verfügung.

Eingänge

Read                    : DIGITAL_INPUT;
Commande_Res            : STRING_INPUT;

Read: Über eine positive Flanke an diesem Eingang wird der Lesebefehl versendet.

Command_Res: Dieses Signal wird mit dem Ausgang Command_Res des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Rückmeldungen.

Ausgänge

Busy                    : DIGITAL_OUTPUT;
Output                  : ANALOG_OUTPUT;
ErrorId                 : ANALOG_OUTPUT;
Command_Req             : STRING_OUTPUT;

Busy: Während der Übertragung wird der Ausgang gesetzt und bleibt so lange aktiv, bis das Signal gelesen wurde. In dieser Zeit können über diesen Baustein keine weiteren Lesebefehle aktiviert werden.

Output: Der ausgelesene Wert wird über dieses Signal ausgegeben.

ErrorId: Dieses analoge Signal enthält den Fehlercode, der bei der Ausführung des Befehls auftreten kann. Ist kein Fehler aufgetreten, so hat dieses Signal den Wert 0.

Command_Req: Dieses Signal wird mit dem Eingang Command_Req des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Befehle.

Parameter

AdsPort                 : INTEGER_PARAMETER;
IndexGroup              : LONG_INTEGER_PARAMETER;
IndexOffset             : LONG_INTEGER_PARAMETER;

AdsPort: Enthält die Portnummer des ADS-Gerätes.

IndexGroup: Enthält die Index-Gruppennummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.

IndexOffset: Enthält die Index-Offsetnummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.


TwinCAT 3 Write Bool

Dieses SIMPL+ Macro schreibt den Wert eines digitalen Signals, der am Eingang Input anliegt, in eine 1-Bit-Variable eines ADS-Gerätes.

Eingänge

Write                   : DIGITAL_INPUT;
Input                   : DIGITAL_INPUT;
Commande_Res            : STRING_INPUT;

Write: Über eine positive Flanke an diesem Eingang wird der Schreibbefehl versendet.

Input: Der Wert dieses Signals wird an das ADS-Gerät geschrieben.

Command_Res: Dieses Signal wird mit dem Ausgang Command_Res des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Rückmeldungen.

Ausgänge

Busy                    : DIGITAL_OUTPUT;
ErrorId                 : ANALOG_OUTPUT;
Command_Req             : STRING_OUTPUT;

Busy: Während der Übertragung wird der Ausgang gesetzt und bleibt so lange aktiv, bis das Signal geschrieben wurde. In dieser Zeit können über diesen Baustein keine weiteren Schreibbefehle aktiviert werden.

ErrorId: Dieses analoge Signal enthält den Fehlercode, der bei der Ausführung des Befehls auftreten kann. Ist kein Fehler aufgetreten, so hat dieses Signal den Wert 0.

Command_Req: Dieses Signal wird mit dem Eingang Command_Req des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Befehle.

Parameter

AdsPort                 : INTEGER_PARAMETER;
IndexGroup              : LONG_INTEGER_PARAMETER;
IndexOffset             : LONG_INTEGER_PARAMETER;

AdsPort: Enthält die Portnummer des ADS-Gerätes.

IndexGroup: Enthält die Index-Gruppennummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.

IndexOffset: Enthält die Index-Offsetnummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.


TwinCAT 3 Write Byte

Dieses SIMPL+ Macro schreibt den Wert eines analogen Signals, der am Eingang Input anliegt, in eine 8-Bit-Variable eines ADS-Gerätes.

Eingänge

Write                   : DIGITAL_INPUT;
Input                   : ANALOG_INPUT;
Commande_Res            : STRING_INPUT;

Write: Über eine positive Flanke an diesem Eingang wird der Schreibbefehl versendet.

Input: Der Wert dieses Signals wird an das ADS-Gerät geschrieben.

Command_Res: Dieses Signal wird mit dem Ausgang Command_Res des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Rückmeldungen.

Ausgänge

Busy                    : DIGITAL_OUTPUT;
ErrorId                 : ANALOG_OUTPUT;
Command_Req             : STRING_OUTPUT;

Busy: Während der Übertragung wird der Ausgang gesetzt und bleibt so lange aktiv, bis das Signal geschrieben wurde. In dieser Zeit können über diesen Baustein keine weiteren Schreibbefehle aktiviert werden.

ErrorId: Dieses analoge Signal enthält den Fehlercode, der bei der Ausführung des Befehls auftreten kann. Ist kein Fehler aufgetreten, so hat dieses Signal den Wert 0.

Command_Req: Dieses Signal wird mit dem Eingang Command_Req des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Befehle.

Parameter

AdsPort                 : INTEGER_PARAMETER;
IndexGroup              : LONG_INTEGER_PARAMETER;
IndexOffset             : LONG_INTEGER_PARAMETER;

AdsPort: Enthält die Portnummer des ADS-Gerätes.

IndexGroup: Enthält die Index-Gruppennummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.

IndexOffset: Enthält die Index-Offsetnummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.


TwinCAT 3 Write UInt

Dieses SIMPL+ Macro schreibt den Wert eines analogen Signals, der am Eingang Input anliegt, in eine 16-Bit-Variable eines ADS-Gerätes.

Eingänge

Write                   : DIGITAL_INPUT;
Input                   : ANALOG_INPUT;
Commande_Res            : STRING_INPUT;

Write: Über eine positive Flanke an diesem Eingang wird der Schreibbefehl versendet.

Input: Der Wert dieses Signals wird an das ADS-Gerät geschrieben.

Command_Res: Dieses Signal wird mit dem Ausgang Command_Res des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Rückmeldungen.

Ausgänge

Busy                    : DIGITAL_OUTPUT;
ErrorId                 : ANALOG_OUTPUT;
Command_Req             : STRING_OUTPUT;

Busy: Während der Übertragung wird der Ausgang gesetzt und bleibt so lange aktiv, bis das Signal geschrieben wurde. In dieser Zeit können über diesen Baustein keine weiteren Schreibbefehle aktiviert werden.

ErrorId: Dieses analoge Signal enthält den Fehlercode, der bei der Ausführung des Befehls auftreten kann. Ist kein Fehler aufgetreten, so hat dieses Signal den Wert 0.

Command_Req: Dieses Signal wird mit dem Eingang Command_Req des SIMPL+ Macros TwinCAT 3 Communication verbunden und dient zur Übertragung der Befehle.

Parameter

AdsPort                 : INTEGER_PARAMETER;
IndexGroup              : LONG_INTEGER_PARAMETER;
IndexOffset             : LONG_INTEGER_PARAMETER;

AdsPort: Enthält die Portnummer des ADS-Gerätes.

IndexGroup: Enthält die Index-Gruppennummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.

IndexOffset: Enthält die Index-Offsetnummer des angeforderten ADS-Dienstes. Dieser Wert ist der ADS-Tabelle des angesprochenen Gerätes zu entnehmen.


Fehlercodes

Hex Code | Dec Code | Beschreibung
0x8001 | 32769 | Die Referenz auf FB_CrestronCommunication ist ungültig.
0x8002 | 32770 | Eingangsparameter 'pData' ist ungültig.
0x8003 | 32771 | Eingangsparameter 'nElements' liegt außerhalb des gültigen Bereichs (1-50).
0x8004 | 32772 | Eingangsparameter 'nWriteOffset' liegt außerhalb des gültigen Bereichs (1-500).
0x8005 | 32773 | Eingangsparameter 'nReadOffset' liegt außerhalb des gültigen Bereichs (1-500).
0x8006 | 32774 | Der KeepAlive-Frame muss 5mal empfangen werden, bevor es möglich ist, die Daten zu versenden.
0x8007 | 32775 |
0x8008 | 32776 |
0x8009 | 32777 |
0x800A | 32778 |
0x800B | 32779 |
0x800C | 32780 |
0x800D | 32781 |
0x800E | 32782 |
0x800F | 32783 |
0x8010 | 32784 | Im Datentelegramm liegt das Feld 'Write Offset' oder 'Read Offset' außerhalb des gültigen Bereichs (1-500).
0x8011 | 32785 | Im Datentelegramm liegt das Feld 'Number Of Elements' außerhalb des gültigen Bereichs (1-50).
0x8012 | 32786 | Im Datentelegramm enthält das Feld 'Frame' einen ungültigen Wert.
0x8013 | 32787 | Im Datentelegramm enthält das Feld 'Data Type' einen ungültigen Wert.
0x8014 | 32788 | Im Datentelegramm enthält das Feld 'Cmd' einen ungültigen Wert.


Beispiel

Die folgenden Dateien enthalten ein Beispiel, sowohl für TwinCAT 3 als auch für Crestron. Das Beispiel verdeutlich sehr gut, wie die einzelnen SIMPL+ Macros und SPS-Funktionsblöcke untereinander zu verknüpfen sind.


Protokollbeschreibung

Für die Kommunikation zwischen der Crestron Steuerung und der TwinCAT 3 Steuerung wurde ein textbasiertes Übertragungsprotokoll für TCP/IP definiert. Die TwinCAT 3 Steuerung ist TCP-Server und die Crestron Steuerung ist TCP-Client. Es wird der TCP-Port 48798 verwendet. Die Crestron Steuerung sendet zyklisch ein KeepAlive-Paket um die Verbindung beim TCP-Server aufzubauen. Einzelne Befehle können sowohl von der Crestron Steuerung, als auch von der TwinCAT 3 Steuerung initiiert werden. Von einer Steuerung wird ein Request-Datenpaket versendet. Die andere Steuerung antwortet immer mit einem Response-Datenpaket.

Jedes Datenpaket beginnt mit dem Startzeichen STX (0x02) und endet mit ETX (0x03) und der String-Terminierung (0x00). Das erste Feld eines Datenpakets definiert den Typ des Datenpakets (Request, Response, ..). Der weitere Aufbau ist dann abhängig vom jeweiligen Typ des Datenpakets. Alle Zahlenwerte werden im ASCII-Format übertragen, wobei zuerst das höherwerte Byte (MSB) übertragen wird. Zahlenwerte werden als Hexadezimalzahlen übertragen. Die Invoke-Id ist eine 32-Bit Zufallszahl, die bei dem Response wieder zurückgegeben wird. Dadurch wird sichergestellt, das der empfangene Response auch zu dem zuvor versendeten Request gehört. Eine genaue Beschreibung der jeweiligen Datenpakte enthält die folgende Datei.

Die folgende Grafik zeigt beispielsweise die Datenpakete zum Lesen mehrerer Signale aus einer Crestron Steuerung. Die TwinCAT 3 Steuerung versendet den Request, in dem die gewünschten Elemente angegeben werden (Startoffset und Anzahl der Elemente). Die Crestron Steuerung antwortet mit einem Datenpaket in dem die einzelnen Werte enthalten sind.

Die folgenden Bilder zeigen den Mitschnitt des Befehls ReadBoolArray (FB_CrestronReadBoolArray) von einer TwinCAT 3 Steuerung an eine Crestron Steuerung. Es werden 5 Signale ab Startoffset 7 ausgelesen.

Request

Response