Code: Alles auswählen
{
"Module": [
// Version: 1.4.9, Datum: 2025-10-01
// --- START: Pkt 07 - INHIBIT (SPERRE) ---
["Break", ["$in_inhibit"]],
// --- START: Pkt 08 - WATCHDOG ---
// Prüft, ob der Eingang `$in_Leistungsmessung` diesen Zyklus ausgelöst hat
["Triggered", "$in_Leistungsmessung", "$_watchdogResetSignal"],
// Startet/resettet einen Timer bei jedem Update. $_watchdog_OK ist FALSE, wenn der Timer abläuft.
["Monoflop", "$_watchdogResetSignal", "$ConstFalse", "$_watchdogOK", "$in_watchdogTime", 3],
// --- START: Pkt 02.5 - Fehlerbedingung(en) auswerten ---
["Or", ["-$_watchdogOK"], "$_goToFehler"],
// --- START: Pkt 05.1 - Leistungsbilanz berechnen ---
["Polynomial", "$in_IstLeistungLaden", "$_tempLeistungsbilanz", ["$in_Leistungsmessung", "$Const1"]],
["Polynomial", "$in_IstLeistungEntladen", "$_Leistungsbilanz", ["$_tempLeistungsbilanz", "$ConstNeg1"]],
// --- START: Pkt 03 & 04 - Ziel-Leistungen berechnen (roh) ---
["Polynomial", "$in_minEinspeisung", "$_zielLadeleistungRoh", ["$_Leistungsbilanz", "$ConstNeg1"]],
["Polynomial", "$in_minBezug", "$_zielEntladeleistungRoh", ["-$_Leistungsbilanz", "$ConstNeg1"]],
// --- START: Pkt 05 - Asymmetrische Leistungsanpassung (Dämpfung) ---
["Polynomial", "$in_maxSchrittLadeleistung", "$_maxErlaubteLadeleistung", ["$in_IstLeistungLaden", "$Const1"]],
["Comparator", "$_zielLadeleistungRoh", "$_zielUeberschreitetRampeLaden", "$_maxErlaubteLadeleistung"],
["Multiplexer", ["$_zielLadeleistungRoh", "$_maxErlaubteLadeleistung"], "$_zielLadeleistungGedaempft", "$_zielUeberschreitetRampeLaden"],
["Polynomial", "$in_maxSchrittEntladeleistung", "$_maxErlaubteEntladeleistung", ["$in_IstLeistungEntladen", "$Const1"]],
["Comparator", "$_zielEntladeleistungRoh", "$_zielUeberschreitetRampeEntladen", "$_maxErlaubteEntladeleistung"],
["Multiplexer", ["$_zielEntladeleistungRoh", "$_maxErlaubteEntladeleistung"], "$_zielEntladeleistungGedaempft", "$_zielUeberschreitetRampeEntladen"],
// --- START: Pkt 03.2, 04.2, 05.2 - Finale Leistungsbegrenzung ---
["Limiter", "$_zielLadeleistungGedaempft", "$_sollLeistungLadenFinal", 0, ["$in_minLadeleistung", "$in_maxLadeleistung"]],
["Limiter", "$_zielEntladeleistungGedaempft", "$_sollLeistungEntladenFinal", 0, ["$in_minEntladeleistung", "$in_maxEntladeleistung"]],
// --- START: Pkt 02 - Bedingungen für Zustandsübergänge berechnen ---
["Polynomial", "$in_minEinspeisung", "$_schwelleLadenStart", ["$in_minLadeleistung", "$Const1"]],
["Comparator", "$in_Leistungsmessung", "$_ueberSchwelleLadenStart", "$_schwelleLadenStart"],
["Comparator", "$in_pvErzeugung", "$_pvErzeugt", "$Const0"],
["Comparator", "$in_socLadeStart", "$_socUnterLadeStart", "$in_soc"],
["And", ["$_ueberSchwelleLadenStart", "$_pvErzeugt", "$_socUnterLadeStart"], "$_goToLaden"],
["Comparator", "$_schwelleLadenStart", "$_LeistungsbilanzUnterSchwelleLaden", "$_Leistungsbilanz"],
["Comparator", "$in_socLadeStopp", "$_socUnterLadeStopp", "$in_soc"],
["Or", ["$_LeistungsbilanzUnterSchwelleLaden", "-$_pvErzeugt", "-$_socUnterLadeStopp"], "$_goToStandbyFromLaden"],
["Polynomial", "$in_minBezug", "$_schwelleEntladenStartRoh", ["$in_minEntladeleistung", "$Const1"]],
["Polynomial", "$_schwelleEntladenStartRoh", "$_schwelleEntladenStart", ["$Const0", "$ConstNeg1"]],
["Comparator", "$_schwelleEntladenStart", "$_unterSchwelleEntladenStart", "$in_Leistungsmessung"],
["And", ["$_unterSchwelleEntladenStart", "-$_pvErzeugt"], "$_goToEntladen"],
["Comparator", "$_Leistungsbilanz", "$_LeistungsbilanzUeberSchwelleEntladen", "$_schwelleEntladenStart"],
["Comparator", "$in_soc", "$_socUeberEntladeStopp", "$in_socEntladeStopp"],
["Or", ["$_LeistungsbilanzUeberSchwelleEntladen", "$_pvErzeugt", "-$_socUeberEntladeStopp"], "$_goToStandbyFromEntladen"],
// --- START: Pkt 01 - Zustandsmaschine ---
// 0: Standby, 1: Laden, 2: Entladen, 3: Fehler
["Statemachine", [
["$_goToFehler", 0, 3, 0],
["$_goToFehler", 1, 3, 0],
["$_goToFehler", 2, 3, 0],
["$in_fehlerQuittieren", 3, 0, 0],
["$_goToLaden", 0, 1, 0],
["$_goToStandbyFromLaden", 1, 0, 0],
["$_goToEntladen", 0, 2, 0],
["$_goToStandbyFromEntladen", 2, 0, 0]
], "$out_LogikStatus"],
// --- START: Pkt 06 - Finale Ausgänge setzen ---
["Multiplexer", ["$Const0", "$_sollLeistungLadenFinal", "$Const0", "$Const0"], "$out_SollLeistungLaden", "$out_LogikStatus"],
["Multiplexer", ["$Const0", "$Const0", "$_sollLeistungEntladenFinal", "$Const0"], "$out_SollLeistungEntladen", "$out_LogikStatus"],
["Multiplexer", ["$_letzterBetriebsmodus", "$TextCharge", "$TextDischarge", "$_letzterBetriebsmodus"], "$out_Betriebsmodus", "$out_LogikStatus"],
["Multiplexer", ["$ConstFalse", "$ConstFalse", "$ConstFalse", "$ConstTrue"], "$out_Fehler", "$out_LogikStatus"],
// --- START: Zustand für nächsten Zyklus speichern ---
["Latch", "$out_Betriebsmodus", "$_letzterBetriebsmodus", "$ConstTrue", 0]
],
"Level": [
// --- Konstanten ---
["$Const0", "float", 0.0],
["$Const1", "float", 1.0],
["$ConstNeg1", "float", -1.0],
["$ConstTrue", "bool", true],
["$ConstFalse", "bool", false],
["$TextCharge", "string", "Input mode"],
["$TextDischarge", "string", "Output mode"],
// --- Eingänge (Pkt 06) ---
["$in_Leistungsmessung", "float", 0.0],
["$in_pvErzeugung", "float", 0.0],
["$in_soc", "float", 50.0],
["$in_socLadeStart", "float", 95.0],
["$in_socLadeStopp", "float", 100.0],
["$in_socEntladeStopp", "float", 20.0],
["$in_IstLeistungLaden", "float", 0.0],
["$in_IstLeistungEntladen", "float", 0.0],
["$in_minLadeleistung", "float", 400.0],
["$in_maxLadeleistung", "float", 1200.0],
["$in_minEinspeisung", "float", 200.0],
["$in_minEntladeleistung", "float", 150.0],
["$in_maxEntladeleistung", "float", 800.0],
["$in_minBezug", "float", 50.0],
["$in_maxSchrittLadeleistung", "float", 200.0],
["$in_maxSchrittEntladeleistung", "float", 50.0],
["$in_watchdogTime", "float", 300.0],
["$in_inhibit", "bool", false],
["$in_fehlerQuittieren", "bool", false],
// --- Ausgänge (Pkt 06) ---
["$out_Betriebsmodus", "string", "Input mode"],
["$out_SollLeistungLaden", "float", 0.0],
["$out_SollLeistungEntladen", "float", 0.0],
["$out_LogikStatus", "integer", 0],
["$out_Fehler", "bool", false],
// --- Interne Variablen ---
["$_Leistungsbilanz", "float", 0.0],
["$_tempLeistungsbilanz", "float", 0.0],
["$_letzterBetriebsmodus", "string", "Input mode"],
["$_zielLadeleistungRoh", "float", 0.0],
["$_zielEntladeleistungRoh", "float", 0.0],
["$_maxErlaubteLadeleistung", "float", 0.0],
["$_zielUeberschreitetRampeLaden", "bool", false],
["$_maxErlaubteEntladeleistung", "float", 0.0],
["$_zielUeberschreitetRampeEntladen", "bool", false],
["$_zielLadeleistungGedaempft", "float", 0.0],
["$_zielEntladeleistungGedaempft", "float", 0.0],
["$_sollLeistungLadenFinal", "float", 0.0],
["$_sollLeistungEntladenFinal", "float", 0.0],
["$_schwelleLadenStart", "float", 0.0],
["$_ueberSchwelleLadenStart", "bool", false],
["$_LeistungsbilanzUnterSchwelleLaden", "bool", false],
["$_pvErzeugt", "bool", false],
["$_socUnterLadeStart", "bool", false],
["$_socUnterLadeStopp", "bool", false],
["$_socUeberEntladeStopp", "bool", false],
["$_goToFehler", "bool", false],
["$_goToLaden", "bool", false],
["$_goToStandbyFromLaden", "bool", false],
["$_schwelleEntladenStartRoh", "float", 0.0],
["$_schwelleEntladenStart", "float", 0.0],
["$_unterSchwelleEntladenStart", "bool", false],
["$_LeistungsbilanzUeberSchwelleEntladen", "bool", false],
["$_goToEntladen", "bool", false],
["$_goToStandbyFromEntladen", "bool", false],
["$_watchdogResetSignal", "bool", false],
["$_watchdogOK", "bool", true]
],
"Input": [
["Leistungsmessung (W)", "+Einspeisung / -Bezug", "$in_Leistungsmessung", "a"],
["PV Erzeugung (W)", "Aktuelle PV-Leistung", "$in_pvErzeugung", "c"],
["SOC (%)", "Ladezustand der Batterie", "$in_soc", "c"],
["Lade-Start SOC (%)", "Ladevorgang startet nur unterhalb dieses Ladezustands", "$in_socLadeStart", "c"],
["Lade-Stopp SOC (%)", "Ladevorgang stoppt bei Erreichen dieses Werts", "$in_socLadeStopp", "c"],
["Entlade-Stopp SOC (%)", "Entladevorgang stoppt bei Erreichen dieses Werts", "$in_socEntladeStopp", "c"],
["Ist-Leistung Laden (W)", "Tatsächliche Ladeleistung", "$in_IstLeistungLaden", "u"],
["Ist-Leistung Entladen (W)", "Tatsächliche Entladeleistung", "$in_IstLeistungEntladen", "u"],
["Min. Ladeleistung (W)", "Untere Grenze für Ladeleistung", "$in_minLadeleistung", "c"],
["Max. Ladeleistung (W)", "Obere Grenze für Ladeleistung", "$in_maxLadeleistung", "c"],
["Min. Einspeisung (W)", "Mindestüberschuss für Netz", "$in_minEinspeisung", "c"],
["Min. Entladeleistung (W)", "Untere Grenze für Entladeleistung", "$in_minEntladeleistung", "c"],
["Max. Entladeleistung (W)", "Obere Grenze für Entladeleistung", "$in_maxEntladeleistung", "c"],
["Min. Bezug (W)", "Mindestbezug vom Netz", "$in_minBezug", "c"],
["Max. Schritt Ladeleistung (W)", "Maximale Erhöhung pro Zyklus", "$in_maxSchrittLadeleistung", "c"],
["Max. Schritt Entladeleistung (W)", "Maximale Erhöhung pro Zyklus", "$in_maxSchrittEntladeleistung", "c"],
["Watchdog Zeit (s)", "Zeit in Sekunden ohne Messwert-Update, bevor die Logik stoppt", "$in_watchdogTime", "c"],
["Inhibit", "Logik-Ausführung anhalten (TRUE = angehalten)", "$in_inhibit", "c"],
["Fehler quittieren", "Setzt den Fehlerzustand zurück (TRUE)", "$in_fehlerQuittieren", "c"]
],
"Output": [
["Betriebsmodus", "Input mode oder Output mode", "$out_Betriebsmodus", "c"],
["Soll-Leistung Laden (W)", "Angeforderte Ladeleistung", "$out_SollLeistungLaden", "c"],
["Soll-Leistung Entladen (W)", "Angeforderte Entladeleistung", "$out_SollLeistungEntladen", "c"],
["Logik Status", "0:STANDBY, 1:LADEN, 2:ENTLADEN, 3:FEHLER", "$out_LogikStatus", "c"],
["Fehler", "Es ist ein Fehler aufgetreten; Batterie im Standby.", "$out_Fehler", "c"]
// LIZENZ (Prompt & Custom-Logik): Der Schöpfer überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.
]
}