Die Makros SM2GMS und SM2GDAT hinterlegen die Returncodes in einer Struktur vom Typ ESMFHDR, die über das Strukturelement „hdr“ der Struktur vom Typ SM2GMS_get_measurement_stat_mdl (bei SM2GMS) bzw. der Struktur vom Typ SM2GDAT_get_data_mdl (bei SM2GDAT) angesprochen werden kann.
Die Struktur ESMFHDR ist in FHDR.H deklariert und folgendermaßen aufgebaut:
struct ESMFHDR { struct FHDRifid_mdl if_id; /* interface identifier */ struct FHDRretc_mdl returncode; /* returncode */ };
Das Strukturelement „if_id“ vom Typ FHDRifid_mdl wird von den Makros SM2GMS und SM2GDAT intern verwendet und ist für die Auswertung der Returncodes ohne Bedeutung.
Das Strukturelement „returncode“ vom Typ FHDRretc_mdl hat folgenden Aufbau:
/* returncode structure */ struct FHDRretc_mdl { union /* rc */ { struct { struct { unsigned char subcode2; unsigned char subcode1; } subcode; union /* mc */ { unsigned short maincode; struct { unsigned char maincode2; unsigned char maincode1; } main_returncode; } mc; } structured_rc; unsigned long rc_nbr; /* general return code: */ } rc; };
Zur Auswertung der Returncodes stehen symbolische Namen und Konstanten zur Verfügung, die in FHDR.H und SM2RC.H definiert sind und deren Verwendung im Folgenden erläutert wird.
Zur Überprüfung der Returncodes muss der Anwender zunächst das Strukturelement „returncode.rc.structured_rc.mc.maincode“ der ESMFHDR-Struktur abfragen. Dieses Strukturelement (im weiteren mit MAINCODE bezeichnet) kann über den symbolischen Namen FHDR_RC_MAINCODE angesprochen werden.
Beispiele
SM2GMS.hdr.FHDR_RC_MAINCODE
SM2GDAT.hdr.FHDR_RC_MAINCODE
Bei erfolgreicher Ausführung des Makros hat MAINCODE den Wert FHDRsuccessful_processing.
Im Fehlerfall liefern MAINCODE und das Strukturelement returncode.rc.structured_rc.subcode.subcode1 Fehlerinformationen. Das Strukturelement „returncode.rc.structured_rc.subcode.subcode1“ (im weiteren mit SUBCODE1 bezeichnet) kann über den symbolischen Namen FHDR_RC_SUBCODE1 angesprochen werden.
Beispiele
SM2GMS.hdr.FHDR_RC_SUBCODE1
SM2GDAT.hdr.FHDR_RC_SUBCODE1
Die folgende Übersicht erläutert die wichtigsten Returncodes:
SUBCODE1 | MAINCODE | Bedeutung und Maßnahme |
0 | 0 | Der Aufruf war erfolgreich. |
1 | 65535 | Die angeforderte Funktion wird nicht unterstützt (falsche Angabe für UNIT oder FUNCTION im Standardheader). |
3 | 65535 | Die angegebene Version der Schnittstelle wird nicht unterstützt (falsche Versionsangabe im Standardheader). |
4 | 65535 | Parameterliste ist nicht auf Wortgrenze ausgerichtet. |
65 | 65535 | Das Subsystem SM2 ist nicht vorhanden. |
128 | 65535 | Das Subsystem SM2 ist kurzfristig nicht reaktionsfähig. |
129 | 65535 | Das Subsystem SM2 ist längerdauernd nicht reaktionsfähig. |
1 | 1 | Kann nur beim Makro SM2GDAT auftreten. |
1 | 2 | Kann nur beim Makro SM2GDAT auftreten. |
64 | 3 | Kann nur beim Makro SM2GDAT auftreten. |
32 | 4 | Systemfehler. |
32 | 5 | Die SM2-Messtask läuft nicht. |
64 | 6 | Angegebener Rechner nicht erreichbar. |
Für die in der Tabelle aufgeführten Werte für MAINCODE und SUBCODE1 stehen folgende symbolische Konstanten in FHDR.H und SM2RC.H zur Verfügung.
Symbolische Konstanten für MAINCODE:
#define FHDRsuccessful_processing | 0 |
#define SM2RCbuffer_too_short | 1 |
#define SM2RCbuffer_not_valid | 2 |
#define SM2RCno_data | 3 |
#define SM2RCsystem_error | 4 |
#define SM2RCgatherer_down | 5 |
#define SM2RChost_not_available | 6 |
#define FHDRlinkage_error | 65535 |
Symbolische Konstanten für SUBCODE1:
#define FHDRfct_not_supported | 1 |
#define FHDRver_not_supported | 3 |
#define FHDRalignment_error | 4 |
#define FHDRss_not_created | 65 |
#define FHDRwait_short_term | 128 |
#define FHDRwait_long_term | 129 |
Eine praktische Anleitung zur Auswertung der Returncodes gibt das Beispiel im folgenden Abschnitt.
SM2RC.H befindet sich in der Bibliothek SYSLIB.SM2.<ver> und kann mit dem folgenden Kommando ausgedruckt werden:
/PRINT-DOCUMENT FROM-FILE=*LIBRARY-ELEMENT( LIBRARY=SYSLIB.SM2.<ver>, ELEMENT=SM2RC.H,TYPE=S)
FHDR.H befindet sich in der Bibliothek SYSLIB.BS2CP.<ver> und kann auf analoge Weise ausgedruckt werden.