Allgemeines
Anwendungsgebiet: | Ereignissteuerung; siehe "Ereignisgesteuerte Verarbeitung (Eventing)" |
Makrotyp: | S-Typ, MF-Format 1: Standardform/L-/E-Form; siehe "S-Typ-Makroaufrufe" |
Bei Verwendung der 24-Bit-Schnittstelle wird für den Post Code nur ein 4 Byte langes Feld generiert. Bei Verwendung der 31-Bit-Schnittstelle können 4 oder 8 Byte Post Code empfangen werden.
Makrobeschreibung
Der Makroaufruf wird benutzt, um eine „Anforderung für ein Signal“ für eine Ereigniskennung zu geben. Die Ereigniskennung muss zuvor der Task zugeordnet worden sein (ENAEI-Makroaufruf). Die Task kann warten, bis ein Ereignis eintritt (synchroner Fall), oder – wenn das Programm fortgesetzt werden soll – ein Contingency-Prozess auf Grund des Ereignisses initiiert wird (asynchroner Fall).
Die Task wird immer fortgesetzt (bzw. der Contingency-Prozess initiiert), wenn eine spezifizierte Zeitperiode überschritten ist - auch dann, wenn das Ereignis nicht eintritt.
Der Contingency-Prozess muss zuvor definiert worden sein (ENACO-Makroaufruf).
Hinweis
Wenn ein Programm(paket) einen Contingency-Prozess definiert hat, der in SPL geschrieben ist, muss bei allen ENACO-, SOLSIG- und POSSIG-Aufrufen das Register R12 die Adresse des SPL-Program Managers enthalten.
Makroaufrufformat und Operandenbeschreibung
SOLSIG |
{ {EINAME=name / EINAMAD={adr / (r)}}[,EINAMLN=länge]} [,SCOPE={LOCAL / GROUP / USER_GROUP / GLOBAL]} / EIID={adr / (r)} } { ,COND=UNCOND[, {RPOSTAD={adr / (r)} / RPOSTR=r}][,RPOSTL={1 / 2}][,LIFETIM={sec / (r)}] / COND=IMMED[, {RPOSTAD={adr / (r)} / RPOSTR=r }] ,RPOSTL={1 / 2} / COID={adr / (r)}[,COMAD= {adr / (r)}][,COND=PERM][,LIFETIM={sec / (r) }] [,PARMOD=24 / 31] [,MF=L / (E,..)] |
EINAME=name
gibt den Namen der Ereigniskennung an, der das angeforderte Ereignis gemeldet wird. Die Ereigniskennung muss bereits definiert worden sein (ENAEI). Der Name der Ereigniskennung ist nur zusammen mit dem Geltungsbereich (SCOPE) eindeutig.
EINAMAD=
bezeichnet den Namen der Ereigniskennung. Diese Angabe ist nur zusammen mit dem Geltungsbereich (SCOPE) eindeutig.
adr
symbolische Adresse des Feldes, das den Namen enthält.
(r)
r = Register, das die Adresse des Feldes enthält.
EINAMLN=länge
gibt die Länge des Namens der Ereigniskennung in Bytes an. Fehlt dieser Operand, so wird das Längenattribut des EINAMAD-Operandenwertes angenommen, wenn EINAMAD=adr angegeben ist; ist EINAMAD=(r) angegeben, so wird die maximale Länge (54 Byte) angenommen.
länge
Länge des Namens der Ereigniskennung.
SCOPE=
beschreibt den Geltungsbereich (Teilnehmerkreis) für die Ereigniskennung.
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 SECOS 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 der Ereigniskennung. Die Kurzkennung wird dem Benutzer durch den ENAEI-Makroaufruf zur Verfügung gestellt. Die Verwendung der Kurzkennung an Stelle des Namens zur Identifizierung der Ereigniskennung beschleunigt die Verarbeitung und ist eindeutig.
adr
symbolische Adresse eines 4 Byte langen Feldes, das die Kurzkennung enthält.
(r)
r = Register, das die Adresse des Feldes 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 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).
Operanden für den synchronen Fall
COND=
bestimmt, ob der Aufrufer auf das Eintreten des Ereignisses warten will.
UNCOND
gibt an, dass der Aufrufer bereit ist, auf das Eintreten des Ereignisses zu warten. Die Wartezeit kann mit dem Operanden LIFETIM begrenzt werden.
IMMED
gibt an, dass der Aufrufer nicht auf das Eintreten des Ereigisses warten will. Das Programm soll fortgesetzt werden, auch wenn das Ereignis noch nicht durch einen POSSIG-Aufruf der Ereigniskennung gemeldet war. Auskunft hierüber gibt der Sekundäre Indikator X'20' in Register R15 (siehe Returncode).
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.
Der Adresswert 0 ist nicht erlaubt.
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=r
bezeichnet ein Register, in das der Post Code direkt eingetragen werden soll. Ein Post Code aus zwei Worten bestehend, wird in das angegebene und das nachfolgende Register (der Zahl nach) eingetragen - wenn RPOSTL=2 angegeben wurde.
r
r = Register, in das der Post Code eingetragen werden soll.
RPOSTL=
bezeichnet die Anzahl der Worte des Post Codes, die empfangen werden sollen. Bei Verwendung der 24-Bit-Schnittstelle (PARMOD=24) kann nur RPOSTL=1 angegeben werden.
1
Von dem Post Code soll nur ein Wort (das erste Wort) übertragen werden.
2
Der Post Code soll in voller Länge (2 Worte) übertragen werden.
LIFETIM=
Zeit, während die Task auf das Eintreten des Ereignisses warten soll. Der Returncode gibt an, ob die Anforderung erfüllt oder die Wartezeit überschritten wurde. Der Operand wird ignoriert, wenn COND=IMMED angegeben wurde.
sec
Zeitangabe in Sekunden. 1 <= sec <= 43200
Die Genauigkeit für die Bearbeitung liegt bei +10 Sekunden.
Voreinstellung: 600 sec.
(r)
r = Register, das die Angabe in Sekunden enthält.
Operanden für den asynchronen Fall
COID=
bezeichnet die Kurzkennung des Contingency-Prozesses. Die Kurzkennung wird dem Benutzer durch den ENACO-Makroaufruf zur Verfügung gestellt.
adr
symbolische Adresse eines 4 Byte langen Feldes, das die Kurzkennung enthält.
(r)
r = Register, das die Adresse enthält.
COMAD=
bezeichnet eine Contingency-Mitteilung. Eine hier gegebene Contingency-Mitteilung ersetzt eine eventuell bei der Definition der Contingency gegebene Mitteilung (ENACO
Makroaufruf).
adr
symbolische Adresse eines Wortes, das eine Contingency-Mitteilung enthält.(r)
r = Register, das die Adresse enthält.COND=PERM
Permanenter asynchroner SOLSIG:
trifft das durch SOLSIG angeforderte Signal innerhalb der Wartezeit (LIFETIM) ein, so wird erneut ein SOLSIG abgesetzt, dessen Wartezeit 600 Sekunden beträgt. Trifft während dieser Wartezeit kein Signal mehr ein, so wird kein weiterer SOLSIG abesetzt.LIFETIM=
Zeit, während der das Ereignis eintreten soll. Der Ereignis-Informationscode teilt dem Contingency-Prozess mit, ob die Anforderung innerhalb der gesetzten Zeitperiode erfüllt oder nicht erfüllt wurde.sec
Zeitangabe in Sekunden. 1 <= sec <= 43200
Die Genauigkeit für die Bearbeitung liegt bei +10 Sekunden.
Voreinstellung: 600 sec.(r)
r = Register, das die Angabe in Sekunden enthält.
Rückinformation und Fehleranzeigen
Während der Makrobearbeitung enthält Register R1 die Adresse der Operandenliste.
R15:
+---------------+ | | | | | |b|b| | | | |a|a| +---------------+
Über die Ausführung des Makros SOLSIG 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' | Funktion ausgeführt:
|
X'30' | X'00' | Funktion ausgeführt: Eine Post Code-Information wurde angeboten (POSSIG), |
X'34' | X'00' | Funktion ausgeführt: Es wurde keine Post Code-Information angeboten (POS- |
X'38' | X'00' | Funktion ausgeführt: Post Code ist länger als das angegebene Empfangsfeld. Das |
X'3C' | X'00' | Funktion ausgeführt: Post Code ist kürzer als das angegebene Empfangsfeld. Der |
X'0C' | X'04' | Keine Aktion: Die vom System erstellte Ereigniskennung ist dem SOLSIG |
X'10' | X'04' | Keine Aktion: Es wurden ungültige Operanden angegeben. |
X'14' | X'04' | Keine Aktion: Ungültiger Name bzw. ungültige Kurzkennung. |
X'18' | X'04' | Keine Aktion: Maximal erlaubte Anzahl (400) an Contingency-Prozessen pro |
X'20' | X'04' | Keine Aktion: Das Ereignis ist nicht eingetreten. |
X'24' | X'04' | Keine Aktion: Ungültige Kurzkennung des Contingency-Prozesses. |
X'28' | X'04' | Keine Aktion: Die Ereigniskennung wurde gelöscht, bevor das Ereignis eintreten |
Beispiel: Synchroner Fall
SOLSIG START PRINT NOGEN SOLSIG AMODE ANY GPARMOD 31 1 *,MACRO: GPARMOD, VERSION: VER121 BALR 3,0 USING *,3 ENAEI EINAME=EVENT,SCOPE=GLOBAL,EIIDRET=KK --------------------(1) GDATE TOD=TIME1 SOLSIG EIID=KK,COND=UNCOND ------------------------------------(2) *** WAITING FOR SIGNAL *** GDATE TOD=TIME2 ST 15,RCFIELD1 GDATE TOD=TIME3 SOLSIG EIID=KK,COND=UNCOND,LIFETIM=70 -------------------------(3) *** WAITING FOR SIGNAL *** GDATE TOD=TIME4 ST 15,RCFIELD2 GDATE TOD=TIME5 SOLSIG EIID=KK,COND=IMMED -------------------------------------(4) GDATE TOD=TIME6 ST 15,RCFIELD3 CHKEI EIID=KK -------------------------------------------------(5) ST 15,RCFIELD4 DISEI EIID=KK DTH1 TERM **** DEFINITIONS ***** KK DS F TIME1 DS CL8 TIME2 DS CL8 TIME3 DS CL8 TIME4 DS CL8 TIME5 DS CL8 TIME6 DS CL8 RCFIELD1 DS F RCFIELD2 DS F RCFIELD3 DS F RCFIELD4 DS F END
Ablaufprotokoll:
/start-assembh % BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED % ASS6010 <ver> OF BS2000 ASSEMBH READY //compile source=*library-element(macexmp.lib,solsig), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,solsig)), - // test-support=*aid % ASS6011 ASSEMBLY TIME: 453 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 84 MSEC //end % ASS6012 END OF ASSEMBH /load-executable-program library=macexmp.lib,element-or-symbol=solsig, - / test-options=*aid % BLS0523 ELEMENT 'SOLSIG', VERSION '@' FROM LIBRARY ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS % BLS0524 LLM 'SOLSIG', VERSION ' ' OF '<date> <time>' LOADED /%in dth1;%r STOPPED AT LABEL: DTH1 , SRC_REF: 287, SOURCE: SOLSIG , PROC: SOLSIG /%d %@(time1) -> %cl8,%@(time2) -> %cl8 ----------------------------------(6) *** TID: 005000D8 *** TSN: 2QSE ********************************************* ** CURRENT PC: 00000136 CSECT: SOLSIG ************************************** ** V'00000158' = SOLSIG + #'00000158' 00000158 (00000158) 13:14:15 V'00000160' = SOLSIG + #'00000160' 00000160 (00000160) 13:24:53 /%d %@(rcfield1) -> %x ---------------------------------------------------(7) V'00000188' = SOLSIG + #'00000188' 00000188 (00000188) 20000004 .... /%d %@(time3) -> %cl8,%@(time4) -> %cl8 ----------------------------------(8) V'00000168' = SOLSIG + #'00000168' 00000168 (00000168) 13:24:53 V'00000170' = SOLSIG + #'00000170' 00000170 (00000170) 13:26:02 /%d %@(rcfield2) -> %x ---------------------------------------------------(9) V'0000018C' = SOLSIG + #'0000018C' 0000018C (0000018C) 20000004 .... /%d %@(time5) -> %cl8,%@(time6) -> %cl8 ---------------------------------(10) V'00000178' = SOLSIG + #'00000178' 00000178 (00000178) 13:26:02 V'00000180' = SOLSIG + #'00000180' 00000180 (00000180) 13:26:02
/%d %@(rcfield3) -> %x --------------------------------------------------(11) V'00000190' = SOLSIG + #'00000190' 00000190 (00000190) 20000004 .... /%d %@(rcfield4) -> %x --------------------------------------------------(12) V'00000194' = SOLSIG + #'00000194' 00000194 (00000194) 30000000 .... /%r
(1) | Die Ereigniskennung EVENT wird definiert. Die Adresse der Kurzkennung ist KK. |
(2) | Ein Signal wird von der Ereignissteuerung angefordert. Der Aufrufer ist bereit, bis zum Ablauf der standardmäßigen Wartezeit (10 Minuten) auf das Eintreffen des Signals zu warten. |
(3) | Ein zweites Signal wird angefordert. Diesmal beträgt die Wartezeit nur 70 Sekunden. |
(4) | Ein drittes Signal wird angefordert. Der Aufrufer ist nicht bereit zu warten. Da kein Signal vorliegt (POSSIG-Warteschlange der Ereigniskennung), wird die Task fortgesetzt. |
(5) | Die Warteschlangen der Ereigniskennung EVENT werden geprüft. Sie sind leer, da die Wartezeiten für alle SOLSIG-Aufrufe abgelaufen sind. Anschließend wird die Definition der Ereigniskennung gelöscht. |
(6) | Uhrzeit vor und nach dem SOLSIG-Aufruf mit Standard-Wartezeit: Die Wartezeit betrug 10 Minuten und 38 Sekunden. |
(7) | Returncode X'20000004' nach dem ersten SOLSIG-Aufruf: Das Ereignis ist nicht eingetreten. |
(8) | Uhrzeit vor und nach dem SOLSIG-Aufruf mit 70 Sekunden Wartezeit: Die Wartezeit betrug 69 Sekunden. |
(9) | Returncode X'20000004' nach dem zweiten SOLSIG-Aufruf: Das Ereignis ist nicht eingetreten. |
(10) | Uhrzeit vor und nach dem SOLSIG-Aufruf ohne Wartezeit: Keine Wartezeit. |
(11) | Returncode X'20000004' nach dem dritten SOLSIG-Aufruf: Das Ereignis ist nicht eingetreten. |
(12) | Ergebnis der Warteschlangenprüfung mit CHKEI: Die Warteschlangen enthalten keine Anforderungen. |
Weitere Beispiele enthält der Abschnitt „Ereignisgesteuerte Verarbeitung (Eventing)“ und der Abschnitt „Contingency-Prozesse“.