Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Contar las tramas de byte recibidas

Estas en el tema de Contar las tramas de byte recibidas en el foro de .NET en Foros del Web. Hola: En el puerto serie me llegan datos en C#. Quiero que muestre en pantalla comocuenta cada byte recibido. No logro como se hace. Se ...
  #1 (permalink)  
Antiguo 02/01/2017, 04:15
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Contar las tramas de byte recibidas

Hola:

En el puerto serie me llegan datos en C#. Quiero que muestre en pantalla comocuenta cada byte recibido.

No logro como se hace. Se que la cantidad para leer un array como este ejemplo.
Código:
static byte[] variable = {0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46};
Código:
Console.WriteLine("Cantidad: {0} bytes.", variable.Length);
Así si.

Cada datos de byte que recibo se guarda en una variable llamdo String Recibidos = "";

Ya lo tengo en mi poder, lo que no se como se cuenta con un contador por cada byte que reciba y se muestre como cuente, se que la velocidad es la leche pero sa igual.

Saludos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 02/01/2017, 05:45
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

No has probado algo así?

Código:
contador += recibidos.Length;
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 03/01/2017, 05:51
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

Lee como 0 todo el rato.

El código que hice es este.
Código:
using System;
using System.IO;
using System.IO.Ports;
using System.Text;

namespace Recibir_archivo_desde_Arduino_consola
{
    class Program
    {
        public static string Recibidos = "";
        //public static byte[] datosArray = Encoding.ASCII.GetBytes(Recibidos);
        public static byte[] datosArray = Encoding.ASCII.GetBytes(Recibidos);

        static void Main(string[] args)
        {
            string COM = "";

            // Tamaño ventana consola.
            Console.WindowWidth = 55; // X. Ancho.
            Console.WindowHeight = 15; // Y. Alto.
            Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro"; // Título de la ventana.

            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
            SerialPort Puerto_serie = new SerialPort();

            // Configuración.
            Console.Write(@"
Introduzca un número para seleccionar puerto COM.
Por ejemplo el 4, sería COM4.

Puerto: ");
            COM = Console.ReadLine(); // Escribir el número del puerto.
            Console.Clear();

            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.


            Puerto_serie.BaudRate = 115200; // Baudios.
            Puerto_serie.Parity = Parity.None; // Paridad.
            Puerto_serie.DataBits = 8; // Bits de datos.
            Puerto_serie.StopBits = StopBits.Two; // Bits de parada.
            Puerto_serie.Handshake = Handshake.None; // Control de flujo.

            // Establecer la lectura / escritura de los tiempos de espera.
            Puerto_serie.ReadTimeout = 500;
            Puerto_serie.WriteTimeout = 500;

            try
            {
                Puerto_serie.Open(); // Abrir el puerto serie.
            }

            catch (IOException)
            {
                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
                Console.CursorVisible = false;
                Console.SetCursorPosition(16, 6);
                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
                o no lo encuentra.");
            }

            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            
            Console.Read();
            Puerto_serie.Close(); // Cerrar puerto.
        }

        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)

        {
            SerialPort sp = (SerialPort)sender;
            //int ByteLeidos = sp.Read(datosArray, 0, 28256);
           string  contador = "";
            contador += Recibidos.Length;

            Console.WriteLine(contador);
Recibe por el puerto serie siempre en hexadecimal sin codificar, es decir, binaros pero se leen como hex, dejo esto claro por si acaso.
¿Alguna ayuda?

Saludos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #4 (permalink)  
Antiguo 03/01/2017, 09:00
Avatar de Drako_18  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 505
Antigüedad: 19 años, 6 meses
Puntos: 16
Respuesta: Contar las tramas de byte recibidas

Buenas compañero,

No guardas nada en la variable... Jamás... Por eso siempre te devuelve 0 con la solución que te dio Malenko.


Un saludo!!!
__________________
Rubén Espada
Desarrollador full stack .Net (Angular + JS + .Net Core)
  #5 (permalink)  
Antiguo 03/01/2017, 09:36
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

Dejando aparte el tema que ya te han comentado de que no le asignas el valor a la variable, te dejo una lista de cosas que tendrías que revisar de tu código:

- El nombre de las variables (algunas todo en mayúsculas, otras con una barra baja,...) no siguen el estándar recomendado (CamelCase para variables).

- Vigilas que el Open del puerto serie no te genere una excepción de tipo IOException y sin examinar el motivo, directamente devuelves un mensaje de que el puerto no existe, lo cual no tiene porque ser siempre cierto.

- La llamada a Open puede generar 5 tipos de excepciones específicas y tu solo estás controlando una de ellas (y mal)

- La llamada a Close también puede generar excepción y no está siendo controlada.

- Tampoco se están controlando las excepciones del Read (y estas son más importantes si cabe).


Por último y más importante, si te lees la documentación (cosa que te recomendaría), la llamada a Read devuelve el número de caracteres leídos. No tiene sentido calcular la longitud de nada para ver cuanto se ha leído cuando la misma función ya te lo devuelve.
__________________
Aviso: No se resuelven dudas por MP!
  #6 (permalink)  
Antiguo 03/01/2017, 11:43
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

Buenas:

Estoy en ello.

Si, lo de las buenas prácticas.

El código no estábien, estoy intentado hacerlo funcionar como es debido.
Lo de los try cath esas cosas las suelo dejar para el final, ya que me quiero primero centrar en su funcionamiento final, luego se pule con lo que cuentas. Si lo hago primero, es porque me da la tabarra.

Lo de Read() lo he estado viendo no me sale mucho.

Sigo investigando...

Gracias de todas formas. ;)
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #7 (permalink)  
Antiguo 04/01/2017, 01:16
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

Cita:
Iniciado por REHome Ver Mensaje
El código no estábien, estoy intentado hacerlo funcionar como es debido.
Lo de los try cath esas cosas las suelo dejar para el final, ya que me quiero primero centrar en su funcionamiento final, luego se pule con lo que cuentas. Si lo hago primero, es porque me da la tabarra.
Cuando se programa se ha de hacer bien de entrada. No es buena idea programar de cualquier manera y "ya lo solucionaré luego", sino hacerlo bien de entrada que no cuesta tanto y te evitas tener que hacer las cosas varias veces. Es más, así te evitarías muchos errores que tienes en los códigos que publicas en el foro.

Cita:
Iniciado por REHome Ver Mensaje
Lo de Read() lo he estado viendo no me sale mucho.
Puedes explicar el "no me sale mucho"? Has probado a mostrar por pantalla el valor que te devuelve la función y el contenido del buffer que ha rellenado con los datos leídos? Si no te funciona nunca vas a saber porque ya que, aunque ves que no funciona, no ves importante capturar las excepciones...
__________________
Aviso: No se resuelven dudas por MP!
  #8 (permalink)  
Antiguo 04/01/2017, 07:22
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

Buenos días a todos y a todas:

Mirando un código mejor que el mio en este enlace
, en el cual tiene este código.

Código:
using System;
using System.IO.Ports;

class PortDataReceived
{
    public static void Main()
    {
        SerialPort mySerialPort = new SerialPort("COM1");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.RtsEnable = true;

        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

        mySerialPort.Open();

        Console.WriteLine("Press any key to continue...");
        Console.WriteLine();
        Console.ReadKey();
        mySerialPort.Close();
    }

    private static void DataReceivedHandler(
                        object sender,
                        SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Console.WriteLine("Data Received:");
        Console.Write(indata);
    }
}
Para empezar con código de lo más básico y limpio uso el de arriba y no nos volvemos locos.

Abajo con este código hay que usar este:
Código:
        private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string indata = sp.Read();
            Console.WriteLine("Dato recibido:");
            Console.Write(indata);
        }
Sustituyendo ReadExisting(); por Read();


Me interesa contar los datos que vienen desde el puerto serie. No se manejar el Read(). A parte de contar los bytes recibidos en Hexadecimal, que se almacene en memoria en un array de byte[].

Cuando tenga los bytes recibidos en memoria y bien contados que lo muestre en la consola. Esos datos los quiero pasar al disco duro y se hace con esto.

Ecribir archivo en disco.

Código:
File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
Luego si acto seguido, pues ejecutarlo con.

Código:
Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
Eso es todo lo que quierlo lograr y llevo timepo sin llevarme una rosca.

¿Cómo se hace?

Saludos a todos y a todas, que lo pasen bien a los largo del 2017. ;)
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #9 (permalink)  
Antiguo 04/01/2017, 07:30
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

Ahora has puesto un código que te lee el puerto serie y te almacena lo que exista (o pueda leer) en una cadena de texto.

Entiendo que, con lo comentado anteriormente en este hilo, ya está solucionado el problema de contar lo leído?
__________________
Aviso: No se resuelven dudas por MP!
  #10 (permalink)  
Antiguo 04/01/2017, 08:23
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

Buenas:

Antes debo solucionar lo de Read().
Código C:
Ver original
  1. private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
  2.         {
  3.             SerialPort sp = (SerialPort)sender;
  4.             int indata = sp.Read();
  5.             Console.WriteLine("Dato recibido:");
  6.             Console.Write(indata);
  7.         }

Gravedad Código Descripción Proyecto Archivo Línea
Error CS1501 Ninguna sobrecarga para el método 'Read' toma 0 argumentos Puerto_Serie_Rread_consola c:\users\usuario\documents\visual studio 2015\Projects\Puerto_Serie_Rread_consola\Puerto_Se rie_Rread_consola\Program.cs 39


Intentando hacer esto.
Código:
using System;
using System.IO.Ports; // No olvidar.
using System.Text;

namespace Puerto_Serie_Rread_consola
{
    class Program
    {
        public static string Recibidos = "";
        public static byte[] datosArray = Encoding.ASCII.GetBytes(Recibidos);

        static void Main(string[] args)
        {
            SerialPort mySerialPort = new SerialPort("COM4");

            mySerialPort.BaudRate = 115200;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.Two;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None;
            mySerialPort.RtsEnable = true;

            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            mySerialPort.Open();

            Console.WriteLine("Presione cualquier tecla para continuar...");
            Console.WriteLine();
            Console.ReadKey();
            mySerialPort.Close();
        }

        private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                SerialPort sp = (SerialPort)sender;
                int indata = sp.Read(datosArray, 0, 1000);
                Console.WriteLine("Dato recibido:");
                Console.Write(indata);
            }

            catch (ArgumentException)
            {
                Console.WriteLine("El desplazamiento y la longitud están fuera de los límites para esta matriz o el recuento es superior al número de elementos desde el índice al final de la colección de origen.");
            }
        }
    }
}
Algo se me escapa.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #11 (permalink)  
Antiguo 04/01/2017, 08:42
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

El código que has copiado es exactamente el mismo que te ha dado el error? Porque la línea 39 es esta:

Código:
Console.WriteLine("Dato recibido:");
__________________
Aviso: No se resuelven dudas por MP!
  #12 (permalink)  
Antiguo 04/01/2017, 09:03
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

En otra manera. ;)

Código:
using System;
using System.IO;
using System.IO.Ports; // No olvidar.

namespace Puerto_Serie_Rread_consola
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort mySerialPort = new SerialPort("COM4");

            mySerialPort.BaudRate = 115200;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.Two;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None;
            mySerialPort.RtsEnable = true;

            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            mySerialPort.Open();

            Console.WriteLine("Presione cualquier tecla para continuar...");
            Console.WriteLine();
            Console.ReadKey();
            mySerialPort.Close();
        }

        private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            int count = 0;
            var datosArray = new byte[30000];
            while (count < datosArray.Length)
            {
                try
                {
                    count += sp.Read(datosArray, count, datosArray.Length - count);
                    Console.WriteLine("Dato recibido:");
                    Console.Write(count);
                }
                catch (TimeoutException)
                {
                    //maybe increase ReadTimeout or something, use exponential backoff, your call
                }
            }

            File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
            Console.WriteLine(datosArray.ToString());
        }
    }
}
Salida de la consola los últimos datos.
Cita:
28060Dato recibido:
28061Dato recibido:
28108Dato recibido:
28109Dato recibido:
28157Dato recibido:
28158Dato recibido:
28205Dato recibido:
28206Dato recibido:
28253Dato recibido:
28254Dato recibido:
28256
Acaba bien los 28256 como dato máximo. Si te fijas, se saltan números. Tiene que llegar de 0 al 28256. No se si es un fallo o algo raro.

A parte de esto, no me crea el archivo al final.
Código:
File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #13 (permalink)  
Antiguo 04/01/2017, 09:09
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

Creo que me falta algo de información. Según lo que dices ha de llegar de 0 a 28256 y según tus trazas llega a ese valor. Según eso no veo ningún problema.
__________________
Aviso: No se resuelven dudas por MP!
  #14 (permalink)  
Antiguo 04/01/2017, 09:26
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

Buenos días buen hombre:

Por fin me creó el archivo al disco duro y bien. ;)

Código:
using System;
using System.IO;
using System.IO.Ports; // No olvidar.

namespace Puerto_Serie_Rread_consola
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort mySerialPort = new SerialPort("COM4");

            mySerialPort.BaudRate = 115200;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.Two;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None;
            mySerialPort.RtsEnable = true;

            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

            mySerialPort.Open();

            Console.WriteLine("Presione cualquier tecla para continuar...");
            Console.WriteLine();
            Console.ReadKey();
            mySerialPort.Close();
        }

        private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            int count = 0;
            byte[] datosArray = new byte[30000];
            while (count < datosArray.Length)
            {
                try
                {
                    count += sp.Read(datosArray, count, datosArray.Length - count);
                    Console.WriteLine("Dato recibido:");
                    Console.Write(count);

                    if (count == 28256)
                    {
                        File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
                    }
                }
                catch (TimeoutException)
                {
                    //maybe increase ReadTimeout or something, use exponential backoff, your call
                }
            }
        }
    }
}
Algo que quiero saber. Tengo que poner aproximado los bytes a recibir. ¿Y si no se los que vienen?
¿Qué hago para no preocuparme de eso?
Saludos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #15 (permalink)  
Antiguo 04/01/2017, 10:33
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

Tendrás que construirte un mini protocolo para enviar los datos en paquetes, de la misma forma que se envían las páginas web en paquetes TCP.
__________________
Aviso: No se resuelven dudas por MP!
  #16 (permalink)  
Antiguo 04/01/2017, 10:47
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

Hola:

¿Construir un protocolo habiendo uno hecho como el RS232?

Saludos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #17 (permalink)  
Antiguo 04/01/2017, 11:11
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Contar las tramas de byte recibidas

Cita:
Iniciado por REHome Ver Mensaje
Hola:

¿Construir un protocolo habiendo uno hecho como el RS232?

Saludos.
Son dos cosas diferentes. RS232 es un protocolo más a nivel físico, como podría ser el RJ45. En cambio el protocolo TCP está por encima en la modelo OSI (que diría que no tienes muy claro) y le da significado a los 1 y 0 que se retransmiten.

Te recomiendo investigar un poco sobre el tema ;)
__________________
Aviso: No se resuelven dudas por MP!
  #18 (permalink)  
Antiguo 04/01/2017, 23:03
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 729
Antigüedad: 17 años, 5 meses
Puntos: 8
Respuesta: Contar las tramas de byte recibidas

Gracias por los consejos.

Siempre aprendo cosas nuevas. Creo que hablas sistemas decodificaciçon, ASCII, UFT-8 por nombrar algunos.

Haciendo pruebas con el código de arriba puse en la varible de este código 30000 porque se que me llegan 28256.
Código:
byte[] datosArray = new byte[30000];
Si pongo por poner un ejemplo:
Código:
byte[] datosArray = new byte[99999999999];
Me dice: La operación aritmética ha provocado un desbordamiento. Por lo que veo, no puedo poner la cantidad de byte en el array que me de la gana, está limitado y no puedo hacer nada.

De una manera o de otra, la foto creada tiene 30000 tal cual tiene el array. Al examinar la foto, tiene el resto de byte 0 que es normal. A pesar de ello tiene más peso y no me interesa. En otra prueba llegué tener la foto minado de 0 un todal de unas 9 MB para el fisco de foto que sen realidad, 28256 Bytes. Se supone que no debo saber cuantos bytes me van a venir, si me viene 28256 pues que cree el archivo con 28256 y no toda el array que le aclaré el principio solo para que me quepa.

Debe haber alguna forma que me reste 30000 que tengo en el array y lo pase a 28256 que son los bytes recibidos. Si recibo 10 bytes pues que cree una foto de 10 bytes, es un ejemplo tonto para que se entienda.

Ejemplo no acabado por ahora es este:
Código:
using System;
using System.IO;
using System.IO.Ports; // No olvidar.

namespace Puerto_Serie_Rread_consola
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort mySerialPort = new SerialPort("COM4");

            mySerialPort.BaudRate = 115200;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.Two;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None;
            mySerialPort.RtsEnable = true;

            // Set the read/write timeouts
            mySerialPort.ReadTimeout = 500;
            mySerialPort.WriteTimeout = 500;

            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);



            mySerialPort.Open();

            Console.WriteLine("Presione cualquier tecla para continuar...");
            Console.WriteLine();
            mySerialPort.DiscardInBuffer(); // Limpiar buffer de entrada.
            Console.ReadKey();
            mySerialPort.Close();
        }

        private static void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                SerialPort sp = (SerialPort)sender;
                int contador = 0;
                byte[] datosArray = new byte[300000];

                while (contador < datosArray.Length)
                {
                    contador += sp.Read(datosArray, contador, datosArray.Length - contador);
                    Console.SetCursorPosition(10, 2);
                    Console.Write("Dato recibido:  {0}", contador);
                    Console.WriteLine("                   ");

                    if (contador == 28256)
                    {
                        File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
                                                                     //Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
                    }
                }
            }

            catch (TimeoutException)
            {
                //maybe increase ReadTimeout or something, use exponential backoff, your call.
                //Console.WriteLine("Fuera de tiempo.");
                //Console.WriteLine(datosArray.Length);
            }

            catch (OverflowException)
            {
                Console.WriteLine("La operación aritmética ha provocado un desbordamiento.");
            }

            catch (InvalidOperationException)
            {
                Console.WriteLine("El puerto está cerrado.");
            }

            catch (IOException)
            {
                Console.WriteLine("La operación de E/S se anuló por una salida de subproceso o por una solicitud de aplicación.");
            }
        }
    }
}
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar

Etiquetas: byte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:08.