Moderne Messeinrichtung (Smartmeter) auslesen (Modbus RTU)
Auslesen von modernen Messeinrichtungen (mME, Smartmeter) über die optische Schnittstelle mit dem SML-Protokoll und Bereitstellung einer RS-485 Schnittelle
Zeitraum: Februar 2021 - September 2021
Zuletzt aktualisiert am 01.11.2024- Vorwort
- Bausatz
- Kompatibilität
- Registertabelle
- Lastmanagement
- Modbus RTU
- Parameterliste ändern / erweitern
- Smart Message Language (SML)
- Schaltplan
- Platine
- Gehäuse
- Materialliste
- Downloads
- Aktualisierungsverlauf & Pendenzenliste
Mithilfe dieses Lesekopfes soll auf die optische SML-Schnittelle einer modernen Messeinrichtung (mME, Smartmeter) zugegriffen werden. Der Lesekopf wird dazu magnetisch am Zähler befestigt. Ein optisch eingehendes SML-Telegramm wird vom Lesekopf empfangen und analysiert.
Zurzeit verfüge ich über einige Bausätze des Lesekopfes. Details und ein Formular zur Anfrage eines Bausatzes finden Sie hier.
Zum Bausatz
Der Lesekopf unterstützt das SML Protokoll mit der Version 1.04.
Der Lesekopf wurde bereits an folgenden Zählern getestet:
- EFR SGM-C4 (Energiewerte und nach PIN-Eingabe vollständiger Datensatz)
- EMH ED300L (Energiewerte und nach PIN-Eingabe momentane Wirkleistung)
- EMH mHZ-KW8e (Energiewerte und nach PIN-Eingabe momentane Wirkleistung)
- EMH mMe4.0 (Adapter notwendig; Energiewerte und nach PIN-Eingabe momentane Wirkleistung)
- Holley DTZ541-ZEBA (Energiewerte und nach PIN-Eingabe vollständiger Datensatz)
- Landis+Gyr E320 (Energiewerte und nach PIN-Eingabe momentane Wirkleistung)
Es werden auch weitere Zähler unterstützt. Achten Sie darauf, dass der Zähler das SML V1.04 Protokoll verwendet.
Falls Sie den Lesekopf an einem hier nicht aufgeführten Zähler betreiben, dann teilen Sie mir das gerne über das Kontaktformular mit.
Abbildung 1: Register für Momentanwerte | Abbildung 2: Register für Energiewerte | Abbildung 3: Allgemeine Register |
Der Lesekopf sucht im Telegramm der Messeinrichtung die in der Registertabelle dickgedruckten Werte. Die restlichen Werte werden berechnet, falls dies mit den von der Messeinrichtung übergebenen Werten möglich ist. Zu beachten ist dabei, dass die Berechnungen nur die Grundschwingungsanteile berücksichtigt und Oberschwingungen unberücksichtigt bleiben.
Weitere Hinweise zu einigen Registern:
- Register 24, 64, 104 und 144: Der Cosinus Phi wird ohne Oberschwingungsanteile nach der IEC Vorzeichenkonvention ausgegeben. (Cosinus Phi > 0: positive Wirkleistung ; Cosinus Phi < 0; negative Wirkleistung)
- Register 8192 und 8193: In diese Register kann eine Hersteller- und Geräteidentifikation eingetragen werden. Weitere Informationen dazu befinden sich im Abschnitt Lastmanagement.
- Register 8196 bis 8200: Diese Register enthalten eine aus 10 Bytes bestehende Lesekopf-ID. Diese ID ist bei jedem Lesekopf eindeutig und unveränderlich.
So kann jeder Lesekopf identifiziert werden.
Beispiel: Registereinträge: 0x0123, 0x4567, 0x89ab, 0xcdef, 0xfedc -> Lesekopf-ID: 01-23-45-67-89-ab-cd-ef-fe-dc - Register 8201 bis 8205: Diese Register enthalten die aus 10 Bytes bestehende Server-ID der modernen Messeinrichtung. Diese ID ist bei jedem Zähler eindeutig und auf ebendiesen aufgedruckt.
So kann jeder Zähler identifiziert werden.
Beispiel: Registereinträge: 0x0123, 0x4567, 0x89ab, 0xcdef, 0xfedc -> Server-ID: 01-23-45-67-89-ab-cd-ef-fe-dc -
Register 8207: Mit diesem Register kann bestimmt werden, welche Gesamtwirkleistung in die Register 0 bis 3 eingetragen werden soll:
- 0: Die berechnete Gesamtwirkleistung wird eingetragen (Summe aus 40-41, 42-43, 80-81, 82-83, 120-121, 122-123).
- 1: Die von dem Zähler übergebene Gesamtwirkleistung (Register 28) wird dem Vorzeichen entsprechend eingetragen.
- Register 8208 und 8209: Die Unixzeit wird aktualisiert, sobald ein neuer und gültiger Datensatz von einer modernen Messeinrichtung empfangen und in die Register eingetragen wurde.
Für eine korrekte Zeit muss zuvor die aktuelle Unixzeit in die Register geschrieben werden.
Da die interne RTC (Real Time Clock) des Lesekopfes nicht besonders präzise ist, kann es zu Zeitabweichungen kommen. - Register 8210: Dieses Register ist für zukünftige Funktionen reserviert.
- Register 8211: Wird die PIN des Zählers in dieses Register eingetragen, dann überträgt der Lesekopf diese PIN an die moderne Messeinrichtung. Dieser Vorgang kann einige Sekunden dauern. Währenddessen kann mit dem Lesekopf nicht kommuniziert werden. Es erfolgt keine Bestätigung, ob die Eingabe der PIN erfolgreich war. Die PIN bleibt nicht im Lesekopf gespeichert. Das Register wird immer mit 0 gelesen.
Für den Lesekopf steht eine Software zur Verfügung, siehe Abbildung 4. Hauptsächlich dient die Software zum Parametrieren des Lesekopfes und zum gelegentlichen Auslesen der Momentanwerte bzw. Energiewerte.
Zur SoftwareAbbildung 4: Übersicht der Software.
Die Registertabelle des Lesekopfes ist mit der Registertabelle vom KOSTAL Smart Energy Meter (KSEM) kompatibel.
Damit andere Geräte den Lesekopf als KSEM erkennen, muss die Hersteller- und Gerätekennung in die entsprechenden Register eingetragen werden:
- Register: 8192 ; Wert: 0x5233
- Register: 8193 ; Wert: 0x4852
Im Register 8244 wird das Messintervall angegeben. Dieses wird aus der Zeitdifferenz zwischen dem aktuellen Datensatz und dem vorhergegangenen Datensatz der modernen Messeinrichtung gebildet. Somit beträgt das Messintervall in der Regel eine oder mehrere Sekunden. Einige Wechselrichter bzw. Wallboxen fordern ein genaueres Messintervall. Dies kann über die optische Schnittstelle der modernen Messeinrichtungen leider nicht erreicht werden. Aus diesem Grund kann das Messintervall im Lesekopf manuell angegeben werden. Dabei ist zu beachten, dass das tatsächliche Messintervall dadurch nicht verändert wird. Zur manuellen Eingabe eines Messintervalls sind folgende Register anzupassen:
- Register: 8249 ; Wert: 0
- Register: 8244 ; Wert: 500 (Das Messintervall wird mit 500 ms vorgetäuscht)
Zusätzlich ist zu beachten, welche Daten die moderne Messeinrichtung ausgibt. Wird nur die momentane Wirkleistung und keine Spannungen und Ströme ausgegeben, dann muss ebenfalls das Register 8250 geändert werden:
- Register: 8250 ; Wert: 0
An folgenden Geräten wird der Lesekopf für das Lastmanagement eingesetzt:
-
KEBA P30 x-series
In Kombination mit folgenden Zählern:- EFR SGM-C4
- Holley DTZ541-ZEBA
-
Kostal Plenticore plus 10 (HW: 0201, MC-Version 01.76, IOC-Version 01.75)
Das Messintervall wird mit 500 ms vorgetäuscht.
In Kombination mit folgenden Zählern:- Holley DTZ541-ZDBA (Register 8250 auf 0)
Falls Sie den Lesekopf an anderen Geräten für das Lastmanagement verwenden, dann teilen Sie mir das gerne über das Kontaktformular mit.
Unterstützte Funktionen
Es werden folgende Funktionen unterstützt:
-
Read Holding Registers (FC03):
Mit dieser Funktion können die Register des Lesekopfes gelesen werden. Eine entsprechende Anfrage schaut z.B. so aus:
0x01 0x03 0x00 0x11 0x00 0x01 0xd4 0x0f
Die einzelnen Bytes haben folgende Bedeutung:
- 0x01: Geräteadresse
- 0x03: Modbus-Funktion
- 0x00 0x11: Adresse des ersten angefragten Registers (Hier: 0x11 -> 17 -> Wirkleistung)
- 0x00 0x01: Anzahl der angefragten Register
- 0x4d 0x0f: CRC-Checksumme
Eine Antwort könnte so aussehen:
0x01 0x03 0x02 0x02 0x09 0x79 0x22
Die einzelnen Bytes haben folgende Bedeutung:
- 0x01: Geräteadresse
- 0x03: Modbus-Funktion
- 0x02: Anzahl der Datenbytes
- 0x02 0x09: Wert des gelesenen Registers. In diesem Beispiel beträgt die momentane Leistung 0x0209 W ≙ 521 W.
- 0x79 0x22: CRC-Checksumme
-
Diagnostics: Return Query Data (FC08, 0x0000):
Hiermit wird die gesendete Anfrage von dem Lesekopf unverändert zurückgeschickt. Diese Funktion soll zum Testen der Verbindung dienen. Beispiel:
0x05 0x08 0x00 0x00 0x12 0x34 0xab 0xcd 0xf3 0xe7
Die Anfrage wird wie erwähnt ohne Änderung zurückgegeben:
0x05 0x08 0x00 0x00 0x12 0x34 0xab 0xcd 0xf3 0xe7
-
Preset Multiple Registers (FC16):
Mit dieser Funktion können Register geschrieben werden. Bei diesem Lesekopf wird dies nur von den Registern 0 bis 3 unterstützt. Weitere Informationen dazu befinden sich im Anhang der Registertabelle.
Bei einem nicht unterstützten Funktionscode oder einer ungültigen Registeradresse antwortet der Lesekopf mit einer Fehlermeldung. Bei einem ungültigen Funktionscode schaut das z.B. so aus:
0x05 0x83 0x01 0xc1 0x31
Codierung anpassen
Die unterstützten Codierungen für den Modbus sind in der nachfolgenden Tabelle 1 aufgeführt:
Tabelle 1: Unterstützte Codierungen für den Modbus.
Am Lesekopf
Die Codierung kann direkt am Lesekopf mithilfe der beiden Drehcodierschalter eingestellt werden:
- Drehcodierschalter auf die für die gewünschte Codierung passende Position einstellen. Siehe Tabelle 1.
- Mithilfe zweier Kurzschlussbrücken oder eines Schraubendrehers die Baudrate 19200 Bd und 38400 Bd an der Stiftleiste XE1 gleichzeitig aktivieren und warten, bis der Lesekopf zwei Mal aufblinkt.
- Durch das zweifache Aufblinken wird die Eingabe der Stoppbits und der Parität bestätigt. Ohne das Aufblinken wurde keine Änderungen vorgenommen. Dann muss ggf. die Position der Drehcodierschalter überprüft werden.
- Ursprüngliche Konfiguration der Drehcodierschalter und der Baudrate wiederherstellen.
In der Firmware
Alternativ kann die Codierung auch in der Firmware in der Datei main_functions.c
in der Funktion void general_init(void) {...}
geändert werden. Dazu müssen einfach die entsprechenden Codezeilen aktiviert bzw. deaktiviert werden:
Sollen andere oder weitere Parameter aus der modernen Messeinrichtung abgefragt werden als in der Registertabelle angegeben sind, dann kann der Quellcode entsprechend angepasst werden. Dazu sind die folgenden Schritte zu bearbeiten.
-
In der Funktion
void sml_analyse(void)
(Zeile 190 ff.) ist ein Array aus C-Strukturen mit der Bezeichnungobis-legal
(Zeile 196 ff.) vorhanden, in der alle unterstützten OBIS-Codes aufgelistet sind.Ein Eintrag ist folgend aufgebaut:
{obis_code, register_start, register_number, register_type, scaler}
Die einzelnen Einträge haben diese Bedeutung:- obis_code: Die drei Teile eines OBIS-Codes in Hexadezimaldarstellung [C.D.E].
- register_start: Registeradresse des ersten Registers für diesen Eintrag.
-
register_number: Anzahl der Register. Vorbereitete Makros:
#define REG_BOOL 0x01
#define REG_INT8 0x01
#define REG_INT16 0x01
#define REG_INT32 0x02
#define REG_INT64 0x04 -
register_type: Datentyp der Werte im Register. Vorbereitete Makros:
#define REG_SIGNED 0x50 // Register is signed
#define REG_UNSIGNED 0x60 // Register is unsigned
#define REG_STRING 0x00 // Register is a string array - scaler: Anzahl der Nachkommastellen, mit dem der Wert abgespeichert werden soll. Ein negativer Wert ist möglich. Beispiel: -3 -> Kilo
{0x1f0700, 60, REG_INT32, REG_UNSIGNED, 3}, // Current L1
- obis_code: 0x1f0700 (OBIS-Code Strom L1: 31.7.0 -> 0x1f.0x07.0x00 -> 0x1f0700).
- register_start: 60 (Wert wird ab dem Register 60 eingetragen).
- register_number: REG_INT32 (0x02 -> 2 -> 2 Register).
- register_type: REG_UNSIGNED (Wert ohne Vorzeichen).
- scaler: 3 (Drei Nachkommastellen, z.B. 1,234 A. Im Register steht dann 1234 bzw. 0x4d2).
Es kann entweder ein neuer Eintrag hinzugefügt oder ein bestehender geändert werden.
Wird ein bestehender Eintrag geändert und die Registeranzahl erhöht (register_number), dann muss ggf. bei allen nachfolgenden Registern das Startregister entsprechend nach oben verschoben werden, da der vergrößerte Eintrag sonst mit dem nachfolgenden Einträgen in der Registertabelle kollidieren kann. Wird hingegen die Registeranzahl verringert, dann sollte das Startregister der nachfolgenden Einträge reduziert werden, um Lücken in der Registertabelle zu verhindern.
-
Wurde ein neuer Eintrag in dem Array
obis-legal
hinzugefügt, dann muss das MakroSUPPORTED_OBIS_CODES_NUMBER
in der Dateisml.h
(Zeile 51) entsprechend erhöht werden. -
Nun muss in der Datei
modbus_RTU.c
ggf. die Registertabelle angepasst werden. Die einzelnen Tabellen sind in einem Arrayregister_tables
aufgeführt.Ein Eintrag in diesem Array ist wie folgt aufgebaut:
{address_first, address_last, storage, buffer}
Die einzelnen Einträge haben diese Bedeutung:- address_first: Erste Adresse der Tabelle.
- address_last: Letzte Adresse der Tabelle.
- storage: Zeiger auf ein Array zum Speichern der Registerwerte. Diese Werte können über den Modbus ausgelesen werden.
- buffer: Zeiger auf ein Array zum Speichern der Registerwerte. Dieser Speicher wird benutzt, um die per SML empfangenden Daten des Lesekopfes zwischenzuspeichern. Erst nachdem die CRC-Checksumme des SML-Telegramms geprüft wurde, werden diese Werte in den
storage
-Speicher übernommen.
static uint16_t table_04[16]; // 40-47
{40, 47, table_04, table_04+8},
- address_first: Tabelle beginnt mit der Adresse 40
- address_last: Tabelle endet mit der Adresse 47
- storage: Zeiger auf das Array
table_04
- buffer: Zeiger auf das Array
table_04
mit einem Adressoffset von 8
storage
und derbuffer
in einem Array gespeichert. Da die Beispiel-Tabelle über 8 Register verfügt, muss das Array über die doppelte Größe (16) verfügen. Derbuffer
hat dementsprechend einen Adressoffset von 8.
Eine Beispiel in SML mit Erklärung ist hier zu finden.
Der Lesekopf ist kein Interpreter für eine eine komplette SML Nachricht. Es werden nur die notwendigen Informationen erfasst. Im Prinzip sucht der Lesekopf zunächst nach der Startsequenz (1B 1B 1B 1B) einer SML Nachricht. Wurde diese Startsequenz gefunden, dann wird nach den im Lesekopf parametrierten OBIS-Codes gesucht und die entsprechenden Werte zwischengespeichert. Dieser Vorgang wird so oft wiederholt, bis die Endsequenz (1B 1B 1B 1B) gefunden wird. Nach erfolgreicher Überprüfung der CRC-Checksumme werden die fehlenden Werte wenn möglich berechnet und an die Modbus Register übergeben. Der Prozess beginnt von vorne. Das Prinzip ist in dem nachfolgenden Flussdiagramm veranschaulicht:
Abbildung 5: Analyse einer SML Nachricht als Flussdiagramm dargestellt.
Abbildung 6: Schaltplan des Lesekopfes.
Der Versorgungsspannung (6,5 bis max. 24 V / DC) des Lesekopfes wird über die Anschlussklemme (XZ1, max. 1,00 mm2) bereitgestellt. Die Spannungsversorgung ist durch einen MOSFET (QA1) vor Verpolung geschützt. Eine Zenerdiode (FA1) begrenzt die Gate-Source-Spannung am MOSFET. Die Eingangsspannung wird mit einem Spannungswandler (TA1) auf 5 V / DC gesetzt. Der Spannungswandler wird durch eine Schottkydiode (RA2) vor einer rückwärtigen Einspeisung geschützt.
Der Lesekopf verfügt über einen Fototransistor (BR1) um die optischen Signale einer modernen Messeinrichtung zu empfangen. Mit einer Infrarot-Diode (EF1) können ebenfalls Informationen an den Zähler geschickt werden (Mehr Informationen folgen).
Die RS485-Schnittelle für den MODBUS RTU wird über einen MAX485-IC (TF1) bereitgestellt. Ein interner Abschlusswiderstand (RA3, RB1) kann über eine Stiftleiste (XG1) aktiviert werden.
Über die Anschlussklemme kann eine hingehende und eine abgehende Datenleitung angeschlossen werden, sodass die Daisy-Chain-Topologie des Bussystems bestmöglich beibehalten wird und keine größeren Stichleitungen entstehen.
Die Baudrate des Modbus kann über eine Stiftleiste zwischen 9600, 19200 oder 38400 gewählt werden. Die Geräteadresse des Lesekopfes kann über zwei Drehcodierschalter eingestellt werden.
Das Herzstück ist der AtTiny 1626 Mikrocontroller (AF1). Dieser Controller verfügt über zwei USARTs, sodass der Betrieb der SML-Schnittstelle und des Modbus leicht umgesetzt werden kann. Die Programmierung erfolgt über eine UPDI-Schnittstelle.
Abbildung 7: Vorderseite der Platine. |
Abbildung 8: Rückseite der Platine. |
Abbildung 9: Bestückte Platine. |
Abbildung 10: Vorderseite der Platine als 3D-Ansicht. |
Abbildung 11: Rückseite der Platine als 3D-Ansicht. |
Das Gehäuse besteht aus drei Teilen und kann mit einem 3D-Drucker produziert werden.
Zunächst wird ein Ringmagnet in dem Gehäuse platziert. Anschließend wird die Zwischenplatte eingebaut und mit einer Schraube befestigt, sodass der Magnet fixiert und von der Platine isoliert ist.
Darauffolgend kann die Platine in das Gehäuse gesteckt und ebenfalls mit einer Schraube befestigt werden.
Der Deckel wird aufgesteckt und mit zwei weiteren Schrauben befestigt. Mithilfe von Lichtleitern wird das Licht der beiden Status-LEDs nach außen geführt. Auf der Vorderseite des Deckels ist eine
Einbuchtung vorhanden, in der eine Informationen über den Lesekopf eingeklebt werden kann, z.B. mit einem 9mm-Schriftband.
Es ist eine M12-Kabelverschraubung als Leitungseinführung vorgesehen, sodass die Hin- und Rückführung des Datensignals innerhalb einer Leitung stattfinden muss. Als Datenleitung wird z.B. die UNITRONIC® Li2YCY (TP) 4x2x0,22 empfohlen. Allerdings verwende ich daheim ein Cat6-Netzwerkkabel, was für die private Bastler-Lösung ebenfalls seinen Zweck erfüllt.
Abbildung 12: Gerendertes Bild des Gehäuses. |
Abbildung 13: Komplett montierter Lesekopf. |
Abbildung 15: Einsatz des Lesekopfes an einem SGM-C4 Zähler. |
Abbildung 15: Einsatz des Lesekopfes an einem eHZ-KW8E Zähler. |
Abbildung 16: Explosionszeichnung des Lesekopfes.
Bauteil | Bezeichnung / Wert | Gehäuse / Bauform | Benennung | Menge | Preis* |
---|---|---|---|---|---|
Reichelt | |||||
Leiterplattenklemme | DG308-2.54-08P-14-00A(H) | 8-polig / 2.54 mm RM | XZ1 | 1 | 1,26 € |
MOSFET (P-Channel) | NDS0610 | SOT-23 | QA1, QA2 | 2 | 0,24 € (0,12 € / St.) |
Zenerdiode | MM3Z12VT1G | SOD-323 | FA1 | 1 | 0,03 € |
Widerstand | 100 kΩ | 0402 | RA1, RA5, RA6 | 3 | 0,09 € (0,03 € / St.) |
Kondensator | 150 nF | 0603 | CA1 | 1 | 0,15 € |
Kondensator | 1 µF | 0603 | CA2 | 1 | 0,02 € |
Schottkydiode | BAT54J | SOD-323F | RA2 | 1 | 0,06 € |
Stiftleiste | 1x2 | 2,54 mm RM | XG1 | 1 | 0,06€ |
Kurzschlussbrücke | - | 2,54 mm | für XG1, XE1 | 2 | 0,08 € (0,04 € / St.) |
Widerstand | 120 Ω | 1206 | RA3 | 1 | 0,04 € |
Kondensator | 1 nF | 0603 | RB1 | 1 | 0,02 € |
Drehcodierschalter | Hexadezimal | 3+3 SMD | SF1, SF2 | 2 | 3,98 € (1,99 € / St.) |
Widerstand | 10 kΩ | 0402 | RA4 | 1 | 0,03 € |
Fototransistor | SFH309FA | 3mm THT | BR1 | 1 | 0,24 € |
Stiftleiste | 1x3 | 2,54 mm RM | XG2 | 1 | 0,08 € |
Stiftleiste | 2x2 | 2,54 mm RM | XE1 | 1 | 0,11 € |
485 Transceiver | SP485ENL | SO-8 | TF1 | 1 | 1,25 € |
Kondensator | 100 nF | 0603 | CA3, CA4 | 2 | 0,04 € (0,02 € / St.) |
Widerstand | 680 Ω | 0402 | RA7, RA8 | 1 | 0,06 € (0,03 € / St.) |
IR-LED | L-7104F3BT | 3mm THT | EF1 | 1 | 0,18 € |
Widerstand | 2.2 kΩ | 0402 | RA9, RA10 | 2 | 0,06 € (0x03 € / St.) |
LED | TLMY 1000 | 0603 | PF1, PF2 | 2 | 0,40 € (0x20 € / St.) |
Lichtleiter | - | Ø 3,2 mm | für PF1, PF2 | 2 | 0,80 € (0x40 € / St.) |
Kabelverschraubung | - | M12x1,5 | - | 1 | 0,62 € |
Gegenmutter | - | M12x1,5 | - | 1 | 0,43 € |
Blechschraube | PAN-Head | 2,9x6,5 mm | - | 3 (MOQ: 100) | 2,20 € |
Blechschraube | PAN-Head | 2,9x9,5 mm | - | 1 (MOQ: 100) | 2,20 € |
Mouser | |||||
Mikrocontroller | ATTINY1626-SU | SOIC-20 | AF1 | 1 | 1,34 €** |
Spannungsregler | TS3480CX50 RFG | SOT-23 | TA1 | 1 | 0,74 €** |
magnets4you | |||||
Ringmagnet | Neodym | Ø 26 x 12 x 9 mm | - | 1 | 5,98 €*** |
JLCPCB | |||||
Platine | - | - | - | 1 (MOQ: 5) | 2,60 €**** |
SUMME: ~25,93 € (Ohne Anschlussleitung und Versandkosten)
*: Die oben genannten Preise wurden am 03.04.2022 bei Reichelt ermittelt. Die wirklichen Preise können abweichen. Zum Händler
**: Die oben genannten Preise wurden am 03.04.2022 bei Mouser ermittelt. Die wirklichen Preise können abweichen. Zum Händler
***: Der oben genannte Preis wurde am 03.04.2021 bei magnets4you ermittelt. Der wirkliche Preis kann abweichen. Zum Händler
****: Der oben genannte Preis wurde am 08.07.2021 bei JLCPCB ermittelt. Der wirkliche Preis kann abweichen. Zum Händler
Nachfolgend ist eine Materialliste bei Reichelt verlinkt (Die Produkte anderer Händler sind natürlich nicht enthalten.):
Reichelt: Lesekopf-
10.10.2021:
- Erstveröffentlichung.
-
02.01.2022:
- Kondensator CA1 wegen zu niedriger Spannungsfestigkeit getauscht.
-
08.01.2022:
-
Firmwareaktualisierung auf Version 1.1.0:
- Anzahl der Stoppbits und Parität des Modbus RTU kann nun per Makro in der Firmware leicht eingestellt werden. Siehe Modbus RTU, Codierung anpassen.
-
Firmwareaktualisierung auf Version 1.1.0:
-
03.04.2022:
-
Hardwareaktualisierung auf Version 2.2.0:
- Schmitt-Trigger KF1 entfernt, da Mikrocontroller über Eingänge mit Schmitt-Trigger verfügt.
- Kleinere Optimierungen.
-
Firmwareaktualisierung auf Version 2.2.0:
- Registertabelle geändert und erweitert.
- Einstellung der unterstützten OBIS-Codes und der Registertabelle geändert.
- Einstellung der Stoppbits und der Parität des Modbus RTU können über die Drehcodierschalter vorgenommen werden. Siehe Modbus RTU, Codierung anpassen.
- Diese Firmware ist auch mit alten Hardwarevarianten kompatibel!
-
Hardwareaktualisierung auf Version 2.2.0:
-
30.10.2022:
-
Hardwareaktualisierung auf Version 2.2.1:
- Vorwiderstände (RA9, RA10) der LEDs (PF1, PF2) von der Vorder- auf die Rückseite verlegt zwecks automatischer Bestückung.
- Beschriftung der LEDs (PF1, PF2) angepasst.
-
Hardwareaktualisierung auf Version 2.2.1:
-
06.01.2023:
-
Firmwareaktualisierung auf Version 2.3.0:
- Registertabelle im allgemeinen Teil angepasst
- Messintervall kann abgefragt werden. Alternativ kann ein Messintervall vorgegeben werden. Hinweis in der Registertabelle beachten!
- Ein Statusregister gibt zurück, ob seit der letzten Abfrage (FC03) neue Werte in die Register geschrieben wurden. Hinweis in der Registertabelle beachten!
- Register der Hardware- und Firmwareversion können nun geschrieben werden.
- Kleinere Optimierungen.
- Diese Firmware ist auch mit alten Hardwarevarianten kompatibel!
-
Firmwareaktualisierung auf Version 2.3.0:
-
16.01.2023:
-
Firmwareaktualisierung auf Version 2.3.1:
- Fehler behoben, dass alle Register geschrieben werden konnten.
- Diese Firmware ist auch mit alten Hardwarevarianten kompatibel!
-
Firmwareaktualisierung auf Version 2.3.1:
-
04.08.2023:
-
Firmwareaktualisierung auf Version 2.3.2:
- Puffer für den Modbus erhöht. Notwendig für die Kompatibilität mit der Auslesesoftware.
- Diese Firmware ist auch mit alten Hardwarevarianten kompatibel!
-
Firmwareaktualisierung auf Version 2.3.2:
-
26.10.2024:
-
Firmwareaktualisierung auf Version 2.3.3:
- Fehler behoben, dass bei manchen Zählern die Spannung L1-N nicht ausgelesen wurde.
- Diese Firmware ist auch mit alten Hardwarevarianten kompatibel!
-
Firmwareaktualisierung auf Version 2.3.3:
-
Pendenzenliste:
- Unterstützung des Protokolls nach DIN EN 62056-21
Statusbit hinzufügen, ob neue Werte vom Zähler empfangen werden oder nicht.(Mit Firmware 2.3.0 hinzugefügt)- (Evtl. Modbus/TCP Version mithilfe eines USR-K7.)
- Probleme oder Ideen? Dann kontaktiere mich über das Kontaktformular.