串口通讯方法的三种实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口基本信息
用一台电脑实验串口自发自收,实验前要将串口(以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两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现
串口是计算机上一种非常通用的设备通信协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。串口通信方便易行,应用广泛。在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)配置串口
在打开通讯设备句柄后,需要对串口进行一些初始化配置工作。串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位)。
在MSComm中,通过属性Comport和Settings来进行端口号和通讯格式设置,例如:port =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)数据读写对串口的读写操作可采用查询、同步、异步和事件驱动等方式。