0:08
Egal ob ihr beim Programmieren mit Lua, dem Block Controller oder einfachen
0:13
Steuerungskomponenten arbeitet, am Ende wollt ihr einen Button auf die UCI bringen, den der
0:18
Nutzer betätigen kann. Dieser Button startet dann euer Skript, oder er wird selbst von einem Skript
0:24
gesteuert – was immer es ist, diese Steuerungselemente müssen irgendwie mit eurem Programm
0:29
verknüpft werden. Oft heißt das, dass ihr eurem Design leere Steuerungselemente hinzufügen müsst,
0:37
und das schauen wir uns jetzt für alle drei Methoden an.
0:42
Zur Erinnerung – es gibt nur ein paar grundsätzliche Arten von Steuerungselementen: Buttons und
0:48
Regler sind interaktiv, Anzeigen und LEDs stellen Information einfach nur dar. Textfelder können
0:56
potentiell beides – Du kannst in ein Textfeld Informationen eingeben, du kannst es aber auch den
1:03
String eines anderen Steuerungselements anzeigen lassen.
1:07
Um einen unbelegten Button in dein Design einzufügen, kannst du die Komponente „Custom
1:13
Controls“ verwenden. Deren Bedienfeld ist standardmäßig leer, d.h. du definierst hier in den
1:19
Eigenschaften, welches Steuerungselement du gern hättest.
1:24
Du kannst mehrfache Kopien desselben Button-Typs in Gruppen hinzufügen, also wählen wir hier
1:29
einen Typ für unsere erste Gruppe. Hier sieht es so aus, als gäbe es rund 20 verschiedene Arten von
1:36
Steuerungselementen, aber es sind alles Variationen der fünf vorhin genannten.
1:42
Das hier sind alles verschiedene Regler, das hier alles Buttons. Seht Ihr? Sie haben nur
1:47
unterschiedliche vorgegebene Regelbereiche und Kategorien, die ihr aber unter Umständen anpassen
1:55
Nachdem ihr einen Steuerungs-Typ für eine Gruppe ausgewählt habt, könnt ihr durch Erhöhen der
2:00
Anzahl von 1 bis 256 weitere identische Elemente hinzufügen. Hier habt ihr nun auch die Möglichkeit,
2:09
eine zweite Gruppe für einen weiteren Typ hinzuzufügen.
2:13
Beachtet bitte, dass ihr für die zweite Gruppe nicht denselben Typ auswählen könnt. Falls ihr mehr als
2:19
256 Elemente desselben Typs benötigt, müsst ihr eine weitere „Custom Controls“-Komponente
2:27
Wenn wir nochmal an das frühere Video zur Q-SYS Baumstruktur denken, ergeben die Unterschiede
2:32
zwischen diesen Steuerungselementen jetzt vielleicht mehr Sinn. Ein Mute-Button und ein
2:37
Umschalter haben z. B. exakt dieselben Werte und Positionen, aber ein Umschalter hat
2:44
„wahr/falsch“-Strings, ein Mute-Button jedoch „stumm/nicht stumm“-Strings.
2:50
Würdest du einen „Generic Float“-Regler mit demselben Regelbereich wie ein Pegel-Regler einfügen,
2:58
dann wären numerischer Wert und Position bei beiden exakt gleich, aber der String des Pegel-Reglers
3:05
beinhaltet ein „dB“ am Ende.
3:09
Die Hilfedatei listet Werte, Positionen und Zeichenfolgen dieser Steuerungen vollständig auf, ebenso
3:16
ihre standardmäßigen und benutzerdefinierbaren Regelbereiche.
3:20
Wenn du Steuerungskomponenten verwendest, kannst du diese benutzerdefinierten Steuerungen
3:26
direkt mit beliebigen Steuerpins verbinden. Wenn du mit der Steuerungsskript-Komponente
3:32
arbeitest, kannst du sie mit deinem Skript verknüpfen.
3:36
Du kannst dann innerhalb des Skripts auf dieses Steuerungselement referenzieren, indem du das
3:42
Schlagwort „Controls“ eingibst – das Hauptobjekt der Baumstruktur.
3:48
In diesem Fall Controls.Inputs oder Controls.Outputs, je nachdem, womit es verbunden ist. Du musst
3:56
außerdem den Pin, mit dem es verbunden ist, in einer eckigen Klammer angeben – das ist der Index.
4:03
Dann kannst du diese Baumstruktur erweitern und auf eine spezifische Eigenschaft des
4:07
Steuerungselements Bezug nehmen. Mit dem Druckbefehl, den wir im vorherigen Video
4:12
kennengelernt haben, kann ich den Wert dieses Elements im Debug-Fenster anzeigen lassen; der
4:18
Befehl lautet „print (Controls.Inputs[1].Value)“.
4:28
Wenn du aber benutzerdefinierte Steuerungselemente erstellst, nur um sie mit einem
4:33
Steuerungsskript zu verbinden, könntest du dafür die Komponente „Text Controller“ verwenden.
4:39
Auch mit dieser Komponente kannst du leere Steuerungselemente in dein Design einfügen, doch
4:45
diese Elemente sind bereits in dein Skript eingebettet und deshalb leichter zu referenzieren.
4:50
Die Oberfläche zum Hinzufügen von Steuerungselementen ist in dieser Komponente anders als bei
4:57
„Custom-Controls“, aber das Konzept ist das gleiche. Anstatt die Steuerungselemente in den
5:03
Eigenschaften zu definieren, gibt es einfach nur einen einzigen „Edit“-Button, mit dem ein neues
5:09
Fenster für die Einstellungen geöffnet wird.
5:13
Du klickst zuerst auf „Steuerungselement hinzufügen“ und kannst dann die Details zu diesem
5:19
Steuerungselement einrichten. Zunächst wählst Du die Art des Steuerungselements, und
5:24
anschließend den spezifischen Typ. Du findest dieselben Varianten von Buttons und Reglern wie
5:30
bisher, und die LEDs und Anzeigen sind unter „Indikatoren“ aufgelistet.
5:38
Ich persönlich finde diese Gliederung etwas intuitiver als die „benutzerdefinierten
5:42
Steuerungselemente“, die wir uns gerade angesehen haben, weil dort alles alphabetisch geordnet
5:47
war, während hier nach Funktionen unterteilt wird.
5:51
Bei Steuerungselementen mit benutzerdefiniertem Regelbereich kannst Du Minimal- und
5:56
Maximalwerte festlegen. Und wenn Du dieses Steuerungselement mit etwas anderem in Q-SYS
6:01
verschalten möchtest, kannst Du einen Eingangs- oder Ausgangspin, oder beides, hinzufügen, was
6:07
dann im Schaltbild an der Komponente zu sehen ist, sobald Du „OK“ drückst.
6:12
Du kannst diesem Steuerungselement auch einen Namen geben, was ich auch wärmstens empfehle.
6:17
„Steuerungselement 1“ ist kein guter Name. Du könntest es nach Dir selbst benennen – Kevin.
6:24
Was? Woher ich weiß, dass Du Kevin heißt? Ich bin einfach dermaßen gut. Alle Kevins da draußen
6:30
flippen jetzt gerade aus, und alle anderen denken sich: „Ich heiße nicht Kevin“. Jedenfalls hat dies den
6:36
Vorteil, dass Du dieses Steuerungselement in Deinem Skript direkt namentlich ansprechen kannst.
6:43
Anstatt mit „Controls.Inputs[1]“, wie im vorherigen Beispiel, kann ich jetzt im Skript auf dieses
6:50
Element mit „Controls.Kevin“ Bezug nehmen. Wenn Du mehrere Instanzen desselben
6:56
Steuerungselements hinzufügst, musst Du diesen Index so im Lua-Steuerungsbaum referenzieren:
7:03
Controls.Kevin[1], so wie bei den Eingängen des Steuerungsskripts.
7:10
Vorsicht mit Leerzeichen in den Namen der Steuerungselemente. Wenn in dem Namen ein
7:16
Leerzeichen vorkommt, musst Du es in einer eckigen Klammer und mit Anführungszeichen angeben:
7:23
Controls.[“Kevin Jones”]. P.S. – falls hier ein Kevin Jones zuschaut, dreht er jetzt völlig durch.
7:34
Tut Euch auch den Gefallen einer durchgängigen Namensgebung, sodass andere Programmierer, die
7:39
vielleicht eines Tages an diesem Design arbeiten müssen, Eure Kennzeichnung leichter verstehen.
7:45
Und der Block Controller schließlich gibt Euch eine dritte Möglichkeit, dem Design
7:48
Steuerungselemente hinzuzufügen. In diesem Fall könnt Ihr mit einem Doppelklick auf den Block
7:54
Controller Eure Steuerungselemente hier in seinem Bedienfeld bearbeiten. Auch hier unterscheidet
8:01
sich die Schnittstelle minimal, folgt aber dem gleichen Konzept.
8:05
Auch hier könnt Ihr der Komponente wieder Steuerpins hinzufügen und Eurem Steuerungselement
8:10
einen Namen geben. Und wenn der Namen eines Steuerungselements ein Leerzeichen enthält,
8:15
braucht Ihr Euch diesmal keine Gedanken zu machen. Der Block Controller kompensiert diesen
8:20
möglichen Syntaxfehler, indem er die notwendigen Klammern und Anführungszeichen beim
8:25
Kompilieren selbst einbaut – also, lass die Sau raus, Kevin! Nenne sie wie Du willst.
8:30
Ein großer Vorteil des Block Controllers ist, dass Du nach dem gleichen Muster auch Verbindungen
8:34
hinzufügen kannst. Ähnlich wie bei den Command-Buttons kannst Du festlegen, ob es eine TCP-, UDP-
8:41
oder serielle Verbindung ist, und einen Namen angeben.
8:45
Die IP-Adresse und Port-Nummer kann angepasst werden, sobald Du im Emulations- oder
8:49
Betriebsmodus bist, oder, wenn Du sie dynamisch steuern willst, kannst Du Steuerpins für sie öffnen.
8:56
Im Block Controller werden diese Verbindungen unter den Steuerungselementen aufgelistet,
9:01
inklusive neuer Blöcke für all die möglichen Aktionen, die Du vielleicht über eine solche Verbindung
9:07
ausführst. Diese Verbindungen schauen wir uns in einem späteren Video an.
9:12
Damit beenden wir das Hinzufügen von Steuerungselementen. Im Control Worksheet gibt es noch
9:17
eine schnelle Übungsaufgabe für Euch. Im nächsten Abschnitt beschäftigen wir uns mit einigen der
9:22
anderen Zweige des Steuerungsbaums, die mit diesen Steuerungselementen zu tun haben.