En estos momentos he creado una clase extendida con la clase php_serial_class con el fin de poder simular una señal pulso (1 y 0) y poder enviar estos datos a una tarjeta. Para poder refrescar esta función he utilizado una aplicación que encontre en internet para hacer un timer con ajax. La aplicación como tal funciona bien pero he tenido el problema que el tiempo de respuesta mas rapido que logro obtener es de 3 segundos, si trato de hacerlo en menos tiempo y basandome en las pruebas que he hecho no alcanza a cargar todo el contenido y por tanto no es capaz de escribir los datos en la tarjeta.
Existe alguna forma alternativa de poder lograr mejores tiempos sin ajax? Y en caso de que si se pueda hacer con ajax ¿Como puedo optimizar el codigo para lograr mejores tiempos? La idea que yo tengo es tener algo asi como las clases ya "precargadas" y que no se tuvieran que llamar cada vez que se llama a la función pero no se me ocurre como.
Dejo el codigo que uso para que se entienda un poco mas lo que estoy explicando. De antemano gracias por la colaboración que me puedan prestar.
Aquí incluyo el codigo de ajax, como ven es muy simple:
Código HTML:
<script language="javascript"> function nuevoAjax(){ var xmlhttp=false; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function time(){ ajax=nuevoAjax(); ajax.open("GET", "inc.class.motor.php",true); ajax.onreadystatechange=function() { if (ajax.readyState==4) { document.getElementById('echos').innerHTML = ajax.responseText } else{ document.getElementById('echos').innerHTML = '<b>...</b>'; } } ajax.send(null) setTimeout('time();',3000); } </script> <body onLoad="setTimeout('time();',3000);"> <div id="echos"></div>
inc.class.motor.php
Código PHP:
include("php_serial.class.php");
class motor extends phpSerial{
var $sentido;//sentido en que ira el motor
//////////////////////////////////////////////////////////////////////////////////////////////
function ascii($dato){/*obtiene el valor ascii de un dato cualquiera*/
return chr($dato);
}
//////////////////////////////////////////////////////////////////////////////////////////////
function variables(){/*se definen las variables con las que se trabajaran para rotar el motor*/
define("DERECHA",$this->ascii(2));
define("IZQUIERDA",$this->ascii(1));
define("PARAR",$this->ascii(0));
$giro= array("derecha"=>DERECHA,"izquierda"=>IZQUIERDA,"parar"=>PARAR);
return $giro;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function sesiones(){/*define las variables de sesion que permitiran prender y apagar el motor*/
session_start();
session_register($prendido,$apagado,$intercalar);
$sentido=$this->giro();
$_SESSION["prendido"]=$sentido[0];
$_SESSION["apagado"]=$sentido[1];
}
//////////////////////////////////////////////////////////////////////////////////////////////
function derecha(){/*giro a la derecha*/
$arreglo=$this->variables();
$giro[]=$arreglo["derecha"];
$giro[]=$arreglo["parar"];
return $giro;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function izquierda(){/*giro a la izquierda*/
$arreglo=$this->variables();
$giro[]=$arreglo["izquierda"];
$giro[]=$arreglo["parar"];
return $giro;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function giro(){/*escoge el sentido de giro del motor*/
if ($this->sentido=="izquierda"){
$sentido=$this->izquierda();
}
if ($this->sentido=="derecha"){
$sentido=$this->derecha();
}
return $sentido;
}
//////////////////////////////////////////////////////////////////////////////////////////////
function intercalar($estado="0"){/*decide que valor se enviara para prender o apagar el motor*/
if ($estado==1){
$_SESSION["intercalar"]=1;
}
if ($estado==0){
$_SESSION["intercalar"]=0;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
}
$motor= new motor;
$motor->sentido="izquierda";//sentido del giro
$motor->sesiones();//inicio de variables de sesion
$motor->deviceSet("COM3");//puerto para escribir
$motor->confBaudRate(9600);
$motor->confParity("none");
$motor->confCharacterLength(8);
$motor->confStopBits(1);
$motor->confFlowControl("none");
$motor->deviceOpen();//abrir el puerto
if (isset($_SESSION["intercalar"])){//intercambiar variable de sesion entre 1 y 0
$estado=$_SESSION["intercalar"];
$motor->intercalar(!$estado);
}
else {
$motor->intercalar(0);
}
if ($_SESSION["intercalar"]==1){
echo ($_SESSION["intercalar"]);
echo ($_SESSION["prendido"]);
$motor->sendMessage($_SESSION["prendido"],0.001);
}
if ($_SESSION["intercalar"]==0){
echo ($_SESSION["intercalar"]);
$motor->sendMessage($_SESSION["apagado"],0.001);
echo ($_SESSION["apagar"]);
}
$motor->deviceClose();//cerrar puerto