Neue Versionen und Support zum Modbus-Modul

Begonnen von StefanStrobel, 20 August 2017, 12:11:08

Vorheriges Thema - Nächstes Thema

holle75


Rampler

Hallo zusammen,
ich lese ein Register aus meinem GoodWe Wechselrichter aus, dieser enthält 0c0a für 12:10 (Uhrzeit).
Mit unpack H* sehe ich 0c0a, würde aber gerne 12:10 haben. Div. unpack's habe ich ohne Erfolg durch.
Würde jetzt mal mit expr versuchen hex nach dec zu wandeln.
Hat jemand eine Tipp für mich ?

VG
Klaus 
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

Jewe

Zitat von: Jewe am 23 März 2025, 19:25:24
Zitat von: StefanStrobel am 23 März 2025, 18:43:46Hallo Jewe,

es fehlt das Attribut poll bzw. defPoll...

Gruss
  Stefan

In der tat, das fehlt, habe es nun eingefügt, aber es werden trotzdem keine Readings erzeugt.
Wenn ich mir im myModbus Master den LAST_ERROR anzeigen lasse kommt ständig ein timeout.
   timeout waiting for reply to fc 3 to id 3, h0, len 7

Was heisst darin FC3 ?

Inzwischen funktioniert es so wie es soll. Hatte versehentlich im Waveshare unter Protokoll Modbus TCP to RTU eingetragen.

Danke für die Hilfe.

holle75

Seit der Fehlerkorrektur von ->

https://forum.fhem.de/index.php?topic=75638.msg1337685#msg1337685

und dem BusDelay von ->

https://forum.fhem.de/index.php?topic=141167.msg1337743#msg1337743

habe ich keinen einzigen Freeze mehr gehabt. In irgendeiner Form scheint Modbus blockierend zu wirken wenn man Unsinn in der DEF bastelt.

Wäre noch spannend, wie das sein kann ...

Tomk

#1324
Hallo zusammen,
ich versuche function code 16 mit ModbusAttr im Master Mode zu nutzen. Ich werde aus der Beschreibung nicht ganz schlau...

Wenn ich "dev-h-write 16" nutze wird doch wahrscheinlich immer FC16 zur Abfrage aller Holdings genutzt, oder? Ich habe allerdings auch Holding mit fc6 welche ich abfrage. Kann ich fc 16 auch für die Abfrage spezieller Holding Register nutzen?

"Some slave devices might need function code 16 for writing holding registers. In this case dev-h-write can be set to 16.
Example: attr MBTest dev-h-write 16"

Vielen dank vorab!

Leider hat noch keiner geantwortet... ist die Frage nicht verständlich? Oder habe ich vielleicht ein grundsätzliches Verständnisproblem...bin für jeden Tipp dankbar.

Tomk

Zu dem o.g. Problem: kann ich mit obj-XY-overrideFCwrite den fc16 nur für bestimmte Attribute nutzen?
Wie müsste request und response definiert werden damit es den Standard function code 16 entspricht?

jw2013

#1326
Wie Anton (vor über 3 Jahren) hatte ich versucht, ein Waveshare 8x Relais anzusteuern, mit dem gleichen Ergebnis: Relais über Coils funktionierten, der Rest nicht.

https://forum.fhem.de/index.php?msg=1203195

Wenn ich aber eine andere Software als FHEM/ModbusAttr verwende, z.B. mbpoll, funktioniert alles wie beschrieben und erwartet.

Also habe ich die Daten auf dem Bus verglichen, und dabei einen üblen Bug in 98_Modbus.pm gefunden:

Um ein einzelnes "Holding Register" am Slave 1 und der Adresse 16384 auszulesen, wäre folgender Request korrekt:

[01] = Slave Adresse: 1
[03] = Funktion: Read Holding Register
[40][00] = Register-Adresse: 32768
[00][01] = Anzahl der zu lesenden Register: 1
[91][CA] = Checksum

98_Modbus.pm sendet aber:

[01] = Slave Adresse: 1
[03] = Funktion: Read Holding Register
[40][00] = Register-Adresse: 32768
[00][00] = Anzahl der zu lesenden Register: 0
[50][0A] = Checksum

Der Fehler mit der Länge 0 tritt immer dann auf, wenn einzelne Register ausgelesen werden, ohne kombiniert zu werden.

Der Grund findet sich in 98_Modbus.pm:
Die sub DoRequest berechnet nur dann $request->{LEN}, wenn der Wert nicht existiert.
Allerdings übergibt sub GetUpdate immer $obj->{span} als $request->{LEN}, auch wenn $obj->{span} gar nicht definiert wurde. Dadurch gelangt der undef Wert bis in die pack Funktion, und wird dort zur falschen Anzahl=0.

Ein Fix ist m.E. logisch:
In sub DoRequest muss
LEN => $span,ersetzt werden durch
(defined $span? (LEN => $span) : ()),
Hoffe das hilft! Wundert mich, dass der Fehler mehrere Jahre lang unentdeckt blieb ;-)

Beste Grüße
- jens
Wer nicht mit der Zeit geht, geht mit der Zeit

StefanStrobel

Vielen Dank!
wirklich seltsam, dass das noch nie aufgefallen ist.
Ich baue es ein.

Gruss
   Stefan

Tomk

#1328
Zitat von: StefanStrobel am 12 Oktober 2024, 12:24:40Hallo zusammen,

-group für das Schreiben steht schon eine Weile auf meiner todo-Liste. Bisher bin ich aber leider noch nicht dazu gekommen.

Gruss
  Stefan

Hallo Stefan, gibt es hierzu evtl. was neues? Ich stehe auch gerade vor dem Problem mehrere Werte aufeinmal zu schreiben und über FC16 / 0x10 zu senden. Einen Wert senden habe ich jetzt mit FC16 hinbekommen.

Ich habe noch ein weiteres Problem: FC3 und FC16 Register starten bei meinem Wechselrichter mit 0x0. D.h. wenn ich "obj-hXX-xxx" nutze, kann ich nicht zwischen FC3 und FC16 unterscheiden, oder übersehe ich etwas?

Besten Dank vorab!

Burny4600

Ich habe mir ein Modbusmodul für den ABB-Transfairschalter für die Notstromumschaltung erstellt und ein Problem mit dem ich nicht weiterkomme.

Ich dürfte wahrscheinlich irgend einen grundlegenden Fehler eingebaut haben, auf den ich nicht komme.

Ich hoffe hier den Fehler zu finden.
MfG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

300P

Hallo Burny4600,

auch diesen Hinweis beachtet :

Modbus parameters configuring and ATS control function is available only when OTM_ C21D
is working in remote control mode.
Remote control can only be operated under automatic operation mode.
After remote control OTM C21D must be reset to Local monitorina mode, then it can re-
turn to automatic operation mode.


Übersetzung Google
Die Konfiguration der Modbus-Parameter und die ATS-Steuerungsfunktion sind nur verfügbar, wenn OTM_C21D im Fernsteuerungsmodus arbeitet.
Die Fernsteuerung kann nur im Automatikbetrieb erfolgen.
Nach der Fernsteuerung muss OTM C21D in den lokalen Überwachungsmodus zurückgesetzt werden, um in den Automatikbetrieb zurückkehren zu können.


Bist du dir sicher das im Gerät der richtige Modus aktiviert ist ?

Wenn der Modus passt würde ich es erst einmal mit einem Modbus-Scan des Gerätes versuchen. Dann siehst ob Antworten kommen und welche überhaupt kommen.....

Bei mir war es vor ein paar Jahren ähnlich bei einem China-Display für die Anzeige von Werten eines Drucksensors in der Zisterne. Erst musste ein Modus an der Anzeige voreingestellt werden, dann kamen auch Modbus-Antworten (Registerwerte) von dem Werte-Anzeige-Display.

Gruß
300P 
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

Burny4600

#1331
ZitatBist du dir sicher das im Gerät der richtige Modus aktiviert ist ?

Ja das habe ich.
Die LED für Automatiklbetrieb leuchtet.
Ich werde morgen eine Modbus Software für einen Test direkt an der Schnittstelle testen.
Vielleicht finde ich so heraus ob sich überhaupt etwas an der Schnittstelle tut.
MfG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

300P

Ich hab mal nachgesehen womit ich suche / teste.
=>> z.B. mit diesem Tool direkt auf die IP:Port (vorher so konfigurieren) per TCP um da mal drauf zu sehen.
"Radzio! Modbus Master Simulator"

Im Bild bedeutet bei 30955 z.B. die 2292 = "laden" des BWR bei mir und ist richtig / okay.
Gruß
300P
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

Burny4600

@300P

Danke für deinen Hinweis mit deinem Tool.
Das werde ich nochmal damit testen. Sieht einfacher und Umfangreicher aus als mein Testtool.
MfG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Burny4600

@300P

Mit deinem Tool lässt sich ein Test sehr einfach durchführen.
Jedenfalls stimmt etwas nicht mit dem ABB Modbus Modul.
Trotz das der Transfairschalter im Automatik-Modus ist, kommt keine Anwort. Da muss ich ABB kontaktieren.
MfG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess