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.
Was brauchst Du? einphasig oder dreiphasig? Wieviel A? 16? 32A? 63A? Für Drehstrom gibts das hier: https://stromzähler.eu/stromzaehler/drehstromzaehler/fuer-hutschiene-ungeeicht/25/sdm630modbus-v2-3phasen-4te-multifunktions-lcd-drehstromzaehler Für Wechselstrom bis 10A gibts das hier: https://stromzähler.eu/stromzaehler/wechselstromzaehler/fuer-hutschiene-ungeeicht/24/sdm230modbus-1p-2te-lcd-wechselstromzaehler?c=105 Die Teile haben Modbus über RS485, d.h. Du brauchst einen passenden Transceiver an Deinem Pi. Ansteuerung über libmodbus. fchk
So etwas würde ich Dir empfehlen: https://www.berrybase.de/neu/shelly-3em-3-phasen-wlan-energiemessger-228-t (https://geizhals.de/shelly-3em-3-phase-wifi-energy-meter-a2368858.html) Das würde am Besten meiner Ansicht nach zum Raspberry passen.
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 |
3 | |
4 | libmodbus5 |
5 | Bibliothek für das Modbus-Protokoll |
Dann brauchst Du die Bedienungsanleitung https://stromzähler.eu/media/pdf/0e/ca/1d/SDM230-Modbus.pdf In Deinem Programm brauchst Du diese Funktionen:
1 | #include <mutex> |
2 | #include <modbus.h> |
3 | |
4 | modbus_t* g_mb; |
5 | std::mutex mtx; |
6 | |
7 | modbus_t* mb_connect(void) |
8 | {
|
9 | modbus_t *mb; |
10 | mb = modbus_new_rtu("/dev/modbus", 9600, 'N', 8,1); |
11 | modbus_set_slave(mb,0); |
12 | modbus_connect(mb); |
13 | return mb; |
14 | }
|
15 | |
16 | void mb_disconnect(modbus_t* mb) |
17 | {
|
18 | modbus_close(mb); |
19 | modbus_free(mb); |
20 | }
|
21 | |
22 | float mb_get_inputreg(modbus_t* mb, int16_t regnum) |
23 | {
|
24 | uint16_t reg_in[2]; |
25 | uint16_t reg_swap[2]; |
26 | |
27 | std::unique_lock<std::mutex> lck (mtx,std::defer_lock); |
28 | lck.lock(); |
29 | modbus_read_input_registers(mb, regnum, 2, reg_in); |
30 | reg_swap[0]=reg_in[1]; |
31 | reg_swap[1]=reg_in[0]; |
32 | float rc=modbus_get_float(reg_swap); |
33 | lck.unlock(); |
34 | return rc; |
35 | }
|
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 | float val=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
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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 | bool ende=false; |
2 | float val; |
3 | FILE* fp=fopen("log.csv","w"); |
4 | time_t now; |
5 | int idx=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
:
Bearbeitet durch User
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.