IO Warrior, Blinken....

Hallo,

gibt es irgend eine möglichkeit ein Script zu schreiben dass bei folgendes bewirkt?

Version: Mairlist 4

Player1-0:

Play: Port31 true
Stop: Port31 false
EOF: Port31 Blinken

Habe leider keine große erfahrung mit Scripts.

vieleicht klann mir da jamend helfen.

Gruß Rene

Wende dich mal an Timo, der hat sowas gerade unter meiner Anleitung gebaut.

Hi,

ich schreibe Dir später/morgen das Script um. Am Blinken bin ich noch dran.
Eine programmiertechnisch noch unschicke Blinkvariante kann ich Dur schon liefern, die saubere von Torben dauert noch etwas…

Ich danke dir

dann bis morgen…

Gruß Rene

Hi Rene,

das hier ist ungetestet…

[code]procedure OnPlayerStart(PlayerControl: IPlayerControl; Item: IPlaylistItem);
begin
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
IOWarriorRemote(0).SetPort(31, true);
end;
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);

begin
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
IOWarriorRemote(0).SetPort(31, false);
end;
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; PlayerIndex: integer);
var
i : integer;
begin
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(31, false);

end;
end;

begin
end.
[/code]

Hi Timo,
das geht leider nicht, da kommen fehlermeldungen:

24.07.2012 12:41:48 Fehler Fehler beim Laden des Benachrichtigungs-Scripts C:\MLScripts\Player1.mls: [Error] (3:7): Unknown identifier ‘PlaylistIndex’

Aber nur bei Player Start

[quote author=Timo link=topic=5974.msg42267#msg42267 date=1343126074]
Hi Rene,

das hier ist ungetestet…

Alles andere scheint zu fintionieren…

Gruß Rene

Habs hinbekommen, haben ein paar parameter in der 3. Zeile gefehlt.

Danke erst mal.

Gruß Rene

PS: Gibt es irgendwo eine Liste mit befehlen und deren Auswirkungen für das Scriptschreiben??

Gruß Rene

Auch wenn jetzt das ganze fuktioniert kommen komischer weise noch nen hauffen fehler:

24.07.2012 12:48:15 Fehler Runtime error “List index out of bounds (4)” in notification script C:\MLScripts\Player1.mls, handling message: PLAYERCONTROL_START 2200861863EB407A 0 0000 0000 ?
24.07.2012 12:48:18 Fehler Runtime error “List index out of bounds (4)” in notification script C:\MLScripts\Player1.mls, handling message: PLAYERCONTROL_START 0E7AD23456716F08 0 0000 0001 ?
24.07.2012 12:48:39 Fehler Runtime error “List index out of bounds (4)” in notification script C:\MLScripts\Player1.mls, handling message: PLAYERCONTROL_START 2200861863EB407A 0 0000 0000 ?
24.07.2012 12:48:48 Fehler Runtime error “List index out of bounds (4)” in notification script C:\MLScripts\Player1.mls, handling message: PLAYERCONTROL_START 0E7AD23456716F08 0 0000 0001 ?
24.07.2012 12:49:55 Fehler Runtime error “List index out of bounds (4)” in notification script C:\MLScripts\Player1.mls, handling message: PLAYERCONTROL_EOFWARNING 0E7AD23456716F08 0 0000 0001

Wie bekomme ich die denn weg??

hat jemand eine Idee?

poste mal bitte Dein geändertes Script

Hier das geänderte Script…

[code]procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, true);
end;
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);

begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, false);
end;
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; Duration: TTimeValue; PlayerIndex: integer);
var
i : integer;
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, true);
for i := 1 to 5000 do;
Sleep(750);
IOWarriorRemote(0).SetPort(30, false);

end;
end;

begin
end.
[/code]

Lass mal testweise das EOF-Zeugs weg:

[code]procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, true);
end;
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);

begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, false);
end;
end;

begin
end.[/code]

Kommt immr noch der gleiche fehler…

24.07.2012 14:16:18 Fehler Runtime error “List index out of bounds (4)” in notification script C:\MLScripts\Playertest.mls, handling message: PLAYERCONTROL_START 0E7AD23456716F08 0 0000 0001 ?

Hi Rene,

nimm das

Duration: TTimeValue;

raus.

Gruss:
-Serge-

Also das mit dem Sleep ist eine ganz dumme Sache, weil nämlich die gesamte Scriptbearbeitung (auch von anderen Notification Scripts!) so lange hängt.

Timo, was ist denn aus der Sache mit OnTimer geworden, die ich dir geschickt habe?

Hier nochmal für die anderen:

const
  PORT_COUNT = 40;

var
  PortFlashing: array[0..PORT-COUNT-1] of boolean;
  FlashCounter: integer;

procedure OnTimer;
var
  i: integer;
begin
  inc(FlashTimer);
  if FlashCounter = 2 then FlashCounter := 0;

  for i := 0 to PORT_COUNT - 1 do
    if PortFlashing[i] then
      IOWarriorRemote(0).SetPort(i, FlashCounter = 1);
end;

procedure OnLoad;
var
  i: integer;
begin
  for i := 0 to PORT_COUNT - 1 do
    PortFlashing[i] := false;
  SetTimer(500);
end;

begin
end.

Einfach PortFlashing[nummer] auf true setzen, dann blinkt es.

Lässt sich in andere Scripts integrieren.

Danke Radiorom, funktioniert super…

@Torben: Ich hab mir das mal angescheut, blick nicht ganz durch wie das ganze funtioniert. Wo gebe ich den port an der blinken soll und wie baue ich das ganze in mein script ein.

Gruß Rene

Habe das ganze versucht blos bringt er mir den Fehler
24.07.2012 15:31:58 Fehler Fehler beim Laden des Benachrichtigungs-Scripts C:\MLScripts\Playertest.mls: [Error] (12:7): Unknown identifier ‘FlashTimer’

Hier das Script:

[code]const
PORT_COUNT = 32;

var
Portflashing: array[0…PORT_COUNT-1] of boolean;
FlashCounter: integer;

procedure OnTimer;
var
i: integer;
begin
inc(FlashTimer);
if FlashCounter = 2 then FlashCounter := 0;

for i := 0 to PORT_COUNT -1 do
if PortFlashing[i] then
IOWarriorRemote(0).SetPort(i, FlashCounter = 1);
end;

procedure OnLoad;
var
i: interger;
begin
for i:= 0 to PORT_COUNT -1 do
Portflashing[i] := false;
SetTimer(500);
end;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, true);
end;
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
IOWarriorRemote(0).SetPort(31, true);
end;
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);

begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, false);
end;
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
IOWarriorRemote(0).SetPort(31, false);
end;
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
var
i : integer;
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
PortFlashing[30] := true;
end;

if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
PortFlashing[31] := true;
end;
end;

begin
end.

[/code]

@ Torben: hatte noch keine zeit, das zu testen…

Sorry, mach aus FlashTimer mal FlashCounter. Tippfehler.

Ich hatte vergessen zu erwähnen, dass das Script aus einer E-Mail an Timo stammt und nicht getestet ist.

Hi Torben,

auch dann will es nich gehen, hab ich das genaz eigentlich richtig eingebaut??

Eskommt nun dieser Fehler:

25.07.2012 10:52:06 Fehler Fehler beim Laden des Benachrichtigungs-Scripts C:\MLScripts\Playertest.mls: [Error] (12:20): Type mismatch

[code]const
PORT_COUNT = 32;

var
Portflashing: array[0…PORT_COUNT-1] of boolean;
FlashCounter: integer;

procedure OnTimer;
var
i: integer;
begin
inc(FlashCounter);
if FlashCounter = 2 then FlashCounter := 0;

for i := 0 to PORT_COUNT -1 do
if PortFlashing[i] then
IOWarriorRemote(0).SetPort(i, FlashCounter = 1);
end;

procedure OnLoad;
var
i: interger;
begin
for i:= 0 to PORT_COUNT -1 do
Portflashing[i] := false;
SetTimer(500);
end;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, true);
end;
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
IOWarriorRemote(0).SetPort(31, true);
end;
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);

begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
IOWarriorRemote(0).SetPort(30, false);
end;
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
IOWarriorRemote(0).SetPort(31, false);
end;
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
var
i : integer;
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
PortFlashing[30] = true;
end;

if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
PortFlashing[31] = true;
end;
end;

begin
end.

[/code]

Hi Torben,

Ich habe es hinbekommen, mit viel Spielerei…

hier das Fertige Script:

[code]const
PORT_COUNT = 32;

var
Portflashing: array[0…PORT_COUNT-1] of boolean;
FlashCounter: integer;

procedure OnTimer;
var
i: integer;
begin
FlashCounter:= FlashCounter+1;
if FlashCounter = 2 then FlashCounter := 0;

for i := 0 to PORT_COUNT -1 do
if PortFlashing[i] then
IOWarriorRemote(0).SetPort(i, FlashCounter = 1);
end;

procedure OnLoad;
var
i: integer;
begin
for i:= 0 to PORT_COUNT -1 do
Portflashing[i] := false;
EnableTimer(500);
end;

procedure OnPlayerEOFWarning(PlaylistIndex: integer; PlayerIndex: integer);
var
i : integer;
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
PortFlashing[18] := true;
end;

if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
PortFlashing[19] := true;
end;
end;

procedure OnPlayerStart(PlaylistIndex: integer; PlayerIndex: integer; Item: IPlaylistItem);
begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
PortFlashing[18] := false;
IOWarriorRemote(0).SetPort(18, true);
end;
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
PortFlashing[19] := false;
IOWarriorRemote(0).SetPort(19, true);
end;
end;

procedure OnPlayerStop(PlaylistIndex: integer; PlayerIndex: integer; Duration: TTimeValue; Item: IPlaylistItem);

begin
if (PlaylistIndex= 0) and (PlayerIndex= 0) then begin
PortFlashing[18] := false;
IOWarriorRemote(0).SetPort(18, false);
end;
if (PlaylistIndex= 0) and (PlayerIndex= 1) then begin
PortFlashing[19] := false;
IOWarriorRemote(0).SetPort(19, false);
end;
end;

begin
end.

[/code]

Gibt es eigentlich irgendwie eine Übersicht der Scriptbefehle??

Würde auch gerne ein wenig rumprobieren und ein paar Fuktionen einbauen. Aber dazu muss man erst mal wissen was es für Befehle gibt und was Sie zurückliefern.

Gruß Rene