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 22-03-2004
daseretto daseretto is offline
Registrado
 
Registrado: mar 2004
Posts: 1
Poder: 0
daseretto Va por buen camino
Unhappy 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
Responder Con Cita
  #2  
Antiguo 22-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 22-03-2004
Rabata Rabata is offline
Miembro
 
Registrado: jul 2003
Posts: 167
Poder: 21
Rabata Va por buen camino
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_dcbcb;
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_enviadoWord;
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_leidoWord;
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...
Responder Con Cita
  #4  
Antiguo 19-04-2004
mrmanuel mrmanuel is offline
Miembro
 
Registrado: may 2003
Posts: 135
Poder: 21
mrmanuel Va por buen camino
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
__________________
Un Saludo a todos/as
Responder Con Cita
  #5  
Antiguo 19-04-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
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


La franja horaria es GMT +2. Ahora son las 00:10:17.


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