KL6301 EIB - TwinCat programmierung

madmag

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

seit kurzem bin ich Besitzer eine KL6301 EIB-Klemme. Nun werde ich leider aus den Informationen von der Beckhoffseite nicht schlau.

Mein Ziel ist in naher Zukunt EIB-Tastsensoren einzusetzten. Um die ganze Sache näher kennen zu lernen, habe ich folgenden Testaufbau:
PC mit Twincat -> BK9000+KL1104+KL2114+KL6301+KL9010 und ein 4-fach Tastsensor von Jung (2094NABS). Mit der Phys.Adresse: 1.1.1 und alle Taster in der GA 0.0.1

Zu nächst möchte ich ein die Ausgänge der KL2114 mit An- und Ausschalten.
Leider scheitere ich beim Einbinden der KL6301 in ein PLC-Projekt. Ich weiß z.B. nicht wie ich das Array für den Group_Filter erstellen soll.

Ich hoffe mir kann jetzt jemand erklären wie ich vorzugehen habe?

Vielen Dank schon mal!

Gruß MadMag
 
Hallo madmag!

Ich habe das bei mir wiefolgt in ST gelöst:

Code:
PROGRAM MAIN
VAR
    fb_KL6301_0 : KL6301;    (* EIB functonblock *)
    iStatus: INT;
    bRun_KL6301: BOOL;
    bError_KL6301: BOOL;
END_VAR

(*KL6301*)

fb_KL6301_0    ( idx:=2, KL6301_IN:=KL6301_IN_0, KL6301_OUT:=KL6301_OUT_0 );
CASE iStatus OF

0:



(* EIB Address 0.0.100 [Physikalische Adresse]*)
    fb_KL6301_0.EIB_PHYS_ADDR.Area:=0;
    fb_KL6301_0.EIB_PHYS_ADDR.Line:=0;
    fb_KL6301_0.EIB_PHYS_ADDR.Device:=100;

(* Filter [1] 1/0/0 LEN 63 *)
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_ADDR.SUB_MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_LEN:=63;

(* Filter [2] 1/1/0 LEN 63*)
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_ADDR.SUB_MAIN:=1;
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_LEN:=63;

(* Filter [3] 1/2/0 LEN 63*)
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_ADDR.SUB_MAIN:=2;
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_LEN:=63;

(* Filter [4] 1/3/0 LEN 63*)
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_ADDR.SUB_MAIN:=3;
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_LEN:=63;

(*Start EIB Functionblock*)
    fb_KL6301_0.bActivate :=TRUE;

    IF fb_KL6301_0.bReady AND NOT fb_KL6301_0.bError
    THEN
    iStatus:=1;
    END_IF
    IF
    fb_KL6301_0.bError
    THEN
    iStatus:=100;
    END_IF

1:

    bRun_KL6301:=TRUE;
    bError_KL6301:=FALSE;

100:
    bError_KL6301:=TRUE;
    bRun_KL6301:=FALSE;
END_CASE
Die Physikalische Adresse würde ich in den 0.0.xxx Bereich legen.

In dem Informationssystem von Beckhoff, gibt es eine Hilfedatei für die KL6301. Dort ist auch ein Beispielprojekt hinterlegt.


MFG
Ch. Tiedeken
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Commander_Titte,

viele Dank für die Informationen. Ich habe das Beispiel-Projekt gefunden.
Leider kann ich aber die Variablen immer noch nicht im Systemmanager verknüpfen. Ich habe es nach der Beschreibung im Infosys probiert.
Es tauchen aber keine Aus und Eingänge zum Verknüpfen auf!
Irgendwas mach ich da wohl noch falsch:sm18:

Gruß madmag
 
Also,
ich hab die beiden Variablen (KL6301_IN und KL6301_OUT des FB´s) in den Globalen Variablen mit einer Adresse hinterlegt:

Code:
VAR_GLOBAL
    (* EIB terminal KL6301 process data 24 Byte input and 24 Byte output data K-Bus*)
    KL6301_IN_0        AT %IB0: ARRAY[1..24] OF BYTE;
    KL6301_OUT_0     AT %QB0: ARRAY[1..24] OF BYTE;
END_VAR
Dann das SPS Programm übersetzten und im System Manager anfügen.

Schau dir mal die Bilder an, dort kannst du dann sehen wie die Variablen verknüpft werden.
Ich hab das mal mit deiner Hardware umgesetzt.

Du musst dann wie im zweiten Bild zu sehen ist, von der KL6301 alle Eingänge markieren, dann mit rechts Klick Multiverknüpfung anwählen. Dann wie im ersten Bild zu sehen ist, wählst du das Eingangs Array KL6301_IN_0 aus und klickst auf OK. Damit hast du dann die Eingänge der Klemme verknüpft. Das selbige machst du dann auch mit den Ausgängen.

Ich hoffe das hilft dir weiter.

MFG
Tiedeken
 

Anhänge

  • Verknüpfen.jpg
    Verknüpfen.jpg
    311,8 KB · Aufrufe: 79
  • Multiverknüpfung.jpg
    Multiverknüpfung.jpg
    265,9 KB · Aufrufe: 69
Hallo Commander,

hab vor leuter Bäume den Wald nicht gesehen.
Hab doch glatt vergessen die Variablen zu deklarieren. :sb7:
Bin mal gespannt ob es jetzt tut.
Vielen Dank!
Gruß madmag
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich bin auch gerade dabei die Klemme einzubinden, allerdings bekomme ich immer ein Timeout Fehler. Ich gebe die Adresse vor undd ie wird auch beim aktivieren übernommen, aber dann geht kurz danach das Timeout an. Ich habe allerdings bisher nur das KL6301 Basic Programm aufgerufen, also ich sende oder empfange noch nichts, kann das daran liegen?

das ist mein Code(ist ein wenig abgeguckt von dem Commander_Titte
Code:
*KL6301*)

fb_KL6301_0    ( idx:=2, KL6301_IN:=KL6301_IN_0, KL6301_OUT:=KL6301_OUT_0,  );
CASE iStatus OF

0:

fehlerm_eib:=fb_KL6301_0.ierrorid;

(* EIB Address 0.0.100 [Physikalische Adresse]*)
    fb_KL6301_0.EIB_PHYS_ADDR.Area:=5;
    fb_KL6301_0.EIB_PHYS_ADDR.Line:=5;
    fb_KL6301_0.EIB_PHYS_ADDR.Device:=5;

(* Filter [1] 1/0/0 LEN 63 *)
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_ADDR.SUB_MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[1].GROUP_LEN:=63;

(* Filter [2] 1/1/0 LEN 63*)
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_ADDR.SUB_MAIN:=1;
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[2].GROUP_LEN:=63;

(* Filter [3] 1/2/0 LEN 63*)
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_ADDR.SUB_MAIN:=2;
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[3].GROUP_LEN:=63;

(* Filter [4] 1/3/0 LEN 63*)
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_ADDR.MAIN:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_ADDR.SUB_MAIN:=3;
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_ADDR.NUMBER:=0;
    fb_KL6301_0.EIB_GROUP_FILTER[4].GROUP_LEN:=63;


(*Start EIB Functionblock*)
    fb_KL6301_0.bActivate :=togglebit;

    IF fb_KL6301_0.bReady AND NOT fb_KL6301_0.bError
    THEN
    iStatus:=1;
    END_IF
    IF
    fb_KL6301_0.bError
    THEN
    iStatus:=100;
    END_IF

1:

    bRun_KL6301:=TRUE;
    bError_KL6301:=FALSE;

100:
    bError_KL6301:=TRUE;
    bRun_KL6301:=FALSE;






END_CASE



Hat vielleich teiner einen Tip für mich?
Ich habe die Klemme eingefügt und im System manager auch mit der KL6301 Klemme verbunden.

Gruss Marco
 
Hallo,
sind die In und Output Variablen der KL6301 richtig im Systemmanger verknüpft? Würde die Konfiguration im Systemmanger aktiviert?

MFG
Christoph
 
ja ist beides gemacht, teste das aber nochmal.
ich habe in den globalen variablen folgendes eingetragen

KL6301_IN_0 AT %IB170: ARRAY[1..24] OF BYTE;
KL6301_OUT_0 AT %QB170: ARRAY[1..24] OF BYTE;

dann taucht das im systemmanager auf und ich markiere alle und klicke auf kontinuirlich und verknüpfe das mit der klemme, ich muss aber in auch mit in verknüpfen???
Oder muss ich in der globalen variablen mit out der klemme verbinden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm jetzt habe ich die zuordnung nochmal neu estellt, und jetzt kommt schonmal ready, lag dann wohl doch an mir.
Danke schonmal, falls ich noch Fragen hab schreib ich nochmal

Schönen Abend noch
 
Zurück
Oben