当前位置: 首页 > news >正文

C#OPC(上)

OPC(OLE for Process Control),用于过程控制的OLE,是一个工业标准,管理这个标准的国际组织是OPC基金会,OPC基金会现有会员以超过220家。遍布全球,包括世界上所有主要的自动化控制系统、仪器仪表及过程控制系统的公司。基于微软的OLE(Active X)、COM (部件对象模型)和DCOM (分布式部件对象模型)技术。OPC包括一整套接口、属性和方法的标准集,用于过程控制和制造业自动化系统。

引用 OPC 相关的库

  • 首先需要安装并引用相应的 OPC 客户端库,常见的有 OPC Foundation 提供的.NET OPC 客户端库,如OPC.NET API 等,也可以使用第三方的 OPC 客户端库,如 Kepware 的 OPC 客户端库等。

连接到 OPC 服务器

  • 使用 OPC 客户端库提供的类和方法来创建 OPC 连接对象,并指定要连接的 OPC 服务器的名称或地址。

  • 调用连接对象的连接方法,建立与 OPC 服务器的连接。例如,使用 OPC Foundation 的.NET API 时,可能的代码如下:

using Opc;
using Opc.Da;class Program
{static void Main(){// 创建OPC连接对象Opc.Da.Server server = new Opc.Da.Server(new Opc.URL("opcda://localhost/OPCServerName"), null);try{// 连接到OPC服务器server.Connect();if (server.ServerState == ServerState.Running){Console.WriteLine("已成功连接到OPC服务器");}else{Console.WriteLine("无法连接到OPC服务器");}}catch (Exception ex){Console.WriteLine("连接OPC服务器时出错: " + ex.Message);}}
}

浏览 OPC 服务器的地址空间

  • 连接成功后,可以使用 OPC 连接对象的浏览方法来获取 OPC 服务器的地址空间,即服务器上可用的 OPC 项和组的层次结构。

  • 通常可以递归地浏览地址空间,以查找特定的 OPC 项或组。例如:

// 获取根节点
ItemIdentifier root = new ItemIdentifier();
BrowseElement[] elements = server.Browse(root);foreach (BrowseElement element in elements)
{Console.WriteLine(element.ItemName);// 如果元素是文件夹,可以递归浏览if (element.IsFolder){Browse(element.ItemID);}
}

读取 OPC 数据

  • 确定要读取的 OPC 项的标识符,可以是项的名称、路径或唯一标识符等。

  • 使用 OPC 连接对象的读取方法,传入要读取的 OPC 项的标识符列表,获取相应的 OPC 数据。例如:

// 定义要读取的OPC项的标识符
ItemIdentifier[] itemIds = new ItemIdentifier[]
{new ItemIdentifier("TagName1"),new ItemIdentifier("TagName2")
};// 读取OPC数据
ItemValueResult[] results = server.Read(itemIds);foreach (ItemValueResult result in results)
{Console.WriteLine($"Tag: {result.ItemName}, Value: {result.Value}");
}

写入 OPC 数据

  • 确定要写入的 OPC 项的标识符和要写入的值。

  • 使用 OPC 连接对象的写入方法,传入要写入的 OPC 项的标识符和相应的值。例如:

// 定义要写入的OPC项的标识符和值
ItemIdentifier[] itemIds = new ItemIdentifier[]
{new ItemIdentifier("TagName1")
};
object[] values = new object[]
{123.45
};// 写入OPC数据
server.Write(itemIds, values);

断开与 OPC 服务器的连接

  • 当不再需要与 OPC 服务器通信时,调用 OPC 连接对象的断开连接方法,关闭连接。例如:

server.Disconnect();

OPC安装

在 C# 中安装和引用 OPC 客户端库通常有以下几种方法,以下以常见的 OPC Foundation 提供的.NET OPC 客户端库和第三方 Kepware 的 OPC 客户端库为例进行说明:

使用 NuGet 包管理器安装 OPC Foundation 的.NET OPC 客户端库

  • 打开 NuGet 包管理器:在 Visual Studio 中,右键单击项目名称,选择 “管理 NuGet 程序包”,这将打开 NuGet 包管理器窗口。

  • 搜索 OPC 客户端库:在 NuGet 包管理器窗口的搜索框中,输入 “OPC Foundation.NET API” 或相关关键词,搜索结果中会列出 OPC Foundation 提供的.NET OPC 客户端库。

  • 安装库:选择合适的 OPC 客户端库版本,然后点击 “安装” 按钮,NuGet 包管理器会自动下载并安装该库及其依赖项到你的项目中。

步骤一

 步骤二

 步骤三

手动添加引用 OPC Foundation 的.NET OPC 客户端库

  • 下载库文件:访问 OPC Foundation 的官方网站,找到适用于.NET 的 OPC 客户端库的下载链接,通常会提供一个安装包或一组可下载的文件。下载完成后,解压文件到本地目录。

  • 添加引用:在 Visual Studio 中,右键单击项目名称,选择 “添加引用”,在弹出的 “引用管理器” 对话框中,点击 “浏览” 按钮,找到之前解压的 OPC 客户端库文件所在的目录,选择相应的.dll 文件,然后点击 “确定” 按钮将其添加到项目引用中。

### 安装和引用 Kepware 的 OPC 客户端库

安装和引用 Kepware 的 OPC 客户端库

  • 获取 Kepware 客户端库:从 Kepware 官方网站下载适用于 C# 的 OPC 客户端库安装包,通常是一个.msi 或.exe 文件。

  • 安装客户端库:运行下载的安装程序,按照安装向导的提示完成 Kepware OPC 客户端库的安装,安装过程中可以选择安装路径等选项。

  • 添加引用:安装完成后,在 Visual Studio 中,右键单击项目名称,选择 “添加引用”,在 “引用管理器” 对话框中,点击 “浏览” 按钮,找到 Kepware OPC 客户端库的安装目录,一般在 “C:\Program Files (x86)\Kepware\Kepware OPC Server\Client” 或类似目录下,选择相关的.dll 文件,如 “Kepware.OPC.DA.Client.dll” 等,然后点击 “确定” 按钮将其添加到项目引用中。

安装和引用完成后,就可以在 C# 代码中使用`using`语句引入相应的命名空间,开始使用 OPC 客户端库提供的功能了,如`using Opc;`和`using Opc.Da;`等,具体的命名空间根据所使用的 OPC 客户端库而定

相关文章:

C#OPC(上)

OPC(OLE for Process Control),用于过程控制的OLE,是一个工业标准,管理这个标准的国际组织是OPC基金会,OPC基金会现有会员以超过220家。遍布全球,包括世界上所有主要的自动化控制系统、仪器仪表及过程控制系统的公司。基于微软的O…...

Imgui + Cmake + OpenGL + GLFW 隐藏控制台窗口

网上一般是VS&#xff0c;如何在属性里面把控制台改为窗口 本文&#xff0c;使用Clion Cmake&#xff0c;实现如何隐藏控制台窗口 环境&#xff1a;OpenGL3 GLFW 添加头文件#include <windows.h>把main函数入口改为int WinMain(HINSTANCE hInstance, HINSTANCE hPrevI…...

Spring Boot(七):Swagger 接口文档

1. Swagger 简介 1.1 Swagger 是什么&#xff1f; Swagger 是一款 RESTful 风格的接口文档在线自动生成 功能测试功能软件。Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。目标是使客户端和文件系统作为服务器以同样的…...

RabbitMQ - 4 ( 22000 字 RabbitMQ 入门级教程 )

一&#xff1a; RabbitMQ 高级特性 前面主要讲解了 RabbitMQ 的概念和应用。RabbitMQ 实现了 AMQP 0-9-1 规范&#xff0c;并在此基础上进行了多项扩展。在 RabbitMQ 官方网站中详细介绍了其特性&#xff0c;我们将其中一些重要且常用的特性挑选出来进行讲解。 1.1 消息确认 …...

印象笔记07——试一试PDF标注

印象笔记07——试一试PDF标注 [!CAUTION] 根据第六期&#xff0c;我再次查询了资料&#xff0c;印象笔记还是有一些可圈可点的功能的&#xff08;当然部分有平替&#xff09;&#xff0c;针对会员作用&#xff0c;开发使用场景虽然是逆向的&#xff0c;但我坚信这是一部分人的现…...

Vue3实战教程》24:Vue3自定义指令

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 自定义指令​ 介绍​ 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令 (Custom Directives)。 我们已经介绍了两种在 Vue 中重用代码的方式&#xff1a;组件和组…...

【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向

【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 文章目…...

【ArcGIS Pro/GeoScene Pro】可视化时态数据

可视化过去二十年新西兰国际旅游业的发展变化 工程数据下载 ArcGIS Pro 快速入门指南—ArcGIS Pro | 文档 添加数据 数据为中国旅客数据 转置表字段 列数据转行数据...

Linux buildroot和ubuntu的异同点

Buildroot 和 Ubuntu 都是 Linux 系统的操作环境,但它们的设计理念和使用场景有很大的不同。 一、定义与目标 Buildroot Buildroot 是一个用于生成嵌入式 Linux 系统的工具集,专注于交叉编译和构建嵌入式设备的最小 Linux 环境。它的目标是为嵌入式系统提供定制化和优化的…...

k8s系列--通过docker拉取的镜像导入到 containerd中

要将通过 docker pull 拉取的镜像导入到 containerd 中&#xff0c;可以按照以下步骤操作&#xff1a; 步骤 1&#xff1a;使用 docker 将镜像保存为 tar 文件 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.11.1 docker save registry.cn-ha…...

Spring Boot(快速上手)

Spring Boot 零、环境配置 1. 创建项目 2. 热部署 添加依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional> </dependency&…...

note 41:账务系统开发规范

目录 系统设计 防重控制 流量控制 并发控制 异常处理 备份机制 系统开发​​​​​​​ 前端队列操作 外系统交互 ​​​​​​​​​​​​​​ 系统设计 防重控制 对于进入到系统中的数据&#xff08;文件导入、手工录入、系统直连等&#xff09;以及本系统发往外…...

基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献&#xff1a; 考虑使用UAV作为中继辅助节点的设备到设备&#xff08;D2D&#xff09;无线信息和…...

《Vue3实战教程》35:Vue3测试

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 测试​ 为什么需要测试​ 自动化测试能够预防无意引入的 bug&#xff0c;并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一…...

【Java设计模式-3】门面模式——简化复杂系统的魔法

在软件开发的世界里&#xff0c;我们常常会遇到复杂的系统&#xff0c;这些系统由多个子系统或模块组成&#xff0c;各个部分之间的交互错综复杂。如果直接让外部系统与这些复杂的子系统进行交互&#xff0c;不仅会让外部系统的代码变得复杂难懂&#xff0c;还会增加系统之间的…...

log4j2的Strategy、log4j2的DefaultRolloverStrategy、删除过期文件

文章目录 一、DefaultRolloverStrategy1.1、DefaultRolloverStrategy节点1.1.1、filePattern属性1.1.2、DefaultRolloverStrategy删除原理 1.2、Delete节点1.2.1、maxDepth属性 二、知识扩展2.1、DefaultRolloverStrategy与Delete会冲突吗&#xff1f;2.1.1、场景一&#xff1a…...

super_vlan

Super VLAN产生的背景 就经典的酒店例子来说&#xff0c;若是将101房和102房的网络划分在同一个vlan下面&#xff0c;那么101房出现了一个懂得某些安全技术的大佬&#xff0c;就会使得102房的隐私得到严重的隐患 所以这时我们就需要将二层给隔离开&#xff0c;但又要去保证10…...

前端CSS3学习

学习菜鸟教程 火狐-moz- 谷歌 Safari -webkit- 前面都加这个&#xff0c;可能才生效 边框 border: 1px solid #ddd 粗细 样式 样色 经常和border-radius 一块用 border-radius: 50px 20px 第一个左右 第二个右左 border-top-left-radius … box-shadow: 10px 5px 10px 0 #88…...

HTML——58.value和placeholder

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>value和placeholder属性</title></head><body><!--input元素的type属性&#xff1a;(必须要有)1.指定输入内容的类型2.默认为text,单行文本框-->&l…...

STM32单片机芯片与内部57 SPI 数据手册 寄存器

目录 一、SPI寄存器 1、SPI控制寄存器 1(SPI_CR1)(I2S模式下不使用) 2、SPI控制寄存器 2(SPI_CR2) 3、SPI 状态寄存器(SPI_SR) 4、SPI 数据寄存器(SPI_DR) 5、SPI CRC多项式寄存器(SPI_CRCPR)(I2S模式下不使用&#xff09; 6、SPI Rx CRC寄存器(SPI_RXCRCR)(I2S模式下不…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...