NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

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 VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[TIPP] Binärausgänge abhängig vom Zahlenwert

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
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

Binärausgänge abhängig vom Zahlenwert

#1

Beitrag von Advenoni »

Hallo zusammen,

ich möchte bei mir wegen Fensteranzeigen 4 Binärausgänge abhängig vom Zahlenwert (0-3) schalten.
Klar ist das ganze mit einem Binärdemultiplexer und 4 Und-Gliedern möglich, aber schon etwas umständlich.

Code: Alles auswählen

{
    "Level": [
        ["$In","int",0],
        ["$Bit0","bool",false],
        ["$Bit1","bool",false],
        ["$Offen","bool",false],
        ["$Gekippt","bool",false],
        ["$Geschlossen","bool",false],
        ["$Stoerung","bool",false],
        ["$VAR<Inhibit?>", "bool", false]
    ],
    "Module": [
        ["Break", ["$VAR<Inhibit?>"]  ],
		["BinaryDemultiplexer", "$In",["$Bit0","$Bit1"]	],
        ["And",["-$Bit0","-$Bit1"],"$Offen"],
        ["And",["$Bit0","-$Bit1"],"$Gekippt"],
        ["And",["-$Bit0","$Bit1"],"$Geschlossen"],
        ["And",["$Bit0","$Bit1"],"$Stoerung"]
    ],
    "Input": [
        ["In","Zustandswert Fenster","$In","c"],
        ["Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u" ]
    ],
    "Output": [
        ["Offen","Fenster geöffnet","$Offen","c"],
        ["Gekippt","Fenster gekippt","$Gekippt","c"],
        ["Geschlossen","Fenster geschlossen","$Geschlossen","c"],
        ["Störung","Fenster Störung","$Stoerung","c"]
    ]
}
Funktioniert soweit schon, aber gibt es hier nicht irgendwie ne einfachere Möglichkeit, ähnlich wie if, elsif oder equal? in anderen Programmiersprachen? Ich muss leider sagen, dass ich beruflich relativ viel programmiere (Zumeist in ST, FUP und Pascal) aber irgendwie tue ich mir bei den Logiken eher schwer.

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

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

#2

Beitrag von StefanW »

Advenoni hat geschrieben: Fr Nov 01, 2019 2:09 pmgibt es hier nicht irgendwie ne einfachere Möglichkeit, ähnlich wie if, elsif oder equal? in anderen Programmiersprachen? Ich muss leider sagen, dass ich beruflich relativ viel programmiere (Zumeist in ST, FUP und Pascal) aber irgendwie tue ich mir bei den Logiken eher schwer.
Hallo Martin,

wir haben absichtlich solche Konstrukte wie IF usw. nicht unterstützt, weil das schnell zu schwer überblickbaren Verschachtelungen führt, die dann am Ende fehlerbehaftet sind. Wer das möchte, kann sich aber einen Container nehmen, einen eibd drauf (oder man nimmt den WG-Container) und schreibt sich was man möchte in PERL oder installiert sich seine Lieblingssprache in den Container dazu. Dieser Weg steht ja offen.

Diese Logiken arbeiten basierend auf Pegelwechsel, erlauben verschiedene Triggermodi und sind eben als fertige Bausteine gedacht, die man einfach verknüpfen kann. Es mag sein, dass komplexere Aufgaben auch mehr von diesen Bausteinen benötigen, aber dafür läuft das ganze Rocksolid und mit Persistenz, dem Doktormode, an- und abkoppeln, Grafana-Aufzeichnung usw. was mit einer prozeduralen Sprache alles nicht möglich wäre.

Darum bitte, gib dir einen Schubs und arbeite Dich in die Denkweise von Logikbausteinen ein. Ich denke das lohnt sich.

Zu Deiner Aufgabenstellung sollen sich andere äußern, die sich etwas besser auskennen.

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.
Benutzeravatar

MeisterLampe
Reactions:
Beiträge: 81
Registriert: Di Dez 18, 2018 8:17 am
Wohnort: Braunschweig
Hat sich bedankt: 35 Mal
Danksagung erhalten: 35 Mal

#3

Beitrag von MeisterLampe »

StefanW hat geschrieben: Fr Nov 01, 2019 2:20 pm wir haben absichtlich solche Konstrukte wie IF usw. nicht unterstützt, weil das schnell zu schwer überblickbaren Verschachtelungen führt, die dann am Ende fehlerbehaftet sind. Wer das möchte, kann sich aber einen Container nehmen, einen eibd drauf (oder man nimmt den WG-Container) und schreibt sich was man möchte in PERL oder installiert sich seine Lieblingssprache in den Container dazu. Dieser Weg steht ja offen.
Genau diese Frage wurde neulich schon in einem anderen Thread gestellt und nicht beantwortet, schön dass es hier nebenbei eine Antwort gibt.
Heißt, man muss sich in Container einarbeiten wenn man so wie gewohnt "programmieren" will oder in die Logikbausteine... Dann macht für die Logikbausteine wenigstens gescheite Übersichten, in welcher man die Logiken miteinander verknüpft wie bspw. in Matlab-Simulink, Edomi, Siemens SPS, etc...
Viele Grüße Philipp
Timberwolf Server 2600 | ID:246 | VPN offen

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#4

Beitrag von Advenoni »

Hallo @StefanW

vielen Dank für die Info. Dann werd ich einen Teil wohl am einfachsten im WG-Container verwenden.

Gruß,
Martin
Zuletzt geändert von Advenoni am Fr Nov 01, 2019 4:24 pm, insgesamt 1-mal geändert.
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

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

#5

Beitrag von Robert_Mini »

Wobei ich im genannten Beispiel nicht verstehe, was an der Custom Logik so besonders umständlich ist?

In Hochsprache mit if / elsif / elsif / else wäre das zumindest auch mindestens soviele Programmzeilen, oder?

Ich war anfangs ehrlicherweise auch skeptisch, inzwischen bin ich aber begeistert.
Inbesondere wenn man Verzögerungszeiten o.ä. verwendet, wird es in Hochsprache schnell komplex.

Abgesehen von den praktischen Dingen wie DokMode und An-/Abkoppeln, mit denen man in wenigen Sekunden testen kann, ohne dass man über die ETS Telegramme schicken muss...

Also ich würde in keinem Fall für so einfache Dinge den Plugin-Container verwenden. Alleine schon, weil mich der Umweg über KNX-Telegramme nach Grafana stört. Hat man im DokMode automatisch auch für alle internen Variablen!

Für gewissen Dinge natürlich sind Hochsprachen unschlagbar zB komplexere mathematische Ausdrücke, Datumsberechnugnen, etc.

Wer's graphisch lieber hat, kann ja auch EDOMI, NodeRed, etc. verwenden, das ist mit der Containerlösung in wenigen Minuten installiert, problemlos auch mehrere parallel (zB. produktiv/test).

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

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

#6

Beitrag von Robosoc »

Advenoni hat geschrieben: Fr Nov 01, 2019 2:09 pm ... aber gibt es hier nicht irgendwie ne einfachere Möglichkeit...
Mein Ansatz hierfür ist eindeutig mehrere Logiken und alles mit Standardlogiken. Dann bist Du maximal flexibel und hast meines Erachtens eine gute Übersicht. Die entscheidende Frage lautet meines Erachtens, warum nutzt Du hier eine Custom Logik, die macht es eher komplizierter (meine Meinung).

Logik 1: AND mit nur einem Eingang (verknüpft mit dem Ausgang von Logik 1), Eingangsfunktion „Wert innerhalb“ -1 und 1 (also gleich 0, dass ist wie If - Then)
Logik 2: AND mit nur einem Eingang (verknüpft mit dem Ausgang von Logik 1), Eingangsfunktion „Wert innerhalb“ 0 und 2 (also gleich 1)
Logik 3: AND mit nur einem Eingang (verknüpft mit dem Ausgang von Logik 1), Eingangsfunktion „Wert innerhalb“ 1 und 3 (also gleich 2)
Logik 4: AND mit nur einem Eingang (verknüpft mit dem Ausgang von Logik 1), Eingangsfunktion „Wert innerhalb“ 2 und 4(also gleich 3)

Auf diese Weise kann das Ganze auch beliebig wachsen.
Vergebe den Logiken einfach ein gleiches Tag, dann kannst Du Sie ganz schnell isoliert anziehen. Im Namen vielleicht darauf achten , dass die alphabetische Sortierung erzeugt wird. Sollte in Deinem Fall aber easy sein, wenn Du im Namen erwähnst, dass es die Reaktion auf Wert0, 1, 2, oder 3 ist.

Ich werde mit jedem Tag mehr ein Freund von vielen klaren, kleinen Logiken. Custom nur da wo es unbedingt sein muss oder sonst durch zuviele Zellen unübersichtlich werden würde. In Deiner Aufgabe sehe ich keinen Grund für eine Custom, die das nachträgliche editieren nur erschwert.

Klar, eine grafische Übersicht, welche Logiken wie zusammenarbeiten und das mit Dok-Mod wäre echt noch toll, aber vielleicht kann das ja mal irgendwann in der Zukunft hinzukommen z.B. Nur für die über ein Tag selektierten ....

Aber ich glaube die allermeisten Logiken sind nur gering komplex und dafür braucht es das aktuell nicht.
Zuletzt geändert von Robosoc am Sa Nov 02, 2019 8:51 am, insgesamt 5-mal geändert.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

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

#7

Beitrag von Robosoc »

Gelöscht, Eintrag hat keinen Sinn gemacht
Zuletzt geändert von Robosoc am Sa Nov 02, 2019 8:32 am, insgesamt 3-mal geändert.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

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

#8

Beitrag von Robosoc »

Um mal die eigentliche Frage zu beantworten (sorry, das haben wir ja alle noch nicht wirklich): in einer Custom Logik eignet sich ein Multiplexer sehr gut als If-Then Ersatz mit anderem Namen:

In Input definierst Du Dir eine Book Konstante $true = true
Die Bits und den binärdemultipexer brauchst du nicht mehr.
Die folgende Logik schaltet immer alle 4 Ausgänge true oder false (überlege mal wieviele Zeilen Code das bei If-then wären, da ist das hier schneller getippt

Code: Alles auswählen

["Multiplexer",["$true", 0, 0, 0],"$Offen","$In“],
["Multiplexer",[0, "$true", 0, 0],"$Gekippt","$In“],
["Multiplexer",[0, 0, "$true", 0],"$Geschlossen","$In“],
["Multiplexer",[0, 0, 0, "$true"],"$Stoerung","$In“]
Und nachträglich betrachtet würde ich diesen Fall dann doch mit einer Custom Logik machen. Du wirst ja vermutlich mehrere Fenster so behandeln wollen und dann würde das kopieren und verschalten von 5 logiken doch sehr nervig werden. Vermutlich brauchst du hier auch nicht die Möglichkeit nachträglich Änderungen in der Logik machen zu können und beschränkt geht es ja auch in Custom logiken.
Zuletzt geändert von Robosoc am Sa Nov 02, 2019 8:38 am, insgesamt 2-mal geändert.
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK

Ersteller
Advenoni
Reactions:
Beiträge: 296
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#9

Beitrag von Advenoni »

@Robosoc ,

vielen Dank für die Info! Mit dem Multiplexer gefällt mir das Ganze!
Mir war ja bewusst, wie ich das ganze ohne Custom-Baustein machen kann, nur finde ich, dass das ganze dann derzeit recht schnell unübersichtlich wird. Hier wäre eine grafische Übersicht, wie welcher Baustein mit welchem verschalten ist nicht schlecht.
Evtl. ist es auch beruflich bedingt, dass ich solche Sachen ganz gerne in eigenen Bausteinen mache, gerade wenn das ganze mehrfach verwendet wird.

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

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

#10

Beitrag von Robosoc »

Ich dachte anfangs genauso, aber inzwischen finde ich, dass die Verwendung von Tags und deren Filtermöglichket das sehr gut ersetzt. So hast Du extrem Schnell nur die logiken in der Ansicht, die Du woanders in Bausteinen gepackt hast. Betrachte Tags einfach mal als Möglichkeit Bausteine anzulegen und wenn Du keinen Filter auf Tags setzt siehst Du halt alle Netzwerke aus allen Bausteine. Ich finde dies ist recht gut KIS (keep it simple)
VG, Sven - 3500 XL ID:1369 | 3500 L ID:1355, VPN offen, Reboot OK
Antworten

Zurück zu „Logikengine & Logik-Editor“