Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda codigo para leer el puerto com1 (https://www.clubdelphi.com/foros/showthread.php?t=59328)

happy-word 22-08-2008 17:28:11

ayuda codigo para leer el puerto com1
 
hola soy nuevo en el foro y tengo un problema con este codigo..

intento leer el puerto com1 desde delphi, tengo una central telefonica y nesecito leer el registro de llamadas, esto se hace atravez de un aparato llamado msdr6 el cual envia las llamadas parametrisadas al puerto y despues de ahy solo tengo que leer el puerto y recoger las llamas...


EL PROBLEMA ES: Que habeces las llamadas no llegan completas o llegan con caracteres de mas o suprime algunos...
no se si es porque estoy haciendo algo mal o me faltan comados....


esto mismo que hago desde delphi lo hace un programita que trae windows llamado hyperterminal que se encuentra en el menu de accesorios -- comunicacion. y este programa lo lee bien si suprimir caracteres ni nada... osea que ewl problema es de la aplicacion en delphi..

YAhora ustedes diran, por que no usas el hyperterminal.?.. RESPUESTA: porque el hypertelminal no me crea un archivo de texto automatico sino que ahy que detenerlo y crearlo manual.. y con el programa que cree en delphi puede automaticamente insertar los registros leidos a una base de datos oracle...



Código:

procedure TForm1.Timer1Timer(Sender: TObject);

var
 Lectura: string;
  dwValor: DWORD;
  Sta: COMSTAT;
  dd: Integer;
  erro: string;
  bResult: Boolean;
  cad: string;

 begin



 if (ClearCommError(Puerto, dwValor, @Sta)) then
  begin
    // Mientras haya algo en el buffer de entrada...
    while (0 < Sta.cbInQue) do
    begin
      // Redimensionar la variable de lectura
      SetLength(Lectura, (Sta.cbInQue + 1));
      // Leer del puerto
      bResult := ReadFile(Puerto,
                          PChar(Lectura)^,
                          Sta.cbInQue,
                          dwValor,
                          nil);

      cad:= cad + (lectura);
        if (bResult) then
      begin

        // Aquí se almacenaría lo leído
          MCaptura.Text :=MCaptura.Text + cad;


        // Comprobar si hay algo más para leer
      // y, si es así, continuar en el bucle
        ClearCommError(Puerto, dwValor, @Sta);
      end
      else
      begin
        // Esto es un error de lectura.
        // IMPORTANTE: si se produce un error nos
        // quedamos en un bucle sinfín si no se hace:
        Sta.cbInQue := 0;
        MessageDlg('Error de lectura',mtError,mbOKCancel,0);
        // También vale un 'break' o 'exit'
      end;
    end;
  end;
end;




Código:

procedure TForm1.FormCreate(Sender: TObject);
begin

Puerto:=FileOpen('COM1' ,fmOpenRead);//Abre el puerto
Mode.BaudRate := 9600;
Mode.ByteSize := 8;
Mode.Parity := NOPARITY;
Mode.StopBits := ONESTOPBIT;
SetCommState(Puerto, Mode); //Ajusta los parámetros

 Timer1.Enabled:=true;
end;

Código:

procedure TForm1.Timer2Timer(Sender: TObject);
var
llamada: string;
begin
if(MCaptura.Text<>'') then
  begin


 timer1.Enabled:=false;
 FileClose(puerto);
 SQLQuery1.SQL.Clear;
 SQLQuery1.Close;
 SQLQuery1.SQL.Add('insert into datos_central(cadena) values('''+mcaptura.Text+''')');
 SQLQuery1.ExecSQL;
 SQLQuery1.SQL.Clear;
 SQLQuery1.SQL.Add('commit');
 SQLQuery1.ExecSQL;
 MCaptura.Text:='';

 Puerto:=FileOpen('COM1' ,fmOpenRead);//Abre el puerto
Mode.BaudRate := 9600;
Mode.ByteSize := 8;
Mode.Parity := NOPARITY;
Mode.StopBits := ONESTOPBIT;
SetCommState(Puerto, Mode); //Ajusta los parámetros


 timer1.Enabled:=true;
  end;
end;


este es el archivo capturado por el hyperterminal..
Código:

--------  10/16/07  08:19:14  LINE = 0032  STN = 247   
00:00:00  INCOMING CALL    RINGING 0:03
00:00:42  HOLD
00:00:46  TRANSFERRED

--------  10/16/07  08:20:00  LINE = 0032  STN = 221   
00:00:00  FROM TRANSFER
00:00:00  UNHOLD
00:00:06  HOLD
00:00:18  TRANSFERRED

--------  10/16/07  08:20:18  LINE = 0032  STN = 234   
00:00:00  FROM TRANSFER
00:00:00  UNHOLD
00:04:07  CALL RELEASED

--------  10/16/07  08:23:29  LINE = 0031  STN = 247   
00:00:00  INCOMING CALL    RINGING 0:03
00:00:21  HOLD
00:00:29  TRANSFERRED

--------  10/16/07  08:23:58  LINE = 0031  STN = 230   
00:00:00  FROM TRANSFER
00:00:00  UNHOLD
00:00:59  CALL RELEASED

--------  10/16/07  08:20:34  LINE = 0051  STN = 249   
00:00:00  OUTGOING CALL
          DIGITS DIALED    8095912498
00:05:30  CALL RELEASED

--------  10/16/07  08:28:07  LINE = 0050  STN = 234   
00:00:00  OUTGOING CALL
00:00:03  CALL RELEASED

--------  10/16/07  08:28:14  LINE = 0050  STN = 234   
00:00:00  OUTGOING CALL
          RESTRICTION PASSWORD  00
          DIGITS DIALED    8099107862
00:00:12  CALL RELEASED

--------  10/16/07  08:27:28  LINE = 0051  STN = 296   
00:00:00  OUTGOING CALL
          DIGITS DIALED    8095644392
00:00:55  CALL RELEASED

--------  10/16/07  08:27:55  LINE = 0031  STN = 279   
00:00:00  INCOMING CALL    RINGING 0:03
00:00:23  HOLD
00:00:48  UNHOLD
00:01:01  CALL RELEASED

--------  10/16/07  08:28:50  LINE = 0051  STN = 296   
00:00:00  OUTGOING CALL
          DIGITS DIALED    8095343394
00:00:40  CALL RELEASED

--------  10/16/07  08:23:57  LINE = 0001  STN = 279   
00:00:00  INCOMING CALL    RINGING 0:03
00:00:19  HOLD
00:00:25  TRANSFERRED


un ejemplo de como esta recopilando la informacion del puerto con el programa en delphi..
Código:


L?&OT?
IU?U5UE???u--------  08/22/08  10:06:29  LINE = 0019  STN = 245   
00:00:00  OUTGOING CALL
          DIGITS DIALED    809542
00:00:02  CALL RELEASED

--------  08/22/08  10:06:33  LINE = 0021  STN = 245   
00:00:00  OUTGOING CALL
          DIGITS DIALED    8097845
00:00:03  CALL RELEASED


--------  08/22/08  10:06:39  LINE = 0019  STN = 245   
00:00:00  OUTGOING CALL
          DIGITS DIALED    8097845
00:00:02  CALL RELEASED
A
--------  08/22/08  10:07:28  LINE = 0021  STN = 245   
00:00:00 --------  08/22/08  10:07:28  LINE = 0021  STN = 245   
00:00:00 NG CALL
          DIGITS DIALED    8095461
00:00:03  CALL RELEASED
--------  08/22/08  10:d2  LINE = 0021  STN = 245   
00:00:00  OUTGOING CALL
          DIGITS DIALED    8095
00:00:02  CALL RELEASED


egostar 22-08-2008 17:41:44

Hola, bienvenido al foro,

Y.... ¿Cual es tu problema?

Salud OS


La franja horaria es GMT +2. Ahora son las 04:10:32.

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