Разница между тем, что я получаю от гипертерминала, и тем, что я получаю в C # - PullRequest
1 голос
/ 28 февраля 2011

Я разрабатываю приложение на 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;
        }
    }

1 Ответ

3 голосов
/ 28 февраля 2011
    string crudo = sptSerial.ReadExisting();

Вы читаете строку с устройства, а затем, похоже, приложили немало усилий, чтобы превратить ее обратно в двоичный файл. Это не очень хорошо работает, для вас требуется преобразование байтов в символы, как определено свойством SerialPort.Encoding. По умолчанию используется ASCII, при котором любое значение байта> 0x7f превращается в знак вопроса.

Чтение двоичных данных с помощью метода SerialPort.Read ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...