教程Unity 与 Simence PLC 联动通讯
Posted 野奔在山外的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教程Unity 与 Simence PLC 联动通讯相关的知识,希望对你有一定的参考价值。
开发平台:Unity 2021
依赖DLL:S7.NET
编程语言:CSharp 6.0 以上
一、前言
Unity 涉及应用行业广泛。在工业方向有着一定方向的涉足与深入。除构建数据看板等内容,也会有模拟物理设备进行虚拟孪生的需求需要解决。而 SIMATIC(西门子)作为工业通讯其一,需要了解如何在 CSharp 中实现通讯是本文章所关注的重点。
二、了解 | 依赖库对象:S7.NET
限制:限定在 Unity CSharp 配置 2.0 Framework 下运行。
下载链接:GitHub-S7.NET
开发文档:WiKi-S7.NET
对于 Unity 来说,引用 S7.NET 方法需要将 S7.NET.DLL 或 DLL内所有程序文件导入至 Unity Assets 目录下才可使用。如上图所示:我们仅需要将 S7.NET 文件夹 导入至 Unity 即可。或是生成 S7.NET.DLL 导入目录下 Plugins 文件夹下。
三、了解 | PLC DB数据库
PLC DB数据库根据 “数据库 - 数据类型 - 数据偏移量” 进行数据写入或读取。这种描述或有些抽象,以 S7.NET 读取单个示例数据。例如上图红框:获取 PLC数据 [DB160] 下的 Int 数据类型、便宜量为 104.0 的数据。
PLC.Read("DB160.DBW104.0");
- 获取 DB库 始终坚持 “DB” + 库编号
- 获取 偏移量值,始终坚持 “DB” + 数据类型 + 偏移量值
需注意:S7中所使用 PLC.Read(string content)
读取值默认为 10 进制。
而对于一些数据本身大的情况,部分负责数据的PLC工程师会选择拆分数据进行分批存储。例如:Real 数据类似于 CSharp 中 float 精度数据类。
- 在 Unity 开发中,涉及精度的数据(如位移、旋转轴数据),常见会被拆分为高低位的 16进制 存储。
四、关于不建议使用 Read 方式进行数据读取
剖析 PLC.Read(string plc)
可了解其根据字符串组合内容创建一个 DataItem
对象,用于 PLC DB块数据访问。注意:是创建。每次定时请求必须有创建局部变量后才可访问。从高频读取为前提,是不可取且随这使用的 string plc
量增加下,出现读取延时等情况。
public override void OnUpdateData()
Data.J1 = float.Parse($"PLC.Read("DB110.DBW20.0")");
Data.J2 = float.Parse($"PLC.Read("DB110.DBW22.0")");
Data.J3 = float.Parse($"PLC.Read("DB110.DBW24.0")");
Data.J4 = float.Parse($"PLC.Read("DB110.DBW26.0")");
Data.机械夹爪原位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW100.0"), 1);
Data.机械夹爪动位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW110.0"), 7);
Data.顶升气缸原位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW100.0"), 2);
Data.顶升气缸东位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW100.0"), 3);
Data.滚筒进料阻挡原位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW110.0"), 2);
Data.滚筒进料阻挡动位 = ConvertUtils.GetBool(PLC.Read("DB110.DBW110.0"), 4);
历史记忆最清楚的是一台底盖安装机的机械轴有 4轴轴值数据、机械夹爪状态数据、皮带状态数据、顶升|阻挡气缸等其他部件数据。在同步机械轴数据上本应按照 100ms 一次更新下,在13台设备的同步请求 PLC DB数据下,出现 7s 完成一次数据请求的情况,显然 PLC读取出现阻塞情况。(在设计上使用多线程请求数据,在多线程优化上对于我来说是捉襟见肘)
于是,考虑到每次请求中,存在相同 DB 块偏移量数据的请求,我建立了局部变量读取。例如:
public override void OnUpdateData()
var theDB20 = PLC.Read("DB110.DBW20.0");
var theDB22 = PLC.Read("DB110.DBW22.0");
var theDB100 = PLC.Read("DB110.DBW100.0");
Data.J1 = float.Parse($"theDB20");
Data.顶升气缸原位 = ConvertUtils.GetBool(theDB100, 2);
Data.顶升气缸东位 = ConvertUtils.GetBool(theDB100, 3);
- 在使用局部变量作为替代使得13台设备全运行下的更新频率由 7s 缩减至 3 - 4s。针对不同规模的工程,其频率变化程度不一,但相较于反复使用
PLC.Read(string plc)
有明显的提升。但本质上依然未达到即时的目标。
所以,认识 PLC.Read(string plc)
的字符串解析规则是必然的。透过源码,可了解其最终被解析为 DataItem
的数据类用以请求。而参考 PLC WIKI文档可了解 PLC.ReadMultibleVars(List<DataItem> data)
的方法,其用于获取一个 DB块 下指定偏移量数据。一次访问获取所有数据比多次访问获取多数据明显压力上更低,更适用。因此结合 PLC.Read(string plc)
创建DataItem实例。使用静态字段与属性替代 string 访问DB是最优解(目前)
private static DataItem VarDB20 = new DataItem()
DataType = DataType.DataBlock,
VarType = VarType.Bit,
DB = 110,
StartByteAdr = 20,
BitAdr = 0,
Count = 1,
Value = new object()
;
public static List<DataItem> Datas = new List<DataItem>() VarDB20
DataType.DataBlock
:PLC 连接数据类为 DB块VarType
:数据类型。参考 “DBW” “DBB” “DBX” “DBD”DB
:DB块号。例如 “DB110.DBW20.0” 指向 110 BD块StartByteAdr
:偏移量。例如 “DB110.DBW20.0” 指向 20 偏移量(20.0 中小数点前20)BitAdr
:地址。例如 “DB110.DBW20.0” 指向 0 偏移量(20.0 中小数点后0)Count
:取数(默认为1即可,除非有特殊说明)Value
:存放 PLC 中读取或将写入的数据值。(十进制)
public override void OnUpdateData()
PLC.ReadMultibleVars(Datas);
Data.J1 = float.Parse($"VarDB20.Value");
Data.顶升气缸原位 = ConvertUtils.GetBool(VarDB100.Value, 2);
Data.顶升气缸东位 = ConvertUtils.GetBool(VarDB100.Value, 3);
在优化使用 PLC.ReadMultibleVars(List<DataItem> data)
的情况下,读取压力再次降低,使得实际机械轴模拟表现几乎与实际表现无延迟。注意:在数据均指向同一 DB块 下,使用该方法读写最优(目前)。
五、关于数据类型转换
与各程序语言相同,其数据类型同样包含 string/bool
等数据类型,但不同的有 Real
数据类型。(其实就是 double/float
那种浮点数)。对于该类型数据的读取,需要使用 DBD 类型进行读取。好在转换的方法在 S7 中有提供:
(uShort.Parse($"PLC.Read("DB110.DBW100.0")")).ConvertToFloat()
最完整的台达PLC培训教程(沈阳工大)学习笔记1
1) 可编程控制器的应用
1 开关量逻辑控制:电动机启动与停止
2 运动控制:对步进电动机或伺服电动机的单轴或多轴系统实现位置控制
3 过程控制:对温度、压力、流量等连续变化的模拟量进行闭环控制
4 数据处理:数据采集-运算-传送
5 机械加工机床的数字控制:数控系统
6 机器人控制:
7 通信联网: PLC-计算机,PLC-PLC,PLC-人机界面
2) 可编程控制器的分类与特点
1.4.1可编程控制器的分类
1 按结构形式分类
(1) 整体式:将电源、I/O点、CPU、储存器等做成1个整体
(2) 模块式:将电源、I/O点、CPU、储存器等做成多个模块
2 按I/O点数及内存容量分类
(1) 超小型机:I/O点数在64以内,内存容量在256-1k字节
(2) 小型机:I/O点数在64-256,内存容量在l-3.6K字节
(3) 中型机:I/O点数在256-2048,内存容量在3.6-13K字节
(4) 大型机:I/O点数在2048以上,内存容量在13K字节以上
3 按功能分类
(1) 低档机:基本功能,逻辑运算、定时、计数等
(2) 中档机:较强的数据处理、子程序及远程I/O等功能
(3) 高档机:较强的模拟调节、智能控制、过程控制等功能
3)可编程控制器的特点
1 编程简单并具有很好的柔性
2 功能完善、实用性强
3 可靠性高、抗干扰能力强
4 体积小、重量轻、功耗低
5 机电一体化
4) PLC的基本组成
1 中央处理器CPU模块
Central Processing Unit
2 存储器
1)系统程序存储区2)用户程序存储区
3 输入/输出模块
4 电源模块
5 编程器和编程软件
5) PLC的工作原理
1 扫描技术
(1)输入采样阶段
(2)用户程序执行阶段
(3)输出刷新阶段
6)关于梯形图的格式,一般有如下一些要求;每个梯形图网络由多个梯级组成,每个输出元素可构成一个梯级,每个梯级可由多 个支路组成.通常每个支路可容纳11个编程元素。最右边的元素必须是输出元素。每个网络最多允许16条支路。
7) 台达PLC的系列
目前台达PLC有ES、EX、EH2、PM、SA、SC、SS、SX、SV等系列。各系列机型均由各自特点,可满足不同控制要求。
ES系列性价比较高,可实现顺序控制。
EX系列具备数字量和模拟量I/O,可实现反馈控制。
EH系列采用了CPU+ASIC双处理器,支持浮点运算,指令最快执行速度达0.24μs。
PM系列可实现2轴直线/圆弧差补控制,最高脉冲输出频率达500kHz。
SS系列外形轻巧,可实现基本顺序控制。
SA系列内存容量8k steps,运算能力强,可扩展8个功能模块。
SC系列具有100k Hz的高速脉冲输出和100k Hz的脉冲计数。
SX系列具有2路模拟量输入和2路模拟量输出,并可扩展8个功能模块。
SV系列外形轻巧,采用了CPU+ASIC双处理器,支持浮点运算,指令最快执行速度达0.24μs。
8)台达PLC的型号
台达PLC型号都以DVP开头,
第1-2位为I/O点数;
第3位为主机或扩展模块标志,
E:E类主机,X:扩展模块,S:S类主机;
第4位为机型标志,C:不可扩展型主机,
S:标准型主机,X:模数混合型主机;
M:输入点扩展模块,N:输出点扩展模块,
P:输入/输出扩展模块;
第5-6位为电源类型,00:交流电源,01:直流电源,11:直流电源;
第7位为输出标志,R:继电器输出,T:晶体管输出,N:无输出模块;
第8位为“2”表示功能提升。例如:DVP 14ES 00 R 2 表示为台达PLC,共有14个I/O点,E类标准型主机,使用220V交流电源,继电器输出,属于功能提升型;又如:DVP 16 XM 01 N 表示为使用直流24v电源的16点输入扩展模块。
9)台达PLC的周边设备
1 程序书写器 目前台达PLC程序书写器的型 号为DVP HPP02。
2 WPLSoft编程软件 使用WPLSoft编程软件可在计算机上将梯形图程序输入PLC,完成编程。WPLSoft编程软件可在台达的官方网站(www.delta-cimic.com)下载,免费使用。
3 各部连接线
10)
ES系列PLC的构成
ES系列PLC是中达电通股份有限公司生产功能非常强的超小型PLC产品,在某些功能上甚至能与大型机媲美。主机内有高速计数器,可输入频率达20kHz的 脉冲,输出的脉冲频率可达10k Hz。ES系列PLC还具有4个中断源的中断优先权 管理,以及RS—232C和RS485通讯接口。
台达PLC还有与之配套的扩展模块,如I/O模块、智能模块及温度测量模块等。1台ES系列PLC最多可扩展到256个I/O点。
台达PLC的智能模块主要为A/D、D/A模块,当需要对模拟量进行测量和控制时,可以连接智能模块。
需要对温度进行测量和控制时,可将温度测量模块连接到PLC上,温度测量模块可采用PT100型热电阻或J、K、R、S、T型热电偶作传感器。
1. DIN 固定扣:可将PLC主机锁紧在DIN固定槽上。
2. DIN 固定槽:可将PLC主机安装在DIN固定片上。
3. 螺栓孔:可将PLC主机用螺栓固定在控制箱墙板上。
4. RS-232C通讯接口
5. 扩展模块插座
6-7. 接线端子
8-9. I/O指示灯
10. 状态指示灯
① “Power”:接通电源后,“Power”指示灯亮;
② “Run”:程序运行时,“Run”指示灯亮;
③ “Error”:程序出错时,“Error”指示灯亮;
11、12 塑料盖
13、14 I/O铭牌
15. RS-485通讯口
以上是关于教程Unity 与 Simence PLC 联动通讯的主要内容,如果未能解决你的问题,请参考以下文章
谁能告诉我昆仑通态触摸屏与AB PLC以太网通讯怎么设置?
西门子PLC与Unity3D通讯丨PROFINET通讯
怎么样通过威纶触摸屏来读取plc程序
一个昆仑通态触摸屏怎样与两个欧姆龙PLC同时通讯
VC与西门子plc通信的教程
三菱PLC网关,西门子PLC网关,台达PLC网关是啥?