您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 串口通讯方法的三种实现
第1页共8页串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。一个串口通讯类在。PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串口通信(SerialCommunication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。串口通信方便易行,应用广泛。在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MSC—51)都具有串行通信口,可以设计相应的串El通信程序,完成二者之间的数据通信任务。1串口通讯原理串口通信的原理非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其它线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。2串口通讯实现在.net平台下使用C#语言实现串口通信的方法主要有三种:第一种方法是采用VB6.0中提供的MSComm控件,这种方法编程简单.但MSComm控件在使用前需要在系统中注册;第二种方法是采用微软在.net2.0及其以后版本提供的内置的串口操作类--System.IO.SerialPort,使用简单,但欠灵活;第三种方法是Windows的API函数,虽然编程难度高,但这种方法可以清楚地掌握串口通信的机制,并且高效、自由、灵活。无论那种采用方式实现串口通讯,都需要通过以下四个步骤来完成:1)打开串口MSComm控件是通过设置PortOpen属性值来打开和关闭串口.具体语法为:MSComm.PortOpen=True/False.SerialPort类则是调用类的Open()和Close()方法来实现串口的打开和关闭。API函数是通过CreateFile来打开串口.因为在Win32系统中,串口被看作一个文件,使用与文件相同的操作方式进行操作。2)配置串口第2页共8页在打开通讯设备句柄后,需要对串口进行一些初始化配置工作。串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位)。在MSComm中,通过属性Comport和Settings来进行端口号和通讯格式设置,例如:MSComm1.Comport=1,设定通讯端口为Com1,MSComm1.Settings=”9600,n,8,1”,设置波特率9600,无校验,8位数据位,1位停止位。SerialPort类是通过PortName属性获取或设置通信端口,并分别通过BaudRate、Parity、DataBits、StopBits属性来对通讯格式中的波特率、数据位、停止位和校验位进行设置,其中的Parity和StopBits属性都是枚举类型,Parity类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space共5个枚举成员.StopBits类型中枚举了None、One、OnePointFive、Two共4个枚举成员。使用API,则需要通过一个DCB结构(包含了诸如波特率、数据位数、奇偶校验和停止位数等信息)来进行,将串口的几个重要参数如波特率、数据位、停止位、校验位改成符合实际设计要求的值。3)读写串口设置工作完成后,对串口进行读写操作。MSComm控件通过Input属性返回和删除接收缓冲区中的字符,通过Output属性将字符串写入发送缓冲区。SerialPort类则是通过调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符。SerialPort类对于串口缓冲区的读取方法有许多,其中除了ReadExisting和Readto.之外,其余的方法都是同步调用,即,方法调用时,线程将被阻塞,直到缓冲区有相应的数据或读超时(大于ReadTimeOut属性设定的时间值后,引发ReadExisting异常)。API函数是分别通过ReadFile和Writefile对串口进行读/写操作。4)关闭串口串口是非共享资源,某应用程序打开串行口后,即独占该资源,使其它应用程序无法再访问,直到该应用程序释放串口。所以对串口操作完成后,一定要关闭串口。MSComm控件通过将PortOpen属性值设置为False来关闭串口。SerialPort类则是调用Close()方法来关闭串口。API函数是通过使用CloseHandle()来关闭串口,该函数唯一参数即为用CreateFile打开串口时所创建的句柄。3结束语在.NET平台下,通过SerialPort类可以实现与MSComm控件相同的串口通讯程序,比起复杂的API,SerialPort类使用方便,开发快速.在今后工业控制中.SerialPort类必将广泛地应用于串口通讯程序的设计中。MSComm控件串行端口的本质功能是作为CPU和串行设备间的编码转换器。在发送数据时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。利用微机RS-232口进行串行通信的一般步骤如下:(1)打开串口在32位Windows中,串口和其他通信设备都被作为文件进行处理,在使用前必须先将其打开。(2)配置串口串口配置主要包括波特率、数据位数、停止位数、奇偶校验、发送缓冲区大小、接收缓冲区大小等。(3)超时设置在串口通信时如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态,为避免这种情况发生,必须设置串口读写操作的等待时间。若等待时间超过后,串口的读写操作将被主动放弃。(4)数据读写对串口的读写操作可采用查询、同步、异步和事件驱动等方式。第3页共8页(5)关闭串口在串口使用完后应将其关闭,否则其他应用程序就无法打开或使用它。VS2003下要先注册mscomm32.ocx组件才能使用。在.net2003光盘下面有目录ExtrasWB6Controls,此目录中有一个包含所有VB6.0控件授权信息的注册表文件:VB6Controls.reg。我们通过RegEdit.exe将VB6Controls.reg中的控件注册信息添加到注册表中,从而注册这些控件。如果机器上已经安装过Visualc++6.0就不用上述步骤了1常用控件属性Vc++.net中控件Mscomm32的主要属性有:CommPort属性,设置/返回通信端口号;Settings属性,设置/返回波特率、奇偶校验、数据位和停止位参数;PortOpen属性,设置/返回通信端口的状态(开或关)。InBuffercount属性,返回接受缓冲区中等待的字符数,也可以用他来清除输入缓冲区。InBufferSize属性,设置并返回接受缓冲区的字节数。Input属性,返回并删除接收缓冲区中的数据流。OutBufferCount属性,返回在传输缓冲区中等待的字符数。也可以用它来清除输出缓冲区。OutBufferSize属性,以字节的形式设置并返回传输缓冲区的大小。Output属性,将数据写入发送缓冲区Rthrehold属性,设置并返回Rthrehold数值;InputMode属性,设置/返回Input属性所检取数据的类型;CommEvent属性,返回最近的通信事件或错误2通信方式的选择Mscomm32控件提供了两种处理通信问题的方法:事件驱动法和查询法。事件驱动法利用OnComm事件捕获并处理通信中发生的事件,实时性强,可靠性高。每当有新字符到达,或端口状态改变,或发生错误时,Mscomm控件将触发OnComm事件,应用程序在捕获该事件后,通过检查Mscomm控件的CommEvent属性可获知所发生的事件(包括错误)并采取相应的操作。查询法适合于应用程序较小、实时性要求不是很高的系统。在这种情况下,每当应用程序执行完某一串口操作后,将不断检查Mscomm控件的CommEvent属性以检查执行结果或者检查某一事件是否发生基于API的串行口通信软件设计串行口的硬件使用3线结构,即:RXD,TXD和GND,在开发PC上位机的通信程序中常用的编程语言可分为3类:1)直接面向底层硬件系统的汇编语言;2)DOS环境下的高级编程语言如C语言;3)Windows环境下的高级编程语言,如VisualC++6.0,而这3种方式中Windows环境下的串口编程以其设备无关性、可移植性以及界面友好而得到广泛应用,开发Windows环境下的通信程序,主要有以下两种方式:1)利用WindowsAPI(ApplicationProgramInterface用户程序接口)函数2)利用ActiveX控件,MSComm控件对于简单的串行口操作MSComm控件使用方便、控制简单,但是对于较为复杂的串行口操作,它不够灵活,它常用在对话框中,这也限制了它的使用。基于API的串口编程,其功能强大,控制手段更为灵活配合Win32的重叠I/O操作和多线程设计就可以编写出高效、灵活的通信程序,串口的打开与初始化串口的打开是通过Win32的文件操作函数CreateFile完成的,该函数的原型如下,HandleCreateFile(第4页共8页LPCTSTRlpFileName//指向文件名称DWORDdwDeSiredAcceSS//存取模式(读或写)DWORDdwShareMode//共享模式LPSECURITY_ATTRIBUTESlpSecurityAttributeS//指向安全属性结构DWORDdwCreationDiSpoSition//创建方式DWORDdwFlagSAndAttributeS//文件属性和标志HandlehTemplateFile//临时文件句柄通常为NULL)如果调用成功,则该函数返回文件的句柄,否则,返回INVALID_HANDLE_VALUE,注意在打开一个通信端口的时候,应该以独占方式打开,即dwShareMode应该为O,另外,应该指定存取模式为GENERIC_READ|GENERIC_WRITE,允许对端口读和写,因为串口是存在的,所以,dwCreationDisposition应该为OPEN_EXISTING,此外,应该
本文标题:串口通讯方法的三种实现
链接地址:https://www.777doc.com/doc-5765911 .html