哪里可以买到OPC开发库 点击:3319 | 回复:14



zhong_jeffrey

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 0回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2004年2月06日
发表于:2004-04-17 13:23:00
楼主
各位,我们公司现在想开发一个套基于OPC的软件,考虑到进度和人力想买一套比较全的OPC开发库(VC++),我以前用过一些国产的OPC开发包,如柯林等,这些开发包只实现基础的OPC对象和接口.请问现在有什么比较全的OPC开发库,我知道Wanderware和KepWare的OPC开发库不错,不知道中国什么地方有代理,我在上海,如何去购买?



deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2004-04-19 09:48:00
1楼
WONDERWARE opc kit 只能用于intouch 集成. 和ifix opc tool kit 类似。 功能比较全的opc 有 FactorySoft 和wintech opc .

tan_r

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2006年3月13日
发表于:2006-03-15 13:56:00
2楼
opc server 集成开发平台

opc 集成开发平台是比opc server开发工具更接近opc server开发的一个应用环境,在dotnet环境开发。
它将opc server的开发简化为:1、item的定义(即对sql server数据表操作,集成环境已集成操作界面)及 2、驱动开发(驱动程序是一个独立的模块,由集成环境动态加载。集成环境已开发定义了驱动摸板,开发者只要按照摸板写出驱动程序即可)

对于快速实现工控opc接口的用户,该集成环境是一个理想的工具。
为方便用户操作我们可以提供常见的串口驱动源码,也可以向用户提供modbus、cdt、tcp/ip等协议的驱动产品或源码。
联系方式:   tan_r@tom.com

孙胜

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2006年3月15日
发表于:2006-03-15 23:16:00
3楼
本人从事软件开发8年,有丰富的开发经验,年前自己开发了OPC DA Server,实现了2.05版本,发行的形式是SDK,总共11个API函数,5000点的响应时间为150毫秒,有需要该SDK和源代码的公司或个人和本人联系oy.2008.bj@gmail.com或oy_2008_bj@sina.com,谢谢。

工控帮

  • 精华:0帖
  • 求助:0帖
  • 帖子:63帖 | 675回
  • 年度积分:0
  • 历史总积分:1418
  • 注册:2001年7月06日
发表于:2006-03-16 12:59:00
4楼
偶的小小工控论坛(HTTP://WWW.OPC-CHINA.COM)满一周岁了。专业的OPC论坛。

libieshan

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 9回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2006年2月20日
发表于:2006-03-23 17:38:00
5楼
我有OPCServer DA2.05的源码,可联系我libieshan@gmail.com

coverlove

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 41回
  • 年度积分:0
  • 历史总积分:142
  • 注册:2004年1月05日
发表于:2011-02-22 17:20:17
6楼
OPC开发套件-数据访问服务器开发工具包3.8

下载地址:http://www.xdowns.com/soft/38/110/2011/Soft_72907.html

OPC开发套件开发包以标准动态连接库(DLL)形式提供二次开发接口,与 Win98、WinNT、
WIN2000、 WIN2003系统完全兼容。OPC开发软件包由服务器软件包、客户端开发软件包组成, 完全封装了 OPC 技术和COM技术实现细节,使二次开发的程序员无需 OPC规范和COM技术底层细节,降低服务器和客户端程序开发的复杂程度和减少了熟悉OPC 技术的时间,只需专注于自己熟悉的数据采集和过程控制,其他的一切都交给软件开发包来完成。由于软件开发包以标准的WINDOWS API方式提供,故可以在目前主流的所有开发语言和开发工具中得到支持。

数据访问服务器工具包于 2004 年 6 月开始研发,吸取了各大OPC开发包的优点,经过多次升级,实现了对 OPC数据访问服务器规范(以下简称DA 规范)的全面支持(支持规范版本 1.0、2.0、3.0)。软件包具有以下特点:
完全符合DA 标准,通过OPC 基金会兼容性产品测试
完全的封装使二次开发人员不需要了解COM 技术和OPC 规范接口细节
工具包支持多种开发语言,如 VC、BC、VB、Delphi、C# 等
逻辑清晰、功能明确的二次开发函数保证用户进行二次开发简单容易
支持同步、异步数据通讯方式
支持自定义属性读写
支持树型地址空间
支持动态创建标签
支持分布式体系结构
高效(20ms/5000 标签)
良好的兼容性(支持所有组态软件、DCS 系统、Scada 系统)
优良的稳定性,软件运行 CPU 占用率(2% 10000 个节点)
完备的产品升级和完善的技术支持,提供现场技术服务和远程技术指导

opcpro

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 48回
  • 年度积分:0
  • 历史总积分:386
  • 注册:2008年9月26日
发表于:2011-02-28 18:59:47
7楼

本人有各种opc开发工具,需要的可联系我(QQ:250561779)

opcfan

  • 精华:0帖
  • 求助:0帖
  • 帖子:62帖 | 58回
  • 年度积分:0
  • 历史总积分:667
  • 注册:2004年9月29日
发表于:2011-03-09 15:55:05
8楼

本人有各种opc开发工具,需要的可联系我(QQ:760807322)

teakie

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:21
  • 注册:2010年3月31日
发表于:2011-04-24 17:21:12
9楼

需要OPC开发工具,可以联系我:QQ 490853391

西北老伙计

  • 精华:1帖
  • 求助:0帖
  • 帖子:1帖 | 12回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2008年7月15日
发表于:2011-05-09 21:58:21
10楼


提供性能稳定,易开发,价格低廉的OPC开发套件,支持DA 1.0,2.0,3.0,包括服务器端和客户端开发包Ver3.8


OPC服务器端开发包下载地址:http://www.xdowns.com/soft/38/110/2011/Soft_72907.html

OPC客户端端开发包下载地址:http://www.oyksoft.com/soft/18132.html

OPC开发包详情:http://item.taobao.com/item.htm?id=9474686238


//OPC服务器端API部分接口定义

/// <summary>
/// 初始化系统运行参数和分配服务器资源
/// </summary>
/// <param name="lpCLSID_Svr">服务器标示,以NULL结尾</param>
/// <param name="uServerRate">服务器支持的客户端最快异步刷新速率</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall CreateServer(LPCSTR lpCLSID_Svr, unsigned long uServerRate);

/// <summary>
/// 释放服务器资源
/// </summary>
/// <returns>void</returns>
BmOpcDaSvr_API VOID __stdcall FreeServer();

/// <summary>
/// 构造服务器地址空间(标签列表的组织形式)
/// </summary>
/// <param name="hTag">父标签句柄,对于构造平面型地址空间(只有一层的地址空间),hTag=0;对于树型地址空间的第一层节点,hTag=0</param>
/// <param name="lpName">标签名称</param>
/// <param name="Value">标签的初始值,其中vt域所定义的数据类型被自动认为为该标签的标准数据类型,如果想修改改标签数据类型,请调用SetTagProperty函数</param>
/// <param name="wQuality">标签的初始数据质量</param>
/// <param name="AccessRight">访问权限,0-不能读写(例如树型空间的枝干节点),1-只读,2-只写,3-可读可写</param>
/// <returns>标签句柄</returns>
BmOpcDaSvr_API unsigned long __stdcall RegTag(unsigned long hTag,LPCSTR lpName,VARIANT Value,unsigned short wQuality,unsigned short AccessRight);


/// <summary>
/// 构造服务器地址空间(标签列表的组织形式)
/// 函数增加新节点,设置标签数据类型和初始化标签值(按照给定数据类型),设置数据质量=64(不确定)
/// </summary>
/// <param name="hTag">父标签句柄,对于构造平面型地址空间(只有一层的地址空间),hTag=0;对于树型地址空间的第一层节点,hTag=0</param>
/// <param name="lpName">标签名称</param>
/// <param name="wDatatype">标签的数据类型,3-Integer 4-Single 5-Double 8-String 11-Boolean</param>
/// <param name="AccessRight">访问权限,0-不能读写(例如树型空间的枝干节点),1-只读,2-只写,3-可读可写</param>
/// <returns>标签句柄</returns>
BmOpcDaSvr_API unsigned long __stdcall RegTagEx(unsigned long hTag,LPCSTR lpName,unsigned short wDatatype,unsigned short AccessRight);

/// <summary>
/// 删除标签,尽量避免调用此函数
/// </summary>
/// <param name="hTag">服务器标识</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall UnregTag(unsigned long hTag);

/// <summary>
/// 设置地址空间路径分隔符
/// </summary>
/// <param name="Qualifier">树型地址空间标签全路径分隔符,默认为‘.‘</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall SetTagQualifier(char Qualifier);

/// <summary>
/// 增加标签支持的属性
/// </summary>
/// <param name="hTag">标签句柄</param>
/// <param name="lpName">属性名称</param>
/// <param name="dwPropertyID">属性标识,默认支持6个属性,例如报警限、说明、条件等</param>
/// <param name="lpDescription">属性描述</param>
/// <param name="value">属性值</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall AddTagProperty(unsigned long hTag,LPCSTR lpName,unsigned long dwPropertyID,LPCSTR lpDescription,VARIANT value);

/// <summary>
/// 增加标签支持的属性
/// 属性值按照属性值数据类型进行初始化
/// </summary>
/// <param name="hTag">标签句柄</param>
/// <param name="lpName">属性名称</param>
/// <param name="dwPropertyID">属性标识,默认支持6个属性,例如报警限、说明、条件等</param>
/// <param name="lpDescription">属性描述</param>
/// <param name="wDataType">属性值数据类型</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall AddTagPropertyEx(unsigned long hTag,LPCSTR lpName,unsigned long dwPropertyID,LPCSTR lpDescription,unsigned short wDataType);

/// <summary>
/// 更新标签的属性值
/// </summary>
/// <param name="hTag">标签句柄</param>
/// <param name="dwPropertyID">属性标识</param>
/// <param name="Value">属性值</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall SetTagProperty(unsigned long hTag, unsigned long dwPropertyID, VARIANT Value);


/// <summary>
/// 更新标签的数据值和时间戳
/// </summary>
/// <param name="hTag">标签句柄</param>
/// <param name="Value">标签值</param>
/// <param name="wQuality">标签值质量</param>
/// <param name="TimeStamp">标签刷新时间</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall UpdateTagWithTimeStamp(unsigned long hTag , VARIANT Value,unsigned short wQuality,FILETIME TimeStamp);

/// <summary>
/// 更新标签的数据值
/// 标签的刷新时间按照OPC服务器时间设定
/// </summary>
/// <param name="hTag">标签句柄</param>
/// <param name="Value">标签值</param>
/// <param name="wQuality">标签值质量</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall UpdateTag(DWORD hTag, VARIANT Value,unsigned short wQuality);

/// <summary>
/// 设置工具包写节点的回调函数
/// </summary>
/// <param name="lpCallback">回调函数指针</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall SetWriteCallback(WRITECALLBACK lpCallback);

/// <summary>
/// 设置工具包写节点的回调函数,支持值之外的属性值回写
/// </summary>
/// <param name="lpCallback">回调函数指针</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaSvr_API BOOL __stdcall SetWriteCallbackEx(WRITECALLBACKEX lpCallback);


//OPC客户端API部分接口定义

/// <summary>
/// 初始化系统运行参数和分配资源,调用此函数初始化工具包参数,分配资源等。调用此函数后工具才能正常工作。
/// </summary>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaClt_API BOOL __stdcall BMDAC_Init();


/// <summary>
/// 释放工具包占用的资源等
/// </summary>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaClt_API BOOL __stdcall BMDAC_Uninit();


/// <summary>
/// 连接OPC服务器, 本机访问ComputerName 设为NULL即可
/// </summary>
/// <param name="ComputerName">主机名称或IP地址</param>
/// <param name="ServerClassID">服务器标识,是一个GUID</param>
/// <param name="Version">版本标志</param>
/// <returns>服务器连接句柄</returns>
BmOpcDaClt_API DWORD __stdcall BMDAC_Connect(LPCSTR ComputerName, LPCSTR ServerClassID, DWORD Version);


/// <summary>
/// 断开服务器连接
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaClt_API BOOL __stdcall BMDAC_Disconnect(DWORD ServerHandle);


/// <summary>
/// 获取计算机上注册的OPC服务器
/// </summary>
/// <param name="ComputerName">主机名称或IP地址</param>
/// <param name="Version">服务器启动时间</param>
/// <param name="ServerNames">服务器当前时间</param>
/// <param name="ServerClassIDs">最后数据更新时间</param>
/// <returns>服务器数量</returns>
BmOpcDaClt_API DWORD __stdcall BMDAC_GetServers(LPCSTR ComputerName, DWORD Version, VARIANT* ServerNames, VARIANT* ServerClassIDs);



/// <summary>
/// 获取服务器的地址空间类型
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <param name="NameSpace">服务器启动时间,OPC_NS_HIERARCHIAL=1;树型地址空间 OPC_NS_FLAT=2;平面型地址空间</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaClt_API BOOL __stdcall BMDAC_GetNameSpace(DWORD ServerHandle,WORD* NameSpace);



/// <summary>
/// 移动当前浏览节点
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <param name="Direction">移动方向,OPC_BROWSE_UP =1 移动到上级节点,忽略NodeName OPC_BROWSE_DOWN =2 移动到下级节点 OPC_BROWSE_TO =3 直接移动到某一个节点</param>
/// <param name="NodeName">节点名称</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaClt_API BOOL __stdcall BMDAC_ChangeBrowsePosition(DWORD ServerHandle,WORD Direction,LPCSTR NodeName);


/// <summary>
/// 过滤检索节点
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <param name="FilterType">节点类型过滤,1 枝节点, 2 叶节点</param>
/// <param name="FilterString">节点名称过滤</param>
/// <param name="FilterDataType">数据类型过滤</param>
/// <param name="FilterAccessRight">访问权限过滤, 0- 不能读写 1- 只读 2- 只写 3- 可读可写</param>
/// <param name="ItemNames">节点名称</param>
/// <returns>返回满足条件的节点个数</returns>
BmOpcDaClt_API DWORD __stdcall BMDAC_BrowseItems(DWORD ServerHandle,WORD FilterType,LPCSTR FilterString,WORD FilterDataType,WORD FilterAccessRight,VARIANT* ItemNames);

/// <summary>
/// 增加组
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <param name="Name">标签全名</param>
/// <param name="Active">属性标识</param>
/// <param name="UpdateRate">属性值</param>
/// <param name="TimeBias">属性值</param>
/// <param name="DeadBand">属性值</param>
/// <param name="dsLCID">属性值</param>
/// <returns>组句柄</returns>
BmOpcDaClt_API DWORD __stdcall BMDAC_AddGroup(DWORD ServerHandle, LPCSTR Name, BOOL Active, DWORD UpdateRate, DWORD TimeBias,float DeadBand, DWORD dsLCID);

/// <summary>
/// 注册标签
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <param name="GroupHandle">组句柄</param>
/// <param name="ItemFullName">标签全名</param>
/// <returns>标签句柄</returns>
BmOpcDaClt_API DWORD __stdcall BMDAC_AddItem(DWORD ServerHandle,DWORD GroupHandle,LPCSTR ItemFullName);


/// <summary>
/// 写入标签
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <param name="GroupHandle">组句柄</param>
/// <param name="ItemHandle">标签句柄</param>
/// <param name="Value">写入值</param>
/// <param name="DoAsync">写入方式,true 异步写入 false 同步写入</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaClt_API BOOL __stdcall BMDAC_WriteItem(DWORD ServerHandle,DWORD GroupHandle,DWORD ItemHandle,VARIANT Value, BOOL DoAsync);


/// <summary>
/// 读取标签
/// </summary>
/// <param name="ServerHandle">服务器连接句柄</param>
/// <param name="GroupHandle">组句柄</param>
/// <param name="ItemHandle">标签句柄</param>
/// <param name="Value">标签句柄</param>
/// <param name="pTimeStamp">标签句柄</param>
/// <param name="pQuality">标签句柄</param>
/// <returns>TRUE成功,FALSE失败</returns>
BmOpcDaClt_API BOOL __stdcall BMDAC_ReadItem(DWORD ServerHandle,DWORD GroupHandle,DWORD ItemHandle,VARIANT* Value, FILETIME* pTimeStamp,WORD* pQuality);



ABcs

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 85回
  • 年度积分:0
  • 历史总积分:250
  • 注册:2005年10月22日
发表于:2011-08-15 11:58:26
11楼

可 以考虑使用本公司的opctoolworx开发包,标准的OPC开发工具,联系alexchen_wr@yeah.net

truesoft

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 2回
  • 年度积分:0
  • 历史总积分:35
  • 注册:2011年9月27日
发表于:2011-09-27 19:04:23
12楼

Kingso OPC Server服务器和客户端源代码,支持Modbus RTU,Modbus TCP,IEC61850,CANopen协议等。您需求OPC Server源代码或其他协议
联系 truesoft@163.com


1.驱动SDK --- Drivers SDK
为了实现不同厂家和设备定义的通讯协议,每个驱动实现不同功能。当您正在开发自己的产品时,自己也可以写驱动,Drivers_SDK目录下为您提供了开发例程:
SPL_Plugin目录包含驱动接口头文件;
lib目录包含驱动接口库文件SPL_Plugin_urt.lib;
Drivers目录下提供了OPSSimulator驱动的源代码。
Common目录下提供了丰富的软件界面皮肤类的源代码、优秀的线程类源代码。

2.应用程序SDK --- Application SDK
SDK_VC6目录提供了支持VC6的本地OPC Client连接例程和远程网路OPC Client连接源代码例程,同时提供了VC6版本的开发本地OPC Client连接的静态库(OPCSink.lib)和开发远程OPC Client连接的静态库(NetOPCSink.lib)。
SDK_VC9目录提供了支持VC9的另外一种远程网路OPC Client连接源代码例程,同时提供了VC9版本的开发本地OPC Client连接的静态库(OPCSink.lib)和开发远程OPC Client连接的静态库(NetOPCSink.lib)。

//--------------------------------------------------------------------------------
// 模块名 : OPC客户端接收器接口实现类
// 文件名 : OPCSinkObject.h
// 相关文件 :
// 文件功能 : OP客户端C接收器数据读写回调功能接口
// 作者 : 胡文斌
// 邮箱 : truesoft@163.com
// 修改日期 : 2010-1-1
// 版本 : 1.0001
//--------------------------------------------------------------------------------

#pragma once

#if defined ( SINK_MAKE_DLL )
#define OPCSINK_API __declspec( dllexport )
#elif defined ( SINK_USE_DLL )
#define OPCSINK_API __declspec( dllimport )
#else
#define OPCSINK_API
#endif


#include "SinkDataInterface.h"

//////////////////////////////////////////////////////////////////////////
// Interface class for working with Network OPC server
// all function returning S_OK for success

class COPCSinkObject
{
public:

/// Set server name ( e.g. "Kingso.OPCServer" )
virtual void SetOPCProgID(LPCTSTR lpszProgID) = 0;

virtual void SetGroupName(LPCTSTR lpszGroupName) = 0;

virtual void SetTimeBase(DWORD dwTimeBase) = 0;

virtual void SetUpdateRate(DWORD dwMinUpdateRate) = 0;

/// Set XML parameter
virtual void SetOPCParam(LPCTSTR lpszXMLParam) = 0;

/// To Initialize a sink
virtual HRESULT Initialize(void) = 0;

/// To Uninitialize a sink
virtual HRESULT Uninitialize(void) = 0;

/// add tag to sink database
virtual void AddTag( DWORD dwTagID, LPCTSTR lpszTagName, VARTYPE varType, WORD wAccessRight = 0x01) = 0;

/// write a tag value
virtual void WriteTag( DWORD dwTagID, LPCTSTR lpszTagName, VARTYPE varType, WORD wAccessRight, LPCTSTR lpszTagValue = NULL) = 0;

/// remove a tag
virtual void RemoveTag(DWORD dwTagID) = 0;

/// set tag Active state
virtual void SetItemActive(DWORD dwTagID, BOOL bActive) = 0;

/// To start a server
virtual HRESULT StartServer(void) = 0;

/// To stop process of a server
virtual HRESULT StopServer(void) = 0;

// set the interface object of data callback
virtual HRESULT SetCallbackObject( CSinkDataInterface * pDataInterface) = 0;

// Called to test connection to server.
virtual BOOL IsOPCSinkAlive() = 0;

};


extern "C"
{
// Class construct for OPCSink objects
//
OPCSINK_API COPCSinkObject* WINAPI CreateOPCSinkObject(void);

// Destroyer for OPCSink objects
//
OPCSINK_API long WINAPI DestroyOPCSinkObject(COPCSinkObject* pServer);
}

西北老伙计

  • 精华:1帖
  • 求助:0帖
  • 帖子:1帖 | 12回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2008年7月15日
发表于:2011-10-09 23:55:47
13楼
OPC开发包套件-OPC服务器开发工具包

OPC开发包套件-OPC客户端开发工具包

OPC开发包套件-OPC报警与事件服务器开发包



前言

OPC(OLE for Processing Control)是工控行业的软件接口标准,主要用来解决控制

系之间或控系统与设备之间数据交换的标准化问题。OPC 规范包括数据访问服务器(DA)、

历史数据访问服务器(HDA)、事件与报警服务器(A/E)、XML 数据访问服务器(XML DA)、等一系列标准规范。OPC规范由OPC基金会负责制定并对OPC产品进行认证。



OPC规范具有如下的优点:

(1) 统一的接口标准简化了软件的开发和减低了系统维护的费用

(2) 充分的开放性和标准化特性,保证高度柔韧性系统的实现

(3) 持续的版本升级,保证了规范的先进性

(4) 支持DCOM、.Net架构



本文档介绍OPC数据访问服务器开发软件包(以下简称软件包)的特点和如何利用开发

软件包进行OPC 数据访问服务器(以下简称DA)的开发。

本文共分为四个部分:

u 介绍了OPC的基本概念;

u DA服务器的开发流程;

u 详细描述了工具包的接口描述;

u 附录部分介绍了一些与DA开发相关的OPC规范和其他内容。

国内著名下载网站绿盟提供下载:

http://www.xdowns.com/soft/38/110/2011/Soft_72907.html



RayFile提供下载:

http://www.rayfile.com/zh-cn/files/9be7d2b0-70a9-11e0-af58-0015c55db73d/

淘宝介绍:

http://yahobaby.taobao.com/?search=y&scid=309253921&scname=T1BDv6q3oszXvP4%3D&checkedRange=true&queryType=cat&stp=79


1、软件包简介
1.1.OPC软件包简介

OPC工具包产品以标准动态连接库(DLL)形式提供二次开发接口,与Win98、WinNT、

WIN2000、WIN2003系统完全兼容。OPC开发软件包由服务器软件包、客户端开发软件包组成,完全封装了OPC技术和COM技术实现细节,使二次开发的程序员无需OPC规范和COM技术底层细节,降低服务器和客户端程序开发的复杂程度和减少了熟悉OPC技术的时间,只需专注于自己熟悉的数据采集和过程控制,其他的一切都交给软件开发包来完成。由于软件开发包以标准的WINDOWS API方式提供,故可以在目前主流的所有开发语言和开发工具中得到支持。
1.2.软件包的特点

数据访问服务器工具包于2004年6月开始研发,吸取了各大OPC开发包的优点,经过多次升级,实现了对OPC数据访问服务器规范(以下简称DA规范)的全面支持(支持规范版本1.0、2.0、3.0)。软件包具有以下特点:

n 完全符合DA标准,通过OPC基金会兼容性产品测试

n 完全的封装使二次开发人员不需要了解COM技术和OPC规范接口细节

n 工具包支持多种开发语言,如VC、BC、VB、Delphi、C#等

n 逻辑清晰、功能明确的二次开发函数保证用户进行二次开发简单容易

n 支持同步、异步数据通讯方式

n 支持自定义属性读写

n 支持树型地址空间

n 支持动态创建标签

n 支持分布式体系结构

n 高效(20ms/5000标签)

n 良好的兼容性(支持所有组态软件、DCS系统、Scada系统)

n 优良的稳定性,软件运行CPU占用率(2% 10000个节点)

n 完备的产品升级和完善的技术支持,提供现场技术服务和远程技术指导


2.数据访问服务器开发流程
2.1.OPC服务器的基本结构



OPC服务器应用程序由两个主要部分构成:OPC软件开发包和底层数据源接口。OPC软件开发包DLL以标准Windows API方式调用,底层数据源接口根据实际情况进行开发。数据源接口根据实际的硬件产品通讯规约、软件数据交换接口标准和数据库访问标准进行开发。数据源可以针对硬件设备、软件通讯接口和数据库等等。

OPC服务器应用程序中还需要一个重要的环节:OPC开发包与数据源接口之间的数据交

换,这个功能由二次开发人员完成。二次开发人员需要实现OPC地址空间标签和数据源标签的对应关系的建立、实现OPC工具包的设备写方法和设备读方法的实现。
2.2.基本开发流程

2.2.1.OPC开发包授权

根据机器码和点数向开发商索取授权文件或者无授权文件时可以连续运行2小时。


2.2.2. CreateServer



初始化系统运行参数和分配服务器资源


2.2.3. SetWriteCallBack、SetReadCallback



注册I/O通讯回调函数


2.2.4. SetServerNotify、SetGroupNotify



注册工具包信息回调函数


2.2.5. RegTag、AddTagProperty?



注册标签和标签属性


2.2.6. UpdateTag、SetTagProperty



更新标签数据和标签属性值


2.2.7. FreeServer



释放服务器资源


其它

RegServer、UnregServer注册和注销服务器



SetVensionInfo 设置服务器开发厂商信息



【注】由于OPC服务器采用COM技术,从COM的角度看,服务器是一个标准的COM组件,必须支持标准的COM注册技术。同时,为了发挥服务器浏览、激活、访问管理等特性,也要求在使用前注册服务器。

【注】 BmOpcDaSvr_API被定义为:#define BmOpcDaSvr_API extern "C" __declspec(dllimport)



3.工具包的接口描述
3.1.注册和注销函数
3.1.1. RegServer

【函数原型】

/// <summary>

///注册服务器

/// </summary>

/// <param name="szCLSID">服务器标识</param>

/// <param name="szName">服务器名称</param>

/// <param name="szDesc">服务器描述</param>

/// <param name="szExePath">服务器可执行程序路径</param>

/// <returns>TRUE成功,FALSE失败</returns>

BmOpcDaSvr_API BOOL __stdcall RegServer(LPCSTR szCLSID, LPCSTR szName,LPCSTR szDesc,LPCSTR szExePath)

【功能】

注册服务器

【参数】

LPCSTR szCLSID 服务器标识

LPCSTR szName服务器名称

LPCSTR szDesc服务器描述

LPCSTR szExePath服务器可执行程序路径

【返回值】

BOOL:true成功,false失败

【说明】

服务器的类标识UIID值,可以由visiual studio 安装程序中genguid.exe产生,也可以

在DELPHI(Cbuilder)代码编辑器中按下"ctrl+shift+G"产生。

服务器的名称一般按照通用表示法进行编写,采用三段式格式(产品名.厂商名.版本号)

每段用"."隔离,例如"VBDEMOHDS.BAIMA.2",就表示白马软件工作室的 VBDEMO

历史数据访问服务器,版本是2.0。具体格式可以由用户自行设定。
3.1.2. UnregServer

【函数原型】

/// <summary>

///注销服务器

/// </summary>

/// <param name="szCLSID">服务器标识</param>

/// <param name="szName">服务器名称</param>

/// <returns>TRUE成功,FALSE失败</returns>

BmOpcDaSvr_API BOOL __stdcall UnregServer(LPCSTR szCLSID, LPCSTR szName)

【功能】

注销服务器

【参数】

LPCSTR szCLSID 服务器标识

LPCSTR szName 服务器名称

【返回值】

BOOL:true成功,false失败

【说明】


3.1.3. RegService

【函数原型】

/// <summary>

///注册系统服务

/// </summary>

/// <param name="szServiceName">服务名称</param>

/// <param name="szDesc">服务描述</param>

/// <param name="szExePath">服务可执行程序路径</param>

/// <returns>TRUE成功,FALSE失败</returns>

BmOpcDaSvr_API BOOL __stdcall RegService(LPCSTR szServiceName,LPCSTR szDesc,LPCSTR szExePath)

【功能】

注册系统服务

【参数】

LPCSTR szServiceName 服务名称

LPCSTR szDesc 服务描述

LPCSTR szExePath 服务可执行程序路径

【返回值】

BOOL:true成功,false失败

【说明】


3.1.4. UnregService

【函数原型】

/// <summary>

///注销系统服务

/// </summary>

/// <param name="szServiceName">服务名称</param>

/// <returns>TRUE成功,FALSE失败</returns>

BmOpcDaSvr_API BOOL __stdcall UnregService(LPCSTR szServiceName)

【功能】

注销系统服务

【参数】

LPCSTR szServiceName 服务名称

【返回值】

BOOL:true成功,false失败

【说明】

注销系统服务


3.2.服务器函数
3.2.1. CreateServer

【函数原型】

/// <summary>

///初始化系统运行参数和分配服务器资源

/// </summary>

/// <param name="lpCLSID_Svr">服务器标示,以NULL结尾</param>

/// <param name="uServerRate">服务器支持的客户端最快异步刷新速率</param>

/// <returns>TRUE成功,FALSE失败</returns>

BmOpcDaSvr_API BOOL __stdcall CreateServer(LPCSTR lpCLSID_Svr, unsigned long uServerRate)

【功能】

初始化系统运行参数和分配服务器资源

【参数】

LPCSTR lpCLSID_Svr 服务器标识

UINT uServerRate 服务器支持的客户端最快异步刷新速率

【返回值】

BOOL:true成功,false失败

【说明】

服务器支持的客户端最快异步刷新速率是指在客户端进行异步方式进行数据刷新时,服

务器所能提供的最快的刷新速率。刷新速率需要根据具体的数据源通讯进行设置。例如串口

设备的通讯速率很慢,即使提高服务器的刷新速率也不会很快通知客户端,因为数据采集没

有完成,数据没有更新所以客户端也不会很快得到新的数据。


3.2.2. FreeServer

【函数原型】

/// <summary>

///释放服务器资源

/// </summary>

/// <returns>void</returns>

BmOpcDaSvr_API VOID __stdcall FreeServer()

【功能】

释放服务器资源

【参数】



【返回值】




3.2.3. Shutdown

【函数原型】

/// <summary>

///关闭服务器,通知所有客户端断开连接

/// </summary>

/// <returns>void</returns>

BmOpcDaSvr_API VOID__stdcall ShutDown()

【功能】

强制关闭服务器,通知所有客户端断开连接

【参数】



【返回值】




3.2.4. SetServerState

【函数原型】

/// <summary>

///设置服务器的运行状态

/// </summary>

/// <param name="SvrState">服务器运行状态</param>

/// OPC_STATUS_RUNNING = 1

/// OPC_STATUS_FAILED = 2

/// OPC_STATUS_NOCONFIG = 3

/// OPC_STATUS_SUSPENDED = 4

/// OPC_STATUS_TEST = 5

/// <returns>void</returns>

BmOpcDaSvr_API VOID __stdcall SetServerState(unsigned short SvrState)

【功能】

设置服务器的运行状态

【参数】

WORD SvrState 运行状态

【返回值】



【说明】

OPC_STATUS_RUNNING = 1,

OPC_STATUS_FAILED = 2,

OPC_STATUS_NOCONFIG = 3,

OPC_STATUS_SUSPENDED = 4,

OPC_STATUS_TEST = 5


.............


3.6.4. SetTagNotify

【函数原型】

/// <summary>

///设置工具包未注册标签引用操作通知函数,把工具包的未注册标签引用操作信息传递给二次开发程序

/// </summary>

/// <param name="lpCallback">回调函数指针</param>

/// <returns>TRUE成功,FALSE失败</returns>

BmOpcDaSvr_API BOOL __stdcall SetTagNotify(TAGNOTIFY lpCallback)

【功能】

设置工具包未注册标签引用通知函数

【参数】

CALLBACKTAG lpCallback 回调函数指针

【返回值】

BOOL true -成功 false-失败

【说明】

CALLBACKTAG

【功能】

把工具包的未注册标签引用传递给二次开发程序

【参数】

LPCSTR Name 标签名称

LPCSTR Path 访问路径

DWORD* hTag 标签句柄

【返回值】



【说明】

二次开发程序需要根据应用的具体情况对这个回调函数做出响应。二次开发程序可以动态创建一个新的标签添加到地址空间,然后把标签句柄通过hTag返回,也可以直接返回hTag=0,拒绝添加新标签。


3.6.5. SetLogNotify

【函数原型】

/// <summary>

///注册工具包状态信息输出函数,把工具包的输出信息传递给二次开发程序

/// </summary>

/// <param name="lpCallback">回调函数指针</param>

/// <returns>TRUE成功,FALSE失败</returns>

BmOpcDaSvr_API BOOL __stdcall SetLogNotify(LOGNOTIFY lpCallback)

【功能】

注册工具包状态信息输出函数

【参数】

CALLBACKLOG lpCallback 回调函数指针

【返回值】

BOOL true -成功 false-失败

【说明】

CALLBACKLOG

【功能】

把工具包的输出信息传递给二次开发程序

【参数】

LPCSTR msg 信息

【返回值】



【说明】


4.附录
4.1. OPC DA规范中关于标签数据质量的描述

在OPC中每个标签都必须有数据质量这个属性,OPC的数据质量的数据类型为VT_I2,

服务器通过该标签属性向客户发布标签的数据质量。OPC基金会对标签数据质量的各个位做

了一些定义,高八位由厂商自行定义,低八位的定义如下:

低字描述为QQSSSSLL

Q:主状态

S:子状态

L:限定状态

低八位的高两位定义:

表2(低八位的高两位定义)



中间四位的定义:



1、状态为0:

SSSS


位值


定义


描述

0


000000LL


未定的的错误


数据是无效的,无效的原因没有定义

1


000001LL


服务器配置错误


由于服务器的配置错误造成数据的无效

2


000010LL


没有连接


由于没有连接数据源,数据不能被正确的提供

3


000011LL


设备错误


发现一个设备错误,造成数据无效

4


000100LL


传感器错误


发现一个传感器错误,限定状态的位域有

时能提供进一步的诊断信息

5


000101LL


最后一次有效值


由于通信失败,提供的数据是最后一次保

存的有效值

6


000110LL


通信失败


通信失败并且没有最后保存的有效值可

以提供

7


000111LL


不在服务范围之内


标签定义为不活动的

8-15





OPC未定义


未定义

表3



2.主状态为1:

SSSS


位值


定义


描述

0


010000LL


未定义的错误


不能确定数据的有效性,其原因未定义

1


010001LL


最后可用的值


该值返回的是最后可用的值

2-3





OPC未定义


未定义

4


010100LL


传感器精度不够


该值被固定在传感的上下限上

5


010101LL


超出上下限


返回的值超出上下限

6


010110LL


数据来自多个数据源


数据需要来自多个可用的设备

7-15





OPC未定义


未定义

表4

3.主状态为3:

SSSS


位值


定义


描述

0


110000LL


未定义的错误


数据有效,原因未定义

1-5





OPC未定义


未定义

6


110110LL


本地设定值


设备不能连接,该值是本地设定值

7-15





OPC未定义


未定义

表5

低两位的定义:

LL


位值


定义


描述

0


QQSSSS00


没有边界


这个值没有上下限

1


QQSSSS01


下限


该值被固定在下限值

2


QQSSSS10


上限


该值被固定在上限值

3


QQSSSS11


常量


该值被固定在某个常数上

表6
4.3.如何发布服务器

以下程序应随服务器一同发布,可运行Install.bat批处理文件进行一下dll的注册和拷贝

1.Opcproxy.dll,安装路径%windir%\system32

2.Opccomn_ps.dll,安装路径%windir%\system32

3.OPCEnum.exe,安装路径%windir%

4.服务器软件和二次开发工具包

5.开放包授权文件

西北老伙计

  • 精华:1帖
  • 求助:0帖
  • 帖子:1帖 | 12回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2008年7月15日
发表于:2012-12-01 20:26:19
14楼
服务器开发包:

下载地址1:http://www.rayfile.com/zh-cn/files/ddb88799-2b9c-11e2-af3e-0015c55db73d/

下载地址2:http://www.xdowns.com/soft/38/110/2011/Soft_72907.html


客户端开发包:

下载地址1:http://www.rayfile.com/zh-cn/files/7b2bbe61-2c6b-11e2-888e-0015c55db73d/


OPC开发套件开发包以标准动态连接库(DLL)形式提供二次开发接口,与 Win98、WinNT、
WIN2000、 WIN2003系统完全兼容。OPC开发软件包由服务器软件包、客户端开发软件包组成, 完全封装了 OPC 技术和COM技术实现细节,使二次开发的程序员无需 OPC规范和COM技术底层细

节,降低服务器和客户端程序开发的复杂程度和减少了熟悉OPC 技术的时间,只需专注于自己熟悉的数据采集和过程控制,其他的一切都交给软件开发包来完成。由于软件开发包以标准的

WINDOWS API方式提供,故可以在目前主流的所有开发语言和开发工具中得到支持。

数据访问开发工具包于 2004 年 6 月开始研发,吸取了各大OPC开发包的优点,经过多次升级,实现了对 OPC数据访问服务器规范(以下简称DA 规范)的全面支持(支持规范版本 1.0、2.0

、3.0)。软件包具有以下特点:
完全符合DA 标准,通过OPC 基金会兼容性产品测试
完全的封装使二次开发人员不需要了解COM 技术和OPC 规范接口细节
工具包支持多种开发语言,如 VC、BC、VB、Delphi、C# 等
逻辑清晰、功能明确的二次开发函数保证用户进行二次开发简单容易
支持同步、异步数据通讯方式
支持自定义属性读写
支持树型地址空间
支持动态创建标签
支持分布式体系结构
高效(20ms/5000 标签)
良好的兼容性(支持所有组态软件、DCS 系统、Scada 系统)
优良的稳定性,软件运行 CPU 占用率(2% 10000 个节点)
完备的产品升级和完善的技术支持,提供现场技术服务和远程技术指导

热门招聘
相关主题

官方公众号

智造工程师