UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[Frage] Verhalten eines Monoflop noch unklar (Triggert er nach Ablauf der Zeit?)

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
Antworten

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

Verhalten eines Monoflop noch unklar (Triggert er nach Ablauf der Zeit?)

#1

Beitrag von Robosoc »

Ich kämpfe seit gestern morgen mit einer Logik, die ich mir eigentlich ganz einfach gedacht habe. Aber das Verhalten verstehe ich nicht und ich glaube es gibt hier auch noch Fehlverhalten im Dok-Modus, die es mir zusätzlich erschweren das Verhalten zu verstehen.

Was ich machen will:
  • Wenn auf einem Eingang ein Flankenwechsel von False auf True kommt (Inhibit 1),
  • soll zunächst auf dem Ausgang Out ein True
  • und nach Ablauf einer Zeit, die ich im Parameter "Verzögerung nächste Aktion" in Sekunden vorgebe, ebenfalls ein True gesendet werden.

Code: Alles auswählen

/**
 *  
*/
{
  "Level":[
    ["$t_next","integer", 1],
    ["$Inhibit1","bool", false],
    ["$Out","bool", false],
    ["$constTrue","bool", true],
    ["$dummy","bool", false],
    ["$trigger_next","bool", false]
  ],
  "Module":[
    ["Break",["$Inhibit1"]],
    ["And" , ["$constTrue"], "$Out"],
    ["Monoflop","$Out",0,"$dummy","$t_next",1],
    ["Latch", "$constTrue" ,"$trigger_next", "$dummy", 2]
  ],
  "Input":[
    ["Verzögerung nächste Aktion","Zeit in Sekunden bis Folgefunktion ausgelöst wird","$t_next","u"],
    ["Inhibit 1","Bei False wird die Logik ausgeführt, bei True verhindert","$Inhibit1","a"]
  ],
  "Output":[
    ["Out","Schalten","$Out","a"],
    ["Auslöser next function","HK aktiv oder inaktiv","$trigger_next","a"]
  ]
}
Bild

Die Logikzelle schreibt aber zweimal ein True auf den Ausgang Out, 1x sofort und 1x nach Ablauf der 5 Sekunden. Warum?

Bild

Triggert ein Monoflop die eigene Logik nach Ablauf der Zeit?

Nur zur Info, die Logik 155, die ich nach 5 Sekunden mit dem zweiten Ausgang antriggern möchte ist es nicht. Die ist Deaktiviert und wird aktuell nicht ausgeführt. Ich habe den Ausgang 2 auch schon abgekoppelt, das hat nichts geändert.
Zuletzt geändert von Robosoc am Mi Nov 06, 2019 8:52 am, insgesamt 4-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

#2

Beitrag von Dragonos2000 »

Hab's mangels Zeit nicht komplett durchgehirnt, aber...
Robosoc hat geschrieben: Mi Nov 06, 2019 8:31 am Triggert ein Monoflop die eigene Logik nach Ablauf der Zeit?
Ja, genau. Und die Ausgänge solltest Du auf "T" (On Timer) stellen, damit sie nur nach Ablauf des Timers senden...

Das nur als Hinweis auf die Schnelle, der vielleicht hilft. Kann das Beispiel gerade mangels Zeit nicht um Detail durchdenken...
Zuletzt geändert von Dragonos2000 am Mi Nov 06, 2019 12:15 pm, insgesamt 1-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#3

Beitrag von Robosoc »

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:
Bild

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):
Bild

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. 
Zuletzt geändert von Robosoc am Do Nov 07, 2019 12:03 pm, insgesamt 3-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „Logikengine & Logik-Editor“