Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 2 Semanas
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 176
Poder: 15
ramonibk Va por buen camino
ComPort Hex

Buenos días señores/as.

tengo un problema que seguro que para los eruditos de este foro sera nimia. pero para mi me esta costando horrores.

estoy intentando comunicar con un tele-indicador. el cual hay que mandarle los datos en Hex. en formato

Código Delphi [-]
ComPort1.WriteStr(chr($61)+chr($62).....)

bueno hasta aquí todo bien.

el problema me viene cuando intento mandar el testo de un Edit. he intentado varios métodos pero no consigo que el formato adecuado.

Código Delphi [-]
function StringToHex(S: String): string;
var
 I: Integer;
begin
  Result:= '';
  for I := 1 to length (S) do
    Result:= Result + IntToHex(ord(S[i]),2);
end;


procedure TForm1.Button5Click(Sender: TObject);
Var
 Buffer : String;
begin
 Buffer := chr($0F)+chr($21)+chr($0E)+chr($01)+chr($5C); // Inicio del Paquete Fijo
 Buffer := Buffer + StringToHex(Edit1.Text);  // Texto a enviar.
 Buffer := Buffer + chr($20)+chr($20)+chr($03)+chr($08); // Fin del paquete Fijo
 ComPort1.WriteStr(Buffer);


end;
lo único que me pinta son los números correspondientes a cada carácter. y si en el Result le fuerso a pintar chr($. me lo pinta literalmente.
hay algún método para hacerlo.

un saludo.

Última edición por ramonibk fecha: Hace 2 Semanas a las 11:49:08.
Responder Con Cita
  #2  
Antiguo Hace 2 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.962
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No he entendido bien el problema.
Si envías 'H'+'o'+'l'+'a' ¿qué muestra?
Responder Con Cita
  #3  
Antiguo Hace 2 Semanas
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 176
Poder: 15
ramonibk Va por buen camino
Si envió
Código Delphi [-]
 Buffer := chr($0F)+chr($21)+chr($0E)+chr($01)+chr($5C); // Inicio del Paquete Fijo
 Buffer := Buffer +chr($54)+chr($65)+chr($78)+chr($74)+chr($6F);  // Texto a enviar.
 Buffer := Buffer + chr($20)+chr($20)+chr($03)+chr($08); // Fin del paquete Fijo
 ComPort1.WriteStr(Buffer);

El teneindicador me pinta "Texto"

Pero si lo hago

Código Delphi [-]
 Buffer := chr($0F)+chr($21)+chr($0E)+chr($01)+chr($5C)+chr($30)+chr($30)+chr($39)+chr($30)+chr($31)+chr($3A)+c  hr($20);
 Buffer := Buffer + StringToHex (Edit1.Text);
 Buffer := Buffer + chr($20)+chr($20)+chr($03)+chr($08)+ chr($AA)+chr($AA)+chr($09);

Siendo Edit1.Text := 'Texto'
lo que pinta es '546578746f' como decía literal.

y al forzar el Result

Código Delphi [-]
Result:= Result +'+chr($'+ IntToHex(ord(S[i]),2)+')';

me pinta

"+chr($54)+chr($65)+chr($78)+chr($74)+chr($6F)"
Responder Con Cita
  #4  
Antiguo Hace 2 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.962
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No tengo un delphi a mano ahora mismo, pero creo que debes modificar tu función StringToHex.
Result:= Result + IntToHex(ord(S[i]),2);
Ahi devuelve: 546578746f
Tendría que devolver cada uno por separado, $54$65$78$74$6f
Responder Con Cita
  #5  
Antiguo Hace 2 Semanas
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 176
Poder: 15
ramonibk Va por buen camino
ese es mi dilema.

como modificar
Código Delphi [-]
function StringToHex(S: String): string;
var
 I: Integer;
begin
  Result:= '';
  for I := 1 to length (S) do
    Result:= Result + IntToHex(ord(S[i]),2);
end;
Responder Con Cita
  #6  
Antiguo Hace 2 Semanas
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 176
Poder: 15
ramonibk Va por buen camino
Resuelto

No se si es la forma mas ortodoxa pero lo he echo de esta manera

Código Delphi [-]
Var
 Buffer : String;
 Str : String;
 I : Integer;
 N : Integer;
begin
 Str := '';
 Buffer := chr($0F)+chr($21)+chr($0E)+chr($01)+chr($5C); // Inicio del Paquete Fijo
   for I := 1 to length (Edit3.Text) do
    Begin
      N := ord(Edit3.Text[i]);
      Buffer := Buffer + Chr($+N);
   End;
 Buffer := Buffer + chr($20)+chr($20)+chr($03)+chr($08); // Fin del paquete Fijo
 ComPort1.WriteStr(Buffer);

Un saludo.
Responder Con Cita
  #7  
Antiguo Hace 2 Semanas
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 120
Poder: 6
bucanero Va por buen camino
Hola ramonibk

Según tu código esta parte solo te devuelve dentro de buffer exactamente la misma cadena que ya tienes en Edit3.text, sin ningún tipo de modificación
Cita:
Empezado por ramonibk Ver Mensaje

Código Delphi [-]
   for I := 1 to length (Edit3.Text) do
    Begin
      N := ord(Edit3.Text[i]);
      Buffer := Buffer + Chr($+N);
   End;
por lo que si te funciona con ese código, entonces te debería también de funcionar de esta otra forma:

Código Delphi [-]
 Buffer := chr($0F)+chr($21)+chr($0E)+chr($01)+chr($5C); // Inicio del Paquete Fijo
 Buffer := Edit3.text+ chr($20)+chr($20)+chr($03)+chr($08);

y aquí el código un poco mas optimizado:

Código Delphi [-]
const
  PckIni: string = #$0F#$21#$0E#$01#$5C;
  PckEnd: string = #$20#$20#$03#$08;

procedure enviar(const value: string)
begin
  ComPort1.WriteStr(PckIni + value + PckEnd);
end;

Un saludo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Componente Comport harimuya Varios 10 19-05-2011 15:43:31
Control + Z en ComPort emula OOP 1 30-04-2011 05:40:51
ComPort.ShowSetupDialog gaston260 API de Windows 13 27-09-2010 06:39:25
Componente ComPort Mary Carmen G. Varios 1 06-08-2008 01:30:26
componente ComPort pollo_c Varios 12 03-08-2008 00:14:33


La franja horaria es GMT +2. Ahora son las 13:53:00.


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