Necesito leer un puerto tcp/ip de una Balanza, que emite en forma continua el peso. Como lo puedo hacer desde Clarion directamente o necesito algún producto de terceros?.
Utilizo Clarion 10
Desde ya muchas gracias por cualquier consejo
Saludos Jose Goldaracena
Puedes usar los templates de Francisco Carabez
http://www.webring.org/l/rd?ring=cwsuperring;id=8;url=http%3A%2F%2Fwww.carabez.com%2Ftemplates.html
El que se llama WEDGE
Este template WEDGE, es solo para puerto COM: o se aplica a puertos TCP/IP?
Saludos Jose
Creo que es solo para el puerto COM si necesitas leer por TCP/IP necesitarias algo como nettalk de capesoft
es muy sencillo,
tenés directamente los templates de cw10 o bien podés codificarlo directamente, es muy simple.
si tenés dudas mandame un mail porque el código de ejemplo es bastante largo.
sds
acá tenés un ejemplo:
agregar:
-declaraciones de las funciones y constantes
-Wsock32.lib
!global:
WSAData0 GROUP(WSAData) !winsock data
END
buff STRING(256)
!---------------------------------------------------------------
!código:
IF NOT InitSocket() THEN Halt(‘Falla sockets’).
IF Conectar(ip,port,sock) THEN Halt(‘falla conexión’).
n# = ReceiveData(sock, buff, Len(buff), 0)
!—n# tiene la cantidad de chars recibidos,
!—queda hacer el parse de buff para extraer un bloque de datos de la balanza
¡===============================================================
InitSockets PROCEDURE
!---------------------------------------------------------------
!Retorna TRUE y sockets inicializados, o FALSE si error
!
!---------------------------------------------------------------
s32_Version2_0 EQUATE(1000000010b) !mask for requesting max version
CODE
wsRC# = WSAStartup(s32_version2_0,wsaData0) !initiates use of the Winsock DLL by a process
IF wsRC# THEN !error
Message('Sockets is not successfully responding.')
rc# = FALSE
ELSE
rc# = TRUE
END
RETURN(rc#)
!===============================================================
Conectar PROCEDURE (ip,port,Client)
!---------------------------------------------------------------
!Parámetros:
! ip: dirección ip (LONG) en network order (ip1:ip2:ip3:ip4)
! port: declararlo como SHORT(nro port), ejemplo SHORT(1000)
! Client: retorna cliente (*LONG)
!retorna 0 si ok
!
!---------------------------------------------------------------
SOCKADDR_IN0 GROUP,STATIC
family USHORT(AF_INET)
port USHORT !IP port
addr ULONG !IP address
zero BYTE(0),DIM(8)
END !group
Port0a GROUP
b0 BYTE
b1 BYTE
END
Port0 USHORT,OVER(Port0a)
b BYTE
!---------------------------------------------------------------
CODE
rc# = 0 !ok
SOCKADDR_IN0.addr = ip
Port0 = Port !usar el parámetro (SHORT)
b = port0a.b0
port0a.b0 = port0a.b1
port0a.b1 = b !intercambiar bytes (es un short)
SOCKADDR_IN0.port = Port0
Client = CreateSocket(AF_INET, SOCK_STREAM, 0) !client puede ser cualquier nro,
!aun cero
IF Client = INVALID_SOCKET THEN
rc# = WSAGetLastError() !retornar nro de error
Message('Create: ' & rc#)
ELSIF Connect(Client, SOCKADDR_IN0, Len(SOCKADDR_IN0)) THEN
rc# = WSAGetLastError() !retornar nro de error
Message('Connect: ' & rc#)
END !if
RETURN(rc#)
!================================================================
Muchas gracias, voy a probarlo y cualquier cosa te consulto
Saludos Jose Goldaracena
La libreria Wsock32.lib, deberia estar incluida en Clarion 10? porque la encuentro solo en clarion 6