Leer en inglés

Compartir vía


SerialPort Clase

Definición

Representa un recurso de puerto serie.

C#
public class SerialPort : System.ComponentModel.Component
Herencia

Ejemplos

En el ejemplo de código siguiente se muestra el uso de la SerialPort clase para permitir que dos usuarios chateen desde dos equipos independientes conectados por un cable de módem nulo. En este ejemplo, se solicita a los usuarios la configuración del puerto y un nombre de usuario antes de chatear. Ambos equipos deben ejecutar el programa para lograr una funcionalidad completa de este ejemplo.

C#
// Use this code inside a project created with the Visual C# > Windows Desktop > Console Application template.
// Replace the code in Program.cs with this code.

using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
    static bool _continue;
    static SerialPort _serialPort;

    public static void Main()
    {
        string name;
        string message;
        StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
        Thread readThread = new Thread(Read);

        // Create a new SerialPort object with default settings.
        _serialPort = new SerialPort();

        // Allow the user to set the appropriate properties.
        _serialPort.PortName = SetPortName(_serialPort.PortName);
        _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
        _serialPort.Parity = SetPortParity(_serialPort.Parity);
        _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
        _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
        _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

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

        _serialPort.Open();
        _continue = true;
        readThread.Start();

        Console.Write("Name: ");
        name = Console.ReadLine();

        Console.WriteLine("Type QUIT to exit");

        while (_continue)
        {
            message = Console.ReadLine();

            if (stringComparer.Equals("quit", message))
            {
                _continue = false;
            }
            else
            {
                _serialPort.WriteLine(
                    String.Format("<{0}>: {1}", name, message));
            }
        }

        readThread.Join();
        _serialPort.Close();
    }

    public static void Read()
    {
        while (_continue)
        {
            try
            {
                string message = _serialPort.ReadLine();
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
        }
    }

    // Display Port values and prompt user to enter a port.
    public static string SetPortName(string defaultPortName)
    {
        string portName;

        Console.WriteLine("Available Ports:");
        foreach (string s in SerialPort.GetPortNames())
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter COM port value (Default: {0}): ", defaultPortName);
        portName = Console.ReadLine();

        if (portName == "" || !(portName.ToLower()).StartsWith("com"))
        {
            portName = defaultPortName;
        }
        return portName;
    }
    // Display BaudRate values and prompt user to enter a value.
    public static int SetPortBaudRate(int defaultPortBaudRate)
    {
        string baudRate;

        Console.Write("Baud Rate(default:{0}): ", defaultPortBaudRate);
        baudRate = Console.ReadLine();

        if (baudRate == "")
        {
            baudRate = defaultPortBaudRate.ToString();
        }

        return int.Parse(baudRate);
    }

    // Display PortParity values and prompt user to enter a value.
    public static Parity SetPortParity(Parity defaultPortParity)
    {
        string parity;

        Console.WriteLine("Available Parity options:");
        foreach (string s in Enum.GetNames(typeof(Parity)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter Parity value (Default: {0}):", defaultPortParity.ToString(), true);
        parity = Console.ReadLine();

        if (parity == "")
        {
            parity = defaultPortParity.ToString();
        }

        return (Parity)Enum.Parse(typeof(Parity), parity, true);
    }
    // Display DataBits values and prompt user to enter a value.
    public static int SetPortDataBits(int defaultPortDataBits)
    {
        string dataBits;

        Console.Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits);
        dataBits = Console.ReadLine();

        if (dataBits == "")
        {
            dataBits = defaultPortDataBits.ToString();
        }

        return int.Parse(dataBits.ToUpperInvariant());
    }

    // Display StopBits values and prompt user to enter a value.
    public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
    {
        string stopBits;

        Console.WriteLine("Available StopBits options:");
        foreach (string s in Enum.GetNames(typeof(StopBits)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter StopBits value (None is not supported and \n" +
         "raises an ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString());
        stopBits = Console.ReadLine();

        if (stopBits == "" )
        {
            stopBits = defaultPortStopBits.ToString();
        }

        return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);
    }
    public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
    {
        string handshake;

        Console.WriteLine("Available Handshake options:");
        foreach (string s in Enum.GetNames(typeof(Handshake)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter Handshake value (Default: {0}):", defaultPortHandshake.ToString());
        handshake = Console.ReadLine();

        if (handshake == "")
        {
            handshake = defaultPortHandshake.ToString();
        }

        return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
    }
}

Comentarios

Use esta clase para controlar un recurso de archivo de puerto serie. Esta clase proporciona E/S sincrónica y controlada por eventos, acceso a los estados de anclaje y interrupción, y acceso a las propiedades del controlador serie. Además, la funcionalidad de esta clase se puede encapsular en un objeto interno Stream , accesible a través de la BaseStream propiedad y pasarse a clases que encapsulan o usan secuencias.

La SerialPort clase admite las siguientes codificaciones: ASCIIEncoding, UTF8Encoding, UnicodeEncoding, UTF32Encodingy cualquier codificación definida en mscorlib.dll donde la página de códigos es inferior a 50000 o la página de códigos es 54936. Puede usar codificaciones alternativas, pero debe usar el ReadByte método o Write y realizar la codificación usted mismo.

Use el GetPortNames método para recuperar los puertos válidos para el equipo actual.

Si un SerialPort objeto se bloquea durante una operación de lectura, no anule el subproceso. En su lugar, cierre la secuencia base o elimine el SerialPort objeto .

Constructores

SerialPort()

Inicializa una nueva instancia de la clase SerialPort.

SerialPort(IContainer)

Inicializa una nueva instancia de la clase SerialPort utilizando el objeto IContainer especificado.

SerialPort(String)

Inicializa una instancia nueva de la clase SerialPort utilizando el nombre de puerto especificado.

SerialPort(String, Int32)

Inicializa una instancia nueva de la clase SerialPort utilizando el nombre de puerto y la velocidad en baudios especificados.

SerialPort(String, Int32, Parity)

Inicializa una instancia nueva de la clase SerialPort utilizando el nombre del puerto, la velocidad en baudios y el bit de paridad especificados.

SerialPort(String, Int32, Parity, Int32)

Inicializa una instancia nueva de la clase SerialPort utilizando el nombre del puerto, la velocidad en baudios, el bit de paridad y los bits de datos especificados.

SerialPort(String, Int32, Parity, Int32, StopBits)

Inicializa una instancia nueva de la clase SerialPort utilizando el nombre del puerto, la velocidad en baudios, el bit de paridad, los bits de datos y el bit de parada especificados.

Campos

InfiniteTimeout

Indica que no se debe agotar el tiempo de espera.

Propiedades

BaseStream

Obtiene el objeto Stream subyacente para un objeto SerialPort.

BaudRate

Obtiene o establece la velocidad en baudios del puerto serie.

BreakState

Obtiene o establece el estado de la señal de interrupción.

BytesToRead

Obtiene el número de bytes de datos en el búfer de recepción.

BytesToWrite

Obtiene el número de bytes de datos en el búfer de envío.

CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.

(Heredado de Component)
CDHolding

Obtiene el estado de la línea de detección de portadora para el puerto.

Container

Obtiene la interfaz IContainer que contiene la clase Component.

(Heredado de Component)
CtsHolding

Obtiene el estado de la línea Listo para enviar.

DataBits

Obtiene o establece la longitud estándar de los bits de datos por byte.

DesignMode

Obtiene un valor que indica si Component está actualmente en modo de diseño.

(Heredado de Component)
DiscardNull

Obtiene o establece un valor que indica si no se tienen en cuenta los bytes nulos en las transmisiones entre el puerto y el búfer de recepción.

DsrHolding

Obtiene el estado de la señal Conjunto de datos preparado (DSR).

DtrEnable

Obtiene o establece un valor que habilita la señal Terminal de datos preparado (DTR) durante la comunicación en serie.

Encoding

Obtiene o establece la codificación de bytes para la conversión de texto previa y posterior a la transmisión.

Events

Obtiene la lista de controladores de eventos asociados a Component.

(Heredado de Component)
Handshake

Obtiene o establece el protocolo de enlace para la transmisión de datos a través del puerto serie desde Handshake.

IsOpen

Obtiene un valor que indica el estado abierto o cerrado del objeto SerialPort.

NewLine

Obtiene o establece el valor utilizado para interpretar el final de una llamada a los métodos ReadLine() y WriteLine(String).

Parity

Obtiene o establece el protocolo de comprobación de la paridad.

ParityReplace

Obtiene o establece el byte que reemplaza los bytes no válidos en una secuencia de datos cuando se produce un error de paridad.

PortName

Obtiene o establece el puerto de comunicaciones, incluidos por lo menos todos los puertos COM disponibles.

ReadBufferSize

Obtiene o establece el tamaño del búfer de entrada de SerialPort.

ReadTimeout

Obtiene o establece el número de milisegundos que transcurren antes de que se agote el tiempo de espera si una operación de lectura no finaliza.

ReceivedBytesThreshold

Obtiene o establece el número de bytes en el búfer de entrada interno antes de que ocurra un evento DataReceived.

RtsEnable

Obtiene o establece un valor que indica si la señal Solicitud de envío (RTS) está habilitada durante la comunicación en serie.

Site

Obtiene o establece ISite de Component.

(Heredado de Component)
StopBits

Obtiene o establece el número estándar de bits de parada por byte.

WriteBufferSize

Obtiene o establece el tamaño del búfer de salida del puerto serie.

WriteTimeout

Obtiene o establece el número de milisegundos que transcurren antes de que se agote el tiempo de espera si una operación de escritura no finaliza.

Métodos

Close()

Cierra la conexión del puerto, establece el valor de la propiedad IsOpen en false y elimina el objeto Stream interno.

CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
DiscardInBuffer()

Descarta los datos del búfer de recepción del controlador serie.

DiscardOutBuffer()

Descarta los datos del búfer de transmisión del controlador serie.

Dispose()

Libera todos los recursos que usa Component.

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados que usa SerialPort y, de forma opcional, libera los recursos administrados.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
GetPortNames()

Obtiene una matriz con los nombres de los puertos serie del equipo actual.

GetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.

(Heredado de MarshalByRefObject)
Open()

Abre una nueva conexión de puerto serie.

Read(Byte[], Int32, Int32)

Lee varios bytes del búfer de entrada de SerialPort y los escribe en una matriz de bytes en la posición de desplazamiento especificada.

Read(Char[], Int32, Int32)

Lee un número de caracteres del búfer de entrada de SerialPort y los escribe en una matriz de caracteres en la posición de desplazamiento especificada.

ReadByte()

Lee sincrónicamente un byte del búfer de entrada de SerialPort.

ReadChar()

Lee sincrónicamente un carácter del búfer de entrada de SerialPort.

ReadExisting()

Lee todos los bytes inmediatamente disponibles, basándose en la codificación, en la secuencia y el búfer de entrada del objeto SerialPort.

ReadLine()

Lee hasta el valor de NewLine en el búfer de entrada.

ReadTo(String)

Lee una cadena hasta el value especificado en el búfer de entrada.

ToString()

Devuelve una String que contiene el nombre del Component, si existe. Este método no se debe invalidar.

(Heredado de Component)
Write(Byte[], Int32, Int32)

Escribe un número especificado de bytes en el puerto serie utilizando los datos de un búfer.

Write(Char[], Int32, Int32)

Escribe un número especificado de caracteres en el puerto serie utilizando los datos de un búfer.

Write(String)

Escribe la cadena especificada en el puerto serie.

WriteLine(String)

Escribe la cadena especificada y el valor de NewLine en el búfer de salida.

Eventos

DataReceived

Indica que se recibieron datos a través de un puerto representado por el objeto SerialPort.

Disposed

Tiene lugar cuando una llamada elimina el componente mediante una llamada al método Dispose().

(Heredado de Component)
ErrorReceived

Indica que hubo un error en el puerto representado por el objeto SerialPort.

PinChanged

Indica que hubo un evento de señal que no es de datos en el puerto representado por el objeto SerialPort.

Se aplica a

Producto Versiones
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1