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