OPC Server概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OPC Server概述
1.What is OPC?
OPC是OLE for Process Control的缩写。顾名思义,OPC是一种利用微软的COM/DCOM技术来达成自动化控制的协定,根据OPC Specification 的定义,OPC is "a standard mechanism for communicating to numerous data sources, either devices on the factory floor, or a database in a control room."
在现今的工业自动化中,我们需要一套整合的信息系统,由底层的各项装置采集信息(Field Management),中层的控制系统或图控应用程序进行程序的控制(Process Management),再由最上层的整合软件将这些信息整合起来以供企业决策或效能提升,如下图所示:
OPC 为硬件制造商与软件开发商提供了一条桥梁,透过硬件厂商提供的OPC Server 接口,软件开发者不必考虑各项不同硬件间的差异,便可自硬件端取得所需的信息,所以软件开发者仅需专注于程序本身的控制流程的运作。此外,由于COM/DCOM 实作并隐藏了网络的细节,透过OPC 可以很容易地达成远程控制的理想。
2.How does OPC work?
在说明OPC Server/Client 运作方式之前,我们先简单介绍一下Microsoft 发展的COM/DCOM 是什么?
COM 是一种发展软件组件的方法,所谓的软件组件,是指一个可以提供应用程序、操作系统、以及其它组件服务的二进制可执行程序。事实上,发展自订的COM 对象就好象是在建构一套可以动态执行的对象导向API 一般。你可以在应用程序执行的时期随意拼上或移除所需要的组件。依据COM 这样的概念,发展应用程序就像是堆积木一样,每一个COM 组件就是一块积木,你可以利用各式各样不同的积木,拼凑出你所需要的应用程序。
在实作上,COM 透过一组一组的接口(Interface) 提供服务,所有COM 组件的使用者,都必须透过这些Interface 来使用组件提供的功能。OPC 的规格中便定义了许多OPC Server 应该提供的Interface,要撰写一个OPC Server 的COM 组件,你必须在你的组件中加入这些接口,并提供它们的实作,Client 便可以透过这些接口,操作连接到OPC Server 的硬件装置,这也就是OPC Server/Client 运作的方式。以下的图标可以让这样的概念更清晰。
3. OPC Server 架构
如前面所述,OPC Server 透过一组一组的接口提供服务,不过在实作的架构上,OPC Server 共分为三层:分别是OPCServer, OPCGroup, OPCItem
其中每一个OPCItem 对应到一个实际的硬件装置上的某一个channel 或port;每一个OPCGroup 则包含了许多的OPCItem,同时并定义这些OPCItem 更新的时间、方式,以及提供读取OPCItem 值的接口;而每一个OPCServer 则包含若干个OPCGroup,同时提供操作这些OPCGroup 的接口。
下图可以较清楚地说明OPCServer/OPCGroup/OPCItem 间的关系:
4. OPC Custom Interface
接下来的这一节,我们将讨论OPC Serve 的重点,也就是每一组接口的定义,以及它所提供的功能。
OPCServer 提供的接口:
IOPCCommon
HRESULT SetLocaleID ( dwLcid ) 设定位置信息
HRESULT GetLocaleID ( pdwLcid ) 取得位置信息
HRESULT QueryAvailableLocaleIDs ( pdwCount, pdwLcid ) 查询可用的位置ID HRESULT GetErrorString ( dwError, ppString) 取得错误信息字符串
HRESULT SetClientName (szName)设定Clinet的名称
IOPCServer
HRESULT AddGroup(szName, bActive, dwRequestedUpdateRate, hClientGroup, pTimeBias, pPercentDeadband, dwLCID, phServerGroup, pRevisedUpdateRate, riid, ppUnk) 新增一个OPCGroup
HRESULT GetErrorString(dwError, dwLocale, ppString) 取得错误信息字符串HRESULT GetGroupByName(szName, riid, ppUnk) 依据名称取得OPCGroup 的介面
HRESULT GetStatus(ppServerStatus) 取得OPCServer的状态信息
HRESULT SetClientName (szName)设定Clinet的名称
RemoveGroup(hServerGroup, bForce)移除一个OPCGroup
HRESULT CreateGroupEnumerator(dwScope, riid, ppUnk) 产生一个OPCGroup 列举器
IConnectionPointContainer
HRESULT EnumConnectionPoints( IEnumConnectionPoints ppEnum) 列举所有的Connection Points
HRESULT FindConnectionPoint( REFIID riid, IConnectionPoint ppCP)找出一个Connection Point
IOPCItemProperties
HRESULT QueryAvailableProperties(szItemID, pdwCount,ppPropertyIDs, ppDescriptions, ppvtDataTypes ); 查询可用的OPCItem属性
HRESULT GetItemProperties (szItemID, dwCount, pdwPropertyIDs,ppvData, ppErrors ) 取得OPCItem 的属性
HRESULT LookupItemIDs( szItemID, dwCount,
pdwPropertyIDs,ppszNewItemIDs, ppErrors )使用名称查询OPCItem 的ID