2025-02-27 22:41:55
我用unity做虚拟设备,对外部走modbus通讯。
如果我想用plc来控制虚拟设备的话,就只能让plc也走modbus通讯。
这样的话,就无法使用plc的out这样的线圈指令直接点亮虚拟机的io了。
有什么办法可以直接让plc使用out指令点亮虚拟设备的输出IO呢?在Unity虚拟设备与PLC之间实现直接使用OUT指令控制IO的解决方案,可以按照以下步骤进行:核心思路:通过协议转换或虚拟I...
2025-02-12 15:23:20
勇哥注:game4automation是unity的一个数字孪生插件,专门用于自动化行业。下面是勇哥出的系列教程,会持续添加。game4automation教程(一)创建一个带有光源、传送带和感应器的小例子http://47.98.154.65/?id=2561game4automation教程(二)引入传感器、plc输入输出http://47.98.154.65/?id=2562game4aut...
2025-02-11 21:50:13
勇哥注:下面勇哥详细说一下ADTV项目的环境搭建;用到的知识点;最后谈下不同目的朋友的学习大方向的指南。(一)搭建ADTV项目的学习环境1. Unity编辑器版本 2022.3.48f1c1游戏引擎。使用个人许可证即可。必须是此版本,否则ADTV的unity版本打不开。unity安装见:https://www.bilibili.com/video/BV1gQ4y1e7SS/?p=4&vd_...
2025-02-08 21:00:23
这是勇哥发起的一个开源研究项目ADTV(Automated Digital Twin Virtual Device),旨在构建一种基于unity的工业自动化数字孪生设备,致力于为工业自动化行业的学习者提供一种高效、功能全面的虚拟实验设备。通过支持后面提到的五大核心技术范畴,设备可以做为全栈学习应用场景。注意:但是此项目只是一群爱好者聚在一起做的技术研究的合集,暂时并非有实际产品。只是实验源码都是开...
2024-12-27 15:18:10
勇哥注:机器人反向动力学,可以取坐标空间中的某个点位,而让机器人的每个关节反向求解出要动多少个单位。这样你的机器人就不用为了到达某个位置,而依次运动每个关节。之前我们只能使用关节动画来模拟机器人的动作,或者使用unity的约束来模拟。现在game4automation的机器人反向动力学就可以做到完全真实的模拟点位运动(PTP运动)。下图演示了反向动力学走点位的效果:演示模型和预制件使用我们的专用演...
2024-12-19 14:08:59
勇哥注:modbus通讯协议本身是可靠的,不然也不会发明起至今快50年了,还在自动化行业中广泛使用。然而当应用各种第三方modbus组件编程的时候,由于组件的实现者、组件的应用者没有遵循标准来实现和应用,就会造成各种通讯异常。这就有点像一台pc机,硬件厂商能保证自己的硬件没有问题,然而架不住使用者乱装软件,最终还是可能会死机蓝屏。使用modbus组件的使用者想怎么用就怎么用,没有章法,这是此问题的...
2024-12-18 21:15:55
勇哥注:下面是一个综合的例子,通过一个杜撰的设备,演示了gam4automation的能力。为了完成这个例子,还需要配合一些自定义脚本,以及做为上位机的C#程序。完整的设备见下图:设备是一个分拣设备。上下料的轴有x, z轴。分拣的轴是u轴。这个例子勇哥只是弄了个简单的示意场景,并没有导入cad图纸。仿真这边实现了下面的功能:(1)传送带(2)x, z, u轴(3)工位上的双控气缸(4)吸嘴上的真空...
2024-12-18 09:06:22
勇哥注:让设备回到播放前的状态,这个需求很重要。不然我们想从头来进行测试,就只能重新播放了。我们从下面几个方面来进行:(一)删除所有的mu目的是把物料全部清空,就像我们从设备里人工取走一样。Source组件中有两个属性:Generate MU, Delete All MU。前者在每创建一个mu的复制品的时候,就会给个信号。后者勾选后则可以删除所有mu的复制品。(二)重新加载场景如果记录场景状态,...
2024-12-17 15:13:38
一般来说,我们都是使用Drive组件的 Jog Forward和Jog Backward来做Jog运动。我们会使用Drive_Destination Motor组件来做ptp点位运动。但是这两都同时有效的时候,你会发现手工打勾Jog Forward和Jog Backward就没有效果了。这是因为此时运动被Drive_Destination Motor组件接管了。怎么让这两者(ptp和jog)可以共...
2024-12-17 11:46:55
Drive_Destination Motor组件是我们实现ptp运动的主要方式。现在有一个需求是必须运动中响应停止,以及继续。然而你是不是发现Drive_Destination Motor组件没有停止?如果你想通过Start Drive为false来停止,这个是不行的。如果你想通过Drive组件的Stop Drive来停止,会发现也根本停不下来。怎么办呢?正确的方式是先Drive_Destina...
2024-12-13 09:24:57
一般来说,当你在unity中编辑模式下点,在内部赋值与外部赋值状态之间的切换,这个设置会记录下来。但是有时候会发现,在播放的时候状态又自动切换为下图的状态(内部赋值状态),结果就是外部通讯无法控制这个通讯变量了。怎么办呢?解决的办法很简单!复制一个正常的通讯变量,改下名字设置好参数就行了。这种情况应该是game4automation的一个bug。...
2024-12-09 16:50:58
SensorBeam是由一个3D游戏对象加感应器组件构成的组合对象。Sensor则只是一个感应器组件。SensorBeam如果有效,像下图所示的Status会在碰到mu对象后有反应。这个对象有个问题,就是只对mu对象有反应。如果我们用它来构建原点和限位感应器,就不适合。换成game4automation的场景中,你得把MU对象放到g4a MU层,而SensorBeam放在g4a Sensor层。这...
2024-12-09 08:33:20
勇哥注:unity中的2d物理效果基于开源的Box2D引擎,3d物理效果基于Nvidia PhysX,包括几个关键组件:Rigidbody(刚体),Collider(碰撞器),关节(Joints)我们只对3d物理效果有兴趣。见图1:场景中4个对象(先不算斜面上的cube)。球体添加了RigidbodyCube有一个BoxCollider。两个平面都添加了Mesh Collider。播放后我们见到下...
2024-12-06 16:49:12
game4automation的层级面板中,通讯接口相关有丰富的控制功能。下面讨论一下它们的控制图标的意义。(一)图1的疑问(图1)(1)为啥有些值的显示写着False,而有些显示的是(False)。False这种没括号的,注意它的属性中,关联到了一个流对象上面,因此Behavior列表中有内容。(False) 这一种则Behavior列表中没有关联游戏对象。(2)为啥有项目显示是蓝色的并且后面有...
2024-12-05 15:18:29
目前,市面上对非标自动化设备制造的需求有相关性的,并且有流行度的软件主要是下面几款。(一)IOA数字孪生软件此国产软件主要采用拼积木方式构建实验场景。主要用于学习实验性质。 它虽然可以导入solidworks的模型,但是模型的准备工作操作复杂,只适合单独机构零件的模拟动作,不适合整机运动模拟。 只能配合plc进行仿真。 官网: www.ioaol.com参考视频 :https://www.b...
2024-12-04 16:52:27
今天unity播放时看到出现了这个提示。它不是错误,仅是个提示,但是不停的刷消息,比较烦。网上查了一下,意思如下:当前场景中有4个音频监听器(Audio Listener),而Unity引擎要求每个场景中只能有一个音频监听器。在相机属性中,果然有个Audio Listener。关闭,只留下一个即可。...
2024-12-04 14:28:20
Drive IO's的这几个参数,勇哥发现其实有妙用。(1)Jog Forward/Jog Backward 前后运动这两个我们在播放时,可以用于测试轴向前、向后运动。但其实,它可以用来做jog运动的!那个Target Speed 正好做为jog运动的速度参数。使用的时候,我们弄几个PLC Output对应Jog Forward和Jog Backward,在代码中收到信号后就对Jog F...
2024-12-03 21:47:35
讨论下面几个问题:(一)为啥在编辑模式下灯也会闪烁 即使不播放,在场景编辑模式下,灯也会闪烁。 这个原因见下的贴子: unity中不播放,仅在编辑模式下也能执行脚本的方法 http://47.98.154.65/?id=2589 如果想让灯被外部控制,不要自己闪烁,需要关闭Flashing(自动闪烁)和Lamp On。(二)为啥黄灯缺省是这种绿色,这样黄灯没点亮时,用户还以...
2024-12-03 11:20:22
讨论几个问题:(一)Sensor到底要不要配Sensor_Standard?Sensor自己也有一个Sensor Occupied,可以指定一个PLC Input。Sensor_Standard也有一个Occupied,用以指定一个PLC Input。勇哥经过实现,发现两个地方都有效果。也就是说,你可以不用Sensor_Standard。(二)为啥Sensor感应到变红了,但是PLC Input看...
2024-12-03 09:48:13
勇哥注:在game4automation中,创建modbus接口时,会出现下图所示蓝色标记的预设体内容。如果你想把蓝色的项止移动到一个空对象的下面,会有个报错那么我们怎么取消预制体与空对象的关联呢?在Hierarchy视图下,选择预制体的根对象,鼠标右键,Prefab-->Unpack Completely。注意如果你选择子对象,则Prefab下面不会出现Unpack Completely已...
2024-12-02 15:25:23
勇哥注:这节说下输入按钮的组件Interact 3D,以及丝印文字怎么弄。下面是4个常见的按钮:启动、停止、复位、急停按下后(需要去Game窗口按),Mouse Down和On会打勾。松开鼠标后,它们取消打勾。默认就是不勾选Switch属性,这个时候就是点动按钮状态。下面是Interact 3D的属性。Switch 如果不勾则是点动按钮,如果勾了就是开关按钮(状态保持按钮)Mouse Down...
2024-11-29 21:27:13
勇哥注:game4automatic的Lamp灯,居然不在播放的时候,也会有一闪一闪的效果。显示,它在编辑器的状态也在执行中。这是怎么做到的?在Unity中,有几种方法可以让脚本在未播放场景时运行:(1)使用ExecuteInEditMode属性:在脚本的类定义前添加[ExecuteInEditMode]属性,可以使脚本在Unity编辑器中运行,而不需要播放场景。例如:using Unity...
2024-11-29 11:14:42
下图中的cube的轴心默认是在mesh的中心的。而我们希望它在底边的中心位置。直接改是没办法的。但是可以变通一下,方法是,先创建一个空对象,把这个空对象的轴心放到我们希望的位置。然后把cube做为它的子对象。接下来我们控制这个空对象就可以了。现在我们我们就可以旋转这个空对象,其轴心就是我们想要的。...
2024-11-29 07:54:09
在unity中,我们知道项目名字,也知道它保存在哪里。但是如果你想知道你当前的场景scene保存在assert的哪个目录,可能就麻烦了吧。你从标题栏是不可能知道这个信息的。我们一般习惯在asserts的根目录中创建场景目录。这样asserts下就好多的目录了。解决办法:首先你把当前场景保存。然后在菜单“Open Recent Scene”的历史列表中,第一行就可以看到你场景的文件名,及目录名。(下...
2024-11-28 21:28:42
勇哥注:Drive_Speed就是以恒定的速度持续运动。如果想停止,需要把Target Speed改为0。如果想改变运动方向,需要把Target Speed改为负值。Drive_Speed运动方式,就是我们调机时用的jog运动。在触摸屏上,jog运动的按钮按住不放就持续运动,松开就停止。jog运动适合轴位置的粗调,然后精调就是使用ptp运动了。下面是Drive_Speed运动的参数。由于比较简单,...
2024-11-28 21:16:34
勇哥注:Drive_Gear字面上叫齿轮运动。其实你可以认为它就是龙门运动,一个主驱动器运动时,另一个驱动器做同步跟随运动。axis4做为副驱动器,添加了drive和drive_Gear。axis3做为主驱动器,只用添加drive。当然你也可以添加其它的运动方式。不管是什么方式,副驱动器都会同步进行。运行的时候,让主驱动器动起来就可以了。如果你让副驱动器运动起来,结果就是两个都不会动。...
2024-11-28 17:12:43
勇哥注:Drive_DestinationMotor直译就是“目标运动”,其实其效果就是运动卡的ptp(点到点运动)而且是走的绝对位置的ptp运动。参数解释:Speed 是起始速度Target Speed 是最高速度,就是均匀段的速度。Acceleration 是加速度,没有减速度,但是估计减速度等于加速度。Is At Positon 实时位置,可以理解为编码器反馈值Is At S...
2024-11-28 16:08:38
勇哥注:Drive_Continous Destination有点像随时可以改变目标位置、速度的运动方式。你一但修改Destination(目标位置)就会立刻动起来,如果中途你重新修改Destination也可以,立刻向新目标运动。Acceleration(加速度)和Target Speed(目标速度)也一样可以中途随时修改。这一种方式也适合做运动控制卡类似的ptp(点位运动),因为它已经带有加速...
2024-11-28 16:00:48
勇哥注:此方式非常适合模拟脉冲型运动卡的运动方式,运动卡是以一定的频率持续向伺服或者步进驱动器发送脉冲。而且它还可以指定减速比。效果如下图所示:这个动图显示有点问题。其操作实际上是:鼠标按住Value的值左右拖动,就可以连续改变其值。轴就会连续运动。这个值关联到Drive_Follow Position的Position属性上面的。下面的测试场景。Axis1添加了Drive_Follow Posi...
2024-11-28 15:18:56
勇哥注:Drive Cylinder是类似气缸动作的方式,可以用来模拟出真实的气缸、电缸效果。如下图所示:这是常见的单控气缸,一个触发IO,两个磁性感应器,一个是动点感应,一个是原点感应。动点指的是气缸伸出去的最大位置,原点是指气缸缩回来的最小位置。另外还有一种双控气缸,它有两个触发IO,两个磁性感应器。这一种也可以模拟。(图1)(一)项目构建如图1所示,我们要构建两个感应器sensor,两个PL...