Para capturar tramas de bytes puro de un puerto serie en C#, puedes utilizar la clase SerialPort
del espacio de nombres System.IO.Ports
. Aquí te muestro un ejemplo de cómo hacerlo:
using System;
using System.IO.Ports;
public class SerialPortExample
{
static SerialPort serialPort;
static byte[] receivedData;
public static void Main()
{
serialPort = new SerialPort("COM1", 9600); // Cambia "COM1" por el puerto serie que estés utilizando y 9600 por la velocidad de baudios que corresponda
serialPort.DataReceived += SerialPort_DataReceived;
serialPort.Open();
Console.WriteLine("Presiona cualquier tecla para detener la captura...");
Console.ReadKey();
serialPort.Close();
Console.WriteLine("Datos recibidos:");
PrintBytes(receivedData);
}
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 (receivedData == null)
{
receivedData = buffer;
}
else
{
Array.Resize(ref receivedData, receivedData.Length + bytesToRead);
Array.Copy(buffer, 0, receivedData, receivedData.Length - bytesToRead, bytesToRead);
}
}
static void PrintBytes(byte[] data)
{
for (int i = 0; i < data.Length; i++)
{
Console.Write($"{data[i]} ");
}
Console.WriteLine();
}
}
En este ejemplo, se crea una instancia de SerialPort
con el nombre del puerto serie y la velocidad de baudios correspondiente. Luego, se suscribe al evento DataReceived
que se dispara cada vez que se reciben datos en el puerto serie. Dentro del evento, se lee el buffer de recepción y se almacena en la variable receivedData
. Al finalizar la captura, se muestra en consola los bytes recibidos.
Recuerda cambiar "COM1" por el puerto serie que estés utilizando y 9600 por la velocidad de baudios correcta para tu caso.