Ankündigung
Einklappen
Keine Ankündigung bisher.
Einbindung von Modbus TCP
Einklappen
X
-
Sorry bmx dass ich mich nicht mehr gemeldet hab.
Ich bin den Weg des geringsten Widerstands gegangen und bin auf Node-RED umgestiegen. Ich hatte seitdem einmal das Problem, dass der Zähler gar keine Werte mehr lieferte. Nach einem "Reset" des Zählers und der Anpassung der Cycle-Time sowie der Anzahl der ausgelesenen Register ist seitdem Ruhe.
Ich vermute mal, dass das Problem mit dem Plugin auch irgendwas damit zu tun hatte...
Sorry, dass ich nicht mehr hierzu beitragen kann...
Kommentar
-
Hallo zusammen,
irgendwie stehe ich auf dem Schlauch. Ich habe zwei Wechselrichter, die ich beide per Modbus TCP anfragen möchte. Aber woher weiss eigentlich die item YAML, welche modbus_tcp sie ansprechen soll?
Anbei meine plugin.yaml
Code:... modbus_wr2_fast: plugin_name: modbus_tcp host: 192.168.122.231 port: '502' webif_pagelength: 100 instance: modbus_wr2_fast cycle: 30 slaveUnit: 1 modbus_wr1_fast: plugin_name: modbus_tcp host: 192.168.122.230 port: '502' webif_pagelength: 100 instance: modbus_wr1_fast cycle: 30 slaveUnit: 1
Code:%YAML 1.1 --- R03: WR2: DC_CURRENT: type: num name: DC_CURRENT modBusObjectType: HoldingRegister modBusDirection: read modBusAddress: 40273 modBusDataType: int16 modBusDirection: read modBusFactor: 0.0001
Gebt mir doch mal nen Tipp, was ich hier übersehe.
Danke euch!
Kommentar
-
Du musst den Attributen jeweils die Instanz mitgeben wie hier beschrieben ist.
Code:instance: modbus_wr2_fast
Code:%YAML 1.1 --- R03: WR2: DC_CURRENT: type: num name: DC_CURRENT modBusObjectType@modbus_wr2_fast: HoldingRegister modBusDirection@modbus_wr2_fast: read modBusAddress@modbus_wr2_fast: 40273 modBusDataType@modbus_wr2_fast: int16 modBusDirection@modbus_wr2_fast: read modBusFactor@modbus_wr2_fast: 0.0001
Kommentar
-
Zitat von bmx Beitrag anzeigenDu musst den Attributen jeweils die Instanz mitgeben wie hier beschrieben ist.
Code:instance: modbus_wr2_fast
Code:%YAML 1.1 --- R03: WR2: DC_CURRENT: type: num name: DC_CURRENT modBusObjectType@modbus_wr2_fast: HoldingRegister modBusDirection@modbus_wr2_fast: read modBusAddress@modbus_wr2_fast: 40273 modBusDataType@modbus_wr2_fast: int16 modBusDirection@modbus_wr2_fast: read modBusFactor@modbus_wr2_fast: 0.0001
Kommentar
-
Hi,
für das Modbus Write ab Zeile 403 fehlt die Unterscheidung von unit/slave in Abhängigkeit der pymodbus Version.
Code:if objectType == 'Coil': result = self._Mclient.write_coil(address, value, unit=slaveUnit) elif objectType == 'HoldingRegister': registers = builder.to_registers() result = self._Mclient.write_registers(address, registers, unit=slaveUnit)
Code:if objectType == 'Coil': if pymodbus_baseversion > 2: result = self._Mclient.write_coil(address, value, slave=slaveUnit) else: result = self._Mclient.write_coil(address, value, unit=slaveUnit) elif objectType == 'HoldingRegister': registers = builder.to_registers() if pymodbus_baseversion > 2: result = self._Mclient.write_registers(address, registers, slave=slaveUnit) else: result = self._Mclient.write_registers(address, registers, unit=slaveUnit)
Wäre es sinnvoll auf Plugins wie kostalmodbus und KSEMmodbus zu verzichten (weil z.B. nicht Multi-Instance-fähig, kein Modbus Write definiert) und stattdessen für dieses generische Modbus Plugin Item Stucts zu definieren?
Ich benötige sowohl Multi-Instance als auch Modbus Write für das kostalmodbus Plugin. Dann würde ich mal versuchen die Item Structs für Kostal Plenticore, KSEM und zwei Energiezähler mit Modbus anzulegen.
Kommentar
-
Zitat von knx75knx Beitrag anzeigen
In der Log Datei finde ich dennoch eine Meldung:
Code:WARNING lib.item.item Item Photovoltaik.Speicher_Status.Text: problem evaluating 'sh.Photovoltaik.Speicher_Status.Text.lookup()[value]': ''
Hallo Andre (@knx75knx),
ja, beim Initialisieren hat der value keinen bekannten Wert, daher kann der aus dem Dict auch nicht ausgelesen werden. Ich habe das leicht anders geschrieben:
Code:Speicher_Status: type: num name: S_Status modBusAddress@se_inverter: 59782 modBusDataType@se_inverter: uint32 Text: type: str eval_trigger: .. eval: sh..lookup().get(value,'None') lookup: type: dict initial_value: "{ None: 'None', 0: 'Aus', 1: 'Standby', 2: 'Init', 3: 'Laden', 4: 'Entladen', 5: 'Fehler', 6: 'Leerlauf', 7: 'sieben', 8: 'acht', 9: 'neun', 10: 'Energiesparmodus'}"
Zuletzt geändert von bmx; 03.12.2023, 20:05.
Kommentar
-
Zitat von beckerth Beitrag anzeigenfür das Modbus Write ab Zeile 403 fehlt die Unterscheidung von unit/slave in Abhängigkeit der pymodbus Version.
Zitat von beckerth Beitrag anzeigenWäre es sinnvoll auf Plugins wie kostalmodbus und KSEMmodbus zu verzichten (weil z.B. nicht Multi-Instance-fähig, kein Modbus Write definiert) und stattdessen für dieses generische Modbus Plugin Item Stucts zu definieren?
Kommentar
-
Zitat von Cannon Beitrag anzeigenWäre es nicht sinnvoll die Plugins entsprechend zu erweitern, anstatt da "lose" einzelne Items für zu haben?
Ich bin ernsthaft am Überlegen, 'meine' Plugins für Helios und Trovis durch das generische ModbusTCP-Plugin abzulösen. Bisher war das wegen RTU nicht möglich; durch die neuen Adapter mit integriertem TCP/RTU Gateway ist das aber nun kein Problem mehr. Ist bei mir seit über einem Jahr stabil und fehlerfrei im Einsatz.
Lieber eine Bibliothek mit items-Dateien für ein allgemeingültiges ModbusTCP-Plugin, als 20 verschiedene Modbus-Implementierungen, denen man ständig hinterherhechelt - und sich bei jeder woanders reindenken und rumwurschteln muss. Und privat gewinne ich mehr Freizeit - muss keine Plugins mehr pflegen.
/tomZuletzt geändert von Tom Bombadil; 05.12.2023, 00:47.
- Likes 1
Kommentar
-
Zitat von Tom Bombadil Beitrag anzeigenLieber eine Bibliothek mit items-Dateien für ein allgemeingültiges ModbusTCP-Plugin, als 20 verschiedene Modbus-Implementierungen, denen man ständig hinterherhechelt
Zitat von Tom Bombadil Beitrag anzeigenUnd privat gewinne ich mehr Freizeit - muss keine Plugins mehr pflegen.Aber zumindest muss man sich nicht mehr auf ständige Modbus-Änderungen einlassen. Wobei ich hoffe, dass das Thema jetzt auch durch ist.
Kommentar
-
Ich verwende das Plugin für die Abfrage der Register meines Wechselrichters Fronius Gen24. Das Lesen der Register funktioniert einwandfrei.
HTML-Code:fronius: plugin_name: modbus_tcp host: 192.168.10.211 port: 502 cycle: 30 plugin_enabled: true
HTML-Code:PV_GEN_24: I_ges: # [A] AC Current type: num value: '0' modBusAddress: 40071 modBusUnit: '1' modBusDataType: float32 StorCtl_Mod: # [StorCtl_Mod] Activate hold/discharge/charge storage control mode. Bitfield value. (bit 0: CHARGE, bit 1: DiSCHARGE) type: num modBusAddress: 40358 # 40359 bitfield16 modBusUnit: '1' modBusDataType: 'uint16' # bitfield16 (0 bis 0x7FFF) modBusDirection: 'read_write' visu_acl: rw
In der Konfiguration des Fronius Gen24 habe ich die Option "Wechselrichter-Steuerung über Modbus" aktiviert.
Fronius_Modbus.jpg
Warum kann ich so keine Werte in den Fronius Gen24 schreiben ? Habe ich etwas übersehen ?
In der Log-Datei finde ich keine Fehlermeldungen (Warnings).
Gruss Matthias
Kommentar
-
Zitat von manhartm Beitrag anzeigenWarum kann ich so keine Werte in den Fronius Gen24 schreiben ? Habe ich etwas übersehen ?
Es gibt Geräte (z.B. meine Samson Trovis), bei denen Schreibvorgänge erst 'erlaubt' werden müssen. Bei der Trovis muss z.B. erst die Geräte-Pin in ein bestimmtes Register geschrieben werden, um das Schreiben für die nächsten 30 Minuten freizugeben. Die 'sichere Bank' wäre also, vor jedem Schreibvorgang zuerst die Geräte-Pin in ein bestimmtes Register zu schreiben.
Ich bin mir nicht sicher, ob sich solch ein Vorgehen bereits im generischen Modbus-Plugin abbilden lässt - möglicherweise ist Dein Problem ähnlich gelagert. Und vielleicht kann der Entwickler oder einer der aktiven Nutzer des Plugins da Licht in's Dunkel bringen.
/tom
Kommentar
-
Zitat von Tom Bombadil Beitrag anzeigenLieber eine Bibliothek mit items-Dateien für ein allgemeingültiges ModbusTCP-Plugin, als 20 verschiedene Modbus-Implementierungen, denen man ständig hinterherhechelt - und sich bei jeder woanders reindenken und rumwurschteln muss
Kommentar
-
Zitat von manhartm Beitrag anzeigenIch verwende das Plugin für die Abfrage der Register meines Wechselrichters Fronius Gen24. Das Lesen der Register funktioniert einwandfrei.
Nun wollte ich das Register PV_GEN_24.StorCtl_Mod schreiben. Trage ich den Wert 3 ein, wird nach kurzer Zeit der Wert 0 wieder angezeigt.
In der Logdatei finde ich zu diesem Item folgende Einträge:
HTML-Code:2023-12-08 12:03:02 DEBUG plugins.modbus_tcp parse item: PV_GEN_24.StorCtl_Mod 2023-12-08 12:03:02 INFO plugins.modbus_tcp parse item: PV_GEN_24.StorCtl_Mod Attributes {'regAddr': 40358, 'slaveUnit': 1, 'dataType': 'uint16', 'factor': 1, 'byteOrder': '>', 'wordOrder': '>', 'item': Item: PV_GEN_24.StorCtl_Mod, 'value': 0, 'objectType': 'HoldingRegister', 'dataDir': 'read_write'} ... 2023-12-08 12:03:21 DEBUG plugins.modbus_tcp read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1) ... 2023-12-08 12:03:56 DEBUG plugins.modbus_tcp read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1) ... 2023-12-08 12:04:26 DEBUG plugins.modbus_tcp read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1) ... 2023-12-08 12:04:50 DEBUG plugins.modbus_tcp read HoldingRegister.40358.1 (address.slaveUnit) regCount:1 result:ReadHoldingRegistersResponse (1) ...
Kommentar
Kommentar