Jump to content
Fivewin Brasil

Capturar peso Toledo 8217/6


Ariston Santos

Recommended Posts

Olá.

 

Estou tentando capturar o peso da balança TOLEDO 8217/6 mas não estou conseguindo nem com comunicação direta nem via P05.DLL. Em ambos os casos estou usando exemplos que peguei neste forum, mas não captura "nem a pau". Abaixo as funções que estou usando.

 

1 - Exemplo com comunicação direta:

FUNCTION LerBalanca()
   local cDcb, nBytes, nComm, nError, nI, c_Bufr

   cSpeed := "9600  "
   IF ! MsgGet("Velocidade","Velocidade",@cSpeed)
      RETURN NIL
   ENDIF
   IF EMPTY(cSpeed) ; RETURN NIL ; ENDIF

   cAguarde := "LENDO A BALANÇA..."
   DEFINE DIALOG oEspere FROM 0, 0 TO 4, 20 TITLE "Um momento..."
   oEspere:lHelpIcon := .f.
   @05,05 SAY oAguarde PROMPT cAguarde SIZE 80, 10 PIXEL OF oEspere UPDATE
   ACTIVATE DIALOG oEspere CENTER NOWAIT
   SysRefresh()

   lErr := .f.
   if (nComm := OpenComm( "COM1", 1024, 128 )) = 0
      nError = GetCommError( nComm )
      cAguarde := "Erro: Abrir COM1"
      oEspere:Update()
      INKEY(2)
      oEspere:End()
      RETURN 0
   endif
   SysWait(0.2)

   cDcb := ""
   cStr := "COM1:"+ALLTRIM(cSpeed)+",n,8,1"
   if ! BuildCommDcb( cStr, @cDcb )
      nError = GetCommError( nComm )
      cAguarde := "Erro: Estabelecer comunicação"
      oEspere:Update()
      INKEY(2)
      oEspere:End()
      CloseComm( nComm )
      RETURN 0
   endif
   SysWait(0.2)

   if ! SetCommState( nComm, cDcb )
      nError = GetCommError( nComm )
      cAguarde := "Erro: Obter estado"
      oEspere:Update()
      INKEY(2)
      oEspere:End()
      CloseComm( nComm )
      RETURN 0
   endif
   SysWait(0.2)

   if ( nBytes := WriteComm( nComm, Chr(5) ) ) <= 0
      nError = GetCommError( nComm )
      cAguarde := "Erro: Enviar comando"
      oEspere:Update()
      INKEY(2)
      oEspere:End()
      CloseComm( nComm )
      RETURN 0
   EndIf
   SysWait(0.2)

   // Pegar o peso da balança
   hIni := LEFT(TIME(),8)
   WHILE .T.
      c_Bufr := Space(20)
      ReadComm( nComm , @c_Bufr)
      SysWait(0.2)
      nError = GetCommError( nComm )
      cAguarde := "Lendo..."
      oEspere:Update()
      IF ! EMPTY(c_Bufr) ; EXIT ; ENDIF
      IF SECS( ELAPTIME( hIni, LEFT(TIME(),8) ) ) > 3
         EXIT
      ENDIF
   END

   if ! CloseComm( nComm )
      nError = GetCommError( nComm )
      cAguarde := "Erro: Encerrar comunicação"
      oEspere:Update()
      INKEY(2)
   endif

   xQtd := VAL(SUBSTR(c_Bufr,2,5)) / 1000
   IF xQtd <= 0
      xQtd := 0
   ENDIF

   oEspere:End()
   
   SysRefresh()
   MsgInfo("Peso: "+ALLTRIM(STR(xQtd)), c_Bufr)
Return( xQtd )

 

2 - Exemplo com a DLL P05.DLL

FUNCTION Le_Peso_1()

   LOCAL retorno
   LOCAL Peso := Space(5)

   XPorta    := 1 // 1=com1; 2=com2; 3=com3
   XBaudrate := 2 // 0=2400 1=4800 2=9600
   XDatabits := 1 // 0=7; 1=8
   XParidade := 0 // 0=nenhum 1=impar 2=par 3=espaço

   IF ! FILE(".\P05.DLL")
      MSGINFO("O Arquivo P05.DLL não foi encontrado, solicite a Empresa Desenvolvedora","Atenção" )
      RETURN( 1 )
   ENDIF

   xDllb := LoadLibrary( "P05.DLL" )

   RETORNO := AbrePorta( XPorta, XBaudrate, XDatabits, XParidade )

*  ? RETORNO

   If Retorno # 1
      RETORNO := FechaPorta()
      FreeLibrary( xDllb )
      MsgInfo( "O Sistema não conseguiu abrir a proca COM.","Erro" )
      RETURN( 0 )
   Endif

   Retorn1 := PegaPeso(0, @Peso, "c:\" )
   xQtd := val(peso)
   xQtd := Round(xQtd/1000,3)
   If xQtd <= 0
      If MsgNoYes( "O Sistema Não Conseguiu Ler o Peso da Balança." + CRLF + ;
         "Retire o produto da balança e coloque novamente para nova leitura."+ CRLF + ;
         "Deseja Digitar o Peso do Produto?","Erro na Leitura da Balança" )
      Else
         Peso := Space(5)
         Retorno := PegaPeso( 0, @Peso, "c:\" )
         xQtd := val(peso)
      Endif
   Endif
   Retorno := FechaPorta()
   FreeLibrary( xDllb )

   MsgInfo("Peso "+alltrim(str(xQtd)), "Aviso")
Return( xQtd )

 

 

Alguém pode me ajudar? Se alguém tiver um programa de retaguarda que capture o peso das balanças toledo via porta serial, poderia compartilhar? Não serve o ACBrMonitor.

 

Grato!

Link to comment
Share on other sites

Veja se ajuda:

 

 

              xQtd:=LEPESO()
 
 
FUNCTION Lepeso()
 
    Local retorno, Peso := Space(5), xVel
 
    Public xUbp, XLOPC
 
     Retorno:= AbrePorta( val(xUbp), Iif(xLopc="9600",2,0), 0, 2 )
*    Retorno:= AbrePorta( val(xUbp), Iif(xLopc="9600",2,Iif(xLopc="2400",0,1)), 0, 2 )
 
    if Retorno # 1
 
       MsgInfo( OemtoAnsi( "Erro na abertura da porta COM da Balan‡a!" ),                  ;
                 OemtoAnsi( "BalcÆo - Erro na Porta da Balan‡a Pesadora" ) )
 
    endif
 
    Retorno:= PegaPeso( 0, @Peso, "" )
 
    xQtd:= val(peso)
 
    xQtd:=Round(xQtd/1000,3)
 
    If  xQtd <= 0
 
 
       If MsgNoYes( oemtoansi("ATENۂO: *** ERRO NA LEITURA DO PESO DA BALAN€A *** ")+ CRLF +;
                               + CRLF +;
                    oemtoansi("O Sistema NÆo Conseguiu Ler o Peso da Balan‡a.")+ CRLF+ ;
                    oemtoansi("Vocˆ Pode Retirar o Peso e Colocar Novamente para Nova Tenta-")+ CRLF +;
                    oemtoansi("tiva de Leitura do Peso da Balan‡a. Caso NÆo Consiga Ler o Peso")+ CRLF +;
                    OemToAnsi("da Balan‡a, vocˆ Poder  Digitar o Peso do Produto.")  + CRLF +;
                               + CRLF +;
                               + CRLF +;
                    oemtoansi("[SIM]  -> Para Digitar o Peso do Produto")+ CRLF +       ;
                    oemtoansi("[NÇO] -> Para Nova Tentativa de Ler o Peso na Balan‡a"),            ;
                    "Informação Para o Usuário...              " ) = .T.
 
                    xQtd:=DigitaPeso()
 
 
       Else
 
         Peso := Space(5)
         Retorno:= PegaPeso( 0, @Peso, "c:\" )
         xQtd:= val(peso)
 
         If val(xlopc)=1
 
            xQtd:=Round(xQtd/1000,3)
 
         Endif
 
         If xQtd <= 0
 
            mSgInfo(oemtoansi("Erro na Leitura do Peso da Balan‡a !"),oemtoansi("BalcÆo - Leitura de Peso da Balan‡a"))
 
         Endif
 
       Endif
 
 
    Endif
 
    Retorno:=FechaPorta()
 
Return( xQtd )
 
 
         Peso := Space(5)
         Retorno:= PegaPeso( 0, @Peso, "c:\" )
         xQtd:= val(peso)
 
 
 
 
* DECLARACAO DLL BALANCA PESADORA TOLEDO
 
DLL32 FUNCTION AbrePorta( Porta AS LONG, BaudRate AS LONG, DataBits AS LONG, Paridade AS LONG ) AS LONG PASCAL  lib xDllb
 
 
DLL32 FUNCTION PegaPeso( OpcaoEscrita AS LONG, Peso AS STRING, Diretorio AS STRING ) AS LONG PASCAL  lib xDllb
 
DLL32 FUNCTION FechaPorta() AS LONG PASCAL  lib xDllb
Link to comment
Share on other sites

veja se ajuda

Function pgpeso(nTara, cPorta)
Local cDados, nPeso:=0
 Default nTara:=0
 Default cPorta:="COM1"
 nHandle:=Init_Port(cPorta,2400,8,0,1,4000)
 OutBufClr(nHandle)
 OutChr(nHandle,CHR(5))
 SysWait(0.3)
 Bytes := InbufSize(nHandle)
 cDados=Space(20)
 Buffer := InChr( nHandle, Bytes, @cDados)
 UnInt_Port(nHandle)
 nPeso=(val(substr(cDados,2,5))/1000)-nTara
Return nPeso

 

segue link da lib

http://www.salc.com.br/atual/hbcomm.lib

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...