NEWS
modbus und scale factors
-
Mittlerweile bin ich fast schon am Verzweifeln.
Beim Auslesen eines Modbus-Registers soll der Wert mit 0,01 multipliziert werden. Hierzu habe ich in das Feld formula in der Registerdefinition folgendes eingetragen ..
x * Math.pow(10, sf['40123'])
.., wobei 40123 das Register ist, welches den Skalierungsfaktor enthält.
Leider erhalte ich, sobald ich dies in das Feld formula eingebe, keine Ergebnisse mehr.
Was mache ich falsch? Was habe ich nicht verstanden?
-
@legro sagte in modbus und scale factors:
Beim Auslesen eines Modbus-Registers soll der Wert mit 0,01 multipliziert werden.
dann trage genau das unter Faktor ein!
@legro sagte in modbus und scale factors:
Was mache ich falsch?
zeigen!
-
@homoran sagte in modbus und scale factors:
@legro sagte in modbus und scale factors:
Beim Auslesen eines Modbus-Registers soll der Wert mit 0,01 multipliziert werden.
dann trage genau das unter Faktor ein!
Ich habe doch geschrieben, dass ich nicht die Felder factor und offset, sondern das Feld formula verwenden möchte. Der Hintergrund: Die Skalierungsfaktoren können sich (ggf. bei einem Update) ändern.
Was soll ich da zeigen? Ich habe in das Feld formula oben angegebene Formel eingetragen. Anschließend erhalte ich keine Werte mehr, die ich mittels eines Triggers auf dem MODBUS-Register abzufragen versuche.
-
@legro sagte in modbus und scale factors:
Ich habe doch geschrieben, dass ich nicht die Felder factor und offset...verwenden möchte
das hab ich nicht gelesen
-
@legro sagte in modbus und scale factors:
wobei 40123 das Register ist, welches den Skalierungsfaktor enthält
Und dieses Register ist auch als "SF" markiert?
-
@codierknecht sagte in modbus und scale factors:
@legro sagte in modbus und scale factors:
Und dieses Register ist auch als "SF" markiert?Ich bin mir nicht darüber im Klaren, was du hiermit meinst.
Dies ist der Eintrag in der Modbus-Register-Liste für den Skalierungsfaktor. -
-
Vielen Dank, dein Tipp half mir einen Schritt weiterzukommen - leider jedoch nur bis zum nächsten Problem.
Zum Testen der ganze Angelegenheit, habe ich einen Trigger eingerichtet ..
eventFromGrid = on({id: `modbus.2.holdingRegisters.200.40115_TotWhImp`, change: 'gt'}, () => { //let sf = Math.pow(10,getState(`modbus.2.holdingRegisters.200.40123_TotWh_SF`).val) let aktImp = getState(`modbus.2.holdingRegisters.200.40115_TotWhImp`).val - getState(`0_userdata.0.Fronius.Modbus.fromGrid.startDayWh`).val console.log(aktImp) setState(`0_userdata.0.Fronius.Modbus.fromGrid.tmpDayWh`,aktImp,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridKWh`).val) tmpPV[Number(partsDate.tag)-1] = aktImp setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridKWh`,JSON.stringify(tmpPV),true) })
Der liefert nun, nachdem ich das Register 40123 als SF gespeichert habe, wieder Werte. Jedoch ohne den Skalierungsfaktor zu berücksichtigen. Den Fehler hierzu fand: Das Register 40123 wird auf null gesetzt und der zuvor enthaltende Faktor -2 hiermit überschrieben.
Was mache ich denn nun schon wieder falsch?
-
@legro sagte in modbus und scale factors:
Das Register wird auf null gesetzt
ist das ein Holdingregister?
Das ist eigentlich zum Beschreiben gedacht.
Nach Übernahme des zu schreibenden Wertes durch das Gerät, quittiert der das mitnull
.Solltest du ausnahmsweise Werte auslesen wollen, musst du das konfigurieren
-
Ich verstehe überhaupt nichts mehr.
Es geht hier ausschließlich um sog. Holding Registers.
Das Register 40115 enthält den Wert, der vom Versorger bezogenen Energie in Wh*100 - ist also um den Faktor 100 zu groß. Das Register 40123 enthält den Wert des sog. Skalierungsfaktors, hier: -2.
Wenn ich in der Definition der Modbus-Register für das Register 40123 die Option SF anhake, wird der darin enthaltene Wert mit null überschrieben. Die in formula übergebene Formel findet also stets null für den Skalierungsfaktor vor. Was für ein Unsinn!
-
@legro sagte in modbus und scale factors:
Ich verstehe überhaupt nichts mehr.
was genau drnn jetzt nicht?
Warum zeigst du das Register in den Einstellungen nicht?
und zwar vollständig ohne Kopfzeilen oder Spalten abzuschneiden.
Dann kann man dir wahrscheinlich auch mehr erklären, wenn man weiß dass man über das selbe sprichtHast du die Abfrage des Registers, das zum Schreiben gedacht ist, aktiviert?
-
@legro ich versuche es noch einmal:
@legro sagte in modbus und scale factors:
Es geht hier ausschließlich um sog. Holding Registers.
Diese sind eigentlich nur zum Beschreiben gedacht.
Leider werden sie von einigen Herstellern auch zum Lesen missbraucht.@legro sagte in modbus und scale factors:
Wenn ich in der Definition der Modbus-Register für das Register 40123 die Option SF anhake, wird der darin enthaltene Wert mit null überschrieben.
das macht das Gerät!
Es ist das Standardverhalten um anzuzeigen, dass es den eingegebenen Wert übernommen hat und wieder beteit ist neue Befehle zu übernehmen.@legro sagte in modbus und scale factors:
Die in formula übergebene Formel findet also stets null für den Skalierungsfaktor vor.
eigentlich nicht.
-
@legro das ganze lässt mir keine Ruhe.
Möglicherweise ist
@legro sagte in modbus und scale factors:
Es geht hier ausschließlich um sog. Holding Registers.
genau das Problem.
im Screenshot von @Codierknecht steht
Holdingregister sind aber grundsätzlich als Schreibregister anzusehen.
ist denn dieses Register laut Schnittstellenbeschreibung deines Gerätes auch beschreibbar?
-
So sieht die Definition des SF Registers aus ,,
.. und das kommt anschließend dabei heraus ..
-
Das Register 40123 gehört zu den sog. Holding Registers und enthält den vom Wechselrichter (Fronius GEN24) gelieferten Skalierungsfaktor für eine ganze Reihe von weiteren Werten.
-
@homoran sagte in modbus und scale factors:
und zwar vollständig ohne Kopfzeilen oder Spalten abzuschneiden.
Dann kann man dir wahrscheinlich auch mehr erklären,was ist das
@legro sagte in modbus und scale factors:
Das Register 40123 gehört zu den sog. Holding Registers und enthält den vom Wechselrichter (Fronius GEN24) gelieferten Skalierungsfaktor für eine ganze Reihe von weiteren Werten.
das mag ja alles stimmen,,aber dafür sind Holdingregister eigentlich nicht gedacht
deswegen die Frage danach, ob der auch beschreibbar ist
Dann wäre es das absolut normale Verhalten.Was dir natürlich nicht hilft, wenn der Hersteller da was nicht der Norm entsprechendes macht.
Ganz abgesehen davon
@legro sagte in modbus und scale factors:
Das Register 40123 enthält den Wert des sog. Skalierungsfaktors, hier: -2.
ein Faktor von -2 ??
-
Der Wert von SF ist -2, also der Exponent zur Basis 10, so habe ich es ja auch in der oben angegebenen Formel umgesetzt.
Ich bin's leid. Weiß der Teufel, was hier schiefgeht. Wenn's eben nicht mittels der Option formula geht, mach' ich's halt selbst.
eventFromGrid = on({id: `modbus.2.holdingRegisters.200.40115_TotWhImp`, change: 'gt'}, () => { let sf = Math.pow(10,getState(`modbus.2.holdingRegisters.200.40123_TotWh_SF`).val) let aktImp = getState(`modbus.2.holdingRegisters.200.40115_TotWhImp`).val * sf - getState(`0_userdata.0.Fronius.Modbus.fromGrid.startDayWh`).val setState(`0_userdata.0.Fronius.Modbus.fromGrid.tmpDayWh`,aktImp,true) let tmpPV = JSON.parse(getState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridKWh`).val) tmpPV[Number(partsDate.tag)-1] = aktImp setState(`0_userdata.0.Fronius.Monatstabellen.${partsDate.jahr}.${partsDate.monat}.fromGridKWh`,JSON.stringify(tmpPV),true) })
-
@legro sagte in modbus und scale factors:
Ich bin's leid.
warum beantwortest du die gestellten Fragen nicht?
@homoran sagte in modbus und scale factors:
Hast du die Abfrage des Registers, das zum Schreiben gedacht ist, aktiviert?
und auf die Bitte dies zu zeigen kommt wieder nur ein angescnittener Screenshot
DA müsste meiner Erinnerung nach ein Haken rein.
Dazu bräuchte ich aber den Spaltenkopf -
Diesen Haken habe ich rein- und auch rausgemacht. Sichtlich ohne Erfolg.
Ziemlich gefrustet habe ich das System nun einfach einmal für ein paar Stunden in Ruhe gelassen. Das war das entscheidende Rezept: Es funktioniert nun. In der Tat: Der Haken muss übrigens rein.
-
@legro sagte in modbus und scale factors:
Diesen Haken habe ich rein- und auch rausgemacht. Sichtlich ohne Erfolg.
ist das der Haken für "Abfrage"?
@legro sagte in modbus und scale factors:
In der Tat: Der Haken muss übrigens rein.
dann ist er es wohl!
@legro sagte in modbus und scale factors:
Es funktioniert nun
wird wohl nichts mit dem Ruhen zu tun haben.
Höchstens wird wegenIf a value is marked with this flag, then the value will be stored into a variable with the following naming convention
diese Variable bei jeder Veränderung in den Einstellungen geleert, und steht erstmal nicht zur Verfügung
aber
you can access other read modbus values
ohne Haken ist es ein write Register!
Ansonsten
If the formula cannot be evaluated during runtime, then the Adapter writes a warning message to the log.
müsste auch etwas im Log gestanden haben