Userface
Finden von Gerätenomenklaturen in der SIS01DBS und im Nameserver
[tbs]
Zuordnen der Nomenklaturen zur Zugriffsart (Netman oder Corba)
Im Userface-client unter VMS befindet sich eine Geräteliste (map), in der die Zuordnung der Nomenklatur zu einem Zustand csInfo: CS_INFO_TYPE gehalten wird.
Die Geräteliste ist beim Start der Anwendung zunächst leer und wird bei jedem Zugriff auf ein Gerät abgefragt und ggf. aktualisiert.
Diese Aufgabe übernimmt die Procedure Devicegeneration in Devgener.mod.
Die Vorgehensweise dabei:
PROCEDURE DeviceGeneration ( nomen: UF_Str) : CS_Info_Type;
IF (devInList)
csInfo= deviceInfo(nomen) ! holt csInfo aus der Liste
ELSE
csInfo = CS_unknown ! neues Gerät, noch nicht in der Liste
END
IF (csInfo = CS_unknown) ! Gerät ist noch nicht in der List oder es wird als "unknown" geführt
! konnte bisher nicht zugeordnet werden, inzwischen "online" ?
IF (inSIS01DBS AND (devNr != 0)) ! Gerät steht in der SIS01DBS mit einer Gerätenummer ungleich 0
csInfo = CS_1stGeneration ! altes Kontrollsystem
ELSE IF (deviceInNameserver) ! im Nameserver suchen, falls Gerät nicht oder mit devNr 0 in SIS01DBS
csInfo = CS_2ndGeneration ! neues Kontrollsystem
ELSE
csInfo = CS_unknown ! konnte keinem der beiden KS zugeordnet werden
END
devList[nomen] = csInfo ! in devListe eintragen
IF (csInfo = CS_unknown AND NOT(inSI01DBS)) ! weder im Nameserver noch in der SIS01DBS
csInfo = CS_nowhwere
END
END
RETRUN csInfo
Der Rückgabewert csInfo bedeutet:
CS_nowhere: |
Gerät taucht in keiner Datenbasis auf, weder in SIS01DBS noch im Nameserver, Zugriff nicht möglich |
CS_unknown: |
Gerät steht in der SIS01DBS, hat dort aber keine gültige Adresse und wurde auch im Nameserver nicht gefunden |
CS_1stGeneration: |
Gerät steht in der SIS01DBS und hat dort eine Gerätenummer. Zugriff über Netman |
CS_2ndGeneration: |
Gerät wurde im Nameserver gefunden. Zugriff über Userface-Server und Corba-Interface |
Gerätezugriffe im Userface
Im Userface wird die Procedure vor jedem Gerätezugriff benutzt:
Jede Nomenklatur im Command-array wird überprüft.
mindestens ein Nomen 1stGeneration, kein Nomen 2ndGeneration |
weiter wie altes Kontrollsystem |
mindestens ein Nomen 2ndGeneration, kein Nomen 1stGeneration |
Aufruf Userface-Server |
alle Nomenklaturen CS_nowhere |
ufStatus = UFCMsg.UF$_NOMATCH_NOMEN |
sowohl CS_1stGeneration als auch CS_2ndGeneration in einem commmand-array |
ufStatus = UFCMsg.UF$_MIX_ADDRESS |
alle Nomenklatur CS_nowhere oder CS_unknown |
ufStatus = UFCMsg.UF$_DEVICE_OFFLINE |
Bemerkungen
Ablauf für Geräte, die schon einmal überprüft wurden:
- Geräte der 1stGeneration bleiben 1stGeneration.
- Geräte der 2ndGeneration bleiben 2nd Generation. Referenzen werden nicht gespeichert. Probleme, fass sich diese ändern sollte, gibt es also nicht.
- Falls ein Gerät umziehen sollte vom alten ins neue Kontrollsystem oder umgekehrt merkt Userface das nicht. Geht vorerst nur mit Restart der Operatingprogramme. Falls ein Zugriff schief gehen sollte (devNr wird 0, wo überall im Userface muss man da gucken??) könnte man in nächster Release ein update der Liste vorsehen. (Eintrag ändern in CS_unknown)
- Solange Nomenklaturen nicht zugeordnet werden können (CS_unknown) wird immer wieder gesucht.
--
GudrunSchwarz - 26 Aug 2008