Warten auf Signale (#WAIT)

Entsprechend dem Versenden von Signalen kann durch den #WAIT-Befehl auf ein entsprechendes #SIGNAL gewartet werden. Ein Broadcast-WAIT wartet dabei nur auf ein Broadcast-SIGNAL mit gleicher Signalnummer. Jedes #WAIT verbraucht jeweils ein eigenes #SIGNAL.

Syntax:

#WAIT [<Modus>] [ ID=.. { P[<idx>] = <param> } { CH=.. } [ AHEAD ] ]

<Modus>

Synchronisationsart. Zulässige Kennungen:

---: Synchronisation auf Decoder-Ebene (Grundeinstellung). Diese Synchronisation ist z.B. erforderlich, wenn auf Parameter oder Variablen synchronisiert werden soll.

SYN: Synchronisation auf Interpolator-Ebene. Diese Synchronisation ist bei Echtzeitanforderungen notwendig, z.B. Synchronisation zweier Bearbeitungseinheiten einer Mehrständermaschine

ID=..

Nummer des Signals, auf das gewartet wird. Positive Ganzzahl.

P[<idx>] = <param>

Signalparameter als Realzahl.
Beim Senden von Signalen können Signalparameter an den mit #WAIT wartenden Empfänger übergeben werden. Sie können beim erfolgreichen #WAIT ausgelesen werden, wobei der Wert der Variablen (<param>) zugewiesen wird.

(Achtung: In der Gleichung wird der linke Wert dem rechten Wert zugewiesen). Beim Lesen des Signalparameters wird überprüft, ob der übertragene Signalparameter an Index <idx> in die „Zielvariable “ (<param>) übernommen wurde. Ist dies nicht der Fall, so wird der Fehler ID 21549 ausgegeben.

<idx>: Bereich für die maximal mögliche Parameteranzahl: 0 .. 11 (max. Anzahl Signalparameter (1))

Achtung

attention

Signalparameter können nur auf Decoder-Ebene ausgewertet werden, d.h. z.B. ein #WAIT SYN [... P[0] = ... ] ist nicht erlaubt.

CH=..

Nummer des Kanals, von dem ein Signal erwartet wird.
1...max. Anzahl Kanäle (2)

Wird keine Kanalnummer angegeben, so wird auf ein Broadcast-Signal eines beliebigen Teilnehmers gewartet.

AHEAD

Kennung für die Ausführung eines „fliegenden“ WAIT. Dient der Minimierung von Wartezeiten aufgrund der Pufferwirkung des Look-Ahead (bis zu 70 Sätze im Voraus). Bei Synchronisation auf Interpolator-Ebene sofortige Ausgabe von WAIT, damit bei der nachfolgenden Prüfung auf Quittierung (SIGNAL) fliegend, d.h. ohne anzuhalten sofort in den nächsten Bewegungssatz gewechselt werden kann.

(1) siehe [6]-6.45

(2) siehe [6]-2.4

Programmierbeispiel

prg_example

Warten auf Signale

(Wartemarke 4711, Synchronisation auf DEC-Ebene, SIGNAL 4711 von
beliebigem Kanal)

N200 #WAIT [ID4711]

(Wartemarke 815, Synchronisation auf Interpolator-Ebene,
SIGNAL 815 von Kanal 2 und 3)

N100 #WAIT SYN [ID815 CH2 CH3]

(Wartemarke 911, Synchronisation auf Decoder-Ebene, von Kanal 3)

N250 P100 = 911

( P[0] wird V.P.SIGNAL , P[1] wird P200 zugewiesen)

N300 #WAIT [IDP100 P[0]=V.P.SIGNAL P[1]=P200 CH3]

(Nachfolgende Berechnung findet erst nach Eintreffen)
(des Signals statt)

N350 P20 = 10 * P200

Programmierbeispiel

prg_example

Warten auf Signale mit Übernahme von Parametern (in Kanal 3):

%channel1

N10 #SIGNAL [ID 110014 P[0] = 1234 CH3]

N20 M30

%channel2

N10 #SIGNAL [ID 110014 P[1] = 200 CH3]

N20 M30

%channel3

N10 P1 = 1 (Speichert Wert von Kanal 1

N20 P2 = 1 (Speichert Wert von Kanal 2

N30 XP1 YP2

N40 #WAIT [ID 110014 P[0] = P1 P[1] = P2 CH1 CH2]

N50 XP1 YP2

N60 M30