Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 26-02-2008
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 23
jplj Va por buen camino
Hola:

En la línea que indica Crandel he hecho el procedimiento que listo más abajo. La salida del procedimiento también la listo a continuación.

He hecho algunas modificaciones:

En :
Código Delphi [-]
if (Data[0] <> 85) then Exit;

Se producía un error al compilar
Cita:
Array type required
De ahí :

Código Delphi [-]
var
   datos: PChar;
....
begin
....
   datos:= Data;

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;

Creo que los datos que obtengo son correctos, tengo que contrastarlos con los de otra estación meteorológica para verlo.
Agradecería que me dijerais si encontráis algún error.

Si todo fuera correcto, me quedan dos preguntas:

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.

2.- Control de validación "Checksum".
¿Cómo implemento en pascal la verificación del paquete?


Código Delphi [-]

procedure TForm1.ApdDataPacket1Packet(Sender: TObject; Data: Pointer;
  Size: Integer);
var
   datos: PChar;
   s: string;
   FVelViento: Double;
   FDirViento: Double;
   FTempAire : Double;
   FPresion  : Double;
   FHumRelat : Double;
   FPuntRocio: Double;
   FAzi_Nort : Double;

begin

   datos:= Data;
  if (datos[0] <> #85) then Exit else s:= 'Inicio ';
  // verifico que sean los datos de compatible al modelo que tengo
  if (datos[1] <> #18) then Exit else s:= s + ' WST ';

  // Verifico que los datos sean validos
  s:= s + #13#10 + 'byte nº  2: ' +IntToStr(Ord(datos[2]));

  s:= s + #13#10 + 'byte nº  3: ' +IntToStr(Ord(datos[3]));
  s:= s + #13#10 + 'byte nº  4: ' +IntToStr(Ord(datos[4]));
  s:= s + #13#10 + 'byte nº  5: ' +IntToStr(Ord(datos[5]));
  s:= s + #13#10 + 'byte nº  6: ' +IntToStr(Ord(datos[6]));
  s:= s + #13#10 + 'byte nº  7: ' +IntToStr(Ord(datos[7]));
  s:= s + #13#10 + 'byte nº  8: ' +IntToStr(Ord(datos[8]));
  s:= s + #13#10 + 'byte nº  9: ' +IntToStr(Ord(datos[9]));
  s:= s + #13#10 + 'byte nº 10: ' +IntToStr(Ord(datos[10]));
  s:= s + #13#10 + 'byte nº 11: ' +IntToStr(Ord(datos[11]));
  s:= s + #13#10 + 'byte nº 12: ' +IntToStr(Ord(datos[12]));
  s:= s + #13#10 + 'byte nº 13: ' +IntToStr(Ord(datos[13]));
  s:= s + #13#10 + 'byte nº 14: ' +IntToStr(Ord(datos[14]));
  s:= s + #13#10 + 'byte nº 15: ' +IntToStr(Ord(datos[15]));
  s:= s + #13#10 + 'byte nº 16: ' +IntToStr(Ord(datos[16]));
  s:= s + #13#10 + 'byte nº 17: ' +IntToStr(Ord(datos[17]));
  s:= s + #13#10 + 'byte nº 18: ' +IntToStr(Ord(datos[18]));
  s:= s + #13#10 + 'byte nº 19: ' +IntToStr(Ord(datos[19]));
  s:= s + #13#10 + 'byte nº 20: ' +IntToStr(Ord(datos[20]));

//  FVelViento:= (Ord(datos[3]) * 16 + Ord(datos[4]));

   FVelViento:= ((Ord(datos[ 3])*256) + Ord(datos[ 4]))/16;
   FDirViento:= ((Ord(datos[ 5])*256) + Ord(datos[ 6]))/16;
   FTempAire := ((Ord(datos[ 7])*256) + Ord(datos[ 8]))/16;
   FPresion  := ((Ord(datos[ 9])*256) + Ord(datos[10]))/16;
   FHumRelat := ((Ord(datos[11])*256) + Ord(datos[12]))/16;
   FPuntRocio:= ((Ord(datos[13])*256) + Ord(datos[14]))/16;
   FAzi_Nort := ((Ord(datos[15])*256) + Ord(datos[16]))/16;

{  if (Ord(datos[2]) <> 1) then Exit else s:= s + IntToStr(Ord(datos[2]));;
  // Vel veinto
  FVelViento = WordToFloat(Data[3] * 16 + Data[4]);
 ....}

   Memo1.Lines.Add('Paquete: '+s);
   Memo1.Lines.Add('Velocidad Viento   : '+ FloatToStr(FVelViento));
   Memo1.Lines.Add('Dirección Viento   : '+ FloatToStr(FDirViento));
   Memo1.Lines.Add('Temperatura        : '+ FloatToStr(FTempAire));
   Memo1.Lines.Add('Presión            : '+ FloatToStr(FPresion));
   Memo1.Lines.Add('Humedad relativa   : '+ FloatToStr(FHumRelat));
   Memo1.Lines.Add('Punto Rocio        : '+ FloatToStr(FPuntRocio));
   Memo1.Lines.Add('Angulo Azimut-Norte: '+ FloatToStr(FAzi_Nort));


   Memo1.Lines.Add('-------------------------------------------------');

end;


Cita:
Salida del procedimiento:
Paquete: Inicio WST
byte nº 2: 255
byte nº 3: 0
byte nº 4: 3
byte nº 5: 19
byte nº 6: 95
byte nº 7: 1
byte nº 8: 132
byte nº 9: 62
byte nº 10: 94
byte nº 11: 3
byte nº 12: 51
byte nº 13: 0
byte nº 14: 215
byte nº 15: 9
byte nº 16: 97
byte nº 17: 0
byte nº 18: 66
byte nº 19: 223
byte nº 20: 1
Velocidad Viento : 0,1875
Dirección Viento : 309,9375
Temperatura : 24,25
Presión : 997,875
Humedad relativa : 51,1875
Punto Rocio : 13,4375
Angulo Azimut-Norte: 150,0625
-------------------------------------------------
Nuevamente muchas gracias por el tiempo que me dedicáis.
Un Saludo
Juan Pedro.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Servidor Web + Comunicaciones phrodo Internet 10 07-07-2007 12:29:40
Mandar datos RS232 CARSOFT_AR Varios 3 14-07-2006 23:01:25
Comunicaciones electronicas EDI Toni Conexión con bases de datos 0 18-04-2006 13:06:34
Comunicacion RS232 y LPT Cronos Varios 0 06-02-2005 08:10:16
Conexion Serial RS232 Pavlov Varios 2 06-10-2003 17:47:37


La franja horaria es GMT +2. Ahora son las 07:12:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi