【Unity】分拣机的数字双胞胎集成到Unity3D开发平台中

804bdbf5db5dee4a94b39ecc548f171b.jpeg

Unity + HMI

一、前言

该项目的重点是通过OPC UA进行客户端-服务器通信的简单演示,该演示在Unity3D中实现(服务器- B&R Automation PLC,客户端- Unity3D)。该项目展示了数字孪生的分拣机与一些额外的功能。该应用程序使用多线程编程进行性能优化。

此解决方案可用于控制真实的机器或对其进行模拟(Automation Studio模拟/真实的PLC)。使用X20 CP 1584 PLC在模拟上测试了Unity3D应用程序。可以使用另一个OPC UA服务器,但要符合某些原则(输入/输出节点)。

该应用程序的主要思想是使用XYZ操纵器和另一个轴(相机输送机)来对多个对象进行排序。为了对物体进行目视检查,我们使用带有附加光源的2D摄像头,整个控制程序(轴控制、报警处理、物体的连接/拆卸等)都在PLC(OPC UA服务器)上编程。Unity3d 应用程序用于可视化场景、操作对象以及获取有关对象类型的信息。该应用程序还使用一个软件包(人机界面- mappView)进行数据可视化。这些数据可以在PC面板上本地查看,也可以使用标准Web浏览器在任何设备上远程查看(mappView中的数据管理完全基于OPC UA)。

二、Unity脚本分析

a70f92a5ae886286a7271e319d853ca8.png

6d5c7049b1054bd37e72499b4ef592fb.png

2.1 UI脚本

用于控制一个用户界面(UI)与其相应行为的交互操作。

变量:UI中的相机对象,UI中的图片组件,用于显示连接面板、诊断面板和连接信息,文本输入字段,用于输入IP地址,一个私有浮点变量,可能用于控制UI元素的展示位置或其他设置。显示XYZ机械手的位置和速度信息、显示相机输送器的位置和速度信息、显示连接信息的文本

Start方法(初始化方法)定义:

  • 初始设置连接信息图片为红色,并将文本设置为“Disconnect”。

  • 设置连接面板和诊断面板的初始位置。

  • 初始化XYZ操控器和相机输送器的位置和速度显示为“0.00”。

  • IP地址设置为“127.0.0.1”(通常代表本机地址)。

Update方法(周期函数)定义:

  • 从通过UI输入字段读取IP地址并更新全局变量。

  • 控制连接按钮的颜色(绿色表示连接,红色表示断开)和文本。

  • 循环读取并将全局变量中的XYZ机械手和相机输送器的位置与速度参数显示在对应的UI文本上。

其他方法:

  • 应用退出时销毁这个脚本的实例

  • 控制连接面板的显示和隐藏。

  • 控制诊断面板的显示和隐藏。

  • 控制相机视图位置和角度的变更方法,分别对应不同的视角。

  • 处理连接和断开按钮被按下时的事件,更新全局连接控制变量

2.2 数据处理类(OPC UA客户端)

存储全局变量的主控静态类:包含OPC UA配置参数,用于读写操作的启用状态  以及连接状态 。

存储全局变量的OPC UA 数据节点静态类:包含了多种与OPC UA节点相关的变量,例如XYZ机械手的位置  和速度节点ID,摄像机输送带的位置和速度节点ID等。还包含了一些读取的标志位变量,例如机械手抓取 ,参数重置  和摄像机扫描  的状态

OPC UA数据处理类:包含初始化 (Start) 方法,配置OPC UA客户端和开始读写线程。主功能 (Update) 方法根据状态机制处理连接和断开连接的逻辑。提供了多个辅助函数,包括处理退出应用时的线程终止 , 读取线程函数 , 写入线程函数 , 配置OPC UA客户端, 创建OPC UA会话, 以及写入OPC UA节点值 。

每个类和方法都有明确的功能和职责,形成整个OPC UA客户端通信模块的框架。代码的整体结构清晰,易于理解和维护。这段代码用于与OPC UA服务器通信,执行读写操作,以及在Unity项目中处理游戏对象和工业自动化系统之间的交互。

2.3 UNITY脚本中 FIXEDUPDATE 与 UPDATE的区别

  • FixedUpdate 和 Update 都是 Unity 脚本中用于更新游戏对象的函数,但它们有以下区别:

    • Update 函数是在每一帧中被调用,用于处理游戏对象的逻辑更新,例如用户输入、物体移动和碰撞检测等操作。Update 函数的调用频率与帧率一致,通常为60帧/秒。

    • FixedUpdate 函数是在固定时间间隔内被调用,用于处理涉及物理计算的逻辑更新,例如施加力和旋转等操作。FixedUpdate 函数的调用频率是固定的,通常为50次/秒。

  • 由于 FixedUpdate 函数可以保持固定的时间间隔调用,因此某些需要在时间上精确模拟的任务就需要放在 FixedUpdate 中,否则可能会出现不同设备上的表现不一致或者卡顿等问题。而 Update 函数适用于大多数通用任务,不需要考虑物理计算的精确性。

2.4 XYZ各轴脚本

用于控制XYZ操纵器中对应连接件的位置。在每一个物理更新步骤(FixedUpdate)中,它读取来自全局OPC UA客户端变量数组对应元素的值,并更新连接件的局部Z坐标。此脚本确保了Unity游戏对象的位置可以实时反映出来自真实世界设备的数据变化。当应用程序退出时,OnApplicationQuit函数将确保此组件被销毁,释放相关资源。

该代码片段显示了如何在Unity中根据从OPC UA客户端获取的实时数据动态更新一个游戏对象的位置。通过这种方式,Unity可视化界面能够准确反映出控制系统中的物理机器人的状态,为操作者或程序员提供了实时反馈。

2.5 相机传送带脚本

代码定义了一个控制输送带上摄像头第一个连接部分的Unity脚本。使用FixedUpdate方法,它可以在每次物理模拟更新时,根据实时输入数据调整摄像头连接件在Z轴的位置。这里提供的位置更新能够让Unity场景中的虚拟摄像头随着实际工业输送带上的摄像头位置的变化而移动,确保两者的同步。该脚本中的X轴和Y轴坐标是固定值,而Z轴坐标则会根据实时数据实现动态调整。OnApplicationQuit方法同上一段代码,在应用程序退出前用于资源清理,确保适当的组件销毁,一般Unity会自动处理,除非需要进行特定的资源释放操作。

2.6 灯光闪烁脚本

代码定义了一个Unity脚本,用于模拟和控制相机扫描时灯光的闪烁效果。通过协程控制一个灯光组件的开关,创建闪烁效果。同时,脚本会根据扫描到的对象的ID,从一个预定义的对象类型数组中读取并设置当前对象的类型。这种闪烁的灯光可能用于模拟工业现场相机扫描物件的视觉效果或状态指示,并对扫描对象的类型进行分类存储或判断。

2.7 分拣对象转移脚本

用于控制游戏对象(例如立方体)的变换,例如位置、旋转和缩放。它与OPC UA客户端的全局变量进行交互,实现基于通过OPC UA读取的数据指令对对象进行的操作。这包括对象的附加与分离操作。

类成员变量定义:

一个游戏对象数组,包含九个代表主要立方体的元素。

XYZ操作器末端执行器的游戏对象。

相机输送机垫的游戏对象。

初始化垫的游戏对象。

浮点数组,包含了九个立方体的位置偏移值。

用于状态机控制的整型变量。

Start方法(初始化方法)定义:

初始化设置每个立方体对象的默认位置,旋转和缩放。同时设置这些立方体的Rigidbody组件为静止(isKinematic=true),这意味着物理引擎不会影响它们的运动。

Update方法(周期函数)定义:

一个基于主状态变量的状态机,根据OPC UA客户端的全局变量执行不同的指令。

针对不同的状态(0、1、2、3),依据抓取和分离全局变量的值,执行附加或分离立方体对象的行为,同时将立方体的父对象设置为特定的操作器末端执行器或输送机垫。

OnApplicationQuit方法定义:

在应用退出时尝试销毁脚本的实例,并捕获可能出现的异常。

整个脚本的目的是通过Unity和OPC UA之间的交互,实现立方体对象在特定的位置按照给定的指令进行移动和固定。这种动作通常在模拟工业自动化操作如工业机器人的XYZ操作器控制中体现。脚本利用状态机实现控制逻辑,可用于在触发特定条件时控制游戏中的物体。

三、Automation Studio PLC程序分析

3.1 贝加莱AUTOMATION STUDIO 都支持哪些PLC

  • 贝加莱Automation Studio 是一个集成开发平台,支持多种编程语言,如 IEC 61131-3 和 ANSI C。它可以用来开发和维护 PLC、运动控制、HMI、安全和通信等功能¹。

  • 贝加莱Automation Studio 支持贝加莱自己的 PLC 系列,如 X20、X67、2005、2003、2000 等,以及其他厂商的 PLC,如西门子、施耐德、罗克韦尔、三菱等,通过不同的通信协议和接口进行连接和数据交换²³。

  • 贝加莱Automation Studio 还支持使用 OPC UA、MQTT、AMQP 等互联网技术,实现与云平台和物联网设备的集成⁴。

(1) 贝加莱(B&R)的Automation Studio软件和西门子的Siemens TIA软件比较?- 知乎. https://www.zhihu.com/question/275074286.
(2) Automation Studio | B&R Industrial Automation. https://www.br-automation.com/zh/products/software/automation-software/automation-studio/.
(3) 贝加莱机器控制开发入门篇 - 哔哩哔哩. https://www.bilibili.com/read/cv10062193/.
(4) 软件 | B&R Industrial Automation. https://www.br-automation.com/zh/products/software/.
(5) Automation Studio | B&R Industrial Automation. https://www.br-automation.com/zh/products/software/automation-software/automation-studio/.
(6) 贝加莱(B&R)的Automation Studio软件和西门子的Siemens TIA软件比较?- 知乎. https://www.zhihu.com/question/275074286.
(7) 贝加莱机器控制开发入门篇 - 哔哩哔哩. https://www.bilibili.com/read/cv10062193/.
(8) 软件 | B&R Industrial Automation. https://www.br-automation.com/zh/products/software/.

AS运行时下载地址:
https://www.br-automation.com/zh/downloads/software/automation-runtime/automation-studio-49/v49-ar-upgrade-c0490-x20cp1584/

https://www.br-automation.com/zh/downloads/ AS软件下载地址

3.2  主程序

此代码是一个用于PLC(可编程逻辑控制器)的程序,运用B&R Automation Studio开发。它主要负责一个XYZ机械操作系统的流程控制,涉及物体的识别、搬运以及放置。下面是对主要类别和方法的解析:

常量定义:

  • 用来标识不同类型的物体。

  • 一系列常量用于定义机械手初始化位置偏移量。

  • 用来表示设备的初始位置常量。

初始化函数:

  • 初始化全局变量,设置相机扫描变量,设备位置,速度参数以及其他所需变量。

  • 设置延时函数的时间。

  • 初始化和设置偏移量数组,这些数组用于计算设备在处理物体时的位置。

周期性函数:

  • 包含一个状态机,用来控制整个程序流程的不同阶段。

  • 根据不同阶段来移动XYZ机械手和相机输送带,并在特定时刻进行对象的识别、吸附或释放。

  • 在每个阶段使用设置时间函数来进行时间控制,以协调各个动作的执行。

设置时间函数:

  • 运用B&R的TON功能块来实现定时功能。

  • 当使能输入被设置为TRUE时,计时开始,一旦计时器的预设时间达成,输出Q将变为TRUE。

每个case语句代表状态机中的不同状态,管理从初始化到物体处理的各个步骤,根据控制系统中的条件来改变状态。通过设置时间函数和其他条件判断来使得状态机可以在特定时间后或在特定的条件被满足后,决定下一个动作或状态。

程序还包括与可视化系统的接口。

整体而言,这是一个复杂的PLC程序,用于管理和协调一套工业自动化系统,能够根据不同类型的物体进行分类操作,并确保物体被准确地放在预定位置。

3.3 XYZ轴PLC程序

  • 首先包含了必要的头文件、变量和类型定义,为程序提供了基础的数据结构和函数。

  • 然后定义了相机输送轴的一个绝对位置宏。

  • _LOCAL关键字声明了多个结构体变量,这些变量用于设置和管理相机输送轴的基本参数和周期性参数。

  • ProgramInit函数是初始化函数,它设置了相机输送轴的启用、引用和参数。对MpAxis参数、周期性参数进行了初始化设置,并对SMC轨道的相关参数进行了设定。

  • _CYCLIC函数是周期性函数,在每个程序循环中被调用。它根据主控制程序的状态机来控制轴的运行状态,读取和设置相应的参数,然后调用功能块进行操作。

  • 这段代码操控着轴的启动、停止、参数加载、位置设置,并和主控制程序进行数据的交换,以完成对相机输送轴的精确控制。

总结来说,这段代码负责初始化一个输送轴的运动控制系统,通过周期性函数在每个循环中根据状态机来更新轴的行为,同时进行数据的读取和写入,保证轴系统的正常运行。

3.4 相机移动轴PLC程序

为抓取相机系统中称为相机移动的传送轴进行运动控制系统的设置和调试。代码首先定义该轴的绝对位置,然后声明若干结构体用于控制轴的基础和周期运动。初始化函数 进行轴系统初始化,设置轴参数,如滑差错误读取模式、扭矩模式等,以及初始化控制轴运动的  结构体参数,包括加速度、减速度、最大速度等。周期函数  则根据控制算法切换轴的状态,处理启动、停止、加载参数、设置位置等功能,并与主控制程序进行通信,以实现对传送轴的准确控制。最终,通过调用功能块来驱动轴运行。

总的来说,这段代码是管理相机输送系统中的某个轴的运动控制程序,包含轴的初始化设置和周期性运动控制逻辑,以确保其按照期望的方式进行精确移动。

结 语

Unity与HMI联调失败,HMI按钮无响应,因我关注的是Unity并不打算去学习Automation Studio,也不影响我研究Unity源码,所以不对Automation Studio 做进一步研究。

The End

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/440347.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

E4991A 射频阻抗/材料分析仪

新利通 E4991A 射频阻抗/材料分析仪 —— 1 MHz到 3 GHz —— 简述 E4991A 射频阻抗/材料分析提供极限阻抗测量性能和功能强大的内置分析功能。它将为元器件和电路设计人员测量 3 GHz 以内的元器件提供创新功能,帮助他们进行研发工作。与反射测量技术不同&#x…

想开发苹果群控软件?先了解这些代码!

随着智能设备的普及,群控软件的需求日益增加,特别是针对苹果设备的群控软件,因其出色的性能和广泛的用户基础,受到了开发者们的青睐。 然而,开发一款功能强大的苹果群控软件并非易事,需要深入了解苹果的开…

Research Agent:具有解决基于大型文本语料库的复杂问题,具备深度多跳推理的能力

原文地址:https://towardsdatascience.com/the-research-agent-4ef8e6f1b741 2023 年 8 月 29 日 问题简介 在2021年,开始应对基于大量文本回答问题的挑战。在预训练transformers之前的时代,这个问题很难破解。 人工智能和大型预训练tran…

k8s常用命令大全

k8s常用的命令 下面是一些常用的Kubernetes(K8s)命令,以及它们的简要说明。这些命令可以帮助您管理和操作Kubernetes集群中的资源。 集群管理命令: kubectl cluster-info: 显示集群的基本信息。 kubectl config use-context &l…

Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器

引言 在当今的软件开发世界中,网络通信已成为不可或缺的一部分。Qt,作为一个跨平台的C框架,为我们提供了强大的网络编程能力。本文将带你深入Qt的网络模块,探索如何使用QNetworkAccessManager、QNetworkRequest和QNetworkReply等核…

Qt插件之输入法插件的构建和使用(二)

文章目录 主键盘搭建Google开源引擎音节分割工具类参考项目下载搭建好各个基础控件之后,就可以开发输入法的主界面和引擎了,这也是输入法的核心。 主键盘搭建 输入法的主界面本质上是一个QStackedWidget容器,将各个类型的输入键盘插入到容器中,然后根据业务需要切换不同的…

寡姐出击!《黑寡妇2》AI电影宣传片重磅来袭

寡姐出击!《黑寡妇2》AI电影宣传片重磅来袭 The Black Widow returns, but darkness follows her. Black Widow 2 - Secrets buried deep will rise. A web of lies and deceit threatens her very existence. In the shadows, a new enemy lurks, waiting to strik…

跨网络传输的大致过程+图解(软件虚拟层),ip地址介绍,ip地址和mac地址对比

目录 跨网络传输 引入​​​​​​​ 举例 -- 唐僧西天取经 结论 介绍 ip地址 引入 介绍 类型 公有ip 私有ip 版本 ipv4 ipv6 ip地址和mac地址的唯一性问题 数据包转发的过程 引入 思考 -- 如何跨子网 过程 图解 封装和解包 去掉差异 ip地址/协议的重要…

智慧城市如何助力疫情防控:科技赋能城市安全

目录 一、引言 二、智慧城市与疫情防控的紧密结合 三、智慧城市在疫情防控中的具体应用 1、智能监测与预警系统 2、智慧医疗与健康管理 3、智能交通与物流管理 4、智慧社区与基层防控 四、科技赋能城市安全的未来展望 五、结论 一、引言 近年来,全球范围内…

华为od机试C卷-开源项目热度榜单

1、题目描述 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。 对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue…

利用“定时执行专家”循环执行BAT、VBS、Python脚本——含参数指定功能

目录 一、软件概述 二、VBS脚本执行设置 三、触发器设置 四、功能亮点 五、总结 在自动化办公和日常计算机任务管理中,定时执行脚本是一项非常重要的功能。今天,我将为大家带来一款名为“定时执行专家”的软件的评测,特别是其定时执行VB…

YOLOX论文解读

paper:YOLOX: Exceeding YOLO Series in 2021 official implementation:https://github.com/Megvii-BaseDetection/YOLOX 本文的创新点 本文在YOLOv3的基础上进行了一些改进:包括将检测头进行解耦的decoupled head、从anchor-based转为anc…

Python使用错误总结

【1】cannot import name ‘ParameterSource’ from ‘click.core’ 其根本原因在于是black模块,其模块版本可能过时,升级black模块版本即可: pip install black --upgrade【2】partially initialized module ‘charset_normalizer’ has n…

React-父传子

1.概念 说明:父组件传递数据子组件标签身上绑定属性;子组件接受数据props的参数。props是一个对象,包含父组件传递的所有数据。例如数字、字符串、布尔值、数组、对象、函数、JSX。不允许直接修改父组件传递的数据。 2.例子 // 父传子 // …

社区服务类创业项目推荐:抓住社区商业新机遇

大家好,我是一名90后鲜奶吧创业者,目前在社区经营5年时间,今天我想和大家分享一些关于社区服务类创业项目的推荐,都是这么多年我见证过生意最好的店面。 1、社区便利店: 随着人们生活节奏的加快,对便利购…

刨析数据结构(三)

🌈个人主页:小田爱学编程 🔥 系列专栏:数据结构-带你无脑刨析 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到小田代码世界~ &…

typeorm-入门

简述 typeorm是一个数据库orm框架,在nestjs官网中有提到,可以充分发挥利用typescript的特性,当然也支持js其中涉及的概念包括 DataSource 数据源,Connection 连接数据库Entity 实体,实体类映射数据库表Relation 关系…

《TCP/IP详解 卷一》第13章 TCP连接管理

目录 13.1 引言 13.2 TCP连接的建立与终止 13.2.1 TCP半关闭 13.2.2 同时打开与关闭 13.2.3 初始序列号 13.2.4 例子 13.2.5 连接建立超时 13.2.6 连接与转换器 13.3 TCP 选项 13.3.1 最大段大小选项 13.3.2 选择确认选项 13.3.3 窗口缩放选项 13.3.4 时间戳选项与…

开启AI绘画新纪元:让创意在指尖绽放

文章目录 一、了解AI绘画的基本原理二、选择合适的AI绘画工具三、掌握AI绘画的基本技巧四、借鉴与创新:从模仿到创作五、参与社区交流,共同成长《AI绘画教程:Midjourney使用方法与技巧从入门到精通》亮点推荐内容简介作者简介目录 在科技日新…

OpenAI (ChatGPT)中国免费试用地址

GitHub - click33/chatgpt---mirror-station-summary: 汇总所有 chatgpt 镜像站,免费、付费、多模态、国内外大模型汇总等等 持续更新中…… 个人能力有限,搜集到的不多,求大家多多贡献啊!众人拾柴火焰高!汇总所有 cha…
最新文章