<?
function leer_configuracion(&$arr) {
	// no guarda valores..
	$sql = "select * from pf_configuracion";
	$total = 0;
	$filas = 0;
	$arr = array ();
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	for ($i = 0; $i < $total; $i++) {
		$arr[mssql_result($resultado, $i, "id_configuracion")] = mssql_result($resultado, $i, "valor");
	}
}
function leer_version() {
	// no guarda valores..
	$sql = "select * from pf_version";
	$total = 0;
	$filas = 0;
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	return mssql_result($resultado, 0, "version");
}

function leer_camaras_noex(&$camaras_noex) {
	// lo lee globalmente y "eternamente".
	$camaras_noex = array ();
	$camaras_noex = apc_fetch("camaras_noex"); // esto sucede pocas veces.
	if (!$camaras_noex) {                      // esto rara vez sucede, ya que los datos ya estan previamente leidos.
		$sql = "select * from pf_camara where tipo_camara='NOEX' order by id_camara ";
		$total_camaras = 0;
		$filas = 0;
		$resultado = "";
		ejecutarsql($sql, &$total_camaras, &$resultado);
		for ($i = 0; $i < $total_camaras; $i++) {
			$camaras_noex[$i]["id_camara"] = mssql_result($resultado, $i, "id_camara");
			$camaras_noex[$i]["nombre_camara"] = mssql_result($resultado, $i, "nombre_camara");
			$camaras_noex[$i]["estado_actual"] = mssql_result($resultado, $i, "estado_actual");
			$camaras_noex[$i]["tipo_camara"] = mssql_result($resultado, $i, "tipo_camara");
			$camaras_noex[$i]["proceso_actual"] = mssql_result($resultado, $i, "proceso_actual");
			$camaras_noex[$i]["posicion_puerta"] = mssql_result($resultado, $i, "posicion_puerta");
			$camaras_noex[$i]["x"] = mssql_result($resultado, $i, "x");
			$camaras_noex[$i]["y"] = mssql_result($resultado, $i, "y");
			$camaras_noex[$i]["w"] = mssql_result($resultado, $i, "w");
			$camaras_noex[$i]["h"] = mssql_result($resultado, $i, "h");
			$camaras_noex[$i]["maxpallet"] = mssql_result($resultado, $i, "maxpallet");
			$camaras_noex[$i]["panel_direccion"] = mssql_result($resultado, $i, "panel_direccion");
			$camaras_noex[$i]["panel_direccion2"] = mssql_result($resultado, $i, "panel_direccion2");
			$camaras_noex[$i]["rotacion_direccion"] = mssql_result($resultado, $i, "rotacion_direccion");
			$camaras_noex[$i]["rotacion_valor"] = mssql_result($resultado, $i, "rotacion_valor");
			
		}
		for ($i = 0; $i < $total_camaras; $i++) {
			$sql = "select * from pf_sensorxcamara where id_camara=".$camaras_noex[$i]["id_camara"];
			$filas = 0;
			$resultado = "";
			ejecutarsql($sql, &$filas, &$resultado);
			$camaras_noex[$i]["nsensores"] = $filas;
		}
		apc_store("camaras_noex", $camaras_noex); // en duro...
	}
}
function leer_estado_pdf(&$arr, $proceso) {
	// no guarda valores..
	$sql = "select * from pf_log_proceso where id_proceso=$proceso order by fecha asc";
	$total = 0;
	$filas = 0;
	$inicio_epoch = mktime("0", "0", "0", "1", "1", "2005", 0);
	$arr = array ();
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	for ($i = 0; $i < $total; $i++) {
		$arr[$i][0] = mssql_result($resultado, $i, "id_camara");
		$arr[$i][1] = mssql_result($resultado, $i, "id_proceso");
		$arr[$i][2] = date('j-m-y G:i', $inicio_epoch + (@mssql_result($resultado, $i, "fecha") * 60));
		$arr[$i][3] = mssql_result($resultado, $i, "mensaje");
		$arr[$i][4] = mssql_result($resultado, $i, "id_mensaje");
	}
	if (!$total) {
		$arr = array (
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		""
		);
	}
}
function leer_temp_pdf(&$tabla, $n_camara, $n_proceso, $inicio, $fin) {
	//,$n_rango,$rango_minimo=999,$rango_maximo=555,$numvalores=30
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $camaras;
	global $tabla_leyenda;
	$t1 = microtime(true);
	// se genera si o si, aunque existe en la memoria.
	$tabla = array ();
	$inicio_epoch = mktime("0", "0", "0", "1", "1", "2005", 0);
	$epoch1 = cnvdateepoch($inicio);
	$epoch2 = cnvdateepoch($fin);
	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 a.camara=".$camaras[$n_camara]["id_camara"] . " ";
	}
	
	if ($epoch1) {
		@$sql .= "and fecha>=$epoch1 and fecha<=$epoch2 ";
	}
	$sql .= "AND A.sensor=B.LecturaDirModulo ";
	$sql .= "AND a.sensor_tipo=B.LecturaDirTipo ";
	$sql .= @$condicion_adicional . " ";
	$sql .= " ORDER BY FECHA ASC,b.orden, a.SENSOR,a.sensor_tipo ";
	echo $sql."<br>";
	$filas = 0;
	$resultado = "";
	ejecutarsql($sql, &$filas, &$resultado);
	if (!$filas) {
		return;
	}
	$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).
	$saltov = 1;
	$g = 0;
	for ($i = 0; $i < $num_columnas; $i = $i + $saltov) {
		for ($e = 0; $e < $num_sensores; $e++) {
			$e2 = $e + 1;
			$f = $e + ($i * $num_sensores);
			// leemos la dupla... (el sistema se desestabilizara si no hay dupla pero ya estamos asegurados de antes.
			$mm = mssql_result($resultado, $f, "sensor_tipo");
			$mo = mssql_result($resultado, $f, "sensor");
			$vv = mssql_result($resultado, $f, "valor");
			//$fec=mssql_result($resultado,$e, "FECHA");
			$id_status = mssql_result($resultado, $e, "id_status");
			if ($e == 0) {
				$tabla[0][$g] = date('j-m-y G:i', $inicio_epoch + (@mssql_result($resultado, $f, "fecha") * 60));
			}
			$vtabla="-";
			if ($mm==1) {
				$vtabla = ($vv == -666) ? "OUT" : $vv / 10;
			}
			if ($mm==2) {
				$vtabla = ($vv == 256) ? "ON" : "OFF";
			}
			if ($mm==2049) {
				$vrota=$camaras[$n_camara]["rotacion_valor"]-1;
				$valorr=$vv;
				$valor="--";
				$valor=((pow(2,$vrota) & $valorr ) !=0)?"DE":$valor;
				$valor=((pow(2,$vrota+1) & $valorr ) !=0)?"IZ":$valor;				
				$vtabla =$valor;
			}
			
			$tabla[$e2][$g] = ($vtabla == -55.5) ? "NC" : $vtabla;
		}
		$g++;
	}
	$t2 = microtime(true);
}
function leer_estados_historicos3(&$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;
	$t1 = microtime(true);
	$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 == "-") {
		global $fecha_inicial, $fecha_final;
		$fi = cnvdateepoch($fecha_inicial);
		$ff = cnvdateepoch($fecha_final);
		if ($ff == 0)
			$ff = 4614867; // 2011
		$sql .= "and fecha>=$fi and fecha<=$ff";
	} else {
		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);
	if (!$filas) {
		return;
	}
	/*echo "rango :".$n_rango;
	
	*/
	$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 < 1) ? 1 : $saltov;
	} else {
		$saltov = 1;
	}
	//$saltov=1;
	//echo "sensor $num_sensores colum $num_columnas temp $num_temp saltov $saltov  sensores : $num_sensores<br>";
	//echo $saltov;
	//echo "num : $num_columnas  $numvalores ";
	$g = 0;
	for ($i = 0; $i < $num_columnas; $i = $i + $saltov) {
		for ($e = 0; $e < $num_sensores; $e++) {
			$e2 = $e + 1;
			$f = $e + ($i * $num_sensores);
			// leemos la dupla... (el sistema se desestabilizara si no hay dupla pero ya estamos asegurados de antes.
			$mm = mssql_result($resultado, $f, "sensor_tipo");
			$mo = mssql_result($resultado, $f, "sensor");
			$vv = mssql_result($resultado, $f, "valor");
			//$fec=mssql_result($resultado,$e, "FECHA");
			$id_status = mssql_result($resultado, $e, "id_status");
			//echo $vv."_";
			if ($e == 0) {
				$tabla[0][$g] = date('j-M G:i', $inicio_epoch + (@mssql_result($resultado, $f, "fecha") * 60));
			}
			if ($mm==1) {
				$tabla[$e2][$g] = ($id_status == 'V') ? $vv / 10 : -666;
			}
			if ($mm==2) {
				$tabla[$e2][$g] = ($vv==256) ?"ON":"OFF";
			}
			if ($mm==2049) {
				$vrota=$camaras[$n_camara]["rotacion_valor"]-1;
				$valorr=$vv;
				$valor="--";
				$valor=((pow(2,$vrota) & $valorr ) !=0)?"DE":$valor;
				$valor=((pow(2,$vrota+1) & $valorr ) !=0)?"IZ":$valor;				
				$tabla[$e2][$g] =$valor;
			}
			
			
			$tabla[$e2][$g] = ($tabla[$e2][$g] > ($rango_maximo / 10)) ? null : $tabla[$e2][$g];
			$tabla[$e2][$g] = ($tabla[$e2][$g] < ($rango_minimo / 10)) ? null : $tabla[$e2][$g];
		}
		$g++;
	}
	$t2 = microtime(true);
}

function leer_todos_procesos(&$tabla, $n_camara, $proceso0,$proceso1, $rango_minimo = 999, $rango_maximo = 555,$numvalores = 30) {
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $camaras;
	global $tabla_leyenda;
	$t1 = microtime(true);
	$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()  - $inicio_epoch) / 60;
	
	$sql = "SELECT * FROM pf_historico_proceso a,PF_SENSORXproceso B,pf_proceso c ";
	$sql .= "WHERE A.proceso=B.id_proceso and a.proceso=c.id_proceso and a.proceso>= $proceso0 and a.proceso<= $proceso1 ";
	$sql .= " and A.sensor=B.LecturaDirModulo AND a.sensor_tipo=B.LecturaDirTipo and a.valor>=-9999 and a.valor<=9999 ";
	$sql .= "AND camara=$n_camara ";
	$sql .= "AND ( ";
	$sql .= " a.fecha= c.[fecha_inicio] ";
	$sql .= " OR a.fecha=c.[fecha_fin] ";
	$sql .= ") ";



	//$sql .= " ORDER BY FECHA ASC, b.orden,a.SENSOR,a.sensor_tipo ";
	$sql .= "ORDER BY  a.fecha, a.proceso, b.[orden],a.sensor,a.sensor_tipo; ";
	$filas = 0;
	
	$resultado = "";
	ejecutarsql($sql, &$filas, &$resultado);
	if (!$filas) {
		return;
	}

	$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++) {
		$mo = mssql_result($resultado, $e, "FECHA");
		
		if ($mo != $fec_anterior) {
			$num_sensores = $e;
			break;
		}
		$tabla_leyenda[$e] = mssql_result($resultado, $e, "Nombre_modulo");
	
	}
	$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 < 1) ? 1 : $saltov;
	} else {
		$saltov = 1;
	}
	//$saltov=1;
	//echo "sensor $num_sensores colum $num_columnas temp $num_temp saltov $saltov  sensores : $num_sensores<br>";
	//echo $saltov;
	//echo "num : $num_columnas  $numvalores ";
	$g = 0;
	$e2=-1;
	$num_filas=floor($filas/$num_sensores);
	for ($i = 0; $i < $num_filas; $i++) {
		
		for ($e = 0; $e < $num_sensores; $e++) {
			$e2++;
			$mm = mssql_result($resultado, $e2, "sensor_tipo");
			$mo = mssql_result($resultado, $e2, "sensor");
			$vv = mssql_result($resultado, $e2, "valor");
			$id_status = mssql_result($resultado, $e2, "id_status");
			if ($mm==1) {
				$tabla[$e+2][$i] =$vv/10; // ($id_status == 'V') ? $vv / 10 : -666;
			}
			if ($mm==2) {
				$tabla[$e+2][$i] =($vv==256)?"ON":"OFF";
			}
			if ($mm==2049) {
				$vrota=$camaras[$n_camara]["rotacion_valor"]-1;
				$valorr=$vv;
				$valor="--";
				$valor=((pow(2,$vrota) & $valorr ) !=0)?"DE":$valor;
				$valor=((pow(2,$vrota+1) & $valorr ) !=0)?"IZ":$valor;				
				$tabla[$e+2][$i]=$valor;
			}			
			//$tabla[$e][$i] = ($tabla[$e2][$g] > ($rango_maximo / 10)) ? null : $tabla[$e2][$g];
			//$tabla[$e][$i] = ($tabla[$e2][$g] < ($rango_minimo / 10)) ? null : $tabla[$e2][$g];			
		}
		$tabla[0][$i] = @mssql_result($resultado, $e2-1, "proceso");
		$tabla[1][$i] = date('j-M G:i', $inicio_epoch + (@mssql_result($resultado, $e2-1, "fecha") * 60));
	}
	
	/*
	for ($i = 0; $i < $num_columnas; $i = $i + $saltov) {
		for ($e = 0; $e < $num_sensores; $e++) {
			$e2 = $e + 1;
			$f = $e + ($i * $num_sensores);
			// leemos la dupla... (el sistema se desestabilizara si no hay dupla pero ya estamos asegurados de antes.
			$mm = mssql_result($resultado, $f, "sensor_tipo");
			$mo = mssql_result($resultado, $f, "sensor");
			$vv = mssql_result($resultado, $f, "valor");
			//$fec=mssql_result($resultado,$e, "FECHA");
			$id_status = mssql_result($resultado, $e, "id_status");
			//echo $vv."_";
			if ($e == 0) {
				$tabla[0][$g] = date('j-M G:i', $inicio_epoch + (@mssql_result($resultado, $f, "fecha") * 60));
			}
			$tabla[$e2][$g] = ($id_status == 'V') ? $vv / 10 : -666;
			$tabla[$e2][$g] = ($tabla[$e2][$g] > ($rango_maximo / 10)) ? null : $tabla[$e2][$g];
			$tabla[$e2][$g] = ($tabla[$e2][$g] < ($rango_minimo / 10)) ? null : $tabla[$e2][$g];
		}
		$g++;
	}
	*/
	$t2 = microtime(true);
}

function leer_estados_historicos2(&$tabla, $n_camara, $n_proceso, $pagina = "", $rango_minimo = 9999,
	$rango_maximo = 9999, $inicio = "", $fin = "") {
// usado por wprocesotablahistorico.
// si n_proceso="" entonces ve los datos del historico
// para graficos n_rango=""  para tablas n_rango es algun valor.
// n_rango es en minutos si no hay rango entonces es todo.
// desde indicad desde donde son las lecturas (alternativa a rango)
// pagina es otra alternativa para donde comienza a leer pero la lectura se determina por numero de lecturas anteriores y no por fecha.
	global $camaras;
	global $tabla_leyenda;
	//$n_camara+=0;
	$rango_minimo = ($rango_minimo == 9999)
		? -9999
		: $rango_minimo;                         //esto es porque la funcion no puede tener un default negativo (problemas con el notepad++)
	$pagina += 0;
	$tam_pagina = ($pagina === "")
		? 0
		: (1000
			* $camaras[
				$n_camara]["nsensores"]); // 10 listados de fechas por pagina usado solo si se esta usando las pagina.
	// se genera si o si, aunque existe en la memoria.
	$tabla = array ();
	$inicio_epoch = mktime("0", "0", "0", "1", "1", "2005", 0);
	if ($inicio) {
		$epoch1 = cnvdateepoch($inicio);
		$epoch2 = cnvdateepoch($fin);
	} else {
		$epoch1 = 0;
		$epoch2 = 0;
	}
	$pagina_contador = ($pagina === "") ? 0 : ($pagina * $tam_pagina);
	$pagina_contador++;
	$tmp = $camaras[$n_camara]["id_camara"];
	//debug($camaras);
	$sql = "";
	if ($n_proceso) {
		$tabla_historico = "pf_historico_proceso a";
		$sensores_historicos = "pf_sensorxproceso";
		$condicion_adicional = " and a.proceso=$n_proceso ";
	} else {
		$tabla_historico = "pf_historico a";
		$sensores_historicos = "PF_SENSORXCAMARA";
		$condicion_adicional = "";
	}
	if ($inicio) {
		$condicion_adicional .= " and fecha>=$epoch1 and fecha<=$epoch2 ";
	}
	// tabla..
	$sql .= "DECLARE @first_id int,@last_id int;\n";
	$sql .= "SET ROWCOUNT $pagina_contador;\n";
	$sql .= "SELECT @last_id = fecha FROM $tabla_historico  \n";
	$sql .= "	WHERE  a.valor>=$rango_minimo and a.valor<=$rango_maximo \n";
	$sql .= "	and a.camara=$tmp\n";
	$sql .= $condicion_adicional;
	$sql .= "ORDER BY FECHA DESC;\n";
	$sql .= "SET ROWCOUNT " . ($pagina_contador + $tam_pagina) . ";\n";
	$sql .= "SELECT @first_id = fecha FROM $tabla_historico  \n";
	$sql .= "	WHERE  a.valor>=$rango_minimo and a.valor<=$rango_maximo \n";
	$sql .= "	and a.camara=$tmp\n";
	$sql .= $condicion_adicional;
	$sql .= "ORDER BY FECHA DESC;\n";
	$sql .= "SET ROWCOUNT 0;\n";
	$sql .= "SELECT * FROM $tabla_historico ,$sensores_historicos B \n";
	if ($n_proceso) {
		$sql .= "WHERE A.proceso=B.id_proceso \n";
		$sql .= "and b.id_proceso=$n_proceso \n";
	} else {
		$sql .= "WHERE A.camara=B.id_camara \n";
		$sql .= "	and b.id_camara=$tmp ";
	}
	$sql .= "	AND A.sensor=B.LecturaDirModulo \n";
	$sql .= "	AND a.sensor_tipo=B.LecturaDirTipo \n";
	$sql .= "	and a.valor>=$rango_minimo and a.valor<=$rango_maximo \n";
	$sql .= "	and fecha>=@first_id and fecha<=@last_id \n";
	$sql .= $condicion_adicional;
	$sql .= "ORDER BY FECHA DESC,b.orden, a.SENSOR,a.sensor_tipo ;\n";
	
	$filas = 0;
	$resultado = "";
	ejecutarsql($sql, &$filas, &$resultado);
	$tchar = "";
	$maxima_v = -555;
	$minima_v = 555;
	$estado = 0;
	$num_temp = $filas;
	$fec_anterior = -55;
	$x = -1;
	$y = 0; // sensores (y=0 es el eje x)
	
	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");
		$fecha_linea = mssql_result($resultado, $e, "fecha");
		$id_status = mssql_result($resultado, $e, "id_status");
		//echo "$e - $vv $id_status <br>";
		if ($fecha_linea != $fec_anterior) {
			$x++;
			$y = 0;
		}
		$y++;
		if ($y == 1) {
			$tabla[0][$x] = date('j-M G:i', $inicio_epoch + ($fecha_linea * 60));
		// 13 Ene 2007 22:58 (php)
		// 13/01/2007 10:59:01 PM (sql)
		}
		if ($x == 0) {
			$tabla_leyenda[$y - 1] = mssql_result($resultado, $e, "Nombre_modulo");
		}
		$fec_anterior = $fecha_linea;
		//$tabla[$y][$x]=($id_status=='V')?$vv/10:-66.6;
		$tabla[$y][$x]="-";
		if ($mm==1) {
			$tabla[$y][$x] = $vv / 10;
		};
		if ($mm==2) {
			$tabla[$y][$x] = ($vv==256)?"ON":"OFF" ;
		}
		if ($mm==2049) {
			$vrota=$camaras[$n_camara]["rotacion_valor"]-1;
			$valorr=$vv;
			$valor="--";
			$valor=((pow(2,$vrota) & $valorr ) !=0)?"DE":$valor;
			$valor=((pow(2,$vrota+1) & $valorr ) !=0)?"IZ":$valor;				
			$tabla[$y][$x]=$valor;
		}
		
		
	}
}
function leer_tarja(&$tabla, $n_camara, $tarja, $tipo_buscar, $pagina = "", $rango_minimo = 999, $rango_maximo = 555) {
// si n_proceso="" entonces ve los datos del historico
// para graficos n_rango=""  para tablas n_rango es algun valor.
// n_rango es en minutos si no hay rango entonces es todo.
// desde indicad desde donde son las lecturas (alternativa a rango)
// pagina es otra alternativa para donde comienza a leer pero la lectura se determina por numero de lecturas anteriores y no por fecha.
//$n_camara+=0;
	$rango_minimo = ($rango_minimo == 999)
		? -555
		: $rango_minimo; //esto es porque la funcion no puede tener un default negativo.
	$tam_pagina = 100;   // 10 listados de fechas por pagina usado solo si se esta usando las pagina.
	// se genera si o si, aunque existe en la memoria.
	$tabla = array ();
	$inicio_epoch = mktime("0", "0", "0", "1", "1", "2005", 0);
	$pagina_contador = ($pagina === "") ? 0 : ($pagina * $tam_pagina);
	$pagina_contador++;
	// $arr=array("1","Inicia Con","2","Finaliza Con","3","En Cualquier Posicion","4","Busqueda Exacta");
	switch ($tipo_buscar) {
		case 1:
			$sql2 = "and id_tarja like '$tarja%'\n";
			break;
		case 2:
			$sql2 = "and id_tarja like '%$tarja'\n";
			break;
		case 3:
			$sql2 = "and id_tarja like '%$tarja%'\n";
			break;
			default:
		$sql2= "and id_tarja='$tarja'\n";
			break;
	}
	$sql = "";
	// tabla..
	$sql .= "DECLARE @first_id varchar(20),@last_id varchar(20); \n";
	$sql .= "SET ROWCOUNT $pagina_contador;\n";
	$sql .= "select @last_id=id_tarja from pf_tarjaxproceso a,pf_proceso b\n";
	$sql .= "where a.id_proceso=b.id_proceso	\n";
	if ($n_camara != "TODA") {
		$sql .= "and b.id_camara=$n_camara\n";
	}
	$sql .= $sql2;
	$sql .= "ORDER BY id_tarja DESC;\n";
	$sql .= "SET ROWCOUNT " . ($pagina_contador + $tam_pagina) . ";\n"; // este debe ser mayor
	$sql .= "select @first_id=id_tarja from pf_tarjaxproceso a,pf_proceso b\n";
	$sql .= "where a.id_proceso=b.id_proceso	\n";
	if ($n_camara != "TODA") {
		$sql .= "and b.id_camara=$n_camara\n";
	}
	$sql .= $sql2;
	$sql .= "ORDER BY id_tarja DESC;\n";
	$sql .= "SET ROWCOUNT 0;\n";
	$sql .= "select * from pf_tarjaxproceso a,pf_proceso b,pf_camara c\n";
	$sql .= "where a.id_proceso=b.id_proceso	\n";
	if ($n_camara != "TODA") {
		$sql .= "and b.id_camara=$n_camara\n";
	}
	$sql .= $sql2;
	$sql .= "and id_tarja>=@first_id and id_tarja<=@last_id\n";
	$sql .= "and b.id_camara=c.id_camara\n";
	$sql .= "ORDER BY id_tarja DESC;\n";
	$filas = 0;
	$resultado = "";
	ejecutarsql($sql, &$filas, &$resultado, false);
	$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)
	for ($e = 0; $e < $filas; $e++) {
		// leemos la dupla... (el sistema se desestabilizara si no hay dupla pero ya estamos asegurados de antes.
		$tabla[0][$e] = mssql_result($resultado, $e, "id_tarja");
		$tabla[1][$e] = mssql_result($resultado, $e, "id_proceso");
		$tabla[2][$e] = mssql_result($resultado, $e, "nombre_camara");
		$tabla[3][$e] = cnvepochdatelargo(mssql_result($resultado, $e, "fecha"));
	}
}
function leer_proceso(&$arr, $proceso) {
	// no guarda valores..
	$sql = "select * from pf_proceso where id_proceso=$proceso ";
	$total = 0;
	$filas = 0;
	$arr = array ();
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	for ($i = 0; $i < $total; $i++) {
		$arr[0] = mssql_result($resultado, $i, "id_especie");
		$arr[1] = mssql_result($resultado, $i, "Pallets");
		$arr[2] = mssql_result($resultado, $i, "Puchos");
		$arr[3] = mssql_result($resultado, $i, "bins");
		$arr[4] = mssql_result($resultado, $i, "frecuencia");
		$arr[5] = mssql_result($resultado, $i, "origen");
		$arr[6] = mssql_result($resultado, $i, "destino");
		$arr[7] = mssql_result($resultado, $i, "id_envase");
		$arr[8] = mssql_result($resultado, $i, "condicion_inicial");
		$arr[9] = cnvepochdatelargo(mssql_result($resultado, $i, "fecha_inicio"));
		$tmp = mssql_result($resultado, $i, "fecha_fin");
		$tmp2 = mssql_result($resultado, $i, "fecha_ultcam");
		$tmp2 = ($tmp) ? $tmp : $tmp2;
		$arr[10] = cnvepochdatelargo($tmp2);
		$arr[11] = mssql_result($resultado, $i, "creador_inicial");
		$arr[12] = cnvepochdate(mssql_result($resultado, $i, "fecha_inicio_giro1"));
		$arr[13] = cnvepochdate(mssql_result($resultado, $i, "fecha_fin_giro1"));
		$arr[14] = cnvepochdate(mssql_result($resultado, $i, "fecha_inicio_giro2"));
		$arr[15] = cnvepochdate(mssql_result($resultado, $i, "fecha_fin_giro2"));
		$arr[16] = cnvepochdate(mssql_result($resultado, $i, "fecha_inicio_giro3"));
		$arr[17] = cnvepochdate(mssql_result($resultado, $i, "fecha_fin_giro3"));
		$arr[18] = mssql_result($resultado, $i, "creador_final");
		$arr[19] = mssql_result($resultado, $i, "condicion_final");
		$arr[25] = mssql_result($resultado, $i, "fecha_ultcam"); // usado para sacar el rango.
		$arr[26] = mssql_result($resultado, $i, "estado");
		
		$arr[27] = cnvepochdate(mssql_result($resultado, $i, "fecha_inicio_giro4"));
		$arr[28] = cnvepochdate(mssql_result($resultado, $i, "fecha_fin_giro4"));		
		$arr[29] = cnvepochdate(mssql_result($resultado, $i, "fecha_inicio_giro5"));
		$arr[30] = cnvepochdate(mssql_result($resultado, $i, "fecha_fin_giro5"));				
	}
	if (!$total) {
		$arr = array (
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		
		"",
		"",
		"",
		""
		);
	}
}
function leer_tarjaxproceso(&$arr, &$envase, &$pinchado, &$eti, &$kg, &$cajas, &$calib,&$emb, $proceso) {
	// no guarda valores..
	$sql = "select * from pf_tarjaxproceso a,pf_tarja b where id_proceso=$proceso ";
	$sql .= " and a.id_tarja=b.codigo_tarjeta ";
	$total = 0;
	$filas = 0;
	$arr = array ();
	$envase = array ();
	$pinchado = array ();
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	for ($i = 0; $i < $total; $i++) {
		$arr[$i] = mssql_result($resultado, $i, "id_tarja");
		$envase[$i] = mssql_result($resultado, $i, "id_envase");
		$pinchado[$i] = mssql_result($resultado, $i, "con_sensor");
		$eti[$i] = mssql_result($resultado, $i, "etiqueta");
		$kg[$i] = mssql_result($resultado, $i, "kg") ;
		$cajas[$i] = mssql_result($resultado, $i, "num_cajas") ;
		$calib[$i] = mssql_result($resultado, $i, "calibre");
        $emb[$i] = mssql_result($resultado, $i, "embalaje");
	}
	if (!$total) {
		$arr = array_fill(0, 500, "");
		$envase = array_fill(0, 500, "");
		$pinchado = array_fill(0, 500, "");
	}
}
function leer_temp_maxima_proceso(&$arr, $proceso) {
	// no guarda valores..
	$sql = "set ROWCOUNT 1; ";
	$sql
		.= "select a.*,b.nombre_modulo from pf_historico_proceso a,pf_sensorxproceso b where a.proceso=$proceso and a.valor>-555 ";
	$sql .= "and a.sensor=b.lecturadirmodulo and tipo_escala<5 and sensor_tipo<>2";
	$sql .= " order by a.valor desc; ";
	$total = 0;
	$filas = 0;
	$arr = array ();
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	if ($total) {
		$arr[0] = mssql_result($resultado, 0, "sensor");
		$arr[1] = cnvepochdatelargo(mssql_result($resultado, 0, "fecha"));
		$arr[2] = mssql_result($resultado, 0, "valor");
		$arr[3] = mssql_result($resultado, 0, "nombre_modulo");
	} else {
		$arr = array (
		"",
		"",
		"",
		""
		);
	}
	$sql .= " set ROWCOUNT 0; ";
	ejecutarsql($sql, &$total, &$resultado);
}
function leer_temp_minima_proceso(&$arr, $proceso) {
	// no guarda valores..
	$sql = "set ROWCOUNT 1; ";
	$sql
		.= "select a.*,b.nombre_modulo from pf_historico_proceso a,pf_sensorxproceso b where a.proceso=$proceso and a.valor>-555 ";
	$sql .= "and a.sensor=b.lecturadirmodulo and tipo_escala<5 and sensor_tipo<>2";
	$sql .= " order by a.valor asc; ";
	$total = 0;
	$filas = 0;
	$arr = array ();
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	if ($total) {
		$arr[0] = mssql_result($resultado, 0, "sensor");
		$arr[1] = cnvepochdatelargo(mssql_result($resultado, 0, "fecha"));
		$arr[2] = mssql_result($resultado, 0, "valor");
		$arr[3] = mssql_result($resultado, 0, "nombre_modulo");
	} else {
		$arr = array (
		"",
		"",
		"",
		""
		);
	}
	$sql .= " set ROWCOUNT 0; ";
	ejecutarsql($sql, &$total, &$resultado);
}
function leer_fecha_inicial_proceso(&$arr, $proceso) {
	// no guarda valores..
	$sql = "set ROWCOUNT 1; ";
	$sql .= " select * from pf_historico_proceso where proceso=$proceso and valor>-555 order by fecha;";
	$total = 0;
	$filas = 0;
	$arr = array ();
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	if ($total) {
		$arr[0] = mssql_result($resultado, 0, "sensor");
		$arr[1] = cnvepochdatelargo(mssql_result($resultado, 0, "fecha"));
		$arr[2] = mssql_result($resultado, 0, "valor");
	} else {
		$arr = array (
		"",
		"",
		""
		);
	}
}
function crear_combo_proceso(&$arr, $id_camara, $proceso_actual = 8,$sin_historial=true) {
	// no guarda valores..
	$sql = "select * from pf_proceso where id_camara=$id_camara order by id_proceso";
	$total = 0;
	$filas = 0;
	$arr = array ();
	if ($sin_historial) {
		$arr[] = "";
		$arr[] = "-Historial-";
	} else {
		$arr[] = "";
		$arr[] = "-Seleccione Proceso-";	
	}
	
	$resultado = "";
	ejecutarsql($sql, &$total, &$resultado);
	for ($i = 0; $i < $total; $i++) {
		$proc = mssql_result($resultado, $i, "id_proceso");
		$arr[] = $proc;
		if ($proc == $proceso_actual) {
			$arr[] = "*Proceso Actual ".$proc . "(".cnvepochdate(mssql_result($resultado, $i, "fecha_inicio")) . ")*";
		} else {
			$arr[] = "Proceso ".$proc . "(".cnvepochdate(mssql_result($resultado, $i, "fecha_inicio"))
				. " hasta ".cnvepochdate(mssql_result($resultado, $i, "fecha_fin")) . ")";
		}
	}
}
function leer_sensoresxproceso(&$celsius, $n_proceso) {
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $camaras;
	global $id_sensor;
	$celsius = array ();
	$sql = "select * ";
	$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 ";
	$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++) {
		$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");
		$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);
		$celsius[$e]['limite_minimo'] = $limite_minimo;
		$celsius[$e]['limite_maximo'] = $limite_maximo;
		$vv = ($id_status == 'V') ? $vv : -666; // desconectado.
		$vv = $vv / 10;
		$celsius[$e]["t"] = $vv;
		if ($vv > -55.5 and $vv < $minima_v) {
			$minima_v = $vv;
			$minima = $e;
		}
		if ($vv > $maxima_v) {
			$maxima_v = $vv;
			$maxima = $e;
		}
		if ($vv <= -55.5) {
			$estado = 1;
		}
		$celsius[$e]["id"] = $dm;
	} // e
//$t['minima_v']=-1;
}
function posicion__sensoresxcamara(&$posicion, $n_camara) {
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $camaras;
	global $id_sensor;
	global $num_sensores_global;
	$celsius = array ();
	$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 ";
	$filas = 0;
	$resultado = "";
	ejecutarsql($sql, &$filas, &$resultado);
	$tchar = "";
	$maxima_v = -555;
	$minima_v = 555;
	$estado = 0;
	$posicion = array_fill(0, 100, "");
	$num_temp = $filas;
	$num_sensores_global = $num_sensores_global + $filas;
	for ($e = 0; $e < $filas; $e++) {
		$pos = mssql_result($resultado, $e, "posicion");
		$posicion[$pos] = $e;
	} // e
//$t['minima_v']=-1;
}
function leer_sensoresxcamara(&$celsius, $n_camara) {
	//global $titulowin,$id_camara,$totalcamaras,$nsensores;
	global $camaras;
	global $id_sensor;
	$celsius = array ();
	$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 ";
	$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++) {
		$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");
		$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);
		$celsius[$e]['limite_minimo'] = $limite_minimo;
		$celsius[$e]['limite_maximo'] = $limite_maximo;
		$celsius[$e]['posicion'] = mssql_result($resultado, $e, "posicion");
		$vv = ($id_status == 'V') ? $vv : -666; // desconectado.
		$vv = $vv / 10;
		$celsius[$e]["t"] = $vv;
		if ($vv > -55.5 and $vv < $minima_v) {
			$minima_v = $vv;
			$minima = $e;
		}
		if ($vv > $maxima_v) {
			$maxima_v = $vv;
			$maxima = $e;
		}
		if ($vv <= -55.5) {
			$estado = 1;
		}
		$celsius[$e]["id"] = $dm;
	} // e
//$t['minima_v']=-1;
}
?>