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

news2024/12/26 10:46:50

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.coloradmin.cn/o/1500216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测评(补单)对亚马逊、速卖通、lazada有哪些好处和硬件要求?

跨境电商发展了这么多年,从最开始的亚马逊,eBay到速卖通,Lazada再到现在很多新出平台,可谓五花八门。 很多主流平台卖家都有使用测评补单来增加产品权重、提高销量。经常有小众平台的卖家咨询我他做的平台能否像亚马逊那样通过测…

面向对象中不可变性

软件设计中的不可变性是一个非常重要的概念,它可以在多个方面提高代码的可靠性、可维护性和安全性。 从开发者角度(代码提供者): 在软件开发过程中,当某个对象的属性是不可变的时候,这意味着这些属性的值…

ASP站点故障页面报503错误

本周有一个Hostease客户,购买Windows主机创建ASP站点,反馈站点遇到故障,页面报503错误。我们测试,复现了这个问题,随即检查独立应用池状态,发现它离线,通过重启操作站点恢复访问。我们分享这个教…

Redis与 Memcache区别

Redis与 Memcache区别 1 , Redis 和 Memcache 都是将数据存放在内存中,都是内存数据库。不过 Memcache 还可用于缓存 其他东西,例如图片、视频等等。 2 , Memcache 仅支持key-value结构的数据类型,Redis不仅仅支持简单的key-value类型的数据&…

ThreeJs限制模型拖动的范围

之前有讲过ThreeJs中对模型的拖动功能,使用DragControl组件,将模型放到组件的集合中,就可以拖动点击的模型了,这节细化下怎么控制拖动,比如之拖动z轴,或者限制拖动x轴的范围在某个区间: 首先还是…

【PLC】施耐德PLC数据采集经验总结-TSX系列

目录 1、介绍 2、 施耐德TSX系列 3、TSX通讯口引脚定义参考 1、介绍 施耐德,品牌就不介绍了,今天主要了解其PLC系列产品, 耐德PLC系列比较多,大公司,比较有钱,收购较多PLC厂家,导致PLC型号、编…

Vessel - Linux hackthebox

#hard #runc #RE #Nodejs-SQLI Enumeration .git leak 使用 dumpall 下载 .git 打开 routes/index.js 可以看到网站使用 nodejs mysql 编写,且只有登录功能 router.post(/api/login, function(req, res) {let username req.body.username;let password req…

代码随想录算法训练营第day7|454.四数相加II 、383. 赎金信 、 15. 三数之和 、18. 四数之和

目录 a.454.四数相加II b. 383. 赎金信 c. 15. 三数之和 d.18. 四数之和 a.454.四数相加II 题目链接 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l…

微信小程序开发系列(二十四)·wxml语法·列表渲染·wx:for-item 和 wx:for-index

目录 1. 如果需要对默认的变量名和下标进行修改&#xff0c;可以使用wx:for-item 和 wx:for-index 2. 将 wx:for 用在 标签上&#xff0c;以渲染一个包含多个节点的结构块 方法一 方法二 3. 总结 3.1 wx:for-item 和 wx:for-index总结 3.2 总结 1. 如果需要对默…

Publii和GitHub:搭建个人网站的完美组合

在数字时代&#xff0c;拥有一个个人网站已经非常普遍了&#xff0c;但是&#xff0c;很多人因为技术难题而望而却步。现在&#xff0c;有了Publii&#xff0c;这一切都将变得简单。Publii是一个静态网站生成器&#xff0c;它允许你在本地计算机上创建和管理内容&#xff0c;然…

​项目文章 | METTL3敲减通过m6A-YTHDC2介导的AMIGO2调控抑制RA-FLS活化

类风湿性关节炎&#xff08;RA&#xff09;是一种自身免疫性关节疾病&#xff0c;其特征是慢性关节滑膜炎、滑膜增生过度和关节损伤。近年来&#xff0c;N6-甲基腺苷&#xff08;m6A&#xff09;修饰的RNA在癌症和自身免疫疾病&#xff08;包括RA&#xff09;中的调控作用受到广…

全球科技创新领域大检阅“2024上海国际智能科技及创新展览会”

随着科技的飞速发展&#xff0c;创新成为了推动社会进步的核心动力。在这样的背景下&#xff0c;“2024上海国际科技及创新展览会”应运而生&#xff0c;旨在汇聚全球智能科技领域的精英&#xff0c;共同展示最新的科技成果&#xff0c;探讨未来的发展方向。 本次展会将于2024年…

在人工智能领域,如何平衡技术进步和人类安全?

人工智能&#xff08;AI&#xff09;技术的迅速发展为人类社会带来了许多潜在益处&#xff0c;但同时也引发了一系列安全和伦理挑战。在这个领域&#xff0c;如何平衡技术进步与人类安全成为了至关重要的议题。本文将探讨在人工智能领域中平衡技术进步与人类安全的方法&#xf…

Java安全 CC链3分析

Java安全 CC链3分析 cc链3介绍前置知识类加载类加载的方法例1.forName例2.getSystemClassLoader总结 javassist模块 cc链3分析TemplatesImpl类demo2TrAXFilter类InstantiateTransformer类 最终exp基于LazyMap链基于TransformedMap链 cc链3介绍 cc链3的后半部分与cc链1相同&…

阿里云服务器怎么使用?3分钟搭建网站教程2024新版

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

【梳理】k8s使用Operator搭建Flink集群

文章目录 架构图安装cert-manager依赖helm 安装operator运行集群实例k8s上的两种模式&#xff1a;Native和Standalone两种CRDemo1&#xff1a;Application 单任务Demo2&#xff1a;Session 多任务创建ingress 总结 架构图 参考&#xff1a;部署验证demo 安装cert-manager依赖 …

C# LINQ基础

LINQ基础 1. 入门2. 运算符流语法2.1 连续使用查询运算符2.2 使用Lambda表达式2.2.1 Lambda表达式及Func的方法签名2.2.2 Lambda表达式和元素类型2.2.3 自然排序2.2.4 其他查询运算符 3 查询表达式4 延迟执行4.1 重复执行4.2 捕获的变量4.3 延迟加载的工作原理4.4 查询语句的执…

ARM-v7 GCC 环境下的大小端转换实现

1.前言 什么是大小端转换&#xff1f;为什么叫大小端转换&#xff1f; Jonathan Swift的《格列佛游记》中记载&#xff0c;有两国因为剥鸡蛋的方式不同&#xff0c;即一国要求将熟鸡蛋的较大的一端&#xff08;大端&#xff0c;big endian&#xff09;敲碎然后剥壳&#xff0c;…

NLP_文本数据分析_3(代码示例)

目标 了解文本数据分析的作用.掌握常用的几种文本数据分析方法. 一、 文件数据分析介绍 文本数据分析的作用: 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择. 常用的几种文本数据分析方法: 标签数量分…

【嵌入式——QT】Model/View

【嵌入式——QT】Model/View 基本原理数据模型视图组件代理Model/View结构的一些概念QFileSystemModelQStringListModelQStandardItemModel自定义代理 基本原理 GUI应用程序的一个很重要的功能是由用户在界面上编辑和修改数据&#xff0c;典型的如数据库应用程序&#xff0c;数…