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

文章目录

  • 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通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第1张图片
    OPC Classic规范是由三个部分组成:通信、报警和历史数据
    OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第2张图片
    OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第3张图片
    在这里插入图片描述
    OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第4张图片

1.2 OPC通信读写方式

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

  1. OPC 同步方式 :同步方式是指当客户端发送请求后,必须等到服务器响应全部完成后才能返回,期间将一直处于等待状态,因此当多客户端向服务器操作时,客户端程序产生阻塞,同步通讯适用于客户端较少,数据量较小的场合,同步方式的工作流程如下图所示:
    OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第5张图片
    发送请求call之后,需要等一个replay回应,就跟Modbus通信是类似的,一发一回之后,再发再回,

  2. OPC 异步方式 :异步方式是指当客户端发送请求后立即返回,不需要等待服务器的响应,可以进行其他操作,当服务器完成响应后会自动通知客户端,因此相对于同步通讯,异步通讯的效率更高,异步方式的工作流程如下图所示:
    OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第6张图片
    发送完call之后,不需要等,继续发第二个call,等第一个call完成之后会通过事件告知客户端,后边的call的处理方式也是一样

  3. OPC 订阅方式 :订阅方式在初始化时,就需要订阅相应的通信组 Group,这样当服务器的 Group组内有数据发生变化时,就会自动刷新客户端数据,客户端只需要向服务器发送一次请求,因此订阅方式的效率是非常高的,订阅方式的工作流程如下图所示:
    OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第7张图片
    订阅的方式只针对读取,写入可以使用同步和异步,

2. OPC通信仿真

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

前面我们介绍过PLC通过ModbusTCP与上位机直接通信,下面将会以实例再次进行介绍。
以已经建在局域网内的以下PLC为例,可以使用Modbus TCP进行通信
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第8张图片
以下为写到台达PLC中的程序
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第9张图片
为了读取对应的值,可以采用Modbus TCP通信进行,以读取D33为例
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第10张图片
如下图直接在Modbus Poll中输入D33
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第11张图片
就可以直接读到数据
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第12张图片
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通信。
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第13张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第14张图片
创建台达PLC设备
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第15张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第16张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第17张图片
输入PLC地址和设备地址
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第18张图片
以上面读取的D33为例创建标记
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第19张图片
以下就是创建了一个标记,当需要读取更多的变量的时候,就可以通过添加更多标记的方式进行
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第20张图片

保存配置

运行->连接
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第21张图片
启动监控后对应的值就读取过来
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第22张图片
此处的OPC Quick Client相当于客户端,在KepServer上进行配置之后就可以实现与PLC的通信

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

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

打开如下OPC DA客户端软件(模拟上位机),并如下图所示进行选择:
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第23张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第24张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第25张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第26张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第27张图片
可以看到读到了对应的变量值
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第28张图片
这说明服务器所提供的服务是一直在打开的

2.2.4 OPC UA通信仿真实例

上述过程介绍的是OPC DA的过程,在KepServer中也是集成进去了,在右下角有一个图标是关于OPC UA的,进去后的界面如下:
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第29张图片
这里的49320是?

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

如果是基于TCP的,那么就可以使用网络调试助手连接到,下图显示是连接上了
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第30张图片
所以KepServer本质上就是一个TCP服务器,可以同时打开OPC DA和OPC UA的服务器

如果要连接OPC UA服务器,可以使用OPC UA客户端,常用的有UaExperter,具体操作如下:
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第31张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第32张图片
可以看到数据已经读到

2.2.5 OPC通信仿真实例框架图

绘制一个框架图进行理解,DVP32是台达PLC,通过以太网接口连接到交换机,PC也是连接到交换机上的,也就是在一个局域网内,通过KepServer创建OPC UA服务器,利用OPC UA客户端就可以实现与PLC的的交互(读取与修改PLC变量),下图红色即为OPC UA通信的数据流
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第33张图片

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

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

3.1 动态库加载及函数介绍

新建项目,加载dll库(利用COM技术写的)
在这里插入图片描述
添加引用,查看到其中包含了众多方法
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第34张图片
其中OPCGroups继承于IOPCGroups接口
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第35张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第36张图片

3.2 数据的读取程序编写

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

OPC客户端和服务器不一定在一台电脑,一般会用一台电脑作为服务器,这个电脑就是一个Node,再在电脑中找ServerName,也就是下图中的Prog ID
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第37张图片
连接的对应代码如下:
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第38张图片
运行结果:
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第39张图片
连接之后进行配置

按照OPCServer >> OPCGroups >> OPCGroup >> OPCItems >> OPCItem(标记/变量,最终要读取的)结构进行变量的读取
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第40张图片
OPC通信从入门到精通_1_OPC基础知识及简单C#程序编写(OPCDA,OPCUA简介;OPC通信数据流框架图;C#程序编写)_第41张图片
这里只是单个设备单个变量的值读取,可以参考下篇读取多个设备多个变量值的方法

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

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

你可能感兴趣的:(#,OPC通信从入门到精通,OPC通信)