我从超级终端获得的内容与在 C# 中获得的内容之间的区别

发布于 2024-10-19 17:18:28 字数 3528 浏览 1 评论 0原文

我正在用 C# 开发一个应用程序来捕获来自串行端口的信息。我遇到的问题是应用程序读取的信息与我从超级终端读取的信息不完全相同。

我的问题是,有人遇到这个问题吗?我可以从我的应用程序中检查哪些属性可能会产生这个问题?我想将超级终端中的端口配置复制到我的应用程序中。

感谢您的帮助。

    void recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(0250);
        string crudo = sptSerial.ReadExisting();
        if (crudo.Equals("\0\0\0\0\0\0\0\0"))
        {
            MessageBox.Show("ERROR DE LECTURA","Control Toyota",MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        else
        {
            string binario = "";
            string binarioFinal = "";
            string binarioProcesado = "";
            int numero = 0;
            string info = convertAsciiTextToHex(crudo);
            binario = hex2binary(info);
            binarioProcesado = completarPaquete(binario);
            //binarioFinal = binarioProcesado.Substring(10, 16);
            if (flagCompletado == 1)
            {
                binarioFinal = binarioProcesado.Substring(5);
            }
            else
            {
                if (binarioProcesado.Length > 20)
                {
                    binarioFinal = binarioProcesado.Substring(5);
                }
                else
                {
                    binarioFinal = binarioProcesado.Substring(4);
                }
            }

            numero = ToDecimal(binarioFinal);
            csTarjeta tarjeta = new csTarjeta();
            string x = "";
            string y = "";
            try
            {
                tarjeta = csMTRSerial.armarPersona(numero);
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR COMUNICANDO CON LA BASE DE DATOS\n" + ex.Message);
            }
            try
            {
                tarjeta.sUbicacion = csMTRSerial.devolverPosicion();
                x = tarjeta.sUbicacion.Substring(11, 10);
                x = x.Replace(",", ".");
                y = tarjeta.sUbicacion.Substring(0, 10);
                y = y.Replace(",", ".");
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR COMUNICANDO CON EL GPS\n" + ex.Message);
            }

            if (tarjeta.sValido == 1)
            {
                lblAviso.Text = "";
                lblNombre.Text = "Nombre: " + tarjeta.sNombre;
                //lblApellido.Text = "Apellido: " + tarjeta.sApellido;
                lblNroTarjeta.Text = "Nro. de Tarjeta: " + tarjeta.sNroTarjeta.ToString();

                MemoryStream stream = new MemoryStream(tarjeta.sFoto);
                picFoto.Visible = true;
                picFoto.Image = Image.FromStream(stream);
                stream.Dispose();
                stream.Close();
                lblAviso.BackColor = Color.Green;
                lblAviso.Text = "TARJETA VALIDA";
                lblAviso.ForeColor = Color.Black;


            }
            else
            {
                lblNombre.Text = "";
                lblNroTarjeta.Text = "";
                picFoto.Visible = false;
                lblAviso.BackColor = Color.Red;
                lblAviso.Text = "TARJETA NO VALIDA";
                lblAviso.ForeColor = Color.White;
            }
            csRuta ruta = new csRuta();
            ruta.sID = idRuta;
            ruta.sNombre = nombreRecorrido;
            csMTRSerial.insertarFichada(tarjeta.sNroTarjeta, tarjeta.sNombre, tarjeta.sValido, x, y, nombreRecorrido);
            flagCompletado = 0;
        }
    }

I'm developing an application in C# to capture info from the serial port. The problem that I have is that the application is not reading exactly the same information that I'm reading from the hyperterminal.

My question is, has anyone have this problem?, what properties can II check from my app that can be generating this problem?. I want to make a copy of the port configuration that I have in the hyperterminal, onto my application.

Thanks you for your help.

    void recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(0250);
        string crudo = sptSerial.ReadExisting();
        if (crudo.Equals("\0\0\0\0\0\0\0\0"))
        {
            MessageBox.Show("ERROR DE LECTURA","Control Toyota",MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        else
        {
            string binario = "";
            string binarioFinal = "";
            string binarioProcesado = "";
            int numero = 0;
            string info = convertAsciiTextToHex(crudo);
            binario = hex2binary(info);
            binarioProcesado = completarPaquete(binario);
            //binarioFinal = binarioProcesado.Substring(10, 16);
            if (flagCompletado == 1)
            {
                binarioFinal = binarioProcesado.Substring(5);
            }
            else
            {
                if (binarioProcesado.Length > 20)
                {
                    binarioFinal = binarioProcesado.Substring(5);
                }
                else
                {
                    binarioFinal = binarioProcesado.Substring(4);
                }
            }

            numero = ToDecimal(binarioFinal);
            csTarjeta tarjeta = new csTarjeta();
            string x = "";
            string y = "";
            try
            {
                tarjeta = csMTRSerial.armarPersona(numero);
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR COMUNICANDO CON LA BASE DE DATOS\n" + ex.Message);
            }
            try
            {
                tarjeta.sUbicacion = csMTRSerial.devolverPosicion();
                x = tarjeta.sUbicacion.Substring(11, 10);
                x = x.Replace(",", ".");
                y = tarjeta.sUbicacion.Substring(0, 10);
                y = y.Replace(",", ".");
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR COMUNICANDO CON EL GPS\n" + ex.Message);
            }

            if (tarjeta.sValido == 1)
            {
                lblAviso.Text = "";
                lblNombre.Text = "Nombre: " + tarjeta.sNombre;
                //lblApellido.Text = "Apellido: " + tarjeta.sApellido;
                lblNroTarjeta.Text = "Nro. de Tarjeta: " + tarjeta.sNroTarjeta.ToString();

                MemoryStream stream = new MemoryStream(tarjeta.sFoto);
                picFoto.Visible = true;
                picFoto.Image = Image.FromStream(stream);
                stream.Dispose();
                stream.Close();
                lblAviso.BackColor = Color.Green;
                lblAviso.Text = "TARJETA VALIDA";
                lblAviso.ForeColor = Color.Black;


            }
            else
            {
                lblNombre.Text = "";
                lblNroTarjeta.Text = "";
                picFoto.Visible = false;
                lblAviso.BackColor = Color.Red;
                lblAviso.Text = "TARJETA NO VALIDA";
                lblAviso.ForeColor = Color.White;
            }
            csRuta ruta = new csRuta();
            ruta.sID = idRuta;
            ruta.sNombre = nombreRecorrido;
            csMTRSerial.insertarFichada(tarjeta.sNroTarjeta, tarjeta.sNombre, tarjeta.sValido, x, y, nombreRecorrido);
            flagCompletado = 0;
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘿嘿嘿 2024-10-26 17:18:28
    string crudo = sptSerial.ReadExisting();

您正在从设备读取一个字符串,然后似乎付出了很大的努力将其转回二进制。这效果不太好,您需要将字节转换为字符,这由 SerialPort.Encoding 属性确定。默认为 ASCII,转任意字节值 > 0x7f 改为问号。

使用 SerialPort.Read() 方法读取二进制数据。

    string crudo = sptSerial.ReadExisting();

You are reading a string from the device, then seem to make a lot of effort to turn that back into binary. This doesn't work well, you are for one subject to the conversion of bytes to characters as determined by the SerialPort.Encoding property. Which defaults to ASCII, turning any byte value > 0x7f to a question mark.

Read binary data with the SerialPort.Read() method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文