论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
主机系统
›
linux
›
OPC通信从入门到醒目_2_OPC通信详解和C#客户端编程(OPC ...
OPC通信从入门到醒目_2_OPC通信详解和C#客户端编程(OPC基础概念;OPC通信仿 ...
自由的羽毛
论坛元老
|
2024-6-9 14:55:08
|
显示全部楼层
|
阅读模式
楼主
主题
1022
|
帖子
1022
|
积分
3066
1. OPC基础概念
OPC诞生缘由:OPC诞生之前,软件工程师是不了解硬件和协议的
OPC解决的是软件和硬件之间的题目,让软件工程师无需了解协议及底层硬件,例如串口协议等
OPC起到了桥梁的作用:软件工程师对接OPC,OPC对接硬件
OPC是一种通讯方式,落到实处就是一个软件,就需要开发相应的软件,比力大的公司开发的OPC软件有KepServer 、西门子、NI等,有些是对接自己的产品,像KepServer是对接许多自动化公司的产品,采集数据到OPC软件,OPC软件也是一个服务器,使得软件工程师通过对接OPC软件就可以间接获取到PLC等硬件数据。
有了OPC软件,软件工程师都可以不用懂PLC,对于软件工程师就变成了OPC变量
OPC变量是节点式的,不是一个一个的,而是一节一节的,也就是级别,设备(通道)->组->变量,下图就是OPC结构的示意图
起首明白OPC != KepServer, KepServer只是一个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种方式:同步、异步、订阅
同步明白:你到现场去做项目,一步步的在现场去解决题目,这就是同步;异步明白:去现场遇到难过题目,交给别人去做,自己跳过难过题目去解决其他题目,别人把难过题目解决了告诉你,此时项目解决的题目会更多一些,而不会因为难过题目卡住;订阅明白:不去现场,将项目分配给某个人,他做好之后告诉你,做的过程中不会有任何交互,这就是订阅
通信也是,同步就是读一次,有返回了才读第二次;异步就是我只管读,读完之后会通过变乱告诉我读好了,你来进行解析;订阅就是有100个变量,我只读10个变量,如果不发生变化就不会通知,一旦发生变化就会通过变乱来进行通知
以其课程为例:采用订阅,如果课程更新了就会通知学员课程更新了;如果采用异步,就是安排别人去刷,有更新了再告诉你;同步就是你不停的去刷
显然以上述明白,订阅和异步的效率会更高些
本日只讲效率最高的一种方式:订阅方式
做订阅,起首需要有变量,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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
自由的羽毛
论坛元老
这个人很懒什么都没写!
楼主热帖
JDBC p2 JDBC API
【MySQL】MySQL的安装、卸载、配置、登 ...
iOS 组件化及二进制化的探索 ...
【python】标准库(第四讲)
线程本地存储 ThreadLocal
Vue使用ajax(axios)请求后台数据 ...
.MD语法入门,教你写好readme文档 ...
go学习笔记(一)
我眼中的大数据(二)——HDFS ...
Linux【实操篇】—— Shell函数、Shell ...
标签云
运维
CIO
存储
服务器
浏览过的版块
物联网
开源技术
主机安全
程序人生
快速回复
返回顶部
返回列表