WWW_P※LCJS_COM-PLC-)技.术_网
一、引言W1WW_P4LCJS_COM-PLC-技.术_网
现在有很多工业控制产品都支持OPC Server,如西门子SIMATIC NET、WINCC、WINAC、Protool/pro,亚控公司组态王等,这些产品本身在一些需要实现很复杂的数据模型功能上还显得不足,由于支持了OPC,我们就可以在VB或C 上通过OPC获取数据进而实现较复杂的功能(如强大的数据库管理或数据分析)。本文讨论了如何在VB中开发一个动态连接库,以方便开发者实现对OPC服务器的数据采集,将精力更多的放在界面开发和数据处理上。WW.W_PLC※JS_C,OM-PL,C-技.术_网
二、功能设计WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
类型设计为ActiveX Dll,名称:OPC_Dll.dll,可以在VB工程[引用]中加载,加载后通过创建类BCA_OPC的实例来实现OPC数据通讯,BCA_OPC的调用功能如下:W1WW_P4LCJS_COM-PLC-技.术_网
1、配置初始化:Dll_Initial(strConfigFile As String) As BooleanWW.W_PLC※JS_C,OM-PL,C-技.术_网
其中strConfigFile为连接OPC服务器对应的配置文件名称(*.ini),用户建立的配置文件应遵循一定的格式(在下面应用中说明),并且应放在系统目录下(如C:\WINNT下)。配置文件中包含了要连接的OPC服务器名称、log文件名称、变量组定义及对应组内的变量定义(本连接库最多支持1024个变量通讯,对变量组的数目没有限制)。配置成功返回TRUE。WWW_PLCJS@_COM%-PLC-技.术_网
2、连接OPC服务器:ConnectServer(Optional IPAddress As String) As BooleanWWW_PLCJS_COM-PLC-技.术_网
IPAddress为可选的远程OPC服务器所属PC的IP地址,如“192.168.0.1”,如果不提供IPAddress参数,则默认为本机OPC服务器。连接成功返回TRUE。WWcW_PLCJS_COM-PLC-技.术_网
3、配置通讯变量(组态OPC客户机):SetConfiguration() As BooleanWWcW_PLCJS_COM-PLC-技.术_网
根据提供的ini配置文件组态OPC客户机与服务器的变量通讯,组态成功返回TRUE。WWW.PLCJS.COM——可编程控制器技术门户
4、读变量数据:GetData(ItemName As String)WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
ItemName为变量名称,必须与ini配置文件中的变量名称一致。本功能返回该变量的实际数据。WWcW_PLCJS_COM-PLC-技.术_网
5、写变量数据:WriteData(ItemName As String, ItemWriteData As Variant)WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
ItemName为变量名称,ItemWriteData为变量数据。plcjs.技.术_网
三、实现代码WWW_PL※CJS_COM-PLC-技.术_网
1、在VB6.0中新建ActiveX Dll工程,如下图:P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
WWW_PL※CJS_COM-PLC-技.术_网
2、在工程菜单中添加引用,如下图:plcjs.技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
如果系统中没有OPC Automation,你需要安装注册OPC自动化。一般装了OPC支持的软件,系统都支持OPC自动化。WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
3、在工程中添加模块,如下图:WWcW_PLCJS_COM-PLC-技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
模块API_Function为软件所需的一些API函数。WW.W_PLC※JS_C,OM-PL,C-技.术_网
模块Global_constants为一些系统常量WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
类模块BCA_OPC为实现主类WWW_P※LCJS_COM-PLC-)技.术_网
类模块ItemInfo和ItemsInfo实现变量信息的封装P.L.C.技.术.网——可编程控制器技术门户
4、以下为各模块的程序代码:WWcW_PLCJS_COM-PLC-技.术_网
API_Function:WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
Option ExplicitP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
----------------------------------WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
获取一个与给定初始化文件指定域中的一个键相联系的整数值(1)——可——编——程——控-制-器-技——术——门——户
Public Declare Function GetPrivateProfileInt Lib kernel32 Alias _WW.W_PLCJS_COM-PLC-技.术_网
GetPrivateProfileIntA (ByVal lpApplicationName As String, ByVal lpKeyName As String, _W1WW_P4LCJS_COM-PLC-技.术_网
ByVal nDefault As Long, ByVal lpFileName As String) As LongWWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
从一个初始化文件中获取指定段的所有键和值(2)WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
Public Declare Function GetPrivateProfileSection Lib kernel32 Alias _——可——编——程——控-制-器-技——术——门——户
GetPrivateProfileSectionA (ByVal lpAppName As String, ByVal lpReturnedString As String, _WWW_PLC※JS_COM-PmLC-技.术_网
ByVal nSize As Long, ByVal lpFileName As String) As LongWW.W_PLCJS_COM-PLC-技.术_网
获取初始化文件中的制定断下的一个字符串(3)WWW_P※LCJS_CO※M-PLC-技-.术_网
Public Declare Function GetPrivateProfileString Lib kernel32 Alias _plcjs.技.术_网
GetPrivateProfileStringA (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _WWcW_PLCJS_COM-PLC-技.术_网
ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, _WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
ByVal lpFileName As String) As LongWWW.PLCJS.COM——可编程控制器技术门户
Global_constants:plcjs.技.术_网
Option ExplicitWWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
Option Base 1W1WW_P4LCJS_COM-PLC-技.术_网
Global constrantsWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
------------------------------WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
Global Const English = &H409WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
Global Const OPC_DS_CACHE = 1WWW_PLCJS_COM-PLC-技.术_网
Global Const OPC_DS_DEVICE = 2WWcW_PLCJS_COM-PLC-技.术_网
BCA_OPC:WWW_PLC※JS_COM-PmLC-技.术_网
Option ExplicitW1WW_P4LCJS_COM-PLC-技.术_网
Option Base 1P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
Interface Objects 接口对象WW.W_PLC※JS_C,OM-PL,C-技.术_网
----------------------------------------------------------------------------WW.W_PLC※JS_C,OM-PL,C-技.术_网
必须使用WithEvents来申明对象OPCServer和OPCGroup,WWW_P※LCJS_COM-PLC-)技.术_网
WithEvents指定申明的对象用于处理对象的事件WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
Dim WithEvents ServerObj As OPCServer 定义OPCServerWWW_PLCJS_COM-PLC-技.术_网
Dim GroupObj As OPCGroup 定义OPCGroupWWW_PLCJS@_COM%-PLC-技.术_网
Dim WithEvents GroupCollection As OPCGroups 定义OPCGroupsP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户