Ver Mensaje Individual
  #6  
Antiguo 26-02-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Reputación: 25
Crandel Va por buen camino
parece que vas avanzado bien

Cita:
Empezado por jplj Ver Mensaje
También modifiqué la formula para obtener los datos.

Código Delphi [-]
  // La que propone Crandel:
  FVelViento = WordToFloat(Data[3] * 16 + Data[4]);

  // La que he hecho:
   FVelViento:= ((Ord(datos[ 3])*256) + Ord(datos[ 4]))/16;
perdon por explicarte bien la funsión WordToFloat o como la quieras llamar. lo que pasa es que la parte enterea solo tiene 4 bits en la parte baja, por eso el producto x 16 y no 256. Aun asi tambien esta mal lo que escribi.

La conversion correcta seria:

Código Delphi [-]
function WordToFloat(byteAlto, byteBajo: byte): double;
var
  val: double;
begin
  val := byteAlto * 16 + byteBajo div 16;
  val := val + (byteBajo and $0F) / 10000;
  Result := val;
end;

Cita:
Empezado por jplj Ver Mensaje
1.- Determinar el resultado de la autoverificación:
A la luz de los resultado que obtengo para el 2 byte, cualquier valor diferente a 255 indicaría un error. Pero quería saber cómo puedo determinar cuál es en base a la tabla de auto-test.
para saber cual es el error debes fijarte en el bit correspondiente a cada uno, por ejemplo:

Código Delphi [-]
  if (datos[2] and $01) <> 0 then 
   //  vel del viento correcta

Cita:
Empezado por jplj Ver Mensaje
2.- Control de validación "Checksum".
¿Cómo implemento en pascal la verificación del paquete?
debes hacer un ciclo for para todos datos de tu paquete haciendo xor entre ellos y comparar el resultado con el byte del checksum
__________________
[Crandel]
Responder Con Cita