Verbesserte ModBus Anbindung (IP-Symcon 7.0)

Oh Mann. Schön, wenn man lesen könte :slight_smile:

SMA liefert beim Wechselrichter den NaN Wert, wenn der Wechselrichter nicht mehr erzeugt (Nachts).
Den möchte ich nicht im Archiv haben und daher ignorieren.
Ich hatte das hier schon mal thematisiert:

Handelt es sich um ein natives (C++) oder ein aufgesetztes (php) Modul? Gerade in großen Modbus Installationen käme mir sonst die Frage nach der Anzahl belegter PHP Threads auf.

Ich kann noch ergänzen, dass es sich hier um die beiden einzigen INT64 ModBus Adressen bei mir im System handelt.

Auch bei „AKTUALISIEREN“ kommt der Fehler:

image

Seit dem letzten Update bekomme ich auch keine Werte mehr von der Wago per Modbus.

Dazu gehören auch alle Fensterkontakte.

Ich hab’s oben nicht rausbekommen, ob ich das selbst fixen muss, oder mit dem nächsten Update alles wieder laufen sollte/könnte.

Gruß
BEM

Bist du dich sicher, dass INT8MSB das ist was du wolltest? Was hast du im ModBus Gateway eingestellt? Little or Big Endian? Und hast du das aktuellste Update drauf von gestern?

paresy

Bis vor dem Update hat alles funktioniert und ich habe seit Monaten nix an den Variablen oder überhaupt an der Wagoverbindung gemacht.

Was jetzt richtig ist, muss ich erstmal versuchen herauszubekommen.

Mit dem letzten Update ist zumindest alles so, wie es jetzt ist.

Hm. Es muss dann irgendein Fehler drin sein - denn es sollte sich nichts verändert haben :confused: Ich muss noch herausfinden was dies ist. Kannst du kurz schauen, ob es mit INT8LSB funktionieren würde?

paresy

Japp, damit geht’s dann wieder.
Allerdings muss ich die Profile auch noch anpassen.

Wie meinst du Profile? Was hat sich da geändert? Ich würde trotzdem gerne prüfen, warum sich das geändert hat - eigentlich sollte MSB das korrekte sein.

Und um noch mal hierauf zurück zu kommen: Was hast du im ModBus Gateway eingestellt? Little or Big Endian?

paresy

Hab’s gefunden.
Die Modbusvariablen mussten auf INT16 stehen. Nach der Umstellung funktionieren die zugewiesenen Profile wieder und die Scripte scheinen auch wieder zu funktionieren.

Ich hab im Modbus Little-Eingestellt eingestellt.

Jetzt kommt eine detailliertere Meldung:

Die Adresse ist so definiert:

Die Variable wurde als Integer angelegt:

Das Profil wurde aber nicht eingetragen.

Trage ich das Profil wieder aus, dann kommt keine Fehlermeldung.

Magst du mir das Profil mal im Profilmanager zeigen? Bzw. kannst du deine Vorlage mal „exportieren“?

paresy

Das Profil ist simple

Hier der Export

modbus.json (6,7 KB)

Kann es nachstellen. Das Problem ist der Name Watt, der mit unserem ~Watt Profil kollidiert, welches Float ist. Ich werde mal prüfen, wie ich das lösen kann. Fürs erste empfehle ich dem Profil einen anderen Namen zu geben.

paresy

Aber „Watt“ hat doch „Type“: 1

Hier heißt das Profil „Watt_h“.

Ich habe mal etwas mit der Geräte Instanz rumgespielt. Dabei sind mir noch ein paar Punkte aufgefallen:

  • Beim Anlegen von Adressen erhalten alle Variablen die Position 1. Angelegte virtuelle Adressen erhalten dagegen alle eine fortlaufende Position. Das sollte meiner Meinung nach auch bei den Adressen passieren.

  • der Ident einer Adresse wird aus ‚DataType‘, 'ReadFunctionCode und ‚ReadAddress‘ gebildet. Da fehlt meines Erachtens die WriteAddress. Denn wenn ich mehrere Adressen habe, die ich nur schreiben will, dann ist der Ident nicht mehr eindeutig.

  • bei den Adressen wird noch nicht sichergestellt, dass der Ident eindeutig ist. Es gewinnt die erste Adresse.

  • bei virtuellen Adressen ist der Ident identisch mit dem Namen. Ändert man den Namen, dann ändert sich nicht nur der Ident, sondern die Variable wird sogar gelöscht und neu angelegt. Beides halte ich für fehleranfällig. Besser fände ich, wenn der Anwender den Ident getrennt vom Namen vergeben könnte. Dabei sollte geprüft werden, ob der Ident eindeutig ist.

Ich hoffe, ich bin nicht zu kritisch :slight_smile:

Burkhard

1 „Gefällt mir“

Danke, Punkt 1-2 sind mir auch aufgefallen und ich wollte es gerade schreiben :+1:t2:

Ich würde mir immer noch wünschen das man den Byte Swap auf Adressebene konfigurieren kann. Bei meinem Solaredge Wechselrichter mit Speicher muss ich jetzt zwei Geräte mit unterschiedlichen Gateways anlegen. Das geht aber nur weil ich einen Modbusproxy laufen habe. Der WR lässt leider nur eine Verbindung zu.

Gruß
Stephan

Du kannst doch beide Gateways mit dem gleichen IO verbinden, oder was ist das Problem?
Michael

kann ich. Das hat aber zur Folge dass das Log mit hunderten Meldungen wie dieser geflutet wird:

07.10.2023, 21:36:37 | FlowHandler | Kann Daten nicht zur Instanz #25330 weiterleiten: TransactionID stimmt nicht überein

Viele Grüße
Stephan