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....