Cartwall Script

Hallo liebe mAirList-Gemeinde,
ich versuche schon die ganze Nacht den Status der einzelnen Slots der Cartwall abzufragen jedoch ohne Erfolg. Hintergrund ist, dass unsere Hardwaretaster LED´s eingebaut haben und ich diese gerne leuchten lassen will, wenn die entsprechende Cart läuft. Ich arbeite mit mAirList 2.1.44. Hab ihn den Scripts schon mit PlayerControl.GetState, GetIndex und GetCaption mein Glück versucht. Aber entweder leuchtet alles oder gar nichts.

Danke schonmal für die Hilfe
Daniel

hey,

wie steuerst du denn die LEDs an?

grüße, michi

Die LED´s spreche ich mit dem IOWarrior an, also IOWarriorRemote(0).SetPort(31, true)

mhh, etwas tricky :wink:

kümmern wir uns erstmal um einschalten der LED (Denn das Ausschalten ist nacher fast das gleiche :wink: ).

Man kann den Index des Players durch PlayerControl.GetIndex bekommen. Diese Zahl ist einem Player fest zugeordnet. (ob sie bei 0 anfängt weiss ich nicht, da ich es gerade nicht testen kann).

jetzt gibt es 2 möglichkeiten: 1. Du gibst den Playerindex direkt durch und musst dann halt die LEDs an den richtigen port dranklemmen. Das müsste mit folgendem Script funktionieren (die SystemLog-anweisung schreibt den index des gerade gestarteten players in den systemLog. Danit du weisst, an welchen port du die LEDs dranklemmen musst. Die Zeile kannst du danach entfernen)

[code]procedure OnCartPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);

begin
IOWarriorRemote(0).SetPort(PlayerControl.GetIndex, true);
SystemLog(IntToStr(PlayerControl.GetIndex));
end;

begin
end.
[/code]

  1. Möglichkeit wäre, ein Array anzulegen mit allen möglichen playerindexes (was ist der Plural von Index? :wink: ) und den zugehörigen IOWarrior ports.

Vielleicht reicht dir ja die 1. Möglichkeit :wink:

PS: die Scripts sind ungetestet…

grüße, michi

Erstmal danke für die Hilfe.
Die 1 Möglichkeit habe ich eben probiert. Die Lampen gehen auch an und später wieder aus. Das Dumme ist nur, starte ich zwei Carts nacheinander und beide laufen, geht die Lampe der ersten Cart aus, also es brennt immer nur eine einzige Lampe. Meistens reicht das, aber eben nicht immer. Ich schätze Mairlist überschreibt alle Ports, wenn ich etwas an den IOWarrior sende. Dies wird auch mit Möglichkeit 2 sich nicht ändern.

Das wäre aber sehr komisch und würde mich wundern…(Ich habe selbst keinen Warrior, aber das würde die Funktionalität soch sehr beeinträchtigen… )

Wann geht denn die erste LED aus? genau in dem Moment, in dem die andere angeht?

hast du vielleicht noch ein anderes Script am laufen, das die ports resettet ?

grüße, michi

richtig, eigentlich sollte die Lampe anbleiben, bis ich den Status per Script ändere. Aber die eine Lampe geht aus, sobald ich eine zweite Cart abfeuere. Ansonsten laufen keine weiteren Scripts, die was an die Ports senden.

Kann man vielleicht vor dem senden den aktuellen Status vom Warrior lesen und dann die neue Funktion “addieren”?

Ich glaube nicht. Man kann ja per Script nur einzelne Ports setzen (also einzelne PINS auf true oder false setzen).

Wenn es so wäre wie du meinst, müsste man ja den Wert in eine art Register reinschreiben.

Auch diese Idee habe ich schon versucht, aber das bringt auch nichts, da wie flashlighter schon sagte, immer nur einen Port zur gleichen Zeit setzen kann. Ich hab nochwas rausgefunden. Wenn ich in die OnStart procedure alle Lampen nacheinander anknipse kann ich auch alle einschalten. Sobald ich das aber über die OnCartPlayerStart procedure versuche, leuchtet aber nur immer eine LED.

kannst du mal die 2 scripts posten, und genau beschreiben, wie sich die “lämplein” verhalten? vielleicht sind wir dann ja schlauer :wink:

grüße, michi

jo klar

[code]procedure OnCartPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin

if PlayerControl.GetCaption = ‘1’ then IOWarriorRemote(0).SetPort(29, true)
if PlayerControl.GetCaption = ‘2’ then IOWarriorRemote(0).SetPort(30, true)
if PlayerControl.GetCaption = ‘3’ then IOWarriorRemote(0).SetPort(31, true)
if PlayerControl.GetCaption = ‘4’ then IOWarriorRemote(0).SetPort(28, true)
if PlayerControl.GetCaption = ‘5’ then IOWarriorRemote(0).SetPort(27, true)
if PlayerControl.GetCaption = ‘6’ then IOWarriorRemote(0).SetPort(26, true)
if PlayerControl.GetCaption = ‘7’ then IOWarriorRemote(0).SetPort(23, true)
if PlayerControl.GetCaption = ‘8’ then IOWarriorRemote(0).SetPort(24, true)
if PlayerControl.GetCaption = ‘9’ then IOWarriorRemote(0).SetPort(25, true)

end;

procedure OnCartPlayerStop(PlayerControl: IPlayerControl; Item: IPlaylistItem; Duration: int64);
begin

if PlayerControl.GetCaption = ‘1’ then IOWarriorRemote(0).SetPort(29, false)
if PlayerControl.GetCaption = ‘2’ then IOWarriorRemote(0).SetPort(30, false)
if PlayerControl.GetCaption = ‘3’ then IOWarriorRemote(0).SetPort(31, false)
if PlayerControl.GetCaption = ‘4’ then IOWarriorRemote(0).SetPort(28, false)
if PlayerControl.GetCaption = ‘5’ then IOWarriorRemote(0).SetPort(27, false)
if PlayerControl.GetCaption = ‘6’ then IOWarriorRemote(0).SetPort(26, false)
if PlayerControl.GetCaption = ‘7’ then IOWarriorRemote(0).SetPort(23, false)
if PlayerControl.GetCaption = ‘8’ then IOWarriorRemote(0).SetPort(24, false)
if PlayerControl.GetCaption = ‘9’ then IOWarriorRemote(0).SetPort(25, false)

end;

begin

end.[/code]dann geht immer nur ein einziges Lämpchen, wenn das allerdings folgendes in onStartUp schreibe gehen die Lampen alle an:

procedure OnStartup;
begin
IOWarriorRemote(0).SetPort(31, true);
IOWarriorRemote(0).SetPort(30, true);
IOWarriorRemote(0).SetPort(29, true);
IOWarriorRemote(0).SetPort(28, true);
IOWarriorRemote(0).SetPort(27, true);
IOWarriorRemote(0).SetPort(26, true);
IOWarriorRemote(0).SetPort(25, true);
IOWarriorRemote(0).SetPort(24, true);
IOWarriorRemote(0).SetPort(23, true);
end;

bitte nicht schlagen, man kann das auch mit Schleifen machen. Aber gehen muss es so auch…

Ja, das ist auch logisch so, denn mit “if PlayerControl.GetCaption = ‘1’ …” frägst du ab, welcher Player gerade gestartet wurde, und da das immer nur einer sein kann, geht auch nur eine LED an.

Bei dem anderen Script führst du einfach alle Befehle nacheinander aus und deshlab gehen alle an.

Es hat also nichts mit OnCartPlayerStart oder OnStartup zu tun.

Wenn du mehrere carts in kurzen abständen hintereinander abfeuerst, was passiert dann? leuchtet dann immer nur eine LED ? und wann wechselt es?

grüße, michi

klar, frage ich immer nur ab, welcher Player gerade gestartet wurde. Aber die Lampen die doch schon leuchten, dürfen dann nicht einfach wieder ausgehen. Ich setze den Port ja nicht auf false in der procedure, gibt ja kein else. Nach meiner logik müsste wenn ich die erste Cart abfeuere die entsprechene Lampe angehen, wenn ich die 2 Cart abfeuere muss auch die Lampe angehen. Also müssten, wenn beide laufen auch beide brennen.

Tut sie aber nicht, wenn die erste Cart gestartet ist geht auch die Lampe in dem Taster an, starte ich die zweite Cart geht die erste Lampe aus und die zweite an usw, obwohl die andere Cart noch läuft, das ist ja nicht Sinn der Sache. Also es wechselt sofort.

Mhh ok. Da weiss ich auch nimmer weiter…

Torben, kannst du dir das erklären? :wink:

grüße, michi

ich glaube unser Problem ist nicht softwaremäßig zu suchen. Sondern mit der Hardware. Scheint so, wenn nen Ausgang nicht richtig Kontakt hat, bekommt der IOWarrior nen Problem und schaltet alle Ausgänge beim nächsten SetPort ab. Aber wirklich Sinn macht das auch nicht…, alles sehr merkwürdig.

was meinst du mit “nicht richtig kontakt hat”?

das ist vollkommen absurd, da alles gelötet ist und auch leuchtet. Ich allerdings zwischen den einzelnen Bedienelementen des Studio Sub-D Stecker verwendet, um schnell Teile zwecks reperatur auszubauen. Vielleicht sind die Kabel zu lang, 1,8m oder die Steckverbinder treiben den Widerstand auf der Leitung hoch, das der Warrior sich mal verschluckt. Ist nur ne Vermutung. Hab ma nen paar Tests mit den LED´s auf dem StarterKit gemacht, wenn alle Kontakt haben geht zumindest alles beim einschalten glatt, wie gesagt sehr komisch das alles.

Eine vage Idee:

Wenn ich das richtig im Kopf habe, muss man dem IOW beim Initialisieren sagen, welche Ports als Eingang und welche als Ausgang verwendet werden sollen. mAirList macht das, indem es alle in der Config mit Befehlen versehenen Ports als Input deklariert, alle anderen als Output. Vielleicht liegt hier das Problem?

Genau durchlesen konnte ich mir den Thread noch nicht, weil ich letzte Woche nicht da war.

wen dem so ist, dürfte das eigentlich kein Problem darstellen, da Input und Output ja getrennte Leitungen sind. Die einzelnen IOW Ports zum abfeuern der Carts habe ich in der Config unter Fernsteuerung eingetragen, die Lampen steuere ich dann über die Notificationsscripts. oncartplayer und oncartplayerstop. Die Inputs liegen auf den Ports 0 - 8 und die Outputs auf 23 -31.