APP下载

LabWindows/CVI调用动态链接库与PLC实现以太网通信

2016-04-06孔令刚范多旺夏荣斌兰州交通大学国家绿色镀膜技术与装备工程技术研究中心甘肃兰州730070常州大成绿色镀膜科技有限公司江苏常州23000

电气传动 2016年1期

孔令刚,范多旺,夏荣斌,2(.兰州交通大学国家绿色镀膜技术与装备工程技术研究中心,甘肃兰州730070;2.常州大成绿色镀膜科技有限公司,江苏常州23000)



LabWindows/CVI调用动态链接库与PLC实现以太网通信

孔令刚1,范多旺1,夏荣斌1,2
(1.兰州交通大学国家绿色镀膜技术与装备工程技术研究中心,甘肃兰州730070;2.常州大成绿色镀膜科技有限公司,江苏常州213000)

摘要:以LabWindows/CVI跨平台调用动态链接库存在的问题为切入点,以调用基于Visual Basic开发的第3方动态链接库为例详细阐述了LabWindows/CVI内嵌的ActiveX控制器向导实现动态链接库的调用过程,以此为基础,在LabWindows/CVI环境下调用omron_plc_ethernet.dll,实现与欧姆龙PLC的工业以太网通信。为LabWindows/CVI应用工业以太网通信提供了一种解决方法,该通信已成功应用于大型连续真空镀膜生产线测控系统,长期运行结果表明稳定可靠。

关键词:虚拟仪器软件;动态链接库;可编程逻辑控制器;以太网通信

LabWindows/CVI是美国NI(national instruments)公司开发的面向计算机测控领域的虚拟仪器软件开发平台,为C语言程序员提供集成开发环境(IDE),在此开发环境中可以创建数据采集、分析和显示以及仪器控制的应用程序;开发IVI仪器驱动程序和创建ActiveX服务器;为其它程序开发C目标模块、动态连接库(DLL)、C语言库等[1-3]。动态链接库技术(DLL)是Windows的一种极其重要的代码共享技术,可为其他可执行文件提供共享函数[4-5]。DLL独立于编程语言,通过导出函数将特定的变量和函数交给应用程序使用。

在LabWindows/CVI环境中,上位机在以太网上采用TCP/IP协议与PLC通信,利用Socket编程,通过IP地址、端口号向PLC发送数据并接收应答数据,通过头文件TCP.H中的TCP/IP函数,向PLC发送命令。需要注意的是,向PLC发送的数据必须进一步按照FINS协议进行封装,接收时需要解开封装,这需要对充分理解FIN协议[6]。为简化应用,OMRON公司或第3方提供通信协议驱动程序FINSGETWAY、动态链接OMRON_ PLC_FINS等提供的接口函数,可以更方便、更可靠地实现上位机与PLC之间的Ethernet通信。

本文主要阐述LabWindows/CVI环境下通过跨平台调用ActiveX DLL实现与欧姆龙PLC进行Ethernet通信的方法。

1 LabWindows/CVI跨平台调用DLL存在的问题

1.1DLL调用的一般方法

DLL调用即将DLL文件映射到用户进程地址空间,然后进行函数调用,调用方法与进程内部一般函数的调用方法相同,Windowins提供隐式调用与显式调用两种方式将DLL映射到进程空间。

隐式调用需要在客户端引入头文件,并在链接时指明dll对应的lib文件位置和名称。此文件包含DLL允许应用程序调用的所有函数列表。LINKER检测应用程序调用了LIB文件中的某个函数时,就会在应用程序EXE文件中加入相关信息。该应用程序运行时,系统会查看这个文件的DLL信息,后将DLL文件映射到地址空间。LabWindows/CVI使用一个外部的DLL时,典型的应用如在调用第3方提供的仪器驱动时,仪器生产厂商会提供一个DLL。但通常不会为CVI这样的编译器提供导入library,但会带有一个C的头文件(.h),包含有DLL中函数的原型。使用对应的头文件在CVI开发环境可以为DLL创建导入library。在CVI中打开头文件,从头文件源代码窗口的菜单栏中选择“Options”,再选择“Generate DLL Import Library”,通过浏览文件的方式选择DLL,生成导入library。

在只提供DLL文件而没有其相关的LIB文件和头文件的情况下,可通过Windows API函数如LoadLibrary(),GetProcAddress(),FreeLibrary()进行显示调用。显示调用能够更加有效地使用内存,编写大型程序时往往使用显示调用。该方法使用LoadLibrary或AfxLoadLibrary函数对DLL进行动态加载;使用GetProcessAdress获得所调用函数的指针,再通过函数指针来调用DLL的导出函数;使用完毕后以Free Library或者Afx-FreeLibrary将DLL从地址空间中卸载。

1.2LabWindows/CVI跨平台调用DLL存在的问题

显式调用DLL时的方法,当生成DLL文件的导出函数列表时,编译器可能改变导出函数的名称,若采用C编译环境,可以在前面加上一个extern“C”来让避免编译器将导出函数改名,也可以给DLL工程中加入一个.def文件,在.def文件中的EXPORTS下面写上你的导出函数的名称例如:EXPORTS void MyFunction();这样在其他应用程序中调用这个导出函数的时候,就不会出现找不到这个函数的问题了(一般情况下,如果找不到函数GetProcAddress()函数的返回值为空),而且如果调用DLL中导出函数的应用程序是其他开发语言编写的程序,用.def这种方法同样适用,而第1种方法就不适用了。但VB-COM组建类DLL不提供LIB文件和头文件,LabWindows/CVI既不能直接采用隐式调用的方法,也不能直接采用显式调用的方法。

2 LabWindows/CVI调用基于VB的DLL

2.1LabWindows/CVI ActiveX控制器向导简介

LabWindows/CVI ActiveX控制器向导为调用ActiveX servers进行C语言的转换。完整的转换步骤如下所示:1)选择Tools»Create ActiveX Controller打开ActiveX控制器向导;2)选择LabWindows/CVIActiveX控制器向导中列出的已在计算机中登记的ActiveX servers或控件;3)控制器向导将按照输入的目标文件名和后缀进行转换,生成LabWindows/CVI仪器面板形式的C代码。如:MyClient.fp,LabWindows/CVI自动生成4个文件,如MyClient.fp,MyClient.sub,MyClient.c,and MyClient.h。

2.2控制器向导转换规则

本文以AServer.Dll命名的ActiveX Server为例来介绍LabWindows/CVI内嵌的ActiveX控制器向导工具进行C语言包装转换的规则和过程,生成的Aobject对象包括2个导出接口,其中接口AInterface1包含AMethod1()方法和AProperty1“整数”属性,接口AInterface2包含AMethod2()方法和AProperty2“整数”属性。Object对象的结构如图1所示。

图1 Object对象的结构示意图Fig.1 Structural diagram of object

2.2.1包装命名约定

ActiveX控制器向导为在ActiveX server中生效的每个接口生成一个函数面板类,每一个函数面板类中向导将生成New,Active和Open函数,函数的命名规则如下:

_New

_Active

_Open

如果同一个的接口被另一个对象应用,函数的命名规则如下:

_New

_Active

_Open

应用上述命名规则,得到下面的函数名:

AServer_NewExampleObject1AInterface1

AServer_NewExampleObject2AInterface1

AServer_NewExampleObject1AInterface1和AServer_NewExampleObject2AInterface1 2个包装函数创建对象的新实例,相当于Visual Basic中的CreateObject函数,在包装函数中,ActiveX对象对应于LabWindows/CVI中的CAObjHandle类型,相当于Visual Basic中的Object类型,通过LabWindows/CVI用户接口库中的函数GetObjHandleFromActiveXCtrl可得到加载面板中该对象的句柄。

CAObjHandle obj1,obj2;

AServer_NewAInterface1(0,1,LOCALE_NEUTRAL,0,&obj1);

AServer_NewAInterface2(0,1,LOCALE_NEUTRAL,0,&obj2).

2.2.2接口中方法与属性包装命名约定

对应于ActiveX接口的函数面板类,LabWindows/CVI ActiveX控制器向导为接口中方法与属性生成包装函数,命名规则如下:

_

_Get

_Set

调用AMethod1:

CAObjHandle obj;

AServer_NewIAInterface1(0,1,LOCALE_ NEUTRAL,0,&obj);

AServer_IAInterface1AMethod1(obj,0);

调用Get,SetAProperty1:

CAObjHandle obj;

int AProp;

AServer_NewIAInterface1(0,1,LOCALE_NEUTRAL,0,&obj);

AServer_IAInterface1GetAProperty1(obj,0,&AProp);

AServer_IAInterface1SetAProperty1(obj,0,42);

当停止使用ActiveX对象时,需调用CA_DiscardObjHandle函数销毁对象句柄,相当于在Visual Basic中将对象设置为Nothing。

CAObjHandle obj;

AServer_NewIAInterface1(0,1,LOCALE_NEUTRAL,0,&obj);

CA_DiscardObjHandle(obj).

3 LabWindows/CVI与欧姆龙PLC的Ethernet通信

首先在WINDOWS系统中登记注册“OMRON_PLC_FINS.dll”,并将dll文件复制到CVI工程目录中,打开CVI工程,从工具下找到“Creative ActiveX Controller Wizard”,打开ActiveX控制器向导,按照1.1中介绍的步骤进行C包装转化,生成“.fp、.sub、.c,、.h”文件。在主函数中调用的过程如下:

int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdLine,int nCmd-Show)

{

CAObjHandle objecthandle=NULL;

OMRONFINS_New_OMRON_PLC_ENT(0,1,LOCALE_NEUTRAL,0,&objecthandle);

OMROFINS_OMRON_PLC_ENTLink(objecthandle,0,pcIP,pcPort,plcIP,plcPort,arg5);

OMRONFINS _OMRON_PLC_ENTCIO_Read(objecthandle,NULL,0,1,&dAry,arg4);

OMRONFINS _OMRON_PLC_ENTCIO_Write(objecthandle,NULL,0,1,&dAry,arg4);

CA_DiscardObjHandle(objecthandle);

return 0;

}

上述基于LabWindows/CVI和OMRON-PLC 的Ethernet通信网络方式可以构建IPC与欧姆龙全系列PLC的M:N(最大32台)控制系统架构,为设计大型生产线测控系统提供稳定可靠的技术方案。该方案已成功应用于大型连续真空镀

膜生产线测控系统,系统结构如图2所示。

图2 生产线Ethernet控制网络示意图Fig.2 Ethernet control diagram of product line

4 结论

通过第3方提供通信协议驱动程序可以方便可靠地实现IPC与欧姆龙PLC之间较为复杂的Ethernet通信,LabWindows/CVI集成的ActiveX控制器向导为跨平台调用ActiveX DLL提供了快捷有效的工具,本文介绍的调用Visual Basic语言的ActiveX servers的方法也同样适用于C++,Java,C#等语言的情况。基于LabWindows/CVI和OMRON-PLC的Ethernet通信网络架构已成功应用于大型连续真空镀膜生产线控制系统,具有很强的可扩展性,长期运行结果表明通信稳定可靠。

参考文献

[1]刘君华.虚拟仪器编程语言LabWindows/CVI教程[M].北京:电子工业出版社,2001.

[2]王建新,隋美丽. LabWindows/CVI虚拟仪器高级应用[M].北京:化学工业出版社,2013.

[3]雷金波,陈进,李毅,等.基于LabWindows/CVI的卷曲机实时状态监测系统[J].计算机工程与应用,2007,43(16):222-224.

[4]耿娟,原亮,吴彩华. DLL在LabWindows/CVI的虚拟仪器中的应用[J].微计算机信息,2006,28(22):115-116.

[5]姜飞,谢致龙,岳蕊霞.对话框方式下的DLL软件混合编程与工程运用[J].电气传动,2007,37(5):49-52.

[6]戴斌,朱建平,袁焱.基于FINS协议的OMRON PLC与上位机以太网通信的实现[J].电子技术,2009,36(9):13-16.

修改稿日期:2015-07-12

Method on Ethernet Communication Between LabWindows /CVI with PLC Via Cross-platform DLL

KONG Linggang1,FAN Duowang1,XIA Rongbin1,2
(1. National Engineering Research Center for Technology and Equipment of Environmental Deposition,Lanzhou Jiaotong University,Lanzhou 730070,Gansu,China;2. Changzhou Dacheng Environmental Deposition Technology Co.,Ltd.,Changzhou 213000,Jiangsu,China)

Abstract:Discussed the problems of LabWindows/CVI cross-platform DLL invoking. Detailed the DLL invoking methods via LabWindows/CVI embedded ActiveX control wizard based on the examples of calling the third-party DLL programmed in Visual Basic. On this basis,we achieved industrial Ethernet communication between LabWindows/CVI with Omron PLC by calling‘omron_plc_ethernet.Dll’,the case has been successfully applied to the measurement and control system of large vacuum coating line.

Key words:virtual instrument software;dynamic link library(DLL);programmable logic controller;ethernet commun-ication

收稿日期:2015-03-17

作者简介:孔令刚(1978-)男,博士研究生,讲师,Email:konglg_1978@163.com

基金项目:国家科技支撑计划项目(2014BF00)

中图分类号:TP391.7

文献标识码:A