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

[Frage] (V1.5 RC10) $Unused, $DefVal oder 0 in Multiplexer-Modul tun nicht, was die KB sagt

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: 637 Mal
Danksagung erhalten: 775 Mal

(V1.5 RC10) $Unused, $DefVal oder 0 in Multiplexer-Modul tun nicht, was die KB sagt

#1

Beitrag von Robosoc »

@S. Kolbinger
Bei der Verwendung von $Unused oder $DelVal geht die Logikzelle auf Error.
Bei Verwendung einer 0, arbeitet Sie in dem Fall auch mit 0.

Insofern kann das Verhalten wie in der KB beschrieben im Moment nicht erzeugt werden. Aber geht das überhaupt, dass man in einem Fall garnichts macht und ide Variable quasi NULL ist?

Hier der aktuelle KB-Artikel:

Code: Alles auswählen

Statt der Referenz auf "$Unused" kann man die spezielle Null-Referenz verwenden. Die Null-Referenz (tatsächlich der Wert 0; keine Anführungszeichen) verwendet man bei nicht benutzten Ein-/Ausgängen.

Aus ["Multiplexer",["$Val_A","$Unused","$DefVal","$Unused","$Unused","$Val_D","$DefVal"],"$Out","$Select"]
mache ["Multiplexer",["$Val_A",0,"$DefVal",0,0,"$Val_D","$DefVal"],"$Out","$Select"]

Anmerkung: Eingänge mit Null-Referenz haben einen festen Wert, abhängig vom erwarteten Eingangs-Typ
Eingangs-Typ	Wert
bool	false
integer	0
float	0.0
string	"" (Leerstring)
Eine Variante, die den Ausgang nicht verändert, falls eine unerwarteter Wert für den Selektor auftaucht (im Bsp. sollten die unterstrichenen Werte durch den Selektor nicht adressierbar sein):
["Multiplexer",["$Out","$Out","$Val_A","$Val_B","$Out","$Val_C","$Val_D","$Out"],"$Out","$Select"]
Meiner Meinung nach ist da noch sehr viel falsch und ich würde das gerne korrigieren.

Ich denke $Unused und $DelVal gibt es nicht als offizielle globale Variablen oder Sie funktionieren im Moment nur nicht.
0 führt zu dem Wert "0" oder zu false.
Die Variante ganz unten in der KB mit $Out führt dazu, dass der in den Levels definierte Standardwert verwendet wird, also quasi wie eine Konstante...
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

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

#2

Beitrag von Robert_Mini »

Stimmt: $DefVal und $Unused sind normal Variablen, die auch definiert sein müssen.
Aufpassen, dass $Out den richtigen Typ hat.

Ich bevorzuge aber die Variante mit $Out anstelle von 0, wenn nichts passieren soll.

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

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

#3

Beitrag von Robosoc »

Robert_Mini hat geschrieben: Fr Nov 15, 2019 4:58 pm wenn nichts passieren soll
Das ist es ja, worauf ich hinaus will. Es passiert immer was!

Bei 0 arbeitet der Multiplexer mit dem Wert 0.0, 0 oder False, je nachdem, ob der ausgang des Multiplexer ein Zahlentyp oder ein Bool ist.
Bei der Variante mit $Out nutzt Du den vorher in $Out definierten Wert. Wenn das innerhalb der Logikbearbeitung nicht überschrieben wurde, dann ist es der Defaultwert, den Du in den "Levels" definierst. Du kannst nicht erzwingen, dass "Nichts" passiert.

Ich wollte genau das gerade, aber es geht nicht und ist am Ende auch logisch. Denn Die Logik ist getriggert. Die Ausgangswerte werden in jedem Fall ausgewertet und abhängig von den Ausgangsdefinitionen a, c, ct und t auch gesendet. Irgenbdwas steht immer im Ausgang an, ein Null oder NAL oder so gibt es nicht.
Zuletzt geändert von Robosoc am Fr Nov 15, 2019 5:04 pm, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

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

#4

Beitrag von Robert_Mini »

Robosoc hat geschrieben: Fr Nov 15, 2019 5:04 pm
Robert_Mini hat geschrieben: Fr Nov 15, 2019 4:58 pm wenn nichts passieren soll
Das ist es ja, worauf ich hinaus will. Es passiert immer was!
Stimmt. "Null" gibt es nicht => könnte aber auch nicht in ein DPT konvertiert werden.
Mit 0, 0.0 wird eben 0 (=false) oder 0.0 ausgegeben, ohne dass man einen Konstante dafür definieren muss, mehr nicht.

Aber mit:
["$Out","$Out","$Val_A","$Val_B","$Out","$Val_C","$Val_D","$Out"],"$Out","$Select"]

bleibt der Wert von $Out (zB vom letzten Aufruf) erhalten und es wird mit Sendeverhalten "C" (on change) dann auch nichts gesendet.

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

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

#5

Beitrag von Dragonos2000 »

Robosoc hat geschrieben: Fr Nov 15, 2019 4:42 pm Ich denke $Unused und $DelVal gibt es nicht als offizielle globale Variablen oder Sie funktionieren im Moment nur nicht.
Den Teil in der KB hatte z.T. ich geschrieben. Was hat Dich veranlasst davon auszugehen, dass dies globale Variablen sind? Habe nicht erwartet mit den bewusst gewählten Namen irgendwelche Missverständnisse zu provozieren. Die Namen sollten die Verwendung verdeutlichen.
Zuletzt geändert von Dragonos2000 am Fr Nov 15, 2019 7:49 pm, insgesamt 1-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

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

#6

Beitrag von S. Kolbinger »

Gut, dass ihr dieses Thema nochmal aufgegriffen habt.
Dabei ist mir aufgefallen, dass ich hier nicht die ganze Wahrheit erzählt hatte :oops: :
S. Kolbinger hat geschrieben: Mo Aug 12, 2019 1:30 pm Anmerkung: Eingänge mit Null-Referenz haben einen festen Wert, abhängig vom erwarteten Eingangs-Typ
Eingangs-TypWert
boolfalse
integer0
float0.0
string"" (Leerstring)
Denn es gibt aktuell zwei Ausnahmen, nämlich die Module:
  1. Astro:
    Die Null-Referenz an den Eingängen Latitude/Longitude veranlasst das Modul, die eingestellten Werte aus Ort und Zeit>Standort zu holen
    (und nicht die Zeiten für den Golf von Guinea zu berechnen :naughty: ).
  2. Localtime:
    Eine Null-Referenz am Eingang "Utime" bewirkt, dass die aktuelle Uhrzeit des TWS verwendet wird
    (und nicht 1. Januar 1970, 00:00 Uhr UTC).
Gruß,
Stefan K.

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

#7

Beitrag von Robosoc »

Dragonos2000 hat geschrieben: Fr Nov 15, 2019 7:48 pm Den Teil in der KB hatte z.T. ich geschrieben. Was hat Dich veranlasst davon auszugehen, dass dies globale Variablen sind? Habe nicht erwartet mit den bewusst gewählten Namen irgendwelche Missverständnisse zu provozieren. Die Namen sollten die Verwendung verdeutlichen.
Hallo Jochen,

ich habe das vor Monaten schon mal so interpretiert wie jetzt letzte Woche wieder. Warum genau ich es so verstanden habe, dass $Unused und $DefVal Global-Definierte Variablen sind, weiß ich auch so recht. Vermutlich weil ich immer den Abschnitt

Code: Alles auswählen

verwendet man bei nicht benutzten Ein-/Ausgängen.
zu wörtlich genommen habe und davon ausgegangen bin, dass eine 0 im Multiplexer noch einmal eine Sonderrolle spielt (nicht benutzter Ausgang -> NULL / NIL). Und dann dachte ich, wenn das gleichwertig zu $Unused oder $DefVal ist, dann müssen das ja auch Sondervariablen sein, was ja auch hätte sein können. $VAL<> ist ja beispielsweise auch ein Sondertyp und wie wir jetzt wissen ist 0 beim Astro und LocalTime Baustein auch besonders...

Ich denke daher, dass der eine Satz zumindest nicht optimal formuliert ist, weil es für Anfänger (und dazu zähle ich mich eigentlich fast nicht mal mehr) den Eindruck erweckt man könnte hier definieren, dass der Ausgang bei Unused DevVal oder 0 nicht beschrieben wird. Aber das ist ja nicht der Fall. Alle Varianten belegen den Ausgang mit einem bestimmten Wert. Das ist für mich inzwischen auch völlig logisch und klar.
  • $Unused & $defVal mit dem Wert, der im Abschnitt Levels deklariert werden würde (es sind quasi selbstgewählte Konstanten).
  • 0 mit false, "0" oder "0,0", je nach Datentyp am Ausgang, es ist eine spiezelle Konstante.
  • $Out mit dem letzten Ergebnis der Logik (wenn dies vorher in der Logik nicht geändert wird). Es findet aber dennoch klar eine Zuweisung statt, bei dem sich der Wert nur halt nicht zum vorherigen Ergebnis ändert. So ist es ja beispielsweise im FlipFlop gelöst.
Ich mach mir mal ein paar Gedanken zum Umformulieren und schicke Dir und Robert das dann zur Prüfung.
Zuletzt geändert von Robosoc am Di Nov 19, 2019 1:40 pm, insgesamt 2-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK
Antworten

Zurück zu „Logikengine & Logik-Editor“