Ver Mensaje Individual
  #7  
Antiguo 28-02-2008
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Reputación: 23
jplj Va por buen camino
Thumbs up

Hola:

Ya he resuelto los problemas, pero surgen otros:

En relación a la verificación del autotest, la sentencia que propones:
Código Delphi [-]
if (datos[2] and $01) <> 0 then
genera un error al compilar:
Cita:
Operator not applicable to this operand type
Finalmente lo he resuelto de la siguiente forma:
Código Delphi [-]

FAutoTest: Array[0..7] of integer;

...

   procedure AutoTest(valor:integer);
   var
      i:integer;
   begin
      i:= 0;
      while i < 8 do
      begin
         if ((1 shl i) and valor) > 0 then
            FAutoTest[i]:= 1
         else
            FAutoTest[i]:= 0;
         inc(i);
      end;
    end;

var

    ....

begin
    ...
     // 3.- Verificación del autotest.
   if (Ord(datos[2])) <> 255 then
   begin
      AutoTest((Ord(datos[2])));
      Exit;
   end;

Luego se puede comprobar los valores de FAutoTest.

El problema que tengo ahora es con los valores negativos de las magnitudes, en concreto con la temperatura:
Cita:
Bytes nº 4 a xx “Valores de los parámetros meteorológicos”
Cada parámetro meteorológico se transmite con un formato de 2 bytes.
12 bits se utilizan para representar los números enteros y 4 bits para las fracciones del número entero. La estructura de los bytes se representa a continuación.
El primer byte transmitido representa 8 de los 12 bits usados para representar el entero.
El segundo byte transmitido utiliza los primeros 4 bits para representar el resto de los enteros y los cuatro últimos bits para representar las fracciones.
El bit menos significativo (LSB) tiene un valor de 1/16º de la unidad de tamaño medida.

Los números negativos se expresan usando el valor 2.


High byte Low byte
----------------------------------------- ---------------------------
MSB> 15 | 14 | 14 | 13 | 12 | 11 | 10 | 9 | 8 || 7 | 6 | 5 | 4 | 3 | 2 | 1 < LSB


Cálculo del valor de dos bytes = ((Byte alto * 256) + (Byte bajo))/16

Una velocidad del viento de 22,75 m /s se codifica 016C Hex
Una dirección del viento de 22,00 grados se codifica 0160 Hex
Una temperatura de -22,75 °C se codifica FE94 Hex
Una presión de 1013 hPa se codifica 3F50 Hex
¿Qué significa "Los números negativos se expresan usando el valor 2"?



Nuevamente muchas gracias por el tiempo que me dedicáis.
Un Saludo
Juan Pedro.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita