NEU! UPGRADE IP 10 verfügbar!
Optimierte Darstellung von VISU Editor und VISU Client - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/8HzePCm3

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur IP 10
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[V1.5 RC4] Anwendungsfall "Hausstatus" (Multiplexer?)

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

Ersteller
Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 283 Mal
Danksagung erhalten: 195 Mal

#11

Beitrag von Matze76 »

So, den Code der ersten Custom-Logik habe ich verstanden. Für mich zum Nachschlagen, und vielleicht für andere, die es auch gebrauchen können, habe ich den Kern der Logik mal etwas ausführlicher kommentiert:

Code: Alles auswählen

    "Module": [
        ["Break",["$VAR<Inhibit?>"] ],
        ["BinaryMultiplexer",["$In1_","$In2_","$In3_","$In4_"],"$InStat"],
        ["Multiplexer",["$Out2_","$Out1_","$Out2_","$Out0_","$Out2_","$Out1_","$Out2_","$Out3_","$Out4_","$Out1_","$Out4_","$Out0_","$Out4_","$Out1_","$Out4_","$Out3_"],"$Out","$InStat"]
    ],
In diesem "Module" Teil findet die Magie statt:

Zunächst werden mit dem BinaryMultiplexer alle möglichen Zustände der 4 Eingänge ($In1_ bis "$In4_) in einen Dezimalwert (als Integer) übersetzt. Bei 4 boolean Eingängen ergeben sich insgesamt 16 (2 hoch 4) Kombinationsmöglichkeiten.

1) FALSE (0) FALSE (0) FALSE (0) FALSE (0) => Binär 0000 = Dezimal 0
2) FALSE (0) FALSE (0) FALSE (0) TRUE (1) => Binär 0001 = Dezimal 1
3) FALSE (0) FALSE (0) FALSE (1) FALSE (0) => Binär 0010 = Dezimal 2
4) FALSE (0) FALSE (0) TRUE (1) TRUE (1) => Binär 0011 = Dezimal 3
5) FALSE (0) TRUE (1) FALSE (0) FALSE (0) => Binär 0100 = Dezimal 4
...
16) TRUE (1) TRUE (1) TRUE (1) TRUE (1) => Binär 1111 = Dezimal 15

Der Dezimalwert wird in die Ausgangs-Variable $InStat geschrieben.

$InStat ist dann der Eingang für den zweiten Baustein Multiplexer
Jedem möglichen Eingangswert (Zustand) 0-15 wird hier über die Variablen $Out0 bis $Out5 (die in der Variablen-Definition mit den Konstanten 0 bis 5 belegt wurden) ein Ausgang (der gewünschte Hausstatus) zugeordnet.

0 = $Out2_ => 2
1 = $Out1_ => 1
2 = $Out2_ => 2
3 = $Out0_ => 0

usw.,

Eigentlich ganz einfach und "logisch", wenn man mal dahinter gekommen ist :D

Wenn ich das richtig sehe, könnte man das aber statt in einer Customlogik auch mit den Standardbausteinen "Binärmultiplexer" und "Multiplexer" in zwei getrennten Logiken machen.
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

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

#12

Beitrag von Robosoc »

Hier mal eine kleine Sammlung zu Multiplexer Anwendungen/Beispielen:

viewtopic.php?f=24&t=1378&hilit=multipl ... =10#p14130
viewtopic.php?f=24&t=1190&p=12000&hilit ... xer#p11991

Ich glaube wirklich, dass sehr sehr viele Problemfälle mit dem Multiplexer gelöst werden können und finde es immernoch großartig, dass er von Anfang an im TWS LE enthalten war.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 283 Mal
Danksagung erhalten: 195 Mal

#13

Beitrag von Matze76 »

Jo, genau das ist der Horror, wenn man Bedingungen von Bedingungen abhängig machen will, die aber von Bedingungen abhängig sind, hinter denen eine Bedingungen liegt...
Genau, und mit den IF/ELSE Geschichten war man geneigt, mal schnell was einzubauen. Irgendetwas funktionierte nicht, und man hat an anderer Stelle nachgebessert bis es halbwegs zufriedenstellend lief, und hat mit den kleinen Unzulänglichkeiten gelebt. Diese Hausstatus-Sache war bei mir "historisch gewachsen", und das Setzen passierte verteilt in diversen unterschiedlichen Logiken. So eine Gesamttabelle mit allen möglichen Zuständen und gewünschten Ergebnissen habe ich gestern zum ersten Mal aufgestellt...

Nun habe ich das alles zusammen in einem Baustein und erkenne langsam den großen Vorteil darin. Mit diesen "echten" Logik-Schaltungen wird man nun auch gezwungen, sich vorher hinzusetzen und über alle möglichen Zustände Gedanken zu machen. Im Ergebnis muss ich sagen ist das natürlich die sinnvollere Herangehensweise :)
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#14

Beitrag von Robert_Mini »

tger977 hat geschrieben: So Sep 01, 2019 10:02 pm ich steig da trotz einiger Programmiererfahrung nicht durch und für mich ist das ein Buch mit sieben Siegeln mit den Customlogiken und irgendwie eine komplett neue Welt. Ich habe mich nun schon mehrere Stunden damit beschäftigt, aber das ist wirklich alles andere als Plug & play und intuitiv...
...
Hoffentlich wird die Lernkurve da bald steiler. :pray:
Ich denke es braucht da ein wenig "Best Practise" Feedback!

Von meiner Seite ein paar kurzgefasste Tipps zum einarbeiten:
- Eine einfache UND-Logik als Custom Logik erstellen, dann um eine ODER-Logik erweitern
- Custom Logiken in der KB ansehen und nachvollziehen
- Multiplexer verstehen (macht in der einfachsten Form ein IF x=0 THEN "Wert0 durchreichen" ELSEIF x=1 "Wert1 durchreichen")
- Schritt für Schritt einzelne Standardbausteine in Customlogiken durchspielen und mit den Parametern vertraut werden (in der KB habe ich halbwegs sprechende Variablennamen verwendet)
- Die Beispiele im Forum lesen und verstehen

Tipps für größere Logiken:
- Für eine neue Customlogik, am besten die Logik als Flussdiagramm aufmalen und die Variablennamen dazwischen bezeichnen => sind die Levels
- Dann Schritt für Schritt umsetzen und gleich im DokMode testen
- Nie mehr als 2 Standardbausteine ergänzen ohne wieder in den LE zu gehen, erstellen, testen (diese Einschränkung ist im wesentlichen der Fehlersuche und der aktuellen noch nicht vollständigen Fehleranzeige geschuldet)
- Ich speichere die Logik immer in einem Texteditor ab und behalte auch die vorherigen Schritte. Damit kann ich nochmals zurückspringen und in kleineren Schritten ergänzen, wenn ich einen Fehler nicht finde (auch das löst sich mit mehr Fehlermeldungen)
- Objekte erst verbinden, wenn die Logik fertig ist
- Zusätzliche Ausgänge mit internen Variablen anlegen (zum Debuggen der Logik), bis die Namensgebung in Grafana nachvollziehbar ist

Ich habe bisher auch die plugins geliebt, muss aber sagen, dass ich inzwischen Dinge umgesetzt habe, die ich mit perl bis zum Schluss nicht fehlerfrei hatte => das testen im DokMode ist extrem schnell und wiegt den leichten Mehraufwand beim Erstellen auch gegenüber einem graphischen Logikeditor mehrfach auf. Man braucht aber ein wenig um sich einzuarbeiten...

@Dragonos2000: Hast du Lust mal kurz deine "Best Practise" zusammenzufassen - mit dem Rolladenbaustein hast du den Einstieg denke ich auch hinter dir?

lg
Robert
Zuletzt geändert von Robert_Mini am Mo Sep 02, 2019 7:45 pm, insgesamt 1-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

StefanW
Elaborated Networks
Reactions:
Beiträge: 9750
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4867 Mal
Danksagung erhalten: 7766 Mal
Kontaktdaten:

#15

Beitrag von StefanW »

Hallo Andi,
tger977 hat geschrieben: So Sep 01, 2019 10:02 pmich steig da trotz einiger Programmiererfahrung nicht durch und für mich ist das ein Buch mit sieben Siegeln mit den Customlogiken und irgendwie eine komplett neue Welt. Ich habe mich nun schon mehrere Stunden damit beschäftigt, aber das ist wirklich alles andere als Plug & play und intuitiv...
Das kommt darauf an, aus welcher Welt man kommt. Wir haben das Produkt für Elektriker und Integratoren gebaut und für die sind Logikmodule (ähnlich wie Relais und Schütze) durchaus bekannt und kommt dem geübten Denken in "Verdrahtung" näher.

Denn letztlich nimmt man Standardmodule (so wie Logikbausteine) und verbindet Ein- und Ausgänge entsprechend miteinander.


1. Das kann man einfach im Logik Editor tun, dafür braucht man keine Custom Logik

Dafür legt man sich die nötigen Bausteine an, verbindet diese miteinander, testen und schon ist die Aufgabe gelöst. So wie man früher Relais und Anzugsverzögerungen, Treppenlichtschalter oder diverse Funktionsmodule (schaut Euch mal das Programm von Eltako an) in einen Schaltschrank gebaut und dann verdrahtet hat. Genau das geht mit dem Logikeditor auch wieder.

Damit man alles zusammenhängende auch findet: EInfach alle Logikzellen die zu einer Logik gehören, entsprechend TAGen, Dann noch in der Bezeichnung nummerieren (01, 02, 03... usw) und schon sieht man immer nach der Eingabe eines TAGs, was zusammen gehört.


2. Erst wenn man solche Konstrukte öfters nutzen will, dann kann man ein solches Konstrukt auch als Custom Logik realisieren.

Und in der Custom Logik beschreibt man lediglich die Eingänge, die Ausgänge und die Verbindungen und zwar GENAUSO wie sie auch in den einzelnen Zellen sind, nur dass die Verbindungen zwischen Ausgang des einen und Eingang des anderen nun "Signal" heißt.

tger977 hat geschrieben: So Sep 01, 2019 10:02 pmIch plage mich mit in perl sehr einfachen, kurzen Logiken jetzt schon länger rum diese in der TW Logik abzubilden, aber es macht irgendwie grad kein Spaß mehr, da ich bisher erst 4 Logiken am Laufen habe (von noch knapp 80 übrigen). Da ging es mit EDOMI deutlich schneller Logiken hinzustellen...
Unsere Logik arbeitet mit Logikelementen, nicht mit einer prozeduralen Sprache.

Dafür ist jedes der Logikelemente sehr kompakt, wird in Nanosekunden ausgeführt und ist wirklich "proof" was auch der Stabilität und der Anwendungssicherheit dient.

Ich denke, das denken in fertigen Bausteinen sollte nicht so schwer sein. Einfach die Verdrahtung angeben und schon ist die Custom fertig.


lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

StefanW
Elaborated Networks
Reactions:
Beiträge: 9750
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4867 Mal
Danksagung erhalten: 7766 Mal
Kontaktdaten:

#16

Beitrag von StefanW »

Hallo Robert,
Robert_Mini hat geschrieben: Mo Sep 02, 2019 5:21 pmIch habe bisher auch die plugins geliebt, muss aber sagen, dass ich inzwischen Dinge umgesetzt habe, die ich mit perl bis zum Schluss nicht fehlerfrei hatte
Danke sehr für die klaren Worte. Das ist nämlich der Punkt!

Es ist ERHEBLICH gescheiter, jeweils ausgetestete Logikbausteine (auf die man sich verlassen kann) zu verbinden, als sich das jeweils auszudenken. Darum haben wir das auch GENAU SO gemacht (und schneller ist es auch und die Elektriker / Integratoren denken ohnehin in Bausteinen).

Robert_Mini hat geschrieben: Mo Sep 02, 2019 5:21 pm=> das testen im DokMode ist extrem schnell und wiegt den leichten Mehraufwand beim Erstellen auch gegenüber einem graphischen Logikeditor mehrfach auf.
Jep, daher haben wir auch diese Diagnose-Instrumente (nicht zu vergessen auch Grafana dazu und den Busmonitor) geschaffen, weil das alles sehr hilfreiche Werkzeuge sind, die eine große Transparenz ermöglichen, was passiert bzw. was passiert ist.

Robert_Mini hat geschrieben: Mo Sep 02, 2019 5:21 pmMan braucht aber ein wenig um sich einzuarbeiten...
Das braucht es immer, es ist ja schon nicht der KNX ganz einfach...
Zuletzt geändert von StefanW am Mo Sep 02, 2019 5:28 pm, insgesamt 1-mal geändert.
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

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

#17

Beitrag von Dragonos2000 »

Robert_Mini hat geschrieben: Mo Sep 02, 2019 5:21 pm @Dragonos2000: Hast du Lust mal kurz deine "Best Practise" zusammenzufassen - mit dem Rolladenbaustein hast du den Einstieg denke ich auch hinter dir?
Hi Robert,
ja,kann ich machen.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Robert_Mini
Reactions:
Beiträge: 3744
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1168 Mal
Danksagung erhalten: 2076 Mal

#18

Beitrag von Robert_Mini »

Hallo!

Hab noch einen Punkt oben ergänzt:
- Zusätzliche Ausgänge mit internen Variablen anlegen (zum Debuggen der Logik), bis die Namensgebung in Grafana nachvollziehbar ist (Name des Levels)
lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Matze76
Reactions:
Beiträge: 314
Registriert: Mo Sep 24, 2018 9:59 am
Hat sich bedankt: 283 Mal
Danksagung erhalten: 195 Mal

#19

Beitrag von Matze76 »

Hallo Stefan @S. Kolbinger,
ich hatte gestern ja noch eine alternative Lösung versprochen.
Besonders, wenn man sehr viele Eingänge hat, kann die Lösung mit Binär-Multiplexer und Multiplexer unhandlich werden.
Danke auch für diesen Alternativvorschlag! Mit den separaten AND-Logiken ist es etwas näher am IF... THEN... - wobei man hier gegenüber den Multiplexern beim Erstellen etwas mehr aufpassen muss, dass nicht unabsichtlich mehrere "Latches" gleichzeitig TRUE sind (dann wird einfach der Wert des letzten true-Latches genommen, wie ich beim Spielen gemerkt habe).

[
"Latch",
"$Out2_", => an den Ausgang zu übergebender Wert
"$Out", => Ausgang
"$OutStat2_", => wenn TRUE, dann Ausgangswert an Ausgang übergeben
0 => ???
],

Habe ich das so richtig verstanden? Und wofür steht hier eigentlich die 0 ? (In der KB fehlt noch die Beschreibung zum Latch)

Gruß
Matthias
Gruß
Matthias

TWS 2500 ID:110 + PBM, VPN offen, Reboot nach Rücksprache

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#20

Beitrag von S. Kolbinger »

Hallo Matthias,
Matze76 hat geschrieben: Di Sep 03, 2019 4:26 pm Habe ich das so richtig verstanden? Und wofür steht hier eigentlich die 0 ? (In der KB fehlt noch die Beschreibung zum Latch)
schau mal hier:
viewtopic.php?f=61&t=1012&p=13144&hilit=latch#p13144
Gruß,
Stefan K.
Antworten

Zurück zu „Logikengine & Logik-Editor“