当前位置: 首页 > 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模式下不…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...

初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)

零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...