Community Tip - Need to share some code when posting a question or reply? Make sure to use the "Insert code sample" menu option. Learn more! X
Hi,
I can't find out what am I doing wrong with my chain assembly model.
End links and main links are assembled with MDX assembly constraints and flexible dimensions.
At assembly level, all these dimensions are controlled by relations and parameters.
And these parameters are declared flexible in the chain assembly model.
Up to this point everything works fine : when I change parameters, everything regenerate as expected in the chain assembly model.
When I integrate this chain in another empty assembly, the first link of the chain does not regenerate correctly when I change the flexible parameters. All others will regenerate as expected.
I don't get why.
Any hint ?
Solved! Go to Solution.
With the help of many posts in different discussions, I finally found a way to set my chain correctly :
In short, I added "associate parameters" to all the varied dimension of the individuals links so that I can call them in the relations.
I don't understand why but in relations at assembly level, calling the varied dimension with the parameter (w01:FID_74=width_main_link) works fine but calling the same dimension with the varied dimension (d0:6=width_main_link) leads to problems at a higher level assembly.
With this set up, I can assemble as many chains as necessary, all with different dimensions in a top level assembly and it works fine every time.
so I am done for what I wanted to do, even if I still don't really understand why it works now ...
If anybody knows I would be glad to hear.
I attached the files in order to make my problem easier to understand.
Edit: Attachment removed by user request. (Ryan Kelley)
There is nothing immediately obvious. However, check to make sure you do not have a relation driving the failing feature. Relations will overwrite flexibility.
Or this...
PS: "pi" is a recognized value in relations.
Thank you !
Hi Antonius, thank you for your time.
I don't understand how you got that "d7". In the file d7 is d1, which is correct.
I am still struggling but I did more tests :
- If I import the chain_01.asm in an other assembly without flexibility, it regenerates correctly
- If I add flexibility on chain_01.asm on the required parameters without changing values, it regenerates correctly
- If I modify any of the three values for the end links, regeneration fails for "link_start.prt" which keeps the original values ; link_end.prt regenerates correctly with the updated values.
It must be an obvious mistake but I still can't find it !
I am not sure what is generating the errors in relations.
I find trying to mimic natural shapes to be troublesome.
I am not sure how this behaves in a next-level assembly. Technically, it seems you have locked the angles with relations at this level so you cannot move the links in between the ends in the next level because they are locked by relations. I would have to simplify the problem to better see the issue. Your flexibility is the physical size and shape of the links. But you have also set the assembly constraints with relations. Try simplifying the problem by using only curves.
well, I would really like to have this chain like this
Concerning the anlges, they just prevent the links to rotate "reverse" like a normal echain. And as far as I tested this works fine.
I just noticed that I am not consistent in my relations conerning the use of ampersand before parameters and dimensions.
And I can't find any clear explanation about what difference it makes to add ampersand or not ... Do you have any ?
the & is only needed for annotation. Relations seem to understand the values without any delimiting.
I have used a trick to avoid reversing... and yes, it is a very prevalent problem with a lot of Creo functions.
When you define the pin constraint, try adding angle limits. This will help.
When I do chains, I constrain them to a curve. Much easier in the long run. The chain can be managed with a perimeter dimension in a sketch, and the endpoints can be varied. A different approach but definitely a more manageable means to provide reasonable curvature. Specially when you figure out how to control splines directly. Just remember that the links represent poly-lines and the curve is actual length. The two do not always equal each other's chainlength so you need a "relief" joint somewhere. This can be managed at either end.
ok for the ampersand.
For the angle limits in pin connection, this is exactly what my relations do but I set the min angle through a parameter.
As for the curve solution, can you move the chain on the fly if it is constraint on a curve ? I need to make an animation of a complete system so I really need to "mimic" the machine.
Back to my file, does it make any difference if you declare the part flexible before integrating it into an assembly (through "model properties"/"flexibility"/"change") or if you make it flexible from inside the assembly ?
thanks again !
I would have to try this again. Some things animate and regenerations don't.
I have not used declaring flexibility at the part level.
I will look at this also.
It doesn't make a difference. Defining flexibility at the part level prompts the user by asking if they want to use the predefined flexibility. The flexibility is still only evaluated at the level at which it is used.
Let's see if this muddies the waters or if things settle some.
No flexible components. I am driving constraints to allow a chain to slide along a predefined curve.
In the next level assembly, I am allow the chain assembly to float while locking down one link. This lets the curve float with the assembly forcing the chain to move along the curve. For animation purposes, this does not require regeneration. Motion can be obtained with a servo motor and linkages.
The flexibility can now be added to the sketch dimensions... which will stay fixed during animations but make the assembly more adaptable to other models. Development of the track curves is what needs attention. I kept it simple but obviously you have to manage the end condition so you can control it with your motion profile and the fixed location of the moving receiver module.
Also notice the restricted angles in the links (pin connection). These do work when you know the allowable range. They no longer flip onto themselves without causing a more severe regeneration error. For the most part, not a problem if changes are not unrealistically drastic.
As always, set the video resolution to HD and watch it in a your browser.
I am amazed how much time you take to try to help people in this forum ! Thank you
I ave no sound in the video, is it normal ? I would not want to miss some explanations. Anyway it seems very well done and self explenatory.
I will try this way to see if it suits my needs.
As for my problem, it solve, I will write another post to explain how I solve it !
thank you again !
I have to admit that the challenges are in some respect selfish as I know I will need these capabilities at some point in my development efforts for clients.
cable tracks come up from time to time. It is no9t a simple problem as many attempts failed. So I capture what works.
What are you doing to make sure the link behave? I see the flexibility is to account for the size of the links, but nothing on how the motion is being managed.
All links are connected with pin joints. It is important to set max and min angles correctly :
- I usually allow 1° of reverse angle (ang_max in my relations)
- For the min angle, it is calculated to fit chain length and min bending radius :
&ang_min=-180*lg_main_link/(pi*r_min)
Then when I integrate the chain, I connect the start link to a base part and the end link to a moving part. The moving part is connected with a slider joint to the base. Then when you move the moving part, the chain will follow as shown in the video. Links are not constrained on a path.
Hope this helps !
Okay, that makes more sense. The chain did some weird thing before I added the path even with limited angles.
I'll have to see what 180*lg_main_link/(pi*r_min) actually returns. Somehow I can't picture than one in my brain.
This formula is an approximation of the angle :
Pi * r / Length_link = k = how many links you need to have a 180° bend
And I approximate k to the number of time you need the same angle to get to 180° -->
k * angle = 180
--> angle = 180 / (Pi * r / length_link)
This works pretty well so I did not look for something more precise.
Thanks, now I am seeing it. Circumference approximation.
With the help of many posts in different discussions, I finally found a way to set my chain correctly :
In short, I added "associate parameters" to all the varied dimension of the individuals links so that I can call them in the relations.
I don't understand why but in relations at assembly level, calling the varied dimension with the parameter (w01:FID_74=width_main_link) works fine but calling the same dimension with the varied dimension (d0:6=width_main_link) leads to problems at a higher level assembly.
With this set up, I can assemble as many chains as necessary, all with different dimensions in a top level assembly and it works fine every time.
so I am done for what I wanted to do, even if I still don't really understand why it works now ...
If anybody knows I would be glad to hear.