Integração Protheus x Balança rodoviária Lider
Autor: luislacombe | Publicado: 2013-11-06T06:12:00-08:00

Abordando mais uma vez integrações entre protheus e balanças, hoje irei demonstrar uma rotina em advpl que lê o peso da balança rodoviária Lider pela porta serial. Para testar nossa aplicação, podemos baixar o emulador da balança Líder gratuitamente no site &nbsp;http://www.liderbalancas.com.br/2012/manuais-balancas.html&nbsp;no primeiro link de download.

Para que eu consiga acessar a mesma porta COM com dois programas diferentes (emulador da balança e a rotina advpl), eu não uso a porta física e sim um emulador de porta serial VSPE,o qual pode ser baixado pelo site &nbsp;http://www.baixaki.com.br/download/free-virtual-serial-ports-emulator.htm. Com o VSPE eu crio uma porta virtual COM1 e é com ela que iremos trabalhar.

A rotina em advpl pode ser baixada no link &nbsp;http://www.4shared.com/file/EcFWKLrC/BalRodov.html?Compile o fonte e em seguida iremos seguir os passos abaixo:

1) Com o VSPE crie a porta serial virtual COM1
2)Acione o emulador da balança Líder ( arquivo&nbsp;Emulador.exe)
3)Deixe o emulador configurado conforme imagem abaixo:













4) Abra a IDE do protheus e com o fonte BALRODOV.PRW compilado, &nbsp;execute a rotina.








5) No emulador da balança, clique em modo contínuo





















6)Se tudo estiver ok, teremos a captura do peso pelo protheus conforme print abaixo:

























7) Abaixo a rotina em advpl :




#INCLUDE 'RWMAKE.CH'

/*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Programa &nbsp;³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³ Autor ³ LUIS LACOMBE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³ Data ³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Locacao &nbsp; ³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³Contato ³83 8819-6539 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±³ &nbsp; ³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ³ &nbsp; &nbsp; &nbsp; &nbsp;³gustavo.lacombe@gmail.com &nbsp; &nbsp; &nbsp; ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descricao ³ &nbsp;Le peso da balanca rodoviaria Lider modelo LD 1001 &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Parametros³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Retorno &nbsp; ³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Aplicacao ³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Uso &nbsp; &nbsp; &nbsp; ³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÁÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Analista Resp.³ &nbsp;Data &nbsp;³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³ &nbsp;/ &nbsp;/ &nbsp;³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³ &nbsp;/ &nbsp;/ &nbsp;³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/

User Function BalRodov

Private cPesoAt &nbsp; &nbsp; &nbsp;:= Space(30)
Private cPesStr &nbsp; &nbsp;:= Space(30) &nbsp; &nbsp; 
Private cCfg &nbsp; &nbsp; :="COM1:4800,n,8,1"
Private nH &nbsp; &nbsp; &nbsp; := 0


SetPrvt("oDlg1","oSay1","oSay2","oPesStr","oPeso","oSBtn1")

oDlg1 &nbsp; &nbsp; &nbsp;:= MSDialog():New( 091,232,304,578,"Balança rodoviária",,,.F.,,,,,,.T.,,,.T. )
oSay1 &nbsp; &nbsp; &nbsp;:= TSay():New( 028,016,{||"STRING DA COM1"},oDlg1,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,060,008)
oSay2 &nbsp; &nbsp; &nbsp;:= TSay():New( 045,017,{||"PESO TRATADO"},oDlg1,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,059,008)
oPesStr &nbsp; &nbsp;:= TGet():New( 028,088,{|u| If(PCount()&gt;0,cPesStr:=u,cPesStr)},oDlg1,060,008,'',,CLR_BLACK,CLR_WHITE,,,,.T.,"",,,.F.,.F.,,.F.,.F.,"","cPesStr",,)
oPeso &nbsp; &nbsp; &nbsp;:= TGet():New( 048,088,{|u| If(PCount()&gt;0,cPesoAt:=u,cPesoAt)},oDlg1,060,008,'',,CLR_BLACK,CLR_WHITE,,,,.T.,"",,,.F.,.F.,,.F.,.F.,"","cPesoAt",,)
oSBtn1 &nbsp; &nbsp; := SButton():New( 072,120,1,{|| LerPeso()},oDlg1,,"", )

oDlg1:Activate(,,,.T.)

Return




/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³ Programa ³ LerPeso &nbsp;³ Autor ³ LUIS LACOMBE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³ Data ³ 18/04/13 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³Faz a requisicao de peso para a balanca e le o retorno. &nbsp; &nbsp; ³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³Para funcionar, eh importante verificar o protocolo de &nbsp; &nbsp; &nbsp;³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³comunicacao da balanca. No caso da TOLEDO,ela tem que estar ³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³usando o protocolo que responda ao sinal ENQ, por exemplo &nbsp; ³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³o protocolo P05 ou P05A. Importante lembrar que a funcao &nbsp; &nbsp;³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³nao trata a estabilizacao de peso. Se quiser receber o peso ³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³somente quando ele estabilizar,use o protocolo adequado como³±±
±±³ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³P05 da TOLEDO. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
Static Function LerPeso()

Local cPeso := 0
Local cBuffer

cCfg &nbsp; &nbsp; &nbsp;:="COM1:4800,n,8,1"

lRet &nbsp; &nbsp; &nbsp; := 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 50
 msRead(nH,@cBuffer)
 if(!Empty(cBuffer))
  &nbsp; // ALERT(cBuffer)
  &nbsp; &nbsp;cPesStr := cBuffer
  cPeso := IsNumber(cBuffer)
  Exit
 EndIf
Next
msClosePort(nH) 

cPesoAt &nbsp;:= cPeso

// PRA TESTAR O PROGRAMA SEM BALANCA
//nPeso := Val(cSimPes)

Return



/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³ Programa ³ IsNumber ³ Autor ³ LUIS LACOMBE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;³ Data ³ 18/04/13 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡…o ³Separa os caracteres numericos da string recebida da balanca³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
Static Function IsNumber(cNum)

Local nPosPar &nbsp;
Local cPesB &nbsp; &nbsp; := ""
Local cNumeros &nbsp;:= "0123456789." 
Local cNewNum &nbsp; := ""
Local nPes &nbsp; &nbsp; &nbsp;:= 0


//bloco que separa o numero da string enviada pela balanca
For nCont := 1 To Len(cNum)
&nbsp; &nbsp; if(SubStr(cNum,nCont,1)=="E") &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; Exit
&nbsp; &nbsp; EndIf 
&nbsp; &nbsp;
&nbsp; &nbsp; if(SubStr(cNum,nCont,1)=="I") // peso instavel 
&nbsp; &nbsp; &nbsp; &nbsp; Return "-1" &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; EndIf
&nbsp; &nbsp;
&nbsp; &nbsp; if(SubStr(cNum,nCont,1)$cNumeros)
&nbsp; &nbsp; &nbsp; &nbsp;cNewNum += SubStr(cNum,nCont,1)
&nbsp; &nbsp; EndIf
Next nCont

cPesB &nbsp;:= &nbsp;cNewNum

Return cPesB