Hallo zusammen,
ich bin gerade dabei eine alte Produktionsanlage zu digitalisieren.
Dabei möchte ich den Energie-/Stromverbrauch der Maschine zusammen mit
den Steuerungsdaten in der Cloud veröffentlichen.
Jetzt habe ich ein Problem bzgl. dem Energiemessgerät. Ich würde gerne
die aufgenommenen Daten (sei es per Bluetooth, Wifi, I2C usw. ist egal)
an einen Raspberry Pi senden zur Weiterverarbeitung der Daten.
Leider finde ich kein geeignetes Energie-/Strommessgeräte, welches mir
die Rohdaten an mein Raspberry sendet.
Hat hier jmd. eine Idee?
Gruß
Marius
Es gibt Multimeter mit RS232 oder USB-Schnittstelle, damit kann man
zumindest einen Strom messen, vor allem an Netzspannung. Energie bzw.
Leistung messen die nicht, da braucht man schon spezielle Meßgeräte.
Guten Morgen,
erstmal viele Dank für eure schnellen Antworten.
Ich konkretisier das Ganze mal ein wenig. Es handelt sich dabei um einen
Versuchsaufbau mit einer SPS.
In diesen Versuchsaufbau wird ein Bauteil integriert welches an die
Power Supply Box (24DC/10A) des Aufbaus angeschlossen wird, also ist
einphasig ausreichend.
Da während der Versuchsdurchführung nur das eine Bauteil betrieben wird,
wäre auch ein Messgerät für die Steckdose ebenfalls noch in Ordnung.
Wichtig ist nur, dass ich die Daten direkt an den Raspberry senden und
diese dort weiterverarbeiten kann.
Oder empfehlt ihr hier ein Aufbau mit einem Arduino, damit kenn ich mich
leider gar nicht aus.
Bevor wir dir hier Lösungen zeigen, solltest Du die Anforderungen
genauer spezifizieren.
- Welche Parameter sollen gemessen werden?
- Welche Genauigkeit wird benötigt?
- ....
Prinzipiell möchte ich auf den Energieverbauch abzielen. Da ich jedoch
die Betriebsspannung des Bauteil/der Supply Box kenne, wäre der
Stromverbrauch ebenfalls ausreichend. Daten sollen sowieso
weiterverarbeitet werden.
Da es sich nur um einen Versuchsaufbau handelt, spielt die Genauigkeit
des Messgerätes keine allzu große Rolle.
Entschuldige meine unpräzisen Angaben, bin noch relativ neu auf dem
Gebiet.
Gerne melden falls noch mehr Informationen benötigt werden.
Ich überwache mit einem SDM230Modbus Stromzähler den Stromverbrauch an
einer Außensteckdose, wo im Sommer eine Grundwasserpumpe betrieben wird.
https://www.amazon.de/Tech-SDM230Modbus-Wechselstromz%C3%A4hler-Stromz%C3%A4hler-Schnittstelle/dp/B01N8XMS2J
Bei mir hängt das Teil an einem BeagleBone, aber ein Pi würde genauso
gut funktionieren. Ich habe einen USB-RS485-Adapter verwendet, der die
Datenrichtungsumschaltung selber macht.
https://www.amazon.de/USB-RS485-Adapter-mit-Gehäuse/dp/B00I9H5J02
Da sind schon die Terminierungs- und Failsafe-Widerstände mit drin, am
SDM230 braucht es noch einen 100...120Ohm Terminierungswiderstand, falls
das dreiadrige Kabel (A, B, GND) länger ist (bei mir ca 10m, 100m sind
aber auch kein Problem).
Unter Linux musst Du diese beiden Bibliotheken installieren.
1
libmodbus-dev
2
Entwicklungsdateien für die Modbus-Protokollbibliothek
Der Code geht davon aus, dass der Stromzähler auf Adresse 0 und 9600
Baud, 1 Stopbit, No Parity eingestellt ist. Du kannst mehrere
Stromzähler gleichzeitig abfragen, musst dann aber bei jeden eine andere
Adresse einstellen und im Programm bei modbus_set_slave() das passende
Gerät auswählen. Und statt /dev/modbus musst Du halt das bei dir
passende Device (/dev/ttyUSB0 oder so) eintragen.
In Deinem Programm musst Du als allererstes die Schnittstelle öffnen:
1
g_mb=mb_connect();
Die musst Du dann nach Gebrauch wieder schließen:
1
mb_disconnect(g_mb);
Werte fragst Du so ab:
1
floatval=mb_get_inputreg(g_mb,idx);
wobei idx die Registernummer ist, die Du aus der Tabelle unter "1.2
Input Registers" in der Anleitung rausbekommst. Für die momentane
Wirkleistung "Active Power" ist das 0x000c, für die akkumulierte
Wirkleistung (Zählerstand, "Total active energy") wäre das 0x0156. In
der Tabelle siehst Du auch, was Du alles abfragen kannst: Strom,
Spannung, Frequenz, Wirk- Blind- und Scheinleistung,...
So, damit hast Du eigentlich alles, was Du brauchst.
fchk
Hallo fchk,
erst einmal vielen vielen Dank für deine ausführliche Hilfe! Das hat
mich dem Ganzen schon ein großes Stück näher gebracht.
Jetzt hab ich da noch eine Frage, da ich auch in der Programmierung
relativ neu unterwegs bin. Ist eine durchgängige Datenabfrage möglich,
sprich kann ich die Daten kontinuierlich (festgelegt Taktung oder bei
jedem neuen Wert) damit abfragen?
Die Daten sollen zusammen mit den Steuerdaten der eingebauten SPS
gegenüber gestellt werden. Sprich es soll ein zeitlicher Verlauf der
beiden Datensätze erstellt werden, der anschließend in die Cloud geladen
wird.
Beste Grüße und nochmals vielen Dank für eure Hilfe!!
Mari R. schrieb:> Jetzt hab ich da noch eine Frage, da ich auch in der Programmierung> relativ neu unterwegs bin. Ist eine durchgängige Datenabfrage möglich,> sprich kann ich die Daten kontinuierlich (festgelegt Taktung oder bei> jedem neuen Wert) damit abfragen?
Kontinuierlich im eigentlichen Sinne geht das eh bei digitalen Systemen
nicht, und der Stromzähler aktualisiert seine internen Werte auch nur
mit einer bestimmten Frequenz, maximal 50 mal pro Sekunde,
wahrscheinlich sehr viel weniger.
Wenn Du einen Messwert haben willst, musst Du ihn Dir mit
mb_get_inputreg() holen. Wenn Du dann den nächsten haben willst, musst
Du ihn dir wieder holen. Von selber geht da nix, der Stromzähler macht
genau das, was Du ihm sagst, und wann du es ihm sagst. Wenn Du alle 10s
einen Wert haben willst, musst Du alle 10s eine Anfrage stellen. Das
hast Du selber in der Hand.
Denke auch daran, das der RS485-Bus nur mit 9600 bps läuft, d.h. pro
Sekunde gehen maximal 1000 Bytes über die Leitung, und ein Sende- oder
Empfangspaket sind etwa 10 Bytes.
fchk
Mit dem kontinuierlich hast du natürlich recht. Aber die Anzahl an
Werten wäre vollkommen ausreichend.
Weißt Du zufällig ob B+G E-Tech SDM230Modbus auch mit Node-Red
ausgelesen werden kann. Ich hab den Siemens Reihe Sentron pac gesehen,
bei diesem ist das auf jeden Fall möglich und da ist es ja fast schon
spielerisch die Daten in eine CSV-Datei zu schreiben.
Bzw. was müsste man an deinem Code noch ändern, damit die Daten
fortlaufend in eine CSV-Datei geschrieben werden. Entschuldige die evtl.
dumme Frage, aber ich tue mir noch sehr schwer mit dem
Programmierverständnis.
Du könntest auch ein Sonoff Power R2 nutzen zusammen mit Grafana auf dem
Raspi.
Der Sonoff schickt die Messdaten per MQTT an den RPi.
Wenn das 24VDC Netzteil in einer Steckdose steckt, dass geht auch eine
WLAN Steckdose mit ESP8266 Chip (z.B. Gosund SP1).
Auf die Geräte kannst Du Tasmota (->google) spielen und hast somit alles
im Griff (ohne Cloud).
Sieht dann so aus wie im Anhang.
Mari R. schrieb:> Weißt Du zufällig ob B+G E-Tech SDM230Modbus auch mit Node-Red> ausgelesen werden kann. Ich hab den Siemens Reihe Sentron pac gesehen,> bei diesem ist das auf jeden Fall möglich und da ist es ja fast schon> spielerisch die Daten in eine CSV-Datei zu schreiben.
Nein, nichts damit gemacht. Ich logge das letztendlich mit mrtg, aber
das ist hier zu speziell.
> Bzw. was müsste man an deinem Code noch ändern, damit die Daten> fortlaufend in eine CSV-Datei geschrieben werden. Entschuldige die evtl.> dumme Frage, aber ich tue mir noch sehr schwer mit dem> Programmierverständnis.
1
boolende=false;
2
floatval;
3
FILE*fp=fopen("log.csv","w");
4
time_tnow;
5
intidx=12;//Momentane Wirkleistung
6
g_mb=mb_connect();
7
while(!ende)
8
{
9
val=mb_get_inputreg(g_mb,idx);
10
now=time();// aktueller Unix Timestamp, Sekunden seit 1.1.1970
11
fprintf(fp,"%ld,%f\r\n",now,val);
12
sleep(1);// eine Sekunde warten
13
}
14
mb_disconnect(g_mb);
15
fclose(fp);
So ungefähr, ohne das wirklich durchcompiliert zu haben.
Der Rest sind C- und Unix-Grundlagen. Für die Vermittlung von
Grundlagenwissen ist dieses Forum nicht gedacht und auch nicht geeignet,
das wirst Du Dir selber anderweitig aneignen müssen. Sorry, ist halt so.
Noch einfacher kann ich es Dir nicht mehr machen.
fchk
Moin fchk,
kein Thema. Da hast du natürlich recht. Aber ich bedanke mich wirklich
recht herzlich für deine Hilfe! Jetzt fühl ich mich auch gewappnet den
Rest selbstständig hinzubekommen.