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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-03-2019
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 193
Poder: 20
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 11: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: 32.021
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: 193
Poder: 20
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: 32.021
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: 193
Poder: 20
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: 193
Poder: 20
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 06-03-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
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:40:33.


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