会员注册 | 登录 | 微信快捷登录 支付宝快捷登录 QQ登录 微博登录 | 帮助中心 人人文库renrendoc.com美如初恋!
站内搜索 百度文库

热门搜索: 直缝焊接机 矿井提升机 循环球式转向器图纸 机器人手爪发展史 管道机器人dwg 动平衡试验台设计

   首页 人人文库网 > 资源分类 > DOC文档下载

通信学论文-基于VB的串口通讯及其软件实现.doc

  • 资源星级:
  • 资源大小:16.39KB   全文页数:11页
  • 资源格式: DOC        下载权限:注册会员/VIP会员
您还没有登陆,请先登录。登陆后即可下载此文档。
  合作网站登录: 微信快捷登录 支付宝快捷登录   QQ登录   微博登录
友情提示
2:本站资源不支持迅雷下载,请使用浏览器直接下载(不支持QQ浏览器)
3:本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

通信学论文-基于VB的串口通讯及其软件实现.doc

通信学论文基于VB的串口通讯及其软件实现摘要串口通信因为其简单,灵活易用,在许多领域有着广阔的应用前景。本文在深入了解串口通讯技术的基础上,结合自身的工程实践经验,阐述了VB串口编程的技术要点。并结合一个通讯实例,分析通讯的具体实现,给相关领域的研究人员提供值得参考的信息。关键词串口RS232APIPcommMscomm通信程序AbstractSerialcommunicationhasbroadapplicationinmanyfieldsbecauseofitssimplecommunicationcircuitryandflexibility.Basedondeepcomprehensionofthetechnologyoftheserialcommunications,thisarticleexpoundsimportanttechnologydetailintegratedwithpracticeexperience.Anexampleofcommunicationprogramispresentedandanalyzed,whichgivesotherresearchersvaluablereferenceinformation.KeywordsserialRS232APIPcommMscommcommunicationprogram现在通讯方式越来越多,速度越来越快,但串行通讯由于自身价格低、协议透明、硬件投资少、软件编程简单等诸多优点在远程数据采集、监视、通信及控制领域里一直占据着极其重要的地位。它不仅没有因为时代的进步而被淘汰,反而在规格上越来越完善、应用越来越广,长久不衰。1串口通信的通信机理PC串行通信是指直接对串行端口的UARTPC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口进行编程实现的通信。PC机每个UART中的INS8250中有10个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1的寄存器地址3F8H3FEH,COM2的寄存器地址为2F8H2FEH。10个寄存器由7个地址访问,其中5个寄存器的访问条件是先设置3FBH线路控制寄存器的最高位为1,该位也称为DLAB状态位。1一般说来,PC机都有一个或多个串行端口,它们依次为Com1、Com2。这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当了解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据而当接受数据时,从外界进来的比特流数据被转换成字符数据传递给CPU进行处理。在操作系统方面,Windows用通信驱动程序COMM.DRV调用API函数发送和接受数据。当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。作为一个VB程序员,要编写串口通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。2串行通讯接口RS232前一章节讨论了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。目前使用最广泛的串行接口有两种RS232和RS485。本文着重讨论RS232,RS485不作介绍。RS232C标准的全称是EIARS232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232的最新一次修改1969年,在这之前,有RS232A、RS232B协议。它规定连接电缆和机械、电气特性、信号功能及传送过程。EIARS232C定义了按位串行传输的数据终端设备DTE和数据通讯设备DCE之间的接口信息。RS232C是从DTE或计算机串行接口角度来定义引脚信号的。目前RS232是PC机与通信工业中应用最广泛的一种串行接口。RS232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS232采取不平衡传输方式,即所谓的单端通讯。2DB99针串口的接线方式如下1脚,数据载波检测DCD2脚,接收数据RXD3脚,发送数据TXD4脚,数据终端准备DTR5脚,信号地GND6脚,数据设备就绪DSR7脚,请求发送RTS8脚,清除发送CTS9脚,振铃指示DELL。DB2525阵串口,常用的针脚也有9个,且和DB9可以一一对应,具体接线方式为8脚,数据载波检测DCD3脚,接收数据RXD2脚,发送数据TXD20脚,数据终端准备DTR7脚,信号地GND6脚,数据设备就绪DSR4脚,请求发送RTS5脚,清除发送CTS22脚,振铃指示DELL。一般来说,对于要求不太高的场合,使用接收数据RXD,发送数据TXD,信号地GND三个脚即可实现数据传输。如果要求有硬件流控制,则必须使用DTR、DSR、RTS和CTS这四个脚。值得注意的是RS232C是用正负电压来表示逻辑状态,与TTL以高电平表示逻辑状态的规定不同。因此,为了能够与计算机接口或终端的TTL器件连接,必须在RS232C与TTL电路之间进行电平和逻辑关系的变换。目前较为广泛地使用集成电路转换器件,如MC1489、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。3三种读取串口数据的方式目前通用的串口通讯的软件实现方式有3种,本文都进行详细的介绍,它们各有自身的优缺点,读者在编程时可根据具体的情况选择合适的方式。3.1利用Mscomm控件VB提供的这个通信控件隐藏了大部分串口通信的底层运行过程,程序员只需编写少量的代码就可以完成软件的开发过程。在通信数据量不大,通信要求不是很高的情况下建议采取此方式。利用Mscomm控件实现通信最需要掌握的就是它的几个主要属性,下面选取其中重要的进行介绍,其余的可以参考相关资料。31Settings属性以字符串的形式设置并返回波特率、奇偶校验位、数据位、停止位。这个属性很重要,针对不同的终端设备需要根据设备的具体情况进行调整比如日本的设备不同于美国的设备,通常会采用奇校验。2InputMode属性设置接收数据的类型,0为文本格式,1为二进制格式。3Input属性读取并删除接收缓冲区中的数据流。4Output属性向发送缓冲区传送一数据流。5Rthreshold属性该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为ComEvReceive的OnComm事件。6Handshaking属性设置和返回握手协议,即计算机内部CPU与串口之间的通讯协议,保证在缓冲区过载时数据不会丢失。这个属性在保证数据传输的正确性方面有很大的作用,共有四个选项,分别表示①无流控制②软件流控制③硬件流控制④软硬件流控制。采用硬件流控时,要求串口之间和电缆支持硬件握手,在自己制作串口通信线时,有关硬件握手的线RTS、CTS、DSR、DTR要连接正确。在正确设置这些属性的基础上,剩下的就是打开串口,通过串口发送及接受数据了。本文后续章节利用一个实例详细讲解了这些属性的设置及具体代码。3.2直接调用Win32API通信函数直接调用WindowsAPI函数,可以清楚地理解串口通信的机制,根据需要灵活地配置串口的各种参数和属性,而且直接调用低层API函数,通信效率比较高,但付出的代价就是程序较复杂,编程周期长,适合于大型通信程序及通讯质量要求较高的场合。在32位的Windows系统中,串口通信是作为文件处理的,串口操作一般为打开、关闭、读取、写入等操作,相应的WindowsAPI函数如下41CreateFile函数实现串口的初始化并打开串口,返回串口句柄资源以供后续进程调用。2CloseFile函数关闭串口,串口是非共享资源,应用程序以独占方式使用,通信结束应立即关闭。3ReadFile函数从串口输入缓冲区读取数据流。4WriteFile函数向串口输出缓冲区发送数据。5GetCommState函数获取串口的当前配置。6SetCommState函数重新分配串口资源的各个参数。由于WindowsAPI函数大部分是用C或C编写,所以在VisualBasic6.0中调用WindowsAPI函数之前必须先在模块级代码上用Declare语句对所调用的函数和用到的数据结构进行声明,具体的函数声明及数据结构请参考朱友芹编新编WindowsAPI参考大全。3.3调用第三方函数库如Pcomm函数库DLLDynamicLinkLibrary动态链接库是一种可以被VB语言调用的程序模块。DLL中包含的可执行代码不能单独执行,而应由Windows应用程序调用执行。一般数据采集卡的供应商都会提供该采集卡的DLL库函数,使用这些DLL库函数,可以做到程序代码共享,减少程序的编写工作量。用户不需要知道这些代码的实现细节,只需要了解调用函数的参数和函数处理后的返回值。Pcomm函数库是由台湾Moxa公司为开发串口通信程序提供的一套函数库。通过对WindowsAPI函数的进一步封装,提供50多个串口操作函数。覆盖了Windows操作系统下几乎所有异步通信的问题,可以简洁的开发多线程通讯程序。采用该库,通信的可靠性与使用MSComm32控件比较有了明显提高,而相对直接使用Win32API函数编程则降低了程序开发难度,缩短了程序开发周期。这种方式上述直接调用WindowsAPI函数有相似之处,但也有明显的差异。API函数常采取的方法是在串口监视线程中设置串口通信事件掩码及重叠机制,允许程序在后台等待串口通信事件。通过WaitCommEvent检测特定的串行通信事件。而在Pcomm中,可以采用中断处理的方式,为各种事件指定相应的中断处理函数,如接收到一定数目的字符,接收到结束字符,接收到中止信号以及发送缓冲区为空等同时还可以采用线程控制的方式,直接采用库中的sio_read和sio_write函数读写串口。Pcomm..DLL中的函数按功能分为6项端口设置、数据发送与接收、串口状态检测、事件服务、文件传输、杂项。Pcomm..DLL中主要的函数介绍如下。5sio_open打开端口sio_close关闭端口。sio_ioctl设置端口参数,如波特率等。sio_read从端口接收数据sio_write向端口发送数据。sio_iqueue得到接收缓冲区中的数据长度。sio_oqueue得到发送缓冲区中的数据长度。Pcomm在串口通信中的功能十分强大,但基于篇幅的考虑,在此不便赘述,读者可参考相关书籍或Pcomm自带的帮助文档。4串口通讯的错误及处理由于外界干扰或电压波动等原因,串口通讯可能会出现错误,如接受缓冲区溢出,奇偶校验错误等。为了处理这些错误,在Mscomm控件中就提供了一个OnComm事件,它可以捕获通信时发生的串口事件和错误信息,自动转入事件处理程序。在OnComm事件中,CommEvent属性是OnComm事件的指示,下面简单介绍几个重要的CommEvent属性值。ComEventBreak表示收到一个中断信号ComEventFrame表示硬件检测到一个数据帧错误ComEvenRxover表示接收缓冲区溢出ComEventTxFull表示输出缓冲区已满ComEvReceive表示接手到了Rthreshold个字符ComEvEOF表示接受到了EOF字符ASCII字符26。编程时用SelectCase语句,根据不同的CommEvent属性值,去执行不同的处理程序。除了以上所述的通讯错误外,在串口通信时,如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态,为避免这种情况发生,必须设置串口读写操作的等待时间,等待超时后,串口的读写操作将被主动放弃,这样即使数据传输突然中断程序也不会被挂起或阻塞。可以根据具体要求规定串口读写操作的最长时间值,即串口读写必须在这段时间内完成,否则提示串口操作失败。5串口通讯实例本实例是一个采集设备电流及功率的通讯程序,采集仪为横河WT230数字功率计,因为要采集的数据量不大,且工程结构简单,故采用Mscomm控件的形式进行串口读写操作。具体实现步骤如下1在窗体Form上添加两个重要的控件Timer1和Mscomm12在程序的Form_Load事件过程中添加如下代码MSComm1.CommPort1使用COM1端口MSComm1.Setting9600,o,8,1设置通信口参数,注意是奇校验,具体的校验方式要视具体的仪器而定MSComm1.InputModecomInputModeBinary设置接收模式为二进制形式,注意一般对于数据采集这类设备通信,都应该设置为二进制形式MSComm1.PortOpenTrue参数设置好后打开端口MSComm1.HandShaking2comRTS设置为硬件流控制,可以有效避免数据丢失的情况发生3程序开始后在一定情况设置Timer1.Enabled属性值为True激活Timer1_Time事件,可以在固定的时间间隔下执行Timer1_Timer过程中的代码程序,完成数据采集。在Timer1_Timer过程中添加如下代码MSComm1.OutputCOMMUNICATEWAIT1Chr13Chr10MSComm1.OutputMEASURENORMALVALUEChr13Chr10上述语句是将读取指令发送到串口输出缓冲区注意每个命令字符串后都要加上回车和换行符Chr13Chr10,再由系统将其自动发送给通过RS232通信线与计算机端口连接的WT230数字功率计,功率计在接收到命令字符串后,经过自身的单片机处理,就自动地把它测到的电压、电流、功率数据以固定的格式和字符形式通过RS232通信线传回至计算机,计算机程序从输入缓冲区读取这些字符数据并利用VB字符处理函数如Val,InStr进行处理就得到了所要的数据,下面是具体的程序代码。Dimbytinputasbyte注意要将bytinput定义为不定长数组DimstrtemAsStringDimiasIntegerbytinputMSComm1.Input将输入缓冲区数据读入给字节型数组bytinputFori0ToUBoundbytinputstrtemstrtemChrbytinputi字节数组中的ASCII码值转换成相应Next的字符得到的strtem字符就形象的展示了电流、电压和功率值。对于WT230而言,

注意事项

本文(通信学论文-基于VB的串口通讯及其软件实现.doc)为本站会员(zhaozilong)主动上传,人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知人人文库网([email protected]),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。

copyright@ 2015-2017 人人文库网网站版权所有
苏ICP备12009002号-5