OPC是一种利用微软的COM/DCOM技术来达成自动化控制的协定.

OPC原理

在说明 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 运作的方式。

OPC Server 架构

如前面所述,OPC Server 透过一组一组的接口提供服务,不过在实作的架构上,OPC Server 共分为三层:
    分别是 OPCServer, OPCGroup, OPCItem

其中每一个 OPCItem 对应到一个实际的硬件装置上的某一个 channel 或 port;每一个 OPCGroup 则包含了许多的 OPCItem,同时并定义这些 OPCItem 更新的时间、方式,以及提供读取 OPCItem 值的接口;而每一个 OPCServer 则包含若干个 OPCGroup,同时提供操作这些 OPCGroup 的接口。

   OPC 定制接口

接下来的这一节,我们将讨论 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
IOPCBrowseServerAddressSpace (optional)
HRESULT QueryOrganization(pNameSpaceType )查询组织名称
HRESULT ChangeBrowsePosition(dwBrowseDirection, szString )变更浏览的位置
HRESULT BrowseOPCItemIDs( dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, ppIEnumString )浏览 OPCServer 内所有定义的 OPCItem
HRESULT GetItemID( szItemDataID, szItemID ) 取得 OPCItem 的 ID
HRESULT BrowseAccessPaths( szItemID, ppIEnumString )浏览存取OPCItem 的路径

OPCGroup Object 提供的介面

IOPCGroupStateMgt
HRESULT GetState(pUpdateRate, pActive, ppName, pTimeBias, pPercentDeadband, pLCID, phClientGroup, phServerGroup)取得OPCGroup的状态即设定信息
HRESULT SetState(pRequestedUpdateRate, pRevisedUpdateRate, pActive, pTimeBias, pPercentDeadband, pLCID, phClientGroup)设定OPCGroup 的状态信息
HRESULT SetName(szName)设定OPCGroup的名称
HRESULT CloneGroup(szName, riid, ppUnk) 复制一个OPCGroup

IOPCSyncIO

HRESULT Read(dwSource, dwCount, phServer, ppItemValues, ppErrors); 以同步方式读取OPCGroup内的OPCItem(s) 的值
HRESULT GetItemProperties (szItemID, dwCount, pdwPropertyIDs,ppvData, ppErrors ) 取得 OPCItem 的属性
HRESULT Write(dwCount, phServer, pItemValues, ppErrors) 以同步方式将值写入OPCGroup 内的 OPCItem(s)

IOPCAsyncIO2

HRESULT Read(dwCount, phServer, dwTransactionID, pdwCancelID, ppErrors,) 以非同步方式读取OPCGroup内的OPCItem(s)的值,值会在读取硬件的动作结束后以callback的形式传回
HRESULT SetState(pRequestedUpdateRate, pRevisedUpdateRate, pActive, pTimeBias, pPercentDeadband, pLCID, phClientGroup)设定OPCGroup的状态信息
HRESULT Write(dwCount, phServer, pItemValues, dwTransactionID, pdwCancelID, ppErrors)以非同步方式将值写入OPCGroup内的OPCItem(s)
HRESULT Cancel2 (dwCancelID) 取消前一次的非同步读取/写入
HRESULT Refresh2(dwSource, dwTransactionID, pdwCancelID) 更新 OPCGroup 内 OPCItem(s) 的值
HRESULT SetEnable(bEnable) 将 OPCGroup 设为 Enable
HRESULT GetEnable(pbEnable) 传回 OPCGroup 是否为 Enable

IOPCItemMgt

HRESULT AddItems(dwCount, pItemArray, ppAddResults, ppErrors); 在OPCGroup内新增OPCItem(s)
HRESULT ValidateItems(dwCount, pItemArray, bBlobUpdate, ppValidationResults, ppErrors)检查OPCItem(s)的名称是否可用
HRESULT RemoveItems(dwCount, phServer, ppErrors) 移除OPCGroup 内的 OPCItem(s)
HRESULT SetActiveState(dwCount, phServer, bActive, ppErrors)高定 OPCItem(s)是否为Avtive
HRESULT SetClientHandles(dwCount, phServer, phClient, ppErrors)设定 OPCItem(s) 的 handle
HRESULT SetDatatypes(dwCount, phServer, pRequestedDatatypes, ppErrors) 设定OPCItem(s)的数据类型
HRESULT CreateEnumerator(riid, ppUnk)产生OPCItems的列举器

IConnectionPointContainer

HRESULT EnumConnectionPoints( IEnumConnectionPoints ppEnum)列举所有的 Connection Points
HRESULT FindConnectionPoint( REFIID riid, IConnectionPoint ppCP)找出一个Connection Point

   总结

OPC Server/Client 是一套利用微软的 COM/DCOM 技术达成工业自动化资料取得的架构。OPC Server 提供了许多的接口,Client 端通过这些接口,可以取得与 OPC Server 相连的硬件装置的信息,而无须了解这些硬件装置的细节信息。也就是说,程序设计者可以使用相同的程序代码,操作不同的硬件装置,充分达成 software reuse 的理想。同时,由于 COM/DCOM 已实作了网络部分的细节,也使得 Client 对 OPC Server 进行远程访问非常容易,使程序设计者很容易地达成远程控制的目标。

OPC Server相关推荐

  1. 使用C++访问OPC Server的简单方法

    OPC的文档网上很多,我在这里要介绍的主题是使用C++通过自动化接口来访问OPC Server,写这篇文章的目的是我在网上没有搜索到这方面的文档,如果我有这方面的需要,我想在网上一定也有其他朋友有这个 ...

  2. 本机连接opc server有部分数据不刷新_实时数据库PI在企业MES系统中的应用

    实时数据库是计算机控制系统和上层生产管理系统数据存储和展示的核心.结合河南天冠燃料乙醇有限公司MES系统应用实例,介绍了实时数据库PI的安装部署,建立信号量集和数据导入,以及客户端接口配置,数据库测试 ...

  3. Utgard连接OPC Server常见故障码及解决方案

    Utgart连接OPC Server常见故障码 0x00000005 用户名或密码错误,检查一下登录OPC Server的用户名和密码是否和配置的参数是否相同 1.打开注册列表 选择HKEY_CLAS ...

  4. 使用博图V15和KEPServerEX6软件进行OPC Server读取PLC数据仿真(对PLC数据采集和边缘计算程序测试的准备)

    做这个仿真的目的主要是为后面对获取到的PLC数据编写或调试边缘计算编程进行铺垫 仿真OPC Server通过Siemens TCP/IP Ethernet协议与西门子PLC进行通信,获取PLC的数据 ...

  5. OPC是什么意思?OPC Server 和OPC Client又有什么区别呢?

    自从OPC标准出现之后,很多人都在使用,但是对于一些刚接触的人来说还是比较懵的.本篇文章主要介绍OPC Server 和OPC Client的区别.现在就跟着小编来了解一下文章内容吧~ 说到OPC S ...

  6. 虚拟opc服务器软件,OPC Server

    OPC Server是一套利用微软的COM/DCOM技术实现工业自动化资料获取的架构,它功能强大,程序设计者可以使用相同的程序代码,操作不同的硬件装置,充分达成软件复用的目的,只要支持OPC接口,就能 ...

  7. opc服务器不稳定的原因,OPC Client和OPC Server容易出现通讯故障,原因是什么?

    OPC Server是一套利用微软的COM/DCOM技术实现工业自动化资料获取的架构.OPC Server提供OPC接口,它将与之相连的物理设备(PLC)的信息值通过接口返回到客户端应用程序.也就是说 ...

  8. kepserver 作为opc server 连接西门子PLC 配置

    C#通过OPC服务器连接PLC读写数据 什么是OPC? OPC是工业控制和生产自动化领域中使用的硬件和软件的接口标准,以便有效地在应用和过程控制设备之间读写数据.O代表OLE(对象链接和嵌入),P ( ...

  9. opc服务器上层传输协议,OPC服务器 (OPC Server) 之间数据传递的桥梁 — OPC Data Manager (ODM)...

    MatrikonOPC Data Manager MatrikonOPC Data Manager就像OPC服务器 (OPC Server) 之间传递数据的桥梁,将它们紧密地连结在一起. Matrik ...

最新文章

  1. python获取数据库用户名密码_在数据库中存储用户和密码
  2. python循环语句-python循环语句(第十节)
  3. [转]工程师进阶之路(三)
  4. 【课程作业】表达学习 人脸图像复原 实验记录
  5. 这可能是最全的 Redis 集群方案介绍了
  6. python tqdm模块的简单使用
  7. java 快逸报表_快逸报表V4.0功能说明
  8. android 屏幕坐标系,android 屏幕坐标总结
  9. 数字1的ASCII值是多少
  10. centos7搭建单机kafka,开启SASL/PLAIN加密,并使用kafka tool 登录
  11. 魔兽世界怀旧服务器无限刷怪点,魔兽世界怀旧服:4处无限刷新的打怪点!升级比血色站桩还快!...
  12. 局域网中两台电脑通信
  13. iphone横竖屏切换,旋转屏幕
  14. VsCode使用及常用命令汇总(Win10)
  15. 脱靶量与实际角度差计算
  16. 词根:lun = moon, 表示“月亮”
  17. 二维码详解(QR Code)
  18. Word笔记----wps插入的图片像素降低了怎么办?
  19. 简要理解什么是趋肤效应
  20. 【剪辑必备】情感对话号必备-微信对话生成脚本,一键生成视频【安卓永久版脚本】

热门文章

  1. 记vscode配置踩坑经过
  2. WebViewJavascriptBridge
  3. 在电脑上运行安卓app
  4. MySQL的下载与安装教程--超详细
  5. 关于微信小程序云开发---实现客服自动回复图片例子
  6. 图片太普通,教你轻松制作画中画特效
  7. 电脑饥荒服务器未响应,《饥荒》联机版常见问题及解决方法一览
  8. java applet插件_Atitit.java的浏览器插件技术 Applet japplet attilax总结
  9. Altium Designer15入门
  10. fastqc检验时不能执行java_解压fastqc软件包后,运行fastqc报错:没有这个命令?...