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 06-03-2019
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 178
Poder: 16
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: 06-03-2019 a las 10:49:08.
Responder Con Cita
  #2  
Antiguo 06-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.133
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 06-03-2019
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 178
Poder: 16
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 06-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.133
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 06-03-2019
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 178
Poder: 16
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 06-03-2019
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 178
Poder: 16
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
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 14:43:31
Control + Z en ComPort emula OOP 1 30-04-2011 04:40:51
ComPort.ShowSetupDialog gaston260 API de Windows 13 27-09-2010 05:39:25
Componente ComPort Mary Carmen G. Varios 1 06-08-2008 00:30:26
componente ComPort pollo_c Varios 12 02-08-2008 23:14:33


La franja horaria es GMT +2. Ahora son las 07:09:30.


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