The free trial of HTML reading is available now, welcome to use!
自动化技术与应用 2014,33(11),122-129

基于ActiveX控件的Visual C++与组态王通信研究

王德庆 牛天星 曲加圣

大连测控技术研究所

Abstract:

研究了在组态王提供的Kv Tcpip Client Ocx Active X通信控件基础上, 实现Visual C++读取和设置组态王变量信息的方法, 可以达到实时通信的目的。以行车中的轴旋转控制为测试背景, 首先介绍了组态王系统设计及变量的设置, 接着讲述了VC工程的建立和组态王通信控件的添加方法, 最后给出了VC与组态王通信的代码具体实现方法。此方法与传统的DDE和OPC等方法相比开发更加便捷, 适合新系统新开发软件的利用。在Visual C++的基础上, 可以在数据处理、报警监视等多方面实现组态王功能的拓展。

About the author:王德庆 (1986-) , 男, 工学硕士, 助理工程师, 研究方向:工业自动化、模式识别。

Submission Date:2014-07-29

fund: 国家科技支撑计划项目 (编号2013BAK03B06);

Research of Communication Between Visual C++ and Kingview Based on Active X Control

WANG De-qing NIU Tian-xing QU Jia-sheng

Dalian Scientific Test and Control Technology Institute

Abstract:

This paper introduces the methods for Visual C++ to read and set variables values in Kingview system, realizing real-time communication and control. Taking axle rotation control as the test background, firstly, Kingview system and variables setup methods are introduced. Then, the method to build a VC project with Kv Tcpip Client Ocx control is introduced too.Finally, the communication method with detailed codes is given. Comparing with traditional DDE and OPC, this method is more convenience to use and fits latest operation system and developing software. Based on VC, Kingview's functions can be extended.

Received: 2014-07-29

1 引言

组态王是一款在工控领域应用非常广泛的组态软件。它包含了多款工控设备厂商的驱动程序, 可以与多种设备进行通信。但是在很多工程中我们需要利用V C、V B、M A T L A B等第三方软件对组态王的数据进行数据分析处理, 开发高级算法等, 因此要实现与组态王通信并访问组态王实时数据。组态王提供了三种访问实时数据的方法[1]:通过OPC访问、通过DDE访问和通过Active X控件访问的方法。OPC和DDE的方法在很多工程项目中有着应用。

OPC全称是OLE for Process Control, 即过程控制中的对象链接嵌入技术。文献[2]介绍了在OPC基础上利用MATLAB实现组态王先进控制算法。文献[3]介绍了利用OPC实现WINCC和组态王通信。文献[4]介绍了利用V C 6编程访问组态王O P C服务器的方法。

DDE全称是Dynamic Data Exchange, 是一种动态数据交换技术。文献[5]介绍了基于DDE通信, 并利用MATLAB读取组态王数据, 来实现复杂滤波算法。文献[6][7]介绍了在VC中进行DDE通信开发, 访问组态王数据, 实现组态王功能拓展的方法。

Visual C++MFC在软件开发中用得非常广泛, 但是M F C并没有对O P C、D D E进行封装。开发O P C应用程序时需要添加OPC SDK库文件[8], 开发DDE应用程序时需要利用MFC的消息机制[9]或者调用DDEML库文件[6-7], 这样会增加VC软件编程的复杂度。组态王提供了客户端通信控件Kv Tcpip Client Ocx.ocx, 在VC中调用该Active X控件, 可以获得组态王实时数据, 它使用起来像普通按钮文本框等控件一样方便, 大大减少了开发难度。此控件还有很好的兼容性, 从Windows XP到当前最新的Windows 8.1系统, 从VC6到当前最新的VC2013都适用。

本文将对在Visual C++中利用Kv Tcpip Client Ocx Active X控件访问组态王实时数据这一便捷的方法进行详细的介绍。本文用当前最新的系统和软件进行开发, 并将此方法在实际的设备控制中进行测试。在VC程序中, 利用了定时器, 实现了与组态王同步显示数据的目的。

2 组态王工程设计

本文以行车中的轴旋转控制以及旋转角度监视为研究测试背景, 系统工作结构如图1所示。组态王版本为6.55, 组态王系统工作画面设计如图2所示。

图1 系统结构图

图1 系统结构图   Download the original image.

图2 组态王画面设置

图2 组态王画面设置   Download the original image.

表1 系统变量表    Download the original table.

表1 系统变量表

系统变量表如表1所示。在组态王系统添加变量时, 将“采集频率”设置为100毫秒, 在“工程浏览器”->“系统配置”->“设置运行系统”的“特殊”选项卡中将“运行系统基准频率”设置为100毫秒。对于配置较高的计算机, 时间可以设置得更短。

在组态王的“工程浏览器”->“系统配置”->“用户配置”中新建用户, 添加用户名a d m i n和密码admin888到系统管理员组, 优先级设为999, 如图3所示。本实验中组态王与Visual C++运行于同一台计算机内, 在运行Visual C++程序之前必须先运行组态王系统。

3 注册组态王Active X控件

安装组态王软件后Kv Tcpip Client Ocx.ocx控件会自动注册到操作系统中。如果没有安装组态王, 或者控件没有注册成功, 则需要手动注册。

在Windows 8.1系统中, 以管理员方式运行“命令提示符”, 然后进入到控件所在的目录, 注册控件时运行下面的命令:

卸载控件时运行下面的命令:

4 Visual C++工程建立

本实验项目中操作系统为Windows 8.1 64位系统, 4G内存, 开发软件为Visual C++2013。

4.1 添加组态王Active X通信控件类

在Visual C++中新建M F C对话框项目MFCApplication1, 在“Class Wizard类向导”的“Add Class添加类”选项中选择“MFC Class From Active X Control”, 如图4所示, 然后选择来自“File文件”并确认Kv Tcpip Client Ocx.ocx控件所在的路径。接着添加CDKv Tcpip Client Ocx和CDKv Tcpip Client Ocx Events这两个类, 最后点击“Finish”按钮确认, 如图5所示。

图4 从类向导添加类

图4 从类向导添加类   Download the original image.

图5 添加组态王控件类

图5 添加组态王控件类   Download the original image.

在高于V C 6.0版本的开发环境中使用Kv Tcpip Client Ocx.ocx控件开发应用程序需要显式指明使用早期版本映射方式, 如将“USHORT*”等映射为“VTS_PI2”等。因此, 添加完类后需要对代码进行适当修改。打开系统自动添加的CDKv Tcpip Client Ocx.h头文件, 一共需要修改四处:

(1) 将Method_Get Station Number函数中的

修改为

VTS_PI2。

(2) 将Method_Get Variable Number函数中的

修改为

VTS_PI4。

(3) 将Method_Get Variable Value With Stamp By Variable Id函数中的

修改为

VTS_PI4 VTS_PI4 VTS_PI2。

(4) 将Method_Get Variable Value With Stamp By Variable Name函数中的

修改为

VTS_PI4 VTS_PI4 VTS_PI2。

4.2 插入组态王Active X通信控件

在MFC对话框设计界面, 单击右键, 选择“Insert Acrive X Control”, 然后选择“Kv Tcpip Client Ocx Control”, 再点击确定, 如图6和图7所示。假设没有出现“Kv Tcpip Client Ocx Control”这一选项, 说明Kv Tcpip Client Ocx.ocx这一控件没有成功注册或已被卸载。

图6 在对话框中插入控件

图6 在对话框中插入控件   Download the original image.

图7 插入组态王通信控件

图7 插入组态王通信控件   Download the original image.

成功插入控件后会在对话框中出现一个白色的方块。

4.3 为控件关联变量

右键单击控件, 选择“Add Variable添加变量”然后输入控件的变量名, 比如m_my Kingview。如图

图8 添加控件变量

图8 添加控件变量   Download the original image.

图9 设置变量名

图9 设置变量名   Download the original image.

4.4 添加控件事件函数

图1 0 添加事件函数

图1 0 添加事件函数   Download the original image.

再次右键单击控件, 选择“Add Event Handler”, 然后可以添加控件与通信相关的事件函数。如图10和图11所示。

图1 1 选择事件函数

图1 1 选择事件函数   Download the original image.

Kv Tcpip Client Ocx.ocx控件变量的关联以及事件函数的添加也可以在插入控件后, 通过“Class Wizard类向导”来完成。

5 Visual C++工程设计

5.1 界面的设计

测试软件的界面如图1 2所示。界面控件的属性见表2。

图1 2 MFC软件界面

图1 2 MFC软件界面   Download the original image.

5.2 全局变量和函数

全局变量和函数如表3和表4所示。

5.3 实时读取组态王变量

利用定时器函数实时读取组态王变量信息, 定时器运行时间间隔为100毫秒, 与组态王变量采集频率和运行系统基准频率相同。设置定时器之前需要在Resource.h头文件或M F C对话框文件MFCApplication1Dlg.h中添加定时器标签:

表2 MFC软件界面设计控件列表    Download the original table.

表2 MFC软件界面设计控件列表

表3 Visual C++工程变量表    Download the original table.

表3 Visual C++工程变量表

表4 Visual C++工程函数表    Download the original table.

表4 Visual C++工程函数表

#define IDC_TIMER_KINGVIEW 103

定时器及读取组态王变量函数具体实现代码如下所示:

5.4 控件消息函数的实现

添加表4中的四个按钮控件消息函数, 以及组态王控件四个消息函数, 共八个函数。其中, 在登录组态王服务器成功的消息函数中启动读取变量信息的定时器。具体实现代码如下:

以上方法实现了Visual C++与组态王的通信, 在测试中V C软件与组态王通讯稳定, 达到了V C对轴旋转电机控制及角度实时监视的目的。组态王的Kv Tcpip Client Ocx通讯控件包含了更多的通讯控制及消息的函数, 这些函数及使用方法在组态王用户手册[1]中有详细描述。

6 结束语

本文利用组态王提供的Kv Tcpip Client Ocx通信控件实现了Visual C++对组态王的数据变量的实时读取与控制。本文以轴旋转控制为测试背景, 从组态王系统的设置、组态王通信控件在V C项目中的调用以及通信具体代码等几个方面对实现方法进行了详细的说明。本文利用Active X控件的方法比DDE和OPC等方法使用更加便捷, 并且与最新的开发软件系统有很好的兼容性。利用Visual C++强大的开发功能, 可以在数据分析、控制算法、打印报表、报警监视等多方面对组态王的功能进行扩展, 从而可以开发功能更强大的工控系统。