Logamatic 2107
Schnittstellen
I²C-Bus
Die Steuerung besitzt einen internen I²C-Bus, welcher an 2 verschiedenen Stellen abgegriffen werden kann: * Direkt am Modulslot K4 auf der Busplatine * Am Flachbandkabel zur Bedieneinheit 150px
KM271
RS232 Schnittstelle über Zusatzkarte KM271 im Slot K4. Heizungsschnittstelle/Logamatic2107/K4
BFU
Schnittstelle zur Fernbedienungseinheit. Heizungsschnittstelle/BFU
Firmwareversionen
Kann vielleicht mal wichtig werden, hier mal eine kleine Aufstellung der bekannten Firmwareversionen: * Christian 3.14 * Rudi 3.18 * Malte 4.00
* Andreas F.: RC 35 V1.06 MC 10 V2.07 BC 10 V2.03 SAFe V5.20 BIM V1 BIM Nummer 7000
* Herby 4.00
Module
150px * K1 - Relayplatine und zur CPU (Frontpanel) * KM271 im Slot K4
Busplatine - Stecksockel ausgemessen
* K2 - FM241 - Mischer 01 1-15 02 1-8 03 1-19 04 1-12 05 + 06 1-9 07 1-6 08 1-3 09 1-18 10 1-2 11 - 12 1-13
* K3 - FM242 - 2. Stufe (klein) 01 X 02 1-6 03 1-7 04 1-2 05 + 06 1-9 07 X 08 X 09 1-5 10 1-17 11 - 12 1-13
* K4 - FM271 oder FM244 - Kommunikation oder Solar 01 1-13 (24V-) 3* 02 1-20 schwingt 03 1-16 04 1-14 05 1-12 2* 06 + 5V+ 07 1-9 (24V-)3* 08 1-10 siehe 20 schwingt 09 1-6 3* 10 1-4 11 1-2 3* 12 - -
* Legende unten -? oben +? - = - + = 5V+ 1-9 = 24V+ 1-13= 24V- Kollektorfühler FSK unterer Speicherfühler FSS
Diverses
Pinbelegung Flachbandkabel
* Pinangaben beziehen sich auf den roten Draht als Pin #1. * Input/Output ist relativ zur Bedieneinheit 01 +5V - Versorgungsspannung? An der stelle steht ein „+“ auf der Platine 02 GND 03 5V gemessen, vielleicht ein binärer E/A? 04 INPUT (0V Displayeinheit aus/ 5V Displayeinheit an + Bustraffic) 05 OUTPUT Relais Brenner (an=5V, aus=0V) 06 OUTPUT ??? (0V) 07 NC 08 OUTPUT ??? (0V) 09 OUTPUT Relais HK1 Pumpe (0V aus / 5V an) 10 OUTPUT Relais WW Pumpe (0V aus / 5V an) 11 OUTPUT Relais ZIRK Pumpe (0V aus / 5V an) 12 OUTPUT Relais MISCHER (0V aus / 5V auf) 13 OUTPUT Relais MISCHER (0V aus / 5V zu) 14 OUTPUT Relais HK2 Pumpe (0V aus / 5V an) 15 INPUT ADC (Value ⇒ Signal High Time) 16 OUTPUT ADC ADDR 0 17 OUTPUT ADC ADDR 1 18 OUTPUT ADC ADDR 2 19 OUTPUT SIGNAL UART 1200 Baud (8n1) » BFU 20 INPUT SIGNAL UART 1200 Baud (8n1) « BFU 21 OUTPUT ADC RESET ??? 22 OUTPUT ADC SYNC 23 SDA 24 SCL 25 OUTPUT 50hz sinus der fast wie dreieck aussieht 0,16V AC gemessen, ab und zu störungen messbar 26 NC
* Pin 23+24 entspricht Busplatine K4 1-10+1-20
I2C Bus
EEPROM
* Ist über den I2C BUS erreichbar * AT24C01 (Herby: ATC24C16AN) PAGE0 0xff PAGE1 0xff PAGE2 0xff PAGE3 0xff PAGE4 DATEN PAGE5 DATEN PAGE6 DATEN ein paar Byte, der Rest 0xFF PAGE7 0xff
Temperaturen
So, zu den Temperaturen bei der 2107. Leider werden nur die programmierbaren Temperaturen im EEProm gespeichert. Die eigentlichen Temperaturen werden über einen extra Bus übertragen. Es gibt 8 mögliche Temperaturen (ADC-Werte), wobei eine/r die Referenz ist. Ich konnte hier schon die Temperaturen per Hardwaresimulation durchfahren, aber die Referenz ist noch etwas undurchsichtig, geht aber in die Berechnung der Temperaturen mit ein. In der Serviceanleitung sind die Kurven und entpsrechenden Werte der Widerstände abgebildet.
ADC Adressen
0x00 KESSEL 0x01 AUSSEN 0x02 WW 0x03 ??? 0x04 ??? 0x05 ??? 0x06 VORLAUF 0x07 REF
Temperatursensoren
* Identifizierung Temperatursensoren (2107) aus den Kurven im [http://www.fuehlersysteme.de/resistance_characteristics_de.pdf Serviceheft]: Außentemperatur: NTC 10Kohm Kesselwasser : NTC 10Kohm Raumtemp : NTC 10Kohm Abgas : ??? Kollektor : ???
Telegramme
* Bei den Nachrichten handelt es sich offenbar um eine Art „ECO-CAN“ Bus. * Jeder Teilnehmer auf dem Bus hat eine Adresse und einen Speicherbereich der ausgelesen oder beschrieben werden kann. Initial sollte der komplette Speicher übertragen werden und danach nur Speicherbereiche in denen Änderungen stattgefunden haben. Da die Adressierung des Speichers noch unklar ist, sehen die Nachrichten immer gleich aus, welches Bit MSB und LSB ist, ist leider auch noch unklar … die dezimale 65 in den Daten ist wohl ein Lückenfüller für nicht vorhandene Werte bzw. Werte die nicht beschrieben werden sollen/können. *Das letzte Byte einer Nachricht ist die CRC. A8 07 : A9 65 11 20 3C 00 22 1A A8 3F : A9 65 11 20 3C 00 22 1A
- *——— 0 Nacht, 1 Tag, 2 Auto
- *————-Temp Nacht eingestellt (0.5 Auflösung)
- *—————-Temp Tag eingestellt (0.5 Auflösung)
AA 57 : AB 65 FB 28 20 3C 65 D4
- *
- *
- *
- *—————-Temp WW eingestellt
CRC Berechnung
Erstmal ein funktionierender Plain code, thx Ingo & Rudi
poly = 12 crc1 = 0x00
for i in range(0,len(a)-1):
crc1 = crc1 ^ int(a[i],16) crc2 = crc1 if crc1 & 0x80: crc1 ^= poly
d = 0 if crc1 & 0x80: d = 1 crc1 = crc1 << 1 crc1 &= 0xfe crc1 |= d
⇒ crc2
Vereinfacht: for i in range(0,len(a)-1):
d = 0
if crc1 & 0x80:
crc1^=12
d = 1
crc1 = crc1 << 1
crc1 &= 0xfe
crc1 |= d
crc1 = crc1^int(a[i])
Und das ganze noch in Delphi (thx Mario) function Berechne_Checksumme(data: array of integer; TelLaenge:integer): Integer; var
crc1 : integer; i, d : Integer;
begin
crc1 := 0;
for i:=0 to TelLaenge-4 do
begin
d := 0;
if crc1 AND $80 = $80 then
begin
crc1 := crc1 XOR 12;
d := 1;
end;
crc1 := crc1 SHL 1; //linksschieben
crc1 := crc1 AND $fe;
crc1 := crc1 OR d;
crc1 := crc1 XOR ord(data[i]);
end;
result := crc1;
end;
FHEM von Rudolf K.
Interface von Rudi
Error Codes
0 = "Kein Fehler", 2 = "Aussenfuehler defekt", 3 = "HK1-Vorlauffuehler defekt", 4 = "HK2-Vorlauffuehler defekt", 8 = "Warmwasserfuehler defekt", 9 = "Warmwasser bleibt kalt", 10 = "Stoerung thermische Desinfektion", 11 = "HK1-Fernbedienung defekt", 12 = "HK2-Fernbedienung defekt", 15 = "Keine Kommunikation mit HK1-Fernbedienung", 16 = "Keine Kommunikation mit HK2-Fernbedienung", 20 = "Stoerung Brenner 1", 24 = "Keine Verbindung mit Kessel 1", 30 = "Interner Fehler Nr. 1", 31 = "Interner Fehler Nr. 2", 32 = "Interner Fehler Nr. 3", 33 = "Interner Fehler Nr. 4", 49 = "Kesselvorlauffuehler defekt", 50 = "Kesselzusatzfuehler defekt", 51 = "Kessel bleibt kalt", 52 = "Stoerung Brenner", 53 = "Stoerung Sicherheitskette", 54 = "Externe Stoerung Kessel", 55 = "Abgasfuehler defekt", 56 = "Abgasgrenze ueberschritten", 87 = "Ruecklauffuehler defekt", 92 = "RESET"
