OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)

文章目录

  • 1. OPC基础概念
  • 2. OPC通信仿真和编程
    • 2.1 采用Modbus Slave软件作为模拟实际设备进行Modbus的通信仿真
      • 2.1.1 Modbus通信中如何存储不同类型数据
    • 2.2 KepServer软件作为OPC服务器
      • 2.2.1 如何将KepServer与Modbus Slave(模拟实际设备)进行配置及通信
    • 2.3 基于C#利用VS写一个客户端同时读多个设备变量值
      • 2.3.1 库文件导入
      • 2.3.2 如何连接OPC服务器
        • 2.3.2.1 服务名称查找方法
        • 2.3.2.2 写代码得到服务名称
        • 2.3.2.2 写代码连接OPC服务器
      • 2.3.3 读数据验证是否连接成果
      • 2.3.4 对从OPC服务器上读取到的数据进行解析和显示
      • 2.3.5 新增西门子PLC并读取其变量值
        • 2.3.5.1 KepServer配置
        • 2.3.5.2 仿真实体西门子PLC s7-1200
        • 2.3.5.3 C#+VS代码读取PLC的值

1. OPC基础概念

  • OPC诞生缘由:OPC诞生之前,软件工程师是不了解硬件和协议的
    OPC解决的是软件和硬件之间的问题,让软件工程师无需了解协议及底层硬件,例如串口协议等

  • OPC起到了桥梁的作用:软件工程师对接OPC,OPC对接硬件

  • OPC是一种通讯方式,落到实处就是一个软件,就需要开发相应的软件,比较大的公司开发的OPC软件有KepServer 、西门子、NI等,有些是对接自己的产品,像KepServer是对接很多自动化公司的产品,采集数据到OPC软件,OPC软件也是一个服务器,使得软件工程师通过对接OPC软件就可以间接获取到PLC等硬件数据。

  • 有了OPC软件,软件工程师都可以不用懂PLC,对于软件工程师就变成了OPC变量
    OPC变量是节点式的,不是一个一个的,而是一节一节的,也就是级别,设备(通道)->组->变量,下图就是OPC结构的示意图
    OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第1张图片

  • 首先明确OPC != KepServer, KepServer只是一个OPC软件

上面是一个概念上的认识,如果要落到实处,最好是使用代码敲出来

2. OPC通信仿真和编程

选择硬件,但是没有硬件,可以使用仿真方式进行。

2.1 采用Modbus Slave软件作为模拟实际设备进行Modbus的通信仿真

此处采用Modbus Slave软件作为模拟设备,假设进行Modbus的通信仿真
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第2张图片
下图仿真的就是保持寄存器0开始的10个,40001是相对地址,通讯一般使用相对地址,说明书中会写绝对地址,每个寄存器的含义需要查看说明书
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第3张图片

2.1.1 Modbus通信中如何存储不同类型数据

(1)浮点数
Modbus是以寄存器为单位,一个寄存器占16位,当想要表示浮点数时就需要使用两个寄存器进行拼接,下面是表示浮点数的方法
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第4张图片
设置之后4000140002就用来存储浮点数,其他寄存器中存储的数据类型不受影响
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第5张图片
上图中4431均是int16类型,取值范围为-32768~+32767

(2)double
以下是用来表示double类型
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第6张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第7张图片
(3)int32
当想表示int32的话,设置如下:
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第8张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第9张图片
利用这10个寄存器,区定义如下的5个参数
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第10张图片

2.2 KepServer软件作为OPC服务器

现在想要对上面的5个参数进行读取,就得使用KepServer软件(学习时使用),软件可以通过“dotNet工控上位机”公众号获取,关于软件的安装破解可以参考OPC底层原理剖析1。

软件安装完后的界面如下图所示:
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第11张图片

2.2.1 如何将KepServer与Modbus Slave(模拟实际设备)进行配置及通信

首先可以看到Modbus Slave是没有通过报文与其他进行交互
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第12张图片
在KepServer中添加通道,根据通信类型选择对应的驱动(其中有多种品牌的通讯方式等)如下图所示
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第13张图片
起名字,只是起到标识的作用
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第14张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第15张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第16张图片
一直点“下一步”到如下界面
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第17张图片
“单击添加设备”->起设备名
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第18张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第19张图片
填写设备IPID
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第20张图片
设备ID的查询方式如下
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第21张图片
一直点“下一页”至“完成”
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第22张图片
创建“组”和“标记”:组和标记可以是同级,也可以使用组来管理标记,一般创建一个组来管理“标记”就够用了
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第23张图片
按照Modbus Slave中的名称、地址、数据类型新建标记
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第24张图片
创建好标记之后,界面如下图所示:
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第25张图片
利用上图中配置的标记验证前面的设置是否正确,如果正确就可以配置其他的标记了。
保存设置->运行->连接->确定,通过下图中小眼镜的标志可以打开如下界面,再在Modbus Slave中Display->Communication查看是否存在报文,如果存在报文发送接收,就代表连接成果
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第26张图片
由于视频中介绍的时候,一直连接不上,后期是没有建组,直接在通道1下创建了设备1来查看压力
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第27张图片

当两个的数据无法对应时,可以通过调整Modbus Slave中数据的格式来显示一致
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第28张图片
当实际中Modbus Slave代表的硬件中的数据无法修改时,可以在KepServer中双击对应的设备1来修改数据的大小端顺序等
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第29张图片
此时就模拟了数据从PLC读取到OPC服务器中

2.3 基于C#利用VS写一个客户端同时读多个设备变量值

可以发现,只有打开OPC Quick Client的打开情况下发送请求后,才会与Modbus Slave通信,当关闭OPC Quick Client通信就会断开(OPC Quick Client扮演客户端,Modbus Slave扮演服务器),这里就是客户端OPC Quick Client通过KepServer与Modbus Slave进行通信。
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第30张图片
此时就需要写一个客户端与KepServer进行通信。

2.3.1 库文件导入

基于库进行开发, 视频提供的dll文件进行开发
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第31张图片
将.dll文件复制到根目录下
在这里插入图片描述
添加引用
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第32张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第33张图片

2.3.2 如何连接OPC服务器

首先有个问题:KepServer本质上是一个服务,将软件关闭之后,OPC是否还在运行呢?

关闭KepServer软件,使用“新阁教育配置一体化软件”模仿客户端(起到的作用与OPC Quick Client是一样的)进行如下测试:
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第34张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第35张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第36张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第37张图片
可以发现值是一值在读取的,报文也是一直存在的,说明其是一直以服务的形式存在(软件可以关,服务一直在跑)
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第38张图片
我们自己写软件进行连接,其实连接的是一个服务,服务是有名字的,连接某个服务其实是连接某个计算机的某个服务,OPC服务是可以在不同电脑中,只要在一个局域网中,OPC在一个服务器中,客户端在另一个电脑中,是可以跨网络的。

以前的框架中会有专门的电脑做OPC服务器,想要连接某个服务就需去找某个电脑的某个指定服务名称

OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第39张图片

2.3.2.1 服务名称查找方法

“我的电脑”右键选择“管理”->“服务和应用程序”->“服务”,在其中找
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第40张图片
此时其实是看不到服务名称的,Kepware.KEPServerEX.V6这个名字其实是通过获取得到的,v6代表版本号,如果你的KepServer是4.x,那么就是v4

2.3.2.2 写代码得到服务名称

以下代码是在一个“combox”中添加OPC服务节点
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第41张图片
运行后在“combox”中可以看到由于博主安装了很多软件,所以会添加很多的OPC服务节点
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第42张图片
一般服务器名称和服务名称都是写死的,获取到之后就可以写死

以下是此时对应的原始界面
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第43张图片

2.3.2.2 写代码连接OPC服务器

给“连接OPC服务器”按钮下写代码

可以看到连接也是使用的OPCServer OPCServer = new OPCServer()中的OPCServer,后面的操作都是围绕着这个去做,相当于句柄或者说通信对象。
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第44张图片
运行之后效果如下:
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第45张图片
下来需要读数据,验证确实是连接成功

2.3.3 读数据验证是否连接成果

首先我们知道OPC读取数据的3种方式:同步、异步、订阅

  • 同步理解:你到现场去做项目,一步步的在现场去解决问题,这就是同步;异步理解:去现场遇到难得问题,交给别人去做,自己跳过难得问题去解决其他问题,别人把难得问题解决了告诉你,此时项目解决的问题会更多一些,而不会因为难得问题卡住;订阅理解:不去现场,将项目分配给某个人,他做好之后告诉你,做的过程中不会有任何交互,这就是订阅

  • 通信也是,同步就是读一次,有返回了才读第二次;异步就是我只管读,读完之后会通过事件告诉我读好了,你来进行解析;订阅就是有100个变量,我只读10个变量,如果不发生变化就不会通知,一旦发生变化就会通过事件来进行通知

  • 以其课程为例:采用订阅,如果课程更新了就会通知学员课程更新了;如果采用异步,就是安排别人去刷,有更新了再告诉你;同步就是你不停的去刷

显然以上述理解,订阅和异步的效率会更高些

  • 今天只讲效率最高的一种方式:订阅方式

做订阅,首先需要有变量,OPC中存在很多集,很多东西,以下是不好理解的

创建对象
OPCGroup OPCGroup ; OPCGroups OPCGroups ;

句柄:就是一个整型值,是个代号,Windows底层想要窗体之间传递各种信息,靠窗体名称去传很浪费资源,所以给每个窗体创建一个代号就方便很多

Item ID获取并写入代码中
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第46张图片
通过以下代码会在值发生变化的时候去触发事件,当第一次连接之后,先会将所有值都读一遍,从而触发private void OPCGroup_DataChange(…)``
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第47张图片
经过实验看到触发成功
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第48张图片
触发了成功也就代表订阅成功,下来就要对事件传的数据根据句柄进行解析

2.3.4 对从OPC服务器上读取到的数据进行解析和显示

以下代码实现变量值解析和显示在界面中
在这里插入图片描述
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第49张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第50张图片
运行效果如下:
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第51张图片

2.3.5 新增西门子PLC并读取其变量值

2.3.5.1 KepServer配置

以下演示假设增加一个西门子的PLC
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第52张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第53张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第54张图片
下图通道2中就是新建的西门子s7-1200的PLC
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第55张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第56张图片

2.3.5.2 仿真实体西门子PLC s7-1200

利用“新阁教育配置一体化软件”扮演的角色就是实体PLC,并给对应的地址赋值,具体如何操作可以查看Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第57张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第58张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第59张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第60张图片
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第61张图片

OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第62张图片
可以看到OPC的客户端“OPC Quick Client”已经读取到对应位置值
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第63张图片

2.3.5.3 C#+VS代码读取PLC的值

如果想要C#+VS代码读取到这个新建的PLC的值,应该怎么操作呢?

OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第64张图片
运行结果中可以看到,界面中已经显示两个通道也就是2个设备的变量
OPC通信从入门到精通_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿真(KepServer作为OPC服务器;使用Modbus Slave和另外软件仿真2个PLC设备);C#程序)_第65张图片
从上面可以看到,KepServer的好处就是可以对接很多设备,而对于上位机只是增加了很少的代码量

3. 学习视频地址:
OPC底层原理剖析1;OPC底层原理剖析2;OPC底层原理剖析3;OPC底层原理剖析4;OPC底层原理剖析5

你可能感兴趣的:(#,OPC通信从入门到精通,c#,OPC,工业自动化)