OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)

news2024/9/28 9:22:27

文章目录

  • 1. OPC基础知识:OPCDA,OPCUA
    • 1.1 OPC基础知识
    • 1.2 OPC通信读写方式
  • 2. OPC通信仿真
    • 2.1 上位机与PLC通过ModbusTCP直接通信
    • 2.2 OPC通信介绍及实例
      • 2.2.1 OPC通信与ModbusTCP比较
      • 2.2.2 OPC通信应用场景
      • 2.2.3 OPC DA通信仿真实例
      • 2.2.4 OPC UA通信仿真实例
      • 2.2.5 OPC通信仿真实例框架图
  • 3. C#写一个OPC DA客户端(控制台程序)
    • 3.1 动态库加载及函数介绍
    • 3.2 数据的读取程序编写

1. OPC基础知识:OPCDA,OPCUA

1.1 OPC基础知识

  • OPC的诞生及历史:软件进行开发时需要与各种不同的协议进行对接,例如Modbus协议等,当设备很多,协议很多的情况下,上位机与硬件的沟通就会变得很麻烦,所以就有了将这些协议抽象出一个标准接口,对于软件人员就无需和协议对接,只需要对接接口即可,因此OPC就诞生了

  • 最早由于Windows系统是作为主流,因此OPC依赖于Windows的COM和DCOM技术,依赖上述早期技术就产生了OPCDA,OPCDA也可以看做一个标准

后来就有了OPC基金会,很多企业和协议加入进来,就可以使用相应的标准

  • 随着时间的发展,OPCDA通信的问题研究暴露出来了,两台电脑之间,假设有A和B两台电脑,A作为服务器,B作为客户端,如果A、B都在一个局域网就可以进行通信,但实际上不能直接通信,需要做一些配置,这些配置也就成为DCOM配置,DCOM配置除了麻烦,也会造成安全性很差
    为了OPCDA的缺点,OPC基金会就去做了优化,因此产生了OPCUA

  • 因此OPCUA就可以看做OPCDA的产品升级,不再依赖DCOM,也就不依赖Windows平台可以实现跨平台的架构,而是基于以太网,最底层也就是基于Socket的,安全性上也得到了提升(秘钥管理等),现在及以后主流肯定是OPCUA,由于历史原因OPCDA还在使用,也是工业4.0落地的协议

  • 但是OPCUA是需要授权的,也就是需要收费的,有可能OPCUA的客户端免费,服务器是收费的

  • 官方的东西:
    在这里插入图片描述
    OPC Classic规范是由三个部分组成:通信、报警和历史数据
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.2 OPC通信读写方式

无论是 OPC DA 还是 OPC UA,都遵从 OPC 标准,因此在某些方面是类似,这里主要针对 OPC的读写方式进行说明。OPC 读写方式主要有三种,分别是同步方式异步方式订阅方式订阅方式仅针对读取有效

  1. OPC 同步方式 :同步方式是指当客户端发送请求后,必须等到服务器响应全部完成后才能返回,期间将一直处于等待状态,因此当多客户端向服务器操作时,客户端程序产生阻塞,同步通讯适用于客户端较少,数据量较小的场合,同步方式的工作流程如下图所示:
    在这里插入图片描述
    发送请求call之后,需要等一个replay回应,就跟Modbus通信是类似的,一发一回之后,再发再回,

  2. OPC 异步方式 :异步方式是指当客户端发送请求后立即返回,不需要等待服务器的响应,可以进行其他操作,当服务器完成响应后会自动通知客户端,因此相对于同步通讯,异步通讯的效率更高,异步方式的工作流程如下图所示:
    在这里插入图片描述
    发送完call之后,不需要等,继续发第二个call,等第一个call完成之后会通过事件告知客户端,后边的call的处理方式也是一样

  3. OPC 订阅方式 :订阅方式在初始化时,就需要订阅相应的通信组 Group,这样当服务器的 Group组内有数据发生变化时,就会自动刷新客户端数据,客户端只需要向服务器发送一次请求,因此订阅方式的效率是非常高的,订阅方式的工作流程如下图所示:
    在这里插入图片描述
    订阅的方式只针对读取,写入可以使用同步和异步,

2. OPC通信仿真

2.1 上位机与PLC通过ModbusTCP直接通信

前面我们介绍过PLC通过ModbusTCP与上位机直接通信,下面将会以实例再次进行介绍。
以已经建在局域网内的以下PLC为例,可以使用Modbus TCP进行通信
在这里插入图片描述
以下为写到台达PLC中的程序
在这里插入图片描述
为了读取对应的值,可以采用Modbus TCP通信进行,以读取D33为例
在这里插入图片描述
如下图直接在Modbus Poll中输入D33
在这里插入图片描述
就可以直接读到数据
在这里插入图片描述
ModbusTCPPC作为ModbusTCP客户端,PLC作为ModbusTCP服务器,两者直接通信

2.2 OPC通信介绍及实例

2.2.1 OPC通信与ModbusTCP比较

ModbusTCP通信是采用直接方式进行通信,用OPC的方式如何去做呢?
OPC是间接方式,OPC通信方式是:PLC作为ModbusTCP服务器,用KepServer作为ModbusTCP客户端,同时作为OPC服务器,PC作为OPC客户端

2.2.2 OPC通信应用场景

单个设备上述OPC通信方式比较麻烦的,且是收费的,但好处是当设备比较多,协议多的时候OPC通信优势就会很明显。
OPC具有以下应用场景:

  • (1)设备协议不知道或者写不了的时候
  • (2)设备种类很多,很麻烦
  • (3)设备数量很多,很麻烦

2.2.3 OPC DA通信仿真实例

为什么OPC这种通信方式可以实现上述的功能呢?
这是因为KepServer中集成了很多驱动,所以你只管做配置

OPC 通信基于服务器-客户端模型,因此需要实现OPC客户端通信之前,需要搭建一个 OPC 服务器环境,这里我们采用比较主流的 KepServer 软件,硬件以台达PLC通过ModbusTCP为例,关于 KepServer的安装授权过程,这里就不做过多赘述了。

打开 KepServer 软件后,通过菜单新建一个项目,然后按照下图进行操作:
下图为查看KepServer中集成的驱动种类,以下以台达PLC通过ModbusTCP为例,通道类型选择对应的ModbusTCP通信。
在这里插入图片描述
在这里插入图片描述
创建台达PLC设备
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入PLC地址和设备地址
在这里插入图片描述
以上面读取的D33为例创建标记
在这里插入图片描述
以下就是创建了一个标记,当需要读取更多的变量的时候,就可以通过添加更多标记的方式进行
在这里插入图片描述

保存配置

运行->连接
在这里插入图片描述
启动监控后对应的值就读取过来
在这里插入图片描述
此处的OPC Quick Client相当于客户端,在KepServer上进行配置之后就可以实现与PLC的通信

上述的过程就是:PLC作为ModbusTCP服务器,用KepServer作为ModbusTCP客户端

同时作为OPC服务器有没有开启呢?
在关闭了KepServer后,使用OPC客户端进行连接,如果可以连接上,那就代表服务器是打开的

打开如下OPC DA客户端软件(模拟上位机),并如下图所示进行选择:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到读到了对应的变量值
在这里插入图片描述
这说明服务器所提供的服务是一直在打开的

2.2.4 OPC UA通信仿真实例

上述过程介绍的是OPC DA的过程,在KepServer中也是集成进去了,在右下角有一个图标是关于OPC UA的,进去后的界面如下:
在这里插入图片描述
这里的49320是?

上面讲过OPC UA是基于socket,OPC UA服务器其实就是TCP服务器,OPC UA是应用层协议,加载到TCP中,类似于Modbus TCP

如果是基于TCP的,那么就可以使用网络调试助手连接到,下图显示是连接上了
在这里插入图片描述
所以KepServer本质上就是一个TCP服务器,可以同时打开OPC DA和OPC UA的服务器

如果要连接OPC UA服务器,可以使用OPC UA客户端,常用的有UaExperter,具体操作如下:
在这里插入图片描述
在这里插入图片描述
可以看到数据已经读到

2.2.5 OPC通信仿真实例框架图

绘制一个框架图进行理解,DVP32是台达PLC,通过以太网接口连接到交换机,PC也是连接到交换机上的,也就是在一个局域网内,通过KepServer创建OPC UA服务器,利用OPC UA客户端就可以实现与PLC的的交互(读取与修改PLC变量),下图红色即为OPC UA通信的数据流
在这里插入图片描述

先用官方提供的客户端软件进行通信测试接口正常,再自己去写。

3. C#写一个OPC DA客户端(控制台程序)

3.1 动态库加载及函数介绍

新建项目,加载dll库(利用COM技术写的)
在这里插入图片描述
添加引用,查看到其中包含了众多方法
在这里插入图片描述
其中OPCGroups继承于IOPCGroups接口
在这里插入图片描述
在这里插入图片描述

3.2 数据的读取程序编写

PLC中数据读取程序可以按照以下层次进行读取:OPCServer >> OPCGroups >> OPCGroup >> OPCItems >> OPCItem(标记/变量,最终要读取的)

OPC客户端和服务器不一定在一台电脑,一般会用一台电脑作为服务器,这个电脑就是一个Node,再在电脑中找ServerName,也就是下图中的Prog ID
在这里插入图片描述
连接的对应代码如下:
在这里插入图片描述
运行结果:
在这里插入图片描述
连接之后进行配置

按照OPCServer >> OPCGroups >> OPCGroup >> OPCItems >> OPCItem(标记/变量,最终要读取的)结构进行变量的读取
在这里插入图片描述
在这里插入图片描述
这里只是单个设备单个变量的值读取,可以参考下篇读取多个设备多个变量值的方法

4.学习视频地址:
OPC框架搭建及实现原理分析1;OPC框架搭建及实现原理分析2;OPC框架搭建及实现原理分析3;OPC框架搭建及实现原理分析4

本篇是比较基础和简要的介绍,作为补充请查看OPC通信从入门到精通_2_OPC通信详解和C#客户端编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/789895.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

随手笔记——3D−3D:ICP理论

随手笔记——3D−3D:ICP理论 说明SVD 方法非线性优化方法 说明 ICP 的求解也分为两种方式:利用线性代数的求解(主要是 SVD),以及利用非线性优化方式的求解(类似于 Bundle Adjustment)。 SVD 方…

Android平台GB28181设备接入模块之按需编码和双码流编码

技术背景 我们在做执法记录仪或指挥系统的时候,会遇到这样的情况,大多场景下,我们是不需要把设备端的数据,实时传给国标平台端的,默认只需要本地录像留底,如果指挥中心需要查看前端设备实时数据的时候&…

【LeetCode热题100】打卡第44天:倒数第30~25题

文章目录 【LeetCode热题100】打卡第44天:倒数第30~25题⛅前言 移动零🔒题目🔑题解 寻找重复数🔒题目🔑题解 二叉树的序列化与反序列化🔒题目🔑题解 最长递增子序列🔒题目&#x1f5…

力扣 763. 划分字母区间

题目来源&#xff1a;https://leetcode.cn/problems/partition-labels/description/ C题解1&#xff1a; 先遍历一遍使用哈希算法找到每个小写字母的最远的索引&#xff0c;再遍历一次&#xff0c;不断更新每个片段的最远距离。 class Solution { public:vector<int> pa…

Qt Core学习日记——第八天QMetaObject(下)

QMetaObject::normalizedType 将名称规范化。 例如&#xff1a; QByteArray normType QMetaObject::normalizedType(" int const *"); // normType is now "const int*" QMetaObject::connect(const QObject *sender, int signal_index, const QObject…

redis(12):springboot使用redis注解做缓存

1 新建springboot项目 2 相关注解 EnableCaching 在启动类上加上注解启动缓存 #作用在你要缓存的数据上 Cacheable(key"#id",cacheNames"com.sxt.service.impl.MenuServiceImpl") Cacheput 解决脏读 CachEvict&#xff08;解决脏读&#xff09; Cach…

01Mybatis报错日志 BindingException

01 Mybatis报错日志 BindingException Type interface com.zhnx.demo1.mapper.UserMapper is not known to the MapperRegistry. org.apache.ibatis.binding.BindingException: Type interface com.zhnx.demo1.mapper.UserMapper is not known to the MapperRegistry.at org…

腾讯云服务器公共镜像大全_Linux和Windows操作系统

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…

LeetCode116. 填充每个节点的下一个右侧节点指针

116. 填充每个节点的下一个右侧节点指针 文章目录 [116. 填充每个节点的下一个右侧节点指针](https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/)一、题目二、题解方法一&#xff1a;迭代方法二&#xff1a;递归 一、题目 给定一个 完美二叉树 &…

redis的并发安全问题:redis的事务VSLua脚本

redis为什么会发生并发安全问题&#xff1f; 在redis中&#xff0c;处理的数据都在内存中&#xff0c;数据操作效率极高&#xff0c;单线程的情况下&#xff0c;qps轻松破10w。反而在使用多线程时&#xff0c;为了保证线程安全&#xff0c;采用了一些同步机制&#xff0c;以及多…

grid map学习笔记1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行

文章目录 0 引言1 安装依赖和编译1.1 安装依赖1.2 下载编译 2 运行示例2.1 simple_demo2.2 tutorial_demo2.3 iterators_demo2.4 image_to_gridmap_demo2.5 grid_map_to_image_demo2.6 opencv_demo2.7 resolution_change_demo2.8 filters_demo2.9 interpolation_demo 0 引言 苏…

java项目之个人交友网站(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的个人交友网站。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…

计算机启动过程uefi+gpt方式

启动过程&#xff1a; 一、通电 按下开关&#xff0c;不用多说 二、uefi阶段 通电后&#xff0c;cpu第一条指令是执行uefi固件代码。 uefi固件代码固化在主板上的rom中。 &#xff08;一&#xff09;uefi介绍 UEFI&#xff0c;全称Unified Extensible Firmware Interface&am…

基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章

最近在整理和编写基于C#的WinForm应用程序&#xff0c;然后碰到一个其他读者也可能碰到的问题&#xff0c;就是C#的Borderless无边框窗体的动画效果问题。 在Visual Studio 2022里&#xff0c;C#的WinForm程序提供了Borderless无边框窗体的样式效果&#xff0c;但是它没提供在无…

scrollIntoView()定位元素显示导致页面上移解决方法?

文章目录 项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a;1、使用fixed固定定位父级元素2、控制父元素的scrollTop 项目场景&#xff1a; 在项目中需要根据当前组件的componentId来定位到页面的顶部显示。 问题描述 本来想着使用最传统的方法&#xff0…

MYSQL 练习2

练习2 创建company数据库在数据库中根据以下图示创建表&#xff0c;表结构如下&#xff0c;并插入以下数据&#xff0c;完成下面的sql。 ​ 表结构如下&#xff1a; salgrade表 salrade表数据 完成以下SQL编写&#xff1a; 修改emp表中sal字段为salary查找年薪在20000到3000…

JavaScript布尔逻辑

布尔逻辑是一种逻辑学上的分支&#xff0c;涉及真和假的值。布尔逻辑中使用的运算符仅返回真或假结果&#xff0c;这些运算符包括取反、与、或等。布尔逻辑通常用于电子学、计算机科学和数学等领域&#xff0c;其中真和假的值对于决策和控制流程非常重要。在计算机编程中&#…

60个AIGC专业术语手册;5种大模型微调方法总结;大模型创业潮成败点评;AIGC通用大模型产品测评报告 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; ChatGLM 金融大模型挑战赛&#xff0c;冠军送12B模型授权30W算力 GLM大模型联合安硕信息、阿里云、魔搭社区、北京交通大学&#xff0…

【并发专题】线程池ThreadPoolExecutorl底层原理源码分析

目录 前置知识课程内容一、线程池1.基本介绍2.Executor接口3.线程池的重点属性ctl字段RUNNING字段SHUTDOWN字段 二、线程池的创建及参数解读三、核心源码解读 学习总结 前置知识 Q1&#xff1a;终止一个线程的方法有哪些&#xff1f; 答&#xff1a;通常有4个方法。其中前2个是…

机械制造三维虚拟仿真实训的优点

机械制造三维虚拟仿真实训系统是一种基于计算机技术的机械原理仿真软件&#xff0c;它可以模拟各种机械系统的运动和受力情况&#xff0c;帮助用户深入了解机械原理的工作原理和应用。该系统采用三维建模技术&#xff0c;将机械系统的各个部分进行数字化建模&#xff0c;并通过…