KL6301 mit CX5120
Dieses Beispiel beschreibt, wie ein einfaches SPS-Programm für EIB in TwinCAT geschrieben werden kann und wie es mit der Hardware verknüpft wird. Es soll der Zustand eines Schaltausgangs per Taster verändert werden.
Beispiel: EIB_Sample_KL6301_CX5120.zip
Hardware
Einrichtung der Komponenten
- 1x Embedded-PC CX5120
- 1x Digitale 4-Kanal-Eingangsklemme KL1104 (für die Setz- und Rücksetz-Funktion)
- 1x EIB-Klemme KL6301
- 1x Endklemme KL9010
Richten Sie die Hardware sowie die EIB-Komponenten wie in den entsprechenden Dokumentationen beschrieben ein.
Dieses Beispiel geht davon aus, dass ein Setz-Taster auf den ersten und ein Rücksetz-Taster auf den zweiten Eingang der KL1104 gelegt wurde und die EIB Gruppenadresse vom Schaltausgang bekannt ist.
Software
Erstellung des SPS-Programms
Erstellen Sie ein neues „TwinCAT XAE Project“ und legen Sie ein „Standard PLC Project“ an.
Fügen Sie im SPS-Projekt unter „References“ die Bibliothek Tc2_EIB hinzu.
Erzeugen Sie eine globale Variablenliste mit den Namen GVL_EIB und legen Sie die folgenden Variablen an:
VAR_GLOBAL
bSet AT %I* : BOOL;
bReset AT %I* : BOOL
arrKL6301_IN AT %I* : ARRAY[1..24] OF BYTE;
arrKL6301_OUT AT %Q* : ARRAY[1..24] OF BYTE;
stDataRec : EIB_REC;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bSet | BOOL | Eingangsvariable für den Setz-Taster. |
bReset | BOOL | Eingangsvariable für den Rücksetz-Taster. |
arrKL6301_IN | BYTE | Eingangsvariable für die EIB-Klemme. |
arrKL6301_OUT | BYTE | Ausgangsvariable für die EIB-Klemme. |
stDataRec | Struktur für die Kommunikation mit EIB. |
Alle EIB-Bausteine müssen in derselben Task aufgerufen werden.
Rufen Sie im MAIN-Programm (ST) den Baustein KL6301 auf und legen Sie folgende Variablen an.
PROGRAM MAIN
VAR
fbKL6301 : KL6301;
iStep : INT;
END_VAR
Im Programmteil wird der KL6301 zunächst eine physikalische Adresse zugewiesen und die Filter zum Empfangen von EIB Telegrammen konfiguriert. Nähere Informationen hierzu finden Sie unter KL6301.
CASE iStep OF
0: // Initialising of the physical EIB address; has to be unique in the network
fbKL6301.EIB_PHYS_ADDR.Area := 2; //EIB Address 2.3.4
fbKL6301.EIB_PHYS_ADDR.Line := 3;
fbKL6301.EIB_PHYS_ADDR.Device := 4;
// Configuration of filters for the group addresses
// Filter 1 1/1/0 LEN 63
fbKL6301.EIB_GROUP_FILTER[1].GROUP_ADDR.MAIN:=1;
fbKL6301.EIB_GROUP_FILTER[1].GROUP_ADDR.SUB_MAIN:=1;
fbKL6301.EIB_GROUP_FILTER[1].GROUP_ADDR.NUMBER:=0;
fbKL6301.EIB_GROUP_FILTER[1].GROUP_LEN:=63;
// Filter 2 1/2/0 LEN 63
fbKL6301.EIB_GROUP_FILTER[2].GROUP_ADDR.MAIN:=1;
fbKL6301.EIB_GROUP_FILTER[2].GROUP_ADDR.SUB_MAIN:=2;
fbKL6301.EIB_GROUP_FILTER[2].GROUP_ADDR.NUMBER:=0;
fbKL6301.EIB_GROUP_FILTER[2].GROUP_LEN:=63;
//Filter 3 1/4/0 LEN 63
fbKL6301.EIB_GROUP_FILTER[3].GROUP_ADDR.MAIN:=1;
fbKL6301.EIB_GROUP_FILTER[3].GROUP_ADDR.SUB_MAIN:=4;
fbKL6301.EIB_GROUP_FILTER[3].GROUP_ADDR.NUMBER:=0;
fbKL6301.EIB_GROUP_FILTER[3].GROUP_LEN:=63;
//Filter 4 3/1/0 LEN 63
fbKL6301.EIB_GROUP_FILTER[4].GROUP_ADDR.MAIN:=3;
fbKL6301.EIB_GROUP_FILTER[4].GROUP_ADDR.SUB_MAIN:=1;
fbKL6301.EIB_GROUP_FILTER[4].GROUP_ADDR.NUMBER:=0;
fbKL6301.EIB_GROUP_FILTER[4].GROUP_LEN:=63;
// bActivate: activates the configuration of the KL6301 and enables the further data exchange
fbKL6301.bActivate :=TRUE;
IF fbKL6301.bReady THEN
IF NOT fbKL6301.bError THEN
iStep:=1; // EIB functionblock is now ready to send and receive
ELSE
iStep:=100; // EIB ERROR
END_IF
END_IF
1: ; // EIB functionblock is now ready to send and receive
100: ; // optional error handling EIB ERROR
END_CASE
//Call communication function block
fbKL6301(
iMode:= 0, // 4 filter with 64 entries each
KL6301_IN:= GVL_EIB.arrKL6301_in,
KL6301_OUT:= GVL_EIB.arrKL6301_out,
str_Data_Rec => GVL_EIB.stDataRec);
//Call programs for reading and sending
EIB_Send_Prg();
EIB_Rec_Prg();
Legen Sie ein EIB-Programm EIB_Send_Prg() (CFC) an, in dem der Baustein EIB_BIT_SEND aufgerufen wird.
Die lokale Variable bData wird mit den globalen Variablen bSet und bReset verknüpft und anschließend mit dem Eingang bData des Sendebausteins. Verknüpfen Sie die globale Variable stDataRec mit st_Rec.
Legen Sie ein EIB-Programm EIB_Rec_Prg() (CFC) an, in dem der Baustein EIB_BIT_REC aufgerufen wird. Im Beispiel wird der Tastendruck eines Tasters durch den Baustein ausgelesen. Verknüpfen Sie die globale Variable stDataRec mit st_Rec.
Gehen Sie in die Taskkonfiguration und geben Sie der Task eine niedrigere Zykluszeit von beispielsweise 5 ms.
Weitere Bedingungen finden Sie in der Beschreibung des Bausteins KL6301.
E/A Konfiguration
Wählen Sie als Zielsystem den CX und lassen Sie nach dessen Hardware suchen. Im Bereich der SPS, in der Instanz des Projekts sehen Sie, dass die Ein- und Ausgangsvariablen der Task zugeordnet sind.
Verknüpfen Sie die globalen Variablen nun mit den Ein- und Ausgängen der Busklemmen.
Im Folgenden ist die Verknüpfung der EIB-Variablen ausführlich beschrieben.
Das Array arrKL6301_in mit der rechten Maustaste anklicken und „Verknüpfung ändern“ auswählen.
In der „E/A Konfiguration“ die Klemme auswählen, „Alle Typen“ und „Kontinuierlich“ wählen und „ParameterStatus“, „InputData1“ bis „InputData22“ mit der linken Maustaste und >SHIFT< Taste markieren. Anschließend „OK“ drücken.
Sie können die Verknüpfung jetzt kontrollieren. Gehen Sie dazu auf die KL6301 und öffnen Sie diese. Alle Daten der Klemme müssen jetzt mit einem kleinen Pfeil markiert sein. Ist dies der Fall, fahren Sie genauso mit den Ausgängen fort.