SerialPort Classe

Definição

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 false, e elimina o objeto interno Stream .

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 value no buffer de entrada.

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.

Aplica-se a