Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Serial Port

Hola Amigos.

Tengo el siguiente codigo.


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
Comport1.Connected:=true;
Comport1.WriteStr('0200');
Comport1.Connected:=False;
end;
end.


Me explico. Yo quiero mandar dos hex 02 y 00 al puerto serial.Pero al correr este programita me da en el monitor que tengo de serial port eso mismo pero en ascii 30 32 30 30 y yo quiero que me de solo hex 02 00 .

La pregunta. Que estoy haciendo mal?

Gracias y un Saludo.
Responder Con Cita
  #2  
Antiguo 23-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Hola Amigos.

Tengo el siguiente codigo.


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
Comport1.Connected:=true;
Comport1.WriteStr('0200');
Comport1.Connected:=False;
end;
end.


Me explico. Yo quiero mandar dos hex 02 y 00 al puerto serial.Pero al correr este programita me da en el monitor que tengo de serial port eso mismo pero en ascii 30 32 30 30 y yo quiero que me de solo hex 02 00 .

La pregunta. Que estoy haciendo mal?

Gracias y un Saludo.
Y si mandas esto

Código Delphi [-]
Comport1.WriteStr(#2#0);

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 23-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Un Saludo Egostar.

No pues el monitor dice que eso es exactamente lo que le hacia falta al codigo.

Un millon de gracias Carnal.
Responder Con Cita
  #4  
Antiguo 23-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Un Saludo Egostar.

No pues el monitor dice que eso es exactamente lo que le hacia falta al codigo.

Un millon de gracias Carnal.
Ah pues que bien que te sirvio, la cuestion es que en realidad estabas mandando 4 caracteres 0 2 0 0, pero cuando envias caracteres de control como son 00 (NULL), 02 (STX), 03 (ETX), 05 (ENQ), 06 (ACK), 21 (NAK), que son las mas comunes, es necesario enviarlos como te indique.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 23-02-2008
canvilem canvilem is offline
Registrado
 
Registrado: feb 2008
Posts: 1
Poder: 0
canvilem Va por buen camino
WriteStr

No utilices WriteStr porque lo que envías es un String. Seguro que tienes otra función para enviar tus Hex.
Responder Con Cita
  #6  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola Canvilem.

La verdad estoy estudiando el comportamiento de un programita que me gustaria emular.Solo puedo leer la parte que corresponde a un micro que lo acompaña.La parte de la aplicacion esta escrita dice que en GUI para windows.Yo quiero hacer algo parecido pero en Delphi y es donde entra la tareita que me he puesto para comenzar con mi primer programita Delphi.(jajajaja nada facil pero esos retos me encantan).Para esto tengo algunas herramientas y todo el tiempo del mundo,(no me apura).La herramienta mas importante para esta primera etapa es esta.Serial con este programita puedo ver el protocolo entre el (target y su esclavo)Los hex esos 02 00 son los que manda el pc al micro OnCreate y espera que el micro le mande 48 69 2D 4C 4F 47 49 43 la aplicacion los compara y si son igual a lo que espera termina de habrir la aplicacion de lo contrario te daria un error " no establecio la comunicacion" algo asi.

Tengo que seguir estudiando el tema y espero, ir superando las etapas una por una.

Un Saludo.
Responder Con Cita
  #7  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola Amigos.

Estoy tratando de recivir por el serial port una data y llevarla a un edit.Pero no lo logro.
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CPort, StdCtrls;
type
  TForm1 = class(TForm)
    ComPort1: TComPort;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure ComPort1ReceiveCallBack(Data: String);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Comport1.Connected:=true;
Comport1.WriteStr(#2#0);
end;
 procedure TForm1.ComPort1ReceiveCallBack(Data: String);
begin
Edit1.Text:=(Data);
end;
 
end.

Que esta mal aqui?

Un Saludo.
Responder Con Cita
  #8  
Antiguo 24-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Hola Amigos.

Estoy tratando de recivir por el serial port una data y llevarla a un edit.Pero no lo logro.

Que esta mal aqui?

Un Saludo.
Bueno, tal vez no está mal, pero lo que creo que te falta es identificar en que momento recibes toda la cadena (desde principio a fin) desconozco ese componente que usas y no se su formato yo uso dos uno que se llama WSC (de pago) y el APro (Libre) y eso que requieres lo hace sin dificultades.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 24-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Leyendo un hilo en ASM donde muestras una página con el ejemplo de un code delphi vi esto que me parecio particularmente curioso

Código Delphi [-]
Temperatura:=Ord(Data[1]);

Te recomiendo que hagas un trace de tu codigo y ver que es lo que tiene el String Data.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola Egostar.

Creo entender la naturaleza del problema y a mi modo de entender.Es un problema de tiempo de ejecucion.Debo darle un tiempo entre el 02 y el 00 que mando al micro.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
Comport1.Connected:=true;
Comport1.WriteStr(#2#0);
end;

En la aplicacion original se maneja un timer (12 mhz).
Existe alguna forma de frenar el tiempo de ejecucion de una aplicacion Delphi sin importar la velocidad del PC?
Se puede crear un edit donde se pueda crear el tiempo de ejecucion de una aplicacion?

Rodando este programita puedo ver que el micro no responde, esto lo veo en el monitor de serial port que utilizo.Y creo que al no tener un tiempo de retardo entre el 02 y el 00 el micro interpreta 0200 y el tiene que comparar primero 02 ejecutar una rutina luego 00 y determina que hacer en ese caso.( mandar 8 hex de retorno al serial port)

Un Saludo.
Responder Con Cita
  #11  
Antiguo 24-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Hola Egostar.

Creo entender la naturaleza del problema y a mi modo de entender.Es un problema de tiempo de ejecucion.Debo darle un tiempo entre el 02 y el 00 que mando al micro.
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
Comport1.Connected:=true;
Comport1.WriteStr(#2#0);
end;

En la aplicacion original se maneja un timer (12 mhz).
Existe alguna forma de frenar el tiempo de ejecucion de una aplicacion Delphi sin importar la velocidad del PC?
Se puede crear un edit donde se pueda crear el tiempo de ejecucion de una aplicacion?

Rodando este programita puedo ver que el micro no responde, esto lo veo en el monitor de serial port que utilizo.Y creo que al no tener un tiempo de retardo entre el 02 y el 00 el micro interpreta 0200 y el tiene que comparar primero 02 ejecutar una rutina luego 00 y determina que hacer en ese caso.( mandar 8 hex de retorno al serial port)

Un Saludo.
Puedes hacer esto

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
   Comport1.Connected:=true;
   Comport1.WriteStr(#2);
   Sleep(12);
   Comport1.WriteStr(#0);
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #12  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Esto es lo que me da el monitor de serial port:

Com1 Opened
Baud Rate=56000
RTS Signal=False
DTR Signal=False
Line Control Change: None- 8- 1

Write 1 Bytes:
02
Write 1 Bytes:
00
Read 8 Bytes:
48 69 2D 4C 4F 47 49 43
Com1 Closed.

Eso es lo que me da el monitor al espiar entre el programa y el micro original.

El programita del micro esta configurado a interrumpir cualquier funcion y hacerle caso al serial port al recibir algo el lo compara y sigue una rutina en este caso al recibir 02 y luego de un tiempo (x) recibir el 00 el pasa a una rutina que manda al serial port de regreso esa cadena de 8 hex (que yo las puedo cambiar, todo lo que esta en el micro, lo puedo cambiar sin problemas, solo que despues de entender bien el funcionamiento de la aplicacion, cambiare algunas cosas del mismo.
En el programa original del pc utilizan como decia un "Target Clock" esto en un edit para poder alterarlo. En realidad el clock del micro no se lo pueden alterar por sofware, entonces entiendo que estan frenando por asi decirlo al pc y que los hex 02 y 00 entren en un tiempo de separacion que le de tiempo al micro de manipularlos, compararlos y tomar decicion de que hacer.

Un Saludo.
Responder Con Cita
  #13  
Antiguo 24-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Para hacer pausas entre cada envio se usa la función Sleep(), puedes ir jugando con los valores, tal vez tambien necesites hacer alguna pausa antes de leer el puerto.

Yo haría una pausa mas larga, por ejemplo 120 ms entre envio y envio y una pausa de 256 ms antes de leer el puerto.

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
   Comport1.Connected:=true;
   Comport1.WriteStr(#2);
   Sleep(120);
   Comport1.WriteStr(#0);
   Sleep(256);
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #14  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Buano ya cambie el tiempo de Sleep a diferentes parametros y nada.Yo espero que el micro mande los 8 hex y puede que los este mandando.Lo que uso para monitoriar el serial port es un programa 100% software (no usa cables para nada.Solo monitorea las actividades del serial port y no que pasa en su pin de entrada.El micro no espera que el programa lo quiera recibir o no,el solo necesita recibir dos hex 02 y 00 entonces manda al serial port los 8 hex antes mencionados.Si el programa los espera los leeara sino se los pierde,pero el micro no entiende eso.La rutina del micro para mandar algo al puerto serial no esta en dependencia de si el pc los quiere leer o no.(yo entendiendo esto esperaba leerlos en el monitor)Pero si este fuera con cables y estubiera en otra pc los estaria mirando.Ahora si quiero ver si el micro los manda y como el monitor que tengo para ello solo me dira que es lo que el serial port esta recibiendo tendre que estar en la aplicacion al final de esos dos hex 02 y 00 que la aplicacion entre a leer el serial port.
Puede que siga confundido.

Un Saludo.
Responder Con Cita
  #15  
Antiguo 24-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Buano ya cambie el tiempo de Sleep a diferentes parametros y nada.Yo espero que el micro mande los 8 hex y puede que los este mandando.Lo que uso para monitoriar el serial port es un programa 100% software (no usa cables para nada.Solo monitorea las actividades del serial port y no que pasa en su pin de entrada.El micro no espera que el programa lo quiera recibir o no,el solo necesita recibir dos hex 02 y 00 entonces manda al serial port los 8 hex antes mencionados.Si el programa los espera los leeara sino se los pierde,pero el micro no entiende eso.La rutina del micro para mandar algo al puerto serial no esta en dependencia de si el pc los quiere leer o no.(yo entendiendo esto esperaba leerlos en el monitor)Pero si este fuera con cables y estubiera en otra pc los estaria mirando.Ahora si quiero ver si el micro los manda y como el monitor que tengo para ello solo me dira que es lo que el serial port esta recibiendo tendre que estar en la aplicacion al final de esos dos hex 02 y 00 que la aplicacion entre a leer el serial port.
Puede que siga confundido.

Un Saludo.
Vamos a hacer una prueba digamos "manual":

Abre hiperterminal, configura los parametros de comunicacion, envia el archivo que adjunto (Menú Transferir, Enviar Archivo de texto) y ve lo que regresa el dispositivo.

El primer hexa, contiene los dos caracteres 02 y 00, los otros son por separado.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 02-01-2009 a las 22:38:35.
Responder Con Cita
  #16  
Antiguo 24-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Una pregunta, veo que estas tratando de usar una velocidad de Baud Rate=56,000, pero.... acaso no será Baud Rate=57,600

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #17  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Yo nunca he usado hiperterminal, no tengo idea ni como hacerlo.Ahora bien tengo un RealTerm:Serial Capture Program y acabo de configurarlo a los parametros del micro, le puce los hex 02 00 seguidos y me dio la respuesta del micro con su cadena de 8 hex.luego los mande por separado manual en dos botones primero el 02 y luego el 00 y me dio la misma respuesta.El micro esta funcionando bien, al parecer es que el programa que uso de monitor como es por software si no mira actividad en el serial port no me lee nada.

Tengo que en la aplicacion delphi despues de mandarle esos hex estar recibiendo el serial port.

Creo que por eso no miro nada en el otro monitor.
Responder Con Cita
  #18  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Ya cambie la velocidad tambien.

Cita:
Empezado por egostar Ver Mensaje
Una pregunta, veo que estas tratando de usar una velocidad de Baud Rate=56,000, pero.... acaso no será Baud Rate=57,600

Salud OS
El programita espia al rodar la aplicacion original con el micro me dice que es a 56,000 y puedo leer los 8 hex que retorna el micro.
Responder Con Cita
  #19  
Antiguo 24-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hice un pequeño programa para capturar lo que se recibe en el puerto, ademas le he puesto las señales del puerto serial para ver cuando se envia y cuando se reciben caracteres y el estado de otras señales importantes.

Espero que esto funcione.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 02-01-2009 a las 22:38:35.
Responder Con Cita
  #20  
Antiguo 24-02-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Eso esta perfecto.

Cuando lo ruedo con el micro me da los 8 hex, las luces solo son TX and RX.

Dime algo que configuracion tiene el serial port en ese programita?

Un Saludo.
Responder Con Cita
Respuesta



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
Port Fordward Y Conexion A Firebird mjjj Firebird e Interbase 4 28-12-2007 15:32:35
Serial Port desde Delphi MaMu API de Windows 2 19-06-2007 01:14:53
Función PORT. para puerto LPT en XP vicruffo Varios 2 09-03-2007 23:21:09
Busco ordenador o portátil Arcioneo Varios 2 18-07-2006 13:49:32
Como se usa el Componente Serial Port en C# (VS2005)? z-7 .NET 0 16-12-2005 05:02:05


La franja horaria es GMT +2. Ahora son las 19:32:35.


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