基于VC++6.0的数据可视化串口通信

2012-01-15 03:51叶艳艳陈西曲
武汉轻工大学学报 2012年1期
关键词:PC机流程图控件

叶艳艳,樊 峰,陈西曲

(武汉工业学院电气与电子工程学院,湖北武汉430023

随着计算机网络及应用的发展,通信功能即计算机与外界设备或计算机和计算机之间的数据传输显得越来越重要。串口通信技术因其实现简单、使用灵活方便及传输数据稳定可靠等优点,作为一种重要的数据传送手段得到越来越广泛的应用[1-5]。因此,针对串口通信在计算机等上位机中的开发,在项目开发过程中有着重要地位。本文讲解了在Windows平台下的串口通信,在VC++6.0开发环境下,单片机与PC机之间的数据通信及实时描点的实现过程。

1 串行通信基本原理及波形显示实现

1.1 串行通信的基本原理

作为CPU和串行设备间的编码转换器,串口将从CPU发送出去的字节数据转换为串行的位,在接收数据时,又将串行的位转换为字节数据[2]。

在Windows环境下,串口是系统资源的一部分。串口在Win32中是作为文件来进行处理的,并不直接对端口进行操作。Win32提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,就可以编制出符合不同需要的通信程序[3]。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求即打开串口,通信完成后必须释放资源即关闭串口[1-3]。

在VC++6.0开发环境下,实现串口通信的方法有多种,但是通过添加串行通信控件MSComm(Microsoft Communication Control)控件来实现串行通信是比较常用的一种方法。因为MSComm控件是微软公司开发的新技术,封装了串口通信的全部API函数,这样使用者就不必花费大量时间去了解复杂的API函数及硬件电路原理,只需添加少量的代码就能实现想要的功能,编程容易实现。

另外,还可通过使用Windows系统提供的应用程序接口API(Application Programming Interface)函数和多线程编程来实现串口编程[4]。

本文通过对MSComm控件和NTGraph控件的操作来实现PC机与单片机之间的数据传送和波形显示。

1.2 利用MSComm控件和NTGraph控件实现串口通信及波形显示

1.2.1 在VC++开发环境下用MSComm控件实现串口通信

因MSComm控件内部封装了串口通信的全部API函数,采用MSComm控件实现串行通信具有不可替代的优势,故本文通过使用MSComm控件来实现串行通信。

应用MSComm控件实现串口通信工作流程图如图1所示。

图1 MSComm控件工作流程图

(1)MSComm控件的加载。菜单栏Project→Add to project→Components and Controls Gallery→打开Registered ActiveX Controls文件夹→选择Microsoft Communications Control,version 6.0,单击 Insert。完成MSComm类及相应文件的添加,生成mscomm.h和mscomm.cpp的文件。

(2)在基于对话框的程序中使用控件创建数据收发窗口界面。插入MSComm控件完成后,工具箱中会出现一个MSComm控件的图标,将图标拖到对话框中→编辑属性修改ID→点击右键,建立控件的类向导→添加控件的一个对象m_Comm→建立控件响应代码框架→双击控件进入代码框架添加代码程序,一个控件即添加完成,对需要的各控件按照同样方法逐一添加并设置。设置完参数的控件即可实现其相应的功能,比如发送窗口就能实现数据发送、接收窗口能实现数据接收等。设置完成后其对话框界面如图2所示。

图2 MSComm控件添加及参数设置后界面

(3)部分关键代码实现步骤与分析。分析如下。

第一步,打开串口。

在OpenCOM()函数中设置打开串口,并以二进制方式读取数据及清除缓冲区残留数据。

第二步,将变量和串口分别进行初始化。

首先,我们在_Dlg::_Dlg(CWnd*pParent/*=NULL*/)

:CDialog(_Dlg::IDD,pParent)函数中将变量初始化。本例中约定使用PC机的COM3,波特率为2400b/s,数据格式为8个数据位,1个停止位,无奇偶校验位。

其次,在OnInitDialog()中添加初始化语句,用于设置串口通信的属性和打开串口。

((CComboBox*)GetDlgItem(IDC_COMBO_COM))->SetCurSel(m_nCom);//设置默认打开串口

UpdateData(FALSE);

第三步:串口读写。

双击MSComm控件,创建OnComm()函数,实现数据读写。使用VARIANT数据结构即VARIANT GetInput() 和 void SetOutput(const Variant&new Value)函数原型来完成串口的读写,其中GetInput()读取接收缓冲区的字符,SetOutput()向发送缓冲区写数据流。

第四步,双击发送按钮,创建发送函数OnButtonSend(),设置字符数据发送方式及位数。

利用MSComm控件顺利实现了PC机与单片机之间的串口通信,实现了数据稳定可靠的传输。

1.2.2 利用NTGraph控件实现波形显示及实时描点

NTGraph控件因其接口函数简单,只需要调用少数函数就能实现我们想要的功能,故是用来绘图的很好的控件。本文就是利用NTGraph控件来实现波形显示及实时描点的。应用NTGraph控件显示波形的工作流程图如图3所示。

图3 NTGraph控件工作流程图

(1)NTGraph控件的插入。因为NTGraph控件不是Windows自带的控件,故需注册以后才可使用。点击开始→运行→输入regsvr32/X NTGraph.ocx(/X是控件路径)→确定,完成注册。然后在之前添加的MSComm控件RS232对话框上点击右键→选择Insert ActiveX Control→选择 NTGraph Control,点击OK,NTGraph控件即添加完成。右键点击NTgraphCtrl1选择属性,即可根据需要选择修改一些属性,或者在程序里修改也行。修改完属性的完整界面如图4所示。

图4 NTGraph控件添加完成后对话框界面

控件添加完成后,再给控件添加一个对象,这样对象就可以访问NTGraph类中的成员函数了。点击菜单栏上的View→Classwizard→Member Variables→选择IDC_NTGRAPHCTRL→点击Add Variable添加变量m_Graph→点击OK,即完成了对象的添加,添加完对象后,写程序控制NTGraph控件,使其实现实时描点和显示波形。

(2)部分关键代码实现步骤与分析。首先,在OnInitDialog()的末尾添加NTGraph控件的初始化设置语句m_Graph.Set,用于设置X轴、Y轴及线条显示的属性等。然后,在OnComm()函数中加入自定义str_change_int(Cstring)函数,用来数据类型的转换,并利用一个for循环来实现实时描点及显示波形。

1.3 使用51单片机的RS232串口收发程序,用以实现与PC机之间的通讯

8051单片机上有UART(通用异步发送接收器)用于串口通信,由TXD端发送数据,RXD端接收数据,并有2个缓冲器,一个用作发送缓冲器,一个用作接收缓冲器。8051采用C语言进行的程序设计。51单片机的RS232串口数据收发流程图如图5所示。

图5 51单片机的工作流程图

2 结果与分析

本文讲解了在基于VC++6.0的开发环境下,通过利用MSComm控件及NTGraph控件,成功完成了十六进制数据的收发及波形显示:从PC机输入十六进制数,PC机通过串口将数据发送到单片机上,单片机RXD端接收完成并产生响应后,再将数据从TXD端发送到PC机,PC机接收数据并以方波的形式显示,成功实现了51单片机与PC机之间的串口通信与方波的产生。图6是从PC机输入两位十六进制数,其接收情况及波形显示情况(延时100 ms)。由此可见用MSComm控件实现串口通信软件的开发是稳定、可靠的。系统整体工作流程图如图7所示。

图6 结果展示图

图7 系统整体工作流程图

3 总结

本文利用ActiveX控件MSComm实现对串口的访问及对数据的采集,编程简单,可移植性强,稳定性好,可靠性高。和NTGraph控件联合使用,顺利实现了对串口数据的实时描点及波形显示。

[1] 刘书智.VC++实践与提高—串口通信与工程应用篇(第二版)[M].北京:中国铁道出版社,2009.

[2] 陈细军,谭民.VC编程中的串口通信技术[J].计算机应用,2001(9):94-95.

[3] 赵军.利用VC++下MSComm开发的串口通信软件[J].中国测试技术,2006(6):97-99.

[4] 岳志高.MSComm控件在VC++6.0串口通信中的应用[J].长春工程学院学报,2009(1):72-73.

[5] 韩中合.用ActiveX控件实现串口通信编程[J].山东电力技术,2003(2):15-17.

[6] 邱建华,彭志豪.串口通信技术在Visual C++中的实现[J].技术,2005(5):94-95.

猜你喜欢
PC机流程图控件
基于.net的用户定义验证控件的应用分析
关于.net控件数组的探讨
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
专利申请审批流程图
专利申请审批流程图
VIVID3彩色超声仪结构原理及维修
宁海县村级权力清单36条
《天津医药》稿件处理流程图