Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Leer puerto serie (https://www.clubdelphi.com/foros/showthread.php?t=80861)

zurdosoft 21-04-2008 15:55:34

Leer puerto serie
 
En este caso realicé esta rutina porque necesitaba leer los datos devueltos de una balanza electrónica.
Es un extracto de una aplicación console que funciona en Windows XP y finalmente debe escribir un archivo con la lectura.
Se me ocurrió ponerla como Truco porque me parece extremadamente simple, sin instalar componentes de terceros, ni utilizar muchas rutinas de las API.
Código Delphi [-]
uses
  SysUtils,
  windows;

var Puerto,n:integer;
    Num:byte;
    Cad:string;
    Mode:DCB;
begin
  Puerto:=FileOpen('COM1',fmOpenRead);//Abre el puerto
  Mode.BaudRate := 1200;
  Mode.ByteSize := 8;
  Mode.Parity := NOPARITY;
  Mode.StopBits := ONESTOPBIT;
  SetCommState(Puerto, Mode); //Ajusta los parámetros
  // Los datos se repiten y terminan con #13(CR) 
  repeat
   repeat until FileRead(Puerto,Num,1)=1;
  until Num=13; // Final de cadena anterior
  Cad:='';
  for n := 1 to 8 do begin
   repeat until FileRead(Puerto,Num,1)=1;//lee un byte
   Cad:=Cad+chr(Num);
  end;
 write(Cad);//Muestra la lectura
 Sleep(1000); // Espera para poder ver el resultado
end.

Copien el código en una aplicación console, ajusten Mode a vuestras necesidades y prueben.

Je Je
Saludos



candia 21-04-2008 15:55:35

hola

JCarlosas 07-07-2008 22:41:12

Seria interesante tener tambien un ejemplo de como escribir en el puerto serie, aunque supongo que sea como escribir a un archivo.
Muy interesante el codigo.

zurdosoft 07-07-2008 23:09:09

Efectivamente JCarlosas, es del mismo modo, lo que no hace es confirmar la recepcion OK.
Puede que con una rutina de control se pueda realizar, donde el receptor envie una señal de recibido.
Esto es lo que probe:


[delphi]
uses
SysUtils,
windows;

var Puerto,n:integer;
Num, Res:byte;
Cad:string;
Mode:DCB;
begin
Puerto:=FileOpen('COM1',fmOpenReadWrite);//Abre el puerto
Mode.BaudRate := 1200;
Mode.ByteSize := 8;
Mode.Parity := NOPARITY;
Mode.StopBits := ONESTOPBIT;
SetCommState(Puerto, Mode); //Ajusta los parámetros
Num:=253; // Dato a enviar
repeat until FileWrite(Puerto,Num,1)=1;
Sleep(1000); // Espera para enviar el siguiente dato
end.

zurdosoft 07-07-2008 23:14:30

uses
SysUtils,
windows;

var Puerto,n:integer;
Num, Res:byte;
Cad:string;
Mode:DCB;
begin
Puerto:=FileOpen('COM1',fmOpenReadWrite);//Abre el puerto
Mode.BaudRate := 1200;
Mode.ByteSize := 8;
Mode.Parity := NOPARITY;
Mode.StopBits := ONESTOPBIT;
SetCommState(Puerto, Mode); //Ajusta los parámetros
Num:=253; // Dato a enviar
repeat until FileWrite(Puerto,Num,1)=1;
Sleep(1000); // Espera para enviar el siguiente dato
end.

GabrielK 25-09-2008 18:40:15

tengo una duda, cuando se está leyendo un puerto serial con:

FileRead(Puerto,Num,1);

¿Como se puede parar la lectura del puerto programáticamente si es que no se recibe nada en un tiempo de establecido?

Saludos.

zurdosoft 03-10-2008 22:45:11

Se puede poner el codigo dentro de los repeat.
Para usar break, por ejemplo.

ivan_del21 15-10-2008 23:18:13

hola amigo soy nuevo en esta pagina tengo una duda acerca de como utilizar el timer de delphi ya que quiero hacer un segundero con un label

ivan_del21 13-11-2008 22:31:20

hola amigos se que no tiene que ver con el tema pero quisiera saber si me podrian ayudar con un proyecto que deseo realizar, quiero mover un carrito de control alambrico por medio del puerto paralelo, me podrian asesorar?

pollo_c 05-02-2009 05:26:51

hola amigos me parece muy interesante este tema, solo tengo una pregunta: puedo adaptar el código a cbuilder5?
el problema es que tengo desarrollado un punto de venta(para abarroteras) con builder5 y mysql y le quiero agregar la facultad de que una pesa digital le envié los datos a un edit de mi formulario de ventas.

puedo convertir este código a builder5?


uses
SysUtils,
windows;

var Puerto,n:integer;
Num:byte;
Cad:string;
Mode:DCB;
begin
Puerto:=FileOpen('COM1',fmOpenRead);//Abre el puerto
Mode.BaudRate := 1200;
Mode.ByteSize := 8;
Mode.Parity := NOPARITY;
Mode.StopBits := ONESTOPBIT;
SetCommState(Puerto, Mode); //Ajusta los parámetros
// Los datos se repiten y terminan con #13(CR)
repeat
repeat until FileRead(Puerto,Num,1)=1;
until Num=13; // Final de cadena anterior
Cad:='';
for n := 1 to 8 do begin
repeat until FileRead(Puerto,Num,1)=1;//lee un byte
Cad:=Cad+chr(Num);
end;
write(Cad);//Muestra la lectura
Sleep(1000); // Espera para poder ver el resultado
end.

porfa ayuda!!!!!!

kurono 23-12-2009 22:24:46

hola como estan se que este truco se desarrollo hace mucho pero quisiera saber si este truco funciona en windows xp 64bit y si es asi que modificacion deberia hacerce


La franja horaria es GMT +2. Ahora son las 07:41:08.

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