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. (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
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. 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
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
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