domingo, 1 de setembro de 2013

Integração Protheus X Balança via comunicação serial sem DLL

 Neste artigo irei mostrar como podemos fazer uma rotina em advpl que irá requisitar o peso a uma balança Filizola via porta serial. Essa requisição funciona também para balanças TOLEDO, porém o layout de retorno é um pouco diferente. A vantagem desse método é não depender de DLL e assim não ficar preso a uma marca específica. Antes de tudo é preciso que a balança esteja com o protocolo adequado para funcionar com requisição serial. Em muitos modelos da TOLEDO, o protocolo é o P05, já algumas balanças FILIZOLA já vem preparadas para responder a esse tipo de requisição. 

O esquema abaixo resume o processo:









Primeiramente iremos fazer a comunicação com a porta serial. Para isso usamos o seguinte código Advpl:

Local cCfg :=”COM1:4800,n,8,1″
lRet := msOpenPort(nH,cCfg)
if(!lRet)

    Alert(“Falha ao conectar com a porta serial”)
     Return 

EndIf 

 O próximo passo será enviar um comando 5 HEXADECIMAL (ENQ) para a porta aonde em que a balança está conectada. Eu tinha até aberto um chamado na TOTVS perguntando como isso poderia ser feito e responderam que não era possível, enfim , eu não acredite e pesquisei alguma forma de fazer isso. Até que consegui usando um comando super simples que é : 
 msWrite(nH,Chr(5))

 Ou seja, eu escrevo na porta COM o Chr(5) e se tudo estiver certo a balança irá devolver o peso. Resumidamente, a rotina básica ficaria assim:
lRet := msOpenPort(nH,cCfg)
if(!lRet)
    Alert(“Falha ao conectar com a porta serial”)
    Return
EndIf 

msWrite(nH,Chr(5))
Sleep(200)

For ncont := 1 To 20
      msRead(nH,@cBuffer)
      if(!Empty(cBuffer))
                 cPeso :=IsNumber(cBuffer) // IsNumber função que criei para tirar os caracteres especiais                            cBuffer := “” 
                 Exit 
      EndIf 
Next 
msClosePort(nH)

Para que essa comunicação dê certo, é preciso atentar para alguns detalhes:
 1) Tentei várias combinações de velocidades para a porta COM1 do micro e a que deu mais certo foi Bits         por segundo : 4800, Bits de dados: 7,Paridade: Even, Bits de parada: 2 e controle de fluxo: nenhum.

 2) Com relação a configuração da velocidade da balança, a melhor que eu achei foi A mesma configuração      da COM1 dita no primeiro item mudando apenas Bits de dados para 8.



 Espero que este artigo tenha sido útil . Até a próxima.

Nenhum comentário:

Postar um comentário