Allgemeines
Anwendungsgebiet: | (optimierte) Ereignissteuerung, siehe "Ereignisgesteuerte Verarbeitung (Eventing)" |
Makrotyp: | S-Typ, MF-Format 1: Standardform/L-/E-Form; siehe "S-Typ-Makroaufrufe" |
Forward Eventing (FEV) ist eine optimierte Form der synchronen Ereignissteuerung (synchrones Eventing). FEV vermeidet für wiederholte POSSIG- bzw. SOLSIG-Makroaufrufe in einem Programm die wiederholte Validation der angegebenen Operanden. Stattdessen wird eine Ereignisliste EVENTLST angelegt und z.B. für das Senden von Signalen zu einer Ereigniskennung (POSSIG-Funktion) einmalig ein POSSIG-Eintrag eingetragen. Im weiteren Programmverlauf wird bei der (realen) Sendeanforderung nur noch auf diesen Eintrag Bezug genommen (RPOFEI). Der Eintrag kann explizit wieder gelöscht werden (DELFEI).
Pro Teilnehmer können maximal 2047 Einträge in der EVENTLST erzeugt werden. Die Task des Aufrufers muss der Ereigniskennung zugeordnet sein (ENAEI).
Makrobeschreibung
Der Makro DPOFEI erzeugt einen POSSIG-Eintrag in der Ereignisliste EVENTLST. Die benötigten Angaben werden in den Eintrag übernommen (Name der Ereigniskennung oder Kurzkennung, Postcode, maximale Abholzeit für das Signal (Ereignis)). Dem Aufrufer wird eine Referenznummer für den Eintrag übergeben.
Es ist möglich, mehrere aufeinander folgende Aufrufe DPOFEI miteinander zu verketten. Die Kette kann auch mit dem Makro DSOFEI beendet werden. Bei der Verkettung ist zu beachten:
DSOFEI muss immer als letzter Makro in der Kette angegeben werden.
Der erste fehlerhafte Makroaufruf beendet die Kette; schon erzeugte Einträge werden wieder gelöscht.
Der Operand REFNUM (für die Übergabe der Referenznummer) kann nur im ersten Makroaufruf der Kette angegeben werden.
Es können maximal 5 Makroaufrufe miteinander verkettet werden. Alle Makros der Kette müssen dasselbe Schnittstellenformat benutzen.
Makroaufrufformat und Operandenbeschreibung
DPOFEI |
{ {EINAME=name / EINAMAD={adr / (r)} [,EINAMLN=länge] },SCOPE={LOCAL / GROUP / USER_GROUP / GLOBAL} / EIID={adr / (r)}} [,REFNUM=adr / (r)] [, {SPOSTAD={adr / (r)} / SPOSTR=r}] ,SPOSTL=1 / 2 ,CONTINU=NO / YES / DSOFEI [,LIFETIM=sec / (r)] [,PARMOD=24 / 31] [,MF=L / (E,..)] |
EINAME=
bezeichnet den Namen der Ereigniskennung, der sich der Aufrufer mit dem Makro ENAEI zugeordnet hat (Verbindung mit dem Operanden SCOPE beachten).
name
Name der Ereigniskennung
EINAMAD=
bezeichnet das Feld, das den Namen der Ereigniskennung enthält (Verbindung mit dem Operanden SCOPE beachten).
adr
symbolische Adresse des Feldes, das den Namen der Ereigniskennung enthält
(r)
r = Register mit dem Adresswert adr
EINAMLN=
bezeichnet die Länge des Namens der Ereigniskennung.
Bei Nichtangabe wird das Längenattribut des bei EINAMAD=adr angegebenen Feldes angenommen bzw. 54 Byte, wenn EINAMAD=(r) angegeben wurde.
länge
Länge des Namens in Byte
SCOPE=
beschreibt den Geltungsbereich (Teilnehmerkreis) für die Ereigniskennung. Der Name der Ereigniskennung ist nur in Verbindung mit dem Geltungsbereich eindeutig. SCOPE muss immer in Verbindung mit EINAME bzw. EINAMAD spezifiziert werden.
LOCAL
Die Ereigniskennung wird nur von der Task des Aufrufers benutzt.
GROUP
Teilnehmer sind alle Tasks unter der Benutzerkennung des Aufrufers.
USER_GROUP
Teilnehmer können alle Tasks sein, deren Benutzerkennungen der gleichen Benutzergruppe angehören wie die Benutzerkennung des einrichtenden Teilnehmers.
Der Operandenwert setzt die Existenz von Benutzergruppen voraus und kann daher nur angegeben werden, wenn die Funktionseinheit SRPM des Software-Produkts SE-COS im System vorhanden ist. Vor einem Makroaufruf mit SCOPE=USER_GROUP muss deshalb mit dem Makro GETUGR (siehe Handbuch „SECOS“ [14]) geprüft werden, ob SRPM zur Verfügung steht; abhängig vom Ergebnis (Returncode) ist im Programm zu reagieren.
GLOBAL
Teilnehmer sind alle Tasks im System.
EIID=
bezeichnet die Kurzkennung für die Ereigniskennung.
Die Kurzkennung wird dem Anwender während der Ausführung des Makros ENAEI übergeben. Sie bezeichnet die Ereigniskennung eindeutig; ihre Verwendung beschleunigt die Makroausführung.
adr
symbolische Adresse eines 4 Byte langen Feldes, das die Kurzkennung enthält
(r)
r = Register mit dem Adresswert adr
REFNUM=
bezeichnet die Adresse eines Feldes, in das dem Aufrufer eine Referenznummer für den Eintrag in der EVENTLST übergeben wird.
Feldlänge = 4 Byte; Ausrichtung auf Wortgrenze.
adr
symbolische Adresse des Feldes, in das die Referenznummer übergeben werden soll
(r)
r = Register mit dem Adresswert adr
SPOSTAD=
bezeichnet ein Feld mit einem Postcode, der dem Empfänger des Signals (Ereignisses) übergeben werden soll (siehe Makro SOLSIG bzw. DSOFEI). Der Postcode ist 4 bzw.
8 Byte lang.
Feldlänge = 4 bzw. 8 Byte; Ausrichtung auf Wortgrenze.
Ein Postcode der Form X'00000000' wird nicht übertragen. Der Operand RPOSTR bietet dieselbe Funktion mit schnellerer Verarbeitung.
adr
symbolische Adresse des Feldes, das den Postcode enthält
(r)
r = Register mit dem Adresswert adr
SPOSTR=
bezeichnet ein Register, das den Postcode (direkt) enthält. Bei 2 Worten (8 Byte) Post Code muss das dem angegebenen Register folgende Register (der Zahl nach) das zweite Wort des Post Codes enthalten. Post Code X'00000000' wird nicht übertragen.
r
Register mit dem Postcode
SPOSTL=
bezeichnet die Länge des Post Codes in Worten.
1
Der Post Code ist 1 Wort (4 Byte) lang.
2
Der Post Code ist 2 Worte lang.
CONTINU=
ermöglicht die Verkettung des Makros DPOFEI mit weiteren, unmittelbar folgenden Aufrufen DPOFEI oder DSOFEI.
NO
Es folgt kein weiterer Aufruf DPOFEI oder DSOFEI.
YES
Es folgt ein Aufruf des Makros DPOFEI.
DSOFEI
Es folgt ein Aufruf des Makros DSOFEI.
LIFETIM=
ermöglicht die Angabe eines Zeitintervalls (in Sekunden), in dem das signalisierte Ereignis abgeholt werden muss (Makro SOLSIG oder DSOFEI). Nach Ablauf des Zeitintervalls wird das Ereignis aus der Ereigniswarteschlange entfernt. Die Ausführung erfolgt mit einer Genauigkeit von +10 Sekunden.
sec
Zeitangabe in Sekunden; 1<= sec <= 43200. Voreinstellung: sec = 600.
(r)
r = Register, das den Wert für sec enthält.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe „S-Typ-Makroaufrufe“. Die gültigen MF-Werte sind zu Beginn der Makrobeschreibung bei „Makrotyp“ angegeben und aus dem Aufrufformat ersichtlich.
PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit- oder die 31-Bit-Schnittstelle generiert.
Wenn PARMOD nicht spezifiziert wird, erfolgt die Makroauflösung entsprechend der Angabe für den Makro GPARMOD oder der Voreinstellung für den Assembler (= 24-Bit-Schnittstelle).
24
Die 24-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).
31
Die 31-Bit-Schnittstelle wird generiert. Datenlisten und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB).
Rückinformation und Fehleranzeigen
Während der Makrobearbeitung enthält Register R1 den Adresswert für die Operandenliste; Register R0 wird überschrieben.
R15:
+---------------+ | | | | | |b|b| | | | |a|a| +---------------+
Über die Ausführung des Makros DPOFEI wird ein gegliederter Returncode (aa=primärer RC, bb=sekundärer RC) im Register R15 übergeben.
X'bb' | X'aa' | Erläuterung |
X'00' | X'00' | Normale Ausführung: Ein POSSIG-Eintrag wurde erzeugt. Alle spezifizierten |
X'04' | X'04' | Keine Aktion: Die maximale Anzahl von 2047 Aufrufen wurde überschritten. |
X'0C' | X'04' | Keine Aktion: Die Ereigniskennung ist der Task des Aufrufers nicht zugeordnet. |
X'10' | X'04' | Keine Aktion: Ungültige Operandenangabe. |
X'14' | X'04' | Keine Aktion: Es existiert keine Ereigniskennung mit den angegebenen Namen |
Beispiel einer verketteten Struktur:
DPOFEI START BALR USING : DPOFEI EIID=IDP1,REFNUM=REFNR,CONTINU=YES DPOFEI EIID=IDP2,CONTINU=YES DPOFEI EIID=IDP3,CONTINU=DSOFEI DSOFEI EIID=IDS1 : TERM ***** DEFINITIONS ***************************** : IDP1 DS CL4 IDP2 DS CL4 IDP3 DS CL4 IDS1 DS CL4 REFNR DS F : END