Introducing Contact for entities for belt systems
Conveyor belts are utilized globally for various purposes, including transportation, assembly, and manufacturing. In MotionView, we provide both the belt/pulley tool and the track system tool, each designed to facilitate the creation of belt systems. Once a belt is set up using these tools, it interacts with other belt and rolling systems. A common question is how to efficiently establish contact between all the belts and an object being transported on the belt, such as a box.
Let’s consider a straightforward belt configuration. We’ll also create a box that will be transported along this belt to illustrate how to manage these interactions effectively.
To establish contacts between all the belt entities and the box, you can manually create each contact. However, this process is time-consuming and tedious. An alternative is to use a script that automates the creation of these contacts.
Below is an example script. First, a system is set up to contain all the contact entities. A for
loop is then used to generate a contact entity for each belt entity.
When defining contact, the API is structured as shown
*Contact(varname,label, contact_type, coulomb_friction, BODY, b1, in, ig1, BODY, b2, jn, jg1)
Where "b1" will be the box body (b_box).
"in" defines the number of graphic entities to be associated with the first body. For this example since the box is the only graphic, the input shall be 1.
"ig1" represents the varname of the graphics on the first body to be associated with the contact (gbox_0).
"b2" will be the associated belt body.
"jn" defines the number of graphic entities to be associated with the second contact (bp_0.b_belt_{i})
"jg1" represents the varname of the graphics on the second body to be associated with the contact (bp_0.gsys_belt.gbox_belt_{i}).
Ensure that the loop increment matches the number of links created by the tool. This can be found in the Parameters Dataset of the belt pulley system.
Additionally, verify that the system variable names are correct. Otherwise, an error may occur stating the system could not be instantiated.
*System( sys_con_belt, "Contact_Belt", def_sys_con_belt ) *DefineSystem( def_sys_con_belt ) {for(i=1; i<=80; i++)} *Contact( con_{i}, "Contact {i}", IMPACT, DYNAMICS_ONLY, BODY, b_box, 1, gbox_0, BODY, bp_0.b_belt_{i}, 1, bp_0.gsys_belt.gbox_belt_{i} ) *Output(auto_out_con_{i},"Force - Contact {i}", FORCE, CONTACT, con_{i}, MODEL.Global_Frame, BOTH_MARKERS ) {endloop} *EndDefine() *BeginContext( sys_con_belt ) {for(i=1; i<=80; i++)} *SetContact( con_{i}, 1000.0, 2.1, 0.1, 0.1, 0.2, 0.1, 1.0, 1.5, false ) {endloop} *EndContext()
The second for
loop is used to update the contact properties
This script can be loaded and evaluated in TextView.
The next step is to copy the evaluated code and open the .mdl
file in any text editor. Navigate to the end of the file, right before the *EndMDL()
command. Insert the code generated by TextView.
Save the file as a new .mdl
and open in MotionView. It can be observed that the system and contacts were created as intended.
Running the model, we can observe that the model behaves as anticipated.