Vous êtes ici : Accueil / TECHNICAL PAGES / Composants de la station / NECAM / DOCUMENTATION_GENERALE / Fonctionnement Informatique de Necam / Fonctionnement informatique de Necam

Fonctionnement informatique de Necam





DESCRIPTION

La caméra Necam (nov 2019) est une caméra CCD comportant un système de refroidissement autonome utilisant un cryocooler (CC) (fabricant Thales) ne nécessitant aucun apport d'azote liquide. Son prédécesseur Ecam, possédait un cryostat utilisant le même CCD, avec apport bi-journalier d'azote liquide.

Necam est composé de:

 

Modes de fonctionement

ModeScripts associé
Mise en froid Nstart_CC
Standard Monitoré en permanence par necamwatch
Dégradé

Ndegrad_CC

Abaissement de la température du Cold_finger de -150 à -140

Réchauffement

Stop_CC

Arrêt du Cryocooler. Un réchauffement demande un pompage



Architecture Informatique Necam

Voir ce shéma

Stratégie:

L'environnement de Necam est monitoré en permanence par le Local Control Unit glsserv (LCU: PC) et deux services lui sont dédiés: necam et necamfans.

Les fichiers services sont lus régulièrement par le programme necamwatch qui effectue les actions d'urgence en cas de problème et fourni un status du CC daté dans un fichier de status.

La machine principale de la station (glslogin1) surveille le contenu du fichier de status avec le programme necamstatuswatch. Cette machine envoie un mail d'urgence dans le cas où le status est périmé, ce qui signifie que necamwatch de fonctionne plus. Soit le LCU glsserv a une faille majeure soit un bug software empêche la terminaison de necamwatch.

Suivant les principes généraux des services, les services necam, sont insérés dans les bases de données SQL euler de La Silla et de Genève. Ces bases permettent un affichage des données sous forme graphique, l'affichage du monitoring en station sous forme de tableau de valeurs et l'envoi d'un rapport journalier.

 

 





GESTION DU CRYO-COOLER

 



Gestion automatique

La gestion de Necam en mode opération est automatique. Sous réserve que le programme de gestion necamwatch (lien vers l'algorithme) tourne sur glsserv.

Remarque: chaque action entreprise par necamwatch envoie un mail d'information

La gestion automatique:

  • passe le CC en mode dégradé s'il n'y a pas de données récentes (<60[s])
  • passe le CC en mode dégradé si il y a une surchauffe du CC, dans ce cas la consigne passe de -150 à -140 [degré]
  • stoppe le CC s'il y a une surchauffe du CC alors que le mode dégradé est établi
  • stoppe le CC en cas de perte de pression du cryostat
  • passe le CC en mode dégradé si le CCD n'est pas stabilisé
  • stoppe le CC si le CCD n'est pas stabilisé alors que le mode dégradé est établi
  • fait un reset de l'acquisition des services en cas de données aberrantes

 

Stratégie: afin de limiter les risques de blocages liés à un programme de contrôle tournant "sans fin", necamwatch est lancé toutes les 2 minutes, il analyse la situation courante et prend des décisions de manière autonome. Afin de garder trace des actions en cours, necamwatch utilise des fichiers de status qui indiquent par leur présence l'attitude que doivent adopter necamwatch et les utilitaires Necam.

Ces fichiers sont:

  • /tmp/INIB_SERVICE_NECAM: stoppe l'acquisition de données de service
  • /tmp/INIB_CCD_STABILITY_CHECK: ne teste pas l'environnement, car le sytème est soit en train de démarrer soit en train de s'arrêter
  • /tmp/INIB_HEATING_CRYO_COOLER_TO_DEGRADED_MODE: ne passe pas en mode dégradé, car le sytème est déjà en train de passer en mode dégradé

 

Le script necamwatch est lancé par le cron system et définit dans la crontab de root sur glsserv (extrait de la crontab):

[root@glsserv ~]# crontab -l
*/2 * * * * /opt/t4/beta/scripts/necamwatch >> /gls/data/services/MAINTENANCE/necam/necamwatch.log 2>&1

necamwatch fourni un statut comprenant un temps unix, un texte de statut et un delta-T à la consigne du CCD dans le fichier $TDATA/services/MAINTENANCE/necam/necamwatch.log qui a cette apparence:

1585660441.713717 necamwatch: ALL OK (delta = 0 [deg])
1585660561.717635 necamwatch: ALL OK (delta = 0 [deg])
1585660681.824976 necamwatch: ALL OK (delta = -0.0109999999999957 [deg])
1585660801.800805 necamwatch: ALL OK (delta = -0.0109999999999957 [deg])
1585660922.493219 necamwatch: ALL OK (delta = 0 [deg])
1585661041.422368 necamwatch: ALL OK (delta = 0 [deg])
1585661161.380026 necamwatch: ALL OK (delta = 0 [deg])

Ce fichier est sur le serveur de disque SynologyCluster. Accessible de tout autres ordinateurs de La Silla.

La surveillance du bon fonctionnement de necamwatch et de glsserv se fait en vérifiant le dernier temps Unix de la dernière ligne de status de ce fichier.

Cette surveillance est faite toutes les 2 minutes par le script necamstatuswatch qui est lancé par le cron system et définit dans la crontab de root sur glslogin (extrait de la crontab):

glslogin1:~# crontab -l
*/2 * * * * /opt/t4/beta/scripts/necamstatuswatch > /gls/data/services/MAINTENANCE/necam/necamstatuswatch.log 2>&1 

necamstatuswatch envoie un mail lorsque le fichier de statut est plus vieux de 3 minutes. Tant que le problème n'est pas résolu, ce mail est renvoyé chaque 30 minutes.

necamstatuswatch a également un fichier de log d'une ligne qui lui n'est testé que manuellement.



Commandes de gestion manuelles

La gestion de Necam se fait par l'intermédiaire de commandes tapées dans un terminal dans le monde Linux.

Attention ces commandes se lancent uniquement sur glsserv car une partie du hardware est accédé par des liaisons liaisons série dont les drivers sont uniquement sur cette machine

D'un manière générale, il est préférable de connaitre le comportement de ces commandes avant de les lancer. Les commande se lancent sous le nom de l'utilisateur. Certaines se lance en mode setuid root car elles accèdent les sémaphores ou les fichiers services crée par root.

Fichiers de log: dès nov 2020, toutes les commandes ont un fichier de log mensuel, nommé comme la commande sous $TDATA/services/MAINTENANCE/necam/

Suivre les liens pour visualiser l'organigramme

CommandeDescriptionRemarque
Nstop_CC Arrête le refroidissement du CryoCooler Agit immédiatement (-h pour help)

Nstart_CC

(setuid)

Démarre le CC; consigne = -150[d]

Démarre la regulation du CCD; consigne = -115[d]

Agit immédiatement (-h pour help)

En cas de perte du terminal, cette commande DOIT être relancée, car elle gère la fin du processus de refroidissement (voir ci-dessus fichiers de status /tmp/*)

Ndegrad_CC Passe la consigne du CC à -140[d], première étape en cas de problème qui évite l'arrêt complet (donc réchauffage et pompage) Agit immédiatement (-h pour help)

Reset_CC

(setuid)

En cas de blocage, lié au sémaphores (voir Annexe), arrêt des programmes necam.py et dpg109.py et suppression des sémaphores associés. Le service reprends seul dans la minute. Action sans conséquence néfaste à utiliser avec patience, ne pas l'interrompre (-h pour help)

Nthales

(setuid)

Programme de communication pour le setting et lecture du CC

Nthales -h (help)

Nthales -s (status)

Ndpg109

(setuid)

Programme de communication pour la lecture de la pression

Ndpg109 -h (help)

Ndpg109 -s (status)

Nlakeshore Programme de communication pour le setting et lecture du Lakeshore (régulation température du CCD)

Nlakeshore -h (help)

Nlakeshore -U (status)

Nadam Programme de communication pour la lecture des températures de l'environnement par l'intermédiaire de l'Adam 6015 Nadam [-h] (status)
Necamfans Programme de communication pour la lecture des vitesses des ventilateurs du CC par l'intermédiaire de l'Adam 6051 Necamfans (status)

 

 





SERVICES

A l'instar des autres services de la station Euler, les senseurs et paramètres de Necam sont monitorés 24h/24 à différentes fréquences et leurs valeurs stockées dans des fichiers appelé fichier service de type rdb (Ascii file, tab separated values). Necam en possède 2:

  • $TDATA/services/necam/necam_<YYYYMM.rdb> 5 [mesures/minute] pour senseurs et paramètres
  • $TDATA/services/necam/necamfans_<YYYYMM.rdb> 6 [mesures/heure] pour les vitesses des ventilateurs de refroidissement

 

Le relevé de ces valeurs est realisé par 2 scripts lancés par le cron system et définit dans la crontab de root sur glsserv (extrait de la crontab):

[root@glsserv ~]# crontab -l
* * * * *    /opt/t4/beta/scripts/service_necam     >> /gls/data/services/MAINTENANCE/necam/service_necam.log 2>&1
*/10 * * * * /opt/t4/beta/scripts/service_necamfans >> /gls/data/services/MAINTENANCE/necam/service_necamfans.log 2>&1

Note: service_necam est lancé chaque minute, mais ce script lance 5 fois la commande

/home/weber/miniconda3/bin/python /opt/t4/beta/scripts/necam.py >> <fichier_service>
Cette technique permet 5 enregistrements par minutes, alors que le cron ne permet q'une exécution par minute. Il n'y a pas de temps d'attente entre chacune des 5 mesures, car il faut environ 10 secondes pour la lecture de l'ensemble des paramètres.
A noter la présence de /tmp/INIB_SERVICE_NECAM inhibe les enregistrements, le test de présence est fait avant chaque appel à necam.py.
Pour rappel, comme pour chacun des services, un nouveau fichier de service est créé le premier du mois à midi heure locale.


Table Necam

NomDescriptionValeur attendue
tunix temps unix du début des mesures à la seconde 10 digits
date date du début des mesures; format: YYYMMDD 20XXYYZZ
time heure du début des mesures; format: HHMMSS 6 digits
CC_Ctrl température contrôleur [degrés Celcius] 20..40
CCD1 température sonde CCD spare[degrés Celcius] -115+/- 0.01
CCD2 température sonde CCD utilisée pour le contrôle en température [degrés Celcius] -115+/- 0.01
CCD_Gamme gamme de puissance courante du Lakeshore (0..3) 2
CC_Down sonde température extérieure [degrés Celcius] 10..30
CCD_Pourcent pourcentage de puissance chauffage CCD 60..80
CC_Drive_pwr puissance chauffage CCD [Watts] 0 ?
CC_Drive_volt tension chauffage CCD [Volts] 18..20
CCD_Setpoint consigne temperature CCD (Lakeshore) [degrés Celcius] -115
CC_Head sonde température extérieure [degrés Celcius] 34..52
CC_Setpoint consigne temperature Cryocooler [degrés Celcius] -150
CC_Supply_cur courant d'alimentation Cryocooler [Amperes] 1.3..1.6
CC_Supply_volt tension d'alimentation Cryocooler [Volt] ~ 48
CC_Up sonde température exterieure [degrés Celcius] 16..34
Cold_Finger sonde température doigt froid [degrés Celcius] -150
Pression pression cryostat [Bar] < 10E-5
Rad_Shield température écran radiatif [degrés Celcius] -10..-23

 



Table Necamfans

NomDescriptionValeur Attendue
tunix temps unix du début des mésures à ls seconde 10 digits
date date du début des mesures; format: YYYMMDD-HH:MM:SS date
fan1 vitesse de rotation du ventilateur No 1 [tours/minutes] 9'500..10'000
fan2 vitesse de rotation du ventilateur No 2 [tours/minutes] 9'500..10'000
fan3 vitesse de rotation du ventilateur No 3 [tours/minutes] 9'500..10'000
fan4 vitesse de rotation du ventilateur No 4 [tours/minutes] 2'500..7'000
fan5 vitesse de rotation du ventilateur No 5 [tours/minutes] 9'500..10'000
fan6 vitesse de rotation du ventilateur No 6 [tours/minutes] 9'500..10'000

Remarque: l'environnement fortement magnétique du CC conjointement avec la position du ventilateur No 4 semble influencer la vitesse de ce dernier. Pas de solution à priori.

 



Visualisation des services

L'utilitaire java meulplot permet la visualisation des services.

L'usage de cet utilitaire le plus aisé est d'établir une connexion avec x2go sur glslogin1.ls.eso.org (ou glslogin2) et lancer:

meulplot

 

 





ACTIONS D'URGENCE

 



Perte de glsserv

glsserv est responsable de la gestion des services et du management automatique de Necam. Une panne de glsserv laisse un système non contrôlable dont les températures de fonctionnement sont inconnues.

La première action est de s'assurer que glsserv ne peut pas être redémarré.

Dans le cas d'une perte confirmée de glsserv:

Les 2 Adams responsables de la lecture des températures externe du cryostat et des vitesses des ventilateurs peuvent être lus depuis une autre machine (type LCU) par un accès direct à leur IP. Les températures externes du CC sont certainement les valeurs les plus importantes pouvant découler sur un arrêt du CC en cas de surchauffe.

Des températures inférieures à 50[d] sont considérées comme normales, entre 50 et 60. Un sérieux suivit s'impose.

ATTENTION des valeurs supérieures à 60[degré] demandent l'arrêt du CC

Températures du cryostat; l'information donne les températures de 4 PT100 disposées sur la structure du CC.

[weber@glscora ~]$ Nadam 
1585565270.237936 We work in the Swiss telescope At La Silla
chan[ 0 ]  =  -19.93057145037003  [deg]
chan[ 1 ]  =  150.0  [deg]
chan[ 2 ]  =  19.61776150148775  [deg]
chan[ 3 ]  =  14.057373922331578  [deg]
chan[ 4 ]  =  37.66613260090028  [deg]
chan[ 5 ]  =  150.0  [deg]
chan[ 6 ]  =  150.0  [deg]

Rem: les valeurs à 150.0[deg] sont les entrées sans capteurs. chan[0]=Rad_shield, chan[2]=CC_Up, chan[3]=CC_down, chan[4]=CC_Head

Vitesse des ventilateurs; l'information donne le temps unix, la date et les 6 vitesses en tours/minutes. Le 4eme ventilateur est connu pour avoir une vitesse anormale.

[weber@glscora ~]$ Necamfans
1585565087	20200330-07:44:47	 9810	 9750	 9990	 2727	 9690	 9510

 

L'accès aux contrôleurs Thales, Lakeshore et Pfeiffer demande un effort software afin d'installer les drivers séries sur d'autres LCUs. Fondamentalement pas compliqué, mais pas fait à ce jour.



Arrêt manuel du cryocooler

Mettre l'interrupteur du CC sur OFF

 





ANNEXE: SOURCES DES PROGRAMMES

 

Les commandes de gestion sont principalement écrites en perl et python, et Nlakeshore historiquement est écrit en C.

Le scripts python sont lancés par des scripts interfaces type csh permettant d'éviter de taper la commande python (/home/weber/miniconda3/bin/python)

Remarque, on utilise miniconda3 sur les LCUs et anaconda3 sur les Workstations, ceci solutionne les problèmes d'architectures.

Une petite librairie necam_utilities.pm contient des fonctions communes au scripts Perl N*_CC.pl

LOGFILE

Afin d'obtenir les log des commandes, la solution (la plus simple sous Unix) est de passer par un scripts interface qui redirige les sorties vers un fichier de log nommé comme la commande sous $TDATA/services/MAINTENANCE/necam/

necamwatch

cron ->
  (Link) /opt/t4/beta/scripts/necamwatch -> 
  (code) /opt/t4/beta/src/weber/necam/necamwatch.pl -> 
  (run)  Ndegrad_CC, Nstop_CC, Nreset_CC, sendmail 
  (use)  necam_utilities.pm

necamstatuswatch

cron ->
  (Link) /opt/t4/beta/scripts/necamstatuswatch -> 
  (code) /opt/t4/beta/src/weber/necam/necamstatuswatch.pl -> 
  (run)  sendmail

service_necam

cron -> 
  (run) /opt/t4/beta/scripts/service_necam -> 
  (link) /opt/t4/beta/src/weber/services/necam/service_necam.csh -> 
  (code) /opt/t4/beta/scripts/necam.py 
         (import necam_adam_ctrl, pythales, pydpg109)

service_necamfans

cron -> 
  (run)  /opt/t4/beta/scripts/service_necamfans -> 
  (link) /opt/t4/beta/src/weber/services/necam/service_necam.csh -> 
  (code) /opt/t4/beta/scripts/necamfans.py 
         (import pynecamfans)

NStart_CC

(Link) /opt/t4/beta/bin/$OPSYS/Nstart_CC -> 
(suid) /opt/t4/beta/src/weber/necam/Nstart_$OPSYS ->
(code) /opt/t4/beta/src/weber/necam/Nstart_CC.c -> 
(run)  /opt/t4/beta/src/weber/necam/Nstart_CC.csh -> 
(code) /opt/t4/beta/src/weber/necam/Nstart_CC.pl -> 
(run)  Nthales, Lakeshore, sendmail 
(use)  necam_utilities.pm

NStop_CC

(Link) /opt/t4/beta/scripts/Nstop_CC -> 
(code) /opt/t4/beta/src/weber/necam/Nstop_CC.csh -> 
(code) /opt/t4/beta/src/weber/necam/Nstop_CC.pl -> 
(run)  Nthales, sendmail 
(use)  necam_utilities.pm

Ndegrad_CC

(Link) /opt/t4/beta/scripts/Ndegrad_CC -> 
(code) /opt/t4/beta/src/weber/necam/Ndegrad_CC.csh -> 
(code) /opt/t4/beta/src/weber/necam/Ndegrad_CC.pl -> 
(run)  Nthales, sendmail  
(use)  necam_utilities.pm

Nreset_CC

 
(Link) /opt/t4/beta/bin/$OPSYS/Nreset_CC -> 
(suid) /opt/t4/beta/src/weber/necam/Nreset_CC_$OPSYS ->
(code) /opt/t4/beta/src/weber/necam/Nreset_CC.c -> 
(run)  /opt/t4/beta/src/weber/necam/Nreset_CC.csh -> 
(code) /opt/t4/beta/src/weber/necam/Nreset_CC.pl -> 
(run)  Nthales, Ndpg109, sendmail  
(use)  necam_utilities.pm

Nthales

(Link) /opt/t4/beta/bin/$OPSYS/Nthales -> 
(suid) /opt/t4/beta/src/weber/necam/Nthales_$OPSYS ->
(code) /opt/t4/beta/src/weber/necam/Nthales.c -> 
(run)  /opt/t4/beta/scripts/Nthales.csh ->
(intf) /opt/t4/beta/src/weber/necam/Nthales.csh -> 
(code) /opt/t4/beta/src/weber/necam/pythales.py -> 
       (import)  serial, pynecamsema 

Nadam

(Link) /opt/t4/beta/scripts/Nadam -> 
(intf) /opt/t4/beta/src/weber/necam/Nadam.csh -> 
(code) /opt/t4/beta/src/weber/necam/necam_adam_ctrl.py -> 
       (import)  pymodbus 

Ndpg109

(Link) /opt/t4/beta/bin/Linux_2.6_i686/Ndpg109 -> 
(suid) /opt/t4/beta/src/weber/necam/Ndpg109_Linux_2.6_i686 ->
(code) /opt/t4/beta/src/weber/necam/Ndpg109.c ->
(run)  /opt/t4/beta/scripts/Ndpg109.csh ->
(intf) /opt/t4/beta/src/weber/necam/Ndpg109.csh -> 
(code) /opt/t4/beta/src/weber/necam/pydpg109.py -> 
       (import)  serial, pynecamsema 

Necam

(Link) /opt/t4/beta/scripts/Necam -> 
(intf) /opt/t4/beta/src/weber/services/necam/Necam.csh -> 
(code) /opt/t4/beta/src/weber/necam/necam.py -> 
         (import necam_adam_ctrl, pythales, pydpg109)

Necamfans

(Link) /opt/t4/beta/scripts/Necamfans -> 
(intf) /opt/t4/beta/src/weber/necam/Necamfans.csh -> 
(code) /opt/t4/beta/src/weber/necam/necamfans.py -> 
         (import pynecamfans)

Nlakeshore

(Link) /opt/t4/beta/scripts/Nlakeshore -> 
(intf) /opt/t4/beta/src/weber/necam/Nlakeshore.csh -> 
(code) /opt/t4/beta/src/weber/necam/Nlakeshore.py -> 
(link) /opt/t4/beta/bin/Linux_2.6_i686/c2_lakeshore -> 
(exe)  /opt/t4/beta/src/weber/services/c2_lakeshore/c2_lakeshore_Linux_2.6_i686 ->
(code) /opt/t4/beta/src/weber/services/c2_lakeshore/c2_lakeshore.c ->
       (include termio.h)

 

 





 

ANNEXE: SÉMAPHORES

Les accès au contrôleur Thales et au contrôleur Pfeiffer se font au travers de 2 jeux de sémaphores.

Rappel: les sémaphores sont des entités informatiques globales dans un système représentées sous la forme d'un simple nombre intialisé à "1". On associe un sémaphore à une ressource et on décide que l'accès à cette ressource doit se faire au travers de ce sémaphore. Ainsi lorsqu'on veut utiliser une ressource, la première action est de décrémenter le sémaphore (fonction système).

Un sémaphore a la caractéristique de bloquer le processus qui effectue la décrémentation si le résultat de l'opération devait devenir négatif. Le processus bloqué est libéré lorsque l'autre processus ayant obtenu la ressource (passage réussi de 1 à 0 par la décrémentation) libère le sémaphore en fin de travail par une incrémentation. À ce moment le sémaphore passe de 0 à 1, mais immédiatement revient à zéro suite à la réussite de la décrémentation du processus bloqué. Ce dernier, ayant obtenu la ressource bloquera tout processus tentant une decrémentation du sémaphore et ainsi de suite.

Un sémaphore suspend et libère les processus dans l'ordre d'arrivée.

Le choix d'utiliser des sémaphores s'est imposé (et devrait s'imposer pour toutes les laissions séries) car le contrôleur Thales n'accepte qu'une commande par seconde. Ainsi une demande de status générale demande une vingtaine de seconde et interfère avec les mesures des services. Grâce aux sémaphore, une demande de status, fige durant un moment la mesure des services sans générer des problèmes de communication.

Le cas problématique: lorsque pour une raison quelconque un sémaphore réservé n'est pas libéré (crash du programme appelant et surtout lors du développement). Il devient indéfinitivement bloquant, empêchant l'accès à la ressource.

La solution standard consiste à incrémenter le sémaphore depuis un autre programme. Attention, si cette action est prise à la légère et que l'incrementation n'était pas nécessaire, le sémaphore va obtenir un valeur de 2, permettant un accès concurrent à 2 processus sur la même ressource, ce qui générera des problèmes de communication.

La solution dans notre cas est de suspendre les services de Necam, tuer les processus liés au services, supprimer les sémaphores et permettre la reprise des activités des services. Le programme Nreset_CC exécute cette séquence.

Semaphore ID

On liste les sémaphores avec la commande ipcs -s

ProgrammeSem ID DecSem ID Hex
pythales.py 12901 0x3265
pydpg109.py 12902 0x3266

 





ANNEXE: PROGRAMMATION DE L'ADAM 6051

Le module Adam 6051 (12 ch digital inputs) doit être configuré avant son emploi afin de programmer 6 entrées digitales en 6 entrées type fréquencemètre.

Cette configuration se fait sur PC Windows avec le logiciel Advantech AdamApax NET Utility

 





QUICK REFERENCE and COOK BOOK

 

Travail sur glsserv sous votre nom

Arrêt du CryoCooler (ATTENTION: l'arrêt demandera un pompage)
Nstop_CC
Suspension des services
Arrêt avec: touch /tmp/INIB_SERVICE_NECAM
Reprise IMPÉRATIVEMENT avec: Nreset_CC

LW 01/04/2020