UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[TIPP] MODBUS PROFIL: SunSpec Modbus Implementierung für PV-Wechselrichter (z.B. Solaredge,...)

Dies ist das Unterforum ausschließlich für FERTIGE MODBUS PROFILE
Forumsregeln
HIER NUR FERTIGE MODBUS PROFILE.
Wünsche und Fragen zum Modbus oder für neue Profile bitte im Modbus Unterforum

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#81

Beitrag von tger977 »

tger977 hat geschrieben: Mi Jan 18, 2023 2:11 pm Meine Prognose: Du wirst weiter Peaks bekommen, aber seltener. Ich habe es aufgegeben und mich damit abgefunden nach zig Stunden rumprobieren... :crying-yellow:
Aber wenn du eine Lösung findest sag bitte hier bescheid :handgestures-salute:
Dann antworte ich mir mal selbst: ich habe es nun endlich aussreisserfrei hinbekommen! Allerdings ohne den TW. Ich habe nun in Nodered mir eine Modbusauswertung gebaut und schiebe die Daten per MQTT von dort an TW und auch die OpenWB. In der Funktion in nodered prüfe ich nun ob der SF davor und nach dem Auslesen identisch ist. Falls nicht wird der Wert verworfen. Ich habe im TW leider keine Möglichkeit gefunden wie ich einen Vorgängerwert speichern kann...

Und was auch mächtig geholfen hat: Ich habe die interne Modbus RS485 Kabelverbindung zwischen den beiden Solaredge WR abgeklemmt und jeden separat ans LAN gehängt und jetzt lese ich jeden einzeln mit eigener Modbus TCP IP aus.
Zuletzt geändert von tger977 am So Feb 19, 2023 9:32 pm, insgesamt 1-mal geändert.
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

kmk85
Reactions:
Beiträge: 24
Registriert: Mo Feb 12, 2024 2:55 pm
Wohnort: Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 4 Mal

#82

Beitrag von kmk85 »

tger977 hat geschrieben: So Feb 19, 2023 9:31 pm habe nun in Nodered mir eine Modbusauswertung gebaut
Hallo tger, könntest du mir diesen Flow zur Verfügung stellen. Habe bisher noch 0 Berührungspunkte mit NR.
Gerne als PM oder hier, wie auch immer. Besten Dank.
Grüße, Kai
————————
TWS 3500XL | ID 1288 | VPN aktiv | Reboot nach Absprache

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#83

Beitrag von tger977 »

bitteschön, da ist aber noch Anpassungsaufwand nötig:
- ggf. Module in palette erst noch zu installieren
- IP Adresse(n) anpassen für Modbus TCP und auch MQTT broker
- Ich habe eine Summation drin die auch noch den Wert vom Norddach berücksichtigt und dann erst den Gesamt PV Wert an die OpenWB per MQTT schickt
- Anpassung der Totbänder auf die jeweilige Wechselrichterleistung
- ggf. noch mehr...

Ich hab damit keinerlei Peaks mehr gesehen seit Monaten, nur schade daß man sowas nicht out of the box mit dem TW hinbekommt und wieder einen externen Workaround benötigt (ich habe es wirklich intensiv versucht, bin aber an dem "merken" des Vorgängerwertes letztlich gescheitert)

Code: Alles auswählen

[
    {
        "id": "e725d6247a1bcc15",
        "type": "tab",
        "label": "PV Süd",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "3626c1bf.cfc89e",
        "type": "modbus-read",
        "z": "e725d6247a1bcc15",
        "name": "SolarEdge_Süd",
        "topic": "",
        "showStatusActivities": false,
        "logIOActivities": false,
        "showErrors": false,
        "showWarnings": true,
        "unitid": "1",
        "dataType": "HoldingRegister",
        "adr": "40069",
        "quantity": "40",
        "rate": "2",
        "rateUnit": "s",
        "delayOnStart": false,
        "startDelayTime": "",
        "server": "c92ba865.93cb78",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "emptyMsgOnFail": false,
        "x": 127,
        "y": 236,
        "wires": [
            [
                "5c76ec567196f54b"
            ],
            [
                "7d0ea34e8c33bfdd",
                "9ed7969e36e22283",
                "4ea58b8ea0681158",
                "476aa6d3c39814e9"
            ]
        ]
    },
    {
        "id": "b24cd458.b49cc",
        "type": "comment",
        "z": "e725d6247a1bcc15",
        "name": "Fetch Solaredge TCP modbus data",
        "info": "zsdfzsdfg",
        "x": 162.5,
        "y": 175,
        "wires": []
    },
    {
        "id": "7d0ea34e8c33bfdd",
        "type": "debug",
        "z": "e725d6247a1bcc15",
        "name": "debug 87",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 340,
        "y": 340,
        "wires": []
    },
    {
        "id": "5c76ec567196f54b",
        "type": "debug",
        "z": "e725d6247a1bcc15",
        "name": "debug 88",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 360,
        "y": 100,
        "wires": []
    },
    {
        "id": "9ed7969e36e22283",
        "type": "function",
        "z": "e725d6247a1bcc15",
        "name": "Strom A",
        "func": "// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\nvar SF_A_old=flow.get('SF_A_old') || 0;\nvar SF_A_new=scalefactor(40076);\n//node.warn(SF_A_old);\n//node.warn(SF_A_new);\n\n// Check Scalefactor\n\nif (SF_A_old == SF_A_new)\n{\nmsg.payload = round(uint16(40072) * SF_A_new, 2);\nSF_A_old=SF_A_new;\n//node.warn(\"In IF Schleife vor Senden\");\nreturn msg;\n}\n//node.warn(\"IF Ende\");\nflow.set('SF_A_old', SF_A_new);\nreturn null;\n\nfunction word(address) {\n    // Find the correct offset in bytes\n    // 40070 is the starting address we fetch from SolarEdge inverter\n    return (address-40070) * 2;\n}\n\nfunction scalefactor(address) {\n    return Math.pow(10, buf.readInt16BE(word(address)));\n}\n\nfunction int16(address) {\n    return buf.readInt16BE(word(address))\n}\n\nfunction uint16(address) {\n    return buf.readUInt16BE(word(address));\n}\n\nfunction int32(address) {\n    return buf.readInt32BE(word(address))\n}\n\nfunction uint32(address) {\n    return buf.readUInt32BE(word(address))\n}\n\nfunction round(value, decimals) {\n return Number(Math.round(value+'e'+decimals)+'e-'+decimals);\n} ",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 140,
        "y": 420,
        "wires": [
            [
                "27cbd029db86995f",
                "0249d75abf4bf03e"
            ]
        ]
    },
    {
        "id": "27cbd029db86995f",
        "type": "debug",
        "z": "e725d6247a1bcc15",
        "name": "debug 89",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 460,
        "y": 420,
        "wires": []
    },
    {
        "id": "4ea58b8ea0681158",
        "type": "function",
        "z": "e725d6247a1bcc15",
        "name": "Energiezähler Wh",
        "func": "// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\n// Create influxdb JSON\nmsg.payload = round(uint32(40094) * scalefactor(40096), 2);\nmsg.topic=\"PV_Sued_Wh\";\nreturn msg;\n\nfunction word(address) {\n    // Find the correct offset in bytes\n    // 40070 is the starting address we fetch from SolarEdge inverter\n    return (address-40070) * 2;\n}\n\nfunction scalefactor(address) {\n    return Math.pow(10, buf.readInt16BE(word(address)));\n}\n\nfunction int16(address) {\n    return buf.readInt16BE(word(address))\n}\n\nfunction uint16(address) {\n    return buf.readUInt16BE(word(address));\n}\n\nfunction int32(address) {\n    return buf.readInt32BE(word(address))\n}\n\nfunction uint32(address) {\n    return buf.readUInt32BE(word(address))\n}\n\nfunction round(value, decimals) {\n return Number(Math.round(value+'e'+decimals)+'e-'+decimals);\n} ",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 170,
        "y": 480,
        "wires": [
            [
                "1b6ca75a61cc73ec",
                "c47976913b4f4b57"
            ]
        ]
    },
    {
        "id": "1b6ca75a61cc73ec",
        "type": "debug",
        "z": "e725d6247a1bcc15",
        "name": "debug 90",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 460,
        "y": 480,
        "wires": []
    },
    {
        "id": "476aa6d3c39814e9",
        "type": "function",
        "z": "e725d6247a1bcc15",
        "name": "Leistung W",
        "func": "// Create new Buffer based on array bytes\nconst buf = Buffer.from(msg.payload.buffer);\n\nvar SF_P_old=flow.get('SF_P_old') || 0;\nvar SF_P_new=scalefactor(40085);\n//node.warn(SF_P_old);\n//node.warn(SF_P_new);\n// Check Scalefactor\n\nif (SF_P_old == SF_P_new)\n{\nmsg.payload = round(uint16(40084) * SF_P_new, 0);\nSF_P_old=SF_P_new;\n//node.warn(\"In IF Schleife vor Senden\");\nreturn msg;\n}\n//node.warn(\"IF Ende\");\nflow.set('SF_P_old', SF_P_new);\nreturn null;\n\nfunction word(address) {\n    // Find the correct offset in bytes\n    // 40070 is the starting address we fetch from SolarEdge inverter\n    return (address-40070) * 2;\n}\n\nfunction scalefactor(address) {\n    return Math.pow(10, buf.readInt16BE(word(address)));\n}\n\nfunction int16(address) {\n    return buf.readInt16BE(word(address))\n}\n\nfunction uint16(address) {\n    return buf.readUInt16BE(word(address));\n}\n\nfunction int32(address) {\n    return buf.readInt32BE(word(address))\n}\n\nfunction uint32(address) {\n    return buf.readUInt32BE(word(address))\n}\n\nfunction round(value, decimals) {\n return Number(Math.round(value+'e'+decimals)+'e-'+decimals);\n} ",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 150,
        "y": 540,
        "wires": [
            [
                "a603d084eb216212"
            ]
        ]
    },
    {
        "id": "4ac12f143fab14b2",
        "type": "debug",
        "z": "e725d6247a1bcc15",
        "name": "debug 91",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 460,
        "y": 540,
        "wires": []
    },
    {
        "id": "690c72245095771b",
        "type": "mqtt out",
        "z": "e725d6247a1bcc15",
        "name": "PV1 aktuelle Leistung (Süddach)",
        "topic": "openWB/set/pv/3/get/power",
        "qos": "0",
        "retain": "true",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "2fd754d1c83cafa5",
        "x": 1060,
        "y": 660,
        "wires": []
    },
    {
        "id": "336061d273286948",
        "type": "mqtt out",
        "z": "e725d6247a1bcc15",
        "name": "PV1 erzeugte Energie in Wh (Süddach)",
        "topic": "openWB/set/pv/3/get/exported",
        "qos": "0",
        "retain": "true",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "2fd754d1c83cafa5",
        "x": 1080,
        "y": 420,
        "wires": []
    },
    {
        "id": "0249d75abf4bf03e",
        "type": "link out",
        "z": "e725d6247a1bcc15",
        "name": "PV Sued L1 Strom",
        "mode": "link",
        "links": [
            "255761233b0f4fb3"
        ],
        "x": 585,
        "y": 420,
        "wires": []
    },
    {
        "id": "a603d084eb216212",
        "type": "range",
        "z": "e725d6247a1bcc15",
        "minin": "0",
        "maxin": "4600",
        "minout": "0",
        "maxout": "4600",
        "action": "clamp",
        "round": false,
        "property": "payload",
        "name": "",
        "x": 300,
        "y": 540,
        "wires": [
            [
                "4ac12f143fab14b2",
                "54d4a3fde0e214b2"
            ]
        ]
    },
    {
        "id": "85c48266a5b49b9f",
        "type": "link out",
        "z": "e725d6247a1bcc15",
        "name": "PV Süd Energie Wh",
        "mode": "link",
        "links": [
            "ba4f71fd7dd245b9"
        ],
        "x": 985,
        "y": 480,
        "wires": []
    },
    {
        "id": "2564c2c055c75a67",
        "type": "link out",
        "z": "e725d6247a1bcc15",
        "name": "PV Süd Leistung W",
        "mode": "link",
        "links": [
            "04b28f21464194f4",
            "c27c90a9f806a501"
        ],
        "x": 985,
        "y": 540,
        "wires": []
    },
    {
        "id": "c47976913b4f4b57",
        "type": "rbe",
        "z": "e725d6247a1bcc15",
        "name": "PV_Sued_Wh",
        "func": "deadbandEq",
        "gap": "2",
        "start": "",
        "inout": "out",
        "septopics": true,
        "property": "payload",
        "topi": "topic",
        "x": 660,
        "y": 480,
        "wires": [
            [
                "85c48266a5b49b9f",
                "03a7f5db70afea23"
            ]
        ]
    },
    {
        "id": "54d4a3fde0e214b2",
        "type": "rbe",
        "z": "e725d6247a1bcc15",
        "name": "",
        "func": "deadbandEq",
        "gap": "10",
        "start": "",
        "inout": "out",
        "septopics": true,
        "property": "payload",
        "topi": "topic",
        "x": 640,
        "y": 540,
        "wires": [
            [
                "41b05d9089fb724e"
            ]
        ]
    },
    {
        "id": "41b05d9089fb724e",
        "type": "function",
        "z": "e725d6247a1bcc15",
        "name": "function 61",
        "func": "if (msg.payload <10)\n{\n    msg.payload = 0;\n}\nglobal.set('PV_Sued_Leistung_W',msg.payload);\nmsg.topic= \"PV_Sued_Leistung_W\";\n\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 790,
        "y": 540,
        "wires": [
            [
                "ae804929bbba7f7f",
                "2564c2c055c75a67"
            ]
        ]
    },
    {
        "id": "85a595762a8a8e2a",
        "type": "link in",
        "z": "e725d6247a1bcc15",
        "name": "link in 12",
        "links": [
            "0224b7534989c68b"
        ],
        "x": 655,
        "y": 660,
        "wires": [
            [
                "ae804929bbba7f7f"
            ]
        ]
    },
    {
        "id": "ae804929bbba7f7f",
        "type": "sum",
        "z": "e725d6247a1bcc15",
        "name": "PV_gesamt_W",
        "topic": "PV_gesamt_Leistung_W",
        "x": 780,
        "y": 620,
        "wires": [
            [
                "f5b4999545fd1d66"
            ]
        ],
        "inputLabels": [
            "PV_Nord_Leistung_W"
        ],
        "outputLabels": [
            "PV_Sued_Leistung_W"
        ]
    },
    {
        "id": "03a7f5db70afea23",
        "type": "sum",
        "z": "e725d6247a1bcc15",
        "name": "PV gesamt",
        "topic": "PVgesamt",
        "x": 830,
        "y": 420,
        "wires": [
            [
                "f748ad63e0bc459a",
                "336061d273286948"
            ]
        ],
        "inputLabels": [
            "PV_Nord_Wh"
        ],
        "outputLabels": [
            "PV_Sued_Wh"
        ]
    },
    {
        "id": "9275c754d8d485a1",
        "type": "link in",
        "z": "e725d6247a1bcc15",
        "name": "link in 13",
        "links": [
            "e7cbf109abacf90d"
        ],
        "x": 685,
        "y": 360,
        "wires": [
            [
                "03a7f5db70afea23"
            ]
        ]
    },
    {
        "id": "f748ad63e0bc459a",
        "type": "debug",
        "z": "e725d6247a1bcc15",
        "name": "debug 104",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 990,
        "y": 380,
        "wires": []
    },
    {
        "id": "a3551705ed389419",
        "type": "debug",
        "z": "e725d6247a1bcc15",
        "name": "debug 105",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 990,
        "y": 720,
        "wires": []
    },
    {
        "id": "f5b4999545fd1d66",
        "type": "function",
        "z": "e725d6247a1bcc15",
        "name": "function 73",
        "func": "// für OpenWB muss PV Produktion negativ gesendet werden!\n\nmsg.payload = msg.payload *(-1);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 790,
        "y": 720,
        "wires": [
            [
                "a3551705ed389419",
                "690c72245095771b"
            ]
        ]
    },
    {
        "id": "c92ba865.93cb78",
        "type": "modbus-client",
        "name": "SolarEdge_Master",
        "clienttype": "tcp",
        "bufferCommands": true,
        "stateLogEnabled": false,
        "queueLogEnabled": false,
        "failureLogEnabled": false,
        "tcpHost": "10.10.10.43",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "",
        "unit_id": 1,
        "commandDelay": 200,
        "clientTimeout": 1000,
        "reconnectOnTimeout": true,
        "reconnectTimeout": 2000,
        "parallelUnitIdsAllowed": true
    },
    {
        "id": "2fd754d1c83cafa5",
        "type": "mqtt-broker",
        "name": "OpenWB_Master",
        "broker": "10.10.10.48",
        "port": "1883",
        "clientid": "VenusOS",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "3",
        "keepalive": "60",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#84

Beitrag von Robert_Mini »

tger977 hat geschrieben: Fr Feb 16, 2024 4:59 pm … bin aber an dem "merken" des Vorgängerwertes letztlich gescheitert)
Vorgängerwert kann man zb mit Latch zwischenspeichern.
Gibt es hier im Forum eine Diskussion zu diesem Thema?

Wenn ich richtig verstehe ist das die Thematik mit dem Scalefaktor, der nicht immer zum 2. Wert passt.

Wenn also die Aufgabe ist, den berechneten Wert nur zu erzeugen, wenn SF alt=neu, sollte das recht leicht gehen.

Bei Interesse arbeiten wir das gemeinsam ab.

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

kmk85
Reactions:
Beiträge: 24
Registriert: Mo Feb 12, 2024 2:55 pm
Wohnort: Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 4 Mal

#85

Beitrag von kmk85 »

Also ich bin maximal interessiert.
Grüße, Kai
————————
TWS 3500XL | ID 1288 | VPN aktiv | Reboot nach Absprache

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#86

Beitrag von tger977 »

Robert_Mini hat geschrieben: Sa Feb 17, 2024 1:53 pm Gibt es hier im Forum eine Diskussion zu diesem Thema?

Wenn ich richtig verstehe ist das die Thematik mit dem Scalefaktor, der nicht immer zum 2. Wert passt.
Ja, gibt es hier in diesem thread. Da es nun super stabil mit nodered läuft möchte ich da grad kein weiteren Aufwand mehr reinstecken, never change a running System...

Aber vielen Dank für Dein Angebot!
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

kmk85
Reactions:
Beiträge: 24
Registriert: Mo Feb 12, 2024 2:55 pm
Wohnort: Wesel
Hat sich bedankt: 7 Mal
Danksagung erhalten: 4 Mal

#87

Beitrag von kmk85 »

Robert_Mini hat geschrieben: Sa Feb 17, 2024 1:53 pm also die Aufgabe ist, den berechneten Wert nur zu erzeugen, wenn SF alt=neu, sollte das recht leicht gehen.

Bei Interesse arbeiten wir das gemeinsam ab.
Es wäre wirklich toll, wenn du mir sagen könntest wie das geht.

Bisher habe ich die Werte aus Modbus, sowie die hier im
Thread besagte Berechnung.
Ich Frage die SF Werte mit höherer Prio in 1s Tackt ab, die Power Werte alle 3s.
Habe auch diverse Varianten der U/C/A Konstellationen am Eingang durch. Meine letzte, beste Variante, zeigt dennoch Peaks.

Bild

Echt schade…

Von der NR Variante bin ich gerade abgeschreckt, da muss ich mich erst mal massiv mit beschäftigen. :|
Grüße, Kai
————————
TWS 3500XL | ID 1288 | VPN aktiv | Reboot nach Absprache

Ersteller
tger977
Reactions:
Beiträge: 740
Registriert: So Aug 12, 2018 9:25 am
Hat sich bedankt: 205 Mal
Danksagung erhalten: 274 Mal

#88

Beitrag von tger977 »

Wenn Du mit der NR Variante Hilfe brauchst, gerne... Können auch ne kurze live Session machen, das sollte wenn NR bei Dir läuft in ein paar Minuten erledigt sein. Kontakt gerne per PN.

Mit dem TW habe ich zu dem Thema auch schon Stundenlanges probieren durch... ohne customlogik geht da leider wohl nix.
Zuletzt geändert von tger977 am So Feb 18, 2024 9:10 am, insgesamt 1-mal geändert.
Gruß
Andi

TW2500 #440 (ex Timberwolf 2400 #111) mit PBM #124, Support VPN nur auf Anfrage, Reboot bitte nur nach Absprache

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#89

Beitrag von Robert_Mini »

kmk85 hat geschrieben: So Feb 18, 2024 8:39 am
Robert_Mini hat geschrieben: Sa Feb 17, 2024 1:53 pm also die Aufgabe ist, den berechneten Wert nur zu erzeugen, wenn SF alt=neu, sollte das recht leicht gehen.

Bei Interesse arbeiten wir das gemeinsam ab.
Es wäre wirklich toll, wenn du mir sagen könntest wie das geht.
Melde mich dazu am Abend. Das geht mit und ohne Custom Logik, am einfachsten aber mit Custom…

Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#90

Beitrag von Robert_Mini »

Hallo zusammen!

Sollte so klappen. Gerade über VPN am iPhone auf meinem Wolf erstellt :dance: :dance:

Das SendExplicit macht im Prinzip ein „send always“ außer wenn sich SF geändert hat. Ein „on change“ wäre da auch ok, aber bei Daten ist das aus meiner Sicht nicht ganz richtig.

Bitte testen.

Lg
Robert

Code: Alles auswählen

/**===========================================================

============================================================*/
{
    "Level":[
        ["$I_SF","float",0.0],
	["$I_Factor","float",1.0],
	["$Output","float",0.0],
	 	
	["$OutputTemp","float",0.0],
	["$Result","float",0.0],
	["$SF_Last","float",0.0],
	["$ValueUnchanged","bool",false],
		
	// Konstanten
	["$KonstTrue","bool",true],
	["$Formula","string","X1*(10^X2)"] 
    ],
    "Module":[
        ["CalcFormula",["$I_Factor","$I_SF"], "$Result", "$Formula"],
        // SF auf Gleichheit prüfen
        ["Limiter","$I_SF","$OutputTemp","$ValueUnchanged",["$SF_Last", "$SF_Last"]],
        // Ergebnis nur übernehmen, wenn SF unverändert
        ["Latch","$Result","$Output","$ValueUnchanged",0],
	    // Am Ende des Durchlaufs SF merken
        ["Latch","$I_SF","$SF_Last","$KonstTrue",0],
        // Wert senden, wenn SF unverändert
        ["SendExplicit","$ValueUnchanged","$Output",0]

    ],
    "Input":[
        ["SF","","$I_SF","c"],
        ["Factor","","$I_Factor","u"]
    ],
    "Output":[
        ["Ergebnis","","$Output","x"]
    ]
}
Zuletzt geändert von Robert_Mini am So Feb 18, 2024 6:47 pm, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Antworten

Zurück zu „MODBUS PROFILE“