标签:
杂谈 |
serialport
目录
展开
现在大多数硬件设备均采用串口技术与计算机相连,因此串口的应用程序开发越来越普遍。例如,在计算机没有安装网卡的情况下,将本机上的一些信息数据 传输到另一台计算机上,那么利用串口通信就可以实现。运行本程序,在"发送数据"文本框中输入要传送的数据,单击【发送】按钮,将传送的数据发送到所选择 的端口号中;单击【接收】按钮,传递的数据被接收到"接收数据"文本框中。
在.NET Framework 2.0中提供了SerialPort类,该类主要实现串口数据通信等。下面主要介绍该类的主要属性和方法。
公共属性
名称 |
说明 |
BaseStream |
获取 SerialPort 对象的基础 Stream 对象。 |
获取或设置串行波特率。 |
|
BreakState |
获取或设置中断信号状态。 |
BytesToRead |
获取接收缓冲区中数据的字节数。 |
BytesToWrite |
获取发送缓冲区中数据的字节数。 |
CDHolding |
获取端口的载波检测行的状态。 |
获取 IContainer,它包含 Component。(从 Component 继承。) |
|
CtsHolding |
获取"可以发送"行的状态。 |
DataBits |
获取或设置每个字节的标准数据位长度。 |
DiscardNull |
获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略。 |
DsrHolding |
获取数据设置就绪 (DSR) 信号的状态。 |
DtrEnable |
获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号。 |
获取或设置传输前后文本转换的字节编码。 |
|
Handshake |
获取或设置串行端口数据传输的握手协议。 |
IsOpen |
获取一个值,该值指示 SerialPort 对象的打开或关闭状态。 |
NewLine |
|
获取或设置奇偶校验检查协议。 |
|
ParityReplace |
获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节。 |
PortName |
获取或设置通信端口,包括但不限于所有可用的 COM 端口。 |
ReadBufferSize |
获取或设置 SerialPort 输入缓冲区的大小。 |
ReadTimeout |
获取或设置读取操作未完成时发生超时之前的毫秒数。 |
ReceivedBytesThreshold |
获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数。 |
RtsEnable |
获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号。 |
获取或设置 Component 的 ISite。(从 Component 继承。) |
|
StopBits |
获取或设置每个字节的标准停止位数。 |
WriteBufferSize |
获取或设置串行端口输出缓冲区的大小。 |
WriteTimeout |
获取或设置写入操作未完成时发生超时之前的毫秒数。 |
保护属性
名称 |
说明 |
CanRaiseEvents |
获取一个指示组件是否可以引发事件的值。(从 Component 继承。) |
DesignMode |
获取一个值,用以指示 Component 当前是否处于设计模式。(从 Component 继承。) |
Events |
获取附加到此 Component 的事件处理程序的列表。(从 Component 继承。) |
公共方法
名称 |
说明 |
关闭端口连接,将 IsOpen 属性设置为 false,并释放内部 Stream 对象。 |
|
CreateObjRef |
创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (从 MarshalByRefObject 继承。) |
DiscardInBuffer |
丢弃来自串行驱动程序的接收缓冲区的数据。 |
DiscardOutBuffer |
丢弃来自串行驱动程序的传输缓冲区的数据。 |
Dispose |
已重载。 释放 SerialPort 对象使用的非托管资源。 |
已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。) |
|
GetHashCode |
用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。) |
GetLifetimeService |
检索控制此实例的生存期策略的当前生存期服务对象。 (从 MarshalByRefObject 继承。) |
GetPortNames |
获取当前计算机的串行端口名称数组。 |
获取当前实例的 Type。 (从 Object 继承。) |
|
InitializeLifetimeServic |
获取控制此实例的生存期策略的生存期服务对象。 (从 MarshalByRefObject 继承。) |
打开一个新的串行端口连接。 |
|
已重载。 从 SerialPort 输入缓冲区中读取。 |
|
ReadByte |
从 SerialPort 输入缓冲区中同步读取一个字节。 |
ReadChar |
从 SerialPort 输入缓冲区中同步读取一个字符。 |
ReadExisting |
在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节。 |
ReadLine |
一直读取到输入缓冲区中的 NewLine 值。 |
ReadTo |
一直读取到输入缓冲区中的指定 value 的字符串。 |
ReferenceEquals |
确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。) |
ToString |
返回包含 Component 的名称的 String(如果有)。不应重写此方法。 (从 Component 继承。) |
已重载。 将数据写入串行端口输出缓冲区。 |
|
WriteLine |
将指定的字符串和 NewLine 值写入输出缓冲区。 |
保护方法
名称 |
说明 |
Dispose |
已重载。 已重写。 释放 SerialPort 对象使用的非托管资源。 |
在通过垃圾回收将 Component 回收之前,释放非托管资源并执行其他清理操作。 (从 Component 继承。) |
|
GetService |
返回一个对象,该对象表示由 Component 或它的 Container 提供的服务。 (从 Component 继承。) |
MemberwiseClone |
已重载。 (从 MarshalByRefObject 继承。) |
公共事件
名称 |
说明 |
DataReceived |
表示将处理 SerialPort 对象的数据接收事件的方法。 |
Disposed |
添加事件处理程序以侦听组件上的 Disposed 事件。(从 Component 继承。) |
ErrorReceived |
表示处理 SerialPort 对象的错误事件的方法。 |
PinChanged |
表示将处理 SerialPort 对象的串行管脚更改事件的方法。 |
(1)新建一个项目,命名为Ex13_01,默认窗体为Form1。
(2)在Form1窗体中,主要添加两个Button控件,分别用于执行发送数据和接受数据,添加两个TextBox控件,用于输入发送数据和显示接收数据。
(3)主要程序代码。
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Open();
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
serialPort1.WriteLine(str);
MessageBox.Show("数据发送成功!","系统提示");
}
private void button2_Click(object sender, EventArgs e)
{
byte[] data = Convert.FromBase64String(serialPort1.ReadLine());
textBox2.Text = Encoding.Unicode.GetString(data);
serialPort1.Close();
MessageBox.Show("数据接收成功!","系统提示");
}
现在微软推出了最新版本的 Visual Studio 2008 开发工具,可以不再采 用第三方控件的方法来设计串口通讯程序。NET Framework 2.0 类库包含了 SerialPort 类,方便地实现了所需要串口通讯的多种功能, 可以实现MSComm 编程方法快速转换到以 SerialPort 类为核心的串口通讯,关于设计和方法,可以参考下面的扩展阅读。