Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Lectura Escritura de puertos (https://www.clubdelphi.com/foros/showthread.php?t=8419)

daseretto 22-03-2004 14:02:38

Lectura Escritura de puertos
 
Quisiera saber como comunicarme con un dispositivo electronico a travez de los puertos si es posible con visual c++6 o si no diganme con que puedo hacerlo

delphi.com.ar 22-03-2004 14:08:10

Seguramente haya paquetes de herramientas para trabajar en forma sencilla con esto, pero sinó puedes utilizar las herramientas que te proporciona el sistema operativo, como la winapi CreateFile

Saludos!

Rabata 22-03-2004 17:20:45

yo he utilizado en varios lenguajes la SDK y me funciona perfectamente, como bien ha dicho delphi.com.ar, la ayuda de las sdk la puedes encontrar en delphi, esto es un paquete de librerías del kernell de windows.

Te mando lo k yo hice para un proyecto en delphi k me comunicaba con una pistola de rf con el puerto serie, para k te funcione pasalas a C

Const
SERIAL_COM = '19200,n,8,1';
// Te acopnsejo k la configuración del puerto sea variable por ejemplo la puedes leer de un ini o base de datos


var
Serial_Handle:THandle;
// Esto nos devuelve el numero de identificación para comunicarnos con el puerto

Procedure Abrir_Puerto_Serie();
Var
status:Integer;
temp_dcb:Dcb;
time_out:COMMTIMEOUTS;
begin

// +GENERIC_WRITE
serial_handle:=CreateFile('COM1',GENERIC_READ Or GENERIC_write ,0, 0, OPEN_EXISTING, 0, 0);
// serial_handle:=CreateFile('COM1',GENERIC_READ Or GENERIC_write ,0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NOTRMAL,0);

IF (serial_handle=INVALID_HANDLE_VALUE) THEN
Begin
ShowMessage('Error Open Serial Port');
closehandle(serial_handle);
status := -1;
End
Else
IF GetCommState(serial_handle, temp_dcb) THEN
Begin
BuildCommDCB(SERIAL_COM,temp_dcb);
IF SetCommState(serial_handle, temp_dcb) THEN
Begin
time_out.readintervaltimeout := 20;
time_out.readtotaltimeoutmultiplier := 2;
time_out.readtotaltimeoutconstant := 50;
time_out.writetotaltimeoutmultiplier := 2;
time_out.writetotaltimeoutconstant := 50;
IF SetCommTimeouts(serial_handle, time_out) THEN
status := 0
Else
Begin
ShowMessage('Error Open Serial Port');
status := -6;
//done()
End;
End
Else
Begin
status := -5;
//done()
End;
End
Else
Begin
ShowMessage('Error Open Serial Port');
status := -4;
// done()
End;
end;



Function Escribir_Puerto_Serie(as_cadena:String):Boolean;
Var
li_longitud:Integer;
li_enviado:DWord;
lb_Write:Boolean;
Begin

li_longitud := Length(as_cadena);

lb_write := WriteFile(serial_handle, as_cadena, li_longitud, li_enviado, nil);

If Not lb_write Then
Begin
Showmessage('Error Write Puerto Serie');
result:=False;
End;

IF li_longitud <> li_enviado THEN
Begin
ShowMessage('Error en el envio de datos');
result:=False;
End;

result:=True;

End;



Function Leer_Puerto_Serie (ai_cantidad:Integer):String;
Var
lb_read:Boolean;
ls_cadena:String;
li_leido:DWord;
Begin
//read_msg = Space(amount_to_read+1)

lb_read:=ReadFile(serial_handle, ls_cadena, ai_cantidad,li_leido,nil);

If not lb_read Then
ShowMessage('Error Read Puerto Serie');

IF li_leido = 0 THEN
Showmessage('No Hay Dato en el Puerto Serie');

Result:=ls_cadena;

end;


Usa las 3 funciones y espero k te sirven, pueden contener algún pekeño descuido pero nadie es perfecto....

Hasta luego...

mrmanuel 19-04-2004 16:05:33

Hola a todos

He utilizado el ejemplo de l compañero RABATA

Cita:

Empezado por Rabata

Function Escribir_Puerto_Serie(as_cadena:String):Boolean;

........
lb_write := WriteFile(serial_handle, as_cadena, li_longitud, li_enviado, nil);
........


y al compilar tengo un error en los marámetros diciendo que deben ser identicos. ¿?

he comprobado el tipo de los parametros y marece estar bien.

Gracias

delphi.com.ar 19-04-2004 16:24:27

No creo que el compilador se equivoque, nunca me ha sucedido, te recomiendo volver a ver y fijarte especialmente en los tipos de parámetros.

Otra opción válida es usar un TFileStream para escribir en un puerto.

Saludos!


La franja horaria es GMT +2. Ahora son las 05:57:20.

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