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

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

EIB_REC

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.

KL6301 mit CX5120 1:

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.

KL6301 mit CX5120 2:

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.

KL6301 mit CX5120 3:

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.

KL6301 mit CX5120 4:

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.

KL6301 mit CX5120 5:

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.

KL6301 mit CX5120 6: