Pues ahora te comento.... cual es todo mi rollo...
Tengo un archivo llamado niveles.log que tiene el siguiente contenido:
niveles.log:
C¾› L/segMontecs QC*Dõ L/segSet Point Q% Norte QDŒ^õ L/seg Sur QDá=× L/seg Saavedra Qmts Sarramea Qmts Error CONTACTOR 1 Error CONTACTOR 2 Corrig. MontecaserosCorrig. Alto Verde Corrigiendo caudal, Error MAX IZQUIERDA Error MAX DERECHA Modo MANUAL Error excede los li_mites. Pase a MANUALPor Favor espere... Proximo error a cor_regir= QÃ*Dõ
Este archivo siempre es de 463 bytes, sin importar su contenido, o sea, los valores dentro pueden cambiar incluso hasta puede estar vacio pero siempre tiene 463 bytes... (desconozco el motivo)...
Lo que hago es pasar todo el contenido a hexadecimal... con esta funcion:
Código PHP:
function ascii2hex($ascii) {
$hex = '';
for ($i = 0; $i < strlen($ascii); $i++) {
$byte = strtoupper(dechex(ord($ascii{$i})));
$byte = str_repeat('0', 2 - strlen($byte)).$byte;
$hex.=$byte."";
}
return $hex;
}
Y con esto abro el archivo y leeo solo lo que que quiero de esos datos....
Código PHP:
$fp = fopen('niveles.log','rb');
$read = fread($fp,463);
fclose($fp);
$h = ascii2hex($read);
$matriz = $h[0].$h[1].$h[2].$h[3].$h[4].$h[5].$h[6].$h[7];
$montecaseros = $h[40].$h[41].$h[42].$h[43].$h[44].$h[45].$h[46].$h[47];
$norte = $h[116].$h[117].$h[118].$h[119].$h[120].$h[121].$h[122].$h[123];
$sur = $h[152].$h[153].$h[154].$h[155].$h[156].$h[157].$h[158].$h[159];
$setPoint = $h[84].$h[85].$h[86].$h[87].$h[88].$h[89].$h[90].$h[91];
$error = $h[918].$h[919].$h[920].$h[921].$h[922].$h[923].$h[924].$h[925];
Esto esta perfecto, funciona de maravillas... lo que hago luego de tomar estos caracteres (que solo tomo los valores ascii de la cadena), los paso a como floatente de la siguiente manera:
Código PHP:
function comaFlotante($val){
$entero = hexdec($val);
$ascci = pack('i', $entero);
$float = unpack('f', $ascci);
return $float[1];
}
$matriz = comaFlotante($matriz);
$montecaseros = comaFlotante($montecaseros);
$norte = comaFlotante($norte);
$sur = comaFlotante($sur);
$setPoint = comaFlotante($setPoint);
$error = comaFlotante($error);
y listo, esto luego lo guardo en un tabla en mi base de datos...
pero ahora tengo que hacer la inversa para uno de esos datos y es el "setpoint"
O sea... tengo que escribir en un archivo llamado setpoint.txt los valores ascii para que un PLC los lea...
Por ejemplo el usuario escribe en un campo : 40,5 o tambien 40 o cualquier numero decimal...
Esto lo tengo que llevar a la misma conversion ascii que lei al principio... entonces este es mi dilema...
Espero que me hayas entendido....