NEWS
Modbus TCP: Wert in Holdingregister schreiben
-
Hallo zusammen,
ich schreibe mit einem script einen dezimalwert in ein Holding register.
Der Wert erscheint im entsprechenden Datenpunk, wird kurz grün. Im Modbus debug log tauchen keine Fehler auf, nur im Modbus Gerät scheint nichts anzukommen.
Oder muss ich noch etwas aktivieren, dass wenn ein Wert geschrieben wurde, dieser dann per ModbusTCP an das Gerät übertragen wird?Gibt es einen Möglichkeit das Debug der Modbus Instanz (aktuell silly) noch zu erweitern, um zu sehen, welcher HEX Befehl an das Gerät übertragen wurde?
lg Frank
-
Ich habe mal mit TCP dump mitgeloggt. Im Dump taucht immer nur "Read Holding Regsiter" auf. Kein Write, obwohl ich im IO Broker Log
States user redis pmessage modbus.1.*/modbus.1.holdingRegisters.72801_RTC:{"val":569154562081819400,"ack":true,"ts":1668494771239,"q":0,"c":"script.js.test_datum","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1668494771239}
stehen habe.
Wert lesen (Read Holding Register) funktioniert nur das Schreiben nicht.
Einstellung Register:
{ "_id": "modbus.1.holdingRegisters.72801_RTC", "type": "state", "common": { "name": "", "role": "value", "type": "number", "read": false, "write": true, "def": 0, "unit": "" }, "native": { "regType": "holdingRegs", "address": 32800, "deviceId": 1, "type": "uint64be", "len": 4, "offset": 0, "factor": "1", "poll": false }, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.modbus.1", "user": "system.user.admin", "ts": 1668494751525 }
PlatformBetriebssystem:linux
Architektur:arm
CPUs:4
Geschwindigkeit:1200 MHz
Modell:ARMv7 Processor rev 4 (v7l)
RAM:926 MB
System-Betriebszeit:90 T. 14:54:37
Node.js:v16.15.1
time:1668495277518
timeOffset:-60
Adapter-Anzahl:444
NPM:8.11.0
Datenträgergröße:14.1 GB
Freier Festplattenspeicher:10.3 GB
Betriebszeit:66 T. 23:56:38
Aktive Instanzen:7
Pfad:/opt/iobroker/
aktiv:true
_nodeCurrent:16.15.1
_nodeNewest:16.18.1
_nodeNewestNext:16.18.1
_npmCurrent:8.11.0
_npmNewest:8.11.0
_npmNewestNext:8.19.2Adapter Modbus, Installierte Version: 5.0.5
-
@digidax
Haken bei "CW" ?Wenn ja ? bin ich raus.
Modbus hat zuviel Lebenszeit gefressen -
@dreistein ja, auch mit CW gesetzt, trotzdem kein TCP traffic.
-
@digidax
Ich bin ja doch neugierig:Warum wird das Register 72801 in die Adresse 32800 geschrieben ?
Und du bist sicher das der Wert an eine gerade Adresse geschrieben werden soll ?
Und was ist das für ein Gerät ? -
@dreistein
Das ist ein PV Wechselrichter. Auslesen vom Holding Register klappt wunderbar.
Das zu schreibende Regsiter hat laut Doku die Adresse 8020 hex. Das entspricht 32800 dez.
Da ich im Adapter Alias aktiviert haben muss ich 40001 addieren und komme auf 72801 dez.
Mit den so errechneten Werten funktioniert jedenfalls das Lesen aus dem Holding Register.laut Doku ist diese Adresse mit eine Wortlänge von 4 schreibbar. In dieser Adresse wird Datum und Uhrzeit gesetzt. z.B. 2015-1-2 10:11:12 müsste mit 07DF 01 02 0A 0B 0C 00 geschrieben werden.
Selbst wenn es das falsche Regsiter wäre oder das Gerät es nicht verarbeiten könnte, weil es falsche Werte sind, müsste doch im TCP Dump ein Schreibbefehl geloggt werden. Möglich wäre laut Doku:
0x03:Read multiple registers
0x06:Write single register
0x10:Write multiple registersIch sehe aber nur 0x03 Kommunikation (lesen) während CW aktiviert ist und ich per MQTT die Werte aktualisiere, die Objekte werden grün und im Modbus Log von IO Broker sehe ich, dass angeblich Daten übertragen werden, nur im TCP Dump taucht davon nix auf.
Schön, dass ich Dein Interesse geweckt habe und Danke fürs damit beschäftigen.
Ja, auch ich habe schon wegen Mobus ein Teil meiner Haarpracht eingebüßt. -
Ich habe gerade mal einen Test gemacht und schreibe in Adresse 53893 (-40001= 13892 dez = 3644 hex ) des Holding Registers, das funktioniert komischerweise.