SerialPort Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Representa um recurso de porta serial.
public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
inherit Component
Public Class SerialPort
Inherits Component
- Herança
Exemplos
O exemplo de código seguinte demonstra o uso da SerialPort classe para permitir que dois utilizadores conversem a partir de dois computadores separados ligados por um cabo null modem. Neste exemplo, os utilizadores são solicitados a indicar as definições de port e um nome de utilizador antes de conversar. Ambos os computadores devem estar a executar o programa para alcançar a funcionalidade total deste exemplo.
// 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
Observações
Use esta classe para controlar um recurso de ficheiro de porta serial. Esta classe fornece I/O síncrona e orientada por eventos, acesso a estados de pino e interrupção, e acesso a propriedades do driver serial. Adicionalmente, a funcionalidade desta classe pode ser encapsulada num objeto interno Stream , acessível através da BaseStream propriedade, e passada para classes que envolvem ou utilizam fluxos.
A SerialPort classe suporta as seguintes codificações: ASCIIEncoding, UTF8Encoding, UnicodeEncoding, UTF32Encoding, e qualquer codificação definida em mscorlib.dll onde a página de códigos é inferior a 50000 ou a página de códigos é 54936. Podes usar codificações alternativas, mas tens de usar o ReadByte método ou Write e realizar a codificação tu próprio.
Usas o GetPortNames método para recuperar as portas válidas para o computador atual.
Se um SerialPort objeto ficar bloqueado durante uma operação de leitura, não aborte a thread. Em vez disso, ou fecha o fluxo base ou descarta o SerialPort objeto.
Construtores
| Name | Description |
|---|---|
| SerialPort() |
Inicializa uma nova instância da SerialPort classe. |
| SerialPort(IContainer) |
Inicializa uma nova instância da SerialPort classe usando o objeto especificado IContainer . |
| SerialPort(String, Int32, Parity, Int32, StopBits) |
Inicializa uma nova instância da SerialPort classe usando o nome da porta especificado, taxa de baud, bit de paridade, bits de dados e bit de paragem. |
| SerialPort(String, Int32, Parity, Int32) |
Inicializa uma nova instância da SerialPort classe usando o nome da porta especificado, taxa de baud, bit de paridade e bits de dados. |
| SerialPort(String, Int32, Parity) |
Inicializa uma nova instância da SerialPort classe usando o nome da porta, a taxa de bauds e o bit de paridade especificados. |
| SerialPort(String, Int32) |
Inicializa uma nova instância da SerialPort classe usando o nome de porta e a taxa de baud especificados. |
| SerialPort(String) |
Inicializa uma nova instância da SerialPort classe usando o nome da porta especificado. |
Campos
| Name | Description |
|---|---|
| InfiniteTimeout |
Indica que não deve haver tempo morto. |
Propriedades
| Name | Description |
|---|---|
| BaseStream |
Obtém o objeto subjacente Stream para um SerialPort objeto. |
| BaudRate |
Obtém ou define a taxa de bauds em série. |
| BreakState |
Recebe ou define o estado do sinal de paragem. |
| BytesToRead |
Obtém o número de bytes de dados no buffer de receção. |
| BytesToWrite |
Obtém o número de bytes de dados no buffer de envio. |
| CanRaiseEvents |
Obtém um valor que indica se o componente pode gerar um evento. (Herdado de Component) |
| CDHolding |
Obtém o estado da linha Carrier Detect para a porta. |
| Container |
Obtém o IContainer que contém o Component. (Herdado de Component) |
| CtsHolding |
Obtém o estado da linha Clear-to-End. |
| DataBits |
Obtém ou define o comprimento padrão de bits de dados por byte. |
| DesignMode |
Obtém um valor que indica se o Component está atualmente em modo de design. (Herdado de Component) |
| DiscardNull |
Recebe ou define um valor que indica se os bytes nulos são ignorados quando transmitidos entre a porta e o buffer de receção. |
| DsrHolding |
Obtém o estado do sinal Data Set Ready (DSR). |
| DtrEnable |
Recebe ou define um valor que permite o sinal Data Terminal Ready (DTR) durante a comunicação serial. |
| Encoding |
Obtém ou define a codificação de bytes para a conversão de texto antes e depois da transmissão. |
| Events |
Obtém a lista de gestores de eventos que estão ligados a isto Component. (Herdado de Component) |
| Handshake |
Obtém ou define o protocolo de handshaking para transmissão de dados por porta serial usando um valor de Handshake. |
| IsOpen |
Recebe um valor que indica o estado aberto ou fechado do SerialPort objeto. |
| NewLine |
Obtém ou define o valor usado para interpretar o fim de uma chamada para os ReadLine() métodos e.WriteLine(String) |
| Parity |
Obtém ou define o protocolo de verificação de paridade. |
| ParityReplace |
Recebe ou define o byte que substitui bytes inválidos num fluxo de dados quando ocorre um erro de paridade. |
| PortName |
Obtém ou configura a porta para comunicações, incluindo, mas não se limitando a todas as portas COM disponíveis. |
| ReadBufferSize |
Obtém ou define o tamanho do SerialPort buffer de entrada. |
| ReadTimeout |
Obtém ou define o número de milissegundos antes de ocorrer um time-out quando uma operação de leitura não termina. |
| ReceivedBytesThreshold |
Obtém ou define o número de bytes no buffer de entrada interno antes de ocorrer um DataReceived evento. |
| RtsEnable |
Recebe ou define um valor que indica se o sinal de Pedido de Envio (RTS) está ativado durante a comunicação serial. |
| Site |
Obtém ou define o ISite do Component. (Herdado de Component) |
| StopBits |
Obtém ou define o número padrão de stopbits por byte. |
| WriteBufferSize |
Obtém ou define o tamanho do buffer de saída da porta serial. |
| WriteTimeout |
Obtém ou define o número de milissegundos antes de ocorrer um time-out quando uma operação de escrita não termina. |
Métodos
| Name | Description |
|---|---|
| Close() |
Fecha a ligação da porta, define a IsOpen propriedade para |
| CreateObjRef(Type) |
Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto. (Herdado de MarshalByRefObject) |
| DiscardInBuffer() |
Descarta dados do buffer de receção do driver serial. |
| DiscardOutBuffer() |
Descarta dados do buffer de transmissão do driver serial. |
| Dispose() |
Liberta todos os recursos utilizados pelo Component. (Herdado de Component) |
| Dispose(Boolean) |
Liberta os recursos não geridos usados pelo SerialPort e opcionalmente liberta os recursos geridos. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetLifetimeService() |
Obsoleto.
Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso. (Herdado de MarshalByRefObject) |
| GetPortNames() |
Recebe um conjunto de nomes de portas seriais para o computador atual. |
| GetService(Type) |
Devolve um objeto que representa um serviço fornecido pelo Component ou pelo seu Container. (Herdado de Component) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| InitializeLifetimeService() |
Obsoleto.
Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso. (Herdado de MarshalByRefObject) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto atual MarshalByRefObject . (Herdado de MarshalByRefObject) |
| Open() |
Abre uma nova ligação de porta serial. |
| Read(Byte[], Int32, Int32) |
Lê um número de bytes do SerialPort buffer de entrada e escreve esses bytes num array de bytes no offset especificado. |
| Read(Char[], Int32, Int32) |
Lê vários caracteres do SerialPort buffer de entrada e escreve-os num array de caracteres num determinado deslocamento. |
| ReadByte() |
Lê síncronicamente um byte do SerialPort buffer de entrada. |
| ReadChar() |
Lê sincronizadamente um carácter do SerialPort buffer de entrada. |
| ReadExisting() |
Lê todos os bytes imediatamente disponíveis, com base na codificação, tanto no fluxo como no buffer de entrada do SerialPort objeto. |
| ReadLine() |
Lê até ao NewLine valor no buffer de entrada. |
| ReadTo(String) |
Lê uma string até ao especificado |
| ToString() |
Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado. (Herdado de Component) |
| Write(Byte[], Int32, Int32) |
Escreve um número especificado de bytes na porta serial usando dados de um buffer. |
| Write(Char[], Int32, Int32) |
Escreve um número especificado de caracteres na porta serial usando dados de um buffer. |
| Write(String) |
Escreve a cadeia especificada na porta serial. |
| WriteLine(String) |
Escreve a cadeia especificada e o NewLine valor no buffer de saída. |
evento
| Name | Description |
|---|---|
| DataReceived |
Indica que os dados foram recebidos através de uma porta representada pelo SerialPort objeto. |
| Disposed |
Ocorre quando o componente é eliminado por uma chamada ao Dispose() método. (Herdado de Component) |
| ErrorReceived |
Indica que ocorreu um erro numa porta representada por um SerialPort objeto. |
| PinChanged |
Indica que ocorreu um evento não relacionado com o sinal de dados na porta representada pelo SerialPort objeto. |