Das Problem mit Little/Big-Endian haben sicher einige seit der 7.0. Bei mir gibt es leider einen von mir nicht änderbaren Empfänger der Modbus-Nachrichten (openWB), deshalb muß ich die Kostal auf little endian einstellen. Gibt es eine Möglichkeit, das Modul durch eine Änderung im Programmtext auf little endian festzuzurren?
Wenn ich den WR auf big endian umstelle, funktioniert das Modul wie erwünscht, dann aber die openWB nicht mehr
Ich hab mal versucht, im Modul zu editieren, aber anscheinend nicht die richtige Stelle erwischt - wer weiß Rat?
ich muss mich wieder einmal melden und schulde allen ein Update wie es mit dem Modul weiter geht.
Ursprünglich hatte ich vor, das Modul an IPS 7.0 anzupassen.
Dann kam mit IPS 7.x die Erweiterung des integrierten ModBus. Daher macht es Sinn, wenn ich das Ganze auf die neuen ModBus-Funktionen umschreibe, da diese nun auch Strings und alles andere unterstützt, was vorher nicht möglich war. Daher wird meine eigene ModBus-Klasse wohl überflüssig. Diese war jedoch darauf ausgelegt, dass sich der ModBus-Gateway um Big-/Little-Endian kümmert, was ab 7.x nun die ModBus-Instanz selber macht (coole Anpassung , aber für meinen Code nicht hilfreich ). Daher lässt sich das Problem von einigen von euch (z.B. @garfieldt & @dallard) nicht einfach mit einer Zeile Code fixen…
Ich habe geplant, dass das Modul in Zukunft direkt einen Konfigurations-Import in die erweiterte ModBus-Instanz schreibt und dann eigentlich nur noch beim Laden von meinem Code abhängig ist.
Aktuell ist es aber so, dass ich (noch) zwei Jobs habe und daher die Freizeit fürs Programmieren zu kurz kommt . Das wird sich aber im Herbst ändern und ich hoffe, dass ich dieses Thema dann endlich angehen kann.
Ev. hat jemand anderes bereits alle Werte in eine ModBus-Instanz eingepflegt und könnte seinen Export zur Verfügung stellen?
danke, das hat mir schon mal auf die Sprünge geholfen. Ich habe mir die Modbus-Doku für den Kostal besorgt und das Device angelegt. Dabei sind folgende Punkte aufgefallen:
Bool-Variablen sollen als function code 3 angelegt werden (lt. Doku). Geht im Modul nicht.
Einige Variablen werden als little endian - byte swap benötigt, andere (vor allem Strings) als big endian (standard). Einige Strings sind mit 8 Byte in der Doku, brauchen aber 16, um den vollen Text anzugeben. Zwei Adressen haben kein angegebenes Variablenformat, die habe ich erst mal ausgelassen. Ansonsten ist die Vorlage angehängt - ohne Gewähr. Funktioniert mit meinem Plenticore Plus G2 7.0.
endlich habe ich auch wieder etwas Zeit für Symcon
Ich habe nun sämtliche ModBus-Parameter des Modules in eine ModBus-Vorlage konvertiert und dafür einen separaten Thread in den ModBus Vorlagen angelegt.
@dallard hat seine ebenfalls hier gepostet. Vielen Dank!
Da das Ganze nun relativ einfach (abgesehen von der Handarbeit bei mehr als 100 Parametern) direkt mit Simcon möglich ist, werde ich das Modul nicht mehr weiter entwickeln. Ich werde aber noch prüfen, ob es Sinn macht, das Modul komplett neu zu erstellen und im Hintergrund einfach die ModBus Instanz von Simcon „zu pflegen“. Damit wäre dann eine Aktualisierung über den Store sehr einfach möglich.
Bitte gebt euer Feedback ab, ob ihr Interesse daran habt (ansonsten kann ich meine Zeit im Moment auch für anderes nutzen )
Ja, ich wäre interessiert an einem eigenständigen Modul
Nein, die Integration mit einer ModBus-Vorlage reicht völlig aus
Ich hätte gerne ein Script, welches die Archiv-Werte des Moduls auf die neuen Variablen der Vorlage überträgt
Es braucht zunächst zwei Client Instanzen mit dem Port ip:1502
Dann das Modbus-Geräte mit ID 71 anlegen und zum Schluss die Plenticore Instanzen. Sollte auf Anhieb funktionieren.
ich habe auch drei Plenticore - bekomme das aber irgendwie nicht nicht hin.
Ich habe den Client Socle kopiert und dann die IP Adresse geändert aber ich bekomme es nicht hin dann das (kopierte Modbus Gateway anzupassen - geschweige denn den zweiten Plenticore passend anzulegen.
jetzt geht es los, es wurden alle Variablen angelegt, die ich als aktiv geklickt habe.
Einige werden auch gefüllt, aber ich muss mir erstmal einen Überblick verschaffen, welche Werte ich haben will und ob sie plausibel sind.
Im Meldungs-Log aber auch eine Fehlermeldung:
08.11.2025, 11:06:02 | TimerPool | Kostal PLENTICORE plus (RequestRead): Fatal error: Uncaught ValueError: func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function in /mnt/data/symcon/modules/.store/ch.tanner.jot.kpp/JoTKPP/module.php:372 Stack trace: #0 /mnt/data/symcon/modules/.store/ch.tanner.jot.kpp/JoTKPP/module.php(372): func_get_arg(0) #1 /mnt/data/symcon/scripts/__generated.inc.php(31): JoTKPP->RequestRead() #2 /-(1): JOTKPP_RequestRead(37117) #3 {main} thrown in /mnt/data/symcon/modules/.store/ch.tanner.jot.kpp/JoTKPP/module.php on line 372
08.11.2025, 11:24:47 | TimerPool | Kostal PLENTICORE plus (RequestRead):
Warning: NaN/INF Werte werden nicht unterstützt in /mnt/data/symcon/modules/.store/ch.tanner.jot.kpp/JoTKPP/module.php on line 382
Fatal error: Uncaught ValueError: func_get_arg(): Argument #1 ($position) must be less than the number of the arguments passed to the currently executed function in /mnt/data/symcon/modules/.store/ch.tanner.jot.kpp/JoTKPP/module.php:372
Stack trace:
#0 /mnt/data/symcon/modules/.store/ch.tanner.jot.kpp/JoTKPP/module.php(372): func_get_arg(0)
#1 /mnt/data/symcon/scripts/__generated.inc.php(31): JoTKPP->RequestRead()
#2 /-(1): JOTKPP_RequestRead(37117)
#3 {main}
thrown in /mnt/data/symcon/modules/.store/ch.tanner.jot.kpp/JoTKPP/module.php on line 372
@Nall-chan Das war der Gamechanger: Über ModBus-Gerät und die Vorlage Kostal Plenticore G2 7.0.json kommen nun plausible Werte rein. Der Rest ist Fleißarbeit.
Apropos Fleißarbeit, gibt es eine elegante Methode meine heiligen Daten (ca 30 seit Jahren geloggte Variablen) aus dem JoTKPP Modul auf die neuen Variablen zu übernehmen?
Oder muss ich tatsächlich von allen geloggten JoTKPP Variablen die neuen Nummern suchen, dann die Daten auf die Neuen übernehmen, dann das Logging auf den Neuen ein und auf den Alten abschalten?
Kann ich die alten Variablen dem Modbus Modul zuweisen?
ich betreibe das Modul schon länger erfolgreich. Jetzt habe ich aber 3 statt einem Kostal WR (3 verschiedene IP Adressen).
Ichv schaffe es aber nicht mehr als einen WR erfolgreich zu verbinden
Ich habe 3 verschidene I/O Instanzen angelegt; Jetzt auch noch testweise eine zweite Splitter Instanz Modbus.
Ich versuche diese immer wieder als Schnittstelle zuzuordnen - bekomme es aber nicht richtig ausgelesen.
Was mache ich falsch?