Senden von Signalen (#SIGNAL)
Grundsätzlich wird zwischen Signalen ohne Empfängerangabe (s.g. Broadcast-Signalen) und Standardsignalen, bei denen explizit ein Kanal als Empfänger angegeben ist, unterschieden.
Die Signale sind durch eine eindeutige Nummer identifiziert, wobei das Senden von Signalen mit gleichen Signalnummern erlaubt ist.
Bei Standardsignalen sind explizit ein oder mehrere NC-Kanäle als Empfänger anzugeben. Werden bei einem Signal mehrere Empfänger angegeben, so wirkt dies wie das mehrfache Senden der gleichen Signale an die einzelnen Kanäle.
Beispiel
Senden von Signalen
#SIGNAL [ID4711 CH1 CH2 CH3] |
wirkt wie |
#SIGNAL [ID4711 CH1] |
#SIGNAL [ID4711 CH2] |
#SIGNAL [ID4711 CH3] |
Diese Signale sind nur für ein #WAIT des adressierten Empfängers gültig und werden ohne Angabe des Verbrauchszählers COUNT bei einem #WAIT des Empfängerkanals verbraucht. Wird ein Verbrauchszähler COUNT angegeben, so sind genauso viele #WAIT-Anforderungen bis zum Verbrauchen des Signals möglich.
Im Unterschied dazu können Broadcast-Signale durch ein #WAIT eines beliebigen Kanals empfangen werden.
Wird bei Broadcast-Signalen kein Verbrauchszähler COUNT angegeben, so werden diese durch ein #WAIT nicht verbraucht. D.h. sie bleiben bis zum expliziten Löschen (s. #SIGNAL REMOVE) bestehen. Wird ein Verbrauchszähler COUNT angegeben, so sind, wie bei Standardsignalen, genauso viele #WAIT-Anforderungen bis zum Verbrauchen des Broadcast-Signals möglich.
Syntax |
#SIGNAL [<Modus>] [ ID=.. [COUNT=..] { P[<idx>]=<param> } { CH=.. } [KEEP_AT_RESET] ] |
<Modus> | Synchronisationsart. Zulässige Kennungen: ---: Synchronisation auf Decoder-Ebene (Grundeinstellung). SYN: Synchronisation auf Interpolator-Ebene. |
ID=.. | Signalnummer, muss systemweit eindeutig sein. Positive Ganzzahl. |
COUNT=.. | Verbrauchszähler, definiert wie oft ein Signal mit #WAIT abgerufen werden kann. Positive Ganzzahl. |
P[<idx>] = <param> | Signalparameter <idx>: Bereich für die maximal mögliche Parameteranzahl: 0 .. 11 (max. Anzahl Signalparameter (1)) |
CH=.. | Nummer des Kanals, für den das Signal bestimmt ist. Wird keine Kanalnummer angegeben, so wird ein s.g. Broadcast-Signal an alle verfügbaren Signalempfänger des Systems gesendet. |
KEEP_AT_RESET | Markiertes Signal (Standardsignal mit Empfänger) wird bei Reset nicht entfernt. Damit bleibt das Signal auch nach Reset des sendenden Kanals erhalten, bis es durch ein #WAIT mit der richtigen ID verbraucht oder durch explizite Programmierung (#SIGNAL REMOVE) entfernt wird |
(1) siehe [6]-6.45, (2) siehe [6]-2.4
Programmierbeispiel
Senden von Signalen
(Signal 812, Synchronisation auf DEC-Ebene, Broadcast)
N500 #SIGNAL [ID812]
(Signal 4711, Synchronisation auf DEC-Ebene, an Kanal 2)
N100 #SIGNAL [ ID4711 CH2 ]
(Signal 4711, Synchronisation auf DEC-Ebene,
fuer 10 #WAIT-Abfragen, Broadcast)
N100 #SIGNAL [ ID4711 COUNT10 ]
(Signal 815, Synchronisation auf Interpolator-Ebene,
zweimal an Kanal 2 und einmal an 3)
N200 #SIGNAL SYN [ ID815 CH2 CH2 CH3 ]
(Signal 911, Synchronisation auf Decoder-Ebene, an Kanal 3)
(1.Signalparameter V.A.MEAS.ACS.VALUE.X, 2.Signalparameter P200,
3.Signalparameter 94.4)
N260 P200 = 924
N300 #SIGNAL [ IDP100 CH3 P[0]=V.A.MEAS.ACS.VALUE.X P[1]=P200 P[2]=94.4 ]