开发 C# OPC 客户端
编写 opc 客户端的思路
1. 使用OPC Client浏览服务器, 查看测试代码修改后的结果。
2. 根据OPC Client搜集到的服务器信息编写代码和服务器交互
3. OPC Client 操作或编程访问OPC 服务器的步骤
3.1 连接 OPC 服务器
3.2 创建 Group 到连接
3.3 遍历OPC服务器的所有的leaf item, 添加需要的 leaf item 到 Group
3.4 现在可以
读取 item 的值
监听 Group 的 DataChange 事件,获取 item 的最新值
调用 Group 的方法异步修改 item 的值
调用 item 的方法同步修改值
基础知识
OPCItems, OPCItem api
OPCItems
.Parent 只读的上级OPCGroup的引用
.Count
.Item(ItemSpecifier) 返回 OPCItem, ItemSpecifier 是 1 开头的索引值
.GetOPCItem(ServerHandler) 返回 OPCItem, ServerHandler 是 OPCItem 的 ServerItem 属性值
.AddItems(Count, ItemIDs, ClientHandles, ServerHandlers, Errors, RequestedDataTypes, AccessPaths) 批量添加 OPCItem 到 OPCItems
.Remove(Count, ServerHandles, ByRef Errors)
OPCItem
.Parent
.ClientHandle 服务器通知数据变化时 KepGroup_DataChange, 会返回 ClientHandle。 可以快速定位数据
.ServerHandle
.ItemID
.IsActive
.Value
.Quality
.TimeStamp
.Read (Source, Optional ByRef Value, Optional ByRef Quality, Optional ByRef TimeStamp) 同步刷新 OPCItem 数据
.Write (Value) 同步修改 OPCItem value
OPCItem Active, InActive
Active can be 'on' or 'off'. If Active is 'on', the OPC server will return data for the group or item when requested by the read function or when the corresponding data items change (subscriptions). If Active is 'off', the OPC server will not return information about the group or item.
deadband
如果OPC服务器支持不敏感带(DeadBand),而且OPC标签的数据类型是模拟量的情况,只有现在值与前次值的差的绝对值超过一定限度时,才更新缓冲器数据并通知OPC应用程序。由此可以无视模拟值的微小变化,从而减轻OPC服务器和OPC应用程序的负荷。
OPC 对象说明
OPC Server对象
主要功能为:1、创建和管理OPC Group对象;
2、管理服务器内部的状态信息;
OPC Group对象
主要功能为:1、管理OPC Group对象的内部状态信息;
2、创建和管理Items对象。
3、OPC服务器内部的实时数据存取服务(同步与异步方式)。
OPC组中有以下几个主要属性:
Name :组的名字 ;Active:组的激活状态标志 ;Update Rate OPC:服务器向客户程序提交数据变化的刷新速率;Percent Dead band:数据死区,即能引起数据变化的最小数值百分比。
OPC ITEM 是非COM对象,在OPC标准中用来描述实时数据,是客户端不可见的对象。代表了与服务器中的数据的连接,它并不是数据源,而仅仅是与数据源的连接。每个项都有以下主要属性: Active项的激活状态、Value项的数值、类型为VARIANT、Quality项的品质,代表数值的可信度,类型为SHORT、TimeStamp时间戳,代表数据的存取时间。
OPC 数据类型
Byte, 字节
Word, 16位无符号整型
Short 无符号短整型
DWord, 32位无符号整型
Long, 32位符号整型
Float 浮点型
OPC 节点值的含义
- 问 PLC 开发
- 部分可以去看PLC调试时写的 LabVIEW 文件

OPC Server 的配置工具, 浏览/添加节点到服务器, 查看节点的值

OPC Client 可以浏览OPC 服务器节点, 查看,修改节点值
不是所有的节点都有值。
不是所有的节点都能写.
这个客户端使用最方便

这个客户端的操作思路,类似写代码连接 OPC 服务器。
所以用这个客户端方便,后面写代码

常见问题
使用本地 opc 测试服务器开发 opc 客户端
实际开发中发现, 连接测试服务器开发行不通。 连接NI的OPCServer操作没有问题,但同样的操作连接测试服务器会抱错。
打开 OPC 测试服务器软件

注册 OPC 服务器

安装 OPC 2.0 组件

使用 OPC Client 连接测试服务器

在 win64位系统无法调用 OPCAutomation
不稳定,有时行,有时不行.
http://www.cnblogs.com/DannielZhang/p/5551708.html
首先将 OPCDAAuto.dll 拷贝到C:\windows\SysWow64 下,再使用regsvr32 进行注册。
这样之后vs里就可以正常引用了,当然需要在添加引用时选择COM组件里找到这个类库。
数据修改不成功
opc 节点有数据类型, 如果数据类型不对,客户端看上去写入成功。
服务端没有修改成功。
参考资料
OPC 接口文档
OPC C#完整客户端
OPC C#代码参考
OPC测试常用的OPCClient和OPCServer软件推荐
开发 C# OPC 客户端的更多相关文章
- OPC客户端的进程安全初始化
现场OPC客户端无法获取远程OPC Server列表,也无法连接OPC Server,经查调用CoCreateInstanceEx()创建IID_IOPCServerList接口正常,但调用IOPCS ...
- 【转】(C#)OPC客户端源码
本例下载/Files/badnewfish/OPC测试通过.rar 转载申明 申明:本文为转载,如需转载本文,请获取原文作者大尾巴狼啊的同意,谢谢合作! 转自:大尾巴狼啊 原文出处:http://ww ...
- 用C#开发基于自动化接口的OPC客户端
OPC全称是Object Linking and Embedding(OLE) for Process Control,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁.OPC作为一 ...
- 基于第三方开源库的OPC服务器开发指南(3)——OPC客户端
本篇将讲解如何编写一个OPC客户端程序测试我们在前文<基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署>一篇建立的服务器.本指南的目的是熟悉OPC服务器的开发流 ...
- C#开发OPC客户端
第一个随笔,使用了OPEN Live Write,作为客户端.最近使用c#开发一个小软件,主要功能是OPC客户端.以后会开发各类别的协议,作为,协议的转发栈. 因为我本人是搞自动化的,所以搞自动化小伙 ...
- [发布]SuperIO v2.2.5 集成OPC服务端和OPC客户端
SuperIO 下载:本站下载 百度网盘 1.修复串口号大于等于10的时候导致IO未知状态. 2.优化RunIODevice(io)函数内部处理流程,二次开发可以重载这个接口. 3.优化IO接收数据, ...
- OPC协议解析-OPC客户端与服务器通讯解析
1 OPC服务器 OPC服务器, 是指按照OPC基金组织规定的OPC规范群开发的软件驱动.OPC服务器作为中间媒介负责从数据源读取数据再跟另外一端的客户端通信.在 OPC客户端/服务器 的结 ...
- 基于 SailingEase WinForm Framework 开发优秀的客户端应用程序(目录)
本系统文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以 SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...
- (转)【ASP.NET开发】获取客户端IP地址 via C#
[ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...
随机推荐
- Python之路(第五篇) Python基本数据类型集合、格式化、函数
一.变量总结 1.1 变量定义 记录某种状态或者数值,并用某个名称代表这个数值或状态. 1.2 变量在内存中的表现形式 Python 中一切皆为对象,数字是对象,列表是对象,函数也是对象,任何东西都是 ...
- boost asio 一个聊天的基本框架
示例代码 #include "Util.h" #include "MyAsio.h" #include "TcpConnectionManager.h ...
- jvm gc 算法
1标记-清除法 他是现代垃圾回收算法的思想基础. 标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段. 在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象(根搜索算法).而未被标记的对象 ...
- 【Linux】zlib安装
zlib简介 zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表.zlib使用DEFLATE算法,最初是为libpn ...
- 团队-Python 爬取豆瓣电影top250-成员简介及分工
姓名:周鑫 班级:软件6班 团队名称:咣咣踹电脑 擅长:Python,java 分工:编写数据库
- kbmmw 的HTTPSmartService 上传文件到服务器端
前面我写过了 HTTPSmartService 使用介绍,可以参见以前的文章. 前一向有同学问如何在http 页面表单上上传文件.一直没有时间回答,自己简单做了例子, 发现无法实现功能,今天花了一天时 ...
- ubuntu安装rubyOnRails
https://gorails.com/setup/ubuntu/16.04#ruby-rbenv 文章很详细
- 多分类评价指标python代码
from sklearn.metrics import precision_score,recall_score print (precision_score(y_true, y_scores,ave ...
- 2019.02.09 bzoj2440: [中山市选2011]完全平方数(二分答案+容斥原理)
传送门 题意简述:qqq次询问(q≤500)(q\le500)(q≤500),每次问第kkk个不被除111以外的完全平方数整除的数是多少(k≤1e9)(k\le1e9)(k≤1e9). 思路:考虑二分 ...
- 2018.12.15 spoj Longest Common Substring II(后缀自动机)
传送门 后缀自动机基础题. 给出10个串求最长公共子串. 我们对其中一个建一个samsamsam,然后用剩下九个去更新范围即可. 代码: #include<bits/stdc++.h> # ...