OPC Server

一文读懂什么是OPC Server 在现代工业生产中,设备数据采集是至关重要的一环。而OPC Server作为一种关键利器,为企业实现高效、准确的数据采集和集成提供了可靠的解决方案。本文将简要介绍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),再由最上层的整合 软件将这些信息整合起来以供企业决策或效能提升,如下图所示:
  
  

[1]
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 运作的方式。以下的图标可以让这样的概念更清晰。
  
  

[2]
3. OPC Server 架构
  如前面所述,OPC Server 透过一组一组的接口提供服务,不过在实作的架构上,OPC Server 共分为三层:分别是 OPCServer, OPCGroup, OPCItem
  其中每一个 OPCItem 对应到一个实际的硬件装置上的某一个 channel 或 port;每一个 OPCGroup 则包含了许多的 OPCItem,同时并定义这些 OPCItem 更新的时间、方式,以及提供读取 OPCItem 值的接口;而每一个 OPCServer 则包含若干个 OPCGroup,同时提供操作这些 OPCGroup 的接口。
  下图可以较清楚地说明 OPCServer/OPCGroup/OPCItem 间的关系:
  
  

[3]
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
  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
  5. 结论
  OPC Server/Client 是一套利用微软的 COM/DCOM 技术达成工业自动化资料取得的架构。OPC Server 提供了许多的接口,Client 端通过这些接口,可以取得与 OPC Server 相连的硬件装置的信息,而无须了解这些硬件装置的细节信息。也就是说,程序设计者可以使用相同的程序代码,操作不同的硬件装置,充分达成 software reuse 的理想。同时,由于 COM/DCOM 已实作了网络部分的细节,也使得 Client 对 OPC Server 进行远程访问非常容易,使程序设计者很容易地达成远程控制的目标。
The FactorySoft OPC Server        最近在看opc的东西,一开始看的是潘爱民的《COM原理与应用》,这本书买了老早了,几年前领导想在在组态王6.03里面添加我们公司的设备的驱动,到北京组态王的总部去了一趟,没接触过怎么做组态王的驱动,请教了接待我们的MM经理,她说很简单,用到了COM和C++,下午就去了书店买了回来,后来安装上开发包研究了下,书也没看就把驱动写完了,一直放到现在。       后来做工控的上位,西门 阅读详情

相关推荐

OPC是什么意思?OPC Client和OPC Server有什么区别?

在现代工业控制系统中,OPC(开放性过程控制)技术是一个重要的概念。它为工业自动化领域提供了一种标准化的通信协议,使得不同设备和系统之间可以实现无缝的数据交换和集成。本文将详细介绍OPC的含义、作用以及OPC Client和OPC Server之间的区别。

weixin_42211283的博客 3631

opc配置说明

2.添加用户供opc客户端使用 打开“计算机管理”:win键+计算机管理 用户–右键新用户 账号:OPCUser 密码:123456 选中用户不能更改密码,选中密码永不过期 同上一步添加方式默认属性: com安全: 访问权限: 启动和激活权限: 常规: 位置: 启动和激活: 访问权限: 更改配置权限:标识: 常规: 位置: 启动和激活: 访问权限: 更改配置权限: 标识: 重启电脑使配置生效...

Easy come, easy go. 7805

opc server 开发心得

这段时间公司项目上需要把数据通过OPC SERVER 开放接口,在网上及优快云上 SEARCH 了好久,感觉优快云上的资料还是比较专业的,但也有做广告的,我摸索了一周时间,有点心得,并用在工程上,一下是一周体会;一:WINTECH 的开发包WINTECH 网站上可下载开发包,WTOPCSVR.DLL 有VB VC VC#的例程,但是DEMO DLL,可运行30分钟,比较容易上手,但对开

carelg的专栏 1万+

OPCServer KEPServer安装和使用

OPCServer KEPServer安装和使用 简介 KEPServer软件是免费的,驱动收费,每天2小时试用时间, 免费用来模拟仿真是很不错的选择 OPC DA 和OPC UA都支持 中文官网地址: https://www.kepware.com/zh-cn/ 中文官方文档(经常有更新,其实就内置的帮助文档内容):https://www.kepware.com/getattachment/af76712f-a703-443d-a592-b9621382d224/kepserverex-manual_zh

yinjl123456的博客 9932

BSOPCServer Development - OPC Server的注册

目标:实现OPC server的注册,OPC client在枚举本地server时可以看到BSOPCServer。我们的OPC server 实际上就是一个进程外的COM server。大家要是熟悉COM ,就会知道进程外的server注册信息通常包含下面内容:1) IID_IXXXX : 接口ID。即如果server里实现了你自己定义的接口,比如IMyTest, IMyTest会对应于一

OPC Server 开发 3214

OPCServer:Matrikon OPC Server Simulation的使用

简介: 项目需要 OPC 进行对接,通过查找资料,已经大致了解 OPC 客户端如何使用C++编码,没有 OPC 服务端环境,通过查询了解到Matrikon OPC Server Simulation 可以作为 OPC 模拟服务器。本文参考了《OPCServer:使用Matrikon OPC Server Simulation》,不过由于该文章对使用部分细节不详细,所以想把自己摸索的步骤记录下来; ...

qq_40565735的博客 5266

OPC:服务器开发(一)如何开发OPC Server

一、什么是OPC OPC (OLE for Process Control——用于过程控制的OLE)是基于Microsoft公司的DNA(Distributed Internet Application)构架和COM(Component Object Model)技术的一个工业标准接口,是根据易于扩展性而设计的。 二、OPC的用途 OPC主要适用于过程控制和制造自动化等应用领域。 OPC是以OLE...

dashumak的博客 1万+

OPC UA服务端(Prosys OPC UA Simulation Server)和客户端(OPC UA Explorer)工具使用

好用的opcua模拟器,服务端和客户端调试

wdd1018的博客 1万+

C++实现OPC Server远程连接

首先声明一下,常搜索到的函数 CLSIDFromProgID 只能查询本地注册表的值,如果OPC Server与客户端不在同一台服务器,这个函数就没有用。 另一种连接方式,是通过opc server的CLSID(打开注册表 ,计算机\HKEY_CLASSES_ROOT\服务名),再通过 CLSIDFromString 函数,这种方式有些取巧,不过也能实现功能。具体如下 CLSID clsid_citect; COSERVERINFO si; ZeroMemory(&si, sizeof(si)

qq_40565735的博客 2844

Java模拟OPC Server服务器并创建节点代码实现

模拟OPC Server服务器的方法除了使用KEPServerEX6软件以外,还可以使用java代码模拟启动一个opc server。下文详细讲解,如何使用java代码,实现模拟一个或者多个opc server服务器。

洛阳泰山的博客 3332

OPC Server仿真模拟器项目实战

在工业自动化领域,为了实现不同制造商生产的设备与软件之间的无缝通信,行业内部产生了一系列工业通信协议。其中,OPC(OLE for Process Control)技术因其跨平台、面向对象的特性,成为了连接工业设备与上层管理系统的桥梁。作为工业4.0和智能制造的重要组成部分,OPC技术通过统一的数据访问接口,提高了生产效率,增强了系统的灵活性和可扩展性。

weixin_32242475的博客 1701

如何开发OPC Server

如何开发OPC Server首先我们先来看一下什么是OPC       OPC (OLE for Process Control——用于过程控制的OLE)是基于Microsoft公司的DNA(Distributed Internet Application)构架和COM(Component Object Model)技术的一个工业标准接口,是根据易于扩展性而设计的。 再来了解一下O

hotyoung的专栏 5456

OPCServer概述

OPCServer概述 OPC是ole for proess control的缩写,OPC是一种利用微软的com/dcom技术达成自动化控制的协定。

OPC Server示例教程:OPC客户端——C#.NET示例

OPC Server是一套利用微软的COM/DCOM技术实现工业自动化资料获取的架构。OPC Server提供OPC接口,它将与之相连的物理设备(PLC)的信息值通过接口返回到客户端应用程序。也就是说,客户端通过这些接口,可以获得与OPC Server连接的物理设备的信息。对于集成应用程序,只要支持OPC接口,就能轻易访问物理设备,而无需相关的技术信息。 程序设计者可以使用相同的程序代码,操作不同...

xiaochuachua的博客 5255

ModbusOPCServer操作说明及组态王连接OPC服务器步骤

ModbusOPCServer操作说明及组态王连接OPC服务器步骤..........................

SpringBoot项目整合Knife4j接口文档

写满接口信息的文档,每条接口包括:请求参数,响应参数,接口地址,接口名称,请求类型,请求格式,备注。

诨号无敌鸭的博客 1017

远程访问某 OPC SERVER步骤

一、在装有某OPC SERVER的机器上。DCOM配置如下  1. 运行服务器上的dcomcnfg程序,进行DCOM配置。  2. 进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。  3. 进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无EveryOne,  如果不去掉EveryOne,应用服务器不能正常启动。 

blogremover的专栏 8873

告别‘小目标’丢失!手把手复现DNANet红外检测网络(PyTorch版)

本文详细介绍了如何使用PyTorch从零实现DNANet红外小目标检测网络,重点解析了DNIM模块和CSAM注意力机制的设计与实现。通过实战教程,帮助开发者解决红外小目标检测中的特征提取和训练调参难题,适用于军事侦察、安防监控等场景。

weixin_28701593的博客 252

OPC-Server安装 1(matrikon-opc)

OPC-Server安装 软件安装过程:

zhougynui的博客 9110

Simulink中通过MEX与MinGW实现C/C++结构体变量的高效导入

本文详细介绍了在Simulink中通过MEX工具链与MinGW编译器,高效导入C/C++结构体变量的完整流程。文章从需求背景出发,逐步讲解了MinGW环境配置、.h文件编写规范、核心导入命令Simulink.importExternalCTypes的使用,以及如何在MATLAB Function模块和总线创建器中调用自定义结构体,旨在实现模型与代码的无缝对齐,为后续仿真和代码生成奠定坚实基础。

weixin_29056781的博客 342

Zynq 双核AMP 通信

4、配置离线编译(这里不讲),配置linux的内核地址空间(0x4000_0000改为0x2000_0000),以及单核启动。CPU1设置为0x2000_0000~0x3FFF_FFFF(也可以小于0x3FFF_FFFF)如果禁用CPU1的L2 cache,在CPU1的bsp里面添加编译时候所需要的宏。3、配置工程,将vivado产生的.xsa文件复制到amp_com项目目录下。9、使用petalinux-package --boot 打包。一、vivado工程。5、编译u-boot。

y183128184的博客 1086

使用C#开发OPC Server服务器源码示例

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34208283的博客 2154

端到端自动驾驶:特斯拉FSD Beta技术拆解

端到端自动驾驶:特斯拉FSD Beta技术拆解 ,人工智能,计算机视觉,大模型,AI,这篇文章围绕特斯拉FSD Beta的端到端自动驾驶技术展开,先介绍端到端自动驾驶的定义、与传统方案的区别及FSD Beta的特点,再阐述其硬件基础、技术架构,解析关键技术,还涉及训练数据与标注、安全与冗余设计、实际应用场景与挑战以及技术迭代与更新等内容,展现了该技术的多方面情况。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+
上一篇: CWnd
下一篇: VC中的几个函数
flymachine
博客等级 码龄23年 253粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值