SerialPort Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un recurso de puerto serie.
public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
inherit Component
Public Class SerialPort
Inherits 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.
#using <System.dll>
using namespace System;
using namespace System::IO::Ports;
using namespace System::Threading;
public ref class PortChat
{
private:
static bool _continue;
static SerialPort^ _serialPort;
public:
static void Main()
{
String^ name;
String^ message;
StringComparer^ stringComparer = StringComparer::OrdinalIgnoreCase;
Thread^ readThread = gcnew Thread(gcnew ThreadStart(PortChat::Read));
// Create a new SerialPort object with default settings.
_serialPort = gcnew 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();
}
static void Read()
{
while (_continue)
{
try
{
String^ message = _serialPort->ReadLine();
Console::WriteLine(message);
}
catch (TimeoutException ^) { }
}
}
static String^ SetPortName(String^ defaultPortName)
{
String^ portName;
Console::WriteLine("Available Ports:");
for each (String^ s in SerialPort::GetPortNames())
{
Console::WriteLine(" {0}", s);
}
Console::Write("Enter COM port value (Default: {0}): ", defaultPortName);
portName = Console::ReadLine();
if (portName == "")
{
portName = defaultPortName;
}
return portName;
}
static Int32 SetPortBaudRate(Int32 defaultPortBaudRate)
{
String^ baudRate;
Console::Write("Baud Rate(default:{0}): ", defaultPortBaudRate);
baudRate = Console::ReadLine();
if (baudRate == "")
{
baudRate = defaultPortBaudRate.ToString();
}
return Int32::Parse(baudRate);
}
static Parity SetPortParity(Parity defaultPortParity)
{
String^ parity;
Console::WriteLine("Available Parity options:");
for each (String^ s in Enum::GetNames(Parity::typeid))
{
Console::WriteLine(" {0}", s);
}
Console::Write("Enter Parity value (Default: {0}):", defaultPortParity.ToString());
parity = Console::ReadLine();
if (parity == "")
{
parity = defaultPortParity.ToString();
}
return (Parity)Enum::Parse(Parity::typeid, parity);
}
static Int32 SetPortDataBits(Int32 defaultPortDataBits)
{
String^ dataBits;
Console::Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits);
dataBits = Console::ReadLine();
if (dataBits == "")
{
dataBits = defaultPortDataBits.ToString();
}
return Int32::Parse(dataBits);
}
static StopBits SetPortStopBits(StopBits defaultPortStopBits)
{
String^ stopBits;
Console::WriteLine("Available Stop Bits options:");
for each (String^ s in Enum::GetNames(StopBits::typeid))
{
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(StopBits::typeid, stopBits);
}
static Handshake SetPortHandshake(Handshake defaultPortHandshake)
{
String^ handshake;
Console::WriteLine("Available Handshake options:");
for each (String^ s in Enum::GetNames(Handshake::typeid))
{
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(Handshake::typeid, handshake);
}
};
int main()
{
PortChat::Main();
}
// 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);
}
}
' Use this code inside a project created with the Visual Basic > Windows Desktop > Console Application template.
' Replace the default code in Module1.vb with this code. Then right click the project in Solution Explorer,
' select Properties, and set the Startup Object to PortChat.
Imports System.IO.Ports
Imports System.Threading
Public Class PortChat
Shared _continue As Boolean
Shared _serialPort As SerialPort
Public Shared Sub Main()
Dim name As String
Dim message As String
Dim stringComparer__1 As StringComparer = StringComparer.OrdinalIgnoreCase
Dim readThread As New Thread(AddressOf 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__1.Equals("quit", message) Then
_continue = False
Else
_serialPort.WriteLine([String].Format("<{0}>: {1}", name, message))
End If
End While
readThread.Join()
_serialPort.Close()
End Sub
Public Shared Sub Read()
While _continue
Try
Dim message As String = _serialPort.ReadLine()
Console.WriteLine(message)
Catch generatedExceptionName As TimeoutException
End Try
End While
End Sub
' Display Port values and prompt user to enter a port.
Public Shared Function SetPortName(defaultPortName As String) As String
Dim portName As String
Console.WriteLine("Available Ports:")
For Each s As String In SerialPort.GetPortNames()
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter COM port value (Default: {0}): ", defaultPortName)
portName = Console.ReadLine()
If portName = "" OrElse Not (portName.ToLower()).StartsWith("com") Then
portName = defaultPortName
End If
Return portName
End Function
' Display BaudRate values and prompt user to enter a value.
Public Shared Function SetPortBaudRate(defaultPortBaudRate As Integer) As Integer
Dim baudRate As String
Console.Write("Baud Rate(default:{0}): ", defaultPortBaudRate)
baudRate = Console.ReadLine()
If baudRate = "" Then
baudRate = defaultPortBaudRate.ToString()
End If
Return Integer.Parse(baudRate)
End Function
' Display PortParity values and prompt user to enter a value.
Public Shared Function SetPortParity(defaultPortParity As Parity) As Parity
Dim parity As String
Console.WriteLine("Available Parity options:")
For Each s As String In [Enum].GetNames(GetType(Parity))
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter Parity value (Default: {0}):", defaultPortParity.ToString(), True)
parity = Console.ReadLine()
If parity = "" Then
parity = defaultPortParity.ToString()
End If
Return CType([Enum].Parse(GetType(Parity), parity, True), Parity)
End Function
' Display DataBits values and prompt user to enter a value.
Public Shared Function SetPortDataBits(defaultPortDataBits As Integer) As Integer
Dim dataBits As String
Console.Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits)
dataBits = Console.ReadLine()
If dataBits = "" Then
dataBits = defaultPortDataBits.ToString()
End If
Return Integer.Parse(dataBits.ToUpperInvariant())
End Function
' Display StopBits values and prompt user to enter a value.
Public Shared Function SetPortStopBits(defaultPortStopBits As StopBits) As StopBits
Dim stopBits As String
Console.WriteLine("Available StopBits options:")
For Each s As String In [Enum].GetNames(GetType(StopBits))
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter StopBits value (None is not supported and " &
vbLf & "raises an ArgumentOutOfRangeException. " &
vbLf & " (Default: {0}):", defaultPortStopBits.ToString())
stopBits = Console.ReadLine()
If stopBits = "" Then
stopBits = defaultPortStopBits.ToString()
End If
Return CType([Enum].Parse(GetType(StopBits), stopBits, True), StopBits)
End Function
Public Shared Function SetPortHandshake(defaultPortHandshake As Handshake) As Handshake
Dim handshake As String
Console.WriteLine("Available Handshake options:")
For Each s As String In [Enum].GetNames(GetType(Handshake))
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter Handshake value (Default: {0}):", defaultPortHandshake.ToString())
handshake = Console.ReadLine()
If handshake = "" Then
handshake = defaultPortHandshake.ToString()
End If
Return CType([Enum].Parse(GetType(Handshake), handshake, True), Handshake)
End Function
End Class
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 |
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 |
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. |