Seite 1 von 3

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

Verfasst: Fr Dez 27, 2019 11:27 am
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.

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

Verfasst: Fr Dez 27, 2019 12:10 pm
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").

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

Verfasst: Fr Dez 27, 2019 1:29 pm
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.

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

Verfasst: Fr Dez 27, 2019 5:32 pm
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.

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

Verfasst: Fr Dez 27, 2019 5:48 pm
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!

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

Verfasst: Fr Dez 27, 2019 6:40 pm
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"]
	]
}

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

Verfasst: Fr Dez 27, 2019 11:29 pm
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?

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

Verfasst: Sa Dez 28, 2019 12:58 am
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

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

Verfasst: Sa Dez 28, 2019 1:17 am
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?

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

Verfasst: Sa Dez 28, 2019 9:21 am
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.