# Beckhoff KL3202 Register



## rgeber (19 November 2004)

Hallo,

ich hab hier so eine niedliche kleine Beckhoff BC9000 liegen (die ist wirklich winzig), mit ein paar digitalen I/O´s und einem analogen KL3202 Modul zum Anschluss von PT-x Sensoren. Hab da nun einen PT-100 Dreileiter (eigentlich sinds ja vier, aber wurscht) angeschlossen und hatte vor mit einem SPS Programm die einfach mal Daten zu sammeln.

Vor hatte ich das mit der Funktion ReadWriteTerminalReg in der TcPLCUtilities Bibliothek. Funktiniert nicht, und Beckhoff verkündete mir, dass diese Bibliothek mit Version 2.9 von TwinCAT auch nicht mehr funzt.

Nun meine Frage: Wie komme ich mit einem SPS Programm an die Register des KL3202 Moduls ran. Kann mir nicht vorstellen, dass das sonderlich schwer ist, aber ich steh voll auf der Leitung. Wenn jemand nen Tip hat wäre ich dankbar dafür.

cu
rgeber


----------



## Zottel (19 November 2004)

Die folgende Möglichkeit ist ziemlich umständlich und fehlerträchtig, bis ich es zum Laufen bekommen habe, aber ich benutze es um eine Thermoklemme auf Platin-Rhodium umzukonfigurieren und zwar bei jedem Neustart. Der Sinn ist, daß eine Elektriker eine fabrikneue Klemme einbauen kann, ohne sich um die Konfiguration zu kümmern:

Die Klemme muß "komplex gemappt" sein, so daß das Status/Kommandoregister erreichbar ist.

In einer Schrittkette wird:
1. 16#A0 in das Kommandorgister (%QB0) geschrieben
  %IB0 zurückgelesen. Wenn es gleich 16#A0 ist, weiter mit Schritt 2
2. 16#1235 in das Datenregister (%QW2) geschrieben (Inhalt für das Klemmenregister), dann 223 in Kommandorgister (%QB0) geschrieben. Die 223 enthält die Adresse des Klemmenregisters und das Befehlsbit "Klemmenregister schreiben".
Durch diesen Schritt wird das Paßwort gesetzt, um die Konfiguration ändern zu können.
3. 16#9009 in das Datenregister (%QW2) geschrieben (Inhalt für das Klemmenregister), dann 224 in Kommandorgister (%QB0) geschrieben. Die 224 enthält die Adresse des Klemmenregisters und das Befehlsbit "Klemmenregister schreiben".
Durch diesen Schritt wird das zu konfigurierende Register auf 16#9006 (Platin-Rhodium) gesetzt.
4. 0 in das Kommandorgister (%QB0) geschrieben. Dadurch gibt das Datenregister wieder den Meßwert aus.

Pro Zyklus wird höchstens ein Wert geschrieben. Durch Rücklesen wird sichergestellt, daß der Wert auch im Register steht, bevor es zum nächsten Schritt geht. Es scheint so, daß die interne Kommunikation wesentlich langsamer als die Zykluszeit ist.


----------



## Anonymous (14 September 2005)

Hallo
Genau das selbe wollte ich auch machen. Nur es funktioniert irgendwie nicht, muß ja in ein bestimmtes register was reinschreiben. wenn ich dein Programm ausführe, dann hängt sich mein Modul auf und alle register sind auf null. 
Hast du vielleicht eine Lösung für mich? Ich wäre dir sehr dankbar 
Gruß Serge


----------



## Zottel (14 September 2005)

Anonymous schrieb:
			
		

> Hallo
> Genau das selbe wollte ich auch machen. Nur es funktioniert irgendwie nicht, muß ja in ein bestimmtes register was reinschreiben. wenn ich dein Programm ausführe, dann hängt sich mein Modul auf und alle register sind auf null.
> Hast du vielleicht eine Lösung für mich? Ich wäre dir sehr dankbar
> Gruß Serge


Na ja, ich hatte die private Nachricht so verstanden, daß du von hier ein fertiges Programm runtergeladen hast. Mein Beitrag war ja eher ein "Kochrezept". 
Wichtig ist, daß du nicht hintereinander weg in die Register schreibst, sondern immer erst, wenn du das Ergebnis des vorigen Schritts durch Rücklesen bestätigt bekommst. Natürlich müssen die Adressen angepaßt werden.
Ich hatte eine Klemme 3311 (1 Thermoeingang) verwendet. Andere Klemmmen mögen wesentlich andere Registerbelegungen bzw. ein anderes Default-Passwort haben.
Ich muß mal schauen, wo ich es habe, dann poste ich das Programm.


----------



## Zottel (14 September 2005)

Hier mal das Programm aus TwinCat mit Copy&Paste kopiert

```
PROGRAM MAIN
VAR

 
 reg1: WORD;
 st1: WORD;
 reg2: WORD;
 st2: WORD;
 Anltimer: TON;
 schritt: WORD;
 regnachher: WORD;
 regnachher2: WORD;
 avr: REAL;
 erg: REAL;
END_VAR






 LD  %IW0
 ST  reg1

 LD  %IW2
 ST  st1
 
 LD  avr
 MUL  0.9
 ST  avr
 LD  %IW2
 MUL  0.1
 ADD  avr
 ST  avr
 MUL  0.1
 ST  erg

 LD  Anltimer.Q
 (*
 JMPC NICHT
*)
 LD  st1
 ADD  1
 ST  st1
 LD  TRUE
 ST  Anltimer.IN
 LD  T#2s
 ST  Anltimer.pt
NICHT:
 LD  Anltimer.Q
 JMPC NICHTNULL

 LD  0
 ST  schritt
NICHTNULL:

 CAL  anltimer
 LD  schritt
 EQ  0
 JMPCN ns0
 LD  1
 ST  schritt
 JMP  ende
ns0:
 LD  schritt
 EQ  1
 JMPCN ns1
 LD  160
 ST  %QB0
 LD  %IB0
 EQ  160
 JMPCN ns1
 
 LD  16#1235
 ST  %QW2
 LD  223
 ST  %QB0
 LD  %IW2
 ST  regnachher
 LD  2
 ST  schritt
 JMP  ende
ns1:
 LD  schritt
 EQ  2
 JMPCN ns2
 
 LD  224
 ST  %QB0
 LD  16#9006
 ST  %QW2
 LD  %IW2
 ST  regnachher2
 LD  3
 ST  schritt
 JMP  ende
ns2:
 LD  schritt
 EQ  3
 JMPCN ns3

 LD  0
 ST  %QB0
 LD  %QB0
 EQ  0
 JMPCN ns3
 
 LD  16#F006
 ST  %QW2
 LD  4
 ST  schritt
ns3:
ende:
```
[/code]


----------



## Anonymous (14 September 2005)

*danke*

Hi.
danke fü deine antwort und fürs programm
und wie komme ich an die daten dran. habe nämlich eine KL3202, will diese auf PT100 umprogrammieren.

Gruß Serge


----------



## Zottel (14 September 2005)

*Re: danke*



			
				serge schrieb:
			
		

> Hi.
> und wie komme ich an die daten dran. habe nämlich eine KL3202, will diese auf PT100 umprogrammieren.


Welche Daten? Datenblääter der Klemmen gibt's bei BeCKHOFF zum runterladen.


----------



## Anonymous (14 September 2005)

*programm*

kannst du mir vielleicht auch sagen was bei mir am programm nicht stimmt.
PROGRAM INITIALISIERUNG
VAR CONSTANT
	KL3202_0: 		WORD := 0; 			(* STATUS 0 => status-Maschine INIT KL3202 *)
	KL3202_1: 		WORD := 1; 			(* STATUS 1 => status-Maschine INIT KL3202 *)
	KL3202_2: 		WORD := 2; 			(* STATUS 2 => status-Maschine INIT KL3202 *)
	KL3202_3: 		WORD := 3; 			(* STATUS 3 => status-Maschine INIT KL3202 *)

	KL1501_0:      WORD := 4;        (* STATUS 0 => status-Maschine INIT KL1501 *)
	KL1501_1:      WORD := 5;        (* STATUS 1 => status-Maschine INIT KL1501 *)
	KL1501_2:      WORD := 6;        (* STATUS 2 => status-Maschine INIT KL1501 *)
	KL1501_3:      WORD := 7;        (* STATUS 3 => status-Maschine INIT KL1501 *)
END_VAR
VAR
	STAT_KL3202_1: WORD;
	STAT_KL3202_2: WORD;
	STAT_KL1501_1: WORD;
   STAT_KL1501_2: WORD;
   STAT_KL1501_3: WORD;
END_VAR


CASE STAT_KL3202_1 OF                                   (* Temperatutsmessung 1*)
(***************************************************************************************************)
	KL3202_0:
		TMPFUEHL1_CTRL:=16#A0;
		STAT_KL3202_1:=KL3202_1;
(***************************************************************************************************)
	KL3202_1:
		IF  TMPFUEHL1_CTRL=16#A0 THEN
			STAT_KL3202_1:=KL3202_2;
		END_IF
(***************************************************************************************************)
	KL3202_2:
      TMPFUEHL1_OUT:=16#1235;
      TMPFUEHL1_CTRL:=223;
		STAT_KL3202_1:=KL3202_3;
(***************************************************************************************************)
	KL3202_3:
     TMPFUEHL1_OUT:=16#0106;
     TMPFUEHL1_CTRL:=224;
(***************************************************************************************************)

END_CASE;

CASE STAT_KL3202_2 OF                            (* Temperatutsmessung 2 *)
(***************************************************************************************************)
	KL3202_0:
		TMPFUEHL2_CTRL:=16#A0;
		STAT_KL3202_1:=KL3202_1;
(***************************************************************************************************)
	KL3202_1:
		IF  TMPFUEHL2_CTRL=16#A0 THEN
			STAT_KL3202_1:=KL3202_2;
		END_IF
(***************************************************************************************************)
	KL3202_2:
      TMPFUEHL2_OUT:=16#1235;
      TMPFUEHL2_CTRL:=223;
		STAT_KL3202_1:=KL3202_3;
(***************************************************************************************************)
	KL3202_3:
     TMPFUEHL2_OUT:=16#0106;
     TMPFUEHL2_CTRL:=224;
(***************************************************************************************************)

END_CASE;

CASE STAT_KL1501_1 OF                                          (* Mengenzähler Prozesspumpe *)
(***************************************************************************************************)
   KL1501_0:
		MENGPRZPMP_CTR:=16#A0;
		STAT_KL1501_1:=KL1501_1;
(***************************************************************************************************)
	KL1501_1:
		IF  MENGPRZPMP_CTR=16#A0 THEN
			STAT_KL1501_1:=KL1501_2;
		END_IF
(***************************************************************************************************)
	KL1501_2:
      MENGPRZPMP_OUT:=16#1235;
      MENGPRZPMP_CTR:=223;
		STAT_KL1501_1:=KL1501_3;
(***************************************************************************************************)
	KL1501_3:
     MENGPRZPMP_OUT:=16#0100;
     MENGPRZPMP_CTR:=224;
(***************************************************************************************************)
END_CASE;

CASE STAT_KL1501_2 OF                                          (* Mengenzähler Filtersystem *)
(***************************************************************************************************)
   KL1501_0:
		MENGFLTSYS_CTR:=16#A0;
		STAT_KL1501_1:=KL1501_1;
(***************************************************************************************************)
	KL1501_1:
		IF  MENGFLTSYS_CTR=16#A0 THEN
			STAT_KL1501_1:=KL1501_2;
		END_IF
(***************************************************************************************************)
	KL1501_2:
      MENGFLTSYS_OUT:=16#1235;
      MENGFLTSYS_CTR:=223;
		STAT_KL1501_1:=KL1501_3;
(***************************************************************************************************)
	KL1501_3:
     MENGFLTSYS_OUT:=16#0100;
     MENGFLTSYS_CTR:=224;
(***************************************************************************************************)
END_CASE;

CASE STAT_KL1501_3 OF                                       (* Mengenzähler Entsorgungsmenge *)
(***************************************************************************************************)
   KL1501_0:
		ENTSOGMENG_CTR:=16#A0;
		STAT_KL1501_1:=KL1501_1;
(***************************************************************************************************)
	KL1501_1:
		IF ENTSOGMENG_CTR=16#A0 THEN
			STAT_KL1501_1:=KL1501_2;
		END_IF
(***************************************************************************************************)
	KL1501_2:
      ENTSOGMENG_OUT:=16#1235;
      ENTSOGMENG_CTR:=223;
		STAT_KL1501_1:=KL1501_3;
(***************************************************************************************************)
	KL1501_3:
      ENTSOGMENG_OUT:=16#0100;
      ENTSOGMENG_CTR:=224;
(***************************************************************************************************)
END_CASE;  


wäre dir sehr dankbar. habe dieses nach deiner anleitung geschrieben


----------



## Zottel (14 September 2005)

Sorry, ich glaube ich bin ziemlich hilfsbereit. Aber für mich ist das ein "altes Programm", ich habe keinen BC9000 und keine solche Klemme auf dem Tisch liegen und du schreibst in einer anderen Sprache, so daß ich mich erst reindenken muß. Das ist dauert mir ehrlich gesagt zu lange.


----------



## Anonymous (14 September 2005)

*danke*

ich danke dir trotzdem, probiere mal dein Programm aus. vielleicht kann ich das so umbauen, dass es auf meiner klemme funktioniert. 
gruß Serge


----------



## Onkel Dagobert (14 September 2005)

*PT100 default?*

Hallo Serge,



			
				serge schrieb:
			
		

> ...will diese auf PT100 umprogrammieren...


Ist denn PT100 nicht die default-Einstellung? Bei der KL3202-0028 (Klimabereich) ist es auf jeden Fall so. Welche Steuerung verwendest du?

Gruß, Onkel


----------



## Anonymous (14 September 2005)

Benutze das BC 9000.
Da hast du eigentlich recht. es sei denn es baut später irgendjemand eine gebrauchtes Modul ein, das schon umgestellt ist. Muß mal überlegen, ob ich diese INITIALISIERUNG so zusagen weglasse. irgendwie funktioniert es nicht. 
Gruß Serge


----------



## Onkel Dagobert (14 September 2005)

Hallo Serge,

ich hatte mir unter Step7 einen Baustein geschrieben, mit dem ich einzelne Parameter überprüfen und ggf. ändern kann. Der Ablauf ist durch eine Schrittkette realisiert. Vielleicht hilft es dir.


```
Das angegebene Register wird auf den angegebenen Wert überprüft und ggf. 
geändert.

     +
     N0   Initialisierungsschritt
     |
     N1   Register lesen
     |
     N2   Antwort von Klemme + Registerinhalt
     |
     +------------------------------------------+
     |                                          |
     N3_1 negativ                               N3_2 positiv
     |    - Codewort senden                     |
     |    - Antwort abwarten                    |
     |                                          |
     N4   Codewort lesen                        |
     |    - Antwort abwarten                    |
     |                                          |
     N5   Codewort ist gesetzt                  |
     |    - Schreibschutz ist aufgehoben        |
     |                                          |
     N6   Neuen Registerwert schreiben          |
     |    - Antwort abwarten                    |
     |                                          |
     N7   Codewort zurücksetzen                 |
     |    (Codewort=0)                          |
     |                                          |
     N8   Schreibschutz prüfen                  |
     |    (Codewort lesen)                      |
     |                                          |
     N9   Register lesen                        |
     |    - Antwort abwarten                    |
     |                                          |
     N10  Antwort von Klemme + Registerinhalt   |
     |                                          |
     N11  positiv                               |
     |                                          |
     +------------------------------------------+
     |
     N19  Klemme auf Prozessdatenaustausch
     |
     N20  ENDE
     


- keine Schleife !
- negatives Ergebnis bei TIME_OUT
```

Gruß, Onkel


----------



## gerby (16 Mai 2020)

Hallo Onkel

Hoffe ich werde nicht als Leichenschänder gehängt wenn ich neu hier ankomme und diesen doch sehr alten Thread nochmals hochhole, aber es geht mir genau um das besprochene Thema.



Onkel Dagobert schrieb:


> ich hatte mir unter Step7 einen Baustein geschrieben, mit dem ich einzelne Parameter überprüfen und ggf. ändern kann. Der Ablauf ist durch eine Schrittkette realisiert. Vielleicht hilft es dir.


Bin heute über die Suche in diesen Thread gekommen. Habe hier einen BK3120 Profibuskoppler den ich gerne zusammen mit KL3202 oder evtl. auch KL3204 einsetzten möchte. 
Der Koppler ist bereits vorhanden, die KL3202/4 würde ich noch beschaffen. Das ganze soll für eine Einzelraumregelung der Heizung zuhause verbaut werden.

Das ganze würde ich an einer bestehenden S7-300 SPS über Profibus anbinden wollen.

Habe die Umgebung STEP7 (5.4) testweise mit der nötigen GSD bzw. GSG Datei bestückt und konnte die HW Config damit auch aufbauen (mittels dem "KL/KM3xx2 komplex (24In/24Out)" bzw. "KL3xx4 komplex (24In/24Out)" ). Nun schrecke ich aber etwas vor dieser Register Parametrierung zurück [1] bzw. es fehlt mir der Einstieg um das KL3202/4 Modul entsprechend zu parametrieren.
Obwohl ich anhand der Beispiele bei Beckhoff [2] inzwischen glaube zu verstehen wie die Kommunikation theoretisch funktioniert fehlt mir doch der Ansatz das so brauchbar in die SPS umzusetzen 

Habe im Thread hier [3] gelesen dass mit dem neueren BK3150 Koppler die Parametrierung über die HW Config möglich ist.

Nun wollte ich fragen ob jemand weiss ob es evtl. auch für den BK3120 eine entsprechende GSD/GSG Datei gibt womit die Konfiguration der Register ebenfalls über die HW Config  möglich wäre oder ob ich dich Onkel anfragen kann wie du den Baustein ausprogrammiert hast und ob der vielleicht sogar von dir zu bekommen wäre?

[1] https://infosys.beckhoff.com/index.php?content=../content/1031/kl320x/1547709323.html&id=1491660190272866798
[2] https://infosys.beckhoff.com/content/1031/kl320x/1547713931.html?id=7470538686310181284
[3] Beckhoff BK3150 und erweiterte GSD



Vielen Dank & Grüsse
gerby


----------



## Onkel Dagobert (16 Mai 2020)

Ohje, das liegt inzwischen 15 Jahre zurück. Aber in einem geordneten Haushalt findest sich alles wieder.

Die erweiterten GSD-Dateien bekam man damals nur auf Anfrage von Beckhoff zugeschickt. Man konnte damit zumindest den Sensortyp umkonfigurieren. Falls das deinen Belangen genügt, würde ich es erst einmal auf diese Art versuchen. Ich habe nur die erweiterte GSD-Datei für den BK3150, nicht für den BK3120. Ansonsten viel Spaß bei der Registerkommunikation! Manche Änderungen werden erst nach einem Neustart (Spannungswiederkehr) aktiv. An viel mehr kann ich mich nicht mehr erinnern. Ach ja, es gab bei Beckhoff auch Literatur zur Registerkommunikation. Ich wäre dir zutiefst verbunden, wenn du dir das erst mal reinziehst. Man kann auch versehentlich die falschen Register überschreiben. Ich übernehme natürlich keine Gewähr!


----------



## gerby (17 Mai 2020)

Hallo Onkel

Vielen Dank für deine rasche & ausführliche Antwort inkl. Baustein! 
Ich werde die erweiterte GSD für den BK3120 kommende Woche anfragen und gerne hier berichten ob und welche Möglichkeiten die mehr bietet.
Bezüglich den verschiedenen Registern habe ich in der Zwischenzeit noch das eine oder andere bei Beckhoff gelesen und werde auf Basis von dem einen Versuchsaufbau erstellen.

Ich bedanke mich für die freundliche Hilfe die ich hier als Forums Neuling so rasch und direkt bekommen habe und freue mich auf weitere Besuche hier!

Danke & Schönen Sonntag!
Grüsse,  gerby


----------



## holgermaik (17 Mai 2020)

Die GSD gibt es bei Beckhoff frei. Fängt mit e an. Der Einsatz funktioniert erst ab einer bestimmten Firmware. Ich glaube BD. Bitte nochmal prüfen.

Holger


----------



## gerby (18 Mai 2020)

Hallo Holger

Danke, nach nochmaliger Suche und man muss etwas scrollen konnte ich dann die E312BECE.GSG finden und einbinden.
Und siehe da, diese bietet zB. den KL3202 oder KL3204 spezifisch einzubinden und auch auf den Sensortyp zu konfigurieren.

Gemäss Beckhoff ist die GSD ab Rev. C0 vom Buskoppler verwendbar. Muss ich prüfen.

Danke & Grüsse


----------

