SerialPort Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje prostředek sériového portu.
public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
inherit Component
Public Class SerialPort
Inherits Component
- Dědičnost
Příklady
Následující příklad kódu ukazuje použití třídy povolit dvěma uživatelům chatovat ze dvou samostatných počítačů připojených SerialPort kabelem modemu s hodnotou null. V tomto příkladu se uživatelům před chatováním zobrazí výzva k zadání nastavení portu a uživatelského jména. Aby bylo možné dosáhnout plné funkčnosti tohoto příkladu, musí být program spuštěný na obou počítačích.
#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
Poznámky
Tuto třídu použijte k řízení prostředku souboru sériového portu. Tato třída poskytuje synchronní vstupně-výstupní operace řízené událostmi, přístup ke stavům připnutí a přerušení a přístup k vlastnostem sériového ovladače. Funkce této třídy lze navíc zabalit do interního Stream objektu, přístupného prostřednictvím BaseStream vlastnosti a předat třídám, které zalamují nebo používají datové proudy.
Třída SerialPort podporuje následující kódování: ASCIIEncoding, UTF8Encoding, UnicodeEncodingUTF32Encoding, a jakékoli kódování definované v mscorlib.dll kde znaková stránka je menší než 50000 nebo znaková stránka je 54936. Můžete použít alternativní kódování, ale musíte použít metodu ReadByte nebo Write a kódování provést sami.
Použijete metodu GetPortNames k načtení platných portů pro aktuální počítač.
SerialPort Pokud se objekt během operace čtení zablokuje, nepřetáčíte vlákno. Místo toho buď zavřete základní datový proud, nebo odstraňte SerialPort objekt.
Konstruktory
SerialPort() |
Inicializuje novou instanci SerialPort třídy. |
SerialPort(IContainer) |
Inicializuje novou instanci SerialPort třídy pomocí zadaného IContainer objektu. |
SerialPort(String) |
Inicializuje novou instanci SerialPort třídy pomocí zadaného názvu portu. |
SerialPort(String, Int32) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu a přenosové rychlosti. |
SerialPort(String, Int32, Parity) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu, přenosové rychlosti a paritního bitu. |
SerialPort(String, Int32, Parity, Int32) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu, přenosové rychlosti, bitu parity a datových bitů. |
SerialPort(String, Int32, Parity, Int32, StopBits) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu, přenosové rychlosti, paritního bitu, datových bitů a stop bitu. |
Pole
InfiniteTimeout |
Označuje, že by nemělo dojít k žádnému vypršení časového limitu. |
Vlastnosti
BaseStream |
Získá základní Stream objekt pro SerialPort objekt. |
BaudRate |
Získá nebo nastaví rychlost sériového přenosu. |
BreakState |
Získá nebo nastaví stav signálu přerušení. |
BytesToRead |
Získá počet bajtů dat v vyrovnávací paměti pro příjem. |
BytesToWrite |
Získá počet bajtů dat ve vyrovnávací paměti pro odesílání. |
CanRaiseEvents |
Získá hodnotu označující, zda komponenta může vyvolat událost. (Zděděno od Component) |
CDHolding |
Načte stav dopravce detekovat řádek pro port. |
Container |
Získá objekt IContainer , který obsahuje Component. (Zděděno od Component) |
CtsHolding |
Získá stav řádku Clear-to-Send. |
DataBits |
Získá nebo nastaví standardní délku datových bitů na bajt. |
DesignMode |
Získá hodnotu, která označuje, zda je aktuálně v režimu návrhu Component . (Zděděno od Component) |
DiscardNull |
Získá nebo nastaví hodnotu určující, zda null bajty jsou ignorovány při přenosu mezi portem a vyrovnávací paměti pro příjem. |
DsrHolding |
Získá stav signálu Data Set Ready (DSR). |
DtrEnable |
Získá nebo nastaví hodnotu, která umožňuje signál DTR (Data Terminal Ready) během sériové komunikace. |
Encoding |
Získá nebo nastaví kódování bajtů pro převod textu před a po přenosu. |
Events |
Získá seznam obslužných rutin událostí, které jsou připojeny k tomuto Component. (Zděděno od Component) |
Handshake |
Získá nebo nastaví protokol handshaking pro sériový port přenos dat pomocí hodnoty z Handshake. |
IsOpen |
Získá hodnotu označující otevřený nebo uzavřený stav objektu SerialPort . |
NewLine |
Získá nebo nastaví hodnotu použitou k interpretaci konce volání ReadLine() metody a WriteLine(String) . |
Parity |
Získá nebo nastaví protokol kontroly parity. |
ParityReplace |
Získá nebo nastaví bajt, který nahradí neplatné bajty v datovém streamu, když dojde k chybě parity. |
PortName |
Získá nebo nastaví port pro komunikaci, včetně, ale ne výhradně všech dostupných portů COM. |
ReadBufferSize |
Získá nebo nastaví velikost SerialPort vstupní vyrovnávací paměti. |
ReadTimeout |
Získá nebo nastaví počet milisekund před vypršením časového limitu, když operace čtení nedokončí. |
ReceivedBytesThreshold |
Získá nebo nastaví počet bajtů v interní vstupní vyrovnávací paměti před výskytem DataReceived události. |
RtsEnable |
Získá nebo nastaví hodnotu určující, zda požadavek odeslat (RTS) signál je povolen během sériové komunikace. |
Site |
Získá nebo nastaví ISite hodnotu Component. (Zděděno od Component) |
StopBits |
Získá nebo nastaví standardní počet stopbitů na bajt. |
WriteBufferSize |
Získá nebo nastaví velikost vyrovnávací paměti výstupu sériového portu. |
WriteTimeout |
Získá nebo nastaví počet milisekund před vypršením časového limitu, když se operace zápisu nedokončí. |
Metody
Close() |
Zavře připojení portu, nastaví IsOpen vlastnost na |
CreateObjRef(Type) |
Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy používaného ke komunikaci se vzdáleným objektem. (Zděděno od MarshalByRefObject) |
DiscardInBuffer() |
Zahodí data z vyrovnávací paměti příjmu sériového ovladače. |
DiscardOutBuffer() |
Zahodí data z vyrovnávací paměti pro přenos sériového ovladače. |
Dispose() |
Uvolní všechny prostředky používané nástrojem Component. (Zděděno od Component) |
Dispose(Boolean) |
Uvolní nespravované prostředky používané SerialPort nástrojem a volitelně uvolní spravované prostředky. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetLifetimeService() |
Zastaralé.
Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
GetPortNames() |
Získá pole názvů sériových portů pro aktuální počítač. |
GetService(Type) |
Vrátí objekt, který představuje službu poskytovanou objektem Component nebo jejím Containerobjektem . (Zděděno od Component) |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
InitializeLifetimeService() |
Zastaralé.
Získá objekt služby životnosti, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
MemberwiseClone(Boolean) |
Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu. (Zděděno od MarshalByRefObject) |
Open() |
Otevře nové připojení sériového portu. |
Read(Byte[], Int32, Int32) |
Načte počet bajtů ze SerialPort vstupní vyrovnávací paměti a zapíše tyto bajty do pole bajtů při zadaném posunu. |
Read(Char[], Int32, Int32) |
Přečte několik znaků ze SerialPort vstupní vyrovnávací paměti a zapíše je do pole znaků v daném posunu. |
ReadByte() |
Synchronně čte jeden bajt ze SerialPort vstupní vyrovnávací paměti. |
ReadChar() |
Synchronně čte jeden znak ze SerialPort vstupní vyrovnávací paměti. |
ReadExisting() |
Na základě kódování přečte všechny okamžitě dostupné bajty v datovém proudu i vstupní vyrovnávací paměti objektu SerialPort . |
ReadLine() |
NewLine Načte hodnotu ve vstupní vyrovnávací paměti. |
ReadTo(String) |
Načte řetězec až do zadaného |
ToString() |
String Vrátí hodnotu obsahující název Component, pokud existuje. Tato metoda by neměla být přepsána. (Zděděno od Component) |
Write(Byte[], Int32, Int32) |
Zapíše zadaný počet bajtů na sériový port pomocí dat z vyrovnávací paměti. |
Write(Char[], Int32, Int32) |
Zapíše zadaný počet znaků na sériový port pomocí dat z vyrovnávací paměti. |
Write(String) |
Zapíše zadaný řetězec na sériový port. |
WriteLine(String) |
Zapíše zadaný řetězec a NewLine hodnotu do výstupní vyrovnávací paměti. |
Událost
DataReceived |
Označuje, že data byla přijata přes port reprezentovaný objektem SerialPort . |
Disposed |
Nastane, když je komponenta odstraněna voláním Dispose() metody. (Zděděno od Component) |
ErrorReceived |
Označuje, že došlo k chybě s portem reprezentovaným objektem SerialPort . |
PinChanged |
Označuje, že na portu reprezentované objektem došlo k události jiného než datového signálu SerialPort . |