NEUHEIT! Version "V 1.6 Release Candidate 3" verfügbar. Link viewtopic.php?f=8&t=2322!

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

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Antworten

Ersteller
Robosoc
Reactions:
Beiträge: 787
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 309 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, VPN offen, Reboot OK


Ersteller
Robosoc
Reactions:
Beiträge: 787
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 309 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, VPN offen, Reboot OK


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

#3

Beitrag von S. Kolbinger »

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


Ersteller
Robosoc
Reactions:
Beiträge: 787
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 309 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, VPN offen, Reboot OK


Ersteller
Robosoc
Reactions:
Beiträge: 787
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 309 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, VPN offen, Reboot OK


Ersteller
Robosoc
Reactions:
Beiträge: 787
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 309 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, VPN offen, Reboot OK


Ersteller
Robosoc
Reactions:
Beiträge: 787
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 309 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, VPN offen, Reboot OK


Ersteller
Robosoc
Reactions:
Beiträge: 787
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 285 Mal
Danksagung erhalten: 309 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, VPN offen, Reboot OK


Robert_Mini
Reactions:
Beiträge: 2460
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 608 Mal
Danksagung erhalten: 1123 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) / Wiregate-Fan

Antworten

Zurück zu „Logikengine & Logik-Editor“