<?
$tipo_escala_arreglo=array("ºC","1","2","3","4","5","(BAR)","7","8","9","10","11","12","13","14","15","16","17","18","19","20");



function leer_ultima_fecha(&$ultima_fecha,$segundos=0) {
	// lo lee globalmente y "eternamente".

	if ($segundos) {
		$sql="select datediff(second,cast('01/01/2005 00:00:00' as datetime),dbo.fechamotor()) as fecha ";
	} else {
		$sql="select datediff(minute,cast('01/01/2005 00:00:00' as datetime),dbo.fechamotor()) as fecha ";
	}

	$filas=0;
	

	
	$resultado="";
	ejecutarsql($sql,&$filas,&$resultado);	
	
	$ultima_fecha=mssql_result($resultado,0, "fecha");
}


function leer_ultima_fecha_vb(&$ultima_fechamk,&$ultima_fecha,$segundos=0) {
	// lo lee globalmente y "eternamente".

	$fechavbmk = apc_fetch("fechavbmktime");
	$ultima_fecha=apc_fetch("fechavb");
	$ultima_fechamk=time()-$fechavbmk;
	
}


function leer_camaras(&$camaras) {
	// lo lee globalmente y "eternamente".
	$camaras=array();
	$camaras = apc_fetch("camaras"); // esto sucede muy a menudo.
	if (!$camaras) {	// esto rara vez sucede, ya que los datos ya estan previamente leidos.		
		$sql="select a.id_camara,a.nombre_camara,a.estado_actual,a.tipo_camara
		,a.proceso_actual,a.posicion_puerta,a.x,a.y,a.w,a.h,a.maxpallet
		,isnull(b.LecturaDirModulo,0) lecturadirmodulo,isnull(b.lecturadirtipo,0) lecturadirtipo
		,isnull(b.lectura_valor,0) lectura_valor
		from pf_camara as a left outer join     pf_sensorxcamara_alarma as b on a.id_camara=b.id_camara
		where a.tipo_camara<>'NOEX' order by a.id_camara  ";
		$total_camaras=0;
		$filas=0;
		
		$resultado="";
		ejecutarsql($sql,&$total_camaras,&$resultado);	
		for ($i=0;$i<$total_camaras;$i++) {
			$camaras[$i]["id_camara"]=mssql_result($resultado,$i, "id_camara");	
			$camaras[$i]["nombre_camara"]=mssql_result($resultado,$i, "nombre_camara");	
			$camaras[$i]["estado_actual"]=mssql_result($resultado,$i, "estado_actual");	
			$camaras[$i]["tipo_camara"]=mssql_result($resultado,$i, "tipo_camara");	
			$camaras[$i]["proceso_actual"]=mssql_result($resultado,$i, "proceso_actual");	
			$camaras[$i]["posicion_puerta"]=mssql_result($resultado,$i, "posicion_puerta");	
			$camaras[$i]["x"]=mssql_result($resultado,$i, "x");	
			$camaras[$i]["y"]=mssql_result($resultado,$i, "y");	
			$camaras[$i]["w"]=mssql_result($resultado,$i, "w");	
			$camaras[$i]["h"]=mssql_result($resultado,$i, "h");				
			$camaras[$i]["maxpallet"]=mssql_result($resultado,$i, "maxpallet");		
			$camaras[$i]["lecturadirmodulo"]=mssql_result($resultado,$i, "lecturadirmodulo");		
			$camaras[$i]["lecturadirtipo"]=mssql_result($resultado,$i, "lecturadirtipo");		
			$camaras[$i]["lectura_valor"]=mssql_result($resultado,$i, "lectura_valor");		
			
		}
		for ($i=0;$i<$total_camaras;$i++) {
			$sql="select * from pf_sensorxcamara where id_camara=".$camaras[$i]["id_camara"];
			$filas=0;
			$resultado="";
			ejecutarsql($sql,&$filas,&$resultado);	
			$camaras[$i]["nsensores"]=$filas;
		}		
		apc_store("camaras",$camaras); // en duro...
	} 
}
function leer_camaras_estado() {
	global $camaras,$camaras_estado;
	$camaras_estado = @apc_fetch("camaras_estado"); // esto sucede muy a menudo.
	$total_camaras_item=count($camaras);
	if (!$camaras_estado) {
		for ($i=0;$i<$total_camaras_item;$i++) {
			$camaras_estado[$i]["anterior"]=1; // 1 = error
			$camaras_estado[$i]["actual"]=0; // 0 = ok (apagado).
		}
		apc_store("camaras_estado",$camaras_estado);
	}
}

function leer_camaras_item(&$camaras_item,$forzado=0) {
	// lo lee globalmente y "eternamente".
	$camaras_item=array();
	$camaras_item = @apc_fetch("camaras_item"); // esto sucede muy a menudo.
	if (!$camaras_item or $forzado==1) {	// esto rara vez sucede, ya que los datos ya estan previamente leidos.		
		$sql="select * from pf_camara_item   order by id_item ";
		$total_camaras_item=0;
		$filas=0;

		
		
		$resultado="";
		ejecutarsql($sql,&$total_camaras_item,&$resultado);	
		for ($i=0;$i<$total_camaras_item;$i++) {
			$camaras_item[$i]["id_item"]=mssql_result($resultado,$i, "id_item");	
			$camaras_item[$i]["id_camara"]=mssql_result($resultado,$i, "id_camara");	
			$camaras_item[$i]["nombre_item"]=mssql_result($resultado,$i, "nombre_item");	
			$camaras_item[$i]["estado_actual"]=mssql_result($resultado,$i, "estado_actual");	
			$camaras_item[$i]["tipo_item"]=mssql_result($resultado,$i, "tipo_item");	
			$camaras_item[$i]["x"]=mssql_result($resultado,$i, "x");	
			$camaras_item[$i]["y"]=mssql_result($resultado,$i, "y");	
			$camaras_item[$i]["w"]=mssql_result($resultado,$i, "w");	
			$camaras_item[$i]["h"]=mssql_result($resultado,$i, "h");				
		}
		for ($i=0;$i<$total_camaras_item;$i++) {
			$sql="select * from pf_sensorxcamara_item where  id_item=".$camaras_item[$i]["id_item"] ;
			$filas=0;
			$resultado="";
			ejecutarsql($sql,&$filas,&$resultado);	
			$camaras_item[$i]["nsensores"]=$filas;
		}		
		apc_store("camaras_item",$camaras_item); // en duro...
	} 
}


function leer_menu(&$menu,$nivel=0) {
	// lo lee globalmente y "eternamente".
	$menu=array();
	
	$nivel_menu = apc_fetch("nivel_menu$nivel");
	if (!$nivel_menu or $nivel_menu!=$nivel) {	
		$sql="select * from pf_menu where nivelminimo<=$nivel order by id_menu ";
	
		$total_menu=0;
		$filas=0;
		

		
		$resultado="";
		ejecutarsql($sql,&$total_menu,&$resultado);	
		for ($i=0;$i<$total_menu;$i++) {
			$menu[$i]["id_menu"]=mssql_result($resultado,$i, "id_menu");	
			$menu[$i]["nombre_menu"]=mssql_result($resultado,$i, "nombre_menu");	
			$menu[$i]["icon"]=@mssql_result($resultado,$i, "icon");	
			$menu[$i]["paginaphp"]=@mssql_result($resultado,$i, "paginaphp");				
		}
		apc_store("menu$nivel",$menu); // en duro...
		apc_store("nivel_menu$nivel",$nivel); // en duro...
	} else {
		$menu = apc_fetch("menu$nivel");
	}

}

function apc_fetch_udt($key,$ttl=5){	
	$udtl_store = apc_fetch($key."_udt");
	$udt = time();
	if ($udtl_store){
		if (($udt-$udtl_store)<$ttl) { // 5 segundos maximo de vida. el parentes extra en la suma es muy importante!!!!!!!!!
			$val = apc_fetch($key);
			apc_store('dif', ($udt-$udtl_store));
			return $val; 
		} else {
			// no vamos a borrar, es mejor que los datos esten obsoleto a que no este y se caiga.
			/*apc_delete($key);
			apc_delete("udt".$key);*/
			
			return false;
		}
	} else {
		return false;
	}
}
function apc_store_udt($key,$g,$duracion=5){
	$udt = time()+$duracion;
	apc_store($key, $g);
	apc_store($key."_udt", $udt);
} 

function leer_camaras_actual(&$camaras_actual,$forzar=0) {	
	if (!apc_fetch_udt('camaras_actual',3) or $forzar) {		// 3 segundos maximos de vida.
 	$camaras_actual=array();
	$sql="select * from pf_camara a where tipo_camara<>'NOEX' order by id_camara";
	$filas=0;
	$resultado="";
	ejecutarsql($sql,&$filas,&$resultado);
	$totalcamaras=$filas;	
	// leemos las camaras..
	for ($i=0;$i<$totalcamaras;$i++) {		
		$camaras_actual[$i]["id_camara"]=mssql_result($resultado,$i, "id_camara");	
		$camaras_actual[$i]["estado_actual"]=mssql_result($resultado,$i, "estado_actual");	
		$camaras_actual[$i]["proceso_actual"]=mssql_result($resultado,$i, "proceso_actual");	
	}
	apc_store_udt('camaras_actual',$camaras_actual);	
	} else {
		$camaras_actual=apc_fetch_udt('camaras_actual');
	}
}

function leer_camaras_item_actual(&$camaras_actual,$forzar=0) {	
	if (!apc_fetch_udt('camaras_item_actual',3) or $forzar) {		// 3 segundos maximos de vida.
 	$camaras_actual=array();
	$sql="select * from pf_camara_item a  order by id_item";
	$filas=0;
	$resultado="";
	ejecutarsql($sql,&$filas,&$resultado);
	$totalcamaras=$filas;	
	// leemos las camaras..
	for ($i=0;$i<$totalcamaras;$i++) {		
		$camaras_actual[$i]["id_item"]=mssql_result($resultado,$i, "id_item");	
		$camaras_actual[$i]["id_camara"]=mssql_result($resultado,$i, "id_camara");	
		$camaras_actual[$i]["estado_actual"]=mssql_result($resultado,$i, "estado_actual");	
		$camaras_actual[$i]["tipo_item"]=mssql_result($resultado,$i, "tipo_item");	
	}
	apc_store_udt('camaras_item_actual',$camaras_actual);	
	} else {
		$camaras_actual=apc_fetch_udt('camaras_item_actual');
	}
}



function leer_temperatura(&$t,$n_camara,&$maxima,&$minima,&$estado,&$nombre_sensor,&$num_temp,&$limites) {
// OBSOLETO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?????????????????

	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $camaras;
	global $id_sensor;
	if (!apc_fetch_udt('tmp'.$n_camara)) {
		$sql="select * ";
		$sql.="from pf_sensorxcamara a,motorlecturas b ";
		$sql.="where a.id_camara=".$camaras[$n_camara]["id_camara"]." and a.lecturadirmodulo=b.lecturadirmodulo and b.lecturadirtipo=a.lecturadirtipo ";
		//$sql.="and a.lecturadirtipo=1 ";
		$sql.="order by a.orden,b.lecturadirmodulo,b.lecturadirtipo "; // es importante mantener el orden.
		$filas=0;
		$resultado="";
		ejecutarsql($sql,&$filas,&$resultado);	
		$tchar="";
		$maxima_v=-555;
		$minima_v=555;
		$estado=0;

		$num_temp=$filas;
		for ($e=0;$e<$filas;$e++) {			
			$nombre_sensor[$e]=mssql_result($resultado,$e, "Nombre_modulo");
			$tipo_escala[$e]=mssql_result($resultado,$e, "tipo_escala")+0;
			$dm=mssql_result($resultado,$e, "lecturadirmodulo");
			$vv=mssql_result($resultado,$e, "lecturavalor");
			$id_status=mssql_result($resultado,$e, "id_status");
			$limite_minimo=mssql_result($resultado,$e, "limite_minimo");
			$limite_minimo=($limite_minimo==='')?-60:($limite_minimo/10);
			$limite_maximo=mssql_result($resultado,$e, "limite_maximo");
			$limite_maximo=($limite_maximo==='')?60:($limite_maximo/10);	
			$limites[$e]['limite_minimo']=$limite_minimo;
			$limites[$e]['limite_maximo']=$limite_maximo;
			$t[$e]=($id_status=='V')?$vv:-666; 
			$vv=$vv/10;
			if ($vv>-55.5 and $vv<$minima_v and $tipo_escala[$e]<5) {
				$minima_v=$vv;
				$minima=$e;
			}
			if ($vv>$maxima_v) {
				$maxima_v=$vv;
				$maxima=$e;
			}
			if ($vv<=-55.5 and $tipo_escala[$e]<5) {
				$estado=1;
			}
			$id_sensor[$e]=$dm;
		}
		$t['minima']=$minima;
		$t['minima_v']=($minima_v!=555)?$minima_v:-555;
		$t['maxima']=$maxima;
		$t['maxima_v']=$maxima_v;
		
		apc_store_udt('tmp'.$n_camara,$t,60);
		apc_store_udt('limites'.$n_camara,$limites,60);
		apc_store_udt('nombre_sensor'.$n_camara,$nombre_sensor,60);
		apc_store_udt('id_sensor'.$n_camara,$id_sensor,60);
		apc_store_udt('num_temp'.$n_camara,$num_temp,60);
		
		//$t['minima_v']=-1;
	} else {
		
		$t=apc_fetch_udt('tmp'.$n_camara);
		$limites=apc_fetch_udt('limites'.$n_camara);
		//$t['minima_v']=1;
		$nombre_sensor=apc_fetch_udt('nombre_sensor'.$n_camara);
		$id_sensor=apc_fetch_udt('id_sensor'.$n_camara);
		
		$num_temp=apc_fetch_udt('num_temp'.$n_camara);
	}
}

function leer_estados_historicos(&$tabla,$n_camara,$n_proceso,$n_rango,$rango_minimo= 999,$rango_maximo=555,$numvalores=30) {
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $camaras;
	global $tabla_leyenda;
	$rango_minimo=($rango_minimo==999)?-555:$rango_minimo; //esto es porque la funcion no puede tener un default negativo.

	// se genera si o si, aunque existe en la memoria.
		$tabla=array();
		$inicio_epoch=mktime("0","0","0","1","1","2005",0);
		$fecha_mostrar=(mktime()-$n_rango-$inicio_epoch)/60;
		
	if ($n_proceso) {
		
		$sql="	SELECT * FROM pf_historico_proceso a,PF_SENSORXproceso B ";
		$sql.=" WHERE A.proceso=B.id_proceso ";
		$condicion_adicional=" and a.proceso=$n_proceso ";
	} else {
		$sql="	SELECT * FROM pf_historico a,PF_SENSORXCAMARA B ";
		$sql.=" WHERE A.camara=B.id_camara ";
		$condicion_adicional=" and b.id_camara=".$camaras[$n_camara]["id_camara"];
	}

			
	
	
	$sql.="AND A.sensor=B.LecturaDirModulo ";
	$sql.="AND a.sensor_tipo=B.LecturaDirTipo ";
	//$sql.="and a.valor>=$rango_minimo and a.valor<=$rango_maximo ";
	
	$sql.=$condicion_adicional." ";
	
	//$sql.="AND B.ID_STATUS='V' ";
	if ($n_rango) { $sql.="and fecha>=$fecha_mostrar"; }
	
	$sql.=" ORDER BY FECHA ASC, b.orden, a.SENSOR,a.sensor_tipo ";
			
	
			
	$filas=0;
	$resultado="";
	ejecutarsql($sql,&$filas,&$resultado);	
	$tchar="";
	$maxima_v=-555;
	$minima_v=555;
	$estado=0;
	$num_temp=$filas;
	$fec_anterior=-55;
	$x=0;
	$y=0; // sensores (y=0 es el eje x)
	
	// determinas la cantidad de sensores que trabajan en este sistema..
	$fec_anterior=mssql_result($resultado,0, "FECHA");
	$num_sensores=1;
	
	
	$num_sensores=$filas;
	for ($e=0;$e<$filas;$e++) {
		
		$tabla_leyenda[$e]=mssql_result($resultado,$e, "Nombre_modulo");
		$mo=mssql_result($resultado,$e, "FECHA");
		
		if ($mo!=$fec_anterior) {
			$num_sensores=$e;	
			
			break;
		}
	}
	
	$fec_anterior=-55;	
	// determinas la cantidad de saltos que deben haber.
	$num_columnas=floor($num_temp/$num_sensores); // numero de columnas (mediciones).
	
	if ($numvalores) {
		$saltov=floor($num_columnas/$numvalores);
		$saltov=($saltov==0)?1:$saltov;
	} else {
		$saltov=1;
	}
	$saltov=1;
	
	//echo "$num_sensores $num_columnas $num_temp  $saltov  <br>";
	
	
	$ctiempo=-1;
	$csensor=0;
	
	for ($e=0;$e<$filas;$e++) {
		// leemos la dupla... (el sistema se desestabilizara si no hay dupla pero ya estamos asegurados de antes.
		$mm=mssql_result($resultado,$e, "sensor_tipo");
		$mo=mssql_result($resultado,$e, "sensor");
		$vv=mssql_result($resultado,$e, "valor");
		//$fec=mssql_result($resultado,$e, "FECHA");
		$id_status=mssql_result($resultado,$e, "id_status");
		
		if (($e % $num_sensores)==0)  {
		//if ($fec<$fec_anterior) {				
			$ctiempo++;
			//$e=$e+(($y+1)*$saltov);
			$csensor=0;				
			//echo "ff<br>";
		}
		//echo $vv."_";
		$csensor++;
		if ($ctiempo>5) {
		//	break;
		}
		if ($csensor==1) {
			$tabla[0][$ctiempo]=date('j-M G:i',$inicio_epoch+(@mssql_result($resultado,$e, "fecha")*60));
		}
	
		
		
		$tabla[$csensor][$ctiempo]=($id_status=='V')?$vv/10:-666; 
		$tabla[$csensor][$ctiempo]=($tabla[$csensor][$ctiempo]>($rango_maximo/10))?null:$tabla[$csensor][$ctiempo];
		$tabla[$csensor][$ctiempo]=($tabla[$csensor][$ctiempo]<($rango_minimo/10))?null:$tabla[$csensor][$ctiempo];
	}

}


function leer_temperatura2(&$celsius,$n_camara,$n_proceso=0,$ttl_cache=0,$forzar=0) {
	// cargo la variable celsius.
	// con ttl_cache alto, se fuerza a que lea del cache (mas rapido);
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	
	global $camaras;
	global $id_sensor;

	if (!apc_fetch_udt('celsius'.$n_camara,$ttl_cache) or $forzar) { // voy a evitar leer mas rapido que (ttl por defecto 5 segundos)		
		$celsius=array();
		
		$sql="select * ";
		if (!$n_proceso) {			
			$sql.="from pf_sensorxcamara a,motorlecturas b ";
			@$sql.="where a.id_camara=".$camaras[$n_camara]["id_camara"]." and a.lecturadirmodulo=b.lecturadirmodulo and b.lecturadirtipo=a.lecturadirtipo ";
		} else {
			$sql.="from pf_sensorxproceso a,motorlecturas b ";
			$sql.="where a.id_proceso=".$n_proceso." and a.lecturadirmodulo=b.lecturadirmodulo and b.lecturadirtipo=a.lecturadirtipo ";
		}
		
		//$sql.="and a.lecturadirtipo=1 ";
		$sql.="order by a.orden,b.lecturadirmodulo,b.lecturadirtipo "; // es importante mantener el orden.
		
		$filas=0;
		
		$resultado="";
		ejecutarsql($sql,&$filas,&$resultado);	
		$tchar="";
		$maxima_v=-555;
		$minima_v=555;
		$minima=0;
		$maxima=0;
		$estado=0;
		$ahora=epochnow();
		$num_temp=$filas;
		@$tg=apc_fetch('tiempo_gracia'.$n_camara)+0;
		$num_temp_error=0;
		$estado_general=0;
		$estado_mensaje=0; // aunque exista un error, si esta en el periodo de gracia entonces no gatilla el mensaje.
		for ($e=0;$e<$filas;$e++) {	
			if ($n_proceso) {
				$delta_tiempo=$ahora-@$tg[$e]; // si negativo significa que queda tiempo, en caso contrario ya paso el tiempo de gracia.
				
			} else {
				$delta_tiempo=-1;
			}
			$celsius[$e]["nombre"]=mssql_result($resultado,$e, "Nombre_modulo");
			$celsius[$e]["tipo_escala"]=mssql_result($resultado,$e, "tipo_escala")+0;
			$dm=mssql_result($resultado,$e, "lecturadirmodulo");
			$lecturadirtipo=mssql_result($resultado,$e, "lecturadirtipo");
			$vv=mssql_result($resultado,$e, "lecturavalor");
			$id_status=mssql_result($resultado,$e, "id_status");
			$limite_minimo=mssql_result($resultado,$e, "limite_minimo");
			$limite_minimo=($limite_minimo==='')?-60:($limite_minimo/10);
			$limite_maximo=mssql_result($resultado,$e, "limite_maximo");
			$solo_lectura=mssql_result($resultado,$e, "solo_lectura");
			$limite_maximo=($limite_maximo==='')?60:($limite_maximo/10);			
			$celsius[$e]['limite_minimo']=$limite_minimo;
			$celsius[$e]['limite_maximo']=$limite_maximo;		
			$celsius[$e]['lecturadirtipo']=$lecturadirtipo; // nuevo						 
			$celsius[$e]['solo_lectura']=$solo_lectura;	// nuevo		
			$vv=($id_status=='V')?$vv:-666;  // desconectado.
			$vv=$vv/10;
			$estado=0;
			$celsius[$e]["t"]=$vv;
			if ($vv>-55.5 and $vv<$minima_v and $celsius[$e]["tipo_escala"]<5) {
				$minima_v=$vv;
				$minima=$e;
			}
			if ($vv>$maxima_v and $celsius[$e]["tipo_escala"]<5) {
				$maxima_v=$vv;
				$maxima=$e;
			}
			
			if ($vv!=-66.6) {
				// si el sensor esta desconectado entonces no gatilla ningun error.
				$estado=($vv==-55.5)?1:$estado; // sensor desconectado.
				$estado=($vv<$limite_minimo)?2:$estado; // muy frio.
				$estado=($vv>$limite_maximo)?3:$estado; // muy caliente.
				if ($delta_tiempo>0) {					
				
					if ($estado>0) {
						/*echo "alert('$delta_tiempo');";
						echo "alert('e:$e');";*/
						//echo "alert('tg:".$tg[$e]."');";
					}
					$estado_mensaje=($estado_mensaje<$estado)?$estado:$estado_mensaje;
					//$tg=($estado>0)?($ahora+15):0;
					
				} else {
					//ddds
					
				}
				$estado_general=($estado_general<$estado)?$estado:$estado_general;
				if ($estado) {
					$num_temp_error++;
				}
			}
			$celsius[$e]['estado']=$estado;
			$celsius[$e]["id"]=$dm;
		} // e
		$celsius['minima']=$minima;
		$celsius['minima_v']=($minima_v!=555)?$minima_v:-555;
		$celsius['maxima']=$maxima;
		$celsius['maxima_v']=$maxima_v;
		$celsius['estado']=$estado_general; // el peor caso de todos los sensores.
		$celsius['estado_mensaje']=$estado_mensaje; // el peor caso de todos los sensores.
		$celsius['num_temp']=$num_temp;
		$celsius['num_temp_error']=$num_temp_error;
		if (!$num_temp_error) {
			$tg=($ahora+15);  // si no hay error entonces el tiempo de gracia es 15 segundos.
		}
		
		apc_store_udt('celsius'.$n_camara,$celsius,30);
		apc_store('tiempo_gracia'.$n_camara,$tg,0);
		
		//$t['minima_v']=-1;
	} else {	
		$celsius=apc_fetch_udt('celsius'.$n_camara,$ttl_cache);
		$tg=apc_fetch_udt('tiempo_gracia'.$n_camara);
	}
}

function leer_temperatura_item2(&$celsius,$n_item,$ttl_cache=0,$forzar=0) {
	// cargo la variable celsius.
	// con ttl_cache alto, se fuerza a que lea del cache (mas rapido);
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	
	global $camaras_item;

	$tg=5;

	if (!apc_fetch_udt('celsius_item'.$n_item,$ttl_cache) or $forzar) { // voy a evitar leer mas rapido que (ttl por defecto 5 segundos)		
		$celsius=array();
		
		$sql="select * from pf_sensorxcamara_item a,motorlecturas b ";
		$sql.="where a.id_item=".$camaras_item[$n_item]["id_item"]." and a.id_status='I'  "; // i = input, o=output,d=dual (i/o) n=disconnected
		$sql.="and a.lecturadirmodulo=b.lecturadirmodulo and b.lecturadirtipo=a.lecturadirtipo ";		
		$sql.="order by a.id_item "; // es importante mantener el orden.
		
		$filas=0;
		
		$resultado="";
		ejecutarsql($sql,&$filas,&$resultado);	

		for ($e=0;$e<$filas;$e++) {	
			$celsius[$e]["lecturadirtipo"]=mssql_result($resultado,$e, "lecturadirtipo");
			$celsius[$e]["id_item"]=mssql_result($resultado,$e, "id_item");
			$celsius[$e]["id_status"]=mssql_result($resultado,$e, "id_status");
			$celsius[$e]["lecturadirmodulo"]=mssql_result($resultado,$e, "lecturadirmodulo");
			$celsius[$e]["lecturadirtipo"]=mssql_result($resultado,$e, "lecturadirtipo");
			$celsius[$e]["lecturavalor"]=mssql_result($resultado,$e, "lecturavalor");
			$celsius[$e]["lecturaerror"]=mssql_result($resultado,$e, "lecturaerror");
		} // e
		apc_store_udt('celsius_item'.$n_item,$celsius,30);
		apc_store('tiempo_gracia_item'.$n_item,$tg,0);
	} else {	
		$celsius=apc_fetch_udt('celsius_item'.$n_item,$ttl_cache);
		$tg=apc_fetch_udt('tiempo_gracia_item'.$n_item);
	}
}


?>
