Ariston Santos Posted March 13, 2013 Report Share Posted March 13, 2013 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! Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 13, 2013 Report Share Posted March 13, 2013 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 Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted March 13, 2013 Author Report Share Posted March 13, 2013 Não leu, amigo. Alguma outra dica? Quote Link to comment Share on other sites More sharing options...
sistem Posted March 13, 2013 Report Share Posted March 13, 2013 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 Quote Link to comment Share on other sites More sharing options...
vagner Posted March 14, 2013 Report Share Posted March 14, 2013 Oi, vc verificou se o cabo está funcional ?, uma vez tomei um baile de uma balança, e o problema estava no cabo, foi só trocar e pronto Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted March 14, 2013 Author Report Share Posted March 14, 2013 Nada funciona. Vou providenciar outro cabo. Obrigado a todos. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.