Seite 1 von 1

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

Verfasst: Fr Nov 15, 2019 4:42 pm
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...

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

Verfasst: Fr Nov 15, 2019 4:58 pm
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

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

Verfasst: Fr Nov 15, 2019 5:04 pm
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.

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

Verfasst: Fr Nov 15, 2019 5:51 pm
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

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

Verfasst: Fr Nov 15, 2019 7:48 pm
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.

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

Verfasst: Sa Nov 16, 2019 2:00 pm
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).

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

Verfasst: Di Nov 19, 2019 1:25 pm
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.