Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 超级终端和C语言的区别#_C#_Serial Port - Fatal编程技术网

C# 超级终端和C语言的区别#

C# 超级终端和C语言的区别#,c#,serial-port,C#,Serial Port,我正在用C#开发一个应用程序,从串口捕获信息。我遇到的问题是,应用程序读取的信息与我从超级终端读取的信息不完全相同 我的问题是,有人有这个问题吗?我可以从我的应用程序中检查哪些属性会产生这个问题?。我想将超级终端中的端口配置复制到我的应用程序上 谢谢你的帮助 void recibir(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { Thread.Sleep(0250);

我正在用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;
        }
    }
您正在从设备读取一个字符串,然后似乎花费了大量精力将其转换回二进制。这不是很好,您需要根据SerialPort.Encoding属性将字节转换为字符。默认为ASCII,将任何大于0x7f的字节值变成问号


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

为我们提供一些代码和示例输出,让我们知道我们在处理什么?这是一个处理串口生成的事件的函数:@vissi:AFAIK C#不遵守前导的0作为八进制约定。而且
Sleep
接受毫秒。正是如此,谢谢,我删除了我的评论。谢谢你,汉斯,我现在正在将信息读入字节数组,并将其转换为二进制。现在它更容易、更精确了。
    string crudo = sptSerial.ReadExisting();