ModbusRS485 - RS485-TCP-Server direkt ansprechen

Begonnen von roedert, 17 November 2022, 14:01:06

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo,

das liegt daran dass es auf einem Bus nur einen Master geben darf. Wenn Dein Umsetzer ein echtes Relay wäre, würde er das regeln, aber wenn er nur die Requests weitergibt, dann konkurrieren Deine beiden Fhem-Definitionen miteinander.
Die Lösung besteht darin ein gemeinsames Modbus-IO-Device für die beiden Master zu definieren.

Gruss
    Stefan

roedert

Zitat von: StefanStrobel am 20 November 2022, 17:14:37
Die Lösung besteht darin ein gemeinsames Modbus-IO-Device für die beiden Master zu definieren.

Und wie könnte man das machen? Hatte auch schon versucht, dem 2. SDM630-Device das andere SDM-Device mittels attr als IODEv festzulegen, was aber nicht akzeptiert wird.

Ich hatte aber auch gerade schon meinen Beitrag editiert, evtl. habe ich ja die Lösung gefunden:

Edit: Nachdem ich TCP-RTU auf dem TCP-Wandler abgeschaltet habe und die beiden SDM630 in FHEM mit RTU statt TCP definiert habe, läuft eigentlich alles ganz gut.

holzwurm83

#17
Hallo zusammen,

ich denke das ich wohl ein ähnliches Problem habe wie hier beschrieben. Ich habe 5 SDM630M V3 und das Problem das die Werte die ankommen nicht immer stimmen. Die Werte werden teilweise in anderen readings angezeigt.

Alle 5 SDM630M sind wie folgt definiert:

defmod MB_USRW610_111 ModbusSDM630M 111 65 192.168.136.36:8899 TCP
attr MB_USRW610_111 alias Preis
attr MB_USRW610_111 busDelay 0.5
attr MB_USRW610_111 clientSwitchDelay 0.5
attr MB_USRW610_111 icon stromzaehler_icon@green
attr MB_USRW610_111 room System->Geraete->Modbus
attr MB_USRW610_111 sortby 3
attr MB_USRW610_111 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)

Ich verstehe nur nicht wie ist das jetzt ändern soll?

Ich habe auch folgende Fehler im LOG:

2023.10.22 12:41:42.620 3: MB_USRW610_111: readfn got data while EXPECT was set to idle: 000d000000070204043e3cc1bf
2023.10.22 12:41:42.620 3: MB_USRW610_231: readfn got data while EXPECT was set to idle: 000d000000070204043e3cc1bf
2023.10.22 12:41:42.630 3: MB_USRW610_001: readfn got data while EXPECT was set to idle: 000d000000070204043e3cc1bf
2023.10.22 12:41:42.630 3: MB_USRW610_241: readfn got data while EXPECT was set to idle: 000d000000070204043e3cc1bf
2023.10.22 12:41:43.436 3: MB_USRW610_111: readfn got data while EXPECT was set to idle: 0021000000070204043dc59af4
2023.10.22 12:41:43.437 3: MB_USRW610_231: readfn got data while EXPECT was set to idle: 0021000000070204043dc59af4
2023.10.22 12:41:43.438 3: MB_USRW610_001: readfn got data while EXPECT was set to idle: 0021000000070204043dc59af4
2023.10.22 12:41:43.438 3: MB_USRW610_241: readfn got data while EXPECT was set to idle: 0021000000070204043dc59af4
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

holzwurm83

Ich habe das jetzt einmal umgebaut und wie folgt definiert:

define Gateway_Modbus Modbus 192.168.136.36:8899
attr Gateway_Modbus room System->Geraete->Modbus

define MB_USRW610_001 ModbusSDM630M 1 60 TCP
attr MB_USRW610_001 IODev Gateway_Modbus
attr MB_USRW610_001 busDelay 0.5
attr MB_USRW610_001 clientSwitchDelay 0.5
attr MB_USRW610_001 event-on-change-reading .*
attr MB_USRW610_001 icon stromzaehler_icon@green
attr MB_USRW610_001 room System->Geraete->Modbus
attr MB_USRW610_001 sortby 1
attr MB_USRW610_001 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)

define MB_USRW610_002 ModbusSDM630M 2 90 TCP
attr MB_USRW610_002 IODev Gateway_Modbus
attr MB_USRW610_002 busDelay 0.5
attr MB_USRW610_002 clientSwitchDelay 0.5
attr MB_USRW610_002 event-on-change-reading .*
attr MB_USRW610_002 icon stromzaehler_icon@green
attr MB_USRW610_002 room System->Geraete->Modbus
attr MB_USRW610_002 sortby 2
attr MB_USRW610_002 stateFormat current: Power_Sum__W (W) Total: Energy_total__kWh (kWh) Export: Energy_export__kWh (kWh) Import: Energy_import__kWh (kWh)

define MB_USRW610_231 ModbusSDM630M 231 70 TCP
attr MB_USRW610_231 IODev Gateway_Modbus
attr MB_USRW610_231 busDelay 0.5
attr MB_USRW610_231 clientSwitchDelay 0.5
attr MB_USRW610_231 event-on-change-reading .*
attr MB_USRW610_231 icon stromzaehler_icon@green
attr MB_USRW610_231 room System->Geraete->Modbus
attr MB_USRW610_231 sortby 4
attr MB_USRW610_231 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)

define MB_USRW610_241 ModbusSDM630M 241 75 TCP
attr MB_USRW610_241 IODev Gateway_Modbus
attr MB_USRW610_241 busDelay 0.5
attr MB_USRW610_241 clientSwitchDelay 0.5
attr MB_USRW610_241 event-on-change-reading .*
attr MB_USRW610_241 icon stromzaehler_icon@green
attr MB_USRW610_241 room System->Geraete->Modbus
attr MB_USRW610_241 sortby 5
attr MB_USRW610_241 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)

defmod MB_USRW610_111 ModbusSDM630M 111 65 TCP
attr MB_USRW610_111 IODev Gateway_Modbus
attr MB_USRW610_111 busDelay 0.5
attr MB_USRW610_111 clientSwitchDelay 0.5
attr MB_USRW610_111 event-on-change-reading .*
attr MB_USRW610_111 icon stromzaehler_icon@green
attr MB_USRW610_111 room System->Geraete->Modbus
attr MB_USRW610_111 sortby 3
attr MB_USRW610_111 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)
attr MB_USRW610_111 verbose 3

Auf dem Bild könnt ihr sehen, dass Import zum Teil leer ist und Export Werte hat wobei nichts exportieret wird. Die Werte springen alle durcheinander.
Du darfst diesen Dateianhang nicht ansehen.
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

StefanStrobel

Hallo holzwurm83,

für eine genaue Fehleranalyse bräuchte ich mehr Details zu Deiner Konfiguration bzw. Verkabelung. Wie sind die Zähler konfiguriert, wie hängen sie an Deinem Gateway, was ist das für ein Gateway und wie ist das Gateway konfiguriert ...
Ohne das zu wissen kann ich nur spekulieren:
Eventuell ist das Gateway nicht in der Lage als echtes Modbus-Relay mit mehreren Slaves zu arbeiten. Dazu würde gehören, dass das Gateway für jeden Slave den aktuellen Status, den letzten Request inkl. Timing etc. zwischenspeichert. Neue Requests müssten in eine Warteschlange gehen solange auf die Antwort eines vorherigen Requests gewartet wird. Leider können das viele erschwingliche Gateways nicht. Die Konsequenz ist dass das Gateway dann mehrere Requests auf den Bus schickt obwohl das noch gar nicht sein darf, Antworten vom Bus den falschen Requests zuordnet und so bei Fhem unsinnige Werte ankommen können. Das passiert immer dann wenn mehrere Request gleichzeitig auf Antworten warten.

Lösungsmöglichkeiten wären zum Beispiel:
- Direkte Verkabelung der Slaves per RS485 an einen USB-RS485-Adapter an Fhem
- Einsatz dedizierter Gateways für jeden Slave
- Austausch des Gateways gegen ein richtiges Modbus-Relay (das kann auch ein Raspberry mit Fhem sein)
- Definition eines Fhem IO-Device als RTU über TCP und dann logische Devices, die das IO-Device gemeinsam nutzen. Dann verhindert Fhem dass neue Modbus-Requests an einen Slave gesendet werden, solange noch andere Requests offen sind

Gruss
   Stefan

holzwurm83

Hallo Stefan,

vielen dank schon mal für dein Feedback.

Der Aufbau ist wie folgt:

- Als Gateway habe ich dieses hier
- die Leitung habe ich von Zähler zu Zähler gezogen und am Anfang und Ende je einen 120 Ohm Widerstand eingebaut
- angeschlossen habe ich jeweils A und B
- Die Konfiguration habe ich angehängt
- das mit dem IO-Device habe ich schon Eingericht wobei ich mir nicht sicher bin, ob ich dich da richtig verstanden habe:
define Gateway_Modbus Modbus 192.168.136.36:8899
attr Gateway_Modbus room System->Geraete->Modbus

define MB_USRW610_001 ModbusSDM630M 1 60 TCP
attr MB_USRW610_001 IODev Gateway_Modbus
attr MB_USRW610_001 busDelay 0.5
attr MB_USRW610_001 clientSwitchDelay 0.5
attr MB_USRW610_001 event-on-change-reading .*
attr MB_USRW610_001 icon stromzaehler_icon@green
attr MB_USRW610_001 room System->Geraete->Modbus
attr MB_USRW610_001 sortby 1
attr MB_USRW610_001 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)

 
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

StefanStrobel

Hallo holzwurm83,

die Delays sind vermutlich überflüssig und falls doch nicht würde ich sie auf dem IO-Device setzen.
Sonst sieht es ganz gut aus.
Setzt doch mal verbose für alle beteiligten Gräte auf 5 und sammle das Protokoll eine Weile.
Falls wieder Werte durcheinander gehen, kann man eventuell am Log erkennen, was passiert.

Gruss
   Stefan

holzwurm83

Hallo Stefan,

anbei habe ich mal den Log von heute angehängt.

https://we.tl/t-dPjyKDT4In
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

StefanStrobel

Hallo,

Du solltest noch alles auf Modbus RTU umstellen. Dein Gateway kann sicher auch RTU über TCP machen und auf der Fhem-Seite sind dann die logischen Geräte mit RTU und das IO-Device mit RTU über eine IP-Adresse zu definieren.

Gruß
    Stefan

holzwurm83

#24
Zitat von: StefanStrobel am 25 Oktober 2023, 22:33:16Du solltest noch alles auf Modbus RTU umstellen. Dein Gateway kann sicher auch RTU über TCP machen und auf der Fhem-Seite sind dann die logischen Geräte mit RTU und das IO-Device mit RTU über eine IP-Adresse zu definieren.

Hallo Stefan,

mit dem umstellen komme ich gerade nicht ganz klar.

Meinst du das hier?
Du darfst diesen Dateianhang nicht ansehen.

Das Gateway habe ich umgestellt:
defmod Gateway_Modbus Modbus 192.168.136.36:8899 RTU
attr Gateway_Modbus busDelay 0.5
attr Gateway_Modbus clientSwitchDelay 0.5
attr Gateway_Modbus room System->Geraete->Modbus
attr Gateway_Modbus verbose 5

Wenn ich das Device auf RTU setze besteht keine Verbindung
defmod MB_USRW610_001 ModbusSDM630M 1 30 RTU
attr MB_USRW610_001 IODev Gateway_Modbus
attr MB_USRW610_001 alias Haupt
attr MB_USRW610_001 event-on-change-reading .*
attr MB_USRW610_001 icon stromzaehler_icon@green
attr MB_USRW610_001 room System->Geraete->Modbus
attr MB_USRW610_001 sortby 1
attr MB_USRW610_001 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)
attr MB_USRW610_001 verbose 5
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

StefanStrobel

Der ,,data transfer mode" steht ja gerade auf Modbus TCP <=> Modbus RTU.
Modbus-TCP ist ein eigenes Protokoll und nicht einfach Modbus RTU über TCP.
Das müsstest Du umstellen.
Was kannst Du dort denn auswählen?

Gruß
    Stefan

holzwurm83

Zitat von: StefanStrobel am 27 Oktober 2023, 15:23:12Was kannst Du dort denn auswählen?

Diese vier Wahlmöglichkeit gibt es.
Du darfst diesen Dateianhang nicht ansehen.

 
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

StefanStrobel

Probier es mal mit Transparent. Dann sollten die RTU-Requests 1:1 auf den seriellen Bus gehen.

Gruß
    Stefan

holzwurm83

Zitat von: StefanStrobel am 28 Oktober 2023, 10:15:38Probier es mal mit Transparent. Dann sollten die RTU-Requests 1:1 auf den seriellen Bus gehen.
Also das Gateway ist verbunden aber die Zähler verbinden sich nicht. Muss ich das jetzt noch was anderes einstellen.

defmod MB_USRW610_001 ModbusSDM630M 1 30 RTU
attr MB_USRW610_001 IODev Gateway_Modbus
attr MB_USRW610_001 alias Haupt
attr MB_USRW610_001 event-on-change-reading .*
attr MB_USRW610_001 icon stromzaehler_icon@green
attr MB_USRW610_001 room System->Geraete->Modbus
attr MB_USRW610_001 sortby 1
attr MB_USRW610_001 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)
attr MB_USRW610_001 verbose 5
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

holzwurm83

Hallo Stefan,

hast du dazu noch einen Ansatz?


Zitat von: holzwurm83 am 28 Oktober 2023, 12:32:13
Zitat von: StefanStrobel am 28 Oktober 2023, 10:15:38Probier es mal mit Transparent. Dann sollten die RTU-Requests 1:1 auf den seriellen Bus gehen.
Also das Gateway ist verbunden aber die Zähler verbinden sich nicht. Muss ich das jetzt noch was anderes einstellen.

defmod MB_USRW610_001 ModbusSDM630M 1 30 RTU
attr MB_USRW610_001 IODev Gateway_Modbus
attr MB_USRW610_001 alias Haupt
attr MB_USRW610_001 event-on-change-reading .*
attr MB_USRW610_001 icon stromzaehler_icon@green
attr MB_USRW610_001 room System->Geraete->Modbus
attr MB_USRW610_001 sortby 1
attr MB_USRW610_001 stateFormat current:  Power_Sum__W (W)   Total:  Energy_total__kWh (kWh)    Export: Energy_export__kWh (kWh)    Import: Energy_import__kWh (kWh)
attr MB_USRW610_001 verbose 5

- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN