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

[DISKUSSION] Logik-Unterstützung - mehrere Trigger zeitversetzt

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
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

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#21

Beitrag von adimaster »

Robert_Mini hat geschrieben: Mo Feb 07, 2022 7:58 am Das geht tatsächlich nicht. Man könnte natürlich alle Eingänge abfragen ob getriggert, wenn alle false liefern, dann muss es der Logik-Trigger der Zelle oder ein Timer gewesen sein. D.h. man müsste zusätzlich prüfen, ob ein Timer abgelaufen ist (=aufwendig mit zwischenspeichern des letzten Timerzustandes jedes Monoflops...).
Ich kann grob erahnen, was Du meinst. Aber ich zweifle hier an meiner Kompetenz, das umzusetzen :shifty:
Robert_Mini hat geschrieben: Mo Feb 07, 2022 7:58 am Im Moment würde ich tatsächlich die AND-Logik als Trigger mit Cron als 2. Logik belassen... (oder den Cron in die Custom Logik einbauen).
Jap, so habe ich das gemacht. --> Output des Test-Triggers ist Input der Logik ... wie im Screenshot oben.
Mit dem Cron-Modul müsste ich die Zeit in der Logik fixieren, richtig?
Robert_Mini hat geschrieben: Mo Feb 07, 2022 7:58 am Hintergrund ist, dass Grafana immer den Zustand der Variablen aufzeichnet, unabhängig davon, ob diese auch an den Dispatcher übergeben werden.
Im Fall deiner Logik ist das etwas unglücklich, da der Ausgang fix auf True steht- und über das SendExplicit das Senden gesteuert wird.
Danke für die Erläuterung. Verwirrt mich aber dennoch, da ja die Internals gut aussehen :think:
Aber gut, ich kann auch mit den KNX-Test-Objekten leben.
Robert_Mini hat geschrieben: Mo Feb 07, 2022 7:58 am
adimaster hat geschrieben: So Feb 06, 2022 9:47 pm Update:
Ich habe das jetzt noch erweitert und so gelöst...

Warum das Modul ohne den Baustein "Triggered" total durcheinander läuft, verstehe ich leider nicht wirklich :think:
Versteh grad nicht, wie das gemeint ist, ich teste deinen Code mal. Aber wie hast du denn dann die Logik angestoßen?
Nun, meine ursprüngliche Erwartung war, dass die Logik mit einem Uhrzeittrigger (und die anderen Inputs auf Update), die Monoflops und SendExplizit einmal durchlaufen. Aber dem ist nicht so. Da habe ich einfach noch Verständnis-Schwierigkeiten.
Ich habe die Logik gemäß dem Screenshot oben angestoßsen ... also mit dem vorgeschalteten And-Modul.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#22

Beitrag von adimaster »

Robert_Mini hat geschrieben: Mo Feb 07, 2022 8:25 am Im wesentlichen den Eingang direkt auf den Timer und die Timer-Option auf 2 (pos. Flanke), ansonsten triggert sich die Logik selbst ein 2. Mal, wenn der Trigger noch auf True steht und die Logik von einem anderen Timer aufgerufen wird (0 = pegelgesteuert).
Ok, das könnte die "wilde" Triggerei damit erklären... Ggf. müsste das doch dann auch mit Uhrzeittrigger und 2 "Latches funktionieren oder?
Also, alle Inputs auf Update, Uhrzeit/Cron triggert --> Latch setzt eine Variable auf true und anschließend auf false, diese fallende Flanke löst Monoflops aus.

Werde ich mal die Tage testen...muss wieder neue Motivation sammeln :whistle:

Aber immerhin habe ich jetzt eine funktionierende smartere Lösung und dabei wieder was dazugelernt. Danke Euch vielmals!

Um das Thema abzurunden ...
gbglace hat geschrieben: So Feb 06, 2022 12:21 am Das geht doch mit dem Taktsignalgeber, der Standardlogiken.
Das meintest Du nur für einen Ausgang oder?
StefanW hat geschrieben: So Feb 06, 2022 2:28 pm Eine Möglichkeit könnte auch der State Machine Baustein darstellen
Hast Du bzw. kennst Du dazu ähnliche Beispiele?
Da fehlt mir gerade völlig die Kreativität.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#23

Beitrag von Robert_Mini »

adimaster hat geschrieben: Mo Feb 07, 2022 9:17 pm Ich kann grob erahnen, was Du meinst. Aber ich zweifle hier an meiner Kompetenz, das umzusetzen :shifty:
Würd ich unabhängig von Kompetenz (die ich als absolut gegeben sehe, wenn ich deinen Code sehe) nicht empfehlen.
adimaster hat geschrieben: Mo Feb 07, 2022 9:17 pm Mit dem Cron-Modul müsste ich die Zeit in der Logik fixieren, richtig?
Richtig, auch nicht wirklich empfehlenswert.
adimaster hat geschrieben: Mo Feb 07, 2022 9:17 pm Danke für die Erläuterung. Verwirrt mich aber dennoch, da ja die Internals gut aussehen :think:
Aber gut, ich kann auch mit den KNX-Test-Objekten leben.
Screenshot bitte was du genau meinst, ich verstehe nicht da nicht passt.
adimaster hat geschrieben: So Feb 06, 2022 9:47 pm Nun, meine ursprüngliche Erwartung war, dass die Logik mit einem Uhrzeittrigger (und die anderen Inputs auf Update), die Monoflops und SendExplizit einmal durchlaufen. Aber dem ist nicht so. Da habe ich einfach noch Verständnis-Schwierigkeiten.
Ich habe die Logik gemäß dem Screenshot oben angestoßsen ... also mit dem vorgeschalteten And-Modul.
Ich teste das nochmals mit dem Trigger der Logikzelle. Denke das sollte schon klappen.

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#24

Beitrag von Robert_Mini »

adimaster hat geschrieben: Mo Feb 07, 2022 9:32 pm Ok, das könnte die "wilde" Triggerei damit erklären... Ggf. müsste das doch dann auch mit Uhrzeittrigger und 2 "Latches funktionieren oder?
Also, alle Inputs auf Update, Uhrzeit/Cron triggert --> Latch setzt eine Variable auf true und anschließend auf false, diese fallende Flanke löst Monoflops aus.
Ich würde das eher so lösen:
- Am Beginn der Logik setzt du mittels Latch ein $SequenceActive = "True" und triggerst damit das erste Monoflop mit steigender Flanke.
- Der letzte Trigger setzt dieses wieder auf "False".

Damit kann nur ein externer Trigger die Sequenz starten, wenn diese abgelaufen ist.

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#25

Beitrag von adimaster »

Robert_Mini hat geschrieben: Mo Feb 07, 2022 9:35 pm Würd ich unabhängig von Kompetenz (die ich als absolut gegeben sehe, wenn ich deinen Code sehe) nicht empfehlen.
Ich meine damit die Denkweisen mit den Logikmodulen ... mit Python, C++, VBA, Batch etc. tu ich mich wesentlich leichter.
Robert_Mini hat geschrieben: Mo Feb 07, 2022 9:35 pm Screenshot bitte was du genau meinst, ich verstehe nicht da nicht passt.
Guter Kommentar ... ich habe es gerade nochmal getestet, meine aber, dass es Dein Code ohne "Triggered" war ... bekomme es auf die Schnelle nicht mehr hin.

Stattdessen ... so hatte ich mir erhofft, dass die Logik funktionieren müsste (allerdings schon mit Deinen Optimierungen ... in meinem Initial-Ansatz hatte ich noch mit CalcFormula die Delays aller Monoflops errechnet und diese dann entsprechend laufen lassen):

Code:

Code: Alles auswählen

{
  "_Meta": {
    "Description": "HTTP-API-Trigger",
    "Version": "",
    "Icon": ""
  },
  "Level": [
     ["$bInActive", "bool", false],
     ["$iInInterval", "integer", 30],
     ["$bOutTrigger1", "bool", true],
     ["$bOutTrigger2", "bool", true],
     ["$bOutTrigger3", "bool", true],
     ["$bOutTrigger4", "bool", true],
     ["$bOutTrigger5", "bool", true],
     ["$bOutTrigger6", "bool", true],
     ["$bOutTrigger7", "bool", true],
     ["$bOutTrigger8", "bool", true],
     ["$bOutTrigger9", "bool", true],
     ["$bOutTrigger10", "bool", true],
     ["$bLeReset", "bool", false],
     ["$bLeTimer1", "bool", false],
     ["$bLeTimer2", "bool", false],
     ["$bLeTimer3", "bool", false],
     ["$bLeTimer4", "bool", false],
     ["$bLeTimer5", "bool", false],
     ["$bLeTimer6", "bool", false],
     ["$bLeTimer7", "bool", false],
     ["$bLeTimer8", "bool", false],
     ["$bLeTimer9", "bool", false],
     ["$bLeTimer10", "bool", false]
  ],
  "Input": [
     ["bInActive", "Activate Trigger-Function for HTTP-API", "$bInActive", "u"],
     ["iInInterval", "Defines the interval in seconds between each trigger", "$iInInterval", "u"]
  ],
  "Output": [
     ["bOutTrigger1", "Trigger1", "$bOutTrigger1", "x"],
     ["bOutTrigger2", "Trigger2", "$bOutTrigger2", "x"],
     ["bOutTrigger3", "Trigger3", "$bOutTrigger3", "x"],
     ["bOutTrigger4", "Trigger4", "$bOutTrigger4", "x"],
     ["bOutTrigger5", "Trigger5", "$bOutTrigger5", "x"],
     ["bOutTrigger6", "Trigger6", "$bOutTrigger6", "x"],
     ["bOutTrigger7", "Trigger7", "$bOutTrigger7", "x"],
     ["bOutTrigger8", "Trigger8", "$bOutTrigger8", "x"],
     ["bOutTrigger9", "Trigger9", "$bOutTrigger9", "x"],
     ["bOutTrigger10", "Trigger10", "$bOutTrigger10", "x"]
  ],
  "Module": [
     ["Break", ["-$bInActive"]],
     ["Monoflop", "$bInActive", "$bLeReset", "$bLeTimer1", "$iInInterval", 0],
     ["Monoflop", "$bLeTimer1", "$bLeReset", "$bLeTimer2", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer2", "$bLeReset", "$bLeTimer3", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer3", "$bLeReset", "$bLeTimer4", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer4", "$bLeReset", "$bLeTimer5", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer5", "$bLeReset", "$bLeTimer6", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer6", "$bLeReset", "$bLeTimer7", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer7", "$bLeReset", "$bLeTimer8", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer8", "$bLeReset", "$bLeTimer9", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer9", "$bLeReset", "$bLeTimer10", "$iInInterval", 4],
     ["SendExplicit", "$bLeTimer1", "$bOutTrigger1", 2],
     ["SendExplicit", "$bLeTimer2", "$bOutTrigger2", 2],
     ["SendExplicit", "$bLeTimer3", "$bOutTrigger3", 2],
     ["SendExplicit", "$bLeTimer4", "$bOutTrigger4", 2],
     ["SendExplicit", "$bLeTimer5", "$bOutTrigger5", 2],
     ["SendExplicit", "$bLeTimer6", "$bOutTrigger6", 2],
     ["SendExplicit", "$bLeTimer7", "$bOutTrigger7", 2],
     ["SendExplicit", "$bLeTimer8", "$bOutTrigger8", 2],
     ["SendExplicit", "$bLeTimer9", "$bOutTrigger9", 2],
     ["SendExplicit", "$bLeTimer10", "$bOutTrigger10", 2]
  ]
}
Gui:
► Text zeigen
Ergibt:
► Text zeigen
Robert_Mini hat geschrieben: Mo Feb 07, 2022 9:42 pm Ich würde das eher so lösen:
- Am Beginn der Logik setzt du mittels Latch ein $SequenceActive = "True" und triggerst damit das erste Monoflop mit steigender Flanke.
- Der letzte Trigger setzt dieses wieder auf "False".
Mit letzter Trigger meinst Du wahrscheinlich den letzten Timer, der via Latch $SequenceActive = "false" setzt richtig?

Nur da hakt es generell bei mir. Wieso das Ganze?
Uhrzeit --> Trigger, Sequenz läuft EINMAL durch (analog dem Code oben) und fertig. Warum geht das immer weiter ... der nächste Trigger folgt doch erst am nächsten Tag zu dieser Uhrzeit.
Verstehe das leider nicht wirklich.
Zuletzt geändert von adimaster am Mo Feb 07, 2022 10:20 pm, insgesamt 1-mal geändert.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#26

Beitrag von adimaster »

Ok @Robert_Mini ... vielen Dank für Deine Impulse! :bow-yellow:
Ich glaube ich habe es jetzt :dance:

Getestet mit Uhrzeit-Trigger und Interval --> läuft.
Warum es aber nicht ohne diesen $bLeSequenceActive funktioniert, verstehe ich immer noch nicht :doh:

Code: Alles auswählen

/**
 * HTTP-API-Trigger
 * 
 * Einräumung der Nutzungsrechte gemäß TOLL:
 * Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL
 * ("Timberwolf Open Logikblock License"), die unter https://wrgt.news/TOLL
 * zum Download zur Verfügung steht.
 * 
 * Change History:
 * 1.00 (06.02.2022): 
 */
{
  "_Meta": {
    "Description": "HTTP-API-Trigger",
    "Version": "",
    "Icon": ""
  },
  "Level": [
     ["$bInActive", "bool", false],
     ["$iInInterval", "integer", 30],
     ["$bOutTrigger1", "bool", true],
     ["$bOutTrigger2", "bool", true],
     ["$bOutTrigger3", "bool", true],
     ["$bOutTrigger4", "bool", true],
     ["$bOutTrigger5", "bool", true],
     ["$bOutTrigger6", "bool", true],
     ["$bOutTrigger7", "bool", true],
     ["$bOutTrigger8", "bool", true],
     ["$bOutTrigger9", "bool", true],
     ["$bOutTrigger10", "bool", true],
     ["$bLeReset", "bool", false],
     ["$bLeSequenceActive", "bool", false],
     ["$bLeTimer1", "bool", false],
     ["$bLeTimer2", "bool", false],
     ["$bLeTimer3", "bool", false],
     ["$bLeTimer4", "bool", false],
     ["$bLeTimer5", "bool", false],
     ["$bLeTimer6", "bool", false],
     ["$bLeTimer7", "bool", false],
     ["$bLeTimer8", "bool", false],
     ["$bLeTimer9", "bool", false],
     ["$bLeTimer10", "bool", false],
     ["$bLeTrue", "bool", true],
     ["$bLeFalse", "bool", false]
  ],
  "Input": [
     ["bInActive", "Activate Trigger-Function for HTTP-API", "$bInActive", "u"],
     ["iInInterval", "Defines the interval in seconds between each trigger", "$iInInterval", "u"]
  ],
  "Output": [
     ["bOutTrigger1", "Trigger1", "$bOutTrigger1", "x"],
     ["bOutTrigger2", "Trigger2", "$bOutTrigger2", "x"],
     ["bOutTrigger3", "Trigger3", "$bOutTrigger3", "x"],
     ["bOutTrigger4", "Trigger4", "$bOutTrigger4", "x"],
     ["bOutTrigger5", "Trigger5", "$bOutTrigger5", "x"],
     ["bOutTrigger6", "Trigger6", "$bOutTrigger6", "x"],
     ["bOutTrigger7", "Trigger7", "$bOutTrigger7", "x"],
     ["bOutTrigger8", "Trigger8", "$bOutTrigger8", "x"],
     ["bOutTrigger9", "Trigger9", "$bOutTrigger9", "x"],
     ["bOutTrigger10", "Trigger10", "$bOutTrigger10", "x"]
  ],
  "Module": [
     ["Break", ["-$bInActive"]],
     ["Latch", "$bLeTrue", "$bLeSequenceActive", "$bInActive", 0],
     ["Monoflop", "$bLeSequenceActive", "$bLeReset", "$bLeTimer1", "$iInInterval", 2],
     ["Monoflop", "$bLeTimer1", "$bLeReset", "$bLeTimer2", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer2", "$bLeReset", "$bLeTimer3", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer3", "$bLeReset", "$bLeTimer4", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer4", "$bLeReset", "$bLeTimer5", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer5", "$bLeReset", "$bLeTimer6", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer6", "$bLeReset", "$bLeTimer7", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer7", "$bLeReset", "$bLeTimer8", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer8", "$bLeReset", "$bLeTimer9", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer9", "$bLeReset", "$bLeTimer10", "$iInInterval", 4],
     ["SendExplicit", "$bLeTimer1", "$bOutTrigger1", 2],
     ["SendExplicit", "$bLeTimer2", "$bOutTrigger2", 2],
     ["SendExplicit", "$bLeTimer3", "$bOutTrigger3", 2],
     ["SendExplicit", "$bLeTimer4", "$bOutTrigger4", 2],
     ["SendExplicit", "$bLeTimer5", "$bOutTrigger5", 2],
     ["SendExplicit", "$bLeTimer6", "$bOutTrigger6", 2],
     ["SendExplicit", "$bLeTimer7", "$bOutTrigger7", 2],
     ["SendExplicit", "$bLeTimer8", "$bOutTrigger8", 2],
     ["SendExplicit", "$bLeTimer9", "$bOutTrigger9", 2],
     ["SendExplicit", "$bLeTimer10", "$bOutTrigger10", 2],
     ["Latch", "$bLeFalse", "$bLeSequenceActive", "$bLeTimer10", 2]
  ]
}
Bild



Was mich aber wundert ... wieso funktioniert das mit dieser Schreibeweise hingegen nur ein einziges Mal (getestet bei Intervall, statt Uhrzeit-Trigger)?
Latch triggert hier doch auch nur bei fallender Flanke von $bLeTimer10.
Ausschnitt:

Code: Alles auswählen

     ["Break", ["-$bInActive"]],
     ["Latch", "$bLeTrue", "$bLeSequenceActive", "$bInActive", 0],
     ["Latch", "$bLeFalse", "$bLeSequenceActive", "$bLeTimer10", 2],
     ["Monoflop", "$bLeSequenceActive", "$bLeReset", "$bLeTimer1", "$iInInterval", 2],
     ["Monoflop", "$bLeTimer1", "$bLeReset", "$bLeTimer2", "$iInInterval", 4],
 
Komplett-Code

Code: Alles auswählen

{
  "_Meta": {
    "Description": "HTTP-API-Trigger Alphavantage",
    "Version": "",
    "Icon": ""
  },
  "Level": [
     ["$bInActive", "bool", false],
     ["$iInInterval", "integer", 30],
     ["$bOutTrigger1", "bool", true],
     ["$bOutTrigger2", "bool", true],
     ["$bOutTrigger3", "bool", true],
     ["$bOutTrigger4", "bool", true],
     ["$bOutTrigger5", "bool", true],
     ["$bOutTrigger6", "bool", true],
     ["$bOutTrigger7", "bool", true],
     ["$bOutTrigger8", "bool", true],
     ["$bOutTrigger9", "bool", true],
     ["$bOutTrigger10", "bool", true],
     ["$bLeReset", "bool", false],
     ["$bLeSequenceActive", "bool", false],
     ["$bLeTimer1", "bool", false],
     ["$bLeTimer2", "bool", false],
     ["$bLeTimer3", "bool", false],
     ["$bLeTimer4", "bool", false],
     ["$bLeTimer5", "bool", false],
     ["$bLeTimer6", "bool", false],
     ["$bLeTimer7", "bool", false],
     ["$bLeTimer8", "bool", false],
     ["$bLeTimer9", "bool", false],
     ["$bLeTimer10", "bool", false],
     ["$bLeTrue", "bool", true],
     ["$bLeFalse", "bool", false]
  ],
  "Input": [
     ["bInActive", "Activate Trigger-Function for HTTP-API", "$bInActive", "u"],
     ["iInInterval", "Defines the interval in seconds between each trigger", "$iInInterval", "u"]
  ],
  "Output": [
     ["bOutTrigger1", "Trigger1", "$bOutTrigger1", "x"],
     ["bOutTrigger2", "Trigger2", "$bOutTrigger2", "x"],
     ["bOutTrigger3", "Trigger3", "$bOutTrigger3", "x"],
     ["bOutTrigger4", "Trigger4", "$bOutTrigger4", "x"],
     ["bOutTrigger5", "Trigger5", "$bOutTrigger5", "x"],
     ["bOutTrigger6", "Trigger6", "$bOutTrigger6", "x"],
     ["bOutTrigger7", "Trigger7", "$bOutTrigger7", "x"],
     ["bOutTrigger8", "Trigger8", "$bOutTrigger8", "x"],
     ["bOutTrigger9", "Trigger9", "$bOutTrigger9", "x"],
     ["bOutTrigger10", "Trigger10", "$bOutTrigger10", "x"]
  ],
  "Module": [
     ["Break", ["-$bInActive"]],
     ["Latch", "$bLeTrue", "$bLeSequenceActive", "$bInActive", 0],
     ["Latch", "$bLeFalse", "$bLeSequenceActive", "$bLeTimer10", 2],
     ["Monoflop", "$bLeSequenceActive", "$bLeReset", "$bLeTimer1", "$iInInterval", 2],
     ["Monoflop", "$bLeTimer1", "$bLeReset", "$bLeTimer2", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer2", "$bLeReset", "$bLeTimer3", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer3", "$bLeReset", "$bLeTimer4", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer4", "$bLeReset", "$bLeTimer5", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer5", "$bLeReset", "$bLeTimer6", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer6", "$bLeReset", "$bLeTimer7", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer7", "$bLeReset", "$bLeTimer8", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer8", "$bLeReset", "$bLeTimer9", "$iInInterval", 4],
     ["Monoflop", "$bLeTimer9", "$bLeReset", "$bLeTimer10", "$iInInterval", 4],
     ["SendExplicit", "$bLeTimer1", "$bOutTrigger1", 2],
     ["SendExplicit", "$bLeTimer2", "$bOutTrigger2", 2],
     ["SendExplicit", "$bLeTimer3", "$bOutTrigger3", 2],
     ["SendExplicit", "$bLeTimer4", "$bOutTrigger4", 2],
     ["SendExplicit", "$bLeTimer5", "$bOutTrigger5", 2],
     ["SendExplicit", "$bLeTimer6", "$bOutTrigger6", 2],
     ["SendExplicit", "$bLeTimer7", "$bOutTrigger7", 2],
     ["SendExplicit", "$bLeTimer8", "$bOutTrigger8", 2],
     ["SendExplicit", "$bLeTimer9", "$bOutTrigger9", 2],
     ["SendExplicit", "$bLeTimer10", "$bOutTrigger10", 2]
  ]
}

So würde ich zwar nicht programmieren ... aber von Dir habe ich gelernt, dass ich die Monoflops auch untereinander schreiben kann. Da funktioniert es, aber bei den Latches nicht?
Zuletzt geändert von adimaster am Mo Feb 07, 2022 10:54 pm, insgesamt 3-mal geändert.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#27

Beitrag von Robert_Mini »

Guten Morgen Adi!
Das war jetzt ein etwas zu langes Posting für diese Uhrzeit .... ;-)
adimaster hat geschrieben: Mo Feb 07, 2022 10:18 pm Stattdessen ... so hatte ich mir erhofft, dass die Logik funktionieren müsste
...
Gui:
...
Ergibt:
In diesem Beispiel fehlt beim ersten Monoflop die Triggeroption=2. Damit wird das "unkontrollierte" re-triggern verhindert. Allerdings wir dann jeder Ausgang ein 2. Mal angetriggert (bei mir zumindest).

Den Rest muss ich mir noch in Ruhe ansehen.

Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#28

Beitrag von Robert_Mini »

adimaster hat geschrieben: Mo Feb 07, 2022 10:40 pm Getestet mit Uhrzeit-Trigger und Interval --> läuft.
Warum es aber nicht ohne diesen $bLeSequenceActive funktioniert, verstehe ich immer noch nicht
Ich schon (glaub ich): Die Timer werden ja durch das "True" ausgelöst.
Insbesondere der erste Timer muss hier sorgsam betrachtet werden, die weiteren werden ja immer vom vorhergehenden Timer gestartet.

Ein dauerhaftes True am ersten Timer startet die Sequenz ein weiteres Mal, während sie schon läuft und die Logik von einem anderen Timer (oder von außen) erneut getriggert wird.
Daher der Vorschlag mit dem SequenceActive, weil damit zusätzlich auch ein doppeltes Abarbeiten verhindert wird, wenn zB der Cron alle 3min Triggert und die Sequenz 5min läuft.

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#29

Beitrag von adimaster »

Robert_Mini hat geschrieben: Di Feb 08, 2022 9:20 am Ein dauerhaftes True am ersten Timer startet die Sequenz ein weiteres Mal, während sie schon läuft und die Logik von einem anderen Timer (oder von außen) erneut getriggert wird.
Daher der Vorschlag mit dem SequenceActive, weil damit zusätzlich auch ein doppeltes Abarbeiten verhindert wird, wenn zB der Cron alle 3min Triggert und die Sequenz 5min läuft.
Klingt plausibel...Danke!

Mir sind noch weitere Anwendungsfälle für diese Logik eignefallen: zeitversetztes Runterfahren / Hochfahren der Rollos (lief bei mir auf dem Wiregate bzw. bis Ende letzten Jahres auf der WIregate-App) bzw. Lichter.
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache
Antworten

Zurück zu „Zusätzliche Logikbausteine“