ToB企服应用市场:ToB评测及商务社交产业平台

标题: OPC通信从入门到醒目_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿 [打印本页]

作者: 自由的羽毛    时间: 2024-6-9 14:55
标题: OPC通信从入门到醒目_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿
1. OPC基础概念


上面是一个概念上的熟悉,如果要落到实处,最好是利用代码敲出来
2. OPC通信仿真和编程

选择硬件,但是没有硬件,可以利用仿真方式进行。
2.1 采用Modbus Slave软件作为模拟实际设备进行Modbus的通信仿真

此处采用Modbus Slave软件作为模拟设备,假设进行Modbus的通信仿真

下图仿真的就是保持寄存器0开始的10个,40001是相对地址,通讯一样平常利用相对地址,说明书中会写绝对地址,每个寄存器的寄义需要检察说明书

2.1.1 Modbus通信中怎样存储不同范例数据

(1)浮点数
Modbus是以寄存器为单位,一个寄存器占16位,当想要表现浮点数时就需要利用两个寄存器进行拼接,下面是表现浮点数的方法

设置之后40001和40002就用来存储浮点数,其他寄存器中存储的数据范例不受影响

上图中44、3和1均是int16范例,取值范围为-32768~+32767
(2)double
以下是用来表现double范例


(3)int32
当想表现int32的话,设置如下:


利用这10个寄存器,区定义如下的5个参数

2.2 KepServer软件作为OPC服务器

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

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

起首可以看到Modbus Slave是没有通过报文与其他进行交互

在KepServer中添加通道,根据通信范例选择对应的驱动(其中有多种品牌的通讯方式等)如下图所示

起名字,只是起到标识的作用



不停点“下一步”到如下界面

“单击添加设备”->起设备名


填写设备IP和ID

设备ID的查询方式如下

不停点“下一页”至“完成”

创建“组”和“标志”:组和标志可以是同级,也可以利用组来管理标志,一样平常创建一个组来管理“标志”就够用了

按照Modbus Slave中的名称、地址、数据范例新建标志

创建好标志之后,界面如下图所示:

利用上图中配置的标志验证前面的设置是否正确,如果正确就可以配置其他的标志了。
保存设置->运行->毗连->确定,通过下图中小眼镜的标志可以打开如下界面,再在Modbus Slave中Display->Communication检察是否存在报文,如果存在报文发送接收,就代表毗连成果

由于视频中先容的时候,不停毗连不上,后期是没有建组,直接在通道1下创建了设备1来检察压力

当两个的数据无法对应时,可以通过调整Modbus Slave中数据的格式来显示一致

当实际中Modbus Slave代表的硬件中的数据无法修改时,可以在KepServer中双击对应的设备1来修改数据的巨细端顺序等

此时就模拟了数据从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进行通信。

此时就需要写一个客户端与KepServer进行通信。
2.3.1 库文件导入

基于库进行开发, 视频提供的dll文件进行开发

将.dll文件复制到根目次下

添加引用


2.3.2 怎样毗连OPC服务器

起首有个题目:KepServer本质上是一个服务,将软件关闭之后,OPC是否还在运行呢?
关闭KepServer软件,利用“新阁教育配置一体化软件”模拟客户端(起到的作用与OPC Quick Client是一样的)进行如下测试:




可以发现值是一值在读取的,报文也是不停存在的,说明其是不停以服务的情势存在(软件可以关,服务不停在跑)

我们自己写软件进行毗连,其实毗连的是一个服务,服务是有名字的,毗连某个服务其实是毗连某个计算机的某个服务,OPC服务是可以在不同电脑中,只要在一个局域网中,OPC在一个服务器中,客户端在另一个电脑中,是可以跨网络的。
以前的框架中会有专门的电脑做OPC服务器,想要毗连某个服务就需去找某个电脑的某个指定服务名称

2.3.2.1 服务名称查找方法

“我的电脑”右键选择“管理”->“服务和应用程序”->“服务”,在其中找

此时其实是看不到服务名称的,Kepware.KEPServerEX.V6这个名字其实是通过获取得到的,v6代表版本号,如果你的KepServer是4.x,那么就是v4
2.3.2.2 写代码得到服务名称

以下代码是在一个“combox”中添加OPC服务节点

运行后在“combox”中可以看到由于博主安装了许多软件,以是会添加许多的OPC服务节点

一样平常服务器名称和服务名称都是写死的,获取到之后就可以写死
以下是此时对应的原始界面

2.3.2.2 写代码毗连OPC服务器

给“毗连OPC服务器”按钮下写代码
可以看到毗连也是利用的OPCServer OPCServer = new OPCServer()中的OPCServer,背面的操作都是围绕着这个去做,相当于句柄或者说通信对象。

运行之后结果如下:

下来需要读数据,验证确实是毗连乐成
2.3.3 读数据验证是否毗连成果

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

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

做订阅,起首需要有变量,OPC中存在许多集,许多东西,以下是不好明白的
创建对象
OPCGroup OPCGroup ; OPCGroups OPCGroups ;
句柄:就是一个整型值,是个代号,Windows底层想要窗体之间通报各种信息,靠窗体名称去传很浪费资源,以是给每个窗体创建一个代号就方便许多
Item ID获取并写入代码中

通过以下代码会在值发生变化的时候去触发变乱,当第一次毗连之后,先会将所有值都读一遍,从而触发private void OPCGroup_DataChange(…)``

经过实验看到触发乐成

触发了乐成也就代表订阅乐成,下来就要对变乱传的数据根据句柄进行解析
2.3.4 对从OPC服务器上读取到的数据进行解析和显示

以下代码实现变量值解析和显示在界面中



运行结果如下:

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

2.3.5.1 KepServer配置

以下演示假设增长一个西门子的PLC



下图通道2中就是新建的西门子s7-1200的PLC


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

利用“新阁教育配置一体化软件”扮演的角色就是实体PLC,并给对应的地址赋值,具体怎样操作可以检察Modbus通信从入门到醒目_2_Modbus TCP通信详解及仿真






可以看到OPC的客户端“OPC Quick Client”已经读取到对应位置值

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

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

运行结果中可以看到,界面中已经显示两个通道也就是2个设备的变量

从上面可以看到,KepServer的利益就是可以对接许多设备,而对于上位机只是增长了很少的代码量
3. 学习视频地址:
OPC底层原理剖析1;OPC底层原理剖析2;OPC底层原理剖析3;OPC底层原理剖析4;OPC底层原理剖析5

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4