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 SOLSIG- bzw. POSSIG-Makroaufrufe in einem Programm die wiederholte Validation der angegebenen Operanden. Stattdessen wird eine Ereignisliste EVENTLST angelegt und z.B. für Signalanforderungen von einer Ereigniskennung (SOLSIG-Funktion) einmalig ein SOLSIG-Eintrag eingetragen. Im weiteren Programmfortschritt wird bei der (realen) Signalanforderung nur noch auf diesen Eintrag Bezug genommen (RSOFEI). 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 DSOFEI erzeugt einen SOLSIG-Eintrag in der Ereignisliste EVENTLST. Die benötigten Angaben werden in den Eintrag übernommen (Name der Ereigniskennung oder Kurzkennung, Postcode, maximale Wartezeit bis zum Eintreffen des Signals (Ereignisses)). Dem Aufrufer wird eine Referenznummer für den Eintrag übergeben.
Makroaufrufformat und Operandenbeschreibung
DSOFEI |
{ { EINAME=name / EINAMAD={adr / (r)} [,EINAMLN=länge] },SCOPE={LOCAL / GROUP / USER_GROUP / GLOBAL} / EIID={adr / (r)}} ,REFNUM={adr / (r)} [,LIFETIM={sec / (r)}] [, { RPOSTAD={adr / (r)} / RPOSTR=r }], RPOSTL={1 / 2}, RPOSTNUM={anzahl / (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
LIFETIM=
ermöglicht die Angabe eines Zeitintervalls (in Sekunden) als maximale Wartezeit für die Task des Aufrufers bis zum Eintreffen des Ereignisses (Signals). 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.
RPOSTAD=
bezeichnet ein Feld, in das ein Post Code übertragen werden soll. Der Post Code kann
4 oder 8 Byte lang sein. Der Operand RPOSTL legt fest, ob nur das erste Wort oder beide Wörter des Post Codes in das Feld eingetragen werden.
Der Operand RPOSTR führt dieselbe Funktion aus wie RPOSTAD; die Verarbeitung erfolgt aber schneller.
adr
symbolische Adresse des Feldes, in das der Post Code eingetragen werden soll. Feldlänge = 4 oder 8 Byte.
(r)
r = Register mit dem Adresswert adr
RPOSTR=
bezeichnet ein Register, in das der Post Code direkt eingetragen werden soll. Ein Post Code aus 2 Worten bestehend, wird in das angegebene und das nachfolgende Register (der Zahl nach) eingetragen, wenn RPOSTL=2 angegeben wurde.
r
Register, in das der Post Code eingetragen werden soll
RPOSTL=
bezeichnet die Anzahl der Worte des Post Codes, die empfangen werden sollen.
1
Von dem Post Code soll nur 1 Wort (das erste Wort) übertragen werden.
2
Der Post Code soll in voller Länge (2 Worte) übertragen werden.
RPOSTNUM=
bezeichnet die maximale Anzahl Post Codes, die übertragen werden sollen. Der Bereich, der bei RPOSTAD angegeben ist, muss groß genug sein, um alle Post Codes empfangen zu können. Benötigte Länge: RPOSTNUM*2+1
(1 Byte Indikator X'FF', Listenende).
anzahl
Anzahl Post Codes, die übertragen werden sollen.
(r)
r = Register mit der Anzahl Post Codes, die übertragen werden sollen.
MF=
Zur allgemeinen Beschreibung des Operanden MF, der dazugehörenden Operandenwerte und der evtl. nachfolgenden Operanden (z.B. für einen Präfix) siehe Abschnitt „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 den Datenbereich; Register R0 wird überschrieben.
R15:
+---------------+ | | | | | |b|b| | | | |a|a| +---------------+
Über die Ausführung des Makros DSOFEI 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 SOLSIG-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 |