[code]procedure OnLoad;
begin
EnableTimer(1000);
end;
procedure OnTimer;
begin
if Encoder.GetConnections.GetItem(1).GetState = ecsConnected then begin
ExecuteCommand(‘AUTOMATION 1 ON’);
ExecuteCommand(‘AUTOMATION 1 PLAY’);
ExecuteCommand(‘AUTOMATION 1 OFF’);
end
if CurrentPlaybackControl.GetAutomation = false then begin
...
end;
Alternativ in deinem Script in der Encoder.GetConnections Abfrage den Timer disablen. Dann wird’s auch nur einmal ausgeführt.
Bei Encoder disconnect dann den Timer wieder auf Enable setzen.
Ich kenne allerdings nicht den Abfragewert für das Disconneted - ecsConnected <=> ecsDisconnected ???
Demnach würde es dann so aussehen?
[code]procedure OnLoad;
begin
EnableTimer(1000);
end;
procedure OnTimer;
begin
if Encoder.GetConnections.GetItem(1).GetState = ecsConnected then begin
ExecuteCommand(‘AUTOMATION 1 ON’);
ExecuteCommand(‘AUTOMATION 1 PLAY’);
ExecuteCommand(‘AUTOMATION 1 OFF’);
DisableTimer;
end
else if Encoder.GetConnections.GetItem(1).GetState = ecsDisconnected then begin
EnableTimer(1000);
end;
Hi, da ich den mAirList Encoder nicht benutze, weiss ich jetzt auch nicht ob “ecsDisconnected” richtig ist.
Vom Ansatz her ist das Script richtig. (Schon getestet ob es so funzt?)
Eventuell gibt die Scriptinghelp dazu Aufschluss, ansonsten muss der Doktor die Antwort geben.
Nun das Script funktioniert teilweise, auch wenn ich den Wert “Disconnected” richtig erraten habe
Das Problem in dem Script ist, dass nach der ersten If-Schleife der Timer deaktiviert wird und somit das Script beendet ist. Den Timer darf ich eigentlichnie stoppen, sondern muß nach dem Start der Automation usw. das Scripot in eine Warteschleife schicken, bis es eben merkt, dass der Encoder wieder getrennt ist.
Nach dem Einbau einer Repeat-Schleife, die den Encoder überwacht funktioniert das Script fehlerfrei.
[code]procedure OnLoad;
begin
EnableTimer(1000);
end;
procedure OnTimer;
begin
if Encoder.GetConnections.GetItem(1).GetState = ecsConnected then begin
ExecuteCommand(‘AUTOMATION 1 ON’);
ExecuteCommand(‘AUTOMATION 1 PLAY’);
ExecuteCommand(‘AUTOMATION 1 OFF’);
repeat;
until Encoder.GetConnections.GetItem(1).GetState = ecsDisconnected;
end
Ganz, ganz schlechte Idee! Damit schickst du das Script in eine Endlosschleife, in der unaufhörlich der Zustand der Encoder-Verbindung abgefragt wird, ohne Pause dazwischen. Achte mal auf die CPU-Auslastung von mAirList, die dürfte kräftig nach oben gehen!
Ich würde das folgendermaßen lösen: Mach dir eine globale Variable “wasDisconnected” vom Typ boolean, in der gespeichert ist, ob die Verbindung zwischenzeitlich getrennt war. Nur wenn das der Fall ist wird das Script im Timer aktiv.
var
wasDisconnected: boolean;
procedure OnLoad;
begin
wasDisconnected := true;
EnableTimer(1000);
end;
procedure OnTimer;
begin
if wasDisconnected and (Encoder.GetConnections.GetItem(1).GetState = ecsConnected) then begin
ExecuteCommand('AUTOMATION 1 ON');
ExecuteCommand('AUTOMATION 1 PLAY');
ExecuteCommand('AUTOMATION 1 OFF');
wasDisconnected := false;
end
else if Encoder.GetConnections.GetItem(1).GetState = ecsDisconnected then
wasDisconnected := true;
end;
begin
end.
Ich weiß das Thema ist schon sehr alt aber sollte ja noch funktionieren. Ich habe auch nach so etwas gesucht. Ist dieser Code schon fertig oder muss man da vorher noch diese Variable erstellen? Wenn ja bitte wie soll das aussehen?
Wäre für eine Hilfe echt Dankbar.