private void analizaATC02() { String[] fila; this.dataGridViewATC02.Rows.Clear(); fila = new String[2]; fila[0] = "Ultima respuesta"; StringBuilder textoFecha; textoFecha = new StringBuilder(); textoFecha.Append(this.atc02Status.Timestamp.ToLongDateString()); textoFecha.Append(" "); textoFecha.Append(this.atc02Status.Timestamp.ToShortTimeString()); //Console.WriteLine("timestamp=" + textoFecha.ToString()); fila[1] = textoFecha.ToString(); agregaFila(fila); fila[0] = "SETFAN"; fila[1] = this.atc02Status.FanPower.ToString(); agregaFila(fila); fila[0] = "PRITE"; fila[1] = this.atc02Status.PrimaryTemperature.ToString(); agregaFila(fila); fila[0] = "SECTE"; fila[1] = this.atc02Status.SecondaryTemperature.ToString(); agregaFila(fila); fila[0] = "BFL"; fila[1] = this.atc02Status.FocusPosition.ToString(); agregaFila(fila); fila[0] = "FOCSTEP"; fila[1] = Atc02Xml.BflToFocSetp(this.atc02Status.FocusPosition).ToString(); agregaFila(fila); fila[0] = "AMBTE"; fila[1] = this.atc02Status.AmbientTemperature.ToString(); agregaFila(fila); }
/// <summary> /// Modifica el header de un archivo .fits, previo al envio /// del archivo a otro servidor. /// </summary> /// <param name="fitsFullPath"></param> /// <returns>True si consigue modificar el header del archivo</returns> public Boolean CompletaFitsHeader(String fitsFullPath) { this.refreshATC02XmlStatus(); if (!this.atc02Status.IsFresh()) { logger.Info("ATC02 sin datos recientes, no se actualizara Archivo fits '" + fitsFullPath + "'"); return(false); } FileInfo archivoFitsNuevo; int test; int testLimit; test = 1; testLimit = 4; archivoFitsNuevo = new FileInfo(fitsFullPath); do { test++; if (archivoFitsNuevo.Exists) { break; } else { logger.Warn(String.Format("Archivo '{0}'no existe, intento {1} de {2}, esperando 1 segundo.", fitsFullPath, test, testLimit)); System.Threading.Thread.Sleep(1000); } } while (test <= testLimit); if (!archivoFitsNuevo.Exists) { logger.Error(String.Format("Archivo '{0}'no existe.", fitsFullPath)); return(false); } Boolean respuesta; respuesta = true; // Solo si ocurre alguna excepcion esta variable sera False DateTime Ahora; Ahora = DateTime.Now; Fits fitsFile; System.Threading.Thread.Sleep(1000); fitsFile = new Fits(fitsFullPath); BasicHDU hdu; hdu = fitsFile.ReadHDU(); HeaderCard hcDATE_OBS; // [ISO 8601] UTC date/time of exposure start HeaderCard hcEXPOSURE; // [sec] Duration of exposure hcDATE_OBS = hdu.Header.FindCard("DATE-OBS"); hcEXPOSURE = hdu.Header.FindCard("EXPOSURE"); DateTime dateObs; dateObs = DateTime.Parse(hcDATE_OBS.Value); //// [ISO 8601] UTC date/time of exposure start Double exposure; // [sec] Duration of exposure exposure = Double.Parse(hcEXPOSURE.Value); TimeSpan vejezFits; // Tiempo Transcurrido entre termino de exposición y el presente vejezFits = Ahora.Subtract(dateObs); double vejezSegundos; vejezSegundos = ((vejezFits.TotalSeconds) - exposure); logger.Info("Vejez archivo FITS=" + vejezSegundos + "[segundos]."); // Si la vejez del archiv Fits es menor a veinte segundos // entonces se modifica el encabezado del fits // con la información del ATC02 if (vejezSegundos < 20) { HeaderCard hcFocStep; HeaderCard hcPriTemp; HeaderCard hcSecTemp; HeaderCard hcAmbTemp; HeaderCard hcSetFan; logger.Info("Actualizando archivo FITS:" + fitsFullPath); hcFocStep = hdu.Header.FindCard("FOCSTEP"); hcPriTemp = hdu.Header.FindCard("PRITEMP"); hcSecTemp = hdu.Header.FindCard("SECTEMP"); hcAmbTemp = hdu.Header.FindCard("AMBTEMP"); hcSetFan = hdu.Header.FindCard("SETFAN"); if (hcFocStep == null) { hcFocStep = new HeaderCard("FOCSTEP"); hdu.Header.AddCard(hcFocStep); } if (hcPriTemp == null) { hcPriTemp = new HeaderCard("PRITEMP"); hdu.Header.AddCard(hcPriTemp); } if (hcSecTemp == null) { hcSecTemp = new HeaderCard("SECTEMP"); hdu.Header.AddCard(hcSecTemp); } if (hcAmbTemp == null) { hcAmbTemp = new HeaderCard("AMBTEMP"); hdu.Header.AddCard(hcAmbTemp); } if (hcSetFan == null) { hcSetFan = new HeaderCard("SETFAN"); hdu.Header.AddCard(hcSetFan); } hcFocStep.Value = ("" + Atc02Xml.BflToFocSetp(this.atc02Status.FocusPosition)); hcPriTemp.Value = ("" + this.atc02Status.PrimaryTemperature); hcSecTemp.Value = ("" + this.atc02Status.SecondaryTemperature); hcAmbTemp.Value = ("" + this.atc02Status.AmbientTemperature); hcSetFan.Value = ("" + this.atc02Status.FanPower); System.Threading.Thread.Sleep(4000); try { hdu.Header.Rewrite(); } catch (Exception) { respuesta = false; logger.Error("Error en: hdu.Header.Rewrite();"); } } fitsFile.Close(); // Permitimos al sistema que guarde los cambios en el archivo fits. System.Threading.Thread.Sleep(1000); return(respuesta); }