Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Fundadores
Postado

O protocolo pode ser diferente dos suportamos pelo componente atualmente 

Obtenha a documentação técnica do Protocolo do equipamento, e verifique se bate com a implementação existente  

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.

  • Respostas 50
  • Created
  • Última resposta

Top Posters In This Topic

Postado

Boa tarde.

Obtive resposta da Toledo, baseado nas informações abaixo tem como incluir essa configuração no ACBrBal?

Grato.

----

Bom dia Fabrício,

Verifiquei pelo número de série que a balança é o modelo 8540.

Equipamento: 00000000

Tipo: S

Equipamentos: Toledo

Denominação: Modulo Ind 8540 Digital Numerico Std

Esse indicador tem um protocolo diferente das balanças comerciais da Toledo.

Segue anexo o protocolo de comunicação do indicador 8540.

Att,

Agnaldo ...

Toledo do Brasil

...

Protocolo do 8540 Numérico


STX SWA SWB SWC IIIIII TTTTTT CR CS


ABREVIATURAS:
STX ---> Start of Text = 02
CR ---> Carriage Return = 0DH
CS ---> Byte de Checksum
I ---> Peso indicado no Display (Líquido ou Bruto)
T ---> Tara


SWA --> STATUS WORD "A":
BIT 2, 1 e 0 ----> 001 = DISPLAY x 10
010 = DISPLAY x 1
011 = DISPLAY x 0.1
100 = DISPLAY x 0.01
101 = DISPLAY x 0.001
110 = DISPLAY x 0.0001
BIT 4 e 3 -------> 01 = TAMANHO DO INCREMENTO I 1
10 = TAMANHO DO INCREMENTO I 2
11 = TAMANHO DO INCREMENTO I 5
BIT 6 e 5 -------> 11 = SEMPRE
BIT 7 -----------> = PARIDADE


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 = 0
BIT 7 -----------> PARIDADE


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 -----------> COM TARA MANUAL= 1
BIT 7 -----------> PARIDADE


OBS: Os bytes de Peso não significativos sempre são enviados com caracter 0x20
(ESPAÇO)
Configuração mais utilizada: 4800, 7 bits, Paridade Par e 2 Stop Bits.

---

 

Analysis and System Development - Delphi Programmer - Computer Technician - Developing solutions together

 

Postado

:???:  Eu ate achei o ponto onde alterar, mas meu conhecimento nesse ponto ficou limitado a pouco ou nada. Vou precisar de ajuda do fórum pra resolver isso.

 

Analysis and System Development - Delphi Programmer - Computer Technician - Developing solutions together

 

  • 2 semanas depois ...
Postado

Boa tarde, consegui comunicação e achar o problema.

Veja como poderia incluir pra mim essa alteração.

Grato.

procedure TACBrBALToledo.LeSerial(MillisecTimeOut: Integer);
Var
  Resposta : AnsiString ;
  Decimais : Integer ;
  St2      : AnsiChar ;
  PI,PF    : Integer ;
  Protocolo: String;
begin
  fpUltimoPesoLido := 0 ;
  fpUltimaResposta := '' ;
  Protocolo        := '';

  Decimais := 1000 ;
  Try
     fpUltimaResposta := fpDevice.LeString( MillisecTimeOut );
     GravaLog('- '+FormatDateTime('hh:nn:ss:zzz',now)+' RX <- '+fpUltimaResposta );

     if Length(fpUltimaResposta) > 20 then
      begin
        { Protocolo do 8540 Numérico
          STX SWA SWB SWC IIIIII TTTTTT CR CS
          ABREVIATURAS:
          STX ---> Start of Text = 02
          CR ---> Carriage Return = 0DH
          CS ---> Byte de Checksum
          I ---> Peso indicado no Display (Líquido ou Bruto)
          T ---> Tara
          SWA --> STATUS WORD "A":
          BIT 2, 1 e 0 ----> 001 = DISPLAY x 10
          010 = DISPLAY x 1
          011 = DISPLAY x 0.1
          100 = DISPLAY x 0.01
          101 = DISPLAY x 0.001
          110 = DISPLAY x 0.0001
          BIT 4 e 3 -------> 01 = TAMANHO DO INCREMENTO I 1
          10 = TAMANHO DO INCREMENTO I 2
          11 = TAMANHO DO INCREMENTO I 5
          BIT 6 e 5 -------> 11 = SEMPRE
          BIT 7 -----------> = PARIDADE
          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 = 0
          BIT 7 -----------> PARIDADE
          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 -----------> COM TARA MANUAL= 1
          BIT 7 -----------> PARIDADE
          OBS: Os bytes de Peso não significativos sempre são enviados com caracter 0x20
          (ESPAÇO)
          Configuração mais utilizada: 4800, 7 bits, Paridade Par e 2 Stop Bits. }

        St2 := fpUltimaResposta[9] ;
        if TestBit(Ord(St2),3) then   { Bit 3 de ST2 ligado = 2 casas decimais }
           Decimais := 100 ;

        Resposta := Trim(Copy(fpUltimaResposta,6,8));
        Protocolo := 'Protocolo A';
      end
     else
      begin
      { Protocolo B = [ ENQ ] [ STX ] [ PESO ] [ ETX ]
        Protocolo C = [ STX ] [ PESO ] [ CR ]
        Linha Automacao = [ STX ] [ PPPPP ] [ ETX ]  - Peso Estável;
                          [ STX ] [ IIIII ] [ ETX ]  - Peso Instável;
                          [ STX ] [ NNNNN ] [ ETX ]  - Peso Negativo;
                          [ STX ] [ SSSSS ] [ ETX ]  - Peso Acima (Sobrecarga) }

        PI := pos(STX, fpUltimaResposta) ;
        PF := pos(ETX, fpUltimaResposta) ;
        if PF = 0 then                       { Não achou ETX, procura por CR }
           PF := pos(CR, fpUltimaResposta)
        else
           Protocolo := 'Protocolo B' ;

        if PF = 0 then                       { Não achou CR, usa toda a String }
           PF := Length(fpUltimaResposta) + 1
        else
           Protocolo := 'Protocolo C' ;

        Resposta := Trim( copy( fpUltimaResposta, PI+1, PF-PI-1 )) ;
      end ;

     { Ajustando o separador de Decimal corretamente }
     Resposta := StringReplace(Resposta, '.', DecimalSeparator, [rfReplaceAll]);
     Resposta := StringReplace(Resposta, ',', DecimalSeparator, [rfReplaceAll]);

     try
        if pos(DecimalSeparator,Resposta) > 0 then  { Já existe ponto decimal ? }
           fpUltimoPesoLido := StrToFloat(Resposta)
        else
           fpUltimoPesoLido := StrToInt(Resposta) / Decimais ;
     except
        case Resposta[1] of
          'I' : fpUltimoPesoLido := -1  ;  { Instavel }
          'N' : fpUltimoPesoLido := -2  ;  { Peso Negativo }
          'S' : fpUltimoPesoLido := -10 ;  { Sobrecarga de Peso }
        else
           fpUltimoPesoLido := 0 ;
        end;
     end;
  except
     { Peso não foi recebido (TimeOut) }
     fpUltimoPesoLido := -9 ;
  end ;

  GravaLog('              UltimoPesoLido: '+FloatToStr(fpUltimoPesoLido)+
     ' , Resposta: '+Resposta+' - '+Protocolo );
end;
 

Analysis and System Development - Delphi Programmer - Computer Technician - Developing solutions together

 

  • Membros Pro
Postado

Bom dia!

hoje é um novo dia, problema de ontem soluções para hoje.

Daniel, desculpa esta insistindo, ontem estava revisando o sistema e apareceu algumas duvidas no ACBrBal para escolher o modelo da balança eu estou fazendo assim (código abaixo) mas na hora que passo os paramentros no log aparece outro tipo de equipamento.

bom resolvi omitir e coloque direto no componente o tipo de balança para ver no dava.

ficou rápido para capturar o peso no log aparece o tipo de equipamento correto que selecionei, mas ai tem um problema, peso que era para ser 62800 aparece como 6280 

o que sera que esta errado.

código

        if acb_Balanca.Ativo then
           acb_Balanca.Desativar;

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balDigitron') then
          acb_balanca.Modelo           := TACBrBALModelo(0);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balFilizona') then
          acb_balanca.Modelo           := TACBrBALModelo(1);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balLider') then
          acb_balanca.Modelo           := TACBrBALModelo(2);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balLucasTec') then
          acb_balanca.Modelo           := TACBrBALModelo(3);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balMagellan') then
          acb_balanca.Modelo           := TACBrBALModelo(4);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balMagna') then
          acb_balanca.Modelo           := TACBrBALModelo(5);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balNenhum') then
          acb_balanca.Modelo           := TACBrBALModelo(6);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balToledo') then
          acb_balanca.Modelo           := TACBrBALModelo(7);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balToledo2180') then
          acb_balanca.Modelo           := TACBrBALModelo(8);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balUrano') then
          acb_balanca.Modelo           := TACBrBALModelo(9);

        if (F_DMdados.cdsConfBalCFG_MODELO.AsString = 'balUranoPOP') then
          acb_balanca.Modelo           := TACBrBALModelo(10);
       // ---------------------------------------------------------------------------------
        if (F_DMdados.cdsConfBalCFG_FLUXO.AsString = 'hsDTR_DSR') then
          acb_balanca.Device.HandShake := TACBrHandShake(0);
        if (F_DMdados.cdsConfBalCFG_FLUXO.AsString = 'hsNenhum') then
          acb_balanca.Device.HandShake := TACBrHandShake(1);
        if (F_DMdados.cdsConfBalCFG_FLUXO.AsString = 'hsRTS_CTS') then
          acb_balanca.Device.HandShake := TACBrHandShake(2);
        if (F_DMdados.cdsConfBalCFG_FLUXO.AsString = 'hsXON_XOFF') then
          acb_balanca.Device.HandShake := TACBrHandShake(3);
        // ---------------------------------------------------------------------------------
        if (F_DMdados.cdsConfBalCFG_PARIDADE.AsString = 'pEven') then
          acb_balanca.Device.Parity  := TACBrSerialParity(0);
        if (F_DMdados.cdsConfBalCFG_PARIDADE.AsString = 'pMark') then
          acb_balanca.Device.Parity  := TACBrSerialParity(1);
        if (F_DMdados.cdsConfBalCFG_PARIDADE.AsString = 'pNone') then
          acb_balanca.Device.Parity  := TACBrSerialParity(2);
        if (F_DMdados.cdsConfBalCFG_PARIDADE.AsString = 'pOdd') then
          acb_balanca.Device.Parity  := TACBrSerialParity(3);
        if (F_DMdados.cdsConfBalCFG_PARIDADE.AsString = 'pSpace') then
          acb_balanca.Device.Parity  := TACBrSerialParity(4);
        // ---------------------------------------------------------------------------------
        if (F_DMdados.cdsConfBalCFG_PARADA.AsString = 's1') then
          acb_balanca.Device.Stop      := TACBrSerialStop(0);
        if (F_DMdados.cdsConfBalCFG_PARADA.AsString = 's1eMeio') then
          acb_balanca.Device.Stop      := TACBrSerialStop(1);
        if (F_DMdados.cdsConfBalCFG_PARADA.AsString = 's2') then
          acb_balanca.Device.Stop      := TACBrSerialStop(2);
        // ----------------------------------------------------------------------------------
        acb_balanca.Device.Data      := F_DMdados.cdsConfBalCFG_BITDADOS.AsInteger;
        acb_balanca.Device.Baud      := F_DMdados.cdsConfBalCFG_TRANSMISSAO.AsInteger;
        acb_balanca.Intervalo        := F_DMdados.cdsConfBalCFG_INTERVALO.AsInteger;
        // ---------------------------------------------------------------------------------

        if (F_DMdados.cdsConfBalCFG_MONITORAR.AsString = 'S') then
          acb_balanca.MonitorarBalanca := True
         else
          acb_balanca.MonitorarBalanca := False;

        acb_balanca.Porta     := Trim(F_DMdados.cdsConfBalCFG_SERIAL.AsString);

        acb_Balanca.Ativar;

      

balLog

  • Fundadores
Postado

Veja no Demo do ACBECF (ECFTeste), como transformar Tipos Enumerados em Integer... (fica muito mais simples). Veja os método:GravarINI, LerINI

Também há como salvar todas as características do Device usando: ACBrECF1.Device.ParamsString

Você tem o manual que descreva o protocolo da Toledo 2180 ?

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.

  • Membros Pro
Postado

acabei de fazer um teste, tirei configuração do componente via codigo, configurei direto no componente, qto aos parametros da balança o tecnico da toledo esteve aqui de deixou configura a serial, neste teste näo foi com IP, no Hiperterminal    esta ok, feito isso no arquivo de log aparece tipo de balança, parida, e outras configuraçöes diferente aquelas que coloquei no componente, lembrando que foi direto no componente.

  • Membros Pro
Postado

Daniel, só para informar estou possando a configuração direto, esta capturando o peso só tem um problema, no display da balanca o peso esta 20900 no sistema quanto captura ele traz 2090 um zero a menos. 

nao e um peso ou outro é todos faz este corte.

este teste é com serial, amanha vou fazer teste com IP

posto o resultado.

grato.  

  • 1 mês depois ...
  • Membros Pro
Postado

Bom dia!

Daniel, desculpe a minha pressa, mas vc tem uma previsão para implementação do modelo  das balança já enviado, o que mais estou com problema e o modelo Toleto 8580 por IP o cliente que uma resposta, e näo tenho mais argumentos. só essa já resolvia um bocado de problema.

fico grato,

 

  • Este tópico foi criado há 3250 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.