Trago para vocês hoje, um exemplo de como fazer integração com balanças que usam rede com o Protheus.
Esse fonte foi desenvolvido e disponibilizado pelo grande Fernando Oliveira ( LinkedIn ).
Nessa integração, você passa o IP e a porta da balança e assim é criado uma conexão via TSocketClient.
Se a conexão estiver ok, ai é feito um Receive do Buffer para pegar a instrução que estiver na balança.
Abaixo o código fonte desenvolvido pelo grande Fernando:
#INCLUDE 'PROTHEUS.CH' #INCLUDE "RWMAKE.CH" #INCLUDE 'AGRAXFUN.CH' /** {Protheus.doc} Integra com a balança e captura o peso @author Fernando Oliveira @since 11/09/2020 @OBS É necessário o uso de um módulo TCP/IP para fazer a conversão da balança serial para IP @see www.linkedin.com/in/luis-fernando-oliveira-2b6a40a2 */ User Function BALIP() Local cPorta := "Porta da Balança" Local cIPServer := 'IP do módulo TCP/IP' Local cTimeOut := '2000' Local cScript := 'Substr(cConteudo,at(Chr(002) ,cConteudo)+3,7)' Local oSocket Local nSockResp := 0 Local nSockRead := 0 Local cBuffer := '' Local nFor01 := 0 Local nRetorno := 0 Local cConteudo := "" oSocket := tSocketClient():New() //Criando a Clase For nFor01 := 1 to 10 nSockResp := oSocket:Connect( val(cPorta),Alltrim(cIPServer),Val( cTimeOut ) ) //Verificamos se a conexao foi efetuada com sucesso IF !( oSocket:IsConnected() ) //ntSocketConnected == 0 OK Help(,,STR0010,,STR0020 + Chr(10) + Chr(13) + "[ " + StrZero( nFor01,3 ) + " ]" , 1, 0 ) //"Ajuda"####não foi possivel conectar com a balança na Porta# Else nSockResp == 0 // Conexão Ok Exit EndIF Next IF nSockResp == 0 // Indica que Está conectado // Enviando um Get Para Capturar o Peso Sleep (5000) For nFor01 := 1 To 10 cBuffer := "" nSockRead = oSocket:Receive( @cBuffer, Val( cTimeout ) ) IF( nSockRead > 0 ) cConteudo := cBuffer Exit Else cConteudo := '' Endif Next nFor01 Else Help(,,STR0010,,STR0027 + Chr(10) + Chr(13) + "[ " + cIpServer + "/" + cPorta + " ]" , 1, 0 ) //"Ajuda"####não foi possivel conectar com a balança. Tentavia:# ###"Balança: " EndIF oSocket:CloseConnection() //Fechando a Conexão If .Not. Empty( AllTrim( cScript ) ) // Irá Aplicar o Script no cConteudo cScript := "{||" + Alltrim(cScript) + "}" //Transformando o Script em bloco de codigo cConteudo := Eval( &( cScript ) ) nRetorno := Val( cConteudo ) Else nRetorno := 0 EndIf Return(nRetorno)
Bom pessoal, por hoje é só.
Abraços e até a próxima.