0 votos

ERROR: Referencia a objeto no establecida como instancia de un objeto.

Hola:

En este código me sale un error y no se como corregirlo, ya que me interesa mostrar datos en pantalla y no me sale.

Ver error.

Código hecho hasta ahora.

using System;

using System.IO.Ports;

namespace Almacenar_byte_puerto_serie_Consola_01 { internal class Program { static SerialPort puertoSerie; static byte[] datoRecibido; static void Main(string[] args) {

region Configuración ventana.

        // Título de la ventana.
        Console.Title = "Almacenar byte[] desde el puerto serie.";

        // Tamaño de la ventana, x, y, o ancho y alto.
        const byte ANCHO_X = 70, ALTO_Y = 25;
        Console.SetWindowSize(ANCHO_X, ALTO_Y);

        // Color de fondo.
        Console.BackgroundColor = ConsoleColor.Black;

        // Color de las letras.
        Console.ForegroundColor = ConsoleColor.Yellow;

        // Limpiar pantalla y dejarlo todo en color de fondo.
        Console.Clear();

        // Visible el cursor.
        Console.CursorVisible = true;
        #endregion

        puertoSerie = new SerialPort()
        {
            // Configuración del puerto serie.
            PortName = "COM4",           // Nombre del puerto serie.
            BaudRate = 2400,             // Velocidad en baudios.
            Parity = Parity.None,        // Esquema para comprobar la paridad de cada byte recibido.
            StopBits = StopBits.One,     // Número de bits de parada por byte.
            DataBits = 8,                // Número de bits de datos por byte.
            Handshake = Handshake.None,  // Protocolo de establecimiento.
            DtrEnable = true,            // Línea de terminal de datos.
            RtsEnable = true,            // Línea de solicitud.

            // Establecer los tiempos de espera de lectura / escritura.
            ReadTimeout = 500,           // Tiempo de espera de escritura en ms.
            WriteTimeout = 500,          // Tiempo de espera de escritura en ms.

            // Más configuraciones.
            DiscardNull = false,         // Descartar bytes nulos recibidos.
            ParityReplace = 63,          // Reemplaza los bytes recibidos con errores de paridad.
            ReadBufferSize = 4096,       // Tamaño del búfer de lectura en bytes.
            WriteBufferSize = 2018,      // Tamaño del búfer de escritura en bytes.
            ReceivedBytesThreshold = 1   // Número de bytes que se necesitan.
        };

        puertoSerie.DataReceived += SerialPort_DataReceived;
        puertoSerie.Open();

        Console.WriteLine("Presiona cualquier tecla para detener la captura...");
        Console.ReadKey();

        puertoSerie.Close();

        Console.WriteLine("Datos recibidos:");
        MostrarBytes(datoRecibido);
    }
    static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        int bytesToRead = sp.BytesToRead;
        byte[] buffer = new byte[bytesToRead];
        sp.Read(buffer, 0, bytesToRead);

        if (datoRecibido == null)
        {
            datoRecibido = buffer;
        }
        else
        {
            Array.Resize(ref datoRecibido, datoRecibido.Length + bytesToRead);
            Array.Copy(buffer, 0, datoRecibido, datoRecibido.Length - bytesToRead, bytesToRead);
        }
    }

    static void MostrarBytes(byte[] dato)
    {
        for (int i = 0; i < dato.Length; i++)
        {
            Console.Write($"{dato[i]} ");
        }
        Console.WriteLine();
    }
}

}

Se trata de obtener bytes puro y duro desde el RS232 o puerto serie, almacenarlo en un array tipo byte[] y mostrarlo en pantalla. Lenguaje C#

¿Alguna idea?

Saludos.

0voto

Jimmy Neutron Puntos 500

El error "Referencia a objeto no establecida como instancia de un objeto" ocurre porque estás tratando de acceder al array datoRecibido en la función MostrarBytes, pero este array nunca ha sido inicializado.

Para corregir este error, debes inicializar el array `datoRecibido

0 votos

MMe equivoqué. La captura es esta: [img]https://i.postimg.cc/vHpN4ZF4/ERROR.jpg[/img] [url=https://i.postimg.cc/vHpN4ZF4/ERROR.jpg]Ver zoom[/url]. Disculpen.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X