Netzanalyse
Onlinevisualisierung verschiedenster Netzparameter
Zeitraum: Juni/Juli 2020
Zuletzt aktualisiert am 17.09.2020Im Herbst des Jahres 2019 habe ich ein Universalmessgerät des Herstellers Janitza (UMG 96 S; 52.13.025) in unsere Unterverteilung eingebaut. Dieses Gerät verfügt über drei verschiedene Schnittstellen, worüber eine Kommunikation mit dem Profi- bzw. Modbus-Protokoll (RTU) möglich ist. Ursprünglich war die Idee, dass die RS232 Schnittstelle an einem RS232-Ethernet-Converter angeschlossen und so eine Fernauswertung mit der originalen Software von Janitza am PC ermöglicht wird.
Allerdings war die Software, die eine emulierte serielle Schnittstelle zur Verfügung stellt, nicht mit der Auswertesoftware von Janitza kompatibel. So entstand die Idee, ein Arduino zum Auslesen der Messdaten zu verwenden und die Werte dann online zu visualisieren.
Die Messdaten werden durch ein Janitza UMG 96 S (52.13.025) Universaleinbaumessgerät zur Verfügung gestellt. Dieses habe ich gebraucht bei Ebay ersteigert.
Die Daten werden mithilfe eines Arduino Uno Mega* von dem Gerät abgefragt. Durch ein Ethernet-Shielt ist der Arduino mit dem Internet verbunden.
Die Konvertierung der RS232 Schnittstelle hin zum TTL-Pegel übernimmt ebenfalls ein fertiges Board.
Zur Kenntlichmachung des aktuellen Status des Arduinos bzw. des Programms, wurden drei 3mm-LEDs auf eine Lochrasterplatine gelötet. So wird der Status ready ("Alles gut"), process (Der Arduino fragt gerade Daten ab oder sendet diese an den Server) und error angezeigt. Die error-LED blinkt dabei mit einem bestimmten Takt, sodass daraus der genaue Fehler abgelesen werden kann (Ethernet-Shield nicht erkannt, Daten konnten nicht abgefragt werden, ...).
*Da der Mikrocontroller mittlerweile ein paar mehr Aufgaben zu erfüllen hat, wurde der Arduino Uno durch ein Arduino Mega ersetzt (Siehe Smartmeter auslesen).
Arduino-Sketch
Für die Umsetzung des Modbus RTU Protokolls wird die ModbusMaster Bibliothek verwendet. Der Vorteil dieser Bibliothek gegenüber der Standard-Bibliothek (ArduinoModbus) ist, dass der Sketch kleiner Compiliert wird. Darüber hinaus habe ich bei dieser Bibliothek die Möglichkeit, die verwendete serielle Schnittstelle auszuwählen, wohingegen die Standard-Bibliothek immer die erste serielle Schnittstelle (Serial; Pin 0 und 1) verwendet. Für das Ethernet-Shield wird die Standard Ethernet-Bibliothek verwendet.
Der Sketch fragt alles zehn Sekunden die Daten von dem Messgerät ab und speichert diese, durch ein Semikolon getrennt, in einem String ab. Dieser String wird schließlich mit einer POST-Anfrage an ein Server gesendet.
Server
Daten vom Arduino empfangen
Das Empfangen der Daten von dem Arduino und die Weiterverarbeitung auf dem Server wird durch ein PHP-Skript umgesetzt. Dieses Skript empfängt den gesendeten String, zerlegt Diesen und speichert die einzelnen Werte in ein Array. Darauffolgend wird eine Verbindung zur einer MySQL-Datenbank mithilfe der PDO-Klasse aufgebaut. Dadurch können die einzelnen Werte in die entsprechenden Tabellen eingetragen werden. Unter Umständen werden einige Werte umgerechnet.
Daten aus der Datenbank abfragen
Das Skript kann auf zwei Verschiedene Arten die Werte der Messparameter bereitstellen:
- Einen Wert für jeden Messparameter (Zum Aktualisieren der Anzeigen)
- Mehrere Werte für ein Messparameter aus einem bestimmten Zeitintervall (Zum Anzeigen des zeitlichen Verlaufs)
- guages.js (Definierung der einzelnen Anzeigen-Objekte)
- updateGauges.js (Aktualisierung der angezeigten Netzparameter)
- charts.js (Zeitlichen Verlauf der Netzparameter wiedergeben)
- getTextParts.js (Textfragmente laden)
Die einzelnen Messwerte werden (wie bei dem Arduino) durch ein Semikolon getrennt aneinandergereiht ausgegeben.
Webseite
Grafische Anzeigen
Zur visuellen Darstellung der Netzparameter verwende ich die Canvas Gauges Bibliothek. Diese Bibliothek ermöglicht es ziemlich einfach, unterschiedliche Anzeigen mit canvas-Elementen in die HTML einzubinden und mit JavaScript zu definieren.
Ein JavaScript holt mit dem AJAX-Verfahren alle 10 Sekunden neue Werte von dem Server und aktualisiert dementsprechend die Anzeigen.
Die Einbindung einer Anzeige auf der Webseite sieht bei mir zum Beispiel so aus:
Zeitlicher Verlauf
Zur Darstellung des zeitlichen Verlaufs wird die Chart.js Bibliothek genutzt. Auch hier kann ein Koordinatensystem mit einem canvas-Element in die HTML eingebunden und mit JavaScript definiert werden.
Das Diagramm mit dem zeitlichen Verlauf eines Netzparameters wird angezeigt, wenn auf die entsprechende grafische Anzeige geklickt wird. Dort kann ebenfalls der zeitliche Bereich angepasst werden. Oberhalb des Periodensystems können die jeweiligen Netzparameter der anderen Phasen oder der Summenwert ein-, bzw. ausgeschaltet werden.
Da die Seite mehrsprachig aufgebaut ist, wird zusätzlich ein weiteres Skript benötigt. Dieses lädt notwendige Textfragmente aus einer XML-Datei und stellt Diese dem charts.js Skript zur Verfügung.
In der nachfolgenden Liste sind alle von mir verwendeten Materialien aufgelistet.
Bauteil | Bezeichnung / Wert | Gehäuse / Bauform | Benennung | Menge |
---|---|---|---|---|
Netzanalysegerät | Janitza UMG96S | - | - | 1 |
Stromwandler | ENT.30 50/5 5VA | - | - | 3 |
Leitungsschutzschalter | Dreiphasig; Charakteristik B; 6A | - | - | 1 |
Arduino Uno | - | - | - | 1 |
Ethernet Shield | WizNet W5100 | - | - | 1 |
RS232 TTL Adapter | MAX3232 | DSUB9-Buchse | - | 1 |
RS232 PC-Kabel | - | RJ11 Stecker; DSUB9-Stecker | - | 1 |
Verbrauchsmaterial | 3mm LEDs, Taster, Lochrasterplatine, Filament | - | - | - |
Diese Seite soll nur meine technische Umsetzung aufzeigen. Natürlich können auch andere Materialien verwendet werden.
Da ich unsere Netzparameter ungern Preisgeben möchte, kann das "fertige" Ergebnis nachfolgend mit Zufallswerten betrachtet werden:
Zur Netzanalyse