none
Porta Serial - Balança Toledo RRS feed

  • Pergunta

  • Ola!
    Pessoal, estou com uma situação meio estranha em relação ao acesso a porta serial, sendo mais direto ao buscar o peso de uma balança toledo 8217.
    Quando eu busco o peso me vem o retorno da balança com o peso, mas o retorno(peso) está vindo com alguns caracteres no meio desse peso.
    Exemplo num peso de 0,970 Kg  o retorno deve ser 00970, mas está retornando 009?0.
    Testando com outro programa de leitura da porta serial (Hércules) detectei o seguinte:
    1º Fazendo um teste com o programa Hércules de inicio, funciona, vem certo a leitura do peso 00970.
    2º Fazendo o teste com meu programa vem o peso errado, 009?0.
    3º Retorno a usar o programa Hércules também fica errado, 009?0.

    Testando várias situações, descobri que quando uso o meu sistema, setando qualquer tipo de paridade diferente de none, no caso para a comunicação com a balança é a paridade Even(Par) na porta serial pelo meu programa causa esse "erro" gerando o retorno com caracteres no peso.

    E até mesmo voltando a usar o programa Hércules fica com erro, só volta a funcionar após setar a paridade para none abrir uma conexão e setar novamente para Even, dai o programa Hércules volta a ler certo.

    Estranho, mas não sei mais o que fazer, se alguém tiver alguma ideia....

     


    • Editado Benhur sexta-feira, 27 de julho de 2018 14:47
    sexta-feira, 27 de julho de 2018 14:43

Todas as Respostas

  • Boa tarde. Tudo bem?

    Obrigado por usar o fórum MSDN.

    Conseguiu algum avanço no teu caso? Se ainda não, o que falta?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 3 de agosto de 2018 20:43
    Moderador
  • Ola Filipe!

    Tudo bom, ainda está parada a situação,
    O que será feito(quando o técnico puder) e ser alterada a configuração na balança para a paridade ficar em none, dai retornarei a testar.

    Abraço
    sexta-feira, 3 de agosto de 2018 21:12
  • Boa noite.

    Por gentileza, poste o trecho do código que faz a leitura.


    MARIANO1776

    sábado, 4 de agosto de 2018 21:08
  • Ola mariano!

    Como mencionou, segue o código

     private void btnCapturaPeso_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen == true)
                    serialPort1.Close();

                Configuracoes();

                serialPort1.Open();

                if (chkAscii.Checked == false)
                {
                    serialPort1.Write("ENQ");
                }
                else
                {
                    char Inicio = (char)5;
                    serialPort1.Write(Inicio.ToString());
                }

                lblLog.Text = "Comando Enviado";
               //Após envio do comando a balanca envia peso a porta que ativa o serialPort1_DataReceived

            }


      private void Configuracoes()
            {

                //padrao
                //1 Stop Bit;
                //8 Bit de dados;
                //Sem paridade;


                serialPort1.PortName = txtCOM.Text.ToString ();
                serialPort1.BaudRate = Convert.ToInt32(txtVelocidade.Text);
                serialPort1.DataBits = Convert.ToInt32(txtDatabits.Text);

                //Paridade
                string paridade = drlParidade.SelectedItem.ToString();
                paridade = paridade.Substring(0, 1);
                if (paridade == "0")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.None;
                }
                else if (paridade == "1")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.Odd;
                }
                else if (paridade == "2")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.Even;
                }
                else if (paridade == "3")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.Mark;
                }
                else if (paridade == "4")
                {
                    serialPort1.Parity = System.IO.Ports.Parity.Space;
                }



                //Handshake
                if (Convert.ToInt32(txtFluxo.Text) == 0)
                    serialPort1.Handshake = System.IO.Ports.Handshake.None;
                else if (Convert.ToInt32(txtFluxo.Text) == 1)
                    serialPort1.Handshake = System.IO.Ports.Handshake.XOnXOff;
                else if (Convert.ToInt32(txtFluxo.Text) == 2)
                    serialPort1.Handshake = System.IO.Ports.Handshake.RequestToSend;
                else if (Convert.ToInt32(txtFluxo.Text) == 3)
                    serialPort1.Handshake = System.IO.Ports.Handshake.RequestToSendXOnXOff;

                //stop bits
                if (Convert.ToDecimal(txtStopBits.Text) == 1)
                    serialPort1.StopBits = System.IO.Ports.StopBits.One;
                else if (Convert.ToDecimal(txtStopBits.Text) == (decimal)1.5)
                    serialPort1.StopBits = System.IO.Ports.StopBits.OnePointFive;
                else if (Convert.ToDecimal(txtStopBits.Text) == 2)
                    serialPort1.StopBits = System.IO.Ports.StopBits.Two;

                serialPort1.DtrEnable = chkDTR.Checked;
                serialPort1.RtsEnable = chkRTS.Checked;

                if (!String.IsNullOrEmpty(txtTimeOut.Text))
                {
                    serialPort1.ReadTimeout = Convert.ToInt32(txtTimeOut.Text);
                    serialPort1.WriteTimeout = Convert.ToInt32(txtTimeOut.Text);
                }
                else
                {
                    serialPort1.ReadTimeout = -1;
                    serialPort1.WriteTimeout = -1;
                }

            }

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {

                lblLog.Text = "Ativou Porta";

                //Verifica o valor recebido 
                string texto = serialPort1.ReadExisting();

                 texto = texto.Replace(Convert.ToString((char)(2)), "");
                 texto = texto.Replace(Convert.ToString((char)(3)), "");
                 texto = RetornaNumero(texto);

                 Decimal.TryParse(texto, out PesoBalanca);
                 
                 this.Invoke(new EventHandler(DisplayPesoBalancaText));
              
            }

              
    segunda-feira, 6 de agosto de 2018 11:48
  • Tente assim:

    private void Form1_Load(object sender, EventArgs e)
            {
    SerialPort1.Encoding = System.Text.Encoding.GetEncoding(1252)
            }


    MARIANO1776

    segunda-feira, 6 de agosto de 2018 15:12
  • Assim que possível, vou testar seu exemplo.

    Já havia testado da seguinte maneira
    System.Text.Encoding iso_8859_1 = System.Text.Encoding.GetEncoding("ISO-8859-1");
    serialPort1.Encoding = iso_8859_1;

    Abraço
    segunda-feira, 6 de agosto de 2018 16:50
  • Só para dar retorno,
    Está opção também não deu certo, continua retornando errado o peso.
    Mas valeu pela tentativa.
    terça-feira, 7 de agosto de 2018 17:52