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 30-05-2012
jfrancho jfrancho is offline
Miembro
 
Registrado: feb 2008
Posts: 50
Poder: 17
jfrancho Va por buen camino
Unhappy Enviar Y Recibir Informacion Puerto Com1

Buen día, necesito saber como enviar y recibir información por medio del puerto COM1 O rs232, en delphi 7.SALUDOS.-
Responder Con Cita
  #2  
Antiguo 30-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mira si te sirve algunos de los enlaces del final de esta página, abajo del todo.
Responder Con Cita
  #3  
Antiguo 30-05-2012
ajvdelphi ajvdelphi is offline
Registrado
NULL
 
Registrado: may 2012
Posts: 7
Poder: 0
ajvdelphi Va por buen camino
Cita:
Empezado por jfrancho Ver Mensaje
Buen día, necesito saber como enviar y recibir información por medio del puerto COM1 O rs232, en delphi 7.SALUDOS.-
Hola
Yo uso las API de Windows, si, se que es mas complicado pero te da mucha independencia y te permite hacer cualquier cosa con los puertos.
Yo lo hago así porque me dedico a la electrónica industrial y muchas veces me tuve que comunicar con dispositivos industriales como PLC's, controlodaroes de ejes, drives de motores, etc que cada uno tiene su propio protocolo, para que la vamos a hacer fácil si la podemos hacer dificil .

Te mando el código que habitualmente uso, por hay te sirve-

Para abrir y configurar el puerto
Yo declaro previamente dos variables tipo

Esta es para leer el puerto, te devuelve Leido:=true si el puerto fue leido correctamente y en "Valor" el valor leido

Código Delphi [-]
type TComms = Record
     Leido:boolean;
     Valor:Integer;
End;

Esta es para abrir y configurar el puerto, te devuelve OK:=true si el puerto pudo ser abierto correctamente y en "Handle" un cardinal que apunta al puerto abierto, que luego se usa para las funciones de escritura/lectura;

Código Delphi [-]
type TAbrirPuertoCom = Record
     Ok:boolean;
     Handle:integer;
End;

Function Foem1.AbrirPuertoCom(FPuerto:PChar):TAbrirPuertoCom;
Var
    Parametros:TDCB;
    TimeOut:TCommTimeouts;
    Baud,WordSize,Stops,Par:integer;
begin
  result.Handle:=CreateFile(FPuerto, generic_read or generic_write ,0, nil, OPEN_EXISTING,0,0);
  If result.handle=INVALID_HANDLE_VALUE then
     Begin
       MessageBox(0,'El puerto solicitado es inválido o está siendo usado por otro dispositivo',
                  'Atención',mb_ok+mb_SystemModal+mb_IconExclamation);
       Result.Ok:=false;
       OpenPort:=False;
       exit;
     end;
   FillChar(Parametros, SizeOf(Parametros), 0);
   With Parametros Do
        Begin
          DCBLength := SizeOf(DCB);
          BaudRate:=9600; //Velocidad de transmision
          ByteSize:=8;  //Bits de datos
          Parity:=0;   //paridad 0=none 1=Par 2=impar
          StopBits:=0; //bits de parada 1 Bit=0, 2 bits=1
        End;
   With TimeOut do  //Configura el timeout del puerto en ms
        begin
          ReadIntervalTimeout:=10;
          ReadTotalTimeoutMultiplier:= 10;
          ReadTotalTimeoutConstant:=10;
          WriteTotalTimeoutMultiplier:=10;
          WriteTotalTimeoutConstant:=10;
        end;
   if not (SetCommState(result.handle,Parametros)) or not (SetCommTimeouts(result.handle,TimeOut)) then
        Begin
          MessageBox(0,'Los parámetros de configuración del puerto son incorrectos',
                     'Atención',mb_ok+mb_SystemModal+mb_IconExclamation);
          Result.Ok:=false;
          Exit;
        End;
  Result.Ok:=True;
end;

Funcion para leer o escribir el puerto, normalmente para recibir información de algún dispositivo, primero hay que preguntarle, eso implica hacer primero una escritura, se hace enviando un array con la cantidad de caracteres y los caracteres que el dispositivo requiera

Código Delphi [-]
Function Form1.EscribirLeerRegistro(Puerto:Cardinal):TComms; //Puerto es el valor(handle) que nos devolvió la función de AbrirPuertoCom
Var k:longInt;
    Preguntar: Array[0..19] of char;
    Recibir: Array[0..19] of char;
    CantBytes,ipCantBytes:cardinal;
    OK:Boolean;
Begin
  //Llenar el array para preguntar
  {Preguntar[0]:= 'A';
  ..............
  Preguntar[19]:=CHar(13);}
  k:=0;
  repeat
    Begin
      CantBytes:=20;
      OK:=WriteFile(Puerto,textoLeer,CantBytes,ipCantBytes,nil); //Escribe
      CantBytes:=20;
      Ok:=ReadFile(Puerto,Recibir,CantBytes,ipCantBytes,nil);  //Lee
      If ok Then
         Begin
            result.Valor:=Recibir;  // Aquí en realidad hay que hacer lo que uno precise. La función ReadFile devuelve un array de
                                         // caracteres, habrá que convertirlos a algún valor si se desea o devolverlos como caracteres. 
                                         //En este caso result.valor es un integer, pero podría ser un array u otro tipo de variable
           result.Leido:=true;
           exit;
         End;
    End;
  k:=k+1;
  Until k>5;  //cantidad de interrogaciones si Ok viene false
  result.Leido:=false;
End;

Bueno espero no ser muy pesado, pero esto te permite hacer lo que quieras inclusive, si te das maña, tu propio objeto de comunicaiones

Saludos
Augusto

Última edición por Casimiro Notevi fecha: 30-05-2012 a las 21:25:38.
Responder Con Cita
  #4  
Antiguo 30-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #5  
Antiguo 30-05-2012
ajvdelphi ajvdelphi is offline
Registrado
NULL
 
Registrado: may 2012
Posts: 7
Poder: 0
ajvdelphi Va por buen camino
Hola

Entendido, perdón no lo sabía, me pregunta justamente eso, porque quedaba muyyyyyyyy feo

Saludos
Augusto
Responder Con Cita
  #6  
Antiguo 30-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ajvdelphi Ver Mensaje
Hola
Entendido, perdón no lo sabía, me pregunta justamente eso, porque quedaba muyyyyyyyy feo
Saludos
Augusto
Aquí tienes una guía de todos los 'tags', puedes guardarte el enlace para usarlo en cualquier otra ocasión que lo necesites,
aunque normalmente te vale con los que te he mostrado anteriormente


Por cierto, gracias por la aportación, me guardo el código, lo mismo me hace falta algún día
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
Imprimir por Puerto Com1 ASUNCION Impresión 1 30-12-2010 13:05:32
Imprimir por Puerto Com1 ASUNCION Impresión 3 24-12-2010 13:06:31
Enviar y recibir .txt y .jpg por puerto serie con C# REHome .NET 6 06-12-2009 08:54:55
Anviar Archivos por puerto COM1... Sinaloense API de Windows 1 14-01-2005 19:52:10
Parámetros puerto COM1 Tecnic2 OOP 0 05-11-2004 18:33:00


La franja horaria es GMT +2. Ahora son las 10:36: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