Halloween steht vor der Tür (sheduler/Ablaufsteuerung) für Animation

Begonnen von Holger, 09. November 2010, 08:40:35

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

Holger

Hi,

jau naechstes Jahr Halloween wollen wir die ein oder andere Sache Animieren mit Pneumatik/Ventilen :)
Im Prinzip ist es dann so das Ausgaenge z.B. Ventiele oder Sounds steuern.

Dafuer suche ich noch eine gute Moeglichkeit eine Ablaufsteuerung zu Realisieren. So das ohne Trigger (Bewegungsmelder/Lichtschranke) bestimmte Ausgänge gesetzt sind.
Theme Sound evtl. Licht gedimmt.

Sobald "Trigger" gesetzt wird geht es in den "Scare" mode in dem dann verschiedenes Ablaufen soll. z.B. erst Zylinder 1 rein/raus/rein/raus/reinraus dabei Flacker licht und sound 1 dann nach einer weile Zylinder 2 mit Sound 2 und Licht voll an Strobe.

Meine erste Idee war dafuer ST zu nehmen (nur vereinfacht dargestellt)

if scare THEN
IF scaretime > 30 THEN
scare := false:
ELSIF scaretime > 20 THEN

ELSIF scaretime > 10 THEN

ELSIF scaretime > 5 THEN

ELSE THEN
scaretime := 0;
themesound1 := TRUE;
sound1 := false;
sound2 := false;
zylinder1 := false;
zylinder2 := false;
END_IF



Aber dann muss man immer im naechsten ELSEIF die Werte des vorheriegen Schrittes zuruecksetzen, besser wuerde es mir gefallen wenn es einen Baustein oder so geben wuerde den man dann quasi mitgeben kann was auf welchen Ausgang passieren soll und wie lange. Sowas wie die Zeitschaltuhren nur auf Sekundenbasis.
Programmierung der Art: Ausgang1 soll TRUE sein von 10s bis 15s, 20s - 25s, 30s - 45s


Gibt es sowas schon ? Ideen ?



Gruss
   Holger

Tom

Vorschlag: Nimm ST und ändere es etwas ab. Am Anfang alles zurücksetzen und dann mit einer CASE-Verzweigung ansteuern. IF-THEN geht natürlich auch.


sound1 := FALSE;
sound2 := FALSE;
zylinder1 := FALSE;
zylinder2 := FALSE;

IF NOT scare RETURN;

CASE scaretime OF

   1 .. 5:    sound1 := TRUE;
           zylinder1 := TRUE;

   6 .. 10:   sound2 := TRUE;
            zylinder1 := TRUE;

  11 .. 20: sound2 := TRUE;
            zylinder2 := TRUE;

END_CASE;






Tom

Oder, um die Idee mit dem Baustein aufzugreifen: Bastle einen FB, welchem du z.B. 6 Schaltpunkte übergibst un der einen Ausgang entsprechend schaltet. So könnte es gehen (nicht getestet):



VAR_INPUT
start: BOOL;
ein1: DWORD;
aus1: DWORD;
ein2: DWORD;
aus2: DWORD;
ein3: DWORD;
aus3: DWORD;
END_VAR

VAR_OUTPUT
ausg: BOOL;
END_VAR

VAR
is_started: BOOL;
time: DWORD;
END_VAR





IF NOT start THEN
is_started := FALSE;
ausg := FALSE;
RETURN;
END_IF;

tx := T_PLC_MS()/1000; (*Millisek. > Sek.*)

IF NOT is_started THEN
start_time := tx;
is_started := TRUE;
END_IF;

time := tx - start_time;

IF ein1 <= time AND time <= aus1 OR ein2 <= time AND time <= aus2 OR ein3 <= time AND time <= aus3 THEN
ausg := TRUE;
ELSE
ausg := FALSE;
END_IF;




Solange start = TRUE wird der Baustein bearbeitet. Man könnte es auch umschreiben und eine Flanke verwenden.