<!DOCTYPE html
  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!--
Copyright (c) 2006 UGS Corp.

All Rights Reserved.

This software and related documentation are proprietary to UGS Corp.
-->
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Modular Assemblies</title>
      <script language="javaScript">
        abridged="false";
        displayConditions=new Array();
      </script>
      <link type="text/css" href="../css/main_styles.css" rel="stylesheet">
   </head>
   <body class="bodydocs" onload="top.pageLoader()" bgcolor="#FFFFFF">
      <div class="title_topic4" id="xps10_pagetitle">Modular Assemblies</div>
      <hr noshade="true">
      <p class="para_topic"> A Modular Assembly allows you to create and manage variations on a generic part with relative ease. This section uses an example to illustrate the techniques for using an Assembly Range, the Modular Update method, and a table lookup for variations on a theme in order to manage variations on an assembly model.</p>
      <p align="center"><img align="bottom" src="graphics/tls_6ssheet1fr03.gif"></p>
      <p class="para_topic"> The basic assembly used in this section is shown in the above figure. This particular assembly is a simplified sanding disk, where you have separate components for the mandril, a washer, the sanding disk, and a screw to hold the assembly together.</p>
      <p class="para_topic"> This sanding disk assembly is designed to have several possible variations, which are summarized below.</p>
      <ul>
         <li>
            <p class="para_item"> Sanding disk diameters of 2 inches or 4 inches with a mandril for a Dremel MotoTool.</p>
         </li>
         <li>
            <p class="para_item"> Sanding disk diameters of 4 inches, 6 inches, or 9 inches with a mandril to fit a normal drill.</p>
         </li>
      </ul>
      <p class="para_topic"> Other components are also affected as the disk size or mandril type is changed. Given the set of options listed above you have 5 possible variations to the generic assembly.</p>
      <div class="title_division"> Setup</div>
      <p class="para_division"> The goal in this example is to create a spreadsheet at the assembly level that captures the 5 possible variations in the assembly, and then uses the Assembly Range and Modular Update features of the spreadsheet to drive the creation of each variation. At the component level, the table lookup method for variations on a theme is used to drive the update of each component of the assembly.</p>
      <p class="para_division"> The setup for this example includes turning ON Options&rarr;Update Methods&rarr;Modular Update Method, along with Options&rarr;NX Preferences&rarr;Vertical Orientation, Auto Fit on Update, and Use Fixed Update Range. </p>
      <div class="title_division"> The Top Assembly Spreadsheet</div>
      <p class="para_division"> The spreadsheet for the top component of the assembly is used to capture the Assembly Range and the basic parameters for variations of the component parts. The spreadsheet is set up in a manner similar to what is described in  <em>Another Way to Do Variations on a Theme</em>.
      </p>
      <p class="para_division"> The top assembly spreadsheet for this example is shown below.</p>
      <p align="center"><img align="bottom" src="graphics/tls_6ssheet1fr24.gif"></p>
      <p class="para_division"> Modular Update Sample Spreadsheet</p>
      <p class="para_division"> There are three basic areas in the main spreadsheet that specify the modular update:</p>
      <ul>
         <li>
            <p class="para_item"> The Assembly Range (cells A5..B8),</p>
         </li>
         <li>
            <p class="para_item"> The selected variation (cell E4),</p>
         </li>
         <li>
            <p class="para_item"> The lookup table for applicable values for each variation (cells A12..E16).</p>
         </li>
      </ul>
      <p class="para_division"> The section on the spreadsheet for the assembly range contains a list of the component parts that need to be updated, and also the value that should be sent to each component in order to control the update.</p>
      <p align="center"><img align="bottom" src="graphics/tls_6ssheet1fr23.gif"></p>
      <p class="para_division"> Assembly Range</p>
      <p class="para_division"> The brown section is the actual Assembly Range. You would set that by dragging a rectangle around the brown section of cells and using the Edit&rarr;Define Assy Rng option. The vertical order of the components in the list is the order in which they will be updated in the assembly. First to update will be the mandril, then the washer and so on.</p>
      <div class="title_division"> The Update Process</div>
      <p class="para_division"> To use this spreadsheet, you would first enter the part number you want to build into cell E4. This is the only cell you need to manually change on the entire spreadsheet. When that value is entered, the version tags in the range B5..B8 will update with values extracted from the Assembly Variations Table. At this point, you can select Tools&rarr;Update NX Part from the menu bar in order to start an update and build the part.</p>
      <p class="para_division"> Once Tools&rarr;Update NX Part has been started, the assembly update will consist of the following steps. These steps are automatic and defined by the mechanism used by the Modular Update method with an Assembly Range:</p>
      <ol type="1" start="1">
         <li>
            <p class="para_item"> Change the work part to mandril.prt</p>
         </li>
         <li>
            <p class="para_item"> Set the value of the attribute MODULE_REQ to the string, &quot;Dremel&quot;.</p>
         </li>
         <li>
            <p class="para_item"> Load the modeling spreadsheet for mandril.prt.</p>
         </li>
         <li>
            <p class="para_item"> Update mandril.prt from the modeling spreadsheet.</p>
         </li>
         <li>
            <p class="para_item"> Change the work part to be washer.prt.</p>
         </li>
         <li>
            <p class="para_item"> Set the value of the attribute MODULE_REQ to be the string, &quot;Small&quot;.</p>
         </li>
         <li>
            <p class="para_item"> Load the modeling spreadsheet for washer.prt.</p>
         </li>
         <li>
            <p class="para_item"> Update washer.prt from the modeling spreadsheet.</p>
         </li>
         <li>
            <p class="para_item"> Continue the basic steps for the sanding_disk and the screw.</p>
         </li>
      </ol>
      <p class="para_division"> When this process is complete, the spreadsheets will AutoFit the updated part, and you will have the requested variation.</p>
      <div class="title_division"> A Component Spreadsheet</div>
      <p class="para_division"> Now that we have looked at what is in the top-level spreadsheet, let us take a look at one of the components. The basic spreadsheet for the mandril is shown below, and is typical of all of the component spreadsheets.</p>
      <p align="center"><img align="bottom" src="graphics/tls_6ssheet1fr22.gif"></p>
      <p class="para_division"> Mandril Component Spreadsheet</p>
      <p class="para_division"> The component spreadsheet is very similar to the main assembly spreadsheet in that it contains 3 areas of interest, and is designed to use a lookup table for values. The pink area in the upper left portion of the spreadsheet contains the part expressions and values for those expressions. The section at the bottom of the spreadsheet contains parameter information detailing each possible variation. The right side of the spreadsheet contains the selector for the variation to be built.</p>
      <p class="para_division"> The selector in cell E4 displays the value of the part attribute MODULE_REQ, using the formula:</p>
      <p class="para_division"> =@UGATTR(&quot;PART&quot;,&quot;MODULE_REQ&quot;,3)</p>
      <p class="para_division"> As discussed earlier, MODULE_REQ is the default name for the part attribute.</p>
      <p class="para_division"> If you look at the expressions and values on the mandril spreadsheet you will see that some of the cells (B4, B7, B9 and B10) contain lookup table entries that pull values out of the Design Variation Table. Depending on the value of cell E4, either Dremel or Normal, the values for those cells will change.</p>
      <p class="para_division"> The spreadsheet for the mandril is a nicely self-contained set of data that captures all of the possible variations of the mandril based on a value stored as a part attribute. Any parent of this part can now create a specific version of the part by setting the MODULE_REQ attribute and updating the part using the spreadsheet. The same can be said for all of the other components in the assembly. The spreadsheets for each component use the MODULE_REQ part attribute to look up expression values in order to produce the correct assembly part.</p>
      <div class="title_division"> Top Level Assembly Range</div>
      <p class="para_division"> This example worked through the basic process for using the Modular Update method and Assembly Ranges. You are not limited, however, to using the Assembly Range at the top level of an assembly. Subassemblies can also use the same techniques in a recursive fashion. The sanding disk assembly could be incorporated into a &quot;Bench Sander&quot; design, and allow the &quot;Bench Sander&quot; to drive the selected variation, thus extending the object oriented concept one step further.</p>
      <p class="para_division"> In summary, by combining the Modular Update method with Assembly Ranges, and using the table method for variations, it's possible to create &quot;object oriented&quot; components. These components know how to build variations of themselves with the assemblies ability to communicate the required version to each component during the update.  </p>
   </body>
</html>