基于MScomm32 LabVIEW 的串口通信技术
王定远1,胡吉朝2,李媛3
河北科技大学信息学院  石家庄 050054
摘要vb采用什么的编程机制串行通信是一种常用的数据传输方法,它用于计算机与外设,或者计算机与计算机之间的通信。本文针对串口通信技术,详细介绍了串口通信控件MSCOMM32.OCXLabVIEW7.1 下的使用方法,并介绍了串行通信中断接收及数据处理的技巧。作者已经把该技术成功运用到了部队和工业控制的实际项目中。
关键词串行通信  中断  ACTIVEX  MSCOMM32.OCX  LabVIEW
The Serial communication technique Based on MSCOMM32 and LabVIEW7.1
                            Wang DingyuanHu JichaoLi Yuan
College of Information Science and Engineering, Hebei University of science andTechnology ,Shijiazhuang Hebei 050054,China
AbstractSerial communication is a common-used method to transfer the data, it can be used in the communication between the computer and the peripheral equipment, or between the computer and the computer(two computers). This paper introduces the way how to use the  MSCOMM32.OCX in the LabVIEW 7.1,which is a kind of control used in the serial  communication., and introduced the skill of how to manage the data interrupt reception and the data procession. We have put this technique into the actual item of  army and the industry control successfully.
Key Word: Serial communication  Interrupt  ACTIVEX  MSCOMM32.OCX  LabVIEW
1前言
工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道。大多数计算机和许多仪器都配有RS-232接口,使得串行通信非常方便和流行。
MSCOMM32.OCX是一个专门用于串口通信的ACTIVEX控件,它提供了使用RS-232来进行数据通信的所有协议,常用的代码式编程语言(如:VC++ VBDELPHI等)为该控件提
供了标准的事件处理函数、过程,并通过属性和方法提供了串行通信的设置。它使用户能够方便地访问Windows串行通信驱动程序的大多数特性,包括输入、输出缓冲区的大小及决定何时使用流控制命令挂起数据传输等,使得此控件在工业控制上需要串行通信的场合变得流行起来。LabVIEW是美国国家仪器公司开发的一种图形化编程语言,专门用于计算机测控技术。LabVIEW内置了串口通信的8个功能函数,可以分别实现串口初始化、串口写、串口读、检测串口缓存、中断以及关闭串口等功能。这6个节点函数容易理解,故得到了大多数工程师的使用。但是,比较而言,MSCOMM32 控件更好,因为它有中断函数处理功能,可以实现中断式的接收数据,而LabVIEW自带的串口通信功能节点却只可以实现查询式的数据接收。查询方式,即一个进程中的某一线程定时地查询串口的接收缓冲区,如果缓冲区中有数据,就读取数据;若缓冲区中没有数据,该线程将继续执行,因此会占用大量的CPU时间。在一些实时性要求高的场合,采用查询处理不符合现场需要。另外,由于MSCOMM32 控件可以单独设置串口的每一个引脚,便于实现高级的用户自定义功能,而LabVIEW自带的串口通信节点却无法实现。鉴于MSCOMM32 的一些优点,本论文将详细介绍在LabVIEW7.1的环境下如何使用MSCOMM32来开发带有中断数据接收功能的串口通信程序。这也是作者长期处理串口通信技术的一个经验总结。
2 中断式串口通信技术的实现
2.1MSCOMM32控件的使用思想
MSComm控件共有27个属性。使用前一定要对常用的属性进行设置。指定串口号,设置通信参数,指定接收缓冲区大小,清空接收缓冲区,设置数据获取方式,设置读取方式,打开指定的串口。打开所需串口后,就考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用OnComm事件和CommEvent属性捕捉并检查通信事件和错误的值。发生通信事件或错误时将触发OnComm事件,CommEvent属性的值将被改变,应用程序通过检查CommEvent属性值并作出相应的反应。串口的中断需要通过Register For Events来注册中断事件,串口使用完毕需要关闭串口,通过Unregister For Events撤销对中断节点的注册,并通过Close Reference关闭ActiveX自动化控件。
2.2 LabVIEW中加载MSCOMM32.OCX控件
MSCOMM32.OCX控件是一种ACTIVEX控件。ACTIVEX采用客户机/服务器模式进行不同应
用程序的链接,调用其它应用程序的对象时,这个应用程序被作为客户端。自己创建的对象被其它应用程序调用时,这个应用程序被用作服务器。LabVIEW既可以作为ACTIVEX采用客户端,又可以作为ACTIVEX服务器。在这里我们使用LabVIEW作为客户端进行ACTIVEX的调用。LabVIEW提供有加载外部AXTIVEX控件的功能,使用前需把MSCOMM32.OCX控件加载到LabVIEW环境中。
LabVIEW的工具菜单“Tools >> Advanced >> Import ActiveX Controls”将Microsoft的串口控件-Microsoft Communications Controlversion 6.0”添加到LabVIEW环境中,存放在缺省路径即可,这样在User Controls Palette里面就可以到这个控件。
1 添加ActiveX控件
2 选择MSCOMM32控件
2.3 MSCOMM32控件初始化
将串口控件(电话机符号)放置在Front Panel上,在框图程序中用控件属性就可以对其进行编程,实现所需要的功能。 在实际操作的时候,一个串口资源只可以有一个MSCOMM控件与之相对应,如果在一个程序中同时需要进行多个串口的通信,则必须调出多个MSCOMM控件进行编程。
首先把LabVIEW中切换到框图程序环境,可以发现一个带有MSCOMM字样的控件。现在就可以按照VC++等代码式编程语言的编程思想,对此控件进行属性的配置。在ALLFUNCTIONS>>COMMUNICATION>>ACTIVEX下,调出Property Node节点,放于Block Diagram中。如果把其Refnum MSCOMM32控件的Refnum相联接,就可以发现其对应的所有属性函数,只要按照要求设置其属性,就可以操作这个控件了。
3 放置控件
4 MSCOMM32 的属性函数
5 MSCOMM32控件的初始化
2.4 数据的发送和接收
MSCOMM32控件可以接收二进制字节型数据或者字符串,这个可以通过Input Mode属性设置,0默认为ComInputModeText,1ComInputModeBinary。使用output函数发送数据,使用input函数接收接收数据。在数据的发送和接收前的串口初始化程序里需要提前设置好发送缓存和接收缓存的大小,控件默认为InBufferSize=1024BYTEOutBufferSize=512BYTERThreshold为接收中断门槛,默认为0,表示不产生中断,此时程序的编写采用查询式通信,如果设置为其它整数,比如1,则接收缓冲区每收到一个字符就会产生中断,SThreshold 为发送中断门槛,若设为0,不产生中断,若为1,则当传输缓冲区完全空时,控件产生中断事件。在本论文中,为了实现接收中断方式的串口通信,需要把SThreshold设为0RThreshold设置为1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。