C#读取opc数据

2023-10-27

关于OPC这个东西,网上文章很多。作为一个需要取数的程序员来说,需要知道的就是客户端的一些设置,至于服务器端,想知道的自己去百度撸吧。

客户端读取数据,网上很多,但是在刚开始的时候总会遇到各种问题,在这里写点,权且自己当个记录吧。

首先是引用一个dll, 名称 OPCDAAuto.dll 这个哪里下载,百度一下,很多的

OPCDAAuto.dll 需要注册 regsvr32 /s OPCDAAuto.dll

如果win7下有问题,在C:\Windows\SysWOW64路径下,注册“OPCDAAuto.dll”

using OPCAutomation;

//OPC 变量

 #region 私有变量
        OPCServer KepServer;
        OPCGroups KepGroups;
        OPCGroup KepGroup;
        OPCItems KepItems;
        #endregion


开始抓取数据​

/// <summary>
        /// OPC服务器
        /// 开始抓取OPC数据
        /// </summary>
        public void Start()
        {
             try
             {

              
                KepServer = new OPCServer();
 //KepServer.Connect(ServiceHelper.OpcServiceName, ServiceHelper.OpcAddress);
 //IP在前面是错误的,前面代码未经严格检查给网友带来不便,深表歉意
//KepServer.Connect("127.0.0.1","Matrikon.OPC.Simulation.1");
 
 KepServer.Connect("Matrikon.OPC.Simulation.1","127.0.0.1");


                //判断连接状态
                if (KepServer.ServerState == (int)OPCServerState.OPCRunning)
                {
                    SendMsg("已连接到-" + KepServer.ServerName);
                }
                else
                {
                    SendMsg("状态:" + KepServer.ServerState.ToString());
                    return;
                }

                KepGroups = KepServer.OPCGroups;
                
                Task.Factory.StartNew(CreateGroup);

                //this.GatherData = true;

             }
             catch(Exception e)
             {
               throw e;
             }
        }

​公共函数

private void SendMsg(string m)
         {
            
             //LogHelper.WriteLog(m);
         }

创建组

/// <summary>
        /// 创建组
        /// </summary>
        private void CreateGroup()
        {
            try
            {
                KepGroups = KepServer.OPCGroups;
                KepGroup = KepGroups.Add("OpcGroup");
                SetGroupProperty();
                KepGroup.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(KepGroup_DataChange);
                //KepGroup.AsyncWriteComplete += new DIOPCGroupEvent_AsyncWriteCompleteEventHandler(KepGroup_AsyncWriteComplete);

                KepItems = KepGroup.OPCItems;
                AddOpcItem();
            }
            catch (Exception err)
            {
                SendMsg("枚举本地OPC创建组出现错误:" + err.Message);
            }
        }
设置采集属性
/// <summary>
        /// 设置组属性
        /// </summary>
        private void SetGroupProperty()
        {
            KepServer.OPCGroups.DefaultGroupIsActive = true;
            KepServer.OPCGroups.DefaultGroupDeadband = 0;
            KepGroup.UpdateRate = 3000;
            KepGroup.IsActive = true;
            KepGroup.IsSubscribed = true;
        }

把需要采集数据的点加进去

 private void AddOpcItem()
        {
                  KepItems.AddItem("a1.22.1", 1);
 		  KepItems.AddItem("a2.22.2", 2);
 		  KepItems.AddItem("a3.22.3", 3); 
        }

点数据发送变化的事件

/// <summary>
        /// 每当项数据有变化时执行的事件
        /// </summary>
        /// <param name="TransactionID">处理ID</param>
        /// <param name="NumItems">项个数</param>
        /// <param name="ClientHandles">项客户端句柄</param>
        /// <param name="ItemValues">TAG值</param>
        /// <param name="Qualities">品质</param>
        /// <param name="TimeStamps">时间戳</param>
        private void KepGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
        {
            try
            {
                    for (int i = 1; i <= NumItems; i++)
                    {
 			string temp = string.Concat(ClientHandles.GetValue(i),"-",ItemValues.GetValue(i), "-",Qualities.GetValue(i), "-",TimeStamps.GetValue(i));
                        SendMsg(temp);

                    }
                
            }
            catch (Exception e) {
               SendMsg("KepGroup_DataChange" + e.Message);
            }
        }

  基本上就这样了,整理一下,理解一下,入门没问题,OPC数据的读取还是比较简单的,利用上面的代码,写个简单的程序,把数据读出来没有问题的。

    其实如果不喜欢或者不会写程序,也可以用 KEPServerEx软件,配置一下就能搞定。这个玩意是外国人写,运行稳定,并且支持sql,oracle等多种数据库。虽然是要钱的,但是这个难不倒我们中国人,有破解版。

    这个代码运行有个前提,那就是客户端是服务器端必须是通的。这个通是用标准的OPC客户端能连上,不是网络上能ping通。

什么是标准的OPC客户端。OPC Client.exe 网上也有下载。

     如果标准OPC客户端也连接不上,那就数说明需要客户端需要配置dcom,具体怎么配置,百度一下,本文主要是负责写代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#读取opc数据 的相关文章

  • IOException parsing XML document from class path resource [applicationContext.xml]

    在spring框架搭建的时候 有的时候会出现这样错误 在网上看到说把路径具体指向 例如
  • micropython-SPI通讯

    micropython SPI通讯 1 什么是SPI 2 SPI通讯原理 3 Micropython中的SPI 4 ZTMR测试SPI 1 ZTMR中SPI引脚 2 ZTMRSPI自测 2 SPI 2板之间通讯测试 1 什么是SPI SPI
  • 漫谈硬编码

    一 什么是硬编码 在计算机程序或文本编辑中 硬编码是指将可变变量用一个固定值来代替的方法 例如 以C 为例 char szText 100 code for int i 0 i lt 100 i code 上述语句使用固定值100限定了循环
  • 编码:KR字符串匹配,一个简单到领导都看得懂的算法

    常怀感恩 生活或许就不会处处深渊 这几天看了 柔性字符串匹配 觉得很有意思 书是好书 只是这个脑子是不是猪脑就不知道了 于是秉着知之为知之 不知为不知的精神 我准备再次去请教一下我的领导 在一个月黑风高的夜晚 我给领导发了个消息 领导这么回
  • WiFi技术概述

    1 概述 WLAN是无线局域网络的简称 全称为Wireless Local Area Networks 是一种利用无线技术进行数据传输的系统 该技术的出现能够弥补有线局域网络之不足 以达到网络延伸之目的 Wi Fi是无线保真的缩写 英文全称
  • sprintf, snprintf, _snprintf, sprintf_s 等的区别

    先放结论 1 在支持snpritf的编译器 只使用int snprintf char buffer size t count const char format argument 无论成功或者失败 都会返回字符串的总长度 不包括结束符 如果
  • 数组的添加和删除过滤方法总结es6 filter()

    es6 filter 数组过滤方法总结 Array every x gt x 是每一个都要满足 Array some x gt x 是有一个满足 Array find findIndex 返回符合条件的第一个值 Array filter 过
  • C#进行图片压缩(对jpg压缩效果最好)

    直接上代码 1 public static class ImageCompress 2 3
  • 腾讯云技术分享:MySQL AHI 实现解析

    MySQL 定位用户记录的过程可以描述为 打开索引 gt 根据索引键值逐层查找 B 树 branch 结点 gt 定位到叶子结点 将 cursor 定位到满足条件的 rec 上 如果树高为 N 则需要读取索引树上的 N 个结点并进行比较 如
  • JAVA之初识springMVC框架

    1 环境 操作系统 Mac OS 10 12 6 Tomcat v7 0 JDK 1 7 工具 eclipse 2 新建项目 用eclipse新建项目 选择Dynamic Web Project 将项目字符集改为UTF 8 3 编辑web
  • 为你推荐10款开发常用的代码编辑器

    代码编辑器对于程序员来说十分重要 一个好的编辑器可以节省开发时间 提高工作效率 这篇文章会介绍10个优秀且免费的编辑器 它们都是非常方便易用的环境 你可以用它们来编写代码 查看源文件和文档等 简化你的工作 本文由PHP100中文网编译 转载
  • 区块链三加一:深度论区块链的联盟链意义与作用

    随着区块链技术的发展 越来越受个人及企业的关注 而和区块链联系最为紧密的 恐怕就是金融行业了 然而虽然区块链大受热捧 但毕竟区块链是属于公有区块链 公有区块链有着其不可编辑 不可篡改的特点 这就使得公有链并不适合企业使用了 毕竟如果某金融企
  • mysql 字符集问题整理

    mysql 字符集问题整理 一直对mysql字符集没有明确的概念 mysql为了方便 设置了各种层级的字符集 最近在移植mat数据库时 顺便把这个问题整理清楚 供参考和学习 文章最后有word版本 有两张图片以及不同文字的颜色区分 首先是M
  • kafka + zookeeper下载/安装/使用(超详细)

    kafka是需要zk来支持 所以先下载zk 1 下载安装zookeeper 下载地址 选择不带source的 下载下来解压2次 进入到 D zookeeper apache zookeeper 3 6 1 bin conf 目录下 把zoo
  • pymongo "ServerSelectionTimeoutError: No servers found yet" 错误的解决

    系统转移过程中 擅自把aptitude安装的mongoengine换成了pip安装 系统启动以后 报这个错误 报错提示 File usr local lib python2 7 dist packages pymongo mongo cli
  • 非常详尽的 Linux 中 WEB服务器配置与管理 (通过例子来讲解)

    Apache服务器的安装与启动 检查是否已经安装了APACHE并启动它 这是已安装好的状态 root root rpm qa grep httpd httpd tools 2 2 15 53 el6 x86 64 httpd 2 2 15
  • GIT高级使用技巧

    GIT高级使用技巧 导出GIT日志到文件 按照 lt 哈希 gt lt 作者名 gt lt 作者邮箱地址 gt lt 作者日期 gt
  • linux中mysql启动服务命令(合集)

    linux的mysql启动服务命令 linux的mysql启动服务命令1 使用mysqld启动 关闭MySQL服务 mysqld是MySQL的守护进程 我们可以用mysqld来启动 关闭MySQL服务 关于mysqld MySQL 5 6官
  • ySql.Data.Types.MySqlConversionException: Unable to convert MySQL date/time value to System.DateTime

    public DateTime Createtime MySql Data Types MySqlConversionException Unable to convert MySQL date time value to System D
  • 对技术行业的深度思考

    技术行业是当今世界最为热门和发展迅猛的领域之一 无论是互联网 人工智能还是区块链 技术的快速发展正在改变着我们的生活和社会 然而 我们是否真正思考过技术在我们生活中的影响和意义 本文将对技术行业展开深度思考 探讨其带来的优势与挑战 以及如何

随机推荐

  • 深度解剖数据在队列的应用

    gt 作者简介 旧言 目前大一 现在学习Java c c Python等 gt 座右铭 松树千年终是朽 槿花一日自为荣 gt 望小伙伴们点赞 收藏 加关注哟 前言 前面我们已经学习了顺序表和链表 他们无法控制数据的打印 而队列只允许在一端进
  • 关于QQ的相关代码收集整理

    下面个我个人整理的一些实用的QQ聊天代码 包括手机端和电脑端的 希望不用每次都重新去找 跳转到手机QQ并开始聊天 安卓代码 String url mqqwpa im chat chat type wpa uin 458237282 star
  • 如何写入 CSV文件

    如何写入 CSV文件 import csv 1 打开文件 as 称 它为 变量xxx 若不存在该文件 则创建 with open newcsv csv w encoding utf 8 as newfile 存储 csv 读取的文件writ
  • Python pandas的DataFrame获取行数、列数、索引、元素值,及添加和删除行列

    一 获取行数 列数 gt gt gt df pd DataFrame np arange 12 reshape 3 4 index row1 row2 row3 columns col1 col2 col3 col4 gt gt gt gt
  • 解决A master URL must be set in your configuration

    win7 idea spark 对应pmo文件如下
  • ubuntu下Mysql的安装使用

    1 安装mysql服务端命令 sudo apt get install mysql server 2 安装mysql客户端命令 sudo apt get install mysql client 3 检查是否安装并且服务已经启用 netst
  • 数据结构学习_44

    主要内容 1 逆波兰表达式 2 稀疏矩阵存储方式 3 平衡二叉树 4 大根堆 小根堆 构建方式 5 完全二叉树 满二叉树 一 逆波兰表达式 先把一般表达式按中序存储 再按后续遍历输出 优点在于 后序遍历时方便计算运算 运算时可以对一般表达式
  • 多线程DAG调度

    没有找妹子排版 这效果差距是有点大 git地址 https github com a925907195 dag flow platform 第1章 基础介绍 1 1简介 1 2 什么是DAG 1 3 Hystrix 第2章 DAG FLOW
  • Python Pillow(PIL)库的用法介绍(二)

    Python Pillow PIL 库的用法介绍 二 在上一篇文章中介绍了Pillow库的一些基本用法 参考 https blog csdn net weixin 43790276 article details 108478270 Pil
  • maven 安装自己生成的jar到本地

  • python第三方的模块gradio

    Gradio是一个Python第三方模块 它可以帮助开发人员快速构建Web界面来展示他们的机器学习模型 Gradio支持多种语言和框架 包括TensorFlow PyTorch Scikit learn和Keras等 使用Gradio 开发
  • 红帽Redhat—Linux磁盘管理

    一 磁盘管理 1 磁盘接口类型 IDE ATA 并行接口 有ATA 1到ATA 7版本 理论数据传输率33MB s到133MB s 已经淘汰了 SATA接口 串行接口 分别有SATA 1 5Gbit s SATA 3Gbit s和SATA
  • Unity用代码写一个Inspector里面能拉动的滑条

    如图 代码如下 Range 0 0f 0 5f public float Alpha
  • MySQL事务隔离原理(四种隔离级别的具体实现)

    一 事务的定义 事务是由 MySQL 的引擎来实现的 常见的 InnoDB 引擎它是支持事务的 不过并不是所有的引擎都能支持事务 比如 MySQL 原生的 MyISAM 引擎就不支持事务 也正是这样 所以大多数 MySQL 的引擎都是用 I
  • C语言的32个关键字和9种控制语句

    一 C语言的关键字共有32个 根据关键字的作用 可分其为数据类型关键字 控制语句关键字 存储类型关键字和其它关键字四类 1 数据类型关键字 12个 1 char 声明字符型变量或函数 2 double 声明双精度变量或函数 3 enum 声
  • vue中引入jquery的具体操作

    最近盆友工作中遇到了vue中要引入jquery的情况 今天试着引了一下 步骤如下 创建vue项目 npm vue cli vue init webpack vuejquery 指的是项目名字 下载 jquery npm i jquery S
  • RecyclerView利用GridLayoutManager实现少于span数量时候居中对齐

    这里不是直接讲怎么实现GridLayoutManager的居中对齐事情 原始需求是这样的 每行显示4个标签 当有超过4个item时左对齐 但当item少于4个时候要居中对齐 并且大小不变间距不变 一下图片 先要知道public GridLa
  • 重生之再学mysql-数据库三范式

    数据库三范式 介绍 第一范式 确保每列都是不可拆分的 第二范式 在第一范式的基础上 确保非主键列完全依赖于主键 而不是依赖于主键的一部分 第三范式 第二范式的基础上 确保非主键列不存在传递依赖 介绍 什么是数据库三范式 它有什么作用 数据库
  • Shutil.move PermissionError: [WinError 82] 无法创建目录或文件,以及PermissionError: [Errno 13] Permission denied

    Shutil move PermissionError WinError 82 无法创建目录或文件 以及PermissionError Errno 13 Permission denied 1 报错 1 1 PermissionError
  • C#读取opc数据

    关于OPC这个东西 网上文章很多 作为一个需要取数的程序员来说 需要知道的就是客户端的一些设置 至于服务器端 想知道的自己去百度撸吧 客户端读取数据 网上很多 但是在刚开始的时候总会遇到各种问题 在这里写点 权且自己当个记录吧 首先是引用一