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

[Problem] [v1.6 IP1] Division durch Null bei Customlogik trotz defaultWert für Nennervariable

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

[v1.6 IP1] Division durch Null bei Customlogik trotz defaultWert für Nennervariable

#1

Beitrag von Robosoc »

Hallo @S. Kolbinger :

in folgendem Code werden beide Latch-Module korrekt ausgeführt.
Wenn ich aber auch nur eine der Zeilen dazwischen aktiviere (sind hier durch Auskommentieren deaktiviert), dann wirkt das zweite Latch-Modul nicht mehr! Das kann ich nicht nachvollziehen, daher tippe ich auf einen Bug. Schau Dir das bitte mal an. Zum testen einfach den ersten Eingang "Manuell" toggeln, dann sollten durch die Latch's zwei Ausgänge mit-toggeln:

Code: Alles auswählen

{
    "Level": [
        ["$Manuell", "bool", false],
		["$Sonne", "bool", false],
		["$t_Kollektor", "float", 56.0],
		["$t_VL_pr", "float", 50.0],
		["$t_RL_pr", "float", 50.0],
		["$t_VL_se", "float", 50.0],
		["$t_RL_se", "float", 50.0],
        ["$Solar_Freigabe", "bool", false],
        ["$Grenze_Kollektor_aus", "float", 48],
        ["$Grenze_Kollektor_ein", "float", 53],
        ["$Pufferspeicher_oben", "float", 50.0],
		["$Pufferspeicher_unten", "float", 50.0],
		["$Temperaturkoeffizient_VLpr_Puffer_oben", "float", 1.0],
		["$Temperaturkoeffizient_VLpr_Puffer_unten", "float", 1.0],
        ["$Koeff_VLpr", "float", 1.15],
		["$VLpr_gt_oben", "bool", false],
        ["$VLpr_gt_unten", "bool", false],
        ["$Solarpumpe", "bool", false],
        ["$Pufferpumpe", "bool", false],
		["$Energie_Ertrag", "float", 0.0],
		["$Betriebsstunden_Solarpumpe", "float", 0.0],
		["$Betriebsstunden_Pufferpumpe", "float", 0.0]
	],
	"Input": [
	    ["Manuelle Steuerung","Manuelle Steuerung beider Pumpen (Zwangssteuerung)","$Manuell","c"],
		["Sonne","Wird Sonnenschein erkannt","$Sonne","u"],
		["Temp Kollektor","Temperatur des Kollektors","$t_Kollektor","u"],
		["Untere Grenze Kollektor","Ausschalttemperator Kollektor","$Grenze_Kollektor_aus","u"],
		["Obere Grenze Kollektor","Einschaltgrenze Kollektor","$Grenze_Kollektor_ein","u"],
		["VL Primär","VL der Solaranlage primär","$t_VL_pr","u"],
		["RL Primär","RL der Solaranlage primär","$t_RL_pr","u"],
		["VL Sekundär","VL der Solaranlage sekundär","$t_VL_se","u"],
		["RL Sekundär","RL der Solaranlage sekundär","$t_RL_se","u"],
		["Speicher oben","","$Pufferspeicher_oben","u"],
		["Speicher unten","","$Pufferspeicher_unten","u"],
		["Koeff VLpr","Koeffizient für Dach Temp","$Koeff_VLpr","u"]
    ],
	"Output": [
	    ["Solarfreigabe","Freigabe der Solaranlage","$Solar_Freigabe","c"],
		["Solarpumpe","","$Solarpumpe","c"],
		["Pufferpumpe","","$Pufferpumpe","c"],
		["Energie Ertrag","","$Energie_Ertrag","c"],
		["Beitriebsstunden Solarpumpe","","$Betriebsstunden_Solarpumpe","c"],
		["Beitriebsstunden Pufferpumpe","","$Betriebsstunden_Pufferpumpe","c"]
    ],
    "Module": [
        	["Comparator" , "$t_Kollektor" , "$Solar_Freigabe" , ["$Grenze_Kollektor_aus" , "$Grenze_Kollektor_ein"] ],
		["Or" , ["$Sonne" , "$Solar_Freigabe"] , "$Solarpumpe"],
		["Latch","$Manuell","$Solarpumpe","$Manuell",3],
      	 	//["Ratio" , "$t_VL_pr" , "$Temperaturkoeffizient_VLpr_Puffer_oben" , "$Pufferspeicher_oben"],
        	//["Comparator" , "$Temperaturkoeffizient_VLpr_Puffer_oben" , "$VLpr_gt_oben" , "$Koeff_VLpr"],
        	//["Ratio" , "$t_VL_pr" , "$Temperaturkoeffizient_VLpr_Puffer_unten" , "$Pufferspeicher_unten"],
        	//["Comparator" , "$Temperaturkoeffizient_VLpr_Puffer_unten" , "$VLpr_gt_unten" , "$Koeff_VLpr"],
		//["Or" , ["$VLpr_gt_oben" , "$VLpr_gt_unten"] , "$Pufferpumpe"],
		["Latch","$Manuell","$Pufferpumpe","$Manuell",3]
    ]
}
Der Code an sich ist noch eine absolute Zwischenlösung, daher beschreibe ich ihn hier nicht weiter. Mir ist nur dieses Fehlverhalten gerade aufgefallen.
Zuletzt geändert von Robosoc am Di Jul 28, 2020 10:23 pm, insgesamt 3-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#2

Beitrag von Robosoc »

okay, ich muss es präzisieren...das Problem scheinen nicht die Latch-Zeilen zu sein, sondern die Ratio-Zeilen. Denn das Fehlverhalten entsteht nur, wenn mindestens eine der Ratio-Zeilen aktiv ist...
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 558 Mal

#3

Beitrag von S. Kolbinger »

Division durch 0 ???
Gruß,
Stefan K.

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#4

Beitrag von Robosoc »

Okay, habe das Problem gefunden...es ist kein Codefehler, sondern eine Division durch Null, die aber meines Erachtens Nur aufgrund eines Fehlers entsteht.

Der Eingang ‚Pufferspeicher-oben‘ soll = 50.0 sein, wenn der Wert nicht definiert ist (siehe Levels). Er wird momentan bei mir nicht beschrieben und der Dokmodus zeigt von Beginn an 0 an (nicht 50). Deshalb läuft der Code scheinbar ab diesem Modul dann vermutlich in einen Error und führt die nachfolgenden Zeilen nicht weiter aus.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#5

Beitrag von Robosoc »

S. Kolbinger hat geschrieben: Di Jul 28, 2020 10:10 pm Division durch 0 ???
Ja, hab ich auch gerade gesehen...hast recht. War dann naheliegend wo ich das Ratio als Ursache ausgemacht habe. Aber ich finde es ist trotzdem ein Fehler, weil der Level-Initialwert scheinbar missachtet wird, eventuell aber erst durch das aktivieren des Doktor Modus...das konnte ich Noch nicht testen.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#6

Beitrag von Robosoc »

Passt dazu und ist auch noch offen
viewtopic.php?f=31&t=1455#p15136
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#7

Beitrag von Robosoc »

Auch durch meine heutigen Tests würde ich am ehesten darauf schließen, dass das Problem in meinem Fall erst auftritt, wenn ich den Doktormodus starte und dieser dann mit 0 statt 50 arbeitet.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#8

Beitrag von Robosoc »

@StefanW und @S. Kolbinger :

Ich habe hier einiges an Zeit investiert und würde mich freuen, wenn das nicht verloren geht. Wollt oder könnt Ihr dem Thema eine WD-Nummer verpassen?

Ich fasse noch einmal zusammen, was ich zumindest vermute:
Der Defaultwert eines Float-Inputs (und ggf. auch eines Integer-Inputs) wird im Doktormodus, wenn es seit dem Speichern der Logik noch keinen empfangenen Wert auf dem Eingang gibt, immer mit 0 beschrieben, egal welchen Wert man man im Code der Customlogik dieser Variablen in der Leveldeklaration gegeben hat.

Das ist meiner Ansicht nach ein Fehler und führt bei mir dazu, dass ein Ratio-Baustein eine Division durch 0 gemacht hat, was ich so nicht erwartet habe.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

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

#9

Beitrag von Robert_Mini »

Musst du für diesen Fall nicht den Startwert an der Oberfläche der Logik setzen?

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

Zurück zu „Logikengine & Logik-Editor“