Danke Jochen, dass hat mich weitergebracht.
In der KB steht aktuell:
Code: Alles auswählen
TIMER / MONOFLOP:
Mit dem Baustein Monoflop können in zB in Verbindung mit einer UND-Logik Ein- und Ausschaltverzögerungen umgesetzt werden. Nach dem Empfang einen Triggers am Eingang Trigger wird am Ausgang eingeschaltet und nach Ablauf der Verzögerungszeit wieder ausgeschaltet.
Mit dem letzten Parameter kann das Re-trigger- und Flanken-Verhalten festgelegt werden.
["Monoflop","$Trigger","$Reset","$Ausgang","$Verzögerungszeit",0]
Die Optionen sind:
0 ... Nicht re-triggerbar, Pegelgesteuert, d.h. bei jedem empfangenen Wert
1 ... Re-triggerbar, Pegelgesteuert, d.h. bei jedem empfangenen Wert
2 ... Nicht re-triggerbar, Timer wird nur bei steigender Flanke getriggert
3 ... Re-triggerbar, Timer wird nur bei steigender Flanke getriggert
4 ... Nicht re-triggerbar, Timer wird nur bei fallender Flanke getriggert
5 ... Re-triggerbar, Timer wird nur bei fallender Flanke getriggert
6 ... Nicht re-triggerbar, Timer wird bei beiden Flanken getriggert
7 ... Re-triggerbar, Timer wird bei beiden Flanken getriggert
Ich teste mit diesem simplen Code:
Code: Alles auswählen
{
"Level": [
["$In", "bool", false],
["$Tr", "bool", false],
["$Zeit", "integer", 5],
["$Out", "bool", false],
["$constTrue", "bool", true],
["$dummy", "bool", false]
],
"Module": [
["Monoflop", "$In", 0, "$Out", "$Zeit", 7]
],
"Input": [
["Monoflop Zeit", "Zeit in Sekunden", "$Zeit", "u"],
["Monoflop Trigger Wert", "Wert dient dem Trigger des Monoflop", "$In", "c"],
["Trigger ohne Wert", "Wert dieses Eingangs ist egal, er triggert nur die Logik", "$Tr", "c"]
],
"Output": [
["Out", "Schalten", "$Out", "a"]
]
}
Zelle:
Erkenntnis 1: Verwende ich als letzten Parameter des Monoflop eine 0 oder 1, dann triggert der Monoflop nur, wenn Trigger = True ist. Bei false triggert der Monoflop nicht! Insofern triggert ein Monoflop hier eher wie ein Latch mit Parameter 0, aber nicht wie in der KB beschrieben "d.h. bei jedem empfangenen Wert".
Vielleicht kann das noch einmal jemand verifizieren, denn ich mache einfach zu viele Fehler in letzter Zeit. Aber wenn ich hier richtig liege, sollte die KB abgändert werden: Bisher "d.h. bei jedem empfangenen Wert" Vorschlag: "Pegelgesteuert, wenn der Trigger = true ist"
Erkenntnis 2: Der Doktormodus zeigt die Grafik mit Fehlern an, siehe die beiden unteren Linien im folgenden Bild. Man kann erkennen, das die Linien jeweils zweimal 2 Stati gleichzeitig anzeigen. Das ist nachträglich nicht so schlimm, ABER während der 5 Sekunden Monoflopzeit, zeigen die Grafiken NUR den falschen Wert an und das kann schon sehr irritieren, vor allem, wenn die Zeit mal länger ist! Nicht verwirren lassen, in dem Beispiel war die Logik noch eine andere, aber das Verhalten ist immer da):
Erkenntnis 3: Ein Monoflop triggert nach Ablauf der Zeit die gesamt Logik, wie ein Timer-Eingang. Die Logik wird komplett durcharbeitet, nur dass der auslösende Monoflop nicht noch einmal neu gestartet wird und dessen Ausgang eben false gesetzt wird.
Erkenntnis 4: Nutzt man mehrere Monoflops in einer Logik, so werden die anderen Monoflops ggf. wieder gestartet, wenn der Ablauf eines Monoflops die Logik triggert und die Triggerbedingungen des anderen Monoflops zu dem Zeitpunkt erfüllt sind. Dies kann man durch Verschaltungen mit dem Reset-Parameter ggf. verhindern.
@Robert_Mini : Vorschlag für die KB
Code: Alles auswählen
TIMER / MONOFLOP:
["Monoflop","$Trigger","$Reset","$Ausgang","$Verzögerungszeit",0]
Nach dem Empfang einen Triggers am Trigger-Eingang (1. Parameter) wird der Wert des Ausgangs (3. Parameter) true und nach Ablauf der Verzögerungszeit (4. Parameter) false gesetzt. Ein Monoflop triggert nach Ablauf der Verzögerungszeit die gesamt Logik, wie ein Timer-Eingang. Die Logik wird komplett durcharbeitet, nur dass der auslösende Monoflop nicht noch einmal neu gestartet wird und dessen Ausgang eben false gesetzt wird.
Nutzt man mehrere Monoflops in einer Logik, so werden die anderen Monoflops ggf. wieder gestartet, wenn der Ablauf eines Monoflops die Logik triggert und die Triggerbedingungen des anderen Monoflops zu dem Zeitpunkt erfüllt sind. Dies kann man durch Verschaltungen mit dem Reset-Parameter ggf. verhindern.
Ein True auf dem Reset-Parameter (2. Parameter) unterbindet die Ausführung des Monoflop, ein laufender Monoflop wird mit einem True auf diesem Eingang abgebrochen. Damit ein Monoflop ausgeführt wird muss dieser Eingang auf false stehen. Möchte man die Reset-Möglichkeit nicht nutzen, kann man daher statt einer Variable am 2. Parameter auch eine 0 vorgeben.
Mit dem letzten Parameter (eine Zahl zwischen 0 und 7) kann das Trigger-Verhalten festgelegt werden.
"re-triggerbar" bedeutet dabei , dass ein begonnener Monoflop nicht mehr ausgeführt wird, aber sofort erneut startet (also auch mit setzen von true) "nicht re-triggerbar" bedeutet, dass der Monoflop nicht durch einen erneuten Trigger am 1. Parameter neu gestartet wird. Ein erneutes Trriggern ist erst nach Ablauf der Verzögerungszeit und nach setzen des false am 3. Parameter möglich.
Die Optionen sind:
0 ... Nicht re-triggerbar, Pegelgesteuert, wenn $trigger = true ist
1 ... Re-triggerbar, Pegelgesteuert, , wenn $trigger = true ist
2 ... Nicht re-triggerbar, Timer wird nur bei steigender Flanke getriggert
3 ... Re-triggerbar, Timer wird nur bei steigender Flanke getriggert
4 ... Nicht re-triggerbar, Timer wird nur bei fallender Flanke getriggert
5 ... Re-triggerbar, Timer wird nur bei fallender Flanke getriggert
6 ... Nicht re-triggerbar, Timer wird bei beiden Flanken getriggert
7 ... Re-triggerbar, Timer wird bei beiden Flanken getriggert
Mit dem Baustein Monoflop können in z.B. in Verbindung mit einer UND-Logik Ein- und Ausschaltverzögerungen umgesetzt werden.