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:
Durch Anschauen des Codes der einzelnen Bausteine habe ich mir dann den Custom-Baustein zusammengeschrieben.
{ "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.