Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3682 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde.

Estou utilizando o acbrBal para leitura do peso, porém ao trazer o peso que está indicado 6,00 no visor do módulo (Toledo) ele me retorna um peso assim:

60.000,035

utilizo o evento onlepeso:


procedure TFLot02.ACBrBAL1LePeso(Peso: double; Resposta: AnsiString);

var

  valid: integer;

begin

  FormataEdits(formatFloat('##0.000', Peso));

  // sttResposta.Caption := Converte( Resposta ) ;


  if Peso > 0 then

  begin

    lblError.Visible := false;

    lblError.caption := 'Leitura OK !'

  end

  else

  begin

    lblError.Visible := True;

    valid := Trunc(ACBrBAL1.UltimoPesoLido);

    case valid of

      0:

        lblError.caption := 'TimeOut !' + sLineBreak +

          'Coloque o produto sobre a Balança!';

      -1:

        lblError.caption := 'Peso Instavel ! ' + sLineBreak +

          'Tente Nova Leitura';

      -2:

        lblError.caption := 'Peso Negativo !';

      -9:

        lblError.caption := 'Erro de leitura, balança instável !';

      -10:

        lblError.caption := 'Sobrepeso !';

    end;

  end;

end;

Alguma sugestão ?

Terei que fazer alguma divisão ?

Grato.

César

Postado

Amigos encontrei a unit abaixo na net no seguinte link:

http://www.forumweb.com.br/foruns/topic ... ocolo-p03/

Adicionei esta para ser usada no acbrBal, está bem melhor, porém ainda tenho retornos estranhos, a balança tem uma tara pré definida, quando tento ler o peso sem nada na balança ele retorna um valor enorme um : 34490,00. Este valor não é fixo ok, mesmo quando tem um item a ser pesado as vezes não lê, ora traz uns valores enormes, detalhe isto tb ocorre com o modelo Toledo q já existe, será que ninguém passou por isto, algo q possa me ajudar?

Em resumo agora pelo menos está lendo o peso, sem ter que dividir, apenas formatar, porém acontece de ter retornos esquisitos e ora não lê nada.


{$I ACBr.inc}


unit ACBrBALToledoRodoviaria;


interface

uses ACBrBALClass,

     Classes;


const STX = #02 ;

      ETX = #03 ;

      CR  = #13 ;


type


  TACBrBALToledoRodoviaria = class( TACBrBALClass )

  public

    constructor Create(AOwner: TComponent);

    function LePeso( MillisecTimeOut : Integer = 3000) :Double; override;

    procedure LeSerial( MillisecTimeOut : Integer = 500) ; override ;

  end ;


implementation

Uses ACBrBAL, ACBrUtil, ACBrDevice,

     {$IFDEF COMPILER6_UP} DateUtils, StrUtils {$ELSE} ACBrD5, synaser, Windows{$ENDIF},

     SysUtils, Math ;


{ TACBrBALToledoRodoviaria }


constructor TACBrBALToledoRodoviaria.Create(AOwner: TComponent);

begin

  inherited Create( AOwner );


  fpModeloStr := 'ToledoRodoviaria' ;

  fpDevice.HardFlow := false ;

  fpDevice.SoftFlow := false ;

  fpDevice.HandShake:= TACBrHandShake(0);

  fpDevice.Parity   := TACBrSerialParity(0) ;

  fpDevice.Data     := 7 ;

  fpDevice.Baud     := 4800 ;

  fpDevice.Stop     := TACBrSerialStop(2) ;


end;


function TACBrBALToledoRodoviaria.LePeso( MillisecTimeOut : Integer) : Double;

begin

  fpUltimoPesoLido := 0 ;

  fpUltimaResposta := '' ;


  fpDevice.Serial.Purge ;           { Limpa a Porta }

  fpDevice.EnviaString( #05 );      { Envia comando solicitando o Peso }

  sleep(200) ;


  LeSerial( MillisecTimeOut );


  Result := fpUltimoPesoLido ;

end;


procedure TACBrBALToledoRodoviaria.LeSerial(MillisecTimeOut: Integer);

Var

  Peso, Tara, B210 : AnsiString ;

  Decimais : Double ;

  SWA,SWB,SWC : AnsiChar ;

  B    : Integer ;

begin

  fpUltimoPesoLido := 0 ;

  fpUltimaResposta := '' ;


  Decimais := 1000 ;

  Try

     fpUltimaResposta := fpDevice.Serial.RecvPacket( MillisecTimeOut );


        {Protocolo P03

        [STX] [SWA] [SWB] [SWC] [IIIIII] [TTTTTT] [CR] [CKS]


        SWA = 1 byte - Status word "A"

        SWB = 1 byte - Status word "B"

        SWC = 1 byte - Status word "C"

        IIIIII = 6 bytes - peso bruto ou liquido

        TTTTTT = 6 bytes - tara configurada na balança

        CR = Carriage Return

        CKS = checksum


        SWA - STATUS WORD "A"

        bit 2, 1 e 0 =

        001 = x 10

        010 = x 1

        011 = x 0.1

        100 = x 0.01

        101 = x 0.001

        110 = x 0.0001


        bit 4 e 3 =

        01 = Tamanho do Incremento 1

        10 = Tamanho do Incremento 2

        11 = Tamanho do Incremento 5


        bit 5 e 6 = sempre 01


        bit 7 =

        0 = Paridade Ímpar

        1 = Paridade Par


        SWB - STATUS WORD "B"

        Bit 0 = Peso Líquido = 1

        Bit 1 = Peso Negativo = 1

        Bit 2 = Sobrecarga = 1

        Bit 3 = Motion = 1

        Bit 4 = Sempre = 1

        Bit 5 = Sempre = 1

        Bit 6 = Se AUTO Zerado = 1

        Bit 7 = Paridade Par


        SWC - STATUS WORD "C"

        Bit 0 = Sempre = 0

        Bit 1 = Sempre = 0

        Bit 2 = Sempre = 0

        Bit 3 = Tecla Imprimir = 1

        Bit 4 = Expandido = 1

        Bit 5 = Sempre = 1

        Bit 6 = Sempre = 1

        Bit 7 = Paridade Par

        }


        SWA := fpUltimaResposta[2] ;

        SWB := fpUltimaResposta[3] ;

        SWC := fpUltimaResposta[4] ;


        if TestBit(Ord(SWA),2) then

           B210 :='1'

        else

           B210 :='0';

        if TestBit(Ord(SWA),1) then

           B210 :=B210 + '1'

        else

           B210 :=B210 + '0';

        if TestBit(Ord(SWA),0) then

           B210 :=B210 + '1'

        else

           B210 :=B210 + '0';


        B:=StrToInt(B210);

        case B of

        1:Decimais := 10 ;

        10:Decimais := 1 ;

        11:Decimais := 0.1 ;

        100:Decimais := 0.01 ;

        101:Decimais := 0.001 ;

        110:Decimais := 0.0001 ;

        end;


        Peso := Trim(Copy(fpUltimaResposta,5,6));

        Tara := Trim(Copy(fpUltimaResposta,11,6));


     { Ajustando o separador de Decimal corretamente }

     Peso := StringReplace(Peso, '.', DecimalSeparator, [rfReplaceAll]);

     Peso := StringReplace(Peso, ',', DecimalSeparator, [rfReplaceAll]);

     Tara := StringReplace(Tara, '.', DecimalSeparator, [rfReplaceAll]);

     Tara := StringReplace(Tara, ',', DecimalSeparator, [rfReplaceAll]);


     if TestBit(Ord(SWB),1) then {se Bit 1 do SWB ligado = peso negativo}

        fpUltimoPesoLido := -1

     else

        if TestBit(Ord(SWB),2) then {se Bit 2 do SWB ligado = Sobrecarga de Peso}

           fpUltimoPesoLido := -10

        else

           begin

                try

                   if TestBit(Ord(SWB),0) then {se Bit 0 do SWB ligado = peso liquido}

                   begin

                        if pos(DecimalSeparator,Peso) > 0 then  { Já existe ponto decimal ? }

                           fpUltimoPesoLido := StrToFloat(Peso)

                        else

                            fpUltimoPesoLido := StrToInt(Peso) * Decimais ;

                        end

                        else

                        begin

                             if pos(DecimalSeparator,Peso) > 0 then  { Já existe ponto decimal ? }

                                fpUltimoPesoLido := StrToFloat(Peso) - StrToFloat(Tara)

                             else

                                 fpUltimoPesoLido := (StrToInt(Peso) * Decimais) - (StrToInt(Tara) * Decimais) ;

                        end;

                except

                      case Peso[1] of

                      'I' : fpUltimoPesoLido := -1  ;  { Instavel }

                      'N' : fpUltimoPesoLido := -2  ;  { Peso Negativo }

                      'S' : fpUltimoPesoLido := -10 ;  { Sobrecarga de Peso }

                      else

                          fpUltimoPesoLido := 0 ;

                      end;

                end;

           end;

  except

     { Peso não foi recebido (TimeOut) }

     fpUltimoPesoLido := -9 ;

  end ;

end;


end.

  • 5 semanas depois ...
Postado

Oi Daniel, como não tive sucesso até hoje com isto, ainda estou batendo cabeça para acertar, porém adianto que está melhorando usando o model balToledo2180 que vem no acbrbal, mas este sistema é pra frigorifico, então a pesagem tem ser rapida, digamos que o tempo entre as pesagens não chega a 4 segundos (carretilhas).

Não consigo chegar nem perto do sistema dos que existe hoje e que precisa ser trocado, a instabilidade é enorme, quando estabiliza preciso pegar o peso de imediato, coisa que melhorou após estar usando o monitorar balança.

O que fiz foi ao abrir o formulario ativo o acbrbal e monitorando, quando o peso aparece em um edit o usuário pressiona f12 para ler o peso e já se preparar para outro, porém não está como disse de acordo com o sistema dos!

Codigo para ativar o acbrbal, ele pega configuracoes que vem do banco, porém anotei abaixo com ok quais ele usa:

(manual da toledo e tb verificamos no hardware a config)


  with ACBrBAL1 do

  begin

    Desativar;

    // Modelo := balToledoRodoviaria;

    Modelo := balToledo2180;

    Device.HandShake := TACBrHandShake(hsNenhum);

    case QCFGPARITY.asInteger of

      0:

        Device.Parity := pNone; //ok

      1:

        Device.Parity := pOdd;

      2:

        Device.Parity := pEven;

      3:

        Device.Parity := pMark;

      4:

        Device.Parity := pSpace;

    end;

    case QCFGSTOP.asInteger of

      0:

        Device.Stop := s1;

      1:

        Device.Stop := s1eMeio;

      2:

        Device.Stop := s2; //ok

    end;

    Device.Data := QCFGDATA.asInteger; //7

    Device.Baud := QCFGBAUD.asInteger; //4800

    Device.Porta := QCFGPORTA.asString;//com1

    Intervalo := QCFGINTERVALO.asInteger; //1000

    MonitorarBalanca := True;

    Ativar;

  end;

Bom olha o código do sistema dos a parte que captura o peso:

Static Procedure PESOBAL


   SetKey(K_F12, Nil)

   lf12:= .T.

   apeso:= {}

   com_setirq(vglob12, vglob17)

   If (com_open(vglob12, 1000))

      If (!com_init(vglob12, vglob13, vglob14, vglob15, vglob16))

         alerta("Porta nÆo pode ser inicializada !", 5, .T.)

         Set Key K_F12 To pesobal

         Return

      EndIf

      com_dtr(vglob12, .T.)

      com_rts(vglob12, .T.)

      com_dsr(vglob12, .T.)

      com_dcd(vglob12, .T.)

      com_cts(vglob12, .T.)

      For nstab:= 1 To 2

         ntent:= 0

         Do While (.T.)

            If (com_count(vglob12) > 0)

               dados1:= com_read(vglob12, 1)

               If (dados1 == "")

                  dados2:= com_read(vglob12, 16)

                  cpeso:= SubStr(dados1 + dados2, 5, 6)

                  culti:= right(cpeso, 1)

                  If (Val(cpeso) == 0 .OR. culti == "1" .OR. culti ;

                        == "2" .OR. culti == "3" .OR. culti == "4" ;

                        .OR. culti == "6" .OR. culti == "7" .OR. ;

                        culti == "8" .OR. culti == "9")

                     Loop

                  EndIf

                  npeso:= Val(Left(cpeso, 5) + "." + right(cpeso, 1))

                  If (SubStr(dados1 + dados2, 3, 1) == "q")

                     readinsert(.T.)

                     Keyboard alltrim(Transform(npeso, ;

                        "@E 99,999.99"))

                     readinsert(.F.)

                     com_close(vglob12)

                     Set Key K_F12 To pesobal

                     Return

                  EndIf

               EndIf

            EndIf

            ntent++

            If (ntent > 10)

               Exit

            EndIf

            nk:= InKey(0.01)

            If (LastKey() == K_ESC)

               Exit

            EndIf

         EndDo

      Next

      ntent:= 0

      Do While (.T.)

         If (com_count(vglob12) > 0)

            dados1:= com_read(vglob12, 1)

            If (dados1 == "")

               dados2:= com_read(vglob12, 16)

               cpeso:= SubStr(dados1 + dados2, 5, 6)

               culti:= right(cpeso, 1)

               If (Val(cpeso) == 0 .OR. culti == "1" .OR. culti == ;

                     "2" .OR. culti == "3" .OR. culti == "4" .OR. ;

                     culti == "6" .OR. culti == "7" .OR. culti == ;

                     "8" .OR. culti == "9")

                  Loop

               EndIf

               npeso:= Val(Left(cpeso, 5) + "." + right(cpeso, 1))

               If (SubStr(dados1 + dados2, 3, 1) == "q" .OR. ;

                     SubStr(dados1 + dados2, 3, 1) == "s" .OR. ;

                     SubStr(dados1 + dados2, 3, 1) == "{")

                  If (SubStr(dados1 + dados2, 3, 1) == "s" .OR. ;

                        SubStr(dados1 + dados2, 3, 1) == "{")

                     npeso:= npeso * -1

                  EndIf

                  readinsert(.T.)

                  Keyboard alltrim(Transform(npeso, "@E 99,999.99"))

                  readinsert(.F.)

                  com_close(vglob12)

                  Set Key K_F12 To pesobal

                  Return

               EndIf

               nacho:= ascan(apeso, { |_1| _1[1] == npeso })

               If (nacho == 0)

                  AAdd(apeso, {npeso, 1})

               Else

                  apeso[nacho][2]:= apeso[nacho][2] + 1

                  If (apeso[nacho][2] >= 3)

                     readinsert(.T.)

                     Keyboard alltrim(Transform(npeso, ;

                        "@E 99,999.99"))

                     readinsert(.F.)

                     com_close(vglob12)

                     Set Key K_F12 To pesobal

                     Return

                     apeso:= {}

                  EndIf

               EndIf

            EndIf

         EndIf

         ntent++

         If (ntent > 30)

            alerta("NÆo foi poss¡vel capturar o peso estabilizado !", ;

               5, .T.)

            Exit

         EndIf

         nk:= InKey(0.01)

         If (LastKey() == K_ESC)

            Exit

         EndIf

      EndDo

      com_close(vglob12)

   Else

      alerta("Porta nÆo pode ser aberta !", 5, .T.)

   EndIf

   Set Key K_F12 To pesobal

   Return

A questão é já fiz de tudo para ser mais eficaz, ler no momento em que a carretilha para e o peso é exibido no módulo mas não está de acordo, não lê as vezes.

Alguma sugestão?

Obs.: Esquece a da rodoviária, rsrsr.

Abraços

Postado

Boa noite Daniel!

Bom antes de mais nada por ora agradeço muita sua atenção!

segue link do manual do indicador 9091 ac - protocolo P03

http://www.toledobrasil.com.br/suporte/ ... 091_AC.pdf

configurações que uso no componente:

Paridade = none

Stop bits = s2

Data Bits = 7

Baud Rate = 4800

Porta = COM1

Timeout = 1000

obs.: Um incoviniente que acontece algumas vezes é ler a tara de 3.50, rsrrs, ai judia kkk, t+

Postado

Bom dia Daniel, gostaria de saber se o link contendo o manual vc conseguiu baixar, se ajuda em algo?

Hoje estaremos testando mais uma forma de ler o peso, usando o acbrbal, fiz algo que parecido com o codigo em clipper, ao invés de usar o monitorar estou usando um laço até 30 vezes se não ler ai ele sai fora do loop.

Se eu tivesse um emulador bom com geração de instabilidade facilitaria muito, rs.

obrigado

t+

Postado

Que isto, eu não tenho nem como cobrar nada e nem é isto que estou fazendo, rsrsrs, você não tem obrigação alguma com isto, já ajudou muito e sempre em ter desenvolvido estes componentes show de bola, uso o acbrnfe, acbrbal, usava o acbrecf pena que não faz comunicação com usb, ai tive que usar dlls dos fabricantes, mas tá tudo certo, rs.

Ontem não conseguimos testar, não podemos prejudicar a produção tá complicado, não tenho ambiente de testes.

valeu bom fds.

  • Consultores
Postado

usava o acbrecf pena que não faz comunicação com usb, ai tive que usar dlls dos fabricantes

valeu bom fds.

Já consegui usar o ACBrECF com impressoras USB sem problemas. É só instalar o drive que cria Porta Serial Virtual.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Fundadores
Postado

Cesarpir,

O manual que você enviou descreve 5 protocolos diferentes...

O Modelo "balToledo2180" não parece se enquadrar em nenhum deles...

Se você conseguir configurar o equipamento para usar o protocolo P05, deve funcionar como o Modelo "balToledo" do ACBrBAL

Pergunta: Você está usando a propriedade "MonitorarBalanca" ? Se SIM, ela irá disparar um evento cada vez que o equipamento apurar o peso... ou seja, você não precisará ficar tentando ler o peso...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Ok, daniel vou verificar isto então, na configuração do equipamento, então eu estava usando o monitorar balança sim, porém como te disse alguns pesos não lia, pois é muito rápido a passagem das carretilhas.

Ai tive a idéia de desabilitar isto e tentar através de um loop, bom então o que me resta agora é tentar mudar este protocolo no módulo, ou usar algum outro componente, código enfim sei não, rsrsrs.

Só não entendi então pq o código da balancarodoviaria que está no protocolo p03 não funcionou, vou tentar com ele tb e usar o monitorarbalanca.

Novamente obrigado

Abraços

  • 2 semanas depois ...
Postado

Boa tarde!

Apenas para deixar aqui o que estou passando e sempre alguém tb pode precisar rsrsrs, enfim, ontem tentamos alterar para o protocolo P05, conforme sugestão do Daniel, porém não conseguimos, entramos em contato com o suporte da Toledo esta disse que não era viável devido a N motivos, um deles é que o P03 sempre retorna algo, mesmo sendo instável, já no P05 não retornaria nada, nem saberíamos o que houve em caso de problemas, etc etc etc, to encurtando ok.

E além disto teríamos que chamar a toledo para fazer isto, pois teria que ser direto no equipamento, algo como duas serias no equipamento, quem falou com o suporte foi um responsável pelo TI da empresa que estou desenvolvendo o sistema.

Por ora estou ainda tentando usar DLLs, ontem recebi um pclink06 que vem com um demo para Delphi e VB + dlls, realmente um parto se comunicar com esta balança.

Voltando ao acbr o modelo toledo 2180 é o que mais se aproximou, o que gostaria de pedir Daniel, sei que não tenho este direito, mas vou arriscar é que por favor verificasse o modelo da rodoviária que está aqui neste tópico pq este não funciona com o indicador 9091 ac protocolo P03? a Pessoa que desenvolveu parece ter seguido a risca os critérios, eu verifiquei o fonte e não consegui encontrar nada de errado.

Outra saída é desembolsar 390,00 - P03_unit.pas pela unit da Iagara, mas não sei se atende, se alguém tem alguma experiência por favor se puder comentar agradeço.

Novamente obrigado e desculpe pela insistência!

Abraços

  • 1 ano depois...
Postado

Boa tarde!

Apenas para deixar aqui o que estou passando e sempre alguém tb pode precisar rsrsrs, enfim, ontem tentamos alterar para o protocolo P05, conforme sugestão do Daniel, porém não conseguimos, entramos em contato com o suporte da Toledo esta disse que não era viável devido a N motivos, um deles é que o P03 sempre retorna algo, mesmo sendo instável, já no P05 não retornaria nada, nem saberíamos o que houve em caso de problemas, etc etc etc, to encurtando ok.

E além disto teríamos que chamar a toledo para fazer isto, pois teria que ser direto no equipamento, algo como duas serias no equipamento, quem falou com o suporte foi um responsável pelo TI da empresa que estou desenvolvendo o sistema.

Por ora estou ainda tentando usar DLLs, ontem recebi um pclink06 que vem com um demo para Delphi e VB + dlls, realmente um parto se comunicar com esta balança.

Voltando ao acbr o modelo toledo 2180 é o que mais se aproximou, o que gostaria de pedir Daniel, sei que não tenho este direito, mas vou arriscar é que por favor verificasse o modelo da rodoviária que está aqui neste tópico pq este não funciona com o indicador 9091 ac protocolo P03? a Pessoa que desenvolveu parece ter seguido a risca os critérios, eu verifiquei o fonte e não consegui encontrar nada de errado.

Outra saída é desembolsar 390,00 - P03_unit.pas pela unit da Iagara, mas não sei se atende, se alguém tem alguma experiência por favor se puder comentar agradeço.

Novamente obrigado e desculpe pela insistência!

Abraços

Amigo, conseguiu alguma solução? Também estou com o mesmo problema.

  • 1 ano depois...
Postado (editado)

Prezados, 

 

Por favor, poderiam me auxiliar?

Estou com dificuldades em fazer a leitura do peso de uma balança rodoviária da Toledo.

Utilizando o programa de exemplo da ACBr, fica retornando -9 ao invés do peso.

 

Se alguém puder me passar uma receitinha de bolo, ficarei muito agradecido...

 

Alguém teria ai também o PCLink da Toledo para testes?

 

Obs.: Estou usando a porta serial COM6

Segue anexo os parâmetros que estou usando.

 

Muito obrigado,

 

 

   Herivelton

post-24264-0-85561900-1414177668.jpg

Editado por herfranpi
  • Curtir 1
  • Este tópico foi criado há 3682 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.