




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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的MSComm控件和SerialPo
3、rt类设计方法的异同点。二.SerialPort常用属性、方法和事件1.命名空间2.串口的通讯参数串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位,在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别:通讯端口号PortName属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是Mscomm.CommPort的short类型。通常情况下,PortName正常返回的值为COM1、COM2,SerialPort类最大支持的端口数突破了CommPort控件中Comm
4、Port 属性不能超过16的限止,大大方便了用户串口设备的配置。通讯格式SerialPort类对分别用BaudRate、Parity 、DataBits、StopBits属性设置通讯格式中的波特率、校验位、数据位和停止位,其中Parity和StopBits分别是枚举类型Parity、StopBits,Parity 类型中枚举了Odd(奇、Even(偶、Mark、None、Space,Parity枚举了None、One、OnePointFive、Two。SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特
5、率和奇偶校验位数据位和停止位直接初始化SerialPort 类的新实例。3.串口的打开和关闭SerialPort类没有采用MSComm.PortOpen=True/False设置属性值打开关闭串口,相应的是调用类的Open(和Close(方法。4.数据的发送和读取SerialPort类调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符,读取串口缓冲区的方法有许多,其中除了ReadExisting(读取SerialPort对象的流和输入缓冲区中所有立即可用的字节和ReadTo(一直读取到输入缓冲区中的指定value 的字符串,其余的方
6、法都是同步调用,线程被阻塞直到缓冲区有相应的数据或大于ReadTimeOut属性设定的时间值后,引发ReadExisting异常。5. DataReceived事件该事件类似于MSComm控件中的OnComm事件,DataReceived事件在接收到了ReceivedBytesThreshold设置的字符个数或接收到了文件结束字符并将其放入了输入缓冲区时被触发。其中ReceivedBytesThreshold相当于MSComm控件的Rthreshold属性,该事件的用法与MsComm控件的OnComm事件在CommEvent为comEvSend和comEvEof时是一致的。三.SerialPo
7、rt的使用对于熟悉MSComm控件的程序设计者,SerialPort类是相当容易上手的。在进行串口通讯时,一般的流程是设置通讯端口号及波特率、数据位、停止位和校验位,再打开端口连接,发送数据,接收数据,最后关闭端口连接这样几个步骤。SerialPort类读取数据的许多方法是同步阻塞调用,尽量避免在主线程中调用,可以使用异步处理或线程间处理调用这些读取数据的方法。由于DataReceived事件在辅线程被引发,当收到完整的一条数据,返回主线程处理或在窗体上显示时,请注意跨线程的处理,C#可采用控件异步委托的方法Control.BeginInvoke及同步委托的方法Invoke。1.以添加控件的方
8、式(有用户界面VB:1从工具箱选择SerialPort控件添加到窗体上,命名为SpCom。2设置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortName = "COM1"SpCom.BaudRate = 9600SpCom.DataBits = 83发送数据SpCom.Write(TextSendData.Text4添加接受事件Private Sub SpCom_DataReceived(ByVal sender As Object, ByVal e As5读取数据Dim strT As StringstrT =SpCom.ReadExisting(C#:1
9、从工具箱选择SerialPort控件添加到窗体上,命名为SpCom。2设置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortName = "COM1"SpCom.BaudRate = 9600;SpCom.DataBits = 8;3发送数据SpCom.Write(TextSendData.Text ;4添加接受事件private void serialPortCom2_DataReceived(object sender,5读取数据String strT;strT=SpCom.ReadExisting(;2.以类的方式VB:1定义SerialPort类实例2
10、设置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortName = "COM1"SpCom.BaudRate = 9600SpCom.DataBits = 8或是定义时直接初始化3发送数据SpCom.Write(TextSendData.Text4添加接受事件a在运行时将事件与事件处理程序相关联AddHandler SpCom.DataReceived, AddressOf EventReceiveData说明:AddressOf创建引用特定过程的过程委托实例AddressOf运算符可以用作委托构造函数的操作数,或可以用在编译器能够确定委托类型的上下文中。b添
11、加事件处理程序(签名一定要一致Sub EventReceiveData(ByVal sender As Object, ByVal e As5读取数据Dim strT As StringstrT =SpCom.ReadExisting(C#:1添加引用2定义SerialPort类实例private SerialPort SpCom2 = new SpCom("COM2", 9600,Parity.None, 8, StopBits.One;3设置通讯端口号及波特率、数据位、停止位和校验位。SpCom.PortName = "COM1"SpCom.Baud
12、Rate = 9600;SpCom.DataBits = 8;或是定义时直接初始化private SerialPort SpCom2 = new SpCom("COM2", 9600,Parity.None, 8, StopBits.One;4发送数据SpCom.Write(TextSendData.Text;5添加接收事件a在运行时将事件与事件处理程序相关联(通过委托实现SpCom.DataReceived += new SerialDataReceivedEventHandler(SpCom2_DataReceived;说明:SerialDataReceivedEven
13、tHandler委托表示将处理SerialPort对象的DataReceived事件的方法b添加事件处理程序(签名一定要一致private void SpCom_DataReceived(object sender, SerialDataReceivedEventArgs e6读取数据string data =SpCom.ReadExisting(;3.委托方法的使用VB:1声明委托Delegate Sub myMethodDelegate(ByVal text As String任何具有匹配参数类型和返回类型的过程均可用来创建此委托类的实例。然后就可以通过委托实例来调用过程。2定义一个委托实
14、例Dim myD1 As New myMethodDelegate(AddressOf myShowStringMethod3定义一个实例方法Sub myShowStringMethod(ByVal myString As String4调用'myD1(strDataInvoke(myD1, strDataInvoke提供对某一对象公开的属性和方法的访问。C#:1声明委托delegate void HandleInterfaceUpdateDelegate(string text;表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法。2定义一个委托实例并实例化委托对
15、象HandleInterfaceUpdateDelegate interfaceUpdateHandle;interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateReceiveTextBox;3定义一个实例方法private void UpdateReceiveTextBox(string text4调用Invoke(interfaceUpdateHandle, data;Invoke提供对某一对象公开的属性和方法的访问。4.ClassLibrary的使用VB:1建立一个ClassLibrary项目。在“文件”菜单上,选择
16、“新建项目”,在“新建项目”对话框的“模板”窗格中,单击“类库”。类库名为Persons,类名改为Player。2添加属性。a方法一Public Alive As Booleanb方法二Private nameValue As StringPublic Property Name( As StringGetName = nameValueEnd GetSet(ByVal value As StringnameValue = valueEnd SetEnd Property3添加方法。Public Function FullName( As String End Function 4 添加事件。
17、 a b 声明 触发事件 Event AnEvent(ByVal EventNumber As Integer RaiseEvent AnEvent(5 5 类库的使用。 a b 声明类库对象。 属性使用。 Dim Player1 As New Persons.Player Player1.Alive = true Player1.Name = "Andrew" c 方法使用。 Dim strT As String strT = player1.FullName d 事件使用。 AddHandler Player1.AnEvent, AddressOf person1_An
18、Event Private Sub Player1_AnEvent(ByVal p As Integer MsgBox(Player1.Name & " is alive" End Sub C#: 1 建立一个 ClassLibrary 项目。在“文件”菜单上,选择“新建项目”,在“新建项目” 对话框的“模板”窗格中,单击“类库”。类库名为 ClassLibraryPersons,类名改为 ClassPerson。 2 添加属性。 c d 方法一 方法二 Public bool Alive; private double seconds; public double
19、 Hours get return seconds / 3600; set seconds = value * 3600; 添加方法。 public void ShowYear(object sender, EventArgs e seconds = 5; 3 4 添加事件。 a 定义委托(与 ClassPerson 平级) public delegate void SampleEventDelegate(object sender, EventArgs e; b c 声明 public event SampleEventDelegate SampleEvent; 触发事件 SampleEve
20、nt(this, e; 5 类库的使用。 a 声明类库对象。 private ClassLibraryPersons.ClassPerson clPersons=new ClassLibraryPersons.ClassPerson( ; b 属性使用。 clPersons.Alive = true clPersons.Hours = 3; c d 方法使用。 clPersons.ShowYear(sender ,e; 事件使用。 clPersons.SampleEvent += new ClassLibraryPersons.SampleEventDelegate (clPersons_Sa
21、mpleEvent; private void clPersons_SampleEvent(object sender, EventArgs e 5WindowsControlLibrary 的使用 VB: 1 建立一个 WindowsClassLibrary 项目。在“文件”菜单上,选择“新建项目”,在“新建 项目”对话框的“模板”窗格中,单击“Windows 控件库”。控件库名为 NamesControl, 类名改为 NamesUserControl。 2 添加属性。 a b 方法一 方法二 Public Alive As Boolean Private nameValue As Stri
22、ng Public Property Name( As String Get Name = nameValue End Get Set(ByVal value As String nameValue = value End Set End Property 添加方法。( Public End Function Function FullName( As String 3 4 添加事件。 a b 声明 Event AnEvent(ByVal EventNumber As Integer 触发事件 RaiseEvent AnEvent(5 5 控件的使用。 a 添加控件。 工具箱(鼠标右键>
23、选择项>.NetFrameWork 组件>浏览>选择要添加的控件>确定 >在工具箱上选择控件>添加到窗体上 b 属性使用。 Player1.Alive = true Player1.Name = "Andrew" c 方法使用。 Dim strT As String strT = player1.FullName d 事件使用(属性中选择事件直接添加事件)。 Private Sub NamesUserControl1_AnEvent(ByVal EventNumber As System.Int32 Handles NamesUserCo
24、ntrol1.AnEvent End Sub C#: 1 建立一个 WindowsClassLibrary 项目。在“文件”菜单上,选择“新建项目”,在“新建 项目”对话框的“模板”窗格中,单击“Windows 控件库”。控件库名为 WindowsControlLibraryPersons,类名改为 UserControl1。 2 添加属性。 Public bool Alive; (无效) private double seconds; public double Hours get return seconds / 3600; set seconds = value * 3600; 添加方法。 public void ShowYear(object sender, Eve
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省南阳市2025年八年级下学期语文期末考试试卷及答案
- 港口集装箱安全检查与风险防控承包协议
- 风险投资岩土勘察与地质评估合作协议
- 宠物美容行业加盟协议、美容技术培训及设备供应与品牌推广合同
- 定制化私人飞机机组人员意外伤害及医疗保险协议
- 工业机器人产业链智能制造产业智能制造项目投资合作协议
- 高效智能仓储货架维护保养合作协议
- 新质生产力铁路
- 子女出国留学费用及监护权协议
- 自助结算系统租赁与智能零售业务合作协议
- 2024年中国家具电商行业市场竞争格局及投资方向研究报告(智研咨询)
- 导数(30题)-2024年考前15天高考数学冲刺大题训练(新高考)含答案
- 高层建筑一栋一册消防安全档案
- 创造性思维与创新方法智慧树知到期末考试答案章节答案2024年大连理工大学
- 外科围手术期营养支持疗法
- 广东省深圳市南山区2023-2024学年四年级下学期期末科学试题
- 2024年江苏省高考化学试卷(含答案)
- 2024年安徽省初中(八年级)学业水平考试初二会考地理试卷真题
- 小学二年级数学100以内三数加减混合运算综合测验试题大全附答案
- 中国特色社会主义期中测试题-2023-2024学年中职高教版
- 学习康复科常见物理治疗法课件
评论
0/150
提交评论