2022年用SerialPort类设计串口通讯程序 .pdf
《2022年用SerialPort类设计串口通讯程序 .pdf》由会员分享,可在线阅读,更多相关《2022年用SerialPort类设计串口通讯程序 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、使用 SerialPort 类设计串口通讯程一概述输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用 Microsoft Communication Control(简称 MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在Microsoft.Net技术广泛应用的今天,Visual Studio.Net没有将此控件加入控件库,所以人们采用了许多方法在Visual Studio.Net来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0 中原来的 MSComm控件
2、这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET 推出了一个串口控件,基于.NET的 P/Invoke调用方法实现;第三种方法是自己用API 写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。现在微软推出了最新版本的Visual Studio 2005 开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 2.0类库包含了SerialPort 类,方便地实现了所需要串口通讯的多种功能,为了使 MSComm 编程方法快速转换到以SerialPort 类为核心的串口通讯的设计方法,这里着重讨论了Visual Studio 6.0 的 M
3、SComm 控件和 SerialPort 类设计方法的异同点。二 SerialPort 常用属性、方法和事件1命名空间System.IO.Ports 命名空间包含了控制串口重要的SerialPort 类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using System.IO.Ports。2串口的通讯参数串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在 MSComm中相关的属性是CommPort 和 Settings。SerialPort 类与 MSComm 有一些区别:通讯端口号
4、PortName属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为 String,不是 Mscomm.CommPort 的 short 类型。通常情况下,PortName 正常返回的值为 COM1、COM2,,SerialPort 类最大支持的端口数突破了CommPort 控件中 CommPort属性不能超过16 的限止,大大方便了用户串口设备的配置。通讯格式SerialPort 类对分别用 BaudRate、Parity、DataBits、StopBits 属性设置通讯格式中的波特率、校验位、数据位和停止位,其中Parity 和StopBits 分别是枚举类型
5、Parity、StopBits,Parity类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity 枚举了 None、One、OnePointFive、Two。SerialPort 类提供了七个重载的构造函数,既可以对已经实例化的SerialPort 对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化SerialPort 类的新实例。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 9 页 -3串口的打开和关闭SerialPort 类没有采用MSComm.PortOpen=True/False设置属性值打开
6、关闭串口,相应的是调用类的Open()和 Close()方法。4.数据的发送和读取SerialPort 类调用重载的Write 和 WriteLine 方法发送数据,其中WriteLine 可发送字符串并在字符串末尾加入换行符,读取串口缓冲区的方法有许多,其中除了 ReadExisting(读取SerialPort 对象的流和输入缓冲区中所有立即可用的字节)和ReadTo(一直读取到输入缓冲区中的指定value 的字符串),其余的方法都是同步调用,线程被阻塞直到缓冲区有相应的数据或大于ReadTimeOut 属性设定的时间值后,引发ReadExisting 异常。5.DataReceived
7、事件该 事 件 类 似 于MSComm控 件 中 的OnComm事 件,DataReceived事 件 在 接 收 到 了ReceivedBytesThreshold 设置的字符个数或接收到了文件结束字符并将其放入了输入缓冲区时被触发。其中ReceivedBytesThreshold 相当于MSComm 控件的 Rthreshold 属性,该事件的用法与MsComm 控件的OnComm 事件在 CommEvent 为 comEvSend 和 comEvEof 时是一致的。三 SerialPort的使用对于熟悉MSComm控件的程序设计者,SerialPort类是相当容易上手的。在进行串口通讯时
8、,一般的流程是设置通讯端口号及波特率、数据位、停止位和校验位,再打开端口连接,发送数据,接收数据,最后关闭端口连接这样几个步骤。SerialPort类读取数据的许多方法是同步阻塞调用,尽量避免在主线程中调用,可以使用异步处理或线程间处理调用这些读取数据的方法。由于 DataReceived 事件在辅线程被引发,当收到完整的一条数据,返回主线程处理或在窗体上显示时,请注意跨线程的处理,C#可采用控件异步委托的方法Control.BeginInvoke及同步委托的方法Invoke。1以添加控件的方式(有用户界面)VB:1)从工具箱选择SerialPort 控件添加到窗体上,命名为SpCom。2)设
9、置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortName=COM1SpCom.BaudRate=9600SpCom.Parity=IO.Ports.Parity.NoneSpCom.DataBits=8SpCom.StopBits=IO.Ports.StopBits.One3)发送数据SpCom.Write(TextSendData.Text)4)添加接受事件PrivateSub SpCom_DataReceived(ByVal sender As Object,ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)Ha
10、ndles SpCom.DataReceived5)读取数据Dim strT As String名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 9 页 -strT=SpCom.ReadExisting()C:1)从工具箱选择SerialPort 控件添加到窗体上,命名为SpCom。2)设置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortName=COM1;SpCom.BaudRate=9600;SpCom.Parity=IO.Ports.Parity.None;SpCom.DataBits=8;SpCom.StopBits=IO.Ports.StopBits.On
11、e;3)发送数据SpCom.Write(TextSendData.Text);4)添加接受事件privatevoid serialPortCom2_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)5)读取数据StringstrT;strT=SpCom.ReadExisting();2以类的方式VB:1)定义 SerialPort 类实例DimSpCom As New System.IO.Ports.SerialPort()2)设置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortNa
12、me=COM1SpCom.BaudRate=9600SpCom.Parity=IO.Ports.Parity.NoneSpCom.DataBits=8SpCom.StopBits=IO.Ports.StopBits.One或是定义时直接初始化Dim SpCom As New System.IO.Ports.SerialPort(COM1,9600,IO.Ports.Parity.Even,8,IO.Ports.StopBits.None)3)发送数据SpCom.Write(TextSendData.Text)4)添加接受事件a)在运行时将事件与事件处理程序相关联AddHandler SpCom
13、.DataReceived,AddressOf EventReceiveData说明:AddressOf创建引用特定过程的过程委托实例AddressOf运算符可以用作委托构造函数的操作数,或可以用在编译器能够确定委托类型的上下文中。b)添加事件处理程序(签名一定要一致)Sub EventReceiveData(ByVal sender As Object,ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 9 页 -5)读取数据Dim strT As String strT=
14、SpCom.ReadExisting()C:1)添加引用using System.IO.Ports;2)定义 SerialPort 类实例privateSerialPort SpCom2=newSpCom(COM2,9600,Parity.None,8,StopBits.One);3)设置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortName=COM1;SpCom.BaudRate=9600;SpCom.Parity=IO.Ports.Parity.None;SpCom.DataBits=8;SpCom.StopBits=IO.Ports.StopBits.One;或是定义时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年用SerialPort类设计串口通讯程序 2022 年用 SerialPort 设计 串口 通讯 程序
限制150内