教程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");
  1. 获取 DB库 始终坚持 “DB” + 库编号
  2. 获取 偏移量值,始终坚持 “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网关是啥?