Ver Mensaje Individual
  #3  
Antiguo 22-03-2004
Rabata Rabata is offline
Miembro
 
Registrado: jul 2003
Posts: 167
Reputación: 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