cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

tracking down a circular reference

AE_9609989
9-Granite

tracking down a circular reference

Hi,

I'm a relatively new user to creo and I'm building myself a moldbase as a practice exercise in assembly management.

 

I've noticed that I have 1 circular reference, but when I look in the reference viewer I see 7 circular paths found. I'm having some difficulty understanding how the slide lock subassembly placement is connected to the hardware that holds the clamp plate onto the rails.

 

I suspect it has something to do with how I'm defining the base extrusions of each part as they are created in the assembly context.  In using the default position in order to simplify the data sharing between components, I have been selecting a surface from an existing part to define the location of a later part that is being started. For example, the top and bottom rails touch the back of the B-plate, so the base extrusion of both the top and bottom rails uses an external reference to the back surface of the B-plate as the starting point for the extrusion.

 

Can anyone explain to me in easy to understand terms how I've formed the circular reference?  And why does creo say that there's only 1 circular reference when the reference viewer identifies 7 different paths?

 

Also, what's the difference between a broken circular path vs an unbroken circular path?  Each of the circular paths I've generated has a new symbol in the path definition, the double black arrows with a red bar struck through.  Is this why creo didn't immediately flag that I had a circular reference?  The alert only came up after I specifically opened the reference viewer and clicked on the "find circular references" button.

 

Thank you,

1 ACCEPTED SOLUTION

Accepted Solutions

@AE_9609989 

 

I have included an old article that I wrote when the Top Down Design Tools were newly introduced to Pro/E. It may be worth reading, it is not too long.

 

You have a lot to unpack here. I have not attempted to unravel the CRC references in your sample models specifically.

 

Without me understanding what your design intent is and how you want to manage it, I will keep things is general terms. If you want to discuss specific use cases with sample models then I am willing to address them as time permits.

 

Using default placement is my preferred approach to locating new components when possible. It is a good practice.

 

Regarding assembly features your assessment is correct with regard to the nature of assembly features (e.g. holes through multiple parts in an assembly). I suspect that some of your issues may be related to the fact that your data sharing paradigm has created assembly references within part models. The likely issue is the difference between a copy geometry and an external copy geometry. A copy geom can be created whereby the assembly is the conduit to pass the data between parts (avoid this when possible). The external copy geometry was developed to avoid the involvement of the assembly, directly  piping data from part to part directly. You should be able to externalize CG features that were created in assembly mode from part to part.

 

I have never successfully used shrinkwrap in a design that was released for production. I have never been able to get the geometric fidelity needed to be useful. Maybe it works on simple prismatic parts but not most of what I am creating. I am not a fan of it being used as a top down design tool in the context of my work. YMMV. 

 

As mentioned above if you want to break down specific examples of design intent that you are dealing with and how to get that directly from one part to another without an assembly ref then post the data. Break them down to the level of part A defines X and I want to reference X in part B as a child of part A. With a simplified problem statement you will probably get directly relevant feedback.

View solution in original post

25 REPLIES 25

Props for seeking help with this. If you do not master dealing with this your life and any one who uses your Creo models will be hell. 

A circular reference is caused by violating a parent child hierarchy with external references between parts. I will try to lay it out verbally. I am going to use the example of two parts modeled in part mode and ignore the assembly aspect for clarity.

 

A=parent model B=child model 

B has an external ref to A (e.g. an external copy geometry); at this stage your parent child paradigm is valid

Lets say you then create an external reference in model A that is dependent on some aspect of model B;  You no longer have a parent child paradigm and have created a circular reference.

 

When you introduce assembly features created in part models the level of complexity in managing external refs becomes onerous quickly. This is why the top down design tools were developed particularly the concept of external shared refs so the assembly is not involved in the regen of parts.

 

I was able to get the .crc file generated. I have enclosed it for reference. MODEL AE_2CAV_MOLDBASE.asm generates the error for circular refs.

 

Excerpt of loop 1 of 7 from the .crc file.

MODEL AE_2CAV_MOLDBASE :
 

  7 CIRCULAR REFERENCE LOOPS FOUND
 

   LOOP #  1

   Depth of loop is 7

Feature number 46 (PATTERN_6, id = 359) 
  in model AE_2CAV_MOLDBASE refers to:

Feature number 10 (HOLE, id = 473) 
  in model AE_2CAV_TOP_RAIL refers to:

Feature number 3 (PROTRUSION, id = 51) 
  in model AE_2CAV_TOP_RAIL must follow after:

Feature number 2 (EXTERN COPY GEOM, id = 40) 
  in model AE_2CAV_TOP_RAIL refers to:

Feature number 44 (PATTERN_3, id = 2058) 
  in model AE_2CAV_CLAMP_PLATE must follow after:

Feature number 32 (EXTERNAL SHRINKWRAP, id = 953) 
  in model AE_2CAV_CLAMP_PLATE refers to:

Feature number 46 (PATTERN_6, id = 359) 
  in model AE_2CAV_MOLDBASE - circle closed.

 

The GRV can be confusing. For this purpose I would use the .crc file text as a guide to eliminate each circular ref one at a time and use the GRV to investigate within the modeling environment that progress.

 

Since you are new to Creo I am going to suggest a couple of things.

1) You should avoid creating assembly features, unless that is truly the best way to capture design intent. I very rarely use assembly features.

2) Study the top down design guides from PTC and/or get a book dealing with this. The data sharing features are crucial to leveraging the power of Creo.

3) For mold design you should use absolute accuracy and match the value of the mold design to that of the design part when sharing data from the design part to the workpiece. In Creo 7 absolute accuracy is used by default  but in earlier releases the default is relative accuracy. Mismatched accuracy (even if absolute) will wreak havoc on regeneration with data sharing features.

 

I have included a sample of an intent map document that graphically documents at a high level external model dependencies. This is something I began using with the advent of the top down design tools in Pro/E at the project planning stage. In practice they are living documents. These are associated as metadata to designs in Windchill/PDM systems to serve as a high level reference document for external refs. If you set these up before actually designing in Creo it will help avoid creating circular references.

 

 

TomU
23-Emerald II
(To:tbraxton)

@tbraxton,

At the risk of confusing the original poster, I want to throw something else out there...

 

Creo is now classifying features that are not in its 'preferred regeneration order' as being circular references.  These are often listed in the .crc file as 'must follow after'.  These can occur with features that have no relationship to each other at all.  I went round and round with PTC about how 'preferred regeneration order' issues should not be called 'circular reference' but I got absolutely nowhere.

 

Here is a picture attempting to visually describe the problem.

TomU_0-1611359832828.jpeg

Take note of the text in yellow.  Swapping the order of features 1 and 2, or swapping the order of components B and C will cause a circular reference error to be triggered, even though there is no dependency between features 1 and 2, and no dependency between components B and C.

 

The documentation PTC has available on circular references is very limited and most of it is very old. The concept of unrelated features causing circular reference errors if they are not in some internally preferred regeneration order is not discussed anywhere (that I'm aware of.)

@TomU 

 

I have not observed the behavior you are describing but I am still using Creo 4 for production work so if this is new in Creo7 that is why. Your description reveals something that I would want to understand for sure. If you opened a call with PTC support to request documentation on this and they did not respond in a meaningful way that is not acceptable.

 

If it is new in Creo7 then it may be related to the implementation of multibody.

TomU
23-Emerald II
(To:tbraxton)

@tbraxton,

 

I noticed it in Creo 6, but based on the response I received from tech support they acted like it had been there all along.  I'm fairly certain it wasn't like this in earlier versions but I didn't go back and try to prove it.  Tech support said they would put a request in to the documentation group to improve the help documentation, but they said they have no control over what that group actually does, so there is no guarantee this will actually make it in.

AE_9609989
9-Granite
(To:TomU)

Good morning @TomU,

 

Now that's interesting.  I'd have initially guessed the PTC would be expecting features with large processing requirements like fillets or hardware to be the last locations in the history tree.  But a preferred regeneration order for references to different downstream parts seems to create pointless complexity in the regeneration cycle, and I'm with you, why insist on calling that a circular reference?  It's misleading at best.

 

Random question though about skeleton models.  How come I can't open assembly skeletons through the file open dialog?  I can open them directly via windchill, or I can open once I have the associated assembly open.  But skeleton models are treated as part files for the most part, yet I can't access them directly through the file open dialog?  Why is that?

Hey, good morning @tbraxton.

 

I'm pretty aware how important the data sharing features are in creo when working the top down design approach.  Not only is this a practice exercise for myself, but the finished tool is meant to be a technique showcase to our designers as well (The only method that seems to be employed locally for data sharing is the copy surface technique combined with the solidify cut feature. Complete with all the resulting chaos). this is why it's important that the finished tool be basically flawless.  The presence of something like a circular reference would be enough for my supervisors to dismiss my proposed design process changes outright.

 

let me clarify my background a little bit.  I'm 6 months into using creo, I do own books on design intent and top down design methods by David Martin and I spend a lot of time studying his youtube channel.  I'm not new to CAD, design, or engineering in general.  I understand the definition of a circular reference and I'm aware of the dangers of assembly context relations. I also know about the CRC file and I prefer the GRV because it seems to appeal to my brain better.  Although I agree with you that it can be confusing because there seems to be an unspoken symbolic language going on.  I'm going to try diagnosing the circular reference again though using your approach from the crc file and using the GRV to monitor progress instead of as a primary diagnostic tool. I also wanted to thank you for the basic new user tips, but that's all stuff that I've already figured out.

 

Part of the particular challenge at my company right now is that I'm the only one learning all these techniques, so I don't have a senior design engineer that I can directly ask when something odd happens.  I'm all on my own to figure it out.  I've done okay up until this point but when I encounter problems, there's nobody at work who can function as a sounding board.  That's why I started reaching out here and why I was asking for a simplified explanation since I'm stuck with discussing complex reference structures over text without the benefit of wild gesticulations in person.

 

So let's talk about your basic tip #1.  I'm in total agreement with you that I should be avoiding assembly features when at all possible, but I want to clarify what counts as an assembly feature.  When I think of assembly features I think of things like holes that punch through multiple components simultaneously, but I'm curious if my new part creation method also counts as an assembly feature.

 

Since I'm trying to use every data sharing technique in my example tool, I've been leaning on using the default new component placement in order to insure that things like copy geometries translate to the correct relative locations between parts without having to rely on specific coordinate systems. The downside to this is that the initial extrusion that will form a new part is difficult to locate.  I see a couple of options:

 

1.) I can measure from the assembly default coordinate system and make an offset plane to extrude from, while using my skeleton model to control the size reference of the part.

2.) I can shrink-wrap or copy a surface into my new part and then use that as the sketch plane for my new extrusion.

3.) with my new part active, I can open a sketch on a surface that I know is offset or coincidental with the sketch plane of my new part.

 

I know option #3 here creates an assembly context reference between my new part and the part that I'm building off of.  But is this what you're referring to when you say assembly feature?  Even if I don't use any other assembly reference in building my new part, have I just increased my chances of creating a circular reference by trying to quickly locate the starting sketch plane of my new part?  How could I protect against this if that's the case while still being confident that shared data is being positioned correctly in the local components without activating the assembly context option (which just reintroduces an assembly reference by another means)?

 

Okay, I've talked enough here for now.  I'm going to reexamine the assembly using the crc file and see if I can trace the circular reference better, and I'll review the intent map that you attached.

@AE_9609989 

 

I have included an old article that I wrote when the Top Down Design Tools were newly introduced to Pro/E. It may be worth reading, it is not too long.

 

You have a lot to unpack here. I have not attempted to unravel the CRC references in your sample models specifically.

 

Without me understanding what your design intent is and how you want to manage it, I will keep things is general terms. If you want to discuss specific use cases with sample models then I am willing to address them as time permits.

 

Using default placement is my preferred approach to locating new components when possible. It is a good practice.

 

Regarding assembly features your assessment is correct with regard to the nature of assembly features (e.g. holes through multiple parts in an assembly). I suspect that some of your issues may be related to the fact that your data sharing paradigm has created assembly references within part models. The likely issue is the difference between a copy geometry and an external copy geometry. A copy geom can be created whereby the assembly is the conduit to pass the data between parts (avoid this when possible). The external copy geometry was developed to avoid the involvement of the assembly, directly  piping data from part to part directly. You should be able to externalize CG features that were created in assembly mode from part to part.

 

I have never successfully used shrinkwrap in a design that was released for production. I have never been able to get the geometric fidelity needed to be useful. Maybe it works on simple prismatic parts but not most of what I am creating. I am not a fan of it being used as a top down design tool in the context of my work. YMMV. 

 

As mentioned above if you want to break down specific examples of design intent that you are dealing with and how to get that directly from one part to another without an assembly ref then post the data. Break them down to the level of part A defines X and I want to reference X in part B as a child of part A. With a simplified problem statement you will probably get directly relevant feedback.

View solution in original post

Hi @tbraxton,

 

Good call on the simplified models for specific questions.  I made a quick stripped down version to look at, time permitting.

 

Component A is a plate, default position, with the size controlled by the skeleton.  Component B is a smaller block, default position, with size controlled by the skeleton.  But I've selected the sketch plane to be the back surface of component A.  The design intent is that if the thickness of A is changed, B is always in contact with the back surface of A.  Component C is made in the same way that B is, starting from the back surface of component B.  

 

I have used copy geometries that have been externalized (also good call on externalizing geometry between parts without using the assembly context, what's that setting even good for?) for a hole location axis, with a threaded hole located in component B and a counterbore in component C.

 

My specific question is this.  In selecting the sketch planes for components B and C, have I introduced assembly references that may lead to circular references?  If so, how can I place component B so it always sits on the rear surface of A, and place component C so it always sits on the rear surface of component B when the part thicknesses are changed?

 

 

on a semi-related note. I've not been paying attention to the update controls on my copy geometries, so referenced surfaces are being updated as new features are being installed.  Is it good policy for me to turn off the automatic update when I copy a surface, if I know that a later hole feature will pass through this surface?  I've had surface sets that I selected using a seed and bound automatically collect more surfaces that I did not intend for once a later hole feature intersected the copied surface.

 

Thank you for the article, I'll read through it right now.

 

Edit:  Hot diggity dog!  that was the issue.  I had all my copy geometry features set to automatic update.  Any later hole patterns were updating the copied surface and causing the circular reference!  This explains an earlier problem I was struggling with too!

@AE_9609989 

 

In general I leave the update control set to automatic unless there is a reason to change it. If you do not want it in the regen sequence then change it otherwise leave it automatic so that design changes will propagate as intended. Be warned that if you set it to independent it is not reversible. The most frequent reason that I would not have one set to automatic is that the parent model is changing simultaneously with the child model. This happens when we have both models being worked on simultaneously by different users. This situation is beyond the scope of this discussion but it very powerful to work on designs in parallel rather than serially. Not many teams are capable of doing this in my experience as it requires advanced CAD discipline and knowledge of all users coupled with a mature development process.

 

The models posted below (Creo 7) are based on this problem statement. I am writing my understanding of your question here for clarity on the problem statement.

 

An assembly consisting of 3 parts A, B, & C (3 Plates stacked via contact)

The size of each component is defined in and controlled by a skeleton model

All parts are assembled by default in the assembly for stack of parts

If the thickness of A is changed, B is always in contact with the back surface of A

If the thickness of B is changed, C is always in contact with the back surface of B

If A moves then B and C maintain contact and move with A

 

I think the included models satisfy all of these requirements and do not create any circular references. The location, shape, and size of the 3 parts is defined in and controlled by the skeleton. This design intent is then propagated to each part via a copy geometry feature from the skeleton. Note that A can be moved along a single axis (shift DTM4) within the skeleton and B&C will track the shift.

 

This is not the only way to do it but is illustrative of the concept of a skeleton model driving assembly stack up. 

 

Aw dang, you're working on Creo 7 and PTC doesn't allow backwards compatibility between models just like Dassault, don't they?  We just got Creo 6 here, and I'm still a little bit salty that I missed out on multibody modeling by one release year.

 

You nailed it though.  in most cases you'd want a copy geometry feature to automatically update, but the sort of meandering design path that I'm following while I still work out how mold tools go together can cause some situations where parent and child models are being simultaneously updated. That's what was causing my current issue.

 

Something similar happened on a previous tool.  I wanted to reference the runner block surfaces in order to create a runner representation, so I used a seed and bound selection to insure that any changes to the runner block would also update the runner part.  but later on when I cut and hole through the runner block for an ejection pin, this caused the surface collection to update and collect all the newly unbounded surfaces.  Either breaking the dependency or setting to manual update would have prevented that new surface collection from starting by removing it from the regen cycle.  Having such precise control over the regen cycle in general is pretty new and interesting for me coming into creo from solidworks.

I created it in 7 assuming you were on 7. I am still working in 4 for production work so when I get time I will post a Creo 4 version of the example.

 

Most of what I design is made with a mold of some type so I am familiar with leveraging Creo in that environment. I am not creating mold designs but work closely with the mold design teams some of which use Creo mold extension. You are on the right track thinking about how to leverage the CAD tool to fit your workflow. The biggest bang for the buck will come from a standardized mold component library to support re-use of designs.

 

With regard to runner systems and gating I would address that in the design part model. I include runner and gate geometry in the design model that is referenced by the workpiece within Pro/Mold. This will drive the geometry cut out from the workpieces. The runner/gate is always built such that it is easily suppressed without causing any regen problems in the design part. Take a look at intent reference selection and use as well as the datum reference creation functionality. These items can make your references less prone to failure.

 

If you find that you reuse runners and or gates then consider making UDF library reference designs for them so they can literally be pasted into any new model and swapped out when necessary. You should be able to define the intent references for the gate/runner geometry inside the UDFs leveraging the re-use further.

 

Also read up on Notebooks (.lay files) which can be very powerful for controlling designs like mold stack ups. Notebooks don't get much love from users and have not evolved in over 25 years but they are still useful and the best design intent capture tool in some cases. They enable the use of global parameters and relations that can be declared and undeclared to downstream design models.

No need to rush, I'm making progress again on my practice design.

 

It's an interesting thing here. we do have an in house set of library of mold components that we re-use between designs, but the family table parts include a quilt feature that is used to solidify cut the clearance hole around the part.  in that way, there's almost a pseudo-reference tagging that's happening between part instances when you change out the part instance in the assembly.  It's like an self-made version of what PTC is calling the intelli-fastener system.  The problem is that every hole that is cut using this solidify cut generates a top level external reference, and the models hit a sort of critical mass where it's impossible to predict how design changes will affect the overall structure.

 

Right now I'm more interested in showing how using the data sharing tools can help creo keep track of features in the background, leading to faster release drawings that can leverage advanced tools like the hole table.  But it's a slower setup process and requires a higher level of designer understanding and discipline in exchange.

 

Right now we sort of have two factions on pro/mold.  There's a few people who like it, and then we have others who are manually making the split surface in order to construct the part cavity.  I haven't gotten to pro/mold tools as part of my research, but your design flow is similar to some of our guys who also make the runner geometry first. I'll have to reconsider how I approach that particular facet of my sample tool.

 

One of our major problems is that we receive updated customer geometry constantly and often late in the game.  Since our tools are referenced directly to the customer model, any change causes a lot of downstream chaos because of the directly broken references.  I've been hopeful that I can use transfer assemblies to manage part revisions in a way and then use reference tagging to minimize the effect of swapping out new customer geometry at the core of the tool.

 

I have scratched the surface of intent references, and only recently stumbled across the intent object tool in the datums drop down.  I haven't yet worked out how to best leverage it into the design, but it is on my radar.  Likewise with notebook files.  I'm not sure why they don't get much love either.  Someone here used the creoson server extension to write a program that would let you change parameters across multiple files, but it seems better to store them in a centralized notebook location declared to the assembly.  Is it possible to have a single assembly declared to more than one notebook at a time?  Can you declare only a single parameter from a notebook to an assembly or do you always take all the parameters in a notebook?  Mold stackup sounds like you're referring to tolerance stacking?  How can I leverage a notebook to help with that?

TomU
23-Emerald II
(To:AE_9609989)


@AE_9609989 wrote:

Likewise with notebook files.  I'm not sure why they don't get much love either.


Not sure if PTC has made any changes recently, but we gave up using notebook (layout) files because they don't play nice with Windchill.  Declaring a notebooks copies *ALL* the parameters into the downstream models and this causes problems with any designated parameters that exist in those models.  Notebooks would be so much more powerful and useful if we could choose which parameters get transferred to each of the downstream parts.  The act of declaring a notebook should include a dialog to select which parameters will be copied in.

AE_9609989
9-Granite
(To:TomU)

@TomU 

 

selectable functionality would make notebooks a lot more powerful for sure.  It sounds like it's all or nothing, either all your parameters are driven inside the model, or all the parameters need to be routed through the notebook.

 

I've read similar complaints about skeleton models that don't play nicely with windchill when making save as copies of assemblies.

pausob
16-Pearl
(To:TomU)

Hi, anyone have any experience with the Layout application (CEM files) for top-down-design?

Does PTC even still sell this solution?

Hi @pausob,

 

I think you're  talking about the standalone 2D creo layout program, yeah?

I don't know much about it or how it can help drive design intent, but I do know that I have it alongside my seat of creo parametric 6.  So I'm guessing that PTC does still sell this product.

Yeah, that's the one.  I take it you don't use it?  Sounds like no one does.

Not that I don't use it.  I just haven't had time to figure out what it does or why it might be useful to me.

Creo is packed to the brim with dense topics to study.

Creo 4 example where all copy geoms were created in the assembly but are piped through the skeleton. There should not be any circular refs. Hide the copy geom features in parts and skeleton in assembly if they are obscuring the solid models.

 

The skeleton controls the location and size of the blocks and the hole center location.

 

Again this is just an example of how to use the skeleton in the context of assembly mode. There may be better methods to capture what you need.

@tbraxton , got your sample assembly and I studied it for a bit.  Lots of annotation features that I haven't gotten the chance to study more fully. But I suspect those are going to become useful for holes with sketched profiles. I think I can include custom annotations inside of my udf feature library too which should help things later on.

 

I'm interested in how you did a quilt selection inside the copy geometries.  On some of the imported casting geometry, I've only been able to select individual surfaces when creating published geometry features. How did you specify that the selected surfaces be treated as quilts, even though the feature was a solid extrusion?

 

Also, on an semi-unrelated note.  I've had some decent success recreating core and ejector pins using copy geometry features as references, but something odd happened.  I have a pin that will have a very small relative tip geometry (say approximately 0.010" in scale) versus a much larger plate surface that will be used as a reference for the pin length.  Because of the large discrepancy in relative size, including the large reference surface in a copy geometry feature prevents the feature from rendering.  I figure that it's a part accuracy issue, or I need to reference a datum plane instead of a planar surface.  Is there something in the configuration options though that will accommodate two references that have large differences in scale?

TomU
23-Emerald II
(To:AE_9609989)

If you're using skeletons and copy geometry features, you really should switch *ALL* of your models to using the same absolute accuracy.  We have our start parts all configured this way.  Even PTC changed their long time recommendations and starting with Creo 7 now default to absolute accuracy.

AE_9609989
9-Granite
(To:TomU)

total agreement, our start parts are configured the same way to use a consistent absolute accuracy.

The weird thing is that sometimes our parts have geometry that is very small compared to other features.  I can have a die block that is 12 inches square, but be making venting cuts that are 0.001".  Creo seems to not like having both of these scales happening at the same time.  I get a warning to boost the accuracy, but that means I need to change all the part accuracies, and in keeping with the casting geometry itself, which seems to get crazy buggy when being imported.  Sometimes just messing with the accuracy and switching between absolute/relative, or using different accuracies for big and small parts seems to keep creo working, even if it isn't the best practice.

All of those annotation features are for use as markers (comment lines) in the model tree. I have those in my start part, they are empty 3D notes and exist only for the purpose of marking the model tree with comments.

 

The skeleton in my example only contains surface geometry no solids. In general I would not use any solid geometry in a skeleton only curves and surfs. In the derivative parts I created the solid block by selecting the quilt (set selection filter to quilt) in the copy geom solidifying the blocks.

 

On your last rendering question, set the environment to shade small surfaces and see if that resolves the issue. If not I may not understand the issue, if you post the part and pic of the issue we can have a look.

@AE_9609989 

 

I forgot to mention something. Take note of how the solid geometry was created in components A4 & B4 with an external copy geom passed through the skeleton. C4 has a solidify feature created in assembly mode referencing the quilt of the skeleton block.

 

I would generally prefer the external cg approach as you should not have to have the assembly in session to modify a part. This becomes a serious performance issue with large assemblies to retrieve and regenerate the assembly to change a part feature.

StephenWilliams
22-Sapphire III
(To:tbraxton)

I haven't seen a "Pro/Files" magazine in years. Used to save every one of them along with the "Pro/E The Magazine".

Over the years and moves from house to house/job to job, they've all been discarded!

Announcements