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 03-05-2011
aagrlp640 aagrlp640 is offline
Miembro
NULL
 
Registrado: abr 2011
Ubicación: México
Posts: 12
Poder: 0
aagrlp640 Va por buen camino
Hola FGarcia, estuve investigando de lo que mecomentas de OnRxChar, quería saber si me podrías explicar como se usa o como tendría que integrarlo a mi código.
Responder Con Cita
  #2  
Antiguo 04-05-2011
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Bueno, este ejemplo viene en el programa de ejemplo de la carpeta Examples que se instala junto con el componente. Tiene algunas modificaciones para otra cosa que use antes pero te sirve.


Código Delphi [-]
{-----------------------------------------------------------------------------
  Procedure: ComPortRxChar
  Author:    Administrator
  Date:      05-ago-2008
  Arguments: Sender: TObject; Count: Integer
  Result:    Este es el procedimiento clave para recibir datos desde el puerto
             serie. Cualquier caracter que entra por el puerto serie lo coloca
             -en este caso- en el componente Memo. Si se necesita recibir
             caracteres diferentes y para cada uno de esos caracteres realizar
             una accion diferente, se puede usar una estructura de tipo Case Of
             o IF ELSE
             Si los datos a recibir son de una longitud constante o vienen de-
             limitados por un caracter de inicio o por un caracter terminador
             es preferible usar el componente ComDataPacket en vez de este
             Evento. NOTA: NO SE PUEDEN USAR PARA UN MISMO PUERTO AMBOS. SON
             EXCLUYENTES.
-----------------------------------------------------------------------------}
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
  //Aqui leemos lo que entro al puerto serie
  ComPort.ReadStr(Str, Count);

  //Aqui escribimos en el Memo. Coloque comentarios para no usar esta parte
  Memo.Text := Memo.Text + Str;

  {Quite los comentarios para usar esta seccion de ejemplo IF ELSE. Pruebe con
  el checkbox de nueva linea checado y sin checar}
  {if Str = 'A' then
    ShowMessage('Recibi una letra A')
  else if Str = '1' then
    ShowMessage('Recibi un numero 1')
  else
    ShowMessage('Recibi esto: ' + Str);}
  
end;
__________________
ESTO ES UN FORO ... NO UN MÓVIL
¿Por qué no escribir de una manera comprensible para que los humanos lo podamos entender?
Responder Con Cita
  #3  
Antiguo 04-05-2011
aagrlp640 aagrlp640 is offline
Miembro
NULL
 
Registrado: abr 2011
Ubicación: México
Posts: 12
Poder: 0
aagrlp640 Va por buen camino
Muchas gracias por la ayuda me has apoyado bastante, dejenme checar bien los archivos de ejemplo y si hay alguna novedad yo les aviso.
Saludos.
Responder Con Cita
  #4  
Antiguo 05-05-2011
aagrlp640 aagrlp640 is offline
Miembro
NULL
 
Registrado: abr 2011
Ubicación: México
Posts: 12
Poder: 0
aagrlp640 Va por buen camino
Hola, ya lo logre hacer funcionar correctamente en mi nokia n900, sin embargo en un modem usb de telcel marca zte modelo MF100 me falla, desde la hiperterminal he probado los comandos y si me funcionan, sin embargo en delphi algunos no funcionan.
Estos comandos no funcionan en Delphi me mandan “ERROR”:
Código:
AT+CMGF=1   (Para definir el formato del mensaje)
AT+CMGs=”442……” (Para enviar un mensaje)
Algunos que si funcionan son por ejemplo:
Código:
AT (Ver si hay comunicación con el modem)
AT+CGMI (Nombre del fabricante)
Sin embargo en el n900 si corre bien todos los que ponga. No sé que será lo que falla que en hiperterminal si me reconoce todos y en Delphi sólo algunos
Aquí está esa parte de código donde pongo esos comandos
Código Delphi [-]
        procedure TForm1.Button_SendClick(Sender: TObject);
var
  Str: String;
begin

  if Comport.Connected  then
    begin
        mensaje:= Edit_Data.Text;
        at := 'AT' + #13#10; {Este commando si funciona en Delphi}
        ComPort.WriteStr(at); 
        Sleep(10);
        at := 'AT+CMGF=1' + #13#10; {Este commando si funciona en hiperterminal pero no en delphi}
        ComPort.WriteStr(at);
        Sleep(10);
        at := 'AT+CMGS="4424311080"' + #13#10; {Este commando si funciona en hiperterminal pero no en delphi}
        ComPort.WriteStr(at);
        Sleep(10);
        ComPort.WriteStr(mensaje + #26);
        Sleep(10);
      end
  Else
    begin
      lblpuerto.Caption := 'Se debe conectar primero al puerto';
    end
end;
Les pongo todo mi código a continuación:

Código Delphi [-]
unit ComMainForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, CPort, CPortCtl;

type
  TForm1 = class(TForm)
    ComPort: TComPort;
    Memo: TMemo;
    Button_Open: TButton;
    Button_Settings: TButton;
    Edit_Data: TEdit;
    Button_Send: TButton;
    lblpuerto: TLabel;
    ComLed1: TComLed;
    Label1: TLabel;
    procedure Button_OpenClick(Sender: TObject);
    procedure Button_SettingsClick(Sender: TObject);
    procedure Button_SendClick(Sender: TObject);
    procedure ComPortOpen(Sender: TObject);
    procedure ComPortClose(Sender: TObject);
    procedure ComPortRxChar(Sender: TObject; Count: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  at : AnsiString;
  mensaje : String;
implementation

{$R *.DFM}

procedure TForm1.Button_OpenClick(Sender: TObject);
begin
  if ComPort.Connected then
    begin
    ComPort.Close;
    lblpuerto.Caption := 'Desconectado';
    end
  else
    begin
    ComPort.Port := 'COM5';
    ComPort.BaudRate := StrToBaudRate('2400');
    ComPort.Open;
    lblpuerto.Caption := 'Conectado a '+ ComPort.Port;

    end
end;

procedure TForm1.Button_SettingsClick(Sender: TObject);
begin
  ComPort.ShowSetupDialog;
end;

procedure TForm1.Button_SendClick(Sender: TObject);
var
  Str: String;
begin

  if Comport.Connected  then
    begin
        mensaje:= Edit_Data.Text;
        at := 'AT' + #13#10;
        ComPort.WriteStr(at);
        Sleep(10);
        at := 'AT+CMGF=1' + #13#10;
        ComPort.WriteStr(at);
        Sleep(10);
        at := 'AT+CMGS="4424311080"' + #13#10;
        ComPort.WriteStr(at);
        Sleep(10);
        ComPort.WriteStr(mensaje + #26);
        Sleep(10);
      end
  Else
    begin
      lblpuerto.Caption := 'Se debe conectar primero al puerto';
    end
end;

procedure TForm1.ComPortOpen(Sender: TObject);
begin
  Button_Open.Caption := 'Desconectar';
end;

procedure TForm1.ComPortClose(Sender: TObject);
begin
  if Button_Open <> nil then
    Button_Open.Caption := 'Conectar';
end;

procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
  ComPort.ReadStr(Str, Count);
  Memo.Text := Memo.Text + Str;
end;


end.
Muchas gracias, ojalá me puedan apoyar.
Saludos.

Última edición por aagrlp640 fecha: 05-05-2011 a las 20:52:07.
Responder Con Cita
  #5  
Antiguo 30-06-2011
luk2009 luk2009 is offline
Miembro
 
Registrado: abr 2009
Posts: 33
Poder: 0
luk2009 Va por buen camino
el comando at+cmgf=1 puede que te de error debido a que tu celular no acepte el formato de texto. Puedes probar el comando AT+CMGF=0 y si te da ok, entonces significa que el formato que acepta es PDU.

Hay muchos celulares y modem gsm que solo funcionan enviando mensajes en formato PDU y algunos aceptan ambos pero hay que probar.
Responder Con Cita
  #6  
Antiguo 30-06-2011
aagrlp640 aagrlp640 is offline
Miembro
NULL
 
Registrado: abr 2011
Ubicación: México
Posts: 12
Poder: 0
aagrlp640 Va por buen camino
Thumbs up

Cita:
Empezado por luk2009 Ver Mensaje
el comando at+cmgf=1 puede que te de error debido a que tu celular no acepte el formato de texto. Puedes probar el comando AT+CMGF=0 y si te da ok, entonces significa que el formato que acepta es PDU.

Hay muchos celulares y modem gsm que solo funcionan enviando mensajes en formato PDU y algunos aceptan ambos pero hay que probar.
Hola luk2009, muchas gracias por la respuesta, pero de hecho ya pude solucionar mi problema lo que hice fue en vez de usar sleep, mejor use un timer para dar mas tiempo para que se ejecute bien el comando, de hecho el modem de telcel si acepta envío de mensajes en modo texto, nada mas que esta medio feo y lento, por eso el n900 lo hacia todo bien,
Saludos
Responder Con Cita
  #7  
Antiguo 01-07-2011
luk2009 luk2009 is offline
Miembro
 
Registrado: abr 2009
Posts: 33
Poder: 0
luk2009 Va por buen camino
me alegro que hayas podido avanzar con tu proyecto. yo no uso comport, yo utilizo asyncpro o apro, aunque estoy pensando en hacer algunas pruebas con synapse, porque asi podria utilizarlo tanto en lazarus como en delphi y eso me permite utilizarlo tanto en windows, como linux, mac y otros.

Estoy trabajando en hacer que mediante los sms que se reciban el software los lea, y segun el mensaje pueda devolver mensajes con busquedas especificas de una base de datos. Es decir si un tecnico en la calle envia un sms verificando el problema de un cliente, que el sistema busque los datos del problema y devuelva con otro sms al tecnico. Esto puede aplicarse para un cobrador o cualquiera.

Me gustaria saber si te has puesto a leer los mensajes y como es tu experiencia con eso.
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
Enviar comandos al puerto serie cls API de Windows 6 30-12-2010 13:46:05
Enviar comandos a la impresora Minotaure Impresión 1 16-03-2009 13:03:18
Enviar datos a la linea de comandos con java gjpelaez JAVA 1 25-02-2008 19:53:55
Ayuda con el Comport para Delphi por favor urg Andres_vl OOP 1 24-09-2007 17:21:19
manual para aprender delphi(comandos) jermy Varios 3 01-12-2006 22:56:11


La franja horaria es GMT +2. Ahora son las 15:05:56.


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