Community Tip - You can subscribe to a forum, label or individual post and receive email notifications when someone posts a new topic or reply. Learn more! X
Hi
I am working on a Top down design with skeleton creation. I created skeleton which is working perfectly fine.
i am stuck with quntity to be increased. Let me explain in brief: Assume a base or platform of LXWXD= 600X1000X20(all dimensions in mm). And is assembled with 4 panels of same length and width of 250mm each.
If i control these LXWXD in my skeleton, my assembly is regenerating succesfully. (attached jpeg for reference)
But i need a solution like, if i increase width from 1000mm to 1500mm, instead of 4 panles of 375mm each, i need 5 panels of 300 mm each OR 6 panles of 250 mm each. I need quantity of panles to be increase and also if i decrease the width from 1000mm to 600mm , number of panles should decrease.
How can i control quantity;
1) Is there any way in pro-programing(i think it can cntrol relations only)
Can i use if else relation?
2) can i use family table for my skeleton or to my main assembly? if so help me with procedure..
3) Or need to take help of CAD customization or J link?
Please help me out if any other solutions for this!
Thank you, Sateesh
Pattern the panels, create a length paramter and write a relation something like
if length is greater than 900 but less than 1100, # of panels equals 4, if # of panels equals 4
lenght of panel equals 250. add as many variations of this as required.
Hi @jbob You meant to say to write the program in assembly level or skeleton level! please can you help me with the programming!
sure, what determines the width, is it the size of the panels or do you just select a width? If it is the panels, can the panels be manufactured in any width or are the made in 50mm increments or some other number?
if you have a skeleton feature where the width is d1:2 and the length is d2:2 and the depth is d0:2
your panel is width d1:0 and the length is d2:0 and the depth is d0:0
pattern the panel and you have 3 of components as p2:1 and dist between panels as d1:1
then you could have assembly relations something like
/*length
d2:0 = d2:2
/*depth
d0:0 = d0:2
/*width
IF d1:2 == 1000
p2:1 = 4
d1:0 = d1:2/4
d1:1 = d1:0
ELSE
IF d1:2 == 1500
p2:1 = 5
d1:0 = d1:2/5
d1:1 = d1:0
ENDIF
ENDIF
you would just change the skeleton feature to adjust the model. this is limited because the user would need to enter the correct number for the skeleton width dimension.
Thank you @jbob, i got some idea.
What if , if width is in incrememnt of 25mm?
And how can i control the range in program..
that is,
if width is ranges from 800-1200mm i need number of panles to be 2
if width is ranges from 1200-1400mm i need number of panles to be 4
if width is ranges from 1400-1600mm i need number of panles to be 6
Sorry if i am asking too much questions! i am stuck with this and facing these issues to proceed!
Thank you 🙂
P-A-N-E-L-S
here is a sample of what you could do, this is not complete but you can see where this would go.
/*length
d2:2 = d2:0
/*depth
d0:2 = d0:0
/*width
IF d1:0 >=800 & d1:0 <= 824
d1:2 = 800/2
p2:1 = 2
d1:1 = d1:2
ELSE
IF d1:0 >=825 & d1:0 <= 849
d1:2 = 825/2
p2:1 = 2
d1:1 = d1:2
ELSE
IF d1:0 >=850 & d1:0 <= 874
d1:2 = 850/2
p2:1 = 2
d1:1 = d1:2
ELSE
IF d1:0 >=875 & d1:0 <= 899
d1:2 = 875/2
p2:1 = 2
d1:1 = d1:2
ELSE
IF d1:0 >=1200 & d1:0 <= 1224
d1:2 = 1200/4
p2:1 = 4
d1:1 = d1:2
ELSE
IF d1:0 >=1225 & d1:0 <= 1249
d1:2 = 1225/4
p2:1 = 4
d1:1 = d1:2
ELSE
IF d1:0 >=1250 & d1:0 <= 1274
d1:2 = 950/4
p2:1 = 4
d1:1 = d1:2
ELSE
IF d1:0 >=1275 & d1:0 <= 1299
d1:2 = 1275/4
p2:1 = 4
d1:1 = d1:2
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
Thank you @jbob, i made the same above relations simpler and skeleton is working fine.
After skeleton,
Now i modeled panel parts using particular Skeleton curve as a reference,
When i decrease the width number of panels are not getting suppers.
Means when i decrease width from 1600mm to 900mm , skeleton is working fine but sub-parts are relates to main assembly, they need to get suppress here i think.
Can we suppress features using relations written in skeleton model?
did you pattern the panels? If yes did you change the number of panels in the relations? I think the relations could be at the assembly level as well
Yes @jbob i pattern the panels.
As my relations are in skeleton, Took refernce from it and pulled sketches into my sub assembly.
But i am getting popup in both top level and sub level to give twice the input , i.e if i wanna change the width, in top level assembly and also in sub assembly i need to give same value and regenerate both.
Is this right method? May be any other paths to get skeleton relations into assembly!
Have you defined any INPUT parameters in the sub-assembly? If so, you will need to EXECUTE those parameters from your main-assembly.
I put the relations at the assembly level not the skeleton level.
Great, i transferred all skeleton level relations to assembly level. I can able to control the quantity. Thanks @jbob
Can we suppress a part or number of parts with the help of proprogram?
Yes you can suppress part(s) with PRO/PROGRAM
If you look at the PRO/PROGRAM of an assembly, you will see:
INPUT
END INPUT
RELATIONS
END RELATIONS
THE MODEL TREE OF YOUR ASSEMBLY
ADD PART DIN965_M5X40
INTERNAL COMPONENT ID 235457
PARENTS = 16973(#54)
END ADD
MASSPROP
END MASSPROP
You can write "IF THEN ELSE" statements around the features and components to suppress/resume those with PRO/PROGRAM.
For example:
IF INSERT_BOLT == YES
ADD PART DIN965_M5X40
INTERNAL COMPONENT ID 235457
PARENTS = 16973(#54)
END ADD
END IF
Where INSERT_BOLT is a parameter which can be defined in the INPUT or in the RELATIONS.
Ofcourse there are also the EXECUTE statements (assembly only) and the POSTRELATIONS section (part or assembly).
Thanks for the rply,
How to know -
PARENTS = XX(XX) --->>VALUE?
If my master assy is XXX.asm, and XXX-A is subassembly. and inside this sub assembly i need to suppress parts. and my program is in master assy XXX.asm
If i open program in XXX-A.asm, i can see
ADD PART partname1
INTERNAL COMPONENT ID 48
END ADD
ADD PART partname2
INTERNAL COMPONENT ID 49
END ADD
ADD PART partname3
INTENAL COMPONENT ID 52
END ADD
If i define DEPTH>=850 & DEPTH<=1000; partname2.prt & partname3.prt should get suppress.
If i define DEPTH>=1001 & DEPTH<=1600; partname1.prt should get suppress.
In your example, does DIN965_M5X40 gets suppress or resume?
because its saying command ADD PART
And also heard "ADD SUPPRESSED PART" -How to use this!
If you want to use a parameter from your master-assembly in a sub-assembly, you can use EXECUTE statements drive the parameters.
Open the PRO/PROGRAM of your subassembly XXX-A and add an input parameter DEPTH:
INPUT
DEPTH NUMBER
END INPUT
Now, open the PRO/PROGRAM of your masterassembly XXX and add:
INPUT
DEPTH NUMBER
END INPUT
RELATIONS
...
END RELATIONS
EXECUTE ASSEMBLY XXX-A
DEPTH = DEPTH
END EXECUTE
Explanation: DEPTH (defined in XXX-A) will get the value of DEPTH (as defined in XXX)
Now you can test if the EXECUTE statements are working: regenerate your master-assembly XXX and enter a value for DEPTH. Regenerate the master-assembly. Open your sub-assembly XXX-A and evaluate the value of DEPTH. The value of DEPTH should be the same.
@ss3 wrote:
In your example, does DIN965_M5X40 gets suppress or resume?
because its saying command ADD PART
In my example, DIN965_M5X40 will be resumed. In short, if the statement is true, then the part will be resumed. If the statement is false, the part will be suppressed.
@ss3 wrote:
And also heard "ADD SUPPRESSED PART" -How to use this!
You don't.
@ss3 wrote:
ADD PART partname1
INTERNAL COMPONENT ID 48
END ADD
ADD PART partname2
INTERNAL COMPONENT ID 49
END ADD
ADD PART partname3
INTENAL COMPONENT ID 52
END ADD
If i define DEPTH>=850 & DEPTH<=1000; partname2.prt & partname3.prt should get suppress.
If i define DEPTH>=1001 & DEPTH<=1600; partname1.prt should get suppress.
It's easier to think "when should the part be shown" 🙂
IF DEPTH >= 850
IF DEPTH <= 1000
ADD PART partname2
INTERNAL COMPONENT ID 49
END ADD
ADD PART partname3
INTENAL COMPONENT ID 52
END ADD
ELSE
ADD PART partname1
INTERNAL COMPONENT ID 48
END ADD
END IF
END IF
Thanks for the rplys.
I tried the mentioned procedures unfortunately it dint worked.
Pease let me know the program to be to suppress part/s. I tried different ways but facing errors to do it through pro/program.
I uploaded 2 assemblies,(CHECK3 & CHECK4 ATTACHED) one assy has direct formula and 2nd assy has family table.
In both the cases i dint get to suppress part.
IF LOAD=="5P"
(i need SHT1.prt)
IF LOAD=="6P"
(i need SHT1.prt)
IF LOAD=="8P"
(i need SHT2.prt & SHT3.prt and SHT1.prt should suppress)
thank you.
Sadly I don't have Creo (still on Wildfire 4.0), but your PRO/PROGRAM should look like this
IF LOAD=="5P" | LOAD=="6P"
ADD PART SH1
...
END ADD
END IF
IF LOAD=="8P"
ADD PART SH2
...
END ADD
ADD PART SH3
...
END ADD
END IF
If your panels are all 250 wide, then divide the total length by 250 and this will give you the number of instances you need, assuming that the total width is in multiples of 250.
if you need a narrow width panel to fill in, total width is 1650, then you will have 6 full panels and you can manually add the last 150 wide panel.
Multiple ways to calculate and place the panels.
It depends on if your panels are all the same size or do you have different widths to factor in.
You could take the 1650 with 6 250 wide panels and a 150 fill in panel.
You could also take the 6 panels and then recalculate the panel width so you have 6 275 wide panels.
Hi @BenLoosli My panles should be of same width and as i stated earlier i stuck with increasing or decreasing the quantiy of panles. If i am having width 1000mm made of 4 panles of width 250 mm and if i change the width to 1600 then it should get chnge to 6 panles of eqvii spaced width.
It can be stated with range; "Width can be 300mm is minimum and 1600mm being max width."
If width is 300mm, number of panels equal to #1.
If width ranges from 400mm to 800mm, number of panles equal to #2
If width ranges from 800mm to 1200mm, number of panles equal to #4
If width ranges from 1200mm to 1600mm, number of panles equal to #6
Like this if i change the width, number of panles should get chnge.
Thank you,
How many different panels do you have?
I see these numbers: 250mm 300mm 375mm
Does the program need to calculate the optimum number of panels? (with the least amount of wasted space)
Any way, please don't use a zillion IF THEN ELSE statements...
WIDTH = 300
/***************************************************************
/* PANELS - 250mm
/***************************************************************
PANEL_250_COUNT = FLOOR(WIDTH/250)
PANEL_250_WASTE = WIDTH-PANEL_250_COUNT*250
/***************************************************************
/* PANELS - 300mm
/***************************************************************
PANEL_300_COUNT = FLOOR(WIDTH/300)
PANEL_300_WASTE = WIDTH-PANEL_300_COUNT*300
/***************************************************************
/* PANELS - 375mm
/***************************************************************
PANEL_375_COUNT = FLOOR(WIDTH/375)
PANEL_375_WASTE = WIDTH-PANEL_375_COUNT*375
With only 3 different panels widths, you could now compare the waste:
/***************************************************************
/* PATTERN
/***************************************************************
IF MIN(PANEL_250_WASTE,PANEL_300_WASTE) == PANEL_250_WASTE
/* PANEL 250 IS MORE EFFICIENT IN WASTE
/* NOW COMPARE 250 TO 375
IF MIN(PANEL_250_WASTE,PANEL_375_WASTE) == PANEL_250_WASTE
/* PANEL 250 IS MOST EFFICIENT
/* SET PATTERN PARAMETERS TO 250
ELSE
/* PANEL 375 IS MOST EFFICIENT
/* SET PATTERN PARAMETERS TO 375
ENDIF
ELSE
/* PANEL 300 IS MORE EFFICIENT IN WASTE
/* NOW COMPARE 300 TO 375
IF MIN(PANEL_300_WASTE,PANEL_375_WASTE) == PANEL_300_WASTE
/* PANEL 300 IS MOST EFFICIENT
/* SET PATTERN PARAMETERS TO 300
ELSE
/* PANEL 375 IS MOST EFFICIENT
/* SET PATTERN PARAMETERS TO 375
ENDIF
ENDIF