KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[Gelöst] [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

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
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

[V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

#1

Beitrag von Eraser »

Hallo,

nachdem ich eine Zirkulationspumpen-Steuerung erfolgreich aus drei einzelnen Bausteinen gebastelt habe, wollte ich diese nun in eine Custom-Logik integrieren, damit ich nur einen Baustein habe.

Hier die Logik der einzelnen Bausteine, welche funktioniert:
Logik alt.png

Durch Anschauen des Codes der einzelnen Bausteine habe ich mir dann den Custom-Baustein zusammengeschrieben.
Logik neu.png
{
	"Level": [
		["$Input","bool",false],
		["$Time_Pulse","float",0.0],
		["$Time_Interlock","float",0.0],
		["$Output","bool",false],
		["$TEMP_AND_Pulse","bool",false],
		["$TEMP_OR_Pulse","bool",false],
		["$TEMP_AND_Interlock","bool",false],
		["$TEMP_RS_Out","bool",false],
		["$TEMP_RS_Stat","Integer",0],
		["$TEMP_Monoflop_Pulse","bool",false],
		["$TEMP_Monoflop_Interlock","bool",false],
		["$CONST_False","bool",false]
	],
	"Input": [
		["Input","Input signal","$Input","c"],
		["Pulse duration","Duration of the switch on impulse","$Time_Pulse","a"],
		["Interlock time","Minimum lock time before output is triggered again","$Time_Interlock","a"]
	],
	"Output": [
		["Output","Output signal","$Output","c"]
	],
	"Module": [   
		["And",["$Input","-$TEMP_RS_Out"],"$TEMP_AND_Pulse"],

		["Monoflop","-$TEMP_AND_Pulse","$TEMP_AND_Pulse","$TEMP_Monoflop_Pulse","$Time_Pulse",2],
		["Or",["$TEMP_AND_Pulse","$TEMP_Monoflop_Pulse"],"$TEMP_OR_Pulse"],

		["BinaryMultiplexer", ["$TEMP_OR_Pulse", "$TEMP_AND_Interlock"], "$TEMP_RS_Stat"],
		["Multiplexer",["$TEMP_RS_Out","-$CONST_False","$CONST_False"],"$TEMP_RS_Out","$TEMP_RS_Stat"],

		["Monoflop","$TEMP_RS_Out","-$TEMP_RS_Out","$TEMP_Monoflop_Interlock","$Time_Interlock",2],
		["And",["$TEMP_RS_Out","-$TEMP_Monoflop_Interlock"],"$TEMP_AND_Interlock"],

		["And",["$TEMP_OR_Pulse"],"$Output"]
	]
}

Erklärung der Logik:

Bei einem Eingangssignal wird der Ausgang für die Zeit "Pulse duration" eingeschalten.
Nach dieser Zeit wird der Ausgang wieder deaktiviert.
Gleichzeitig zum Start der Zeit "Pulse duration" wird auch die Zeit "Interlock time" gestartet, welche durch ein RS-Flipflop
den Eingang wegschaltet und so die erneute Aktivierung für die eingestellte Zeit unterbindet, also eine Sperre.


Wenn ich mir bei der Custom-Logik im Doktormodus die Signale ansehe, dann fällt mir auf, dass das interne Signal "TEMP_RS_Out" bei einem kommenden Eingangssignal zwar gesetzt wird, dieses aber nicht auf den invertierten Eingang des ersten AND ankommt, da das erste AND und das Signal "TEMP_AND_Pulse" auch eingeschaltet bleibt.
Irgendwie sieht es so aus, als ob die interne Abarbeitung der Logik nur einmal durchläuft und dann erst wieder, wenn ein Timer aktiv wurde.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Robert_Mini am Sa Dez 28, 2019 11:42 am, insgesamt 3-mal geändert.
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

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

#2

Beitrag von S. Kolbinger »

Hallo Wolfgang,

du hast bei deinen drei Logik-Zellen einen Kreisbezug erstellt:
Logik_3 --> Logik_4 --> Logik_3
Logik_6 --> Logik_4 --> Logik_6

Ein solche Funktionalität lässt sich nie in einer einzelnen Logik-Zelle nachbilden.
Innerhalb einer Logik-Zelle gibt es nur eine lineare Abarbeitung und keine Rekursionen.

Achtung:
Bei Kreisbezug besteht die Gefahr, dass die Logik "durchgeht".
Falls eine Logik-Zelle zu oft hintereinander ausgeführt wird, wird diese deaktiviert ("pausiert").
Gruß,
Stefan K.
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#3

Beitrag von Eraser »

Ok danke, das Durchgehen wäre ja nur der Fall wenn die Timer "blöd" gesetzt sind.

Was wäre eine bessere Alternativ-Logik hierfür?
Hast du da eine Idee?

Anmerkung: Ich muss da erst umdenken, da ich von der SPS-Seite komme.
Zuletzt geändert von Eraser am Fr Dez 27, 2019 1:32 pm, insgesamt 1-mal geändert.
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

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

#4

Beitrag von S. Kolbinger »

Hi Wolfgang,

ich bin mir nicht sicher, ob ich Funktionsweise voll verstandenen habe.
Kannst du bitte kurz beschreiben, was die Logik genau machen soll.
Speziell wie das Eingangssignal aussieht und das Ausgangssignal aussehen soll.
Gruß,
Stefan K.
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#5

Beitrag von Eraser »

Hallo Stefan,

Das Eingangssignal ist die Bewegungserkennung von einem PM.
Das Ausgangssignal geht auf einen Schaltaktor, der eine Warmwasser-Zirkulationspumpe startet.
Sinn dahinter ist, dass warmes Wasser im Bad bereitsteht, wenn man das Bad betritt.

Das Eingangssignal kann alles mögliche sein von langen Einschaltimpulsen (weil man sich im Bad aufhält) bis hin zu mehreren kurzen Impulsen, wenn man nur kurz immer wieder ins Bad geht.

Die Dauer des Ausgangssignal soll am Eingang durch einen Parameter einstellbar sein (bei mir Pulse duration).
Ebenso die Sperrzeit (Interlock time).

Ablauf: Bei einer positiven Flanke am Eingang wird der Ausgang für die Dauer von Pulse duration eingeschaltet. Nach dieser Zeit dann wieder ausgeschaltet.
Sobald der Ausgang aktiv wird, soll eine zweite Zeit (Interlock time) starten und das Eingangssignal für diese Zeit sperren, damit die Pumpe nicht bei jedem Eingangssignal neu gestartet wird. Sollte das Eingangssignal während der Pulse duration weg gehen, wird der Ausgang trotzdem die eingestellte Zeit aktiviert. Der Impuls ist also rein nur auf eine positive Flanke getriggered.

Der Sinn dahinter ist, dass wenn die Pumpe schon einmal gelaufen ist, schon warmes Wasser vorhanden ist und für eine gewisse Zeit nicht mehr laufen braucht.

Später will ich diesen Custom-Baustein für eine andere Pumpe auch verwenden, wo ich dann aber andere Zeitintervalle einstelle.

Danke schon mal für deine Hilfe!
Zuletzt geändert von Eraser am Fr Dez 27, 2019 5:52 pm, insgesamt 2-mal geändert.
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

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

#6

Beitrag von S. Kolbinger »

Hi Wolfgang,

versuch es mal damit:

Code: Alles auswählen

{
	"Level": [
		["$Input","bool",false],
		["$Time_Pulse","float",60.0],
		["$Time_Interlock","float",7200.0],
		["$Pulse","bool",false],
		["$Interlock","bool",false],
		["$Start_Pulse","bool",false]
	],
	"Module": [   
		["And",["$Input","-$Interlock"],"$Start_Pulse"],
		["Monoflop","$Start_Pulse",0,"$Pulse","$Time_Pulse",2],
		["Monoflop","$Pulse",0,"$Interlock","$Time_Interlock",4]
	],
	"Input": [
		["Input","Input signal","$Input","c"],
		["Pulse duration","Duration of the switch on impulse","$Time_Pulse","a"],
		["Interlock time","Minimum lock time before output is triggered again","$Time_Interlock","a"]
	],
	"Output": [
		["Output","Output signal","$Pulse","c"]
	]
}
Gruß,
Stefan K.
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#7

Beitrag von Eraser »

Danke werde ich testen.

Was ich jetzt nicht ganz verstehe ist, warum diese Art des Codes kein Kreisbezug ist.
And - Monoflop 1 - Monoflop 2 - And - Usw.

Kannst du mir das erklären?
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

alexbeer
Reactions:
Beiträge: 396
Registriert: Mi Sep 12, 2018 1:11 am
Wohnort: NRW
Hat sich bedankt: 213 Mal
Danksagung erhalten: 254 Mal

#8

Beitrag von alexbeer »

Halle, wenn ich es richtig verstanden habe, dann hat Stefan das Verhalten in dem Post
S. Kolbinger hat geschrieben: Sa Nov 30, 2019 3:44 pm ... ah, jetzt verstehe ich die Frage. :idea:
Robert_Mini hat geschrieben: Sa Nov 30, 2019 11:51 am Meine Vermutung ist, dass der 2-malige Aufruf der gleichen Stoppuhr innerhalb eines Aufrufes der Logikzelle nicht vorgesehen ist?
Es handelt sich hier auch nicht umeineStoppuhr die duzweimalpro Durchlauf aufrufen kannst.
Tatsächlich ist jedes Modul "Stoppwatch" eine eigene unabhängige Stoppuhr (mit unabhängigen interen Zählern).
Jedes Modul in der Modulliste ist eine eigene Instanz.

Wie du bereits vermutet hast:
Ein mehrfacher Aufruf ein und desselben Moduls pro Durchlauf ist nicht vorgesehen.
erklärt.
Jedes Modul bekommt innerhalb einer Logik noch einen internen - nicht sichtbaren Zähler - somit ist ein rekursive Aufruf ausgeschlossen.
VG Alex
VG Alex
Timberwolf122 (TWS 2500) // Wartungs-VPN: offen // Reboot: jederzeit
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#9

Beitrag von Eraser »

Hallo Alex

So wie ich das verstanden habe geht es bei dem Post von Robert darum die gleiche Stoppuhr zweimal aufzurufen, was in meinem Beispiel ja eigentlich nicht vorkommt, da es seperate Timer sind.
Oder?
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

Matze76
Reactions:
Beiträge: 315
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 287 Mal
Danksagung erhalten: 195 Mal

#10

Beitrag von Matze76 »

Hallo Wolfgang,

Ja, deine Timer laufen hintereinander ab. Wenn der erste ausschaltet, startet der zweite.

Es ist aber kein Kreisbezug. Durch das Ausschalten von Timer 2 ist zwar die AND-Bedingung wieder erfüllt, die Änderung des Werts der internen Variable triggert aber die Logik nicht neu an. Von daher passiert nichts weiter.

Erst ein erneutes "true" (nach vorherigem "false") auf den Eingang ($Input) würde die Logik wieder triggern und Timer 1 starten. Vorausgesetzt der zweite Timer läuft in diesem Moment nicht.
Zuletzt geändert von Matze76 am Sa Dez 28, 2019 9:22 am, insgesamt 1-mal geändert.
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache
Antworten

Zurück zu „Logikengine & Logik-Editor“