Erweiterte Baumstruktur

Q-SYS Control 101 Training (German) : Scripting-Grundlagen

3 ) Einfache Kommunikation

12m 54s

4 ) Block Controller

18m 50s

6 ) Flow Control

36m 23s

7 ) Fazit „Control 101“

1m 29s

Übungsbeschreibung

Erweiterte Baumstruktur 8m 26s

Ein Einblick in die Baumstruktur der Steuerelements und deren Metadaten-Eigenschaften.

Video Transkript

Erweiterte Baumstruktur 8m 26s
0:08
Nachdem wir Steuerungselemente in unsere Skript-Umgebung eingefügt haben, sehen wir uns jetzt
0:14
weitere Metadaten an, die in deren Baumstruktur verfügbar sind. Mittlerweile solltet ihr mit .Value,
0:20
.String und .Position der meisten Elemente gut vertraut sein, also widmen wir uns weiteren
0:25
Eigenschaften. In weiteren Videos werden wir dann Funktionen erzeugen, die diese Eigenschaften
0:31
tatsächlich verändern, aber erst einmal sehen wir uns an, welche Eigenschaften zur Verfügung
0:36
stehen.
0:37
Zunächst gibt es einige visuelle Optionen; .Color ändert beispielsweise die Grundfarbe des
0:43
Steuerungselements. Sinnvoll wäre vielleicht, dass ein Fader die Farbe ändert, wenn er sich den
0:49
Endpunkten seines Regelwegs nähert, oder wenn sein Kanal gemutet ist.
0:53
Die Eigenschaft .Color kann durch Hexadezimal-Farbcodes und durch Web-geeignete HTML-
1:00
Farbcodes repräsentiert werden.
1:02
Im Block Controller kannst du das mit dem Block „Set Control Visual“ einstellen. Falls dir keine dieser
1:09
70 Farben gefällt, kannst du hier in der Kategorie „Values“ eine andere Auswahl treffen.
1:15
Und wenn wir uns das von diesem Block Controller generierte Lua-Skript anschauen, sehen wir, dass
1:21
der Baumstruktur .Control einfach ein Wert zugewiesen wird.
1:26
Die Eigenschaft .Legend bezieht sich auf die Kennzeichnung des Steuerungselements. Dies ist etwas
1:31
anderes als der Name, den du beim Anlegen des Steuerungselements zugewiesen hast. Der
1:36
kann durch das Skript nicht geändert werden.
1:36
„Legend“ ist genauso, wie wenn man in ein Steuerungselement einen anderen Namen eintippt, aber
1:45
weil sich „Legend“ dynamisch mit Scripting ändern lässt, ist es ideal, um die Kennzeichnung eines
1:51
Buttons auf der Basis seines Status zu ändern.
1:55
Im Block Controller wird dies durch einen weiteren „Set Control Visual“-Block repräsentiert. Bei
2:02
diesen „Set Control Visual“-Blöcken handelt es sich immer um den gleichen Block, nur mit einem
2:07
anderen visuellen Element; ich könnte also in diesem Dropdown-Feld einfach sein Ziel ändern.
2:14
Wo wir gerade hier sind, schauen wir uns doch mal diese an: .IsInvisible ist eine Eigenschaft, die sich
2:21
auf „wahr“ oder „falsch“ setzen lässt, um ein Steuerungselement unsichtbar oder sichtbar zu
2:27
machen. Die würdest du vielleicht verwenden, um z. B. bestimmte Bedienelemente eines Telefons zu
2:34
verbergen, wenn es in Betrieb ist.
2:37
Genauso wird ein Steuerungselement durch die visuelle Option „.IsDisabled“ halbtransparent und
2:44
nicht-interaktiv. Dadurch weiß ein Nutzer, dass es sich in seinem derzeitigen Zustand momentan nicht
2:51
betätigen lässt.
2:53
Die Eigenschaft „.IsIndeterminate“ ist ein weiteres Beispiel eines deaktivierten Buttons. Es ist jedoch
3:00
unwahrscheinlich ist, dass du ein Steuerungselement in diesen Zustand versetzt, da dir diese
3:05
Eigenschaft von einem Steuerungselement angezeigt wird.
3:09
Wenn z. B. ein Peripheriegerät nicht mit dem Netzwerk verbunden ist, werden seine
3:14
Steuerungselemente blass-rot, weil sie eben „Indeterminate“ sind. Das bedeutet, dass das System die
3:22
Verbindung zwischen diesem Element und seinem übergeordneten Gerät nicht bestimmen kann und
3:27
es daher „Unbestimmt“ ist.
3:30
Sagen wir, du überwachst einen Feueralarm-Schaltkontakt auf einem I/O-Frame – du könntest den
3:36
Wert des Steuerungselements auf einen etwaigen Feueralarm hin beobachten, oder auch die
3:42
.IsIndeterminate-Eigenschaft. Wenn nämlich diese Eigenschaft „wahr“ wird, weißt du, dass zu dem
3:50
Gerät keine Verbindung mehr besteht. Das bedeutet, dass dein Feueralarmsystem nicht
3:55
funktionieren wird.
3:57
Dir fällt vielleicht auf, dass für einen Regler die Eigenschaften .Value, .String und .Position hier im
4:04
Block Controller verfügbar sind, ein Umschalter hat aber etwas anderes – eine Eigenschaft namens
4:11
„.Boolean“. Bei einem Steuerungselement, das wie ein binärer Button nur zwei Zustände kennt,
4:19
repräsentiert .Boolean im Prinzip dessen Wert.
4:23
Auf sich allein bezogen, wird für Boolean „wahr“ angenommen, doch könntest du Boolean auch in
4:30
„falsch“ ändern, um das Steuerungselement zu deaktivieren. In Lua könntest du jedoch auf die
4:37
.Boolean-Eigenschaft eines Buttons Bezug nehmen, genauso wie auf seine Eigenschaft .Value, .String
4:44
oder .Position.
4:46
Bei den Eingangssteuerungselementen gibt es eine sehr wichtige Baumstruktur-Eigenschaft, die du
4:52
noch oft sehen wirst: „.EventHandler“.
4:56
Der EventHandler eines Steuerungselements wird immer dann ausgelöst, wenn dessen Zustand
5:01
geändert wird. Im Prinzip zeigt er an, dass sich irgend etwas ereignet hat, das du zum Auslösen einer
5:08
Aktion nutzen könntest. Dies ergibt nur für eine eingehende Baumstruktur Sinn – und wir werden das
5:15
häufig nutzen, wenn wir damit beginnen, Funktionen zu schreiben.
5:18
Wenn du willst, dass etwas passiert, wenn der Button gedrückt wird, nimmst du den .EventHandler.
5:25
Im Block Controller wird dies durch diesen „on control change“-Block repräsentiert, der – wenn wir
5:32
auf das Lua-Skript schauen – der Anfang einer Funktion ist, die von unserem Kumpel, dem
5:37
EventHandler, initiiert wurde.
5:39
Bestimmte Steuerungselemente haben die Eigenschaft „.Values“ – das ist Values im Plural, also etwas
5:46
anderes als „.Value“. Beispielsweise könnte eine Anzeige damit in einer Matrix sowohl einen Peak- als
5:54
auch einen Durchschnittswert anzeigen. Außerdem gibt es die Eigenschaft „.Choices“ für
6:01
Steuerungselemente mit Klappmenüs.
6:05
Für Ausgangssteuerungselemente nutzt du vielleicht die Eigenschaft „.RampTime“, also eine
6:12
Zeitdauer, in der ein Element von einem Wert zu einem anderen wechselt. D.h. wenn du das nächste
6:18
Mal für dieses Element .Value oder .Position einstellst, braucht es diese Zeit, um dort anzukommen.
6:26
Die Eigenschaft .RampTime wird in Sekunden ausgedrückt.
6:31
Zum Schluss schauen wir uns die Trigger-Buttons an. Wir sagten schon ein paarmal, dass Trigger
6:36
besonders sind, weil sie keine Werte, Strings oder Positionen haben. Normalerweise ließe sich der
6:42
Zustand eines Steuerungselements durch Anpassung dieser Eigenschaften ändern, aber bei einem
6:48
Trigger müsst Ihr so vorgehen: Control:Trigger().
6:56
Beachtet hier die Verwendung eines Doppelpunkts anstelle eines Punkts. Der Doppelpunkt
7:01
signalisiert eine Methode, und keine Eigenschaft. Eine Methode ist eine Aktion, die eine Steuerung
7:07
ausführen kann. Der :Trigger braucht nicht auf „wahr“ oder „falsch“ gesetzt zu werden; zum
7:16
Aktivieren reicht allein der Doppelpunkt.
7:19
Es gibt eine Reihe von Baumstruktur-Methoden, die ihr bei bestimmten Steuerungselementen findet.
7:24
Die seht ihr, wenn ihr Timer ins Spiel bringt – diese haben eine :Start- und :Stop-Methode – oder TCP-
7:33
Verbindungen mit Methoden wie :Connect, :Disconnect usw.
7:39
In dieser Online-Schulung befassen wir uns nicht mit Lua-TCP-Verbindungen, weil es viel einfacher ist,
7:45
Strings innerhalb des Netzwerks mit dem Block Controller zu senden und zu empfangen. Und wenn
7:50
ihr im Block Controller einen Trigger aktivieren wollt, findet Ihr für das Element einen ganz
7:55
spezifischen Block, der dessen Methode aktiviert.
7:59
Gut, wir sind in der Baumstruktur so weit gekommen wie fürs Erste nötig, also geht es jetzt wieder
8:05
zum Control Worksheet. Es gibt keine wirkliche Übungsaufgabe für dieses Thema, es werden nur
8:10
einige dieser Eigenschaften gezeigt. Schaut es euch an, und dann geht es endlich ans Erstellen von
8:15
Funktionen, damit euer Skript auch tatsächlich etwas kann! Also, macht weiter, wann immer ihr
8:21
soweit seid.