FHEM Forum

FHEM => Sonstiges => Thema gestartet von: cotecmania am 05 Oktober 2016, 15:42:20

Titel: [ModbusAttr] - Timeout beim senden
Beitrag von: cotecmania am 05 Oktober 2016, 15:42:20
Hallo,

habe einen Laderegler EPSOLAR LS2024B erfolgreich über RS485 an FHEM über ModbusAttr angeschlossen und kann Daten auslesen.
Auch die Holding Register.

Nun möchtze ich aber einen Wert in einem Holding-Register (laut Doku read (0x03) & write multiple (0x10) ) setzen und bekomme einen Timeout :

2016.10.05 15:16:09 5: LS2024B: Set: key for Last_Mode = h36925
2016.10.05 15:16:09 5: LS2024B: Set: found option Last_Mode (h36925), setVal = manual
2016.10.05 15:16:09 5: LS2024B: Set: found manual in map and converted to 0
2016.10.05 15:16:09 4: LS2024B: Send called with h 36925 len 1 / span - to id 1, queue has 1 requests
2016.10.05 15:16:09 4: LS2024B: Send queues fcode 16 for h 36925 (Last_Mode), len / span 1 : 0110903d000102000032b4 pdu 10903d0001020000, force
2016.10.05 15:16:09 5: LS2024B: ReadAnswer called and remaining timeout is 1.99568510055542 requested reading is Last_Mode
2016.10.05 15:16:09 5: ReadAnswer got: 0110903d0001bd05
2016.10.05 15:16:09 5: LS2024B: ReadAnswer done
2016.10.05 15:16:09 5: LS2024B: Set: sending read after write
2016.10.05 15:16:09 4: LS2024B: Send called with h 36925 len 1 / span - to id 1, queue has 1 requests
2016.10.05 15:16:09 4: LS2024B: Send queues fcode 3 for h 36925 (Last_Mode), len / span 1 : 0103903d000138c6 pdu 03903d0001, force
2016.10.05 15:16:09 5: LS2024B: ReadAnswer called for Last_Mode
2016.10.05 15:16:11 3: LS2024B: Timeout2 in ReadAnswer for Last_Mode


Als dev-h-write ist 16 angegeben wie aus Doku entommen (0x10)

Kann jemand was mit dem Logauszug anfangen ?

Gruss
Joe
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: StefanStrobel am 06 Oktober 2016, 21:08:08
Hallo Joe,

Das Log sieht für mich so aus als ob der write erfolgreich war.

2016.10.05 15:16:09 5: ReadAnswer got: 0110903d0001bd05
2016.10.05 15:16:09 5: LS2024B: ReadAnswer done

Das Modul versucht dann gleich das gerade beschriebene Register wieder auszulesen.

2016.10.05 15:16:09 5: LS2024B: Set: sending read after write
2016.10.05 15:16:09 4: LS2024B: Send called with h 36925 len 1 / span - to id 1, queue has 1 requests
2016.10.05 15:16:09 4: LS2024B: Send queues fcode 3 for h 36925 (Last_Mode), len / span 1 : 0103903d000138c6 pdu 03903d0001, force
2016.10.05 15:16:09 5: LS2024B: ReadAnswer called for Last_Mode
2016.10.05 15:16:11 3: LS2024B: Timeout2 in ReadAnswer for Last_Mode

da kommt dann der Timeout.

Was passiert denn wenn Du Last_Mode ausliest? Kann man das Register überhaupt lesen?
Falls ja könnte es sein, dass der Read zu schnell auf den Write folgt. Dann kannst Du das mit den Attributen für Delays in den Griff bekommen.

Gruss
    Stefan
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: cotecmania am 07 Oktober 2016, 09:23:09
Zitat von: StefanStrobel am 06 Oktober 2016, 21:08:08
Was passiert denn wenn Du Last_Mode ausliest? Kann man das Register überhaupt lesen?

Hallo Stefan,

Last_Mode kann gelesen werden. Ich les mich mal ein in die Timeouts ... Danke ...

Gruss
Joe
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: Allgaeuer am 07 November 2016, 15:59:54
Hallo FHEM-Forum,

ich habe auch ein Problem mit Timeout beim Senden. Ich verwende ein Janitza Strommessgerät UMG 96 RM-E via ModbusRTU und der Funktion "ModbusAttr". Das Lesen der (unzähligen) Register klappt. Auch das Schreiben auf die ersten Register (z.B. Adresse 10= Stromwandler I1, primär) klappt. Wenn ich aber in die Adresse 20012 (=Current transformer I5, primary) einen Wert reinschreiben möchte, dann kommt "Timeout". Lesen kann ich das Register und es kommt auch der richtige Wert.

Kann mir jemand weiterhelfen? - Danke schon mal vorab

Den Auszug aus der Log-Datei ist angehängt
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: StefanStrobel am 07 November 2016, 21:24:14
Hallo Allgaeuer,

kannst Du den Wert denn mit einem anderen Modbus-Programm schreiben?
(z.B. der Testversion von modbustools.com o.ä.)

Gruss
    Stefan
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: Allgaeuer am 07 November 2016, 21:50:54
Hallo Stefan,

Danke für die schnelle Reaktion. Ich habe mir heute einen USB-RS485-Adapter bestellt. Wenn der da ist, dann kann ich den Test machen. Lt Fa. Janitza sollte es gehen, tut aber halt nicht. Kennst Du ein Testprogramm, mit dem ich die CRC überprüfen kann. Die online-CRC-Tools, die ich gefunden habe, liefern irgendwie immer andere Werte (auch bei der funktionierenden Sequenz)
Ich möchte dann die Schnittstellenkommunikation mitloggen und dann sehen wir weiter.

Gruß Allgaeuer
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: StefanStrobel am 07 November 2016, 21:53:01
Hallo,

ich würde mal Modbustools ansehen. Das kann man kostenlos testen. Läuft unter Windows mit einem USB-Adapter.

Gruss
   Stefan
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: Allgaeuer am 07 November 2016, 22:10:33
Hallo Stefan,

Danke für den Tipp. Ich melde mich wieder, wenn der Adapter da ist und ich den Test mit modbustool gemacht habe.

Bis bald.

Gruß Allgaeuer
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: Allgaeuer am 10 November 2016, 20:27:00
Hallo Stefan,

Adapter ist gekommen und ich denke, ich habe den Fehler gefunden: Im oberen Adressbereich nimmt das Janitza keine Befehle mit Code 06 (write single holding register) an. Mit Code 10 (write multiple holding register) funktioniert's. Ich kontaktiere morgen Janitza dazu. Gibt's eine Möglichkeit in FHEM, den set-Befehl mit Code 10 abzusetzen?

Den Dump habe ich als Datei angehängt. (Diesmal mit Register-Adressen auf short-Werte, weil ich hier die Umrechnung von Hex auf float spare.)

PS: mit dem Attribut "disable" kann ich meine Modbus-Devices nicht "abschalten". In einem anderen Blog habe ich gelesen, dass das funktionieren sollte. Gibt's da einen Trick?

Danke und viele Grüße vom Allgäuer
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: StefanStrobel am 11 November 2016, 00:07:09
Hallo,

Für das Einstellen des function codes für bestimmte Operationen gibt es Attribute wie dev-h-write. Steht sogar offiziell in der Doku ;-)

disable sollte auch ganz normal funktionieren.
Wie äußert sich das denn bei Dir?

Gruß
    Stefan
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: Allgaeuer am 11 November 2016, 21:08:42
Hallo Stefan,

a) der Tip mit dev-h-write war Gold wert, damit ist mein Problem gelöst (Wer lesen kann ist klar im Vorteil :-) ). Ich bin immer wieder begeistert, welche Features in FEHM drin sind.

b) zum Thema "disable". Wenn ich in der Config via Editor die Zeile so reinsetzte:

define Electric_Meter_1 ModbusAttr 10 10
attr Electric_Meter_1 disable 1
attr Electric_Meter_1 IODev ModbusLine1
...


dann kommt: "Electric_Meter_1: unknown attribute disable. Type 'attr Electric_Meter_1 ?' for a detailed list. "
Auswählen aus der Attribut-Liste geht nicht.

Vielleicht hast Du nochmals einen Tipp auf Lager.

Danke und Gruß,

Allgäuer
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: StefanStrobel am 11 November 2016, 21:25:35
Hallo Allgäuer,

ich vermute Du verwendest nicht die aktuellste Version von 98_Modbus.pm.
Ich habe in den letzten Monaten einige Erweiterungen eingebaut und das Modul seither noch nicht eingecheckt.
Die letzte Version findest Du derzeit hier: https://forum.fhem.de/index.php/topic,25315.300.html im Post #305

Gruss
    Stefan
Titel: Antw:[ModbusAttr] - Timeout beim senden
Beitrag von: Allgaeuer am 12 November 2016, 11:41:01
Hallo Stefan,

super, mit der neuen Version klappt es.

Besten Dank.

Gruß Allgäuer