勇哥注:
设备中真空和破真空很常见,但是在mcd中我们并没有这样的mcd对象,下文中勇哥是使用固定幅来实现的。
真空还是有必要的,不然像下图中的料盘,在随着轴的载盘移动时,速度一快就会甩下去。
解决这个问题的办法大家可能都会想到用固定副。
先对x轴添加“碰撞传感器”
再对x轴添加固定副,连接体空出来,一会有用。
然后在仿真序列中设置一下。
选择刚才设置的固定幅,然后勾选运行时参数的“连接体”和“基本体”。
这个时候连接体就可以选择“触发器中的对象”。
因为载盘是碰撞感应器,料盘落在载盘上面,触发器中的对象就是料盘,于是连接体就变在了料盘了。
注意上图中还添加了一个控制变量Signal_0,如果为true,我们就让x轴吸住料盘。(其实就是让固定幅的连接体变成料盘)
效果如下图:
让Signal_0置为true后,手动移动x轴,可以看到无论怎么动,料盘都不可能甩出来。
这个就像真空吸住料盘一样了。
这里注意成功的标志:就是连接体的值,它不是null,而是“料盘”。
这里成功的关键在于,我们是通过Signal_0手动控制固定副生效。
因为仿真序列执行时,未必刚才是物料落到位置的时候,这里存在可能不适合的时间差。
用Signal_0手动控制固定副生效就能确保时机是正确的。
如果你不要这个Signal_0信号,则可能成功,也可能不成功。
那怎么样外部控制这个真空信号呢?
其实可以直接定义外部信号并做信号映射就好了。
下面我先把信号singal_0改个名字,叫“真空”。
定义外部信号,这里勇哥用的是tcp modbus。
然后做信号映射
现在跑仿真,会有一个警告,我们可以忽略。
打开modbus poll,可以看到对继电器地址0,置为on,直接改变了mcd这边的“真空”信号。
结论:
对于真空和破真空,我们可以定义一个bool信号,然后通过外部来修改即可。
然后你还得在仿真序列中定义一个对固定幅的“连接体“做 赋值的动作。
因为你不能靠“信号适配器”完成这种操作,它指定固定幅,却无法控制“连接体”,它只能控制固定幅的下图所示的属性。
这些都不是我们想要的。
另外,如果靠”运行时表达式“可不可以?
答案也是不可以,如下图所示,它只能控制运动幅的”活动“这个属性。
这个也达不到我们要的效果。
因此,我们用信号+仿真序列,可以实现真空和破真空。

