Necesito, por favor, de vuestra ayuda. Llevo varias horas intentando conectar con una balanza a través del puerto RS232 y pero la balanza NO me reporta ningún dato.
Mi código copiado y adaptado de otro hilo de este foro:
- Code: Select all Expand view RUN
......
nComm:=OpenComm( nPuerto, 1024, 256)
IF nComm >= 0
else
msgalert('ERROR al NO encontrar el puerto '+nPuerto,'error...') ; return .f.
endif
If !BuildCommDcb( nPuerto+":"+alltrim(str(nbaudios))+","+nParidad+","+alltrim(str(nbitdatos))+","+alltrim(str(nbitparad)) , @cDcb )
nError := GetCommError( nComm )
Msgalert( "ERROR al Configurar el puerto "+nPuerto,'Error de conexión con el puerto...') ; return .f.
endif
if ! SetCommState( nComm, cDcb )
nError = GetCommError( nComm )
Msgalert( "Error al setear Puerto : " + Str( nError ),'Aviso de error...' ) ; return .f.
endif && <-------- HASTA AQUÍ TODO PERFECTO !!!
ncomand="chr(0X44)"
if ( nBytes := WriteComm( nComm, ncomand +Chr( 10 ) )) < 0 && <------- HE PROBADO TAMBIEN INSERTANDO CHR(13) Y CHR(13)+CHR(10). AQUÍ ESTÁ EL PROBLEMA
nError = GetCommError( nComm )
Msgalert( "Error al realizar la petición a la báscula : " + Str( nError ),'Aviso de error...' )
else
DEFINE DIALOG oDlg TITLE "" OF oWPpal FROM 1,1 TO 12,44 STYLE nOr( WS_THICKFRAME, WS_POPUP )
@ 2,2 SAY oText PROMPT "Capturando el peso de la báscula... [ Salir: tecla ESC ]" OF oDlg
ACTIVATE DIALOG oDlg NOWAIT CENTER
Inkey(1)
endif
cBuffer:=Space(100)
nBytes := ReadComm (nComm,@cBuffer)
If FlushComm( nComm, 0 ) != 0
nError = GetCommError( nComm )
Msgalert("Error al vaciar el puerto de la báscula : " + Str( nError ),'Aviso de error...' )
endif
if ! CloseComm( nComm )
nError = GetCommError( nComm )
Msgalert( "Error al cerrar el puerto de la báscula : " + Str( nError ) )
endif
odlg:end()
? 'lectura balanza: '+cBuffer
cKilos :=Substr(cBuffer,nPosIniEn,nPosFinEn-nPosIniEn)
cGramos:=Substr(cBuffer,nPosIniDe,nposFinDe-nPosIniDe)
nPesoBascula:=Val(Alltrim(cKilos)+"."+Alltrim(cGramos)) ; onPesoBascula:Refresh()
SysRefresh()
return
La lectura de la balanza es siempre la misma: NADA, es decir cBuffer=space(0)
NO muestra problemas a la hora de configurar el puerto, conectar ni setear. Creo que el problema está a la hora de hacer la petición a la báscula (comando WriteComm)
La balanza es marca GRAM modelo ZFOC y según su manual instrucciones el protocolo de comunicación via RS232 es el siguiente:
1. El PC transmite 0X44
2. El PC transmite el package una vez recibida la respuesta de la balanza 0x02
3. PC transmite el comando una vez recibida la respuesta de la balanza 0x02
4. Despues de que el PC reciba los datos de la balanza 0x02 , si se precisa transmitir el comando switch a c
5. PC envia el final del package
6. PC finaliza despues de recibir la respuesta 0x02
Comenzo del package, fixed 6 bytes: 11 00 00 00 00 EF5
Final del package, fixed 6 bytes: 33 00 00 00 00 CD
Por favor, necesito ayuda...
Mil gracias!!
LORENZO.