NEWS
Modbus RS485 Tutorial/Einstieg gesucht
-
@joergh sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Wenn er schonmal zwei grüne anzeigt, heisst dass, dass er sich mit dem Zähler verbindet.
Der Adapter zeigt auch zwei mal grün wenn überhaupt kein USB Stick mit dem Raspi verbunden ist. Von daher würde ich da keine Rückschlüsse ziehen.
Wie würden denn die Einstellungen aussehen wenn ich z.B. die Leistung abfragen will? Wo trage ich das ein? Diskrete Eingänge? Ausgänge wohl kaum. Eingangsregister oder Holdingregister? Low-Byte ist 0x1a, High Byte ist 0. Ist die Adresse dann 6656 (0x1a00) oder 26 (0x1a) oder etwas ganz anderes? -
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
@joergh sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Wenn er schonmal zwei grüne anzeigt, heisst dass, dass er sich mit dem Zähler verbindet.
Der Adapter zeigt auch zwei mal grün wenn überhaupt kein USB Stick mit dem Raspi verbunden ist. Von daher würde ich da keine Rückschlüsse ziehen.
Wie würden denn die Einstellungen aussehen wenn ich z.B. die Leistung abfragen will? Wo trage ich das ein? Diskrete Eingänge? Ausgänge wohl kaum. Eingangsregister oder Holdingregister? Low-Byte ist 0x1a, High Byte ist 0. Ist die Adresse dann 6656 (0x1a00) oder 26 (0x1a) oder etwas ganz anderes?Hmmm, ok, ist mir auch neu. Bei TCP muss er eine Verbindung herstellen können, kann an der seriellen Emulation liegen...zur seriellen Schnittstelle hat er die Verbindung ja schon aufbauen können...
Die Einstellungen stehen in der Beschreibung die Du oben gepostet hast. Da die Qualität ziemlich schlecht ist, kann ich es kaum lesen. Was ich sehen kann ist, dass er zwei Arten von Registern hat, Data (Holding) Register (0x04) - read only und Parameter Register (0x03) - read & write.
Wenn die Leistung in Data Register 0x001a ist, dann ist das Register 26. Das musst Du dann eintragen bei Holding Register vorne als Adresse des Registers, dann die restlichen Paramter dahinter korrekt setzen und "Abfrage" nicht vergessen...Aliases muss aus sein.Sieht dann so aus (bei mir sind aber alle Adressen ab 40000):
-
Da die Qualität ziemlich schlecht ist
Müsste das sein , habe es mal für Ihn gegoogelt .
https://de.aliexpress.com/item/33003316323.htmlNaja .... , Made in CE
-
@glasfaser sagte in Modbus RS485 Tutorial/Einstieg gesucht:
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
habe ich auch die Register gefunden:
Ich mache es immer so :
https://forum.iobroker.net/topic/51804/erledigt-modbusfrage-mit-waveshare-rs485-to-eth-b/28
teste erst mit einem Windows Programm .... dann mit ioBroker .
Ich habe mir dieses Programm besorgt. In der Gerätesteuerung habe ich gefunden, dass Com3 ein USB Device ist. Das habe ich eingetragen und auf Connect gedrückt, es kam auch keine Fehlermeldung.
Wenn ich den Stromzähler startet kommt im Display zuerst "AD 0013" "b 9600" "C 1000", ich vermute dass 13 eine Adresse ist, b9600 eine Baudrate, was C1000 ist weiß ich nicht.
In dem Programm selbst kommt aber immer die Medlung "Modbus time out"
Grundsätzliche Frage: Ich habe den Ausgang A des Stromzählers mit Pin A des RS485 Adapters verbunden und B mit B. Ist das richtig? Oder muss wie bei RS232 RX und TX vertauscht werden?
Was schließe ich an "gnd" an?
n der Doku des Stromzählers steht: Serielle Parameter 9600 Even 1, stelle ich das auch im Modbus Simulator under "Modbus RTU" ein? -
@wolfgangfb
Ich antworte mir mal selbst.
Ich bin immer noch nicht weiter und würde einfach gerne wissen, ob bei Radzio Modbus Master Simulator die Meldung "Modbus message timeout" daher kommt, das der Stick oder die seriellen Parameter nicht stimmen oder ob es auch sein kann, dass der Stick zwar erkannt wird aber nur die Adresse nicht gelesen werden (weil z.B. falsch eingegeben) -
@wolfgangfb Du hast A mit A und B mit B verbunden?
Kreuze mal die Leitungen.
Hintergrund: Die Zählerindustrie (zumindest die Europäische) interpretiert die etwas umständliche (bzw. sehr abstrahierte) RS485 Spec sehr streng. Die Halbleiterindustrie in sich geschlossen gleich - aber gerade anders herum. Und die meisten Stickhersteller schließen sich der Halbleiterindustrie an, weil sie sich am Datenblatt orientieren. -
Versuche erst einmal die communication wie im Beispiel oben hinzubekommen.
Also mit Windows PC und Realterm oder Hterm. So brauchst du erst einmal nur die CRC berechnen.
Dann ergibt dies wie aus dem Beispiel oben,
Baud 9600
Parity Even
Stopbit 1
Hardwarecontroll RTS/CTS
Comport des Sticks
Die Adresse ist 13 dec in hex ist 0D
Calculator CRC-16 Modbus:
0D0400000002 (Processed data x0d 0x04 0x00 0x00 0x00 0x02 )
Ergibt 0x0771
Gedreht 0x71 0x07
Gesendet per Realterm wird dann :
0x0d 0x04 0x00 0x00 0x00 0x02 0x71 0x07In den Windows Einstellungen ist zu prüfen ob der Stick und der Treiber erkannt wurde.
Nachtrag, in der Beschreibung steht :
Die codierung format, parität (auch parität) und daten übertragung modus (acht daten bits, one stop bit) erfüllen die MODBUS-RTU standard anforderungen.
Vermute die 02 ist das Low Byte Check Digit, dann wäre das Baud 9600 8n1. -
Hallo
Ich hab mir auch so ein Ding zugelegt. Hatte anfänglich auch Probleme damit. Wenn man das Ding unter Spannung nimmt, erschien bei mir Ad070 und das ist die Adresse. Das Problem warum bei mir keine Kommunikation zustande gekommen ist war, das die Parität auf "Even" eingestellt war. Hab dann mit dem Programm "Modbus Poll" die Änderungen vorgenommen Parität auf "nein" (zu verschickender Wert 2). Jetzt die Hexwerte der Adressen umwandeln und plus 1. Siehe da ich kann das Gerät auslesen. -
@ichbinblue2010 sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Ich hab mir auch so ein Ding zugelegt.
was bitte?
@ichbinblue2010 sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Wenn man das Ding unter Spannung nimmt, erschien bei mir Ad070 und das ist die Adresse.
wo erscheint das?
@ichbinblue2010 sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Siehe da ich kann das Gerät auslesen.
und was können wir dir helfen?
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1
-
@ralla66
Ich greife das Thema nochmal auf.
Ich habe mir jetzt ein SDM230 Energiemeßgerät besorgt und damit zumindest erste Erfolge erzielt.
Ich habe mir auf Github das Programm QModMaster besorgt und nacchdem ich einen 100 Ohm Widerstand in die Leitung geschaltet habe (bin davor davon ausgegangen, dass bei 40 cm Leitungslänge kein Widerstnd notwendig ist) hat sich der Stromzähler mit dem Programm verbuden (Anzeige im Gerätedisplay) und ich konnte einen scan der "Holding Registers" machen.
Jetzt die Frage: Wie geht es weiter? Im Modbus Adapter muss ich ja die Register eintragen. Wie komme ich aus den gescannten Holding Registern auf die Registernummern? Ich konnte auch keinerlei Änderung der Register erkennen, auch wenn eine Last zugeschaltet worder ist oder nicht.Ich habe dann nochal das DDM18SD angeschlossen, als Adresse habe ich 13 und 19 (evtl. ist die Anzeige 013 ja hexadezimal) eingetragen, aber in QModMaster kommt immer nur ein Timeout.
-
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
auf die Registernummern
di stehen in der Bedienungsanleitung des SDM
-
@homoran sagte in Modbus RS485 Tutorial/Einstieg gesucht:
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
auf die Registernummern
di stehen in der Bedienungsanleitung des SDM
Dummerweise stehen die da nicht. Da steht nur, wie man die Adresse, Parität etc. ändern kann, mehr leider nicht.
-
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Dummerweise stehen die da nicht.
doch!
https://stromzähler.eu/media/pdf/0e/ca/1d/SDM230-Modbus.pdf -
@homoran sagte in Modbus RS485 Tutorial/Einstieg gesucht:
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Dummerweise stehen die da nicht.
doch!
https://stromzähler.eu/media/pdf/0e/ca/1d/SDM230-Modbus.pdfOoooh, danke, damit werde ich es später probieren. Beim Zähler selbst ist nur ein ca. Din-A3 Blatt großes gefaltetes "User Manual V1.8" dabei.
Auf Seite 20 des Manuals V1.4 sehe ich, dass man wohl mehrere Modbus Geräte in Reihe schalten kann.
Beim Modbus Adapter kann man zwar "mehrere Geräte IDs" aktivieren, aber unter "Allgemein" "Geräte ID" kann ich nur eine ID angeben. Wie gebe ich da mehrere Geräte ein?
Beim SDM230 kann man ja die seriellen Parameter wie Baudrate, Parität ändern sowie die ID ändern. Beim DDM180 (falls ich für den auch so eine Anleitung finde) scheinen diese Parameter fest vorgegeben zu sein (jedenfalls gibt es keinen Knopf auf dem Zähler wo ich etwas ändern kann und beim Einschalten steht "Add 013" was wohl die Adresse ist).
Ich vermute mal, dass man keine zwei Geräte zusammenschalten kann, die entweder (fest) die gleiche Adresse haben oder (fest) unterschiedliche seriellen Parameter haben. -
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
dass man wohl mehrere Modbus Geräte in Reihe schalten kann.
Beim Modbus Adapter kann man zwar "mehrere Geräte IDs" aktivieren, aber unter "Allgemein" "Geräte ID" kann ich nur eine ID angeben. Wie gebe ich da mehrere Geräte ein?nicht in Reihe!!!
die müssen parallel geschaltet werden. Ist ja ein Bus.wenn du mehrere IDs aktivierst erscheint eine Spalte ID
Die Geräte müssen aber vor der Anbindung an den Bus richtig konfiguriert sein.
-
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
falls ich für den auch so eine Anleitung finde
finden setzt Suchen voraus!
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Beim DDM180
den finde ich gar nicht.
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
scheinen diese Parameter fest vorgegeben zu sein
mag sein, dürfte der Nummer nach auch extrem lowcost sein.
Dann müssen alle anderen im Bus auf die selben Übertragungsparameter eingestellt werden
-
@homoran sagte in Modbus RS485 Tutorial/Einstieg gesucht:
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
falls ich für den auch so eine Anleitung finde
finden setzt Suchen voraus!
Ich habe gesucht.
Gefunden habe ich bisher folgendes:
https://www.aggsoft.com/serial-data-logger/tutorials/modbus-data-logging/noname-ddm18sd-mmd18sd.htmDa weiß ich aber noch nicht wie ich aus dem Modbus Offset auf die Adressen komme.
https://www.re-innovation.co.uk/docs/talking-to-a-ddm18sd-energy-meter/
Da scheint es jemand geschafft zu haben, wie die Adressen lautet sehe ich darin aber auch nicht.
In
https://github.com/re-innovation/DDM_Energy_Meterfangen die Adressen auch bei 0 an.
https://github.com/digimp/DDM18SD
hat etwas mit Tasmota gemacht.
https://registry.platformio.org/libraries/reaper7/SDM
Macht das auch irgendwie ohne diese Adressen.
Aber auf
https://www.aggsoft.com/serial-data-logger/tutorials/modbus-data-logging/eastron-sdm230.htmFinde ich auch die Adressen des 230 als Offset und hier kenne ich ja die Absolutadressen.
Der Strom des 230 ist ja 30007 und als 2Offset" wird 6 angegeben. Beim DDM118 ist der Offset für den Strom 8, kann ich dann einfah daon ausgehen, dass die Adresse dann 30009 ist?Bei einigen anderen Zählern habe ich noch Low und High Adressen gefunden. Kann man die in "Gesamtadressen" umrechnen?
-
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Beim DDM118
ist das der vorhin als
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
DDM180
bezeichnete, den ich nirgends finden konnte?
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Da weiß ich aber noch nicht wie ich aus dem Modbus Offset auf die Adressen komme.
was ist das jetzt?
Wo hast du Offset her?
Wie willst du alleine aus einem Offset eine Adresse erraten?@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
fangen die Adressen auch bei 0 an.
wäre möglich. muss aber nicht
üblich für Inputregister
Adresse 1 offset 30001 -> 30002
das kann aber auch +/- 1 sein@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Der Strom des 230 ist ja 30007 und als 2Offset" wird 6 angegeben
wo steht das denn?
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Kann man die in "Gesamtadressen" umrechnen?
gib einfach die Adressen aus der Liste ein und gut ist
EDIT:
Das hier sind jetzt dreiphasige Zähler
1 ist SDM630 und 2 ist SDM72
-
@wolfgangfb gibt es noch eine Antwort auf
@homoran sagte in Modbus RS485 Tutorial/Einstieg gesucht:
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:
Beim DDM118
ist das der vorhin als
@wolfgangfb sagte in Modbus RS485 Tutorial/Einstieg gesucht:DDM180
bezeichnete, den ich nirgends finden konnte?
ich kann unter beiden Bezeichnungen keine Stromzähler finden.
-
@homoran
So, ich war jetzt insgesamt ziemlich erfolgreich.
Zuerst habe ich mich um den SDM230 gekümmert (von dem stehen ja die Adressen in der Doku).
In der Konfiguration vom Modbus Adapter habe ich folgende Einstellungen gemacht:Den Port habe ich über den Befehl
pi@raspberrypi:~ $ ls -l /dev/serial/by-id insgesamt 0 lrwxrwxrwx 1 root root 13 19. Jun 21:13 usb-FTDI_FT232R_USB_UART_AB0LZNDF-if00-port0 -> ../../ttyUSB2 lrwxrwxrwx 1 root root 13 10. Mai 13:19 usb-Silicon_Labs_WiMOD_iM871A-usb_00919907-if00-port0 -> ../../ttyUSB1
herausgefunden.
Zuerst gab es keine Verbindung, dann habe ich zusätzlich den empfohlenen Widerstand ib die Leitung gelötet (100 Ohm, 120 habe ich nicht gehabt). Dann hat der Adapter auch gleich auf gelb und dann auf grün geschaltet. In die Objekte geschaut, die Datenpunkte sind da, aber keine Werte (alle 0), wieder in die Instanzen geschaut und der Adapter war auf einmal gelb. Dann die beiden Kabel am RS485 auf USB Adapter getauscht und der erste Erfolg war da, der Adapter blieb grün und die Werte vom Stromzähler wurden übermittelt (wobei Blind und Wirkleistung meiner Meinung nach vertauscht sind, eine alte Glühbirne mit Wolframfaden hat meiner Meinung nach keine Blind sondern nur Wirkleistung, es wird aber nur Blindleistung angezeigt).
Das ist für mich der erste echte Knackpunkt dass der Adapter kurzzeitig grün anzeigt, und dann nach ein paar Sekunden auf gelb springt. Wenn man bei grün sofort denkt "alles OK" leigt man falsch.
Was mich auch verwundert ist, dass es auch die Polarität des Anschlusses ankommt. Ich hätte jetzt gedacht, da es bei RS485 nur um die Spannungsdifferenz zwischen A und B geht, dass die Polarität egal ist, aber ok.
Dann als nächstes versucht einen DDS548 anzuschprechn.
Den also an die gleiche Leitung gehängt und zusätzlich bei den Objekten die Spannung 30001 mit der Adresse 12 anzuzeigen. Erstes Ergebnis: Adapter bleibt rot.
Dann eine zweite Instanz des Modbus Adapters instlliert und nur diesen Zähler eingerichtet. Ergebnis: Adaper wird gelb, dann grün und dann wieder gelb.
Also wieder die Adern vertauscht und der Adapter wurde grün! Wenn also auf dem gesamten Bus nur ein einziger Zähler falsch angeschlossen ist wird der Adapter rot bleiben. Also am besten erestmal jedes Gerät für sich richtig einrichten und dann kann man auch mehrere IDs in einer Instanz auslesen.
Da ich zu diesem Zähler absolut nichts braucbares im Netz gefunden habe, habe ich mal mit den Werten ausaus dem Abschnitt REGISTERS LIST FOR DDM DEVICE experimentiert (DDS gibt es dort nicht).
Dort steht z.B.#define DDM_PHASE_1_VOLTAGE 0x0000 // V | 1 | #define DDM_PHASE_1_CURRENT 0x0008 // A | 1 | #define DDM_PHASE_1_POWER 0x0012 // W | 1 | #define DDM_PHASE_1_REACTIVE_POWER 0x001A // VAr | 1 | #define DDM_PHASE_1_POWER_FACTOR 0x002A // | 1 | #define DDM_FREQUENCY 0x0036 // Hz | 1 | #define DDM_IMPORT_ACTIVE_ENERGY 0x0100 // kWh | 1 | #define DDM_IMPORT_REACTIVE_ENERGY 0x0400 // kVArh | 1 |
also habe ich mal zu allen Werten 30001 dazugezählt (also 30009 für den Strom) und siehe da, das ganze funktioniert.
Jetzt zum Problemkind DDM18SD
Da musste ich die Parität von "none" auf "even" ändern. Da die Github Seite ja nur von DDM devices spricht habe ich einfach mal die gleichen Adressen wie beim DDS genommen und auch das hat funktioniert.
Jetzt weiß ich nur noch nicht, wie ich bei diesem Gerät intern die Parität ändern kann. Beim SDM230 git es die Adresse "40019 Write the network port parity/stop bits for MODBUS
Protocol". Aber selbst wenn ich diese Adresse für DDM Devices kennen würde, wie schreit man da etwas? Kann ich die bei "Diskrete Ausgänge" alegen und dann ändern? Das muss ich noch herausfinden.Was mir noch beim DDM18 aufgefallen ist, ist dass das ganze nicht sonderlich stabil ist. Mal war der Adapter minutenlang grün und schön die Werte angezeigt, dass ist er wieder mal 5 Minuten auf gelb gegangen und hat nichts aktualisiert, dann ging er plötzlich wieder.
Die Maximale Kabellänge soll ja im Kilometerbereich liegen und da bin ich weit davon entfernt.