- MX_POWEROFF 08154712 - APP_OK 37421235 - ...2. To display the corresponding text, key is the (integer) value and value is the (english and german) text:
- 08154712 "Power of magnet is off", "Magnet ist ausgeschaltet" - 37421235 "Normal successful completion", "Auftrag erfolgreich ausgeführt" - ...Given this, a service, e.g. a FESA property, may generate an exception like
throw(FesaException(MX_POWEROFF));and an application could handle such an exception
catch(FesaException e) { int condVal = e.value(); if (condVal == MX_POWEROFF) { // ignore this specific error here } else { string condTxt = condLib.getTxt(condVal, LANG_EN); // or 'string condTxt = condLib.getTxt(condVal);' using the Locale display.writeTo(condTxt); ...thereby dealing with condition value and text.
Example key/value pairs:
Source ident/text pair: Key: "POWEROFF" Value: { EN: "Power of magnet is off", DE: "Magnet ist ausgeschaltet" } Destination symbol/value pair: Key: MX_POWEROFF Value: 08154712 Destination value/text pair: Key: 08154712 Value: { EN: "Power of magnet is off", DE: "Magnet ist ausgeschaltet" }
E.g.:
Source: Ident: "CURR_INVALID" Text: { "Current set value %fA for magnet %s invalid", "Strom-Sollwert %fA für Magnet %s ungültig" } Actual condition text: MX-E-CURR_INVALID, Current set value 47.11A for magnet TK1MU1 invalid
public static int MX_POWEROFF = 08154712;
static const int32_t MX_POWEROFF = 08154712;
MX_POWEROFF = 08154712
parameter (MX_POWEROFF = 08154712)
implicit none
integer MX_POWEROFF
parameter (MX_POWEROFF = 08154712)
integer, parameter :: MX_POWEROFF = 08154712
Using the example above:
Source: Facility name: "MX" Facility number: 1069
Facility names should be an abbreviation of the software module's name or an acronym, e.g. 'MX' for pulsed magnets FEC software. They should be not longer than five characters.
Facility names and numbers will be centrally managed by CSCO to assure their system-wide uniqueness.
Using the example above:
Source ident: Key: "POWEROFF" Destination symbol: Key: "MX_POWEROFF"
Alternative prefixes that include the seperator may be specified for backward compatibility but are strongly discouraged for new facilities. See the <altPrefix>
tag in the XML proposal in Appendix A.
Key: "<facility-name>_FACILITY_NUMBER" Value: <facility-number>e.g. for C++
static const int32_t MX_FACILITY_NUMBER = 1069;No value/text pair will be generated for this entry.
S = Success I = Information W = Warning E = Error F = Fatal
S = Success = 1 I = Information = 3 W = Warning = 0 E = Error = 2 F = Fatal = 4
<FACILITY-NAME>-<L>-<IDENT>, <Text>(where
<L>
is the severity level). An API should provide methodes to retrieve a single text element or a user-defined subset of the text elements.
errno
as parameter.
strerror(errno)
on the client side to get the describing text. (Caution: needs Linux on client side!)
<conditions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www-acc.gsi.de/XMLSchema/xsd/v03/conditions.xsd"> <version>1.0.0</version> <!-- ???: Oder in conditions.xsd? --> <title>MX Conditions</title> <facilityName>MX</facilityName> <!-- system-wide unique --> <facilityNumber>3742</facilityNumber> <!-- system-wide unique --> <altPrefix>MX$_</altPrefix> <!-- optional, not recommended, unique --> <severities> <severity> <level>SUCCESS</level> <condition> <ident>OK</ident> <text_de>Auftrag erfolgreich ausgeführt</text_de> <text_en>Normal successful completion</text_en> <description_de>...</description_de> <!-- optional --> <description_en>...</description_en> <!-- optional --> </condition> <condition> <ident>ABC</ident> <text_de>Foo bar</text_de> <text_en>Fuh-Stab</text_en> </condition> </severity> <severity> <level>INFORMATION</level> <condition> ... </condition> </severity> ... <severity> <level>FATAL</level> ... </severity> </severities> </conditions>Die description Tags hatten wir mal erfunden mit der Idee, dass es hilfreich sein kann, dem Operateur weitergehende Informationen zu einer Fehlermeldung zu liefern. Also: Es wird ein Fehler angezeigt, der Operateur klickt drauf und bekommt die ausführliche Beschreibung. Beispiel:
<level>WARNING</level> <condition> <ident>CurrS_Power</ident> <text_de>Gerät ist nicht eingeschaltet</text_de> <text_en>Power of device is off</text_en> <description_de> Der gewünschte Sollwert wurde im Dualport-RAM abgelegt, konnte aber am Gerät nicht eingestellt werden, da dieses ausgeschaltet ist oder gerade einschaltet. Der interne Zustand der Software ist 'power off' oder 'power sequence'. Der Sollwert wird eingestellt, sobald das Gerät eingeschaltet ist. </description_de> <description_en> ...dito... </description_en> </condition>
Bits Meaning ------------------------ 31..28 reserved (= 0) 27 = 1 26..16 facility number (0..2047) 15 = 1 14...3 condition number (0..4095) 2...0 severity (0..7)
- parameter placeholders syntax - %s -> string - %i -> integer - %f -> float - %x -> hex(integer) - ... oder anders? - one repository for all conditions (DB): - Inhalt: Tabelle mit (mind.) 4 Spalten: 1 - "MX_POWEROFF", 2 - 08154712, 3 - "Power of magnet is off", 4 - "Magnet ist ausgeschaltet"; plus Facility name and facility number (an alternate prefix) - extrakt einer XML-Datei, die alle Conditions einer Facility enthält; editieren; re-insert. XML format see appendix A. - Input: - aus XML-File - via GUI - einmalig: aus msg-File - Output: - Header-Datei pro Facility (mx-conditions.h, .java, ...) - Library; _eine_ dicke oder auch pro Facility? ??? - conditions.so, .jar, ... - mx-conditions.so, dgx-conditions.so, ... - retrieving texts - not from DB - but from ...conditions.so, ...conditions.jar, ... - Generierung mit Maven ??? - Eine laufende DB erforderlich? Geht so nicht! - Was macht Cosylab, das auch Conditions generieren möchte? - für FESA: dann wird nur die Header-Datei benötigt, - und für Anwendungen: dann auch die Bibliothek! Statt DB entspr. Dateien? - Übergangslösung: 'msgc' und *.msg benutzen.