… eine Frage zur verbesserten ModBus Anbindung: ich benutze die ‚alte‘ Anbindung recht intensiv, was passiert damit wenn ich jetzt das aktuelle Update rein fahre? Funktioniert das ‚alte‘ Zeug noch und kann ich dann parallel dazu die Features der neuen Anbindung testen oder fliegt mir alles um die Ohren?
Ist das ein Bug bei denen in der API? Denn es ist ja super untypisch, dass sich die Endianess im selben Gerät ändert. Oder steht das in der API auch Dokumentiert so?
Ja, das korrigiere ich zum nächsten Update. Ist mir auch schon aufgefallen.
Das halte ich nicht wirklich für einen Use-Case der existent ist. Trotzdem will ich anbieten, dass man den Ident selbst festlegen kann. Das ist insbesondere praktisch, wenn in der ModBus Tabelle Identartige Dinge verfügbar sind, die man vorgeben könnten. Und es macht es einfacher dies bei den virtuellen Adressen nutzbar zu machen.
Könnte ich abfangen - bin mir nicht sicher, ob sich der Aufwand lohnt. Mit den „eigenen“ Idents von oben kann man aber sehr schön Differenzieren auch bei gleichem Namen
Auch dies wäre mit einem selbst vergebbarem Ident gelöst. Wobei der Name ja nur der initiale Name ist. Du kannst den Namen in der Variable ja immer umbenennen.
Jein, es gibt den Wechselrichter, da brauch ich den ByteSwap und es gibt den LG Resu 10h Speicher der per Modbus am Wechselrichter hängt. Bei den 32bit Werten vom Speicher brauche ich keinen ByteSwap. Keine Ahnung welcher Fuchs sich das ausgedacht hat.
Der Fall schlägt hier zu leicht zu. Wie gesagt, mein Vorschlag wäre: die Variable nicht löschen, sondern nur den Ident leeren. Dann hat man eine Chance, noch Referenzen zu suchen und alles zu reparieren.
Das ist leider eine sehr große, generelle Änderung auf einer sehr tiefen Ebene. Ich bin mir unsicher ob wir das tatsächlich machen wollen - evtl. macht es Sinn, dass du dort im PHP SDK Forum mal ein Thema eröffnest, sodass wir und die Modulentwickler uns darüber austauschen. Denn am Ende würde es alle betreffen - und insbesondere das nicht aufräumen würde überall „Müll“-Variablen hinterlassen - was uns wieder ausgelegt werden könnte, dass wir Leute an ihr Variablen Limit bringen wollen. Wie gesagt: Bitte woanders dazu gerne eine Diskussion eröffnen, da es genereller und ich sehr skeptisch bin.
Fände ich auch gut. Beim Kostal Wechselrichter gibt es auch einige Werte, welche von der Allgemeinen Einstellung im WR abweichen und entsprechend andersherum ausgelesen werden müssen. Das ist zwar wohl ein Bug in der Firmware des WR, könnte so aber elegant umgangen werden.
Ev. gäbe es die folgenden Optionen für den Byte Swap:
Default - übernimmt was im Gateway steht
Little Endian
Big Endian
Damit könnte man den GW überschreiben wenn nötig, muss es aber mit Default nicht unbedingt konfigurieren.
Die Idents sind nun frei vergebbar. Sehr gut. Schön wäre noch, wenn die Idents auch in der Liste ausgegeben werden. Dann behält man besser die Übersicht.
Auch könnte die Fehlermeldung zu einem fehlerhaften Ident eher kommen:
In der Situation wird momentan ein unvollständiges Objekt mit leerem Ident angelegt
Ich habe gerade für mich die Importdatei zum schnellen Erfassen und Bearbeiten der Adressen entdeckt. Dabei sind mir jedoch drei Tippfehler unterlaufen, die etwas schwerer zu finden waren.
Die Punkte sind sicherlich nicht so relevant, da die Exportdatei ja eigentlich nicht zum Bearbeiten gedacht ist, aber vielleicht lässt sich da ja dennoch etwas machen
Bei dem ersten Fehler konnte ich den Import erfolgreich durchführen, aber beim ApplyChanges kam es dann zur Fehlermeldung:
ich habe gerade mal auf die 7.0 Testing auf meinen Testsystem hochgerüstet.
Ich habe 3 x Wago SPS über Modbus an IPS.
Jetzt ist mir folgendes aufgefallen.
Aus den Datentypen Word wird UINT.
In meinen Skripten spreche ich z. B. meine Rollos auf der Wago über ein Aktionskript wie folgt an
<?php
if(($_IPS['SENDER'] == "WebFront") or ($_IPS['SENDER'] == "SetValue"))
{// Befehle für Rollo AUF /AB/Stop
switch($IPS_VALUE)
{
case 1:
ModBus_WriteRegisterWord(19177, 1); //Rollo_Auf
break;
case 2:
ModBus_WriteRegisterWord(19177, 2); //Rollo_STOP
break;
case 3:
ModBus_WriteRegisterWord(19177, 3); //Rollo_Ab
break;
}
}
?>
Das wirft jetzt folgenden Error
Dann lasse ich das (Word) beim schalten auf die Modbus Instanz weg.
und zwar so.
<?php
if(($_IPS['SENDER'] == "WebFront") or ($_IPS['SENDER'] == "SetValue"))
{// Befehle für Rollo AUF /AB/Stop
switch($IPS_VALUE)
{
case 1:
ModBus_WriteRegister(41811, 1); //Rollo_Auf
break;
case 2:
ModBus_WriteRegister (41811, 2); //Rollo_STOP
break;
case 3:
ModBus_WriteRegister(41811, 3); //Rollo_Ab
break;
}
}
?>
Dann läuft es.
Blöd nur, ich habe ca. 80 Skripte mit
ModBus_WriteRegister Word
``
Muss ich die jetzt alle ändern???
Braucht man den Datentypen nicht mehr explizit ansprechen, bzw. mache ich das so überhaupt richtig?
Das habe ich so gemacht, weil ich mit dem Profil das Case Statement anspreche, wüsste nicht wie das anders geht.
Das mache ich ganz oft so, nicht nur bei Rollos.