# Lesen von Signalen ohne Warten (#SIGNAL READ)

## Versionshinweis

Diese Funktionalität ist verfügbar ab der Version V2.11.2820.00

Der NC-Befehl #WAIT stoppt die Programmdekodierung des Interpreters, falls das abgefragte Signal nicht vorhanden ist. Somit ist eine weitere Programmabarbeitung blockiert, falls das Signal nie eintrifft.

Der NC-Befehl #SIGNAL READ ermöglicht flexible Programmabläufe ohne Programmstopp. Bei diesem Befehl wird das Ergebnis des Signal-Lesevorgangs in der kanalspezifischen Variable V.G.SIGNAL_READ gespeichert. Die anschließende Auswertung dieser Variable erlaubt dann eine entsprechende Reaktion.

Bzgl. dem Verbrauch von Signalen sowie der Programmierung und Nutzung von Parametern und Broadcast-Signalen verhält sich #SIGNAL READ analog zu #WAIT.

## Achtung

Der NC-Befehl #SIGNAL READ ist nur auf Interpreterebene zulässig, Ein #SIGNAL READ SYN [..] ist nicht erlaubt und wird durch eine Fehlermeldung angezeigt

Der Status des Lesezugriffs von #SIGNAL READ wird durch die Variable V.G.SIGNAL_READ angezeigt. Sie ist TRUE, wenn das entsprechende Signal vorhanden war. Der Wert der Variable bleibt bis zum nächsten Lesezugriff mit #SIGNAL READ erhalten.

V.G.SIGNAL_READ | Status des Lesezugriffs von #SIGNAL READ TRUE: Signal vorhanden und gelesen FALSE: Kein Signal vorhanden, Default

Syntax:
#SIGNAL READ [ ID=.. { P[<idx>] = <param> } { CH=.. } ]

ID=.. | Nummer des Signals, das gelesen werden soll. Positive Ganzzahl.
P[<idx>] = <param> | Signalparameter als Realzahl. Beim Lesen von Signalen können auch Parameter durch den Signalsender mit übertragen werden. Die Parameter können dabei auch von unterschiedlichen Kanälen stammen. Sie werden den angegebenen Parametern bzw. Variablen (<param>) zugewiesen.

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

Nach vollständiger Quittierung aller notwendigen Signale wird geprüft, ob alle programmierten Parameter geschrieben worden sind. Ist dies nicht der Fall, so wird mit einer Fehlermeldung angehalten

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

(1) siehe [6]-6.45

(2) siehe [6]-2.4

## Programmierbeispiel

Lesen von Signalen und Abfrage des Ergebnisses

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

:

N100 #SIGNAL READ [ID=4711]

N110 $IF V.G.SIGNAL_READ == TRUE

N120 LL UP1

N130 $ELSE

N140 #ERROR [..]

N150 $ENDIF

:

(Wartemarke 815, Synchronisation auf Interpreter-Ebene,
SIGNAL 815 von Kanal 1)

:

N100 #SIGNAL READ [ID=815 CH=1]

N110 $IF V.G.SIGNAL_READ == TRUE

N120 LL UP1

N130 $ELSE

N140 L Init.nc

N150 $ENDIF

:

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

(1.Signalparameter V.P.SIGNAL, 2.Signalparameter P200)

:

N100 #SIGNAL READ [ID=911 P[0]=V.P.SIGNAL P[1]=P200 CH=3]

N110 $IF V.G.SIGNAL_READ == TRUE

N120 P20 = [10 * P200]-V.P.SIGNAL

N130 $ELSE

N140 P20 = 0

N150 $ENDIF