基于vb的串口通讯及其软件实现

上传人:wm****3 文档编号:42861791 上传时间:2018-06-04 格式:DOC 页数:12 大小:42KB
返回 下载 相关 举报
基于vb的串口通讯及其软件实现_第1页
第1页 / 共12页
基于vb的串口通讯及其软件实现_第2页
第2页 / 共12页
基于vb的串口通讯及其软件实现_第3页
第3页 / 共12页
基于vb的串口通讯及其软件实现_第4页
第4页 / 共12页
基于vb的串口通讯及其软件实现_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于vb的串口通讯及其软件实现》由会员分享,可在线阅读,更多相关《基于vb的串口通讯及其软件实现(12页珍藏版)》请在金锄头文库上搜索。

1、基于基于 VB 的串口通讯及其软件实现的串口通讯及其软件实现摘要:串口通信因为其简单,灵活易用,在许多领域有着广阔的应用前景。本文在深入了解串口通讯技术的基础上,结合自身的工程实践经验,阐述了 VB 串口编程的技术要点。并结合一个通讯实例,分析通讯的具体实现,给相关领域的研究人员提供值得参考的信息。 关键词:串口;RS232;API;Pcomm;Mscomm;通信程序 Abstract:Serial communication has broad application in many fields because of its simple communication circuitry a

2、nd flexibility. Based on deep comprehension of the technology of the serial communications, this article expounds important technology detail integrated with practice experience. An example of communication program is presented and analyzed, which gives other researchers valuable reference informati

3、on. Key words:serial; RS232; API; Pcomm; Mscomm; communication program 现在通讯方式越来越多,速度越来越快,但串行通讯由于自身价格低、协议透明、硬件投资少、软件编程简单等诸多优点在远程数据采集、监视、通信及控制领域里一直占据着极其重要的地位。它不仅没有因为时代的进步而被淘汰,反而在规格上越来越完善、应用越来越广,长久不衰。 1 串口通信的通信机理 PC 串行通信是指直接对串行端口的 UART(PC 机的通用异步收发器,也叫异步通信适配器,是 PC 机用于异步通信的接口)进行编程实现的通信。PC 机每个 UART 中的 INS

4、8250 中有 10 个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1 的寄存器地址3F8H-3FEH,COM2 的寄存器地址为 2F8H-2FEH。10 个寄存器由 7个地址访问,其中 5 个寄存器的访问条件是先设置 3FBH 线路控制寄存器的最高位为“1”,该位也称为 DLAB 状态位。1 一般说来,PC 机都有一个或多个串行端口,它们依次为Com1、Com2。这些串口提供了外部设备与 PC 进行数据传输和通信的通道,在 CPU 和外设之间充当了解释器的角色。当字符数据从 CPU 发送给外设时,这些字符数据将被转换成串行比特流数据;而当接受数据时,从外界进来的比特流数据被转换

5、成字符数据传递给CPU 进行处理。在操作系统方面,Windows 用通信驱动程序(COMM.DRV)调用 API 函数发送和接受数据。当用通信控件或声明调用 API 函数时,它们由 COMM.DRV 解释并传递给设备驱动程序。 作为一个 VB 程序员,要编写串口通信程序,只需知道通信控件提供给 Windows 通信 API 函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。 2 串行通讯接口 RS-232 前一章节讨论了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。目前使用最广泛的串行接口有两种:RS-232 和 RS-485。本文着重讨论

6、 RS-232,RS- 485不作介绍。 RS-232C 标准的全称是 EIA-RS-232C 标准,其中 EIA 代表美国电子工业协会,RS 代表推荐标准,232 是标识号,C 代表 RS232 的最新一次修改(1969 年),在这之前,有 RS232A、RS232B 协议。它规定连接电缆和机械、电气特性、信号功能及传送过程。EIA-RS-232C 定义了按位串行传输的数据终端设备(DTE)和数据通讯设备(DCE)之间的接口信息。RS-232C 是从 DTE 或计算机串行接口角度来定义引脚信号的。 目前 RS-232 是 PC 机与通信工业中应用最广泛的一种串行接口。RS232 被定义为一种

7、在低速率串行通讯中增加通讯距离的单端标准。RS232 采取不平衡传输方式,即所谓的单端通讯。2 DB9(9 针串口)的接线方式如下:1 脚,数据载波检测 DCD;2 脚,接收数据 RXD;3 脚,发送数据 TXD;4 脚,数据终端准备 DTR;5 脚,信号地 GND;6 脚,数据设备就绪 DSR;7 脚,请求发送 RTS;8 脚,清除发送CTS;9 脚,振铃指示 DELL。 DB25(25 阵串口),常用的针脚也有 9 个,且和 DB9 可以一一对应,具体接线方式为:8 脚,数据载波检测 DCD;3 脚,接收数据 RXD;2 脚,发送数据 TXD;20 脚,数据终端准备 DTR;7 脚,信号地

8、 GND;6 脚,数据设备就绪 DSR;4 脚,请求发送 RTS;5 脚,清除发送 CTS;22 脚,振铃指示DELL。 一般来说,对于要求不太高的场合,使用接收数据 RXD,发送数据TXD,信号地 GND 三个脚即可实现数据传输。如果要求有硬件流控制,则必须使用 DTR、DSR、RTS 和 CTS 这四个脚。 值得注意的是 RS-232C 是用正负电压来表示逻辑状态,与 TTL以高电平表示逻辑状态的规定不同。因此,为了能够与计算机接口或终端的 TTL 器件连接,必须在 RS-232C 与 TTL 电路之间进行电平和逻辑关系的变换。目前较为广泛地使用集成电路转换器件,如MC1489、SN751

9、50 芯片可完成 TTL 电平到 EIA 电平的转换,而MC1489、SN75154 可实现 EIA 电平到 TTL 电平的转换。 3 三种读取串口数据的方式 目前通用的串口通讯的软件实现方式有 3 种,本文都进行详细的介绍,它们各有自身的优缺点,读者在编程时可根据具体的情况选择合适的方式。 3.1 利用 Mscomm 控件 VB 提供的这个通信控件“隐藏”了大部分串口通信的底层运行过程,程序员只需编写少量的代码就可以完成软件的开发过程。在通信数据量不大,通信要求不是很高的情况下建议采取此方式。 利用 Mscomm 控件实现通信最需要掌握的就是它的几个主要属性,下面选取其中重要的进行介绍,其余

10、的可以参考相关资料。3 (1)Settings 属性:以字符串的形式设置并返回波特率、 奇偶校验位、数据位、停止位。这个属性很重要,针对不同的终端设备需要根据设备的具体情况进行调整(比如日本的设备不同于美国的设备,通常会采用奇校验)。 (2)InputMode 属性:设置接收数据的类型,0 为文本格式,1 为二进制格式。 (3)Input 属性:读取并删除接收缓冲区中的数据流。 (4)Output 属性:向发送缓冲区传送一数据流。 (5)Rthreshold 属性:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为 ComEvReceive 的 OnComm事件。 (6

11、)Handshaking 属性:设置和返回握手协议,即计算机内部 CPU与串口之间的通讯协议,保证在缓冲区过载时数据不会丢失。这个属性在保证数据传输的正确性方面有很大的作用,共有四个选项,分别表示:无流控制;软件流控制;硬件流控制;软硬件流控制。采用硬件流控时,要求串口之间和电缆支持硬件握手,在自己制作串口通信线时,有关硬件握手的线 RTS、CTS、DSR、DTR 要连接正确。 在正确设置这些属性的基础上,剩下的就是打开串口,通过串口发送及接受数据了。本文后续章节利用一个实例详细讲解了这些属性的设置及具体代码。 3.2 直接调用 Win32 API 通信函数 直接调用 Windows API

12、函数,可以清楚地理解串口通信的机制,根据需要灵活地配置串口的各种参数和属性,而且直接调用低层 API函数,通信效率比较高,但付出的代价就是程序较复杂,编程周期长,适合于大型通信程序及通讯质量要求较高的场合。 在 32 位的 Windows 系统中,串口通信是作为文件处理的,串口操作一般为打开、关闭、读取、写入等操作,相应的 Windows API 函数如下:4 (1) CreateFile()函数:实现串口的初始化并打开串口,返回串口句柄资源以供后续进程调用。 (2) CloseFile()函数:关闭串口,串口是非共享资源,应用程序以独占方式使用,通信结束应立即关闭。(3) ReadFile(

13、)函数:从串口输入缓冲区读取数据流。 (4) WriteFile()函数:向串口输出缓冲区发送数据。 (5) GetCommState()函数:获取串口的当前配置。 (6) SetCommState()函数:重新分配串口资源的各个参数。 由于 Windows API 函数大部分是用 C 或 C+编写,所以在 Visual Basic 6.0 中调用 Windows API 函数之前必须先在模块级代码上用Declare 语句对所调用的函数和用到的数据结构进行声明,具体的函数声明及数据结构请参考朱友芹编新编 Windows API 参考大全。 3.3 调用第三方函数库(如 Pcomm 函数库) D

14、LL(Dynamic Link Library)动态链接库是一种可以被 VB 语言调用的程序模块。DLL 中包含的可执行代码不能单独执行,而应由Windows 应用程序调用执行。一般数据采集卡的供应商都会提供该采集卡的 DLL 库函数,使用这些 DLL 库函数,可以做到程序代码共享,减少程序的编写工作量。用户不需要知道这些代码的实现细节,只需要了解调用函数的参数和函数处理后的返回值。 Pcomm 函数库是由台湾 Moxa 公司为开发串口通信程序提供的一套函数库。通过对 Windows API 函数的进一步封装,提供 50 多个串口操作函数。覆盖了 Windows 操作系统下几乎所有异步通信的问

15、题,可以简洁的开发多线程通讯程序。采用该库,通信的可靠性与使用MSComm32 控件比较有了明显提高, 而相对直接使用 Win32API 函数编程则降低了程序开发难度, 缩短了程序开发周期。 这种方式上述直接调用 Windows API 函数有相似之处,但也有明显的差异。API 函数常采取的方法是在串口监视线程中设置串口通信事件掩码及重叠机制,允许程序在后台等待串口通信事件。通过WaitCommEvent 检测特定的串行通信事件。而在 Pcomm 中,可以采用中断处理的方式,为各种事件指定相应的中断处理函数,如接收到一定数目的字符,接收到结束字符,接收到中止信号以及发送缓冲区为空等;同时还可以

16、采用线程控制的方式,直接采用库中的 sio_read()和sio_write()函数读写串口。 Pcomm.DLL 中的函数按功能分为 6 项:端口设置、数据发送与接收、串口状态检测、事件服务、文件传输、杂项。Pcomm.DLL中主要的函数介绍如下。5 sio_open:打开端口;sio_close: 关闭端口。 sio_ioctl:设置端口参数,如波特率等。 sio_read:从端口接收数据;sio_write 向端口发送数据。 sio_iqueue:得到接收缓冲区中的数据长度。 sio_oqueue:得到发送缓冲区中的数据长度。 Pcomm 在串口通信中的功能十分强大,但基于篇幅的考虑,在此不便赘述,读者可参考相关书籍或 Pcomm 自带的帮助文档。 4 串口通讯的错误及处理 由于外界干扰或电压波动等原因,串口通讯可能会出现错误,如接受缓冲区溢出,奇偶校验错误等。为了处理这些错误,在 Mscomm 控件中就提供了一个 OnComm 事件,它可以捕获通信时发生的串口事件和错误信息,自动转入事件处理程序。在 OnComm 事件中,CommEve

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号