Showing results for 
Search instead for 
Do you mean 
Reply
Solved! Go to solution

NX10-Using Expressions in Assemblies

I was wondering if anyone had any detailed examples that they could send me for my following question.

 

For example:

When designing a mould base I create each plate in separate files (Top Clamp Plate, Cavity Plate, Core Plate etc). Then I assemble them together in an assembly file. 

 

I know I can use WAVE Geometrey Linker to link holes and certain things together (Screw hole patterns, dowel pins etc). Say if I want to change the Length and Width of all the plates I have to go into each file and do it manually.

 

Is there a way I can create Expressions in the assembly so say if I change the Length it will do it to each separate plate? I know I can use Excel to do this but im not sure how. 

 

I would like to use this to change the length, width, and height of each plate. For example the bolt hole and tubular dowels sizes and positions as well.

 

If anyone can email me an Excel file with examples and detailed instructions on how to set it up in my own file that would be amazing and I would be hugly greatful for it.

33 REPLIES

Re: NX10-Using Expressions in Assemblies

Note there are 2 ways to do this:

A) Assembly sets component expressions

B) Components reference assembly expressions

 

Example of A

In assembly file "A", set expressions

Assy_Length = 10

Assy_Width = 5

Assy_Height = 2

Assembly has components C1, C2, C3 (which have expressions Comp_Length, Comp_Width, Comp_Height, and the Comp* expressions are used to desing the component)

In the assembly file, you used to be able to (* - see below) set the component expressions from the assmembly:

C1::Comp_Length = Assy_Length

C2::Comp_Length = Assy_Length

C3::Comp_Length = Assy_Length

C1::Comp_Width = Assy_Width

C2::Comp_Width = Assy_Width

C3::Comp_Width = Assy_Width

etc.

 

Example of B

In each of the components, use the assembly expression

e.g. in C1 you would have expressions:

Comp_Length = A::Assy_Length

Comp_Width = A::Assy_Width

Comp_Height = A::Assy_Height

 

And in component C2 you would have expressions:

Comp_Length = A::Assy_Length

Comp_Width = A::Assy_Width

Comp_Height = A::Assy_Height

 

etc.

 

Each method has plusses and minuses.

 

* and now for the kicker...

Read the other thread about IPEs, as all this is obfuscated in NX10.  I'm not sure if it can be done using spreadsheets.  I forget if Taylor said that defining IPEs like I show would work, of if you would have to interactively define each IPE individually so the "mangled" name gets correctly generated in the backgroud.

 

Ken

 

Ken Akerboom Sr CAx Systems Engr, Moog, Inc.
Production: NX10.0.3.5 MP5 + patch/TC11.2
I'd rather be steemed than diseaseled


Re: NX10-Using Expressions in Assemblies

Thanks for the help. Ill take a look at it and try it out when I get a chance.

I appreciate it!

Re: NX10-Using Expressions in Assemblies

Ken --

 

Thanks for your answer here.  And yes, I'd like to follow up.  :-)

 

I'm going to highly recommend the second method, with Interpart Expressions "pulling" values, rather than trying to use the "Push" method, which we really don't recommend any more.

There are great tools these days for reparenting interpart expressions in useful ways, between the Edit Multiple Interpart Expressions command, the General Relinker, and Product Interfaces.  We also have a (relatively) new tool for creating multiple new IPEs in one shot, including some automated naming rules.  

 

Again, to be very clear, the "pull" style of IPEs is definitely going ot be better-supported going forward.

 

So for instance, in your Example B above, a user in NX 8.5 or NX 9 or NX 10 might:

 

1. Go into the Assembly (parent) and create Assy_Length, Assy_Width, and Assy_Height.

 

2. Go into the Component (child) and in one operation, create IPEs to "pull" all three of those three values down (using the Create Multiple Interpart Expressions command), including automatically reusing the original expression name if desired, potentially with a suffix to help identify the new expressions as IPEs:

 

 

Or if you prefer, you could use a different naming rule (a "Replace") and get exactly the scheme you were after above:

 

 

And the result (in one operation) is pretty darn clean:

 

 

And so "mangled" is not the word I'd use to describe the new tools.  ;-)   We're actually trying to do some pretty useful stuff for you here, that should help a lot with consistency and the speed of creating and editing and updating these relationships.

 

Does that help a bit?  :-)

 

Taylor Anderson
NX Product Manager, Knowledge Reuse and NX Design
Tel: +1 (602) 441-0683
taylor.anderson@siemens.com

Re: NX10-Using Expressions in Assemblies

mgd-genuine --

 

Regarding the Excel method you mentioned, I can think of two ways this might work.

 

1. Our OOTB Mold Wizard product contains a lot of automation for creating and maintaining relationships through complex commercial mold bases, and much of this uses some configuration spreadsheets that are pretty slick.  Might that be what you've heard about?

 

2. If you're "rolling your own" mold base assembly here, you could certainly create expressions anywhere in your assembly that refer to an external Excel spreadsheet for their value.  Inside the Expressions dialog, you can create an expression formula that looks something like this:

 

ug_cell_read( "D:\my_mold_base_params.xlsx", "E4" )

...which will reach out to the Excel spreadsheet at D:\my_mold_base_params.xlsx (or wherever you specify) and pull the value of cell E4 (or again, whatever you specify) into your expression. 

 

Generally when I do things like this -- particularly if I have a lot of these, I'll create one String expression containing the file path and a second String expression containing the filename, and then combine them in the call above like this:

ug_cell_read( excel_path + excel_filename, "E4" )

...just to make it very easy to go in and change either the filename or the path or both in one central location per part.

 

And of course, you could easily combine this with the Interpart Expressions method that Ken describes, having the parent expressions in the top-level assembly reference Excel, and letting the parameter values cascade down your assembly using Interpart Expressions.

 

Lots of options...  Most of them good.  :-)

 

Does that help?

 

 

Taylor Anderson
NX Product Manager, Knowledge Reuse and NX Design
Tel: +1 (602) 441-0683
taylor.anderson@siemens.com

Re: NX10-Using Expressions in Assemblies

I know the Mould Wizard has lots of tools in it. I do use that to create parting lines but haven't had a chance to get into full detail on how to use everything. 
I am trying to create a standard mould base that I can quickly modify overall sizes and screw hole positions etc. I'm doing this to help save time at the beginning of a new mould design.

I kind of want to make it custom to how I do things.

 

I did play around with the pulling expressions option and it works great, I used the Top Clamp Plate as my main but I will be changing that so the Assembly file will have all my expressions. 

 

Again I appreciate all the help and advice.

Re: NX10-Using Expressions in Assemblies

Sounds great.  Thanks!

Taylor Anderson
NX Product Manager, Knowledge Reuse and NX Design
Tel: +1 (602) 441-0683
taylor.anderson@siemens.com

Re: NX10-Using Expressions in Assemblies

Quick Question about the Wave Geometry Linker

 

Im using this in my assembly to link holes together. I keep getting the following error message and ive tried re-arrange things in my Part Navigator but it doesnt seem to help

 

"

The following circular update was detected:

SPRUE PULLER(24) in EJECTOR_PLATE.prt depends on Linked Point(23) in EJECTOR_PLATE.prt
Linked Point(23) in EJECTOR_PLATE.prt depends on GUIDE PIN(19) in CORE_B_PLATE.prt
GUIDE PIN(19) in CORE_B_PLATE.prt depends on Linked Point(13) in CORE_B_PLATE.prt
Linked Point(13) in CORE_B_PLATE.prt depends on SPRUE PULLER(24) in EJECTOR_PLATE.prt
SPRUE PULLER(24) in EJECTOR_PLATE.prt depends on SPRUE PULLER(24) in EJECTOR_PLATE.prt"

Re: NX10-Using Expressions in Assemblies

You have to be very careful when getting into things like what you are doing.

Try to make sure that all information "flows" one way. 

E.g. put a bunch of points in the assembly file indicating where the ejector pins go.

Then ALL the components reference those points in the assembly file.

 

Don't put the ejector pins in the "part a", with "part b" referencing those points.  Then put something else in "part b", with "part a" referencing that info.  You build a couple dependant features on them and "boom" - you've got a circular update error!

 

Sometimes this requires a bit of thought to work out.

Ken Akerboom Sr CAx Systems Engr, Moog, Inc.
Production: NX10.0.3.5 MP5 + patch/TC11.2
I'd rather be steemed than diseaseled


Re: NX10-Using Expressions in Assemblies

Yeah, Ken is spot on here.

 

While lateral linking is certainly possible, you need to be super-careful about your strategy here.  The easiest way to avoid trouble is to choose a directional strategy and then religiously stick to it.  

 

  • Always pulling links down from higher in the assembly is one clean strategy that will avoid circularity.
  • Always pulling links from ONE assembly "sibling" out into the other siblings is another.
  • Using the full "WAVE Control Structure" strategy with bottom-up "linked parts" is another [somewhat involved] one.

But always linking top-down (the first of the three above) is the easiest to keep track of, and is very, very robust.

 

At any rate, take the time to plan out your interpart linking scheme (for WAVE and IPE links) and draw yourself a little diagram. All of the arrows should be flowing in one direction, and if you see loops forming, then change your strategy. :-) Hope that helps a bit.

Taylor Anderson
NX Product Manager, Knowledge Reuse and NX Design
Tel: +1 (602) 441-0683
taylor.anderson@siemens.com