Position-based Conveyor


I am writing because I would like to implement a position-based conveyor. The final aim is to have a conveyor component where:

  • it is possible to create object on a specific pose
  • the motion of the objects on the surface of the conveyor is not depending on the speed of the conveyor but it is instead synchronized with an encoder position passed to the conveyor object (e.g. through OPC-UA)
  • the position of each object could be calculated as the conveyor delta position between the initial position of the encoder at the instant of creation of the object and the current position of the conveyor encoder
  • I would like to pick&place objects with a robot which position is passed through OPC-UA; passing the speed of the conveyors I would have synchronization problems -> that's why I would like to have a fully position-based system (vs the current speed-integration approach)
I've tried to create a new component including a ComponentCreator and a OneWayPath and it looks like that having a connected output path is a condition for the succesful creation of a new object, am I correct?

Moreover, the speed of the OneWayPath must be different from zero, while in my case I would like to have zero speed and to manually update the position of the objects.

Finally, I am trying to connect the new part (e.g. a product) to the parent object (e.g. my position-based conveyor) using the attach method, is it correct? (I guess no since, in my case, that causes a crash of the software :wink: ). I would like to store the new objects inside my custom conveyor and then to go through the list (should they be listed under ChildComponents?) and translate them manually, based on the position of the conveyor.

Thank you in advance for the support!

The creator does not need to flow directly into the path. You can flow into a container, make the adjustments to part’s position, and then grab part onto path. In order to keep the position of part, set the path’s RetainOffset property to True. The script in the attached layout shows how this is done.

A path behavior can have a speed of zero. From there, you could create an array of its child components/contained components. Depending on how you do the sync, you could just feed the position value to element in array, call a function to update its position, and then render it.

A path behavior does have a step interpolation that uses segments, but it is a bit tricky to work with.

Project-Position-Conveyor.vcmx (186 KB)

Hello, thanks for the quick answer and for the example.

What I am still missing is the Speed of the Path being set to a zero value. If I try to set it from the interface the value is not accepted by the GUI (see image below). Am I doing something wrong? Should I force it from the script instead?

Path Speed

On the other side, I can make it work as expected using the ComponentContainer: in this case, I can go through the list of components inside the ComponentContainer and apply transformations to them.

If I go with the ComponentContainer, am I then in charge to “pass” the objects to a component eventually connected to the OutInterface? Is it possible to manually handle that from the script?

I guess that going with the Path approach would simplify that… is there any way to force the position of a Path?