Comunicação Via User Function ( customização )
Atenção!
- Caso utilize o módulo Controle de Lojas e a balança estiver setada no cadastro de Estação (LOJA121) não utilize o trecho da customização que faz a abertura da porta pois ao acessar o Loja a abertura de comunicação com a balança é efetuada.
- Caso utilize o módulo seja diferente de Controle de Lojas ou Frente de Lojas , o parâmetro MV_AUTOCOM deve estar igual a zero ( 0 ).
- Não é necessário efetuar a abertura de comunicação a todo momento, efetua-se uma vez e assim chama-se somente a função de leitura do peso quantas vezes forem necessárias ( exemplo 2 )
Exemplo 1:
#include "protheus.ch"
User Function UsaBalanca()
Local aBalanca := {}
Local cPorta := "COM7"
Local cModelo := "Toledo 9091" //deve ser mandado exatamente este nome
Local cPeso := Space(8) //contem o peso que retorna da balança
Local lUsaBalan := .F.
Local lLeBalan := .T.
Local nRet := -1
Local nTentativa:= 1
Private nHdlBalan := -1
aBalanca := {cModelo,cPorta}
If !Empty(aBalanca[1]).AND. !Empty(aBalanca[2]) .AND. nHdlBalan == -1
//Abertura de comunicação com o equipamento
nHdlBalan := BalancaAbr(aBalanca[1],aBalanca[2])
lUsaBalan := nHdlBalan > 0
EndIf
If !lUsaBalan
Alert("Sem comunicação com a balanca " + aBalanca[1])
Else
Alert("Comunicação efetuada com sucesso")
While lLeBalan
nRet := BalancaPegaPeso(nHdlBalan,@cPeso)
If nRet <> 0
lLeBalan := .F.
EndIf
If lLeBalan
lLeBalan := NoRound(Val(cPeso),3 ) <> 0
EndIf
If !lLeBalan
If nTentativa > 3
Alert("Tentativas de leitura de peso excedidas")
Else
lLeBalan := .T.
nTentativa += 1
EndIf
EndIf
End
EndIf
If lUsaBalan
//Encerra a comunicação com o equipamento
BalancaFec(nHdlBalan,aBalanca[2])
nHdlBalan := -1
EndIf
Return lUsaBalan
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Exemplo 2:
#include "protheus.ch"
//Efetua a abertura de comunicação com o equipamento
User Function AbreComunicacao()
Local aBalanca := {}
Local cPorta := "COM7"
Local cModelo := "Toledo 9094" //deve ser mandado exatamente este nome
Local lUsaBalan := .F.
Local nHdlBalan := -1
PutMV("MV_AUTOCOM",0)
aBalanca := {cModelo,cPorta}
If !Empty(aBalanca[1]).AND. !Empty(aBalanca[2]) .AND. nHdlBalan == -1
//Abertura de comunicação com o equipamento
nHdlBalan := BalancaAbr(aBalanca[1],aBalanca[2])
lUsaBalan := nHdlBalan > 0
WritePProString("TOLEDO", "Conectado", AllTrim(Str(nHdlBalan)), GetClientDir()+"SIGALOJA.INI")
EndIf
If !lUsaBalan
Alert("Sem comunicação com a balanca " + aBalanca[1])
Else
Alert("Comunicação efetuada com sucesso")
EndIf
Return lUsaBalan
//Efetua a captura do peso na balança
User Function CapturaPeso()
Local lLeBalan := .T.
Local nRet := -1
Local nTentativa:= 1
Local cPeso := "" //contem o peso que retorna da balança
Local nPeso := 0
Local nHdlBalan := 0
While lLeBalan
nHdlBalan := Val(GetPvProfString("TOLEDO","Conectado", "-1", GetClientDir()+"SIGALOJA.INI"))
nRet := BalancaPegaPeso(nHdlBalan,@cPeso)
If nRet <> 0
lLeBalan := .F.
EndIf
If lLeBalan
lLeBalan := NoRound(Val(cPeso),3 ) <> 0
EndIf
If !lLeBalan
If nTentativa > 3
Alert("Tentativas de leitura de peso excedidas")
cPeso := "0"
Else
lLeBalan := .T.
nTentativa += 1
EndIf
EndIf
End
Alert("Peso capturado: " + cPeso)
nPeso := Val(cPeso)
Return nPeso
//Efetua o fechamento de comunicação com a balança
User Function FechaComunicacao()
Local nHdlBalan := 0
Local nRet := 0
Local aBalanca := {}
Local cPorta := "COM7"
Local cModelo := "Toledo 9094" //deve ser mandado exatamente este nome
aBalanca := {cModelo,cPorta}
//Encerra a comunicação com o equipamento
nHdlBalan := Val(GetPvProfString("TOLEDO","Conectado", "-1", GetClientDir()+"SIGALOJA.INI"))
nRet := BalancaFec(nHdlBalan,aBalanca[2])
lUsaBalan := nRet > 0
nRet := -1
Return lUsaBalan