Anda di halaman 1dari 521

QUEST Tutorials

Copyright Information

This document contains proprietary information of DELMIA Corporation


and is protected by Federal copyright law. The copyright in this document
is owned by DELMIA Corporation, Troy, Michigan, USA.

Any user of DELMIA Corporation software is authorized to view and


print this document subject to the following conditions:

1. The document may be used for information purposes only by the user.

2. Any print made of this document, or portion thereof, must include this
copyright notice.

3. The information may not be disclosed to third parties or copied or


duplicated in any form, in whole or in part, without prior written consent
of DELMIA Corporation.

4. The information in this document is subject to change without notice.

Any product, process, or technology described or exhibited in the


document may be subject to other intellectual property rights reserved by
DELMIA Corporation and are not licensed hereunder.

-1-
DELMIA Corporation
5500 New King Street
Troy, MI 48098-2615
(248) 267-9696

Copyright 1985-2002 by DELMIA Corporation

IGRIP , Virtual NC , ENVISION , UltraArc , UltraGRIP , UltraSpot ,


UltraPaint and QUEST are registered trademarks of DELMIA
Corporation.

Netscape and Netscape Navigator are worldwide trademarks of


Netscape Communications Corporation or its subsidiaries, registered in
the United States by , and in numerous other countries worldwide.

Microsoft, Windows, and Windows NT are either trademarks or registered


trademarks of Microsoft Corporation in the United States and/or other
countries. NT is a trademark of Northern Telecom Limited. UNIX is a
registered trademark in the United States and other countries, licensed
exclusively through X/Open Company, Ltd.

-2-
CONVENTIONS USED IN THIS
MANUAL

This chapter provides details about how the tutorial instructions are
presented. Knowing these details will enable the new user to easily move
through the tutorials to learn how to use the QUEST software.

Tutorial Sequence
The organization and sequence of the tutorials continuously builds on
previous information or tutorials. Because of this stepping stone approach,
it is strongly recommended that the new user work from the beginning to
the end of the Tutorials Manual to gain a complete, basic, understanding
of how to use QUEST. Each tutorial is a complete entity and can, if
desired, be completed without working on any previous tutorial.

Some concepts are presented in a series of two or more tutorials. For


instance, AGV modelling is provided in incremental blocks to allow the
user to build up their knowledge and abilities in this particular function.
Basic Constructs and Labor functions are also provided in this manner.

For obvious reasons, the steps within each tutorial are provided in the best
sequence to complete a task, with several tasks required to complete an
entire modelling experiment. It is expected that the user can return to these
separate tasks, as needed, to complete their own modelling requirements.
There will be NOTES throughout the tutorials to advise the user of
particular areas of concern, helpful hints, or to explain the reason a certain
action should be taken.

Occasionally steps may appear to be out of order but there is justification


for the deviation from the apparent because of inherent interdependencies
in the simulation environment.

Highlighting
Throughout the QUEST manuals, information that the user must choose or
enter is shown as bold text. Depending on the particular manual, the font
style could also be different than that of surrounding text.

-3-
The chapter titled QUEST User Interface will explain what buttons, menu
context, title bar, dialog boxes, etc., are and how to move around in them.
The instructions here are provided so that the user will be familiar with
how the tutorials present the information about these tools.

Button Selection

Within the QUEST manuals, when the user is to click on a button or menu
context, the text will appear like this:

"Select Tools | Measure | Units."


The three "buttons" that the user needs to click on, in sequence, are each shown in
bold typeface, with a vertical line (pipe symbol) between each.
"To create an AGV controller select Model | MHS | Controller | AGV."
In this case, the three "buttons" are again shown in bold typeface and in sequence;
however, the additional Controller button is actually a title bar above the AGV
button and is not shown in a bold typeface because the user will not click on it. It
is used simply to further identify which AGV button should be selected.
"Select the IAT button on the Source dialog box."
This example shows a single button selection to be made by the user.
In addition, the term "select" is applied when a user will be clicking on a button or
menu context. If a particular mouse button has to be used, the instructions will
begin with the words "With the RMB select ...." or "Using the MMB select ...."
because each mouse button can invoke a different set of functions. (RMB = Right
Mouse Button, MMB = Middle Mouse Button, and obviously, LMB = Left Mouse
Button.) If no specific mouse button is specified, use the LMB.

Menu Choices

Dialog boxes can require several different methods of user input. In the
tutorials, the user may be instructed to perform several different actions.
Some examples are:

"Choose Constant from the Distribution display list."


The user must highlight the value shown in bold text, in this case "Constant".
"When the Constant dialog box appears, enter 15 for the Value."
In this case, the user will type in the number 15.
"Change Render to Flat."
This example seems very vague but when looking at the dialog box, the user will
see a field name of Render with a field value box that has a down-arrow in it. The
down-arrow indicates that there are several options available for the particular
field that can be scrolled through to make a choice.
Most importantly, in the majority of cases, the user will be instructed to "choose,"
"change," or "enter" something.

-4-
Clicking on "Stuff"

When it is necessary for the user to click on an element (machine,


conveyor, buffer, sink, source, etc.), in the 3D or 2D windows, the term
used in the tutorials will be "pick". This term should alert the user to the
fact that they will be making the selection of an element or location in the
specified work area rather than clicking on a button, menu, or dialog box.

Illustrations
The illustrations presented in the online docs may have different colors
than the models created for the tutorials. Therefore, what the user may
have in their QUEST window may be vary from what appears in the
online docs version.

File Names and Directories


File names and directories will appear in italics.

Example:
The file name 2AGV is located in the
../QUESTlib/GIFTS/MODELS/ directory.

-5-
CHAPTER 1
INTRODUCTION

The QUEST Tutorials Manual is a collection of tutorials which cover the


main areas of modelling in QUEST. The approach taken in this manual is
to provide detailed instructions for hands-on activities which will produce
running QUEST models. The objective of the manual is to provide the
user with an understanding of how the various different types of models
are built and run with QUEST.

New Users
It is strongly recommended that new users review the following chapters
before starting the tutorials:

Conventions Used in this Manual


Chapter 1, Introduction (this chapter)

This describes the manual and its use.


Chapter 2, The QUESTQUEST Express User Interface.

The QUESTQUEST Express interface is different depending upon the operating


system on which it is run. The tutorials are written for a Windows interface (NT
4.0). In fact, any differences are quite small. Chapter 2 explains how the interface
works and clarifies the differences between the UNIX-style of QUESTQUEST
Express interface and the Windows-style of QUESTQUEST Express interface.
Some topics in Chapter 2 are identified as intermediate and even advanced topics,
and are not required in order to complete the tutorials.
Chapter 5, Create a Data Library.

QUEST provides a flexible mechanism for storing the components of a model for
retrieval and for shared use by other models. This mechanism is used in Chapter 5
in order to create a data library which is used in the tutorials in order to store
model components.

NOTE: The manual QUEST Configuration Files Guide provides more detailed
information on this topic, however this level of detail is not required to complete the
tutorials.

-6-
QUEST Tutorial Instructions
Earlier tutorial chapters provide exhaustively detailed instructions,
whereas the later chapters will provide less details for topics that have
previously been covered. Therefore, although it is not absolutely necessary
to work through the manual in chapter order, it is recommended.

Note in particular, the chapters on AGVs and chapters on Labor, should be


performed in order.

Completed QUEST Tutorial Models


Completed tutorial models have been provided in the directory
..\QUESTlib\MODELS\USRMNL.

QUEST Documentation
The QUEST documentation set consists of the following manuals:

QUEST Tutorial Manual


QUEST Batch Control Language (BCL) Manual
QUEST Simulation Control Language (SCL) Manual
QUEST Configuration Files Guide
QUEST Installation Guides
QUEST Simulation Control Language - Quick Reference
QUEST Batch Control Language - Quick Reference

With the exception of the Installation Guide, these manuals are all provided on-
line. In addition, the QUEST Tutorial Manual is provided in a paper edition for all
new user purchases. Paper copies of any or all of the manuals can be purchased
separately. Please call QUEST customer support.
QUEST User Manual

The User Manual is provided in paper copy only.

CHAPTER 2
THE QUEST USER INTERFACE

-7-
2.1 Introduction

This chapter introduces the graphical user interface (GUI) that QUEST
provides. The objective of the chapter is to provide a source of information
concerning the use of the GUI. This information includes and identifies
basic, intermediate, and advanced topics. Any material not specifically
marked should be considered basic and should be read by all first time
users. Intermediate and advanced topics are left to the reader's discretion.

Because the GUI differences between the PC and UNIX platforms are
relatively small, only one set of tutorials is provided for both PC and
UNIX users. In the tutorial chapters, the Windows NT 4.x interface is
shown, with the expectation that the UNIX user will make the required
adjustment. Therefore, it is strongly recommended that UNIX users
review this chapter that identifies and explains the differences between the
Windows and UNIX interfaces.

In this chapter, each major heading will identify whether it applies to


Windows or UNIX or both.

2.2 An Overview for UNIX and Windows

The QUEST GUI for UNIX is DELMIA's proprietary interface.

The QUEST GUI for Windows platforms is primarily a Windows-style


interface. This interface has some differences between the NT 3.51 and
NT 4.0 versions. These differences are dictated by the standards of the
respective operating system versions.

Any aspects of the QUEST GUI for Windows platforms that are not
Windows-style, will conform to the DELMIA interface. This approach to
the design of the QUEST GUI provides continuity for existing customers
and a high degree of consistency between UNIX and PC installations.

-8-
With rare exceptions, mainly this chapter, this manual is written for those
users using the Windows interface.

NOTE: A detailed description of Windows terminology and operation is outside the


scope of this manual. For those unfamiliar with terms such as Dialog Box, Menu Bar,
minimize/maximize/restore, or who have not used Windows NT before, it is strongly
recommended that windows documentation be reviewed and understood before
proceeding.

The Menu System - Windows


In QUEST PC installations, the menu system will be displayed in the
QUEST window in the following manner:

Figure 2-1 The QUEST User Interface in a Windows Environment

Menu Bar and Contexts - Windows

The QUEST menu bar displays a set of menu options: File, Model, Run,
CAD, Draw, Tools, User, Pref, Window, Help. Each menu option provides
access to a different set of related operations, which is a standard approach
in Windows applications. A menu option is referred to as a context in the
following documentation.

-9-
Pull-down Menus and Context Options - Windows

Selecting a context will cause a pull-down menu to appear. Usually each


pull-down menu displays several choices which are referred to as context
options. A context option may be a specific operation such as saving data
or may itself provide access to a set of related operations. See the section
titled Pages, Title Bars, and Actions Buttons - Windows and UNIX.

The Menu System - UNIX


In QUEST UNIX installations, the menu system will be displayed in the
QUEST window in the following manner:

Figure 2-2 The QUEST User Interface in a UNIX Environment

Context Buttons and Contexts - UNIX

There are a series of buttons along the top of the QUEST screen: File,
Model, Run, CAD, Draw, Tools, User, Pref, Window, Help. These are
referred to as context buttons. Each context provides access to different
sets of related operations. These "sets" are accessed through the context
option buttons.

Context Options - UNIX

The selection of a context will cause a set of buttons to appear in the top
right-hand corner of the QUEST window. These buttons are referred to as
context options. All context options provide access to an associated set of
functions known as a page. (See the section titled Pages, Title Bars, and

- 10 -
Actions Buttons - Windows and UNIX). There are two to nine pages for
each context.

Worlds - Windows and UNIX


There are three "worlds" in QUEST. They are: Model, CAD, and Draw.
The model world is where QUEST simulations are created and
manipulated. The CAD world covers the creation and manipulation of 3D
geometries. The draw world covers the creation and manipulation of 2D
drawings.

To enter the model world, select either the Model or Run context.
To enter the CAD world, select the CAD Context.
To enter the draw world, select the Draw Context.

While working within one of these three "worlds", the remaining contexts
of File, Tools, User, Pref, Window, and Help are also available to influence
activity in the specific world. In addition, some action buttons in Tools and
Pref are available across contexts while others are specific to one or more
contexts.

Pages, Title Bars, and Action Buttons - Windows and


UNIX
Along the right-hand side of the QUEST window are the title bars and
action buttons that are associated with the context and context option just
selected. These title bars and action buttons will differ for each
combination of context and context option that is selected. Each separate
display of this type is referred to as a page.

Title Bars - Windows and UNIX

Title bars are distinguished by being text inside a plain rectangle (see
Figures 2-1 and 2-2). A title bar serves to group and define action buttons
(explained below) that are displayed immediately below itself. As such, a
title bar does not provide access to any operation and therefore selecting or
clicking on a title bar will result in no action by QUEST.

NOTE: The exception to this is when in a context-sensitive help mode. Then, the
selection of a title bar will provide further information on the functional area described
by the title bar's text.

- 11 -
Action Buttons - Windows and UNIX

The selection of an action button is the basic method for creating and
manipulating a QUEST simulation. Action buttons are described in more
detail in the section titled: The Operation and Use of Action Buttons -
Windows and UNIX.

World Display - Windows and UNIX


The world display buttons are arranged across the bottom of the screen.
They are used to control the position of the world, lights and lighting (for
hardware platforms that support this feature), views, and other display and
viewing characteristics. The world display buttons and their functions may
differ depending upon the current world. World display buttons are
described in more detail in section 2.6, titled World Display - Windows
and UNIX.

The Operation and Use of Action Buttons - Windows


and UNIX
Intermediate information. Action buttons are the basic functions that
perform tasks. There are three types of action buttons:

Regular. A direct action is assigned to the button.


Toggle. The button, when selected, will change the existing condition to another.
When selected again, the previous condition will return. The selected condition
remains in operation until it is changed or until QUEST is exited.
Confirm. The title of the button will change to a question such as "?SURE?", or
"YES" so as to force confirmation of the selected activity. A second mouse click is
required, on the button, before the function will be executed. Confirms are usually
associated with sweeping functions such as clearing the model from memory.

Disabled and Enabled Action Buttons - Windows and UNIX

Intermediate information. Some action buttons are only visible under


certain circumstances. This is because they are associated with some other
action button which must first be selected before they can be used.

Enabled buttons will appear when an action button is selected that makes
use of enabled buttons. The most common examples of this are the
translate or rotate functions. When the action button to perform a
translation of a geometry is selected, a set of related action buttons

- 12 -
appears. These include actions to perform tasks such as specifying
absolute or relative translation parameters. As soon as the translation
function is exited, these buttons return to their disabled state, i.e., they
disappear.

2.3 Dialog Boxes, Combo Boxes, and


Message Windows

Windows

Windows-style dialog boxes, combination (combo) boxes, and message


windows are used in QUEST PC installations. It is assumed that the reader
is familiar with these Windows interface tools.

There are alternative methods for selecting an entity in Windows. When a


button is selected that requires an entity selection, QUEST provides a
dialog box listing the entities that are valid for the button selected. The
following are valid methods for selecting a required entity:

Click twice on the name of the entity in the displayed list.


Click once on the name of the entity and then click on the OK button in the dialog
box.
Click once on the displayed entity in the 3D or 2D world.
Click on the Key button on the dialog box. A prompt dialog box appears. Enter
the name of the entity in the prompt dialog box and press Enter.

UNIX

Intermediate information. In QUEST UNIX installations, equivalent tools


to the Windows-style tools described above are used for entering and
receiving data. Although they look similar and can be used in a similar

- 13 -
manner, there are some important differences. This section explains these
tools in detail and shows how to use them.

Information and querying takes place through dialog boxes. In other


DELMIA Corporation products running on UNIX these boxes are referred
to as popups. In order to make QUEST documentation applicable to both
Windows and UNIX platforms, the appropriate Windows dialog
terminology is adopted here when describing the interface.

There are different types of dialog boxes:

Message Window
Item Selection Dialog Box
List Selection Dialog Box
Prompt Dialog Box
Variable Dialog Box
Information Dialog Box
Table Dialog Box
Window Dialog Box
The editor: IGEDIT

Common Features of Dialog Boxes - UNIX


Header - UNIX

Intermediate information. All dialog boxes have a header located along the
top. The header contains:

A lightning bar in a box which is located on the left-hand side of the header.
Clicking on this with the mouse will usually remove the dialog box. The
exception is for message dialog boxes, where clicking with the left mouse button
will remove the body of the message and change the header to be transparent.
This transparent condition can be toggled back to normal display by clicking a
second time on the lightning bar.
The name of the dialog box.
In some cases the word Done, or a + in a box which is located on the right-hand
side of the header. Clicking on Done will instruct QUEST to use the data in the
dialog box to perform the appropriate action. Clicking on + will widen the dialog
box, in some cases showing additional information.

Device Color

- 14 -
White

Grey

Black

Red

Green

Blue

Yellow

Cyan

Purple

Orange

Magenta

Scroll Bar - UNIX

Intermediate information. If a dialog box contains data comprising more


lines than can currently be displayed, a scroll bar is activated on the left
side of the dialog box. The scroll bar consists of:

A in a box under the lightning bar. By clicking on this, the contents of the dialog
box will be scrolled upwards, one line per click.
A rectangle containing a smaller rectangle. This is a scrolling device which is
common to many computer applications. By placing the cursor on the smaller
rectangle, holding down a mouse button and dragging the mouse forward or
backwards, the scrolling can be performed more rapidly.
A in a box at the bottom of the scroll bar. By clicking on this, the contents of the
dialog box will be scrolled downwards, one line per click.

- 15 -
In a dialog box where a scroll bar is displayed, at the right-hand side of the
header, in a box, will be a . Clicking with the left mouse button (LMB)
in this box will increase the number of lines displayed. Clicking once
increases the number of lines displayed by one, holding down the mouse
button increases the number continuously. Clicking with the right mouse
button decreases the number of lines displayed; again, a single click
reduces the display by one line and holding the button down decreases the
display continuously.

Editing Dialog Box Fields


Intermediate information. Dialog boxes which allow keyboard input (text
or numeric) will allow dynamic editing of that input during entry.

The left and right arrow keys may be used to move the cursor.
A typed alphanumeric-character will be inserted at the cursor and text to the right
of the cursor is pushed further to the right.
The backspace key may be used to delete the character to the left of the cursor.
If the length of the line text exceeds the available display space, only the portion
which fits in the display and includes the cursor will be displayed. The left and
right arrow keys will scroll the text through the display window to allow editing
of the entire line.
If default text is present in the field about to be modified, that text may be
preserved and modified if and only if the first character typed is either the left or
right arrow key. If it is the right arrow key, the cursor will begin at the left side of
the default text and advance to the right. If it is the left arrow key, the cursor will
begin at the right side of the default text and advance to the left. If it is any other
key, the default text will disappear and be lost, and new text must be entered.
Keyboard input for a field in a dialog box is completed with a carriage return
(<cr>), or on certain machines by a mouse button click.

NOTE: The dialog box can be aborted by use of the escape key ( <esc> ).

NOTE: If some function is being executed involving a dialog box, then a displayed
IGEDIT window (see below) may NOT be interacted with until the function has been
completed or aborted.

During any numeric input from the keyboard, the IGCALC expression evaluator
is active. IGCALC allows algebraic expressions to be typed in and automatically
evaluated to provide the desired numeric value for that input. This may include
numerous built-in functions such as sin, cos, sqrt, and others, and may also
include usage of IGCALC variables defined by the user or present as a result of
analysis recently performed. By convention, the IGCALC variables "c" and "p"

- 16 -
are reserved to mean the following: "c" will contain the value of the "current"
field being modified. Thus, it is possible to type "c*2" to quickly double a
quantity, and so on. The variable "p" will always contain the value of the
"previous" IGCALC interaction. Thus, if several fields of a dialog box are to
receive the same value, it may be typed in once, followed by a succession of "p"s
to replicate it in each field.
Use the on-line Help on the DELMIA Corporation logo for a complete description
of IGCALC, system variables, and the features available.

Item Selection Dialog Box - UNIX

Intermediate information. Item selections are used in functions such as


color selection to provide a simple column, listing items to choose from.
To make a selection place the cursor over the required item to will
highlight the item, and click a mouse button. Dialog box fields that have
an associated item selection dialog box will have a displayed to the right
of the field.

Menu Environment Done

Left Handed Menu No

Menu Font Helvetica-Bold

Menu Font Point Size 14.0000

Button Style Shaded

Button Color Green

Hi Button Color Blue

Border Color Cherry

Text Color White

Hi Text Color White

Confirm Text Color Blue

- 17 -
Title Color Yellow

Page Button Color Orange

Context Button Color Blue

Text Shadow Yes

File/Directory Item Selection Dialog Box - UNIX

Intermediate information. When selecting a file or directory, a particular


type of item selection dialog box is used, referred to as a file, or directory
item selection dialog box.

This dialog box may at times have a button in the far right corner that says
Up Dir. This will appear when a subdirectory has been selected from a list
of directories, indicating that it is possible to return to a higher directory
level. Clicking on Up Dir will move the item selection list up one level in
the directory tree.

List Selection Dialog Box - UNIX

Intermediate information. List selections are in a row and column format


for selecting information that is dynamic and changing. The primary
example is that of element selection via the use of the middle mouse
button (see below The Mouse - Windows and UNIX).

The list dialog box for functions which can operate on multiple entities
appears with a C button to the right of the dialog box name and a Done
button at the upper right.

- 18 -
Selecting the C button will deselect all current selections from the list
dialog box. Clicking on done will complete the selection process. This
type of dialog box provides information on the current selection and
allows modification of the selection list. The names of current items are
highlighted and selection or deselection of items can be continued until the
done button is selected.

The mouse buttons have the following functionality:

LMB or MMB: Will toggle the state of the element that the cursor is on.
RMB: Will deselect all data items currently selected and select the element that
the cursor is on, and proceed immediately.
Shift + LMB: Will select all elements between the previous unshifted LMB
selection and the current element that the cursor is on.

Prompt Dialog Box - UNIX

Intermediate information. Prompt dialog boxes are simple, one line dialog
boxes. They usually appear near the bottom of the display, with a
prompting message indicating the type of input desired.

They may require either string, real-numeric, or integer-numeric input.


The input is confirmed by a carriage return ( <cr> ) or a mouse button click.
The prompt is aborted by the escape key ( <esc> ).
Entering no input and confirming is an abort.

String input will accept the wildcards * and ? for multiple and single
characters, respectively. In QUEST an example of this can be seen when
using circle select to pick elements.

Prompt dialog boxes may not be dragged.

Variable Dialog Box - UNIX

- 19 -
Intermediate information. Variable dialog boxes contain multiple fields.
Each field consists of a text description of the field and alongside it the
current value for the field. A variable dialog box can contain any
combination of real, integer, list items, toggle items, or string fields. The
mouse is used to select a particular field and either the keyboard or mouse
used to modify the contents (depending on the field type).

Menu Environment Done

Left Handed Menu No

Menu Font Helvetica-Bold

Menu Font Point Size 14.0000

Button Style Shaded

Button Color Green

Hi Button Color Blue

Border Color Cherry

Text Color White

Hi Text Color White

Confirm Text Color Blue

Title Color Yellow

Page Button Color Orange

Context Button Color Blue

Text Shadow Yes

- 20 -
On any field, typing a <return> will cause the displayed input to be checked and
possibly accepted, and the field highlight will advance to the next field below for
input.
The up and down cursor keys are available to move the field highlight without
using the mouse. Clicking on Done will accept the fields of input as currently
displayed, while clicking on the lightning bolt, the <esc> key or any other menu
button will cancel all changes to the fields.
If the field is a real, integer, or string field type, then keyboard input is required.
For real or integer fields, in some cases an automatic check is made to ensure that
the input value is within a predefined range, e.g., greater than zero.
If the field is a toggle field type, the field value can be switched to its alternative
value by highlighting the field and then clicking either the left mouse button or
the middle mouse button.
If the field is a list item field, the list of alternative values can be viewed by
highlighting the field and then clicking either the left mouse button or the middle
mouse button. The required field option can be selected by highlighting it and
then clicking with the left or middle mouse button.

Information Dialog Box - UNIX

Intermediate information. Information dialog boxes are variable dialog


boxes without the capability to input data. As such they have the Done
operator removed. They are normally displayed in an information-only
capacity, such as to report the results of an inquiry or analysis, or to
display the current translation or rotational values for an entity.

Table Dialog Box - UNIX

Intermediate information. Table dialog boxes are a more complex version


of variable dialog boxes. They are an array of data, rather like a
spreadsheet, with rows and columns, and field values, relating to different
row/column entries. If the table dialog box is too wide for the display, a
horizontal scroll bar mechanism will be displayed. Selecting the with the
mouse will scroll the table to the left and selecting with the mouse will
scroll the table to the right.

Window Dialog Box - UNIX

- 21 -
Intermediate information. Window dialog boxes allow the user to edit
ASCII files. A common use is editing Simulation Control Language (SCL)
files. (See Section 2.7, Editor - IGEDIT - Windows and UNIX).

Blank Dialog Box - UNIX

Intermediate information. Blank dialog boxes are used to display graphical


simulation results.

Dialog Box Hierarchy


Advanced information. Dialog boxes have a display hierarchy to resolve
conflicts when they overlap each other. The basic hierarchy is as follows:

1. List dialog boxes, item dialog boxes, variable dialog boxes, window
dialog boxes, table dialog boxes, prompt dialog boxes.

2. The window dialog box editor: IGEDIT

3. DELMIA Corp. logo.

4. Message dialog boxes.

5. Strip charts.

6. Information dialog boxes.

Because list, item, variable, window, table, and prompt dialog boxes are
on the same level of the hierarchy only one of these dialog boxes can be
displayed at any one time.

If a mouse button is pressed when the cursor is within more than one
dialog box, the one that is on top will be selected. Dialog boxes are
opaque; if a dialog box is displayed on top of geometry, that geometry
cannot be selected through the dialog box. The dialog box must be moved
in order to select the geometry underneath it.

When information dialog boxes are selected, they are moved in front of all
other dialog boxes, except a list, item, variable, window, or table dialog
box. The information dialog box will be placed behind these dialog boxes.
While a list, item, variable, window, or table dialog box is displayed,
IGEDIT dialog boxes can only be moved. Any attempt to execute an
IGEDIT command will be ignored.

- 22 -
2.4 The Mouse - Windows and UNIX

A three-button mouse is required for QUEST. The buttons have different


uses at different times and it is well worth practising to ensure familiarity
with the conveniences that they provide. The use of the three-button
mouse is explained in overview in this section. Further details are
provided in the following three sections: Mouse Selection of Entities,
Mouse Zip Mode, and Mouse Point Indication. It is recommended that
new users simply skim these three sections because the tutorials will
indicate the proper use of the mouse. At a later stage return to this section
and read it carefully for tips on improving efficiency.

An action button's behavior depends on which mouse button is used.


These behaviors are described in the on-line help for the action button.
The tutorials in this manual will specify which mouse button to use to
make the best use of this feature. For ease of expression, the mouse
buttons are referred to as LMB for left mouse button, MMB for middle
mouse button, and RMB for right mouse button.

The mouse is used for selecting contexts, context option buttons, action
buttons, dialog box options, and graphical data, i.e., the elements in the
QUEST model.

The mouse may be used in two distinct fashions: as a selecting device,


point and click; or as a potentiometer, hold a button down and drag the
mouse.

When used as a selecting device, the cursor associated with the mouse is used to
select a required entity. Entity selection action buttons are sensitive to which
mouse button was used to invoke the function. In general, use of the LMB results
in a prompt to position the cursor over the geometry of the required element and
click; use of the MMB results in a list dialog box containing a list of appropriate
entities and a message to select the required entity using the mouse; use of the
RMB results in a prompt dialog box requiring entry of the name of the required
entity.

When the mouse is used as a potentiometer, it acts much like a sliding bar
volume control on a stereo. With one or more of the mouse buttons
pressed, stroke the mouse from one side of the display window to the other

- 23 -
to control the values that are mapped to the mouse buttons. Moving from
left to right usually increases the value and vice versa.

Mouse Selection of Entities - Windows and UNIX

The selection of an element or element class is an important part of


building and running models. There are three methods of selection, which
are available for every action that triggers a selection:

Pick an element from the model (2D/3D) using the mouse and any mouse button.
Pick an element from a list dialog box.
Select the Key button from a list dialog box and enter the name of the element
into the prompt dialog box.

All three methods are available for any selection.

NOTE: If the user finds the presence of the list dialog box to be intrusive, the box can be
removed by iconizing it.

If the list dialog box is too large/small, the number of lines in the dialog box can
be specified using Pref | Preferences | Environment | Dialog and changing the
"Entity Select Rows Displayed" field.

Zip Method - Windows and UNIX

Intermediate information. The zip method of mouse use allows a faster use
of the GUI by skipping a step in an action. It is worthwhile reading this
section and practicing.

As discussed above, the three mouse buttons take on different meanings


depending on the function at hand. Aside from the basic X, Y, Z, and R, G,
B mappings, QUEST provides a generally pervasive mechanism of using
the right mouse button to bypass certain activities during the use of
functions. This can be thought of as an "expert" mode. Generally, if the
LMB is used, QUEST will behave as it has for early users and it will not
do anything unexpected or special; every option of a function will be
visited. However, when the RMB is used carefully, it will speed up the
operation of many categories of functions. Since the number of functions
that take advantage of zip method are too numerous to list and discuss, the
zip method is discussed in a such a manner that zip behavior should be
clear in each case.

The first zip method described historically provided the name for the
entire method. What has traditionally been called "Zip Mode" exists for

- 24 -
many functions such as world rotations, translations, zooms, and entity
rotations and translations. When these functions are invoked with the
RMB, the world display will automatically convert to wireframe bounding
boxes for speedy updating, and when the mouse motion is complete and
the action terminated, the display mode reverts back to its original value.
In addition, any dimensions present will disappear for the duration of the
activity. This is presently just one aspect of the zip method.

Bypassing Dialog Boxes - UNIX and WINDOWS

Intermediate information. Another aspect of the zip method is in bypassing


dialog boxes when the previous value(s) selected is currently desired. For
example, when coloring any entity, the first entity selected brings up an
item list dialog box of colors from which to choose. If the next entity is
selected with the RMB, it automatically receives the previous color
selection, bypassing the item list dialog box. Two other examples of the
use of this technique are entity selection from an item list dialog box and
the selection of display modes.

There is a slightly different way of bypassing dialog boxes. In CAD there


are many actions where the first step after selecting that action button is
the selection of an option from an item list dialog box. If the button is
subsequently selected with the RMB, this dialog box is skipped over, the
previously selected value being used. There are also some model world
actions that behave in this manner.

Some actions involving a variable dialog box will also work with the zip
method. Once the values for the variable dialog box have been established,
subsequent selection of entities for the same action with the RMB will
apply the same action with the same values for the variable dialog box.

Mouse Point Indication - Windows and UNIX

Advanced information. Point indication is primarily of use in CAD to


specify an X, Y, Z location which has some special meaning with respect
to a geometry, e.g., vertex, origin.

Points may be indicated in several ways, depending on the current setting


for Modes | Indicate Point (see below: World Display Buttons - Windows
and UNIX), and the methods of indication used in any particular mode.
The default mode is "On Vertex", meaning that points are indicated by
picking a vertex in the display. For some functions, such as data creation
functions, the Abs and Rel buttons are also available to allow absolute
point X, Y, Z values to be keyed in.

- 25 -
Also, all Indicate Point Modes allow use of the RMB to force a vertex
selection, ignoring the current mode. A RMB pick will also allow a
coorsys to be selected.

Each indicate point mode allows a controlled method of indicating points


on particular entity types, such as curves or surfaces. The list below
summarizes the available modes:

On Vertex
On Edges/Lines
On Surfaces
On Curves
On ALL

When the indicate point mode is On Edges/Lines, various options are available.
When an edge or line is picked, an Item dialog box allows three methods of
indicating the point along that segment: As Is, Absolute, or Normalized. The edge
or line segment is highlighted, the picked point is highlighted, and the endpoint
nearest the picked point is highlighted. The option "As Is" takes the pick directly
as the point. The options "Absolute" and "Normalized" each allow a value to be
keyed in to define how far along the edge or line segment the desired point should
lie, starting from the nearest endpoint (which has been highlighted for this
purpose). Absolute will accept a real distance in current units along the segment.
Normalized will accept a normalized distance in units of segment lengths, such
that a value of 0.0 is the near endpoint, and 1.0 is the far endpoint. Values outside
this range may also be keyed in.
When the Indicate Point Mode is On Surfaces, free picks on surfaces may be
made. If the surface is a B-Spline, then the point coordinates indicated will be on
the exact mathematical surface, regardless of the polygons used to visualize it. If
the surface is a regular polygon, then the point coordinates indicated will be on
the polygon.
When the Indicate Point Mode is On Curves, free picks on curves may be made.
If the curve is a B-Spline, then the point coordinates indicated will be on the exact
mathematical curve, regardless of the line segments used to visualize it. If the
curve is a regular line segment, then the point coordinates indicated will be on the
segment.
When the Indicate Point Mode is On ALL, the system will try to determine
automatically which entity type is desired based on the nearness to the viewer's
eye. When two entities are at the same distance (such as picking close to an edge
on a polygon), a fixed prioritization is imposed as follows:
Edges
Curves
Surfaces
Coorsys (last in all modes)

- 26 -
Once a point has been indicated, it will be shown as a "splat". This is a
highlighting of the point with a displayed coordinate system (which may
be rotated with the world, possibly with dials) that has its principle axes
aligned with the axis of the coorsys selected. Most often, the coorsys
selected is the coorsys of the geometry associated with the point selected.
However, in some cases such as plane indication, it may be otherwise.

It is important to keep in mind that a point is a more general concept than


a vertex; functions such as vertex identification in the Tools context not
obey the current Indicate Point Mode.

Plane Indication - Windows and UNIX

Advanced information. Several functions require a plane be indicated.


There are several methods, as follows:

Selecting a Polygon
Indicating three points (current indicate point mode)

Selecting a Frame - Windows and UNIX

Advanced information. If a frame (coorsys) is selected, an Item dialog box


allows definition of a plane relative to the coorsys. Any of the principle
axes of the coorsys may be quickly chosen, or an arbitrary set of plane
coefficients, relative to the coorsys, can be keyed in.

The origin of a coorsys or way point may be used as any point of the three
point pick. If it is to be the first point, use the RMB to force a point pick
instead of a coorsys pick.

If the plane is defined by indicating three points, the Abs and Rel buttons
are enabled so that arbitrary coordinates may be entered. (See above:
Disabled and Enabled Action Buttons - Windows and UNIX).

Once the plane has been indicated, a 3D plane icon is displayed showing
the location of the plane and a normal vector. If desired, the world may
then be rotated to verify that it is indeed the correct plane.

Coorsys Indication - Windows and UNIX

Intermediate information. For all translate and rotate functions, the base
coorsys of the current object is highlighted in bright green and can be seen

- 27 -
from any angle, at any zoom factor. Thus the desired axis of rotation
and/or translation can be easily identified before invoking a mouse button.

Vector and Axis Indication - Windows and UNIX

Advanced information. Various functions require a vector or an axis to be


indicated. There is a subtle distinction between the two; namely, if a vector
is being indicated, its length is meaningful and is somehow used by the
function. If an axis is being indicated, the length is not meaningful; only
the direction is used by the function.

For example, the CAD Extrude button asks for a vector, and takes its
length as the extrusion distance. Meanwhile, the Revolve button asks for
an axis of revolution, and needs no length information.

Vectors and axes may be indicated by any of the following means.


Selecting a coorsys or way point, choosing a principle axis, or keying in
specific vector components using the Abs button.

Indicating Two Points - Windows and UNIX

Advanced information. Selecting the Abs button directly to key in vector


components in world coordinates.

As with plane indications, one or two coorsys may be used in a two point
pick. Use the RMB to force a point pick.

Reference Chart for Mouse Button Usage - Windows and UNIX

Intermediate information.

2.5 The User Context - Windows and


UNIX

- 28 -
Intermediate information. The User context supports three methods for
creating special action buttons and assigning actions to them. This provide
a powerful way to customize the GUI. QUEST provides nine user-
definable pages for each of the three worlds (CAD, Model, and Draw).

The first method of user-configurable button allows selection of an action


button from anywhere in the system and copying the button, and its
associated action, to a user-defined page. Buttons from any particular
world are only active when in a user page associated with that world.
QUEST will not allow an action button from one world to be placed into a
user page of another world.

The second method allows the creation of an action button which, when
selected, will cause the execution of a Simulation Control Language
(SCL) program. The SCL program is referred to as an SCL macro and the
button as an SCL macro action button. Some examples of this would be to
run a customized report, or to allow a customized interface for changing
the model. SCL action buttons only operate in the model world.

The third method allows the creation of an action button which, when
selected, will cause the execution of a Batch Control Language (BCL) file.
The BCL file is referred to as a BCL macro and the button as a BCL macro
action button. Some examples of this would be to load and run a model,
with predefined choreography or predefined model parameter changes, for
a series of simulation runs. BCL action buttons only operate in the model
world.

NOTE: BCL macros should reside in a BCLMACROS directory and SCL macros should
be in an SCLMACROS directory. The BCLMACRO$LIB and SCLMACRO$LIB
configuration file options are used to define these directories. Refer to the Configuration
Files Guide for more information on configuration file usage.

Macro files may be created with an ordinary text editor.

2.6 World Display - Windows and UNIX

- 29 -
The world display buttons are arranged across the bottom of the screen.
They are used to control the position and orientation of the world, lights
and lighting (for hardware platforms that support this feature), and other
display characteristics. The world display buttons differ depending upon
the context.

The CAD world, and the Model and Run contexts in the model world,
operate with the following world display buttons.

Light
Camera
Fly
Rotate
Cruise
View
Display
Modes

The Draw context controls the draw world. The draw world has a reduced
set of world display buttons because it is a two-dimensional environment.

Zoom
Magnify
Translate
Cruise
Display
Modes

The remaining contexts (File, Tools, User, Pref, Window, Help) are not
world specific, and may be entered and used in all worlds. Certain
functions in these contexts may be disabled depending on which world is
active at the time the context is entered. See the online Help for more
information on how to use any of these functions.

World Display Buttons in the Model and CAD Worlds -


Windows and UNIX

- 30 -
Light - Windows and UNIX

Intermediate information. Select Pref | Preferences | Shadow. When the


Shadow button is highlighted, then shadows are "on". Select the Light
world display button. It changes to Reset. While in this mode, drag the
mouse using the LMB or MMB, to alter the location of the light source(s).
Selecting the Reset button will revert the lighting to the default setting.

NOTE: Lighting capability is dependent on hardware.

Camera - Windows and UNIX

Advanced information. This feature is quite sophisticated. In particular, its


option "Camera Specs" relies on an underlying mathematical equation
which is provided below. It should be regarded as an advanced feature.

The term "camera" refers to the control of world viewing. In the same way
as a video camera can be located and pointed, used to track a moving
body, or placed on a moving body, QUEST's Camera button provides
detailed and flexible control for viewing the QUEST world. The features
of the Camera button are different depending on the current QUEST
world.

In the model world, there are five options: camera specs, tracking, mounting,
pan/tilt, and locate.
In the CAD world, there is only a single capability of camera specs.
In the draw world, there is no camera function.

There are several factors that control the view of the world. The figure
below gives a diagrammatic description of the view of the world and of
those factors that affect it. This should be helpful in understanding the
following text and in understanding such features as hither and yonder
planes, gaze vector length (gvl) and center of interest (COI).

- 31 -
Figure 2-3 Viewing Model

Camera Specs

This dialog box is used to determine:

Projection - Perspective or Orthographic. This determines if vanishing points are


used to draw the screen.
Image Plane Size (IPS). This is the diagonal length of the "image" as it would be
seen through the camera. The default IPS is 42 mm or the size of the image if seen
through a 35 mm camera lens.
Focal Length (FL): The distance from the eye point to the image plane.
Field of View (FOVY): The included angle in view, based on the image plane
size, focal length, and clipping planes.

The last three parameters are interrelated. Changes to any one parameter
will automatically be reflected in another parameter.

The relationship is defined by the following equation:

Tracking

This is a simple feature that is most commonly used to allow QUEST to


automatically change its view so as to follow a moving model element
such as a part or AGV.

- 32 -
There are two possible criteria for this option; tracking a part (CAD part)
or tracking a frame (coorsys). Enabling this option causes the CAD part or
coorsys being tracked to always be kept in the center of the screen. If
tracking is currently enabled, the dialog box will display the additional
option "Disable Tracking".

Track Part: The camera will "pan" and/or tilt in any frame required to keep the
CAD part in the center of the screen.
Track Frame: The camera will "pan" and/or tilt as needed to keep the chosen
coorsys in the center of the screen.
Disable Tracking: Switch off the tracking.

NOTE: With tracking turned on, any subsequent camera or view changes will result in
tracking continuing from the new camera location.

Mounting

This option is used to determine the location and orientation of the


camera, in a fixed position, relative to a CAD part, coorsys, or surface.
Mounting the camera maintains its location and orientation relative to the
CAD part, coorsys, or surface even if the CAD part, coorsys or surface is
moved.

The camera direction can be adjusted with the Camera world display
button options of Locate and Pan/Tilt (see below) in order to get the
desired view.

If a camera is currently mounted, the dialog box will display the additional
option "Unmount Camera". Once the camera is unmounted, it is not
affected by subsequent movement of the CAD part, coorsys, or surface on
which it was previously mounted.

Mount on Frame: This mounts the camera on the base coorsys of the selected
CAD part. The camera will point in the direction of the positive Z axis of the
coorsys. The world will be rotated so that the positive Y axis of the coorsys points
towards the bottom of the screen. The camera will move with the CAD part.
Mount on Surface: The mount will be such that the camera will point outward
from the surface along a normal to the surface. The camera will be attached to the
parent CAD part of the surface.
Grab by Part: The user is prompted to select a part to grab the camera with. Once
a part is selected, the camera will be grabbed by it and will remain fixed relative
to the selected part even if the part moves.
Unmount Camera: The camera will no longer be attached and will remain fixed at
its current location and orientation.

- 33 -
Pan / Tilt

This is used to aim the camera and adjust the field of view (FOVY). This
can be thought of as operating a stationary camera with a zoom lens; pan
and tilt will change the direction that the camera is pointing and the zoom
of the lens. Pan and tilt are inactive whenever tracking is enabled. The
feature is operated by dragging the mouse with the appropriate mouse
button depressed.

The left mouse button (LMB) controls the pan and tilt of the camera.
The middle mouse button (MMB) controls the field of view.
The right mouse button (RMB) will allow the user to pick a point on the geometry
as the new center of interest (COI).

Note that selection of Pan/Tilt enables the Rel, Abs, Snp, Reject, and
Restore action buttons. Pan and tilt are inactive whenever tracking is
enabled.

Locate

This function allows the location of the camera in the world by translating it along the
user coordinate system. The user coordinate system adheres to the right-hand rule, where
positive "Z" is up, positive "Y" is into the screen and positive "X" is to the right.

Dragging the mouse with the LMB depressed controls the pan and tilt of the
camera.
The middle mouse button (MMB) controls the field of view.
The right mouse button (RMB) is used to pick a point on the geometry as the new
center of interest (COI).

Fly

Intermediate information. This function allows the user to manipulate the


view point while moving around in 3D space. The view point can be
aimed at any direction and moved towards or away from the center of
interest. A box is displayed at the center of the screen to represent a neutral

- 34 -
zone. While the cursor is located in this zone, the view point will not be
altered.

Use the LMB to move (accelerate) towards the center of interest. As long as the
mouse button is depressed, the movement will continue to accelerate.
Use the MMB to aim the view point in any direction. The amount of change in the
view point is a function of the distance of the cursor to the neutral zone (box).
Use the RMB to move away from (decelerate) the center of interest. As long as
the mouse button is depressed, deceleration will continue.

Use the MMB to aim the view point, and then use the LMB to accelerate
or the RMB to decelerate, towards the center of interest. Releasing the
LMB or RMB while holding the MMB will maintain a constant velocity
with respect to the center of interest.

This function is not valid if camera tracking in "On". This function is not
valid in orthographic mode.

Rotate

Intermediate information. The Rotate world display button operates


differently dependent on whether or not the camera is currently mounted.
When the camera is not mounted, selection of the Rotate world display
button allows use of the mouse or the Rel, Abs, Snp, Reject and Restore
action buttons to rotate the world around the current user coordinate
system. When the camera is mounted, the rotation is around the base
coorsys of the item on which the camera is mounted.

This operation also adheres to the right-hand rule specified in the locate
option of the Camera world display button.

Cruise

This is a basic level feature that must be learned. This feature is the most
common way of changing the view of the world. It is immensely useful
and worthy of the small amount of practice needed for its mastery. It is
recommended that the new user select the button and then experiment with
the dragging of the mouse with button(s) depressed as an intuitive
understanding of this feature is more easily obtained in this manner.

The Cruise world display button allows the modification of the camera's
location and orientation. This can be accomplished in four different ways
depending on which mouse button or combination of buttons is used.

- 35 -
This is the modification of the camera's location and orientation. This can
be accomplished in four different ways depending on which mouse button
or combination of buttons is used.

The LMB rotates the camera in a spherical rotation about the center of interest (COI),
changing the gaze vector length (GVL). The gaze vector length determines the radius of
the sphere.

The MMB translates the camera toward and away from the COI thereby changing the
gaze vector length (GVL). This changes the size of the sphere used to rotate around when
using the LMB.

The RMB is used to either pick on geometry or circle data to establish a new
center of interest. Circling will also "zoom" the view so that the circled data fills
the screen.

- 36 -
Depressing the LMB and RMB together will allow the user to translate the view
horizontally and vertically on the screen.

View

Intermediate information. The View button is used to select a predefined


view.

Standard Views allows the selection of a system-provided view.


User View Utilities allows the creation and storing of individualized views.
User Views allows the selection of a previously stored individualized view.

Note that the mounting and tracking characteristics are saved with the user
views which makes view setting in programs very powerful. Also, these
views can be used by Batch Control Language (BCL) and Simulation
Control Language (SCL) to choreograph automatic view changes during a
model run. This approach provides for high impact, hands-off
demonstrations.

- 37 -
The display state of any entity can also be saved and restored
independently of user views. Attributes that can be saved for each device
include: color, visibility, render mode, etc.

Display

Advanced information. The Display button is used to control how the


graphics will be displayed.

Render: Render is the term used for the manner in which a geometry is displayed.
o The default option will ensure that each geometry is displayed according
to its own display characteristics.
o The Wire option will force all geometries to be displayed in wire frame.
o The Flat option will force all geometries to be displayed in flat shading.
o The Smooth option will force all geometries to be displayed in smooth
shading.
o The Transparent option will force all geometries to be displayed
transparently.
o The Hidden Line option will display hard and silhouette edges of the
subobjects. A hard edge is the edge between two sharing polygons that
have at least a 45-degree angle between each other. A silhouette edge
displays subobject boundary edge lines even when the edge contains soft
edges. Lighting, Edges, Bbox, and Textures options are deactivated when
Render is set to Hidden Line.
Lighting: The lighting option is used to turn lighting on or off.
Edges: With the edges option switched on, the polygon edges will be outlined
with the brightest hue of the color of all the available polygons in the object.
Textures: The textures option is used to force on (On) the display of textures on
any CAD geometry that has textures, or to force off (Off) the display, or to allow
the individual CAD geometry settings (Default) to determine whether or not to
display any textures.
Backface: The Backface option is used to force on (On) the display of the
backface of polygons for all displayed geometries, or to force off (Off) the
display, or to allow the individual CAD geometry settings (Default) to determine
whether or not to display backfaces.
Bboxes: The Bboxes option is used to force on (On) the display of the bounding
box of each geometry for all displayed geometries, or to force off (Off) the
display, or to allow the individual geometry settings (Default) to determine
whether or not to display a geometry's bounding box.
Blanking: The Blanking option is used to make a CAD part or device invisible.
The Blanking can be set individually for each CAD entity. The Blanking option in
the world display can be set to Default, which will make the part visible or

- 38 -
invisible based on its Blanking setting, or to Off, that will override the Blanking
settings of the entities and will make all entities visible.

Modes

Advanced information. The Modes button differs depending on the


current QUEST world. In the model world the options are as follows:

Multi Views: This allows selection of a number of different simultaneous views of


the 3D QUEST model world.
Stacking Mode: This is used to control the number of parts that are displayed on
stacking points on buffers, machines etc. The alternatives are one or all.
Entity List Order: Defines the order in which the names of way points appear in
the Entity Selection dialog box for all way point selection options. The
alternatives are Logical or Sorted.
Indicate Point: The indicate point mode is referred to extensively above.

In the CAD world the options are as follows:

Multi Views: This allows selection of a number of different simultaneous views of


the 3D QUEST CAD world.
Indicate Point: Defines the type of point picking available in the CAD world.
Vertex Tolerance: Defines the identity measure maintained for vertices; vertices
that are within this "tolerance" of each other are considered to be the same.
Planarity Tolerance: Defines the allowable deviation from a perfect plane that a
vertex may have when forming polygons.
Polyline Angle: Defines the minimum allowable interior angle between lines in a
polyline.
World Axes: Toggles the display of the world coordinate frame in the CAD world.
Solids: This field will be displayed ony if QUEST includes the Solids option.
Defines the CAD modeling mode. When Solids is Off, only the regular CAD
modeling operations will be available. When Solids is On, only Solid modeling
operations will be available.

In the draw world the options are as follows:

Point Entity Splat Size: Defines the size of the Point Entity Splat that appears in
the display area. It applies to all the point entities in the display area.
Drag Resolution : Defines the resolution of X and Y coordinates of such attributes
of a primitive as a vertex. Usually, this attribute is the one that is being controlled
interactively in construction of the primitive. This resolution is applicable only to
box.

- 39 -
World Display Buttons in the Draw World - Windows
and UNIX
This is an advanced level feature. The draw world, because it is only two-
dimensional, has a slightly different menu configuration.

Zoom

Advanced information. This controls how much data is displayed on the


screen by changing the size of the world. This can be done through the use
of the mouse or with keyboard input.

Magnify

Advanced information. This allows the control of the magnification of the


world with one of three methods. The center of interest can be changed by
picking anywhere on the screen, circling the data considered to be the
center of interest (circle select) or choosing the magnify world display
button again and the system will fill the screen with all the geometry.

Translate

Advanced information. This function allows the translation of the world along the user
coordinate system. This is based on the right-hand rule where positive "Y" is up and
positive "X" is to the right.

Cruise

Basic information. This is a basic level feature. Cruise is the most


common way to move around the draw world. It can be thought of as a
combination of the zoom, magnify, and translate functions. The different
functions are activated when a specific combination of mouse buttons is
depressed. The LMB is the same as translate, the MMB is the same as
zoom, and the RMB is the same as magnify. If the Cruise world display

- 40 -
button is selected a second time with the LMB, the system will perform a
reset of the center of interest; the MMB will perform a reset of the world
scale; and the RMB will move the world to a point at which is is
completely visible in the screen.

Display

Advanced information. This will enable or disable the different hidden line
display modes if the data was imported with either the hidden line or
hidden line-profile option.

Modes

Advanced information. Draw modes permits control of vertex tolerance


and drag resolution.

2.7 Editor - IGEDIT - Windows and


UNIX

Intermediate / Advanced information. QUEST allows the use of a screen


editor to input and alter ASCII files associated with the model, for
example such as editing SCL code. An editor called IGEDIT is provided.
However, it is probable that the computer will already have an editor that
supports ASCII file format. It is also probable that the user is familiar with
the existing editor. QUEST permits the selection of the preferred editor via
the Dialog action button of the Preferences context - this is recommended.
For a few QUEST functions, however, IGEDIT is currently mandatory,
e.g., Notepad.

If IGEDIT is selected as the standard editor, then this section is designated


intermediate level, otherwise this is an advanced section.

The Window Dialog Box Editor: IGEDIT - Windows and UNIX

Intermediate / Advanced information. This section describes how IGEDIT


is used.

IGEDIT has the same functionality in UNIX and Windows. However, in


common with other dialog boxes there are a number of superficial dialog

- 41 -
box differences. Dialog box layout and operation is described above for
UNIX and is assumed as understood for Windows. This section
concentrates on the functionality of IGEDIT and ignores the operating
system differences.

IGEDIT is an ASCII file editor intended to provide simple editing


functions. It operates in a line oriented manner which is to say that the
required line must first be selected and then editing operations can be
performed on the contents of the line.

Structure of IGEDIT - Windows and UNIX

Intermediate / Advanced information. Below the header of the dialog box


there is a text display region where the edited text appears. When text is
present, there is a "current" line, highlighted in reverse video.

Selection of a line of text can be done by picking the line with the mouse.
This line then becomes the current line and it is highlighted. At all times,
the edit window attempts to keep the current line in the center of the text
display region. Therefore, depending on the location of the selected line in
the window, this selection may cause the text in the window to scroll up or
down.

If the RMB is used for this pick, it is equivalent to entering the modify
function (described below) on the line picked and the cursor will appear
below the character closest to the cursor when the RMB was hit.

To the left of the text display is a set of buttons which perform editing
functions (see below).

The paste buffer is a location in memory where text can be stored, but not
displayed. It is used automatically to store text when the functions delete,
yank or clear are used. Text from the paste buffer can be retrieved by the
insert function.

Insert - UNIX

Intermediate / Advanced information. This function will open a new,


empty line below the currently selected line, and allow text input. Text
input will continue for multiple lines as each <return> is typed, until an
empty line is entered (effectively two <return>'s in a row). During input,
text may be edited.

- 42 -
Delete - Windows and UNIX

Intermediate / Advanced information. This function will delete the


currently selected line. Selecting the function will result in the Delete
button being highlighted and a dialog box will prompt for confirmation.
Once confirmation is given, the line will be deleted from the display and
the next line below will become the currently selected line. If this function
is invoked with the RMB, a prompt will request the number of lines to
delete. Deleted lines are put into a `paste' buffer from which they can be
retrieved.

Modify - UNIX

Intermediate / Advanced information. This function is similar to Insert,


except that it operates on the current line. The line may be modified using
cursor keys and backspace. When a <return> is typed (regardless of where
the cursor is), the line is accepted and the function is finished. Modify may
also be entered by picking with the RMB in the text display region on the
line that is desired to be modified. The cursor will be placed under the
character closest to where the mouse pointer was when the RMB was hit.

Yank - Windows and UNIX

Intermediate / Advanced information. This function copies the current line


into the paste buffer. Selecting Yank with the RMB will prompt for the
input of the number of lines to be yanked and will copy all the yanked
lines into the paste buffer.

Paste - Windows and UNIX

Intermediate / Advanced information. If there are any lines in the paste


buffer as a result of a previous delete or yank operation, they are appended
to the text after the current line. The paste buffer may be pasted in any
number of times. The paste buffer is global across all instances of IGEDIT
windows and may thus be used to transfer text from one window to
another.

Findup (Find upward) - Windows and UNIX

Intermediate / Advanced information. Find Up. This function prompts for


a search string, and then searches upwards in the text for the first

- 43 -
occurrence of that string. The search is case sensitive and excludes the
current line. If the function is invoked with the RMB, the previous search
string (if present) is used. Note that the previous search string is global
across all instances of IGEDIT windows.

Finddn (Find downward) - Windows and UNIX

Intermediate / Advanced information. Find Down. This function is


identical to Find Up except that it searches down.

Clear - Windows and UNIX

Intermediate / Advanced information. This function will clear all the text
from the IGEDIT window, after receiving confirmation in the form of a
second mouse click on the Clear button. The cleared text is in the paste
buffer offering a restore capability in the event of an accidental clear.

Append - Windows and UNIX

Intermediate / Advanced information. This function allows a file of text to


be inserted into currently displayed text. It allows the selection of a file
from a list dialog box.

Read - Windows and UNIX

Intermediate / Advanced information. This function will allow the


selection of a file from a List dialog box which makes the contents of the
selected file become the contents of the edit window.

Write - Windows and UNIX

Intermediate / Advanced information. This function allows the


specification of a path and file name for saving the current text in the edit
window.

- 44 -
CHAPTER 3
MEDIA OUTPUT

3.1 Introduction

This chapter is intended to familiarize both the installer and the user with
the facilities and mechanisms available for producing hardcopy images
using pen plotters and other similar vector-oriented hardcopy devices.

Included are:

A description of the procedures for producing HPGL output for HPGL compatible
plotters (all platforms).
A description of the procedures for producing a run-length encoded (RLE) file
(SGI and IBM).
A description of the procedures for creating a TIFF.
A description of the procedures for creating an EPS (encapsulated postscript) file.
A description of the procedures for producing a laserprint (HP only).
A description of the procedures for producing a paintjet print (HP only).

3.2 HPGL Plotting

The Hewlett Packard Graphics Language (HPGL) is a commonly used


language for drawing vector information on plotters and other graphics
devices. Many vendors produce plotters which are HPGL compatible.
Consult your plotter documentation to find out if your plotter is HPGL
compatible.

- 45 -
HPGL Files
HPGL is an ASCII-based language that specifies:

Attributes
Line drawing information
Text

QUESTQUEST Express produces an HPGL command file, and either


sends the file to the plotter or saves it as a file for use in other applications
that use HPGL files. Plotters typically connect to the workstation over a
serial interface.

HPGL plotting is supported from the File | Screen Copy.

In addition, QUEST with the Draw context can use the Data I/O | Plot
Drawing function. This allows a scaled drawing to be plotted.

NOTE: DO NOT plot a drawing which has been imported from CAD with "quick
wireframe." Unpredictable results will occur.

The Pen Plotter option of the hardcopy function produces an intermediate


HPGL format file containing a wireframe image of the current screen.
Once the intermediate file is produced, the file is spooled to the plotter
using the system print spooler. The print spooler will ensure that multiple
HPGL plot files do not conflict while being sent to the physical plotter.
Once the intermediate file is sent to the print spooler, the intermediate file
is removed. The plotter(s) used as the destination for the plot can be set
using the config file option PEN_PLOTTERS.

Pen Mappings
There should be a carousel of eight pens set to the following color map:

- 46 -
A six-pen carousel uses the first six colors listed above.

NOTE: Any color not in the list shown is mapped to black.

3.3 Producing Hardcopy

This section describes the various methods of printing images from


QUESTQUEST Express and the required file formats, such as:

RLE Files (SGI Platform only)


TIFF
Postscript (EPS - encapsulated postscript) Files (UNIX only)
Laser Printing (HP Platform only)
Paint Jet Printing (HP Platform only)

Hardcopy Directory
This directory contains subdirectories that house the different file formats
that can be produced using the SCREEN COPY, GRAPHS, and PLOT
DRAWING commands. The tools directory is equipped with the necessary
tools to convert image files to different image formats. It is important to
note that the pen plotter option redirects the file through the lp spooler
(UNIX). The illustration below portrays the hardcopy directory as it is
shipped.

RLE Files
The printing option is supported only on Silicon Graphics (SGI) platform.

RLE is a Run-Length Encoded representation of the current screen along


with color table. An RLE file is created in the .\hardcopy\rle directory.

- 47 -
This directory can be changed using the config file option, COPY$LIB.
For more information, see the Configuration Files Guide.

The RLE file produced can be sent to any device using a custom written
device driver. A sample C program for interpreting RLE files and sending
them to the screen for display from the UNIX command line can be found
in the rle.c file of the .\hardcopy\rle directory. A detailed specification of
the RLE format can be found in this file.

TIFF Files
This produces a compressed color tiff file and is written to a user-defined
output file. The default library is .\hardcopy\tiff but this can be changed
using the COPY$LIB config file option. For more information, see the
Configuration Files Guide.

The TIFF file produced can be sent to any device using a custom written
device driver. A sample C program for interpreting TIFF files and sending
them to the screen for display from the UNIX command line can be found
in the tiff.c file of the .\hardcopy\tiff directory. A detailed specification of
the TIFF can be found in this file.

TIFF w/Alpha Files


Users can now save TIFF images with alpha parameters. The background
area of such a texture will adapt to any background color, displaying only
the required features. These textures are used with the Level of Detail
culling and enable the user to replace geometry comprised of many
polygons with a single texture.

This produces a compressed color tiff that is written to a user-defined


output file. The default library is .\hardcopy\tiff but this can be changed
using the COPY$LIB config file option. For more information, see the
Configuration Files Guide.

Postscript Files (UNIX only)


This produces an encapsulated color postscript (EPS) format file which is
written to a user-specified output file. The default library is .\hardcopy\eps
but this can be changed using the COPY$LIB config file option. For more
information, see the Configuration Files Guide.

- 48 -
Laser Printing (HP only)
The laser printing option is supported only on Hewlett Packard (HP)
platforms.

The laser printing option outputs a binary image file to the .\hardcopy\lsr
directory. This directory can be changed using the config file option,
COPY$LIB. For more information, see the Configuration Files Guide.

In the .\hardcopy\lsr directory there is a script file, lsr_print, which


performs the proper "pcl_trans" command. This command formats and
sends the data to an HP laser printer defined as \dev\laser. The script file
can be modified as necessary.

If the CONFIG$LIB is changed, the lsr_print file must also be changed to


the correct directory.

Paint Jet Printing (HP only)


The Paint Jet printing option is supported only on Hewlett Packard (HP)
platforms. This option outputs a binary image file to the .\hardcopy\pnt
directory. This directory can be changed using the config file option
COPY$LIB. For more information, see the Configuration Files Guide.

In the .\hardcopy\pnt directory there is a script file, pnt_print, which


performs the proper "pcl_trans" command. This command formats and
sends the data to an HP paint jet printer defined as \dev\paintjet. The script
file must be modified, as necessary, for your site. If the CONFIG$LIB is
changed, the pnt_print file must also be changed to the correct directory.

3.4 Screen Copy

Pen Plotter
1. With the image (part, machine, model, etc.) in the work area, select File
| Screen Copy and choose Pen Plotter. Click on OK.

- 49 -
2. The Pen Plot Setup dialog box will be displayed. Choices must be made
for three options: Line Style, Plot Option, and Plotter Name.

Line Style options: No Hidden Lines, Dashed Hidden Lines, Dotted Hidden
Lines, and Wireframe.
Plot Options options: Plot Current World (immediately sends the image to the
default plotter), Save to a File, and Plot a File.
Plotter Name: The default device name will be displayed. If more than one plotter
exists, the user must specify the desired device name.

3. For this example, choose No Hidden Lines for the Line Style, Save to
a File for Plot Option, and click on OK.

4. A Save As dialog box will be displayed. Choose a library from the


Library List. Enter a name for the file and click on OK.

The message window will respond when the file/plot is complete.

Plot Drawing
The Draw | Data I/O | Plot Drawing function works in the same way as
Pen Plotter; however, there is one additional pen plotter option available.

- 50 -
Default Scale offers the user the ability to size the drawing to fit a specified size.

Shared Lib (All Platforms Except IBM)


Using the shared library plotting facility, custom C code may be written to
process the vector information coming from QUEST. This information can
be put into any form, typically the information is placed in a file. The
custom code is written within the shared library. If desired, the shared
library plot routines may communicate directly with a physical device or
another process to pass the information. Once a custom shared library has
been created, use the following steps to produce a shared library plot:

1. With the image (part, machine, model etc.) in the work area, select File |
Screen Copy and choose Shared Lib. This sends wireframe information
to the routines in the shared
library.

Click on OK.

2. Accept the default values in the Pen Plot Setup dialog box. All the Line
Style options for a Pen Plotter are available for a Shared Library plot.
However, the data is always plotted to a file.

3. A File Name dialog box appears, prompting for a path and file name.
The file name entered is appended to ../hardcopy/user/. This file name
may not be necessary, but it is passed to the user-shared library codes. In
this manner, user-defined plot files are produced in subdirectories below
../hardcopy/user/.

4. Scale the coordinates for the specific plotter coordinate system. All
coordinates are specified in millimeters.

- 51 -
TIFF File
1. With the image (part, machine, model etc.) in the work area, select File |
Screen Copy and choose the TIFF File option.

Click on OK.

2. The image selection dialog box provides three ways to save the file:

"Full Screen" captures the work area without dialog boxes and without any of the
Context, Page, Title, Action, and World Display buttons.
"Stretch Frame" will capture the portion of the work area selected. Depress the
LMB at the upper left point of the image area to be captured and drag the mouse
down and to the right to "rubber-band" the desired image area.
"Pick Window" will permit the user to capture an image that exists in an external
window.

3. A File Name dialog box will be displayed. Enter a path name and a file
name and click on OK.

4. The message window will respond when the file is complete.

5. Once the desired output is defined, the selected data is converted into a
compressed color TIFF format and is written to a user-specified output
file. The file resides in the directory ../hardcopy/tiff.

Postscript (EPS) File


The steps used to create an EPS file are the same as those used for TIFF.
Choose Postscript from the Screen Copy dialog box.

- 52 -
Laser Printer File (for Hewlett Packard platforms only)
Use the same steps as given for making an TIFF file; however, choose
Laser from the Screen Copy dialog box to create a lsr file of the entire
viewing area.

Paint Jet File (for Hewlett Packard platforms only)


Use the same steps as given for making an TIFF file; however, choose
Paint Jet from the Screen Copy dialog box to create a pnt file of the entire
viewing area.

TIFF File w/alpha


The steps used to create an TIFF file can be used to create a TIFF File
w/alpha image. The difference being the choice of TIFF File w/alpha
from the Screen Copy dialog box instead of TIFF. The Texture Size dialog
box will be displayed. This determines how large the image will be. The
default size is 64 by 64 pixels and changes should be made in increments
of 32. Entering a 0 (zero) for either "Horizontal" or "Vertical" invokes a
dynamic image grabber which can be sized as needed by the user. Depress
the LMB at the upper left point of the image area to be captured and drag
the mouse down and to the right to "rubber-band" the desired image area.

JPEG File
The steps used to create a JPEG file are the same as those used for TIFF.
Choose JPEG File from the Screen Copy dialog box. An additional
Dialog Box will appear which allows the user to define the quality of the
image. When the Quality Factor dialog box appears, enter a value from 0
to 100.

3.5 Capture Image


This feature is used in conjunction with the Visual File Interface (VFI). It
allows users to replace names for directories, libraries, and files with a
visual image. VFI is turned on and off through the Menu Preferences
dialog box (Pref | Preferences | Environment | Menu). For details on
using this feature, see the VFI tutorial.

- 53 -
CHAPTER 4
QUEST TUTORIAL PRIMER

4.1 Introduction

This chapter consists of two sections - QUEST Modelling Terms and


QUEST CAD Terms.

Some readers will find it valuable to browse through these sections in


order to become familiar with QUEST modelling and CAD terms. To
assist this approach, the CAD terms list has been compiled separately
under the assumption that CAD browsing can be identified as a separate
activity from modelling browsing.

During the tutorials, terms are explained as they are introduced. However,
they are not re-explained every time they are used, hence the availability
of a reference list.

4.2 QUEST Modelling Terms

This section lists and describes the major QUEST modelling and terms
used throughout the QUEST documentation set and software. Also
included are advanced modelling terms used in the Costing and Automated
Storage and Retrieval Systems (ASRS) chapters. The terms are arranged in
alphabetical order for ease in accessing them. If a term can be used in
more than one category, the description will reference those categories,
e.g., decision point can be found under AGV decision point, conveyor
decision point, etc.

The section for QUEST CAD terms follows this section. The assumption
is that the reader who requires the definition of a term will already know if
it is a CAD term or a modelling term.

- 54 -
Accessory Class
An accessory class is a set of accessory elements that relate to the same
class level set of data, e.g., display geometry. An accessory class can be
saved with a model file or in a separate file so as to allow its use with
different models.

Accessory Element
Accessory is an element with static geometry provided for visualization
purposes, and has no effect on the simulation results.

AGV (Automated Guided Vehicle)


See Automated Guided Vehicle.

AGV Class
An AGV class is a Material Handling System (MHS) element class. It is a
set of AGV elements that relate to the same class level set of data, e.g.,
display geometry, acceleration, deceleration, process logic. An AGV class
definition can be saved with the model file, or in a separate file so as to
allow its use with different models.

AGV Command
An AGV command is an instruction to an AGV to perform some action
given by the AGV controller and AGV decision points. AGV commands
are processed in the AGV process logic. Users can create their own
commands.

AGV Controller
An AGV controller is an MHS element. It is used to globally control one
or many AGV classes with respect to a set of AGV decision points. Each
AGV class and decision point can only belong to one controller. An AGV
controller is defined within an AGV controller class which has an
associated process logic that controls the behavior of the AGV controller
elements within the class.

- 55 -
AGV Controller Class
An AGV controller class is an MHS element class. It is a set of AGV
controller elements that relate to the same class level set of data, e.g.,
display geometry, move mode, path mode, process logic. An AGV
controller class definition can be saved with the model file, or in a separate
file so as to allow its use with different models.

AGV Controller Event


An AGV controller event is a notification to a controller that some event
has occurred involving its AGVs. In general, AGV controller events are
processed by the AGV controller and/or associated decision points either
with the AGV or with the decision point at which the event occurred.
However, the decision point logic can also be defined as a local controller
to process the event.

AGV Decision Point


An AGV decision point is an MHS element. It is a location on an AGV
path segment and can have associated characteristics. It can have an input
and an output connection. At an input connection, one or more parts can
be loaded onto an AGV that is at the decision point. At an output
connection, one or more parts can be unloaded from an AGV that is at the
decision point. An AGV decision point is defined within an AGV decision
point class. By default, the behavior of an AGV at an AGV decision point
is controlled by the associated AGV controller class process logic.
Assignment of process logic at an AGV decision point will override the
AGV controller process logic.

AGV Decision Point Class


An AGV decision point class is an MHS element class. It is a set of AGV
decision points that relate to the same class level set of data, e.g., display
geometry, controller, decision point logic. An AGV decision point class
definition can be saved with the model file, or in a separate file so as to
allow its use with different models.

- 56 -
AGV Path
An AGV path is an arrayed list of AGV path segments and AGV decision
points that define how an AGV is going to get to its destination from its
current position. The array is dynamic in that as a path segment is exited
or a decision point passed, that entity is removed from the AGV path. An
AGV path is therefore a temporary and dynamic set of data. It is to be
distinguished from an AGV path system.

AGV Path System


An AGV path system is an element. It consists of a list of AGV segments
that defines a layout. It can contain AGV decision points located on AGV
segments. An AGV path system is an element and is to be distinguished
from an AGV path which is a dynamic data attached to AGV while it is
moving. AGV path system is defined within a AGV path system class.

AGV Path System Class


An AGV path system class is an MHS element class. An AGV path system
class can have only one AGV path system element which relates to the
class level set of data, e.g., display geometry, maximum speed, direction,
etc. An AGV path system class can be saved with a model file or in a
separate file so as to allow its use with different models.

AGV Segment
An AGV segment is an entity. It is a straight line or curve section of AGV
path system. AGV segments make up AGV path systems on which AGVs
can travel. An AGV decision point must always be located on an AGV
segment. An AGV segment is defined within an AGV path system.

Aisle
An aisle is a representation of a set of racks that are usually contiguous.
Racks are made up of bins and are used for storage. This is an advanced
modelling term.

ASRS
Abbreviation for Automated Storage and Retrieval Systems.

- 57 -
Automated Guided Vehicle (AGV)
An AGV is an MHS element. It represents a predefined material handling
construct that can transport multiple parts from one AGV decision point to
another. AGVs are created within a class. An AGV is defined within an
AGV class. The behavior of an AGV is controlled by a combination of its
AGV class process logic, working alongside its AGV class AGV controller
class process logic and/or by decision point logic for any AGV decision
point that it encounters.

Batch Control Language (BCL)


Batch Control Language (BCL) is a command script language that can be
used to build/modify and/or run QUEST simulations. For detailed
information see the BCL Reference Manual.

Bay
The column number of a column of bins in an aisle. Bins are used for
storing the parts. This is an advanced modelling term.

BCL (Batch Control Language)


See Batch Control Language.

Bin
A bin is a storage location that can hold one or more parts. This is an
advanced modelling term.

Buffer
A buffer is an element. It is used to represent a storage location for parts in
a model. A buffer can have a capacity and a user-defined initial stock level
for each part class. A buffer is defined within a buffer class. A buffer
element behavior is defined by the associated buffer class process and
route logic.

- 58 -
Buffer Class
A buffer class is an element class. It is a set of buffers that relate to the
same class level set of data, e.g., display geometry, maximum capacity,
process logic, route logic. A buffer class definition can be saved with the
model file, or in a separate file so as to allow its use with different models.

Carrier
A carrier is an MHS element. Carriers are located and travel on the power
and free segments. All carriers belong to a common class that has the
common information such as display geometry, capacity, etc.

Carrier Class
A carrier class is an MHS element class. It is a set of carrier elements that
relate to the same class level set of data, e.g., display geometry, stopping
space, capacity, etc. A carrier class can be saved with a model file or in a
separate file so as to allow its use with different models.

Class
See Element Class.

Class Connections
The connection mechanism also includes class connections in a model.
When the class connection is defined between two particular classes the
parts are routed from one class of elements to another class.

Part input logic is normally called to decide the destination of a part to a


particular element when the class connections exist between two classes of
elements.

Connection (Pull and Push)


The push connections are the connections between elements/classes to
transfer the parts downstream. The two sections (element connections and
class connections) refer to push connections.

- 59 -
For the propagation of the requests upstream, the pull connections exist
between elements and classes. Just as the regular push connection acts as a
channel for transferring parts downstream, a pull connection is the conduit
for requests traveling upstream in a system. In general, pull connections
are made in the reverse order of push connections. However, pull
connections are not mandatory. In the absence of a pull connection, the
reverse of push connection is used to send requests. Pull connections are
useful in sending requests to elements from which a direct push
connection to an element does not exist.

Similar to the push class connections, pull connections can also be made at
the class level. When a request is dispatched to a class, the "Request Input
Logic" set on the class decides which element within the class actually
receives the request. This logic is executed whenever a request is
dispatched to the class. "Request Input Logic" is analogous to "Part Input
Logic" for transferring parts. An element class can have pull connections
either all at the element level or all at the class. Class and element pull
connections cannot be mixed and matched.

Conveyor
A conveyor is an element. It is a transportation device that allows parts to
move on it. A conveyor has a geometry on which conveyor via points are
located that define the direction of flow and the orientation of parts as they
move. A conveyor may contain conveyor decision points. A conveyor is
defined within a conveyor class. A conveyor behavior is defined by the
associated conveyor class process and route logics as well as the process
logic of the decision point class of any decision points that are located on
the conveyor.

Conveyor Class
A conveyor class is an element class. It is a set of conveyors that relate to
the same class level set of data, e.g., display geometry, maximum capacity,
speed, process logic, route logic. A conveyor class definition can be saved
with the model file, or in a separate file so as to allow its use with different
models.

Conveyor Decision Point


A conveyor decision point is an MHS element. It is located on a
conveyor/extruded conveyor and it has a set of characteristics. It can have

- 60 -
an input and/or an output connection. At an input connection, one or more
parts can be loaded onto the conveyor. At an output connection, one or
more parts can be unloaded from the conveyor. Conveyor decision points
are defined within a conveyor decision point class. A conveyor decision
point is controlled by the decision point logic of its associated conveyor
decision point class.

Conveyor Decision Point Class


A conveyor decision point class is an MHS element class. It is a set of
conveyor decision points that relate to the same class level set of data, e.g.,
display geometry or decision point logic. A conveyor decision point class
definition can be saved with the model file, or in a separate file so as to
allow its use with different models.

Conveyor Via Path


Conveyor via path defines the movement and orientation of parts on the
conveyor. The length of the via path is usually the length of the conveyor.
The conveyor via path is defined between the starting and ending
conveyor via points. Additional via points can be added to the via path and
their position/orientation can be modified.

Conveyor Via Point


A conveyor via point is an entity. It is a location on the conveyor. The via
path between two conveyor via points determines the position and
orientation of a moving part.

Coordinate System (Coorsys)


This is a CAD term. It is also included here because it is referenced in the
chapter The QUEST User Interface.

Coordinate system is abbreviated to coorsys in most cases. A coorsys is


one example of a frame - see Frame definition in this section.

The term means a set of X, Y, Z axes with a specific location and


orientation in space. All geometries have a base coordinate system that is
used to manage the mathematical relationships involved in the computer
representation of the geometry. On occasion a geometry may have more
than one coorsys.

- 61 -
Coorsys
This is a CAD term. It is also included here because it is referenced in the
chapter The QUEST User Interface. See Coordinate System.

Cost Center
A cost center is a QUEST element that performs some activity that is of
importance to the costing analysis, e.g., a source producing parts. This is
an advanced modelling term.

Cost Driver
The cost driver represents a measure of consumption of some element,
e.g., machine utilization in hours. This is an advanced modelling term.

Cost Driver Rate


The cost driver rate represents the conversion of consumption measure to
a cost measure. It converts the cost driver term to a cost measure, e.g., $24
per hour for machine busy time. This is an advanced modelling term.

Cost Variable
The cost variable represents the source of cost expenditure, e.g., power
consumed by a machine based on the machine busy time. This is an
advanced modelling term.

Crane
A crane is an MHS element that moves in an aisle storing and retrieving
parts. Cranes are used to carry parts between the pick-up and drop-off
stations and the storage bins. This is an advanced modelling term.

Cycle Process
A cycle process is a set of data, usually entered via the GUI, that
represents production time (busy state) for a machine. A cycle process has
a set of requirements for parts, AGV, and labor that must all be present
before the machine starts the cycle process. A cycle process has a time,

- 62 -
which can be sampled from a distribution each time the cycle is used that
specifies how long the process will take. A cycle process also can specify
what parts are produced by the process on its completion. A cycle process
can be saved with the model or as a separate file so as to allow its use with
other models. A cycle process can be associated with many machines.

Daily Schedule
The daily schedule is the shift schedule describing the length of the
operating shift and the corresponding breaks for a 24-hour period. The
daily schedule can be applied to classes to define the time patterns of the
operations of the elements of the class.

A daily schedule can contain several breaks that define the time breaks
that are non-operational times in a day.

Decision Point
A decision point is an MHS element. A decision point is either an AGV,
power and free, labor or conveyor decision point. For more information,
see the definitions for these terms: AGV Decision Point, Conveyor
Decision Point, Labor Decision Point, Power and Free Decision Point.

Distributions
When modelling a stochastic (random) event inside of QUEST,
distributions are used to represent the probability of a given outcome
occurring. The distributions available in QUEST are:

Constant Normal Erlang

Uniform Triangular Lognormal

Exponential Poisson Weibull

Gamma Beta

QUEST also allows distribution data to be based on a Simulation Control


Language (SCL) routine, or a list of values in a file, or a user-defined
probability distribution.

- 63 -
Drop-Off Station
A drop-off station is a location where a crane can drop off a part retrieved
from a storage bin. This is an advanced modelling term.

Element
An element is a subset of the statically created entities used to build a
model. An element has a type; e.g., it can be a sink, a source, etc. The term
element is also used to include MHS elements which are regarded as a
subset of elements. An element is defined within an element class. Parts,
which are the dynamic entities of the model, are created, transported,
stored, processed, and deleted by different types of elements.

Element Class
An element class defines a set of related elements. An element class has a
type; e.g., it can be a sink class, a source class, etc. The term element class
is also used to include MHS element classes which are regarded as a
subset of element classes. Each element class type has a set of data that is
specified at the class level and inherited by its elements. Class process
logic and route logic defines the behavior of its elements. Changes to the
class level data is immediately inherited by its elements. Some classes can
have connections that are termed class connections. Classes with input
class connections can have input logic in order to distribute incoming parts
between elements of the class. A class definition can be saved with the
model file, or in a separate file so as to allow its use with different models.

Element Connections
The connection is a mechanism to logically connect the elements for the
flow of parts in a model. In an element connection an element is connected
to another element. The input/output of a particular element are created
dynamically as new connections are made. The connections can be made
between like entities, i.e., class to a class and an element to an element.

Entity
Entity describes any physical component of a model. It includes part,
element, MHS element, controller, path system, path segment, decision
point, group, way point, labor via path, device, coorsys.

- 64 -
Extruded Conveyor
An extruded conveyor is an element. It can be a straight line or curve
section and is created by the layout method. Parts can travel on the
extruded conveyor. A conveyor decision point can be located on an
extruded conveyor. Extruded conveyors have the same properties and
behavior as regular conveyors.

Extruded Conveyor Class


An extruded conveyor class is an element class. It is a set of extruded
conveyor elements that relate to the same class level set of data, e.g.,
display geometry, maximum capacity, speed, process logic, route logic,
shifts, failures, etc. A conveyor class definition can be saved with the
model file, or in a separate file so as to allow its use with different models.

In all the sections in this chapter relating to conveyors, the reference to


conveyor will refer to both the extruded and non-extruded conveyors.

Failure Class
A failure class represents information on a failure and repair pattern. The
failure distribution specifies the time between failures. There is an
associated repair process that specifies the time for a repair, by a repair
time distribution. Time between failures and time to repair are independent
distributions. Multiple failures can occur at the same time. A failure
definition can be saved with the model file, or in a separate file so as to
allow its use with different models. Failure classes are assigned to element
classes that are inherited by individual elements.

Frame
A frame is an entity. Frames are either way points or coorsys. A frame is
really a CAD term, however it is included here as well as in the section
QUEST CAD terms because the introductory chapter The QUEST User
Interface refers to a frame. A frame is a location in space (X, Y, Z) and an
orientation (yaw, pitch, and roll). A frame is most often used to identify the
location and orientation of a geometry in order to allow translation or
rotation of the geometry.

- 65 -
Graphical User Interface (GUI)
This is the visual and interactive mechanism by which QUEST models can
be built and run. See the chapter The QUEST User Interface for further
details.

Group
A group is an entity. Each group is associated with a group type. It is a
collection of elements. A group can be translated or rotated as a single
geometric unit. A decision point group can be used to assist in controlling
the routing of AGV/labor elements to AGV/labor decision points. A
decision point group can have a type and associated data that can be used
in AGV/labor routing decisions.

Group Type
All the groups are assigned to a group type. Users can create their own
group types by specifying the name, the entity type the group will hold
(elements or AGV decision points) and the association (single/multiple).
The association specifies whether single or multiple groups of this type
can be assigned to an element.

GUI (Graphical User Interface)


See Graphical User Interface.

Labor
Labor is an MHS element. It represents a predefined material handling
construct that can transport multiple parts between the elements and that
may be required at elements for a process to be performed. The QUEST
labor element resembles the laborers working on the factory floor
transferring parts between the elements for various operations and running
machines. In QUEST the labor can transport instantaneously (beam)
between the elements, delay for a time, and then beam between elements,
move smoothly on a labor via path, or move smoothly on a labor path
system. Labor is defined within a labor class. The behavior of a labor
element is controlled by the process logic of its labor class working
alongside the process logic of its labor controller class, together with the
process logic of any labor decision point that it encounters.

- 66 -
Labor Class
A labor class is an MHS element class. It is a set of labor elements that
relate to the same class level set of data, e.g., display geometry, speed,
process logic. A labor class definition can be saved with the model file, or
in a separate file so as to allow its use with different models.

Labor Command
A labor command is an instruction to a labor element to perform some
action normally given by the labor controller. Labor commands are
processed in the labor process logic. Users can create their own
commands.

Labor Controller
A labor controller is an MHS element. It is used to globally control one or
many labor classes with respect to a set of elements. Each labor class and
any labor element can only belong to one labor controller. A labor
controller is defined within a labor controller class. The behavior of a
labor controller is defined by the process logic of its labor controller class.

Labor Controller Class


A labor controller class is an MHS element class. It is a set of labor
controller elements that relate to the same class level set of data, e.g.,
display geometry, speed, move time mode, process logic. A labor
controller class definition can be saved with the model file, or in a separate
file so as to allow its use with different models.

Labor Decision Point


A labor decision point is an MHS element. It is a location on a labor
segment and can have associated characteristics. It can have an input
and/or an output connection. At an input connection, one or more parts can
be loaded onto a labor element that is at the decision point. At an output
connection, one or more parts can be unloaded from a labor element that is
at the decision point. Labor decision points are defined within a labor
decision point class. The behavior of labor at a labor decision point is
controlled by default by the associated labor controller's process logic
working alongside the associated labor class process logic. A labor

- 67 -
decision point's class can also have a process logic, which will override
the labor controller class process logic for that labor decision point.

Labor Decision Point Class


A labor decision point class is an MHS element class. It is a set of labor
decision points that relate to the same class level set of data, e.g., display
geometry, controller, decision point logic. A labor decision point class
definition can be saved with the model file, or in a separate file so as to
allow its use with different models.

Labor Path
A labor path is an arrayed list of labor segments that defines how a labor is
going to get to its destination from its current position. The array is
dynamic in that as a path segment is exited or a decision point passed, that
entity is removed from the labor path. A labor path is therefore a
temporary and dynamic set of data. It is to be distinguished from a labor
path system.

Labor Path System


A labor path system is an element. It consists of a list of labor segments
that defines a layout. It can contain labor decision points located on labor
segments. A labor path system is an element and is to be distinguished
from a labor path which is a dynamic data attached to AGV while it is
moving.

Labor Path System Class


A labor path system class is an MHS element class. A labor path system
class can have only one labor path system element that relate to the class
level set of data, e.g., display geometry, maximum speed, direction, etc. A
labor path system class can be saved with a model file or in a separate file
so as to allow its use with different models.

Labor Point
A labor point is an entity. It is a location at each element. An element can
have one/or more labor points. When a labor arrives at an element it is
placed at the first available labor point.

- 68 -
Labor Segment
A labor path segment is an entity. It is a straight line or curve section of
labor path system. Labor segments make up labor path systems on which
labor elements can travel. A labor decision point must always be located
on a labor segment. A labor segment is defined within a labor path system.

Labor Via Point


A labor via point is an entity. It is a location in space that determines a
moving labor element's position and orientation.

Lane
A lane is a path for a crane to move along, usually between two facing
racks. This is an advanced modelling term.

Load Process
A load process is a set of data, usually entered via the GUI, that represents
loading time for an element that supports loading. A load process has a
time, which can be sampled from a distribution each time the process is
used, that specifies how long the process will take if not interrupted. A
load process can be saved with the model or as a separate file so as to
allow its use with other models.

Logic
Logic is the name for simulation rules written in Simulation Control
Language (SCL). Logic is distributed among the elements in the model.
Logic governs the behavior of the model. Many common logics are
predefined and their SCL is provided. Users may write their own logic
using SCL.

Machine
A machine is an element that behaves much as a physical machine does. It
can use parts, labor, or AGVs to perform a time-taking cycle process that
produces parts. It can undergo setups, breakdowns, and repair, as well as
processing parts. A machine is defined within a machine class. The

- 69 -
behavior of a machine is controlled by the data, process, and route logic of
its associated machine class.

Machine Class
A machine class is an element class. It is a set of machine elements that
relate to the same class level set of data, e.g., display geometry, process
logic, associated processes. A machine class definition can be saved with
the model file, or in a separate file so as to allow its use with different
models.

MHS
Abbreviation for Material Handling System.

MHS Element
MHS element describes a subset of elements such as AGVs, labor, carrier.

MHS Element Class


An MHS element class contains MHS elements of the same type as the
MHS element class. The elements within a class have a set of data that
they all use, e.g., geometry, logic. MHS element class is a subset of
element class. MHS element class data can be saved with the model file or
separately so as to allow its use with other models.

MHS Template
The MHS template is a set of attributes for a MHS/crane. This is an
advanced modelling term.

Multi-day Schedule
This schedule is a collection of daily schedules. The user has the option of
creating different daily schedules and then creating a multi-day schedule
with the daily schedule attached to the particular day. To create a multi-
day schedule at least one daily schedule must be defined.

- 70 -
Part
A part is an entity that is created dynamically as the simulation runs. It
moves between elements and is processed by the system. Parts are usually
generated at sources or as a result of a machine process. Parts are usually
destroyed by the sinks or as a result of a machine process.

Parts are the entities in a discrete-event model which receive "services"


from elements, or are "processed" by them. Parts are the material and/or
information flowing through the system over time and are explicitly
represented by geometries. Part classes which specify various attributes,
such as appearance and priority, may be defined by the user. Part classes
are created during the model build phase. Parts are created and destroyed
during the model run phase. A part class definition can be saved with the
model file, or in a separate file so as to allow its use with different models.

Part Class
It is a set of parts that relate to the same class level set of data, e.g.,
geometry. A part class definition can be saved with the model file, or in a
separate file so as to allow its use with different models.

Pick-Up Station
The pick-up station is the location where the crane can collect a part to be
stored. Pick-up stations are usually modeled as buffers. This is an
advanced modelling term.

Power and Free Class


A power and free class is an MHS element class. A power and free class
can have only one P&F element that relates to the class level set of data,
e.g., display geometry, speed, dog spacing, shifts, failures, etc. A power
and free class can be saved with a model file or in a separate file so as to
allow its use with different models.

Power and Free Decision Point


A power and free decision point is an MHS element. It is a location on a
power and free segment and can have associated characteristics. It can
have an input and/or an output connection. At an input connection, one or

- 71 -
more parts can be loaded onto a carrier that is at the decision point. At an
output connection, one or more parts can be unloaded from a carrier that is
at the decision point. A power and free decision point is defined within a
power and free decision point class. The behavior of a power and free
decision point is controlled by the process logic of the associated power
and free decision point class.

Power and Free Decision Point Class


A power and free decision point class is an MHS element class. It is a set
of power and free decision points that relate to the same class level set of
data, e.g., display geometry, process logic. A power and free decision point
class definition can be saved with the model file, or in a separate file so as
to allow its use with different models.

Power and Free Segment


A power and free segment is an entity. It is a straight line or curve section
of power and free system. Power and free segments make up power and
free systems on which carriers can travel. A power and free decision point
must always be located on a power and free segment. A power and free
segment is defined within a power and free system.

Power and Free System


A power and free system (sometimes referred to as P&F) is an element. It
is an arrayed list of power and free segments that defines a network of
power and free segments. Power and free decision points and carriers are
located in the P&F system.

Process
A process is a set of data, usually entered via the GUI, that controls time-
taking activities for model elements. There are different types of
processes: cycle, load, unload, repair, setup. A process can be assigned to
more than one element classes. A process definition can be saved with the
model file, or in a separate file so as to allow its use with different models.
A process definition includes part/AGV/labor requirements, process time,
and products.

- 72 -
Rack
A rack is a set of bins used for storing the parts. This is an advanced
modelling term.

Random Number Stream


See Stream.

Repair Process
A repair process is a set of data, usually entered via the GUI, that
represents repair time for an element. A repair process has a time, which
can be sampled from a distribution each time the process is used, that
specifies how long the process will take. A repair process can be saved
with the model or as a separate file so as to allow its use with other
models. Each repair process is associated with a Failure class.

SCL (Simulation Control Language)


See Simulation Control Language

Setup Process
A setup process is a set of data relating to a setup on a machine. A setup
process operates on a machine. It can be assigned to be triggered before a
cycle process depending on which cycle process has just been completed
and upon which cycle process is about to start. A setup process can be
saved with the model or as a separate file so as to allow its use with other
models. Setup processes are associated with machine classes.

Shift
A shift is a set of data that defines an availability pattern over time that
specifies when an element class is available to perform work. Shift can be
defined as a daily or a multiday schedule. Daily schedules are made up of
shift breaks; multiday schedules are made up of daily schedules.

- 73 -
Simulation Control Language (SCL)
Simulation Control Language (SCL) is a programming language that can
be used to make a running model behave according to the logical rules in
the SCL program. For detailed information see the SCL Reference Manual.

Sink
A sink is an element. It can operate in a push or in a pull mode. In a push
mode, it is a passive element, receiving parts, deleting them from the
simulation and generating statistics. In a pull mode, a sink can generate
requests for parts based on an inter-request time (IRT). In this mode, a sink
can have a maximum number of part requests and a start time for its first
request. A sink has a process logic but no route logic. A sink is defined
within a sink class. The behavior of a sink is controlled by the process of
its sink class.

Sink Class
A sink class is an element class. It is a set of sinks that relate to the same
class level set of data, e.g., geometry, push/pull mode, logics. A sink class
can be saved with the model or as a separate file so as to allow its use with
other models.

Source
A source is an element. It can operate in a push or in a pull mode. In a pull
mode, it is a passive element, receiving part requests, creating the parts as
requested, entering them into the simulation and generating statistics. In a
push mode, a source can generate parts based on an inter-arrival time
(IAT). In this mode a source can be constrained to the creation of a
maximum number of parts and a start time for its first part creation. A
source has process logic and route logic. The behavior of a source is
controlled by the process and route logic of its source class.

Source Class
A source class is an element class. It is a set of sources that relate to the
same class level set of data, e.g., geometry, push/pull mode, logics. A
source class can be saved with the model or as a separate file so as to
allow its use with other models.

- 74 -
Stack Point
A stack point is an entity. It represents a location in space where parts can
stack. Each element has a stack point where the parts are placed after
animation.

Storage Class
A storage class is a set of storage domains to which part class storage rules
can be applied. This is an advanced modelling term.

Storage Domain
A storage domain is a set of bins to which common storage rules can be
applied. This is an advanced modelling term.

Stream (Random Number Stream)


QUEST allows the user to create an unlimited number of random number
streams. These streams can be referenced whenever a stochastic (random)
probability distribution is applied. The default setting for QUEST is 10
random number streams. Please see the Configuration Files Guide for a
discussion of the .qenvfig file and how to add additional random number
streams by default.

Tier
A tier is the row number of a row of bins in an aisle. This is an advanced
modelling term.

Unload Process
An unload process is a set of data, usually entered via the GUI, that
represents unloading time for an element class. An unload process has a
time (which can be sampled from a distribution each time the process is
used) that specifies how long the process will take. An unload process can
be saved with the model or as a separate file so as to allow its use with
other models.

User Interrupts

- 75 -
User interrupts are user-defined interrupts that may be scheduled to occur
during simulation run time. The interrupt may be raised for any element in
the QUEST model. With this mechanism, elements may be interrupted
from their current operation and instructed to perform some other task. For
example, a machine that is busy processing, i.e., busy executing a work
statement, may be interrupted in the middle of the work, and instructed to
execute some other process.

Via Point
A via point is an entity. It represents a location in space that determines a
moving element's position and orientation. There are two types of via
points - labor and conveyor. See Labor Via Point or Conveyor Via Point
for more information.

Way Point
Way points are entities that represent a three-dimensional point in space
along with an orientation (X, Y, Z, yaw, pitch, and roll). Way points do not
exist freely, they are associated with an element or a path. A way point is a
type of frame. Way points come in several varieties, each with a specific
purpose and display characteristic for identification purposes. The way
points in the system are: stack points, via points, labor points.

4.3 CAD Modelling Terms

The terms are not listed alphabetically but are presented in a manner
which builds on information.

Vertex
A vertex is an X, Y, Z coordinate that is stored in the database. It is the
fundamental primitive entity from which all other entities are composed.

Point

- 76 -
A point may or may not be a vertex. In many functions, when prompted to
indicate a point, the current "Indicate Point Mode" determines what may
be indicated. For example, a location along an edge might be chosen, or an
arbitrary location on a surface might be chosen, regardless of the existence
of a vertex at that location.

Splat
A splat is a three-dimensional cross hair that provides feedback when a
point or vertex is indicated.

Line
A line is a straight segment connecting two vertices and is represented on
the screen as "wireframe". Mathematically, a line has no area.

Polygon
A polygon is a bounded plane defined by an ordered set of vertices lying
in the plane. It must be convex and may have up to 128 sides.

Edge
The edge forms the boundaries of a polygon and may be free or shared by
two polygons.

Polyline
A polyline is as a set of connected line segments in the same subobject that
terminates at a fork, or at a segment whose interior angle (formed with the
previous segment) is less than the minimum interior angle specified in the
CAD modes function. The term polyline specifically refers to connected
lines that are not part of a B-spline curve entity. Certain CAD context
functions utilize the concept of a polyline, such as Del Line and Mov
Line.

Curve

- 77 -
A curve is any connected set of lines. These may be a polyline, or the
"flesh" of a B-spline curve. A B-spline curve is a mathematical definition
of a spatial curve that is represented by line segments. B-splines in
QUEST are "NURBS" (Non Uniform Rational B-splines), and may be
manipulated in ways different from polylines. B-splines may be rebuilt to
finer or coarser display levels, and may be frozen into polylines. Any
function referring to a curve will allow the selection of a B-spline or a
polyline. Most functions will use the exact mathematical curve when a B-
spline is selected. Some functions may only use the line segment
information, ignoring the B-spline information.

Surface
A surface can be either a polygon or NURBS-based mathematical surface
represented with polygonal facets. As with curves, functions in the system
automatically perform the appropriate type of evaluation based on the type
of surface selected. The only time a distinction is made is for certain
functions that are polygon specific, such as Del Poly and when snapping
with "Center On Polygon = YES".

Vector
Vectors are not geometric entities but are used by certain functions in a
transient fashion. They are characterized by a direction (three numbers),
and a magnitude.

Axis
An axis is similar to a vector except that there is no magnitude.

Plane
A plane is a non-geometric entity and is used in a transient manner. It is
characterized by a direction (three numbers - A, B, C) and an offset from
the origin (D). These four numbers define a locus of points in space
satisfying the equation: Ax + By + Cz + D = 0.

Coorsys

- 78 -
A coorsys represents a three-dimensional point in space along with an
orientation. A coorsys is created, manipulated, and deleted from the CAD
context. (A coorsys cannot be manipulated from any other context.) A
coorsys is used for attaching one part to a second part when creating
devices. They can also be used to define the positioning of way points on
objects created in the CAD world and introduced (through creation or
modification of elements) in the model world. When element geometry is
introduced into the model, the translational and rotational position of the
coorsys defines the default position of the way point.

Base Coorsys
Each object (defined below) has one coorsys called its base coorsys. All
geometric entities composing the object are defined relative to this
coordinate system and object manipulations occur with respect to it.

Text
Text is represented with wireframe rendering in a font provided by
DELMIA. It is a special kind of geometric entity and should not be
confused with other forms of text in the system.

Sub object
A sub object is an arbitrary collection of polygons, lines, surfaces, curves,
and text. For example, when a block is created using the CAD | Create |
Create | Block button, an object is created that contains one sub object,
which in turn contains the polygons making up the block. If the block is
then cut, there will be two new objects, each with one sub object. If the cut
block is merged, there will be one object, but it will now contain two sub
objects.

Object
An object is an entity that is typically created in the CAD context and is
composed of sub objects and coorsys. All objects in the CAD world are
automatically merged together and saved as a single part when save is
executed from CAD.

Part

- 79 -
Parts are named entities that are typically created in the CAD context
when save is executed. CAD parts are used as building blocks when
creating a device. This CAD part is to be distinguished from the part
defined while building a QUEST model.

Device
Devices are named entities that are created automatically when elements
are created, or are imported from DELMIA's other products (IGRIP, VNC,
etc.). Devices in QUEST are generally single parts; devices imported from
IGRIP (via a QUESTCELL) may be multiple, possibly moving parts.
Most QUEST elements are single devices; however, machines may be
multiple devices depending on the definition of the element.

Joints, Links, DOFs


Joint refers to the axis of motion between rigid links, which are parts.
Each joint is a degree-of-freedom (DOF). The Model | Kin page is used to
create multiple DOF elements in QUEST.

- 80 -
CHAPTER 5
CREATE LIBRARY

This tutorial will create a new data library and config file. The new library
will be where all work created in tutorials in this manual will be stored and
saved to. If needed, refer to the installation guide for more information on
directory structure.

5.1 Custom Option

This section will describe how to create the needed config file and data
library while in QUEST.

1. Select File | Make Lib. The Make Library Creation Mode dialog box
appears. With the LMB, choose Custom and click on OK.

2. The Make Library (Custom) dialog box appears and the message
window prompts for the library path name and config file name. The
Library Path Name is the path where the directories for the user's library
are to be placed. The entry in the dialog box is the default for the library
path name. Enter c:\deneb\QTUTORlib for the library path name. Enter
c:\deneb\quest\CONFIGS\qtutor for the config file name. Click on OK.

NOTE: The Library Directories dialog box contains over three dozen library path
names. Because it is so long, it will be necessary to scroll through it to find all the path
names that need to be toggled. Figure 5-1 shows three sections of the whole list. It would
NOT appear like this on the workstation screen.

3. The Library Directories dialog box appears. Any default directories will
be indicated as Yes. To create new directories, toggle No to Yes. Complete
the dialog box as shown.

- 81 -
Figure 5-1 Library Directories Windows
In this dialog box the directories that come up with default option as "Yes" are the
most commonly used in the QUEST models.
When finished, click on OK. A message window appears which confirms the
library creation. It also confirms that the config file has been created and
appended.

4. To verify the contents of the created library, select File | Select File.
Choose c:\deneb\QTUTORlib\ from the Select File dialog box.

- 82 -
5.2 Default Option

1. Select File | Make Lib. The Make Library Creation Mode dialog box
appears. With the LMB, choose Default and click on OK.

2. The message window displays the default library path name and the
default config file path name as shown below:

3. The Make Library (Default) dialog box appears and prompts for the
Library and Config Name. Complete this dialog box as shown below and
click on OK.

4. This will create the data library in c:\deneb\qtutor\ and the config file
created is c:\qconfigs\qtutor. The message window confirms the creation
of the library and config file.

Appending Config Files


Select File | Append Config File. The Select File dialog box appears.
Choose c:\qconfigs\qtutor as the config file to be appended and click on

- 83 -
OK. The message window confirms that the config file has been
appended.

NOTE: In the default option, QUEST creates the library and the config file in the path
names specified as defaults; in the custom option the user is prompted to input the library
path name and the path name for the config file. Also, with the default option all the
library directories are created; in the custom option the user has the option to pick the
directories to be created by toggling No to Yes. For further information see the QUEST
Configuration Files Guide.

- 84 -
CHAPTER 6
BASIC CONSTRUCTS I

Introduction
This lesson will introduce the basic modelling constructs used to develop a
QUEST simulation model. In this tutorial, the concepts of a part class and
element class are used to build a simple straight-through processing
system. System defaults will be used widely throughout this lesson to
demonstrate the ease with which QUEST modules can be built.

A part class can be defined to create a number of parts having the same
properties. A part is an entity that moves between elements and is
processed by the system. Parts are generated at sources or as a result of a
machine process. Parts are consumed by sinks or as a result of a machine
process.

Similarly, an element class can be defined to create a number of elements


having the same properties. Elements are the basis of how QUEST models
systems. Different types of elements include AGVs, AGV path systems,
buffers, controllers, conveyors, labor, power and free path systems,
sources, sinks, and machines.

Displaying QUEST
Once QUEST is "launched", the QUEST window and QUEST 3D window
will use only about two-thirds of the screen. The 3D window is used for
the three-dimensional graphics simulation. For best visual results, expand
the QUEST Window and the 3D window to fill the screen.

Messages
The user is strongly encouraged to monitor the messages appearing in the
message window at every step throughout this tutorial. These messages
will confirm actions completed, prompt the user for additional action, or
prompt the user that an action is unsuccessful.

Set Up

- 85 -
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

- 86 -
6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

Create a Part Class


A part class to be used in this model can be created. Select Model | Build |
Part Class | Create/Modify. Use the default settings in the Part Class
dialog box and click on OK.

- 87 -
Figure 6-1 Sample Model with Elements

Create a Source
One source, which is an element as previously mentioned, will be created
for this model to serve as a mechanism by which the parts can enter the
model.

1. Select Model | Build | Element Class | Source. The Source dialog box
will appear.

- 88 -
To define the inter-arrival time for the source, select the IAT button. Choose
Exponential from the Distributions list and click on OK. In the Exponential
dialog box, change the Mean to 25, and the Starting Stream to 1. Click on OK to
close this dialog box and click on OK in the Source dialog box.
The message window now displays "Element <Source1_1> Created. Select a
location on the floor/2D window for <Source1_1>."

NOTE: Source1 is the name of the class, while Source1_1 is the name of one source
which belongs to class Source1. In this particular tutorial only, one source belonging to
class Source1 will be created. Any number of sources belonging to this class could be
created if desired. In general, the only properties that are different between multiple
elements of the same class are their names, location, and connections.

2. See figure 6-1 for the positions of the various model elements to be
created in this model. Use the world display buttons at the bottom of the
screen (Rotate, Cruise, View, etc.) to reorient the screen view in order to
get an overall picture of the working grid. Use the LMB and click on the
approximate location where the source should be positioned.

3. Select Model | Build | Element | Trn. Using the LMB, move the
currently selected Source1_1 across the grid along the X axis or, with the

- 89 -
MMB, move along the Y axis until Source1_1 is properly located. It is
more important to place all the elements in a specific relationship to one
another rather than placing them in absolute locations. If necessary,
elements can be moved at a later time.

Create a Machine
Parts are created at the source and are processed on a machine. This
machine will be created next.

1. Select Model | Build | Element Class | Machine. The Machine dialog


box will appear.

Select the Cycle Process button to further define this machine.

2. Choose New Process in the Select Process dialog box. The Cycle
Process Definition dialog box will be displayed. Select the Cycle Time
button.

- 90 -
3. Choose Normal distribution and click on OK. Enter a Mean of 25 and a
Standard Deviation of 5 secs. To maintain statistical independence set the
Starting Stream Value to 2 and click on OK. Click on OK on the Cycle
Process Definition dialog box. Click OK on the Machine dialog box. The
message window will display:

As before, Machine1 is the name of the class, while Machine1_1 is the


name of a machine which is of the class Machine1. In this tutorial, only
one machine will be created; however, any number of machines could be
created in the class if necessary.

4. Select a location on the floor/2D window for Machine1_1. See figure 6-


1 to see where to place Machine1_1 in relationship to Source1_1. Its
position can be corrected later if necessary.

- 91 -
Create a Sink
A sink will be created to collect the processed parts for their exit from the
model.

1. Select Model | Build | Element Class | Sink. Leave the default settings
on the Sink dialog box and click on OK.

2. One sink will be created named Sink1_1 as the first sink of class Sink1.
Position Sink1_1 as shown in figure 6-1.

Create Buffers
Two buffers will be created for this model: one between Source1_1 and
Machine1_1, and another between Machine1_1 and Sink1_1.

1. Select Model | Build | Element Class | Buffer. In the Buffer dialog box,
change the No. of Elements to 2 and leave all other values as is. Select the

- 92 -
Display button. Set the Color to any available value. In this instance,
Brown was chosen. Click on OK in the Display and Buffer dialog boxes.

Because the Display definition is for the Buffer1 class, both buffers will be
brown.

2. When prompted, position Buffer1_1 between Source1_1 and


Machine1_1. Position Buffer1_2 between Machine1_1 and Sink1_1. Use
the Locate button or the Sel | Trn to move any of the elements until they
are in the proper relationship as shown in Figure 6-1.

Connect the Elements


With the basic process elements defined, the sequence of processes can be
defined to assure the proper flow of parts through the system. Connections
are required between each element to make this happen.

1. Select Model | Build | Connections | Element. The message window


will prompt for a starting element. With the LMB, pick Source1_1. When

- 93 -
prompted, pick Buffer1_1 as the ending element. This completes the first
connection.

2. The message window will prompt for the starting point of the next
connection. Pick Buffer1_1, again, and when prompted to indicate the
ending element, pick Machine1_1. To complete the third connection, when
prompted, pick Machine1_1 as the starting element and pick Buffer1_2 as
the ending element. The last connection is to select Buffer1_2 as the
starting element and Sink1_1 as the ending element.

Note that the dialog boxes, Select an Output Element, and Select an Input
Element have not been used. To remove the final Select an Output Element dialog
box, click on Cancel in the dialog box.
If necessary, select the Model | Build | Connections | Show button and proceed
through the message window prompts to check the connections. A window will
appear showing the input and/or output of the selected element.

Save the Model


It is good practice to save the model throughout any model building
process. There are two ways to do this.

1. Select File | Save Model or File | Save Model As and save the model as
basic01.mdl in c:\deneb\QTUTORlib\MODELS

Or,

2. Select Model | Build | Model | Save and save the model as basic01.mdl
in c:\deneb\QTUTORlib\MODELS

Run the Simulation


1. To run the simulation, select Run | Simulate | Simulation | Run. Enter
the values as shown below, and click on OK. The simulation will run for
1000 seconds.

- 94 -
CHAPTER 7
BASIC CONSTRUCTS II

Introduction
This lesson will introduce the intermediate modelling constructs used to
develop a QUEST simulation model. In this tutorial, the concepts of a part
source, sink, buffer, and machine are expanded and further described.
Additional modelling features such as simple route logic, multiple
processes, and part requirements are demonstrated. The exercise involves
building a straight-through processing system using combinations of
multiple sources, buffers, machines, and parts. User-defined names and
alternative model scenarios will be established to illustrate model
experimentation runs.

The Model
The system to be modelled in this tutorial involves the assembly of three
different types of end products on three available flexible machines. Parts
PartA, PartB, and PartC are assembled with PartD to form end products
PartAD, PartBD, and PartCD, respectively. Machines Mach1, Mach2, and
Mach3 require the appropriate part requirements from dedicated upstream
buffers to produce the end products on a cyclic basis. Assembled products
are sent from the machines to a common buffer, after which they exit the
system. Figure 7-1 shows a layout of this system.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

- 95 -
2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

- 96 -
Create Part Classes
Seven part classes will be used in this model.
They are:

PartA
PartAD
PartB
PartBD
PartC
PartCD
PartD

1. Select Model | Build | Part Class | Create/Modify. The Part Class


dialog box will appear. Enter the values as shown below and select
Display.

The Part Class Display dialog box will appear. Enter 1 for Display Index and
select Attributes. The Part Class Display Attributes dialog box will appear. Enter
values as shown and click on OK.

- 97 -
Click on OK for the Part Class Display dialog box.

2. Repeat these steps for the remainder of the part classes; PartB, PartC,
PartD, PartAD, PartBD, PartCD. Choose a different color for each of the
different part classes.

Figure 7-1 View of the Basic Constructs II Model

Create Sources
Two sources will be created for this model to serve as mechanisms by
which parts can enter the model.

1. Select Model | Build | Element Class | Source. The Source dialog box
appears. Name the source class as SourceABC and use default settings for
all other fields. Click on OK.

- 98 -
See Figure 7-1 for the positions of the various model elements that are created in
this model. Use the world display buttons at the bottom of the screen (Rotate,
Cruise, View, etc.) to reorient the screen view in order to get an overall picture of
the working grid.

2. Select Model | Build | Element | Trn. Move the selected SourceABC_1


to its desired position as shown in Figure 7-1. Use the LMB to move
SourceABC_1 along the X-axis or the MMB to move along the Y-axis.

3. The inter-arrival time (IAT) of parts PartA, PartB, and PartC, at


SourceABC_1 will be defined. Select Model | Build | Element Class |
Source.

The Select Source Class Type dialog box will appear. Choose SourceABC for the
class name. The Source dialog box will be displayed.

- 99 -
Select IAT.
The Distributions display list will appear. Choose Exponential and the
Exponential dialog box will be displayed. Input a Mean value of 15 and click on
OK.

NOTE: When choosing from a display list, either of two methods can be used:

highlight the desired value or field and click on OK, or;


double click the desired value or field.

- 100 -
The Source dialog box should still be displayed. To have parts PartA,
PartB, and PartC all arrive in equal proportions, select Part Fractions.
The Part Class Fractions dialog box will appear. Enter values as shown
and click on OK.

This ensures that the parts PartA, PartB, and PartC arrive in equal proportions.

4. The Route Logic for arriving parts will be defined for SourceABC. This
source class is going to sort the parts onto separate pallets for each type of
part. Select the Logics button on the Source dialog box. The Logics dialog
box will appear.

- 101 -
Select the Route Logic button and choose Fixed Routing from the Route Logic
display list and click on OK. Click on OK in the Logics and Source dialog boxes.

5. Create another source class named SourceD in the same manner as class
SourceABC was created. Set a constant IAT of 15 seconds and set the
Part Fractions for PartD to 1. Place SourceD_1 on the floor as shown in
Figure 7-1.

Save the Model


It is good practice to save the model throughout any model building
process. There are two ways to do this.

1. Select Model | Build | Model | Save. Choose c:\deneb\QTUTORlib\ as


the library and enter basic02.mdl as the file name in the Select File dialog
box. Click on Save.

2. The alternative method of saving a model is to select File | Save Model


or File | Save Model As. The Select File dialog box will appear. Choose
c:\deneb\QTUTORlib\ as the library and enter basic02.mdl as the file
name in the Select File dialog box. Click on Save.

- 102 -
Create Machines
Three machines classes will be created for this model. Machines classes
Mach1, Mach2, and Mach3. Machines belonging to these classes will be
created and used to assemble PartD to each of Parts A, B, and C.

1. Select Model | Build | Element Class | Machine.

The Machine dialog box appears. Enter Mach1 for the class name and select the
Cycle Process button. The Select Process dialog box appears. Choose New
Process from this dialog box. The Cycle Process Definition dialog box will
appear.

Enter AssembleAD as the name and select the Parts button. The Part
Requirements dialog box appears. Complete the dialog box as shown and click on
OK.

- 103 -
Select the Cycle Time button on the Cycle Process Definition dialog box to set
the cycle time for the process AssembleAD. Choose Exponential from the
Distributions display list and click on OK. Input a Mean value of 40 and click on
OK.
Select the Products button. Enter values in the Product dialog box shown below.

This indicates that the products for the process AssembleAD is PartAD and the
product is an external product. Click on OK. Click on OK in the Cycle Process
Definition and the Machine dialog boxes.

Refer to Figure 7-1 for the positions of the various model elements to be
created in this model. Move the machine to the proper positions in the
layout.

- 104 -
2. Select Model | Build | Element | Trn. Move Mach1_1 with the LMB
(translate along the X-axis) or with the MMB (translate along the Y-axis)
or with both the LMB and MMB held down until Mach1_1 is located at
the desired position as indicated in Figure 7-1.

3. Two more machine classes, Mach2 and Mach3, need to be created. They
should be created in the same manner as machine class Mach1 was
created. Associate the process AssembleBD with machine class Mach2
and process AssembleCD with machine class Mach3. Mach2 will have
PartB and PartD as inputs for its process and PartBD as the output. Mach3
will have PartC and PartD as inputs for its process and PartCD as the
output part.

4. Place these machines at the desired location as shown in Figure 7-1.

Create a Sink
A sink needs to be created for this model to serve as the mechanism by
which parts can exit the model. Select Model | Build | Element Class |
Sink. The Sink dialog box appears. Use the default settings and click on
OK.

- 105 -
Use Figure 7-1 as a guide to position the sink in the same manner as the source
and the machine.

Create Buffers
Five buffers will be created for this model, one each between the sources
and the machines, and another between the machines and the sink. It
should be noted that only three classes of buffers will be created. Since the
buffers between SourceABC_1 and the machines have the same
characteristics, all three will belong to a single class.

The buffer between SourceD_1 and the machines, and the buffer between
the machines and the sink, will be two separate classes.

1. Select Model | Build | Element Class | Buffer. When the Buffer dialog
box is displayed, use default settings for all the attributes except No. of
Elements. Enter 3 for the No. of Elements so that three buffers will be
created for this class. Select the Display button and choose a distinct color
for this buffer class. Click on OK in each dialog box.

- 106 -
When prompted, position each buffer as shown in Figure 7-1. These buffers will
be named Buffer1_1, Buffer1_2, and Buffer1_3.

2. Repeat step 1 to create BufferD, with one element, BufferD_1; and to


create BufferOUT with one element, BufferOUT_1.

The user should note that only three classes of buffers were created
although there are five buffers in the system. This is because the first class
of buffer, Buffer1, has 3 buffers which all have the same properties
(except names and location) and therefore belong to a single class of
buffers. The remaining two buffers are different from this class and each
other, and require their own classes.

Connect the Elements


Having defined the basic elements of the system, the next step in the
model building process is to define the proper sequence; that is, the flow
of parts through the system. Logical connections are made between the
elements and are accomplished using the following steps.

1. Select Model | Build | Connections | Element. The message window


prompts the user to indicate a starting element. Pick SourceABC_1. The
message window next prompts for an ending resource. With the LMB,
pick Buffer1_1.

When connecting elements having multiple inputs and outputs, the Select
Input/Output dialog box appears which allows the user to choose the existing or a
new option to make the connection. In all of the following connections choose
New from the Select Input/Output dialog box when prompted to do so.

NOTE: The basic idea about how the element connections are created in QUEST is
described in the previous chapter, Basic Constructs I.

2. Repeat the previous step for each of the following pairs of starting and
ending resources:

SourceABC_1 and Buffer1_2


SourceABC_1 and Buffer1_3
SourceD_1 and BufferD_1
BufferD_1 and Mach1_1
BufferD_1 and Mach2_1
BufferD_1 and Mach3_1
Buffer1_1 and Mach1_1

- 107 -
Buffer1_2 and Mach2_1
Buffer1_3 and Mach3_1
Mach1_1 and BufferOUT_1
Mach2_1 and BufferOUT_1
Mach3_1 and BufferOUT_1
BufferOUT_1 and Sink1_1

Place Restrictions on the Route Logic

It should be noted that SourceABC_1 produces three kinds of parts - namely


PartA, PartB, and PartC. The order in which the connections are made results in:
output1 of SourceABC_1 going to Buffer1_1
output2 of SourceABC_1 going to Buffer1_2
output3 of SourceABC_1 going to Buffer1_3

To ensure that PartA always goes to Buffer1_1 through output1, PartB always
goes to Buffer1_2 through output2, and PartC always goes to Buffer1_3 through
output3, restrictions need to be placed on the routing in addition to choosing fixed
routing as the route logic.

3. Select Model | Build | Element Class | Source. The Select Element


Class Type dialog box will appear. Choose SourceABC.

The Source dialog box will appear. Select the Part Routing button.
Select the Restrictions button on the Part Routing Info dialog box. This will
display the Fixed Routing Info dialog box. Complete the table as shown and click
on OK.

- 108 -
Click on OK on any remaining dialog boxes.

Save the Model


Select Model | Build | Model | Save. Choose c:\deneb\QTUTORlib\ as the
library and enter basic02.mdl as the file name in the Select File dialog
box. Click on Save.

Run the Simulation


To run the simulation select Run | Simulate | Simulation | Run. Enter the
values as shown below, and click on OK. The simulation will run for 1000
seconds.

- 109 -
CHAPTER 8
BASIC CONVEYOR SYSTEM

Introduction
This lesson will introduce the basic modelling constructs used in
developing a basic conveyor system in a QUEST simulation model. In this
tutorial, the concepts of part, source, sink, buffer, and machine are used in
association with different conveyor modelling constructs. The exercise
involves building a conveyor system that services two parallel
workstations. Some system defaults will be used throughout this lesson to
demonstrate the ease with which QUEST models can be built.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

- 110 -
3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

Create Part Classes


Two part classes to be used in this model will be created.

1. Select Model | Build | Part Class | Create/Modify. The Part Class


dialog box appears. Enter Part1 for Name and click on OK.

- 111 -
2. For creating the other part class, repeat the previous step and assign
Part2 as the part class name. Select the Attributes button on the Part
Class Display dialog box to assign a different color. Choose a color and
click on OK. Click on OK on the Part Class Display and Part Class dialog
boxes.

Create a Source
One source will be created for this model to serve as the mechanism by
which the parts can enter the model.

1. Select Model | Build | Element Class | Source. The Source dialog box
appears. Use default settings and enter the class name as Source1. Do
NOT click on OK.

- 112 -
The inter-arrival time (IAT) of the parts, Part1 and Part2 as created by the source,
Source_1, will be defined next. Select the IAT button from the Source dialog box.
Choose Normal from the Distributions display list and click on OK. The Normal
dialog box will appear. Enter a Mean value of 20 and a Standard Deviation value
of 4.

- 113 -
Click on OK on the Normal dialog box.

Part Fractions will be defined for Source1. Parts Part1 and Part2 arrive in equal
proportions at Source1. Select Part Fractions from the Source1 dialog box. Enter
a value of 1.0 for both Part1 and Part2 to indicate that equal proportions of both
parts arrive at this source.

Click on OK in the Part Class Fractions and the Source dialog boxes. The
message window prompts "Select a location on the floor/2D Window for
<Source1_1>". Pick a location on the floor. Source1_1 will appear in that
location. Element Source1_1 of class Source1 is created.

2. Change the grid size. Select Pref | Preferences | Grid. The Grid dialog
box appears. Enter 25 for Number and enter 3 for spacing. Click on OK.

NOTE: When setting the grid size and spacing for a model, be sure to place an element
into the model first, that is BEFORE, changing or setting the grid size and spacing. If
this is not done, the system has no point of reference and the grid size and spacing will
return to the last default used as soon as an element or part is added to the model.

3. Change view and camera specs. From the world display buttons, select
View. The User View Ops dialog box appears. Choose Standard Views,
click on OK, choose Top on the Standard Views dialog box and click on
OK. When the Standard Views dialog box appears again click on Cancel.

Select the Camera button. The Camera Options dialog box appears. Choose
Camera Specs and click on OK. Toggle the Projection to Orthographic. Click
on OK.

Refer to Figure 8-1 for the positions of the various model elements to be
created in this model.

4. Use the world display buttons at the bottom of the screen (Rotate,
Cruise, View, etc.) to reorient the screen view in order to get an overall
picture of the working grid.

- 114 -
To move the source to the proper position in the layout, select Model | Build |
Element | Trn. Use the LMB to move Source1 along the X-axis or the MMB to
move it along the Y-axis, or both mouse buttons until it is located at the desired
position as indicated by Figure 8-1.

Drawing the Conveyor System Layout


Begin building the model by laying out the entire conveyor system. Refer
to Figure 8-1 for the names and relative positions of the various conveyor
segments in the system. There are two methods for creating conveyors, the
library method and the layout method.

Figure 8-1 QUEST Basic Conveyor Model Overview

Create Conveyor Using Library Method


The library method of conveyor creation relies on existing geometry in
libraries to assemble a conveyor system. This is done by snapping together
predefined sections to represent a system.

1. Select Model | Build | Element Class | Conveyor. The Conveyor dialog


box appears. Enter Conveyor1 for the name of this conveyor . Select
Conveyor Info from the dialog box. Enter 0.5 for speed and click on OK.

- 115 -
2. Select Display from the Conveyor dialog box. Select 3D File from the
Display dialog box. Choose Select from Library from the Geometry
Selection dialog box and click on OK.

Choose roll.straight from the ..\QUESTlib\PARTS\GIFTS\CONVEYORS\


directory. Click on the directory/file name required and click on Open in the
Select File dialog box.

- 116 -
Click on OK in the Display and Conveyor dialog boxes. The message prompts
"Select a location on the floor/2D window for <Conveyor1_1>". Pick a location
on the floor and Conveyor1_1 appears. Element Conveyor1_1 of class Conveyor1
is created.

3. Refer to Figure 8-1 for the positions of the various model elements to be
created in this model. Use the world display buttons at the bottom of the
screen (Rotate, Cruise, View, etc.) to reorient the screen view in order to
get an overall picture of the working grid.

4. Move the conveyor to the proper position in the layout. Select Model |
Build | Element | Trn. Conveyor1_1 is highlighted. Use the LMB to move
it along the X-axis, or the MMB to move it along the Y-axis, or use both
mouse buttons until it is located at the desired position as indicated by
Figure 8-1. Reorient by using Trn or Rot as applicable.

Create Conveyor Using Layout Method


The layout method of creating a conveyor allows the user to describe
conveyors by using a point-and-click method for determining conveyor
length and orientation. This method defines a centerline for the conveyor.
QUEST then extrudes a user-defined cross section through the centerline
to create 3D conveyor geometry very quickly.

1. Select Model | Layout | Create System | Conv. The Extr_Conveyor


dialog box appears. Enter Extr_Conveyor1 for the name of this conveyor
segment. Select Conveyor Info from the dialog box. Enter 0.5 for speed,
set the Type to Non-accumulating and click on OK. Click on OK on the
Extr_Conveyor dialog box.

- 117 -
2. Set up the method for creating arcs and the elevation of the conveyor.
Select Model | Layout | Layout | Setup. The Layout Setup dialog box
appears. Choose Angle-Radius for the Arc Mode and enter 0.0 for the
Elevation and Always New for Extruded Pipe/Conveyor Class. This will
cause each conveyor segment to be a different Element Class . Click on
OK.

3. Indicate points to define the beginning and end of an individual


conveyor. Select Model | Layout | Layout | Line. Refer to Figure 8-1. Use
the LMB to pick a point on the screen to define the left side of
Extr_Conveyor1. With the LMB, select the Rel Button. The Rel Coords
dialog box appears. Enter 40 for the X value. Click on OK.

4. Create a second conveyor system, named Extr_Conveyor2, as in step 1.

5. Select Model | Layout | Layout | Line.

- 118 -
Decision Point on Conveyor

NOTE: The use of the MMB in the next step is very important. It will correctly position
the new segment's geometry, create the decision point on the original segment, and will
provide the connection between this decision point and the new segment.

With the MMB, pick Extr_Conveyor1_1 where it will intersect with


Extr_Conveyor2_1. With the MMB, select the Rel button. Enter 10 for the Y
value. Click on OK.

6. Create conveyor system Extr_Conveyor3 as in step 1.

7. Select Model | Layout | Layout | Arc. With the RMB, select the end of
Extr_Conveyor2, so that this segment starts from the end. The Arc
Parameters dialog box will the appear. Change the settings to match those
shown below and click on OK.

8. Similarly, create the fourth conveyor system, Extr_Conveyor4. Use the


line method to create this new segment so that the end of this segment
lines up with the end of Extr_Conveyor1_1. With the RMB, pick the end
of Extr_Conveyor3_1, so that the fourth segment starts at the end of the
third.

9. Assign logic for unloading the conveyor. Select Model | Layout |


Decpoint | Conv. Choose Cnv_Dec_Pt1 from the Select Element Class
dialog box. The Cnv_Dec_Pt dialog box appears. Select Logics from the
dialog box. Select Process Logic from the Logics dialog box. The Cnv
Dec Process Logic dialog box appears. From this dialog box select
Unload Fixed and click on OK. Click on OK on the Logics dialog box.

10. Select the Unloading button from the Cnv_Dec_Pt dialog box. The
Unloading Info dialog box appears. Select the Fixed button and change
the settings in the Fixed Routing Info dialog box to match those shown
below and click on OK.

- 119 -
11. Click on OK on the Unloading Info and Cnv_Dec_Pt dialog boxes.

12. Use the layout method to create the remaining conveyors shown in
Figure 8-1.

Create Machines
Parts will be created at the source, moved onto the conveyor system, and
processed on one of two machine elements. The machines will be created
next.

1. Select Model | Build | Element Class | Machine. The Machine dialog


box appears. Name the machine class Machine 1 and use default settings
for the remaining fields.

- 120 -
2. Select Cycle Process in the Machine dialog box to define the cycle time
of the machine. Choose New Process in the Select Process dialog box and
click on OK. In the Cycle Process Definition dialog box enter Process_1
for the Name and select the Cycle Time button. From the Distribution
display list, choose Uniform and click on OK. Enter a Minimum Value of
5 sec and a Maximum Value of 15 sec in the Uniform dialog box and click
on OK. Click on OK in the Cycle Process Definition dialog box and in the
Machine dialog box. When prompted, select a location on the floor to
place this machine as shown in Figure 8-1.

3. Repeat steps 1 and 2 for the second machine class, Machine2. Use
default settings and the same cycle time as that assigned to machine class
Machine 1.

4. Machine2_1 will be located on top of Machine1_1. Refer to Figure 8-1


for the positions of the various model elements to be created in this model
and move the machines to their proper positions in the layout.

Create Sinks
1. Select Model | Build | Element Class | Sink. The Sink dialog box will
appear. Name this Sink1 and use default settings for the other fields. Click
on OK. When prompted, pick a location on the floor to place the sink.

- 121 -
2. Repeat the previous step to create a second sink class, Sink2. Use
default settings. Move the sinks to their proper positions in the layout as
shown in Figure 8-1.

Create Buffer
Buffers are created to prevent parts from blocking elements due to
differences in cycle and inter-arrival times. Three buffers will be created
for this model: one between Source1_1 and the entry conveyor,
Conveyor1_1; a second between the exit conveyor, Extr_Conveyor8_1
and Sink1_1; and the third between the other exit conveyor,
Extr_Conveyor7_1 and Sink2_1.

1. Select Model | Build | Element Class | Buffer. The Buffer dialog box
appears. Use default settings and name this buffer Buffer1. Click on OK.
When prompted, pick a location on the floor for the buffer.

- 122 -
2. Create two more buffers as in step 1. Enter the names Buffer2 and
Buffer3, respectively and use default settings. Be sure to pick a location
on the floor for each buffer, when prompted.

3. Move the buffers to their proper positions in the layout as shown in the
Figure 8-1.

Connect the Elements


Having defined the basic process elements in the system, the next step in
the model building process is to define the proper sequence, that is, the
flow of parts through the system. Logical connections are made between
the elements and this is accomplished by the following steps:

1. Select Model | Build | Connections | Element. The message window


will prompt for a starting element. Pick Source1. When the message
window prompts for an ending element, pick Buffer1.

- 123 -
2. Refer to Figure 8-1 and continue the connection process to complete
more sequences as follows:

Source1_1 -> Buffer1_1 -> Conveyor1_1 -> Extr_Conveyor1_1


Extr_Conveyor4_1 -> Machine2_1 -> Extr_Conveyor5_1
Extr_Conveyor7_1 -> Buffer3_1 -> Sink2_1
Extr_Conveyor1_1 -> Machine1_1 -> Extr_Conveyor8_1 -> Buffer2_1 ->
Sink1_1

The decision point on Extr_Conveyor1 should have been connected to


Extr_Conveyor2 as part of the conveyor creation process. Use the Model | Build |
Connections | Show buttons to verify the connection. If the decision point is not
connected, use the Model | Build | Connections | Element buttons to connect the
decision point to Extr_Conveyor2_1.

Save the Model


It is good practice to save the model periodically during the model
building process. Select File | Save Model. The File Name dialog box
appears. Enter the file name convey.mdl for this model and click on OK.

Run the Simulation


1. The time interval for the simulation has to be specified. Select Run |
Simulate | Simulation | Interval. Set the Anim On Step Size to 8 sec in
the Simulation Time Interval dialog box and click on OK.

2. To run the model, select Run | Simulate | Simulation | Run. The Run
dialog box will appear. The run time is preset at 1000.0 seconds. The
simulation will run to this time and terminate. Leave all settings at default

- 124 -
and click on OK. The simulation will begin. When time 1000.0 seconds is
reached, the simulation run will stop and the message "Simulation Run
Complete" will appear in the message window.

CHAPTER 9
POWER AND FREE SYSTEM

Introduction
This lesson will introduce the basic modelling constructs used in
developing a Power and Free system. In the tutorial, the concepts of Power
and Free systems, Segments, Decision Points and Carriers are introduced.
All default geometry will be used in this tutorial to demonstrate the ease
with which QUEST models can be built. In the tutorial, the power and free
will be frequently referred to as PNF.

- 125 -
Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |

- 126 -
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

7.

The proper color needs to be set for comfortable viewing. To do this,


select Pref | Preferences | Color | Floor.

8. Select the Abs button. Complete the Floor Color dialog box as shown
and click on OK.

Create Part Classes


Two part classes to be used in this model will be created.

1. Select Model | Build | Part Class | Create/Modify.

The Part Class dialog box appears. Complete it as shown and select the Display
button.

- 127 -
When the Part Class Display dialog box appears, select the Attributes button.
This will display the Part Class Display Attributes dialog box.

In this dialog box change the part color to Red and click on OK. Click on OK in
the Part Class Display and the Part Class dialog boxes.

2. Select Model | Build | Part Class | Create/Modify. The Select a Part


Class dialog box appears. From this dialog box choose New to create the
second part class, Part2. Choose Blue as the color and leave all other
fields at the default values.

Create a Source

- 128 -
One source will be created for this model to serve as the mechanism by
which the parts can enter the model.

1. Select Model | Build | Element Class | Source. The Source dialog box
appears. Complete the Source dialog box as shown and select the IAT
button.

The inter-arrival time (IAT) of parts as created by Source1_1 must be defined.


The Distributions display list will appear. Choose Exponential and click on OK.
Enter a mean value of 45 and click on OK.

- 129 -
2. Part fractions will be defined for Source1_1. Select the Part Fractions
button on the Source dialog box. The Part Class Fractions dialog box will
appear. Enter a value of 1.0 for both Part1 and Part2 to indicate that equal,
relative proportions of both parts arrive at the source. Note that the
proportions will be automatically recalculated to a proportion of 1 (i.e.,
0.50000) after OK is clicked. This process is referred to as normalization.

Click on OK. Click on OK on the Source dialog box. The message window
prompts for the location of the Source1 on the floor/2D window. Place the created
Source1 on the floor in the 3D world.

3. To change the grid size, select Pref | Preferences | Grid. The Grid
dialog box appears. Enter 25 for Number and enter 3 for Spacing. Leave
Display set to Grid and Floor. Click on OK in the Grid dialog box.

NOTE: The grid size must be altered after the first element is displayed. If it is set before
any elements are placed on the floor, it will return to the original default value as soon as
the first element is placed. This is why the grid size is not usually set until the first
element is located in a model.

4. To change view and camera specs, select the View button. The User
View Ops dialog box appears. Choose Standard Views and click on OK.
Choose Top from the Standard Views dialog box and click on OK. The
Standard Views dialog box appears again. To close this dialog box select
Cancel.

5. From the world display, select the Camera button. The Camera Options
dialog box appears. Choose Camera Specs and click on OK. The Camera
Specs dialog box appears. Toggle the Projections field to Orthographic.
Click on OK.

6. Now Source1_1 can be moved into a more accurate position. To


translate the source, select Model | Build | Element | Trn. The source is
automatically selected because at this time, it is the only element in the
model. Use the LMB to move along the X-axis; the MMB to move along
the Y-axis; or both mouse buttons, to place the source to match its location
in Figure 9-1.

- 130 -
Use Cruise or other world display buttons to adjust the view of the model world.

Figure 9-1 Completed Power and Free Loops

Create a Sink
One sink will be created for this model to serve as the mechanism by
which parts can exit from the model.

1. Select Model | Build | Element Class | Sink. The Sink dialog box
appears as shown. Use the default settings. Click on OK.

- 131 -
2. Locate the sink at the position in the layout as shown in Figure 9-1.

Create a Buffer
One buffer will be created for this model to hold parts waiting to enter the
Power and Free System.

Select Model | Build | Element Class | Buffer. The Buffer dialog box
appears as shown. Name this buffer class Buffer1 and use the default
settings. Click on OK.

- 132 -
Locate the buffer at the position in the layout as shown in Figure 9-1.

Create Power and Free Segments


Power and Free has a segment creation mechanism identical to conveyors,
AGV paths, and labor. In this model, one power and free system is created
with segments merging together and branching apart.

1. Select Model | Layout | Create System | PNF. The Power_n_Free


dialog box appears. Complete the dialog box as shown and click on OK.

- 133 -
2. This is the setup method for creating power and free arcs, and the
default elevation. Select Model | Layout | Layout | Setup. The Layout
Setup dialog box appears. Toggle the Arc Mode to Angle-Radius and
enter 10.0 for the elevation. Click on OK.

The elevation of the layout refers to the height of the layout system above the
floor.
Arc creation in the layout can be either 2-point or Angle-Radius modes. The 2-
point mode allows the user to select two points in the model world as start and
end points to create the arc. The Angle-Radius mode allows the user to set the
angle and radius and pick the starting location to create the arc.

3. Create segments for Power_n_Free1. Select Model | Layout | Layout |


L <-> A. This mode will alternate between line and arc creation. Use the
LMB to pick a point near the top middle of the layout to start drawing the
first segment. The message window will then prompt to "Indicate Next
Point".

4. Select Model | Layout | Rel. The Rel Coords dialog box appears. Enter
-30.0 for X. Click on OK.

- 134 -
5. The Arc Parameters dialog box will appear next. Set the Angle to 90
deg, the Radius to 3 ft and the Direction to Left. Click on OK.

6. The message window will prompt with "Indicate Next Point". This
point will be heading directly down the left side of the layout. Select
Model | Layout | Rel. The Rel Coords dialog box appears. Enter -20.00
for Y. Click on OK.

7. The Arc Parameters dialog box will appear. The values that were
entered the first time will work again here. Click on OK.

8. The message window will prompt with "Indicate Next Point". This
segment will head along the bottom of the layout for the same distance as
the first one. Select Model | Layout | Rel. Enter 30.0 for X. Click on OK.

Select the Cancel button to remove the Arc Parameters dialog box.

9. Create the segment to continue the loop. Select Model | Layout |


Layout | L <-> A. With the RMB, pick the end of the last segment created.
This is the starting point of the new segment. This will snap the location to
the end of the segment and connect the two systems together.

10. The message window will then prompt to "Indicate Next Point". Select
Model | Layout | Rel. The Rel Coords dialog box appears. Enter 30.0 for
X. Click on OK.

- 135 -
11. Because of alternating between lines and arcs, the Arc Parameters
dialog box appears. Set the Angle to 90 deg, the Radius to 3 ft and the
Direction to Left. Click on OK.

12. The message window will again prompt with "Indicate Next Point".
This point will be heading directly upwards along the right side of the
layout. Select Model | Layout | Rel. The Rel Coords dialog box appears.
Enter 20.00 for Y. Click on OK.

13. The Arc Parameters dialog box will appear again. The values that were
entered the last time will work again here. Click on OK.

14. The last segment in this loop will head along the top of the layout. The
message window prompts to "Indicate next point". With the RMB, select
the very first line segment created in this PNF system. Select the Cancel
button to remove the Arc Parameters dialog box.

- 136 -
The main outer loop is now complete. The next step in the tutorial is to
create the segment which crosses the primary loop.

15. Create the initial arc which will start the secondary loop across the
middle of the primary loop. Select Model | Layout | Layout | Arc. With
the RMB, pick the end of the last segment created.

NOTE: It may be necessary to choose the Display button at the bottom of the screen, and
change Render to Wire, in order to clearly see the beginnings and endings of the
previously built segments.

16. The Arc Parameters dialog box will appear. Enter an angle of 90 deg,
the Radius to 3 ft and set the Direction to Left. Click on OK.

17. Select Model | Layout | Layout | Line. The message window will
prompt to "Indicate First Point". With the RMB, pick the end of the arc
created in the previous step.

When the message window again prompts to "Indicate Next Point", select Model |
Layout | Rel and enter -20 for Y. This will make a segment that heads directly
across the primary loop.

18. Change the setup mode for creating arcs. Select Model | Layout |
Layout | Setup. The Layout Setup dialog box appears. Toggle the Arc
Mode to 2-Point and enter 10.0 for the elevation. Click on OK.

19. Create an arc to close the power and free system. Select Model |
Layout | Layout | Arc.

With the RMB, pick the end of segment Power_n_Free1_12, created in step 17,
and with the RMB, pick the starting point of the segment Power_n_Free1_6. This
will close the secondary power and free loop.

- 137 -
Figure 9-2 Closing the Secondary PNF Loop

Create Power and Free Decision Points


Three decision points will be created for this model. One to load, the
second one to unload, and the third will route the two part classes to
different PNF segments.

1. Select Model | Layout | Dec Point | PNF. The Pnf_Dec_Pt dialog box
appears. Leave all the default settings. From the dialog box select Logics |
Process Logic and choose Load and click on OK. Click on OK on the
Logics dialog box and click on OK on the Pnf_Dec_Pt dialog box. With
the LMB, pick a location on the Power_n_Free system close to Buffer1_1.

2. Repeat step 1 for the second decision point and assign the Process Logic
as Unload. Place the decision point close to Sink1_1.

3. Create the third PNF decision point. From Logics | Process Logic,
select the User Func option and attach the procedure route_by_part from
the ..\QUESTlib\LOGICS\pnf.scl file. Place the decision point at the top of
the layout just before the branching of the segments. (Refer to Figure 9-3).

- 138 -
Figure 9-3 Placing Decisions Points and Carriers

Create Carrier
1. Select Model | MHS | MHS Element | Carrier. When the Carrier
dialog box appears, set the stopping space to 5 ft; set the class Color to
Green using the Display button in the Carrier dialog box; and change the
No. of Elements to 15. Click on OK. Choose Forward from the Locate
Direction dialog box and click on OK.

2. Pick a starting location on the power and free near the beginning of
Power_n_Free1_1 (See Figure 9-3).

Connect the Elements


Having defined the basic process elements in the system, the next step in
the model building process is to define the flow of parts through the
system. Logical connections are made between the elements by the
following steps:

1. Select Model | Build | Connections | Element. The message window


will now prompt for a starting element. Pick Source1_1. The message
window next prompts for an ending element. Pick Buffer1_1.

2. Connect Buffer1_1 to Pnf_Dec_Pt1_1 and connect Pnf_Dec_Pt2_1 to


Sink1_1.

- 139 -
Figure 9-4 Connecting Elements

Save the Model


It is a good practice to save the model periodically during the model
building process. To save this model, select File | Save or File | Save As.
Save the model under the name pwrfree.mdl.

Run the Simulation


1. Use Cruise and other world display buttons to get a better view of the
model.

2. Set the animation on stepsize. Select Run | Simulate | Simulation |


Interval and change the Anim On Step Size to 1.000 sec and Anim Off
Step Size to 60.000 sec.

3. To run the model select Run | Simulate | Simulation | Run. The Run
dialog box appears. The default run time is 1000.0 seconds. Change the
Run Time to 7200 seconds. The simulation will run to this time and
terminate. Complete this dialog box as shown below and click on OK.

NOTE: Notice that only one of the two carriers approaching the merge point next to the
sink are claimed by the segment Power_n_Free1_6. This behavior causes the delay in the
parts reaching the decision point Pnf_Dec_Pt2. To change this behavior, select Model |
Layout | Segment | Mod and select Power_n_Free1_6. Change the claim capacity to 5
and click on OK. Run the simulation again and notice the change in behavior.

- 140 -
CHAPTER 10
SHIFTS, LABOR, AND FAILURES

Introduction
This lesson will introduce the concepts of labor allocation, shift
scheduling, and downtime modelling in a QUEST simulation model. In
this tutorial, the concepts part, source, sink, buffer, and machine are used
in association with labor requirements and their respective shift schedules.
The exercise also involves defining equipment downtime and applying
them on selected model elements. Some system defaults will be used
throughout this lesson to demonstrate the ease with which QUEST models
can be made.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2. If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

- 141 -
3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5. The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6. The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

Create Part Classes


Two part classes to be used in this model will be created.

1. Select Model | Build | Part Class | Create/Modify. The Part Class


dialog box appears. Enter Part1 for the class name.

- 142 -
Select the Display button. Select Attribute. The Part Class Display Attributes
dialog box appears.

Choose Red as the color and click on OK. Click on OK in Part Class Display and
Part Class dialog boxes.

2. Repeat step 1 for a second part class, Part2. Choose Blue for the color.

Create Sources
Two sources will be created for this model to serve as the mechanisms by
which parts can enter the model.

1. Select Model | Build | Element Class | Source. A Source dialog box


will appear. Use default settings and name this class as Source1.

- 143 -
The inter-arrival time (IAT) of Part1, as created by class Source1, must be
defined. Select the IAT button from the Source dialog box. The Distributions
display list appears. Choose Exponential and click on OK. When the Exponential
dialog box appears, enter a Mean value of 75. Click on OK.

- 144 -
Next, part fractions for Part1, the only part for class Source1, will be defined.
Select the Part Fractions button from the Source dialog box. The Part Class
Fractions dialog box appears.

Enter the value of 1.0 for Part1 and 0.0 for Part2 to indicate that only Part1 arrives
at this source. Click on OK in the Part Class Fractions and Source dialog boxes.
The message window displays "Select a location on the floor/2D window for
<Source1_1>".
Pick a location on the floor.

Figure 10-1 Model Layout

2. Refer to Figure 10-1 for the positions of the various model elements that
will be created in this model. Use the world display buttons at the bottom
of the screen (Rotate, Cruise, etc.) to reorient the screen view in order to
get an overall picture of the working place.

- 145 -
3. Select Model | Build | Element | Trn. Move the selected Source1_1 on
the grid by using either the LMB (along the X-Axis) or the MMB (along
the Y-axis), or both mouse buttons at the same time, until its located at the
desired position as indicated in Figure 10-1.

4. Repeat steps 1 and 2 for the second source, Source2. Use the same
characteristic geometry and IAT as Source1. Only Part2 arrives at
Source2. Therefore, enter a value of 0.0 for Part1 and 1.0 for Part2 for this
source in the Part Class Fractions dialog box.

Create Machines
Parts are created at the source and proceed to their respective machine for
processing. These machines are created next.

1. Select Model | Build | Element Class | Machine. A Machine dialog box


will appear. Use default settings and name this as Machine1.

- 146 -
2. Select the Cycle Process button on the Machine dialog box and choose
New Process and click on OK. A Cycle Process Definition dialog box
appears and the new process, Process_1 is created. The cycle time for
Process_1 must be defined.

On the Cycle Process Definition dialog box, select Cycle Time. Choose
Exponential from Distributions display list and click on OK. On the Exponential
dialog box, enter a Mean value of 20 sec and click on OK. Click on OK on the
Cycle Process Definition and Machine dialog boxes. The message window
prompts "Select a location on the floor/2D Window for <Machine1_1>". Pick a
location on the floor.

3. Refer to Figure 10-1 for the positions of the various model elements that
will be created in this model. Move the machine to its proper position in
the layout.

- 147 -
4. Repeat the previous steps to create the other machines, Machine2_1,
Machine3_1, and Machine4_1 having new processes, Process_2,
Process_3, and Process_4, respectively. Use the same characteristics and
cycle time as Machine1_1. Position each machine as shown in Figure 10-
1.

Create Sinks
Two sinks will be created for this model to serve as the mechanism by
which the two classes of parts can exit from the model.

1. Select Model | Build | Element Class | Sink. A Sink dialog box will
appear. Use default settings and name this as Sink1. Click on OK.

The message window prompts to "Select a location on the floor/2D window for
<Sink1_1>". Pick a location on the floor.

2. Move the sink to its proper position in the layout as shown in Figure 10-
1.

- 148 -
3. Repeat the previous steps to create another sink class, Sink2. Move
Sink2_1 to its required location.

Create Buffers
Buffers are created to prevent parts from blocking elements due to
differences in cycle and inter-arrival times or resulting from machine
downtime. Six buffers will be created for this model; one each after the
two sources, one each before the two sinks, and the remaining two
between the two machines along each of processing lines (see Figure 10-
1).

1. Select Model | Build | Element Class | Buffer. A Buffer dialog box will
appear. Use default settings and name this class as BufferShort. Enter No.
of Elements as 4. Set Capacity Type as Number. Select the Capacity
button. Enter 100000 in the Capacity dialog box and click on OK.

Select the Display button. A Display dialog box appears. Select 3D File, choose
Select from library from the Geometry Selection dialog box. Click on OK.

- 149 -
On the Select Library dialog box choose the
..\QUESTlib\PARTS\GIFTS\BUFFERS\ directory. Click on OK. Choose table
from the Select File dialog box.

Click on Open. Click on OK on the Display and Buffer dialog boxes.

2. The message window prompts "Element <BufferShort_1> created.


Select a location on the floor/2D window for <BufferShort_1>". With the
LMB, pick a location on the floor to place this buffer in its proper position
in the layout. Similarly, pick the locations for the remaining buffers,
BufferShort_2, BufferShort_3, BufferShort_4.

- 150 -
3. A longer buffer to place between each of the machines will be created
next. Select Model | Build | Element Class | Buffer.

A Select Buffer Class dialog box appears. Choose New. A Buffer dialog box will
appear. Use default settings and name this class as BufferLong. Enter 2 for No. of
Elements and set the Capacity Type as Number.
Select the Capacity button. Enter 6 in the Capacity dialog box and click on OK.
Select the Display button. A Display dialog box appears.

Choose X-Axis as the Stack Axis. Select the 3D File button, choose Select from
library on the Geometry Selection dialog box. Click on OK. From the Select
Library dialog box choose the ..\QUESTlib\PARTS\GIFTS\BUFFERS\ directory.
Click on OK. Choose table_long from the Select File dialog box.

- 151 -
Click on Open. Click on OK on the Display and Buffer dialog boxes.

4. The message window prompts "Element <BufferLong_1> created.


Select a location on the floor/2D Window for <BufferLong_1>" . With the
LMB, pick a location on the floor to place this buffer. Similarly, pick the
location for the other buffer, BufferLong_2, as shown in Figure 10-1.

Save the Model


It is good practice to save the model periodically during the model
building process.

Select Model | Build | Model | Save. On the Select File dialog box enter
the name shifts.mdl for the file name of this model. Press enter and click
on Save.

Connect Elements
Having defined the basic process elements in the system, the next step in
the model building process is to define the proper sequence; that is, the
flow of parts through the system. Logical connections made between the
elements can be accomplished with the following steps.

Select Model | Build | Connections | Element. The message window will


prompt "Indicate Starting Element". Pick Source1_1. The message
window will prompt "Indicate Ending Element". Pick BufferShort_1.

Repeat this step and connect other elements as follows:

Source1_1 -> BufferShort_1 -> Machine1_1 -> BufferLong_1 -> Machine2_1 ->
BufferShort_2 -> Sink1_1

Similarly connect:
Source2_1 -> BufferShort_3 -> Machine3_1 -> BufferLong_2 -> Machine4_1 ->
BufferShort_4 -> Sink2_1

Create Labor
Labor is required by the processes defined for the four machines in the
model. Each machine requires a laborer for their entire cycle time. In this
model, Machine1 and Machine3 share Labor1, and Machine2 and
Machine4 share Labor2.

- 152 -
1. Select Model | MHS | Controller | Labor. The Labor_Controller dialog
box will appear. Use default settings and name this class as
Labor_Controller1. Click on OK.

The message window will prompt "Element <Labor_Controller1_1> Created.


Select a location on the floor/2D window for <Labor_Controller1_1>". Pick a
point on the floor to place the controller.

2. The labor controller is created. To create the labor select Model | MHS |
MHS Element | Labor. The Labor dialog box will appear.

- 153 -
Use default settings and name this as Labor1.

Set Move Time


The amount of time the laborer takes to move between each assigned
machine must be established. Use the arrows at the right end to scroll
through the dialog box.

1. Select the Move Time button from the Labor dialog box. Choose
Constant on the Distributions display list. Click on OK. Enter 10 on the
Constant dialog box. Click on OK. Click on OK on the Labor dialog box.

The message window prompts "Indicate an Element to locate Labor1_1." Refer to


Figure 10-1 for the positions of the various model elements that will be created in
this model. Locate labor1_1 on Machine1_1.

- 154 -
2. Create a second laborer. Enter Labor2 for name on the Labor dialog box
and use the same characteristics for Move Time. Locate Labor2_1 on
Machine2_1.

3. Since there are four machines created, there will be a different process
for each machine. To define the process labor and parts requirements for
process, select Model | Aux | Process | Cycle.

Choose Process_1 from the Select Process dialog box. Click on OK. The Cycle
Process Definition dialog box appears.
Process_1, as assigned to Machine1, requires Part1 and Labor1 to complete the
process. Select Parts. The Part Requirements dialog box appears. Enter 1 for
Part1 in the quantity column and 0 for all other quantities. Click on OK.

To assign labor to this process, select the Labor button on the Cycle Process
Definition dialog box. Enter 1 for Labor1 in the requirements column and 0 for all
other quantities. Click on OK.

- 155 -
Click on OK on Cycle Process Definition dialog box. Repeat these steps to
assign:
Part1 and Labor2 for Process_2,
Part2 and Labor1 for Process_3, and
Part2 and Labor2 for Process_4.

Defining and Assigning Shift Schedules


A shift schedule, describing the length of the operating shift and
corresponding breaks during the shift, will need to be defined. The shift
schedule can then be applied to all the pertinent model elements to define
the time patterns of the operations of those elements.

1. To begin with, define the breaks with the duration and other
characteristics. Select Model | Aux | Shifts | Shift Break. The Shift Break
dialog box appears. Use the default name Break_1 and enter a duration of
900 seconds (15 minutes).

Accept the other default values and click on OK.

- 156 -
2. Create a second shift break. Accept the default name of Break_2 and
enter a duration of 1800 seconds (30 minutes). Accept the other default
values and click on OK.

3. To define the daily schedule, select Select Model | Aux | Shifts | Daily
Schedule. Accept the default name Day_1 and enter a Start Time of 0:0
and End Time of 9:0. This corresponds to a nine hour workday consisting
of eight hours of actual work and one hour of breaks. Enter 3 in the No. of
Breaks.

4. Define the break states for Day_1. Select the Breaks button and enter
the break names and break start times as shown. There is a break Break_1
scheduled after the second hour, break Break_2 scheduled after the fourth
hour and again Break_1 scheduled after the sixth hour. The end times for
the breaks will be computed based on the break start time and the duration
of the corresponding shift break. Click on OK on the Day_1 Break States
dialog box.

- 157 -
Click on OK on the Daily Schedule dialog box.

5. To apply this shift schedule to the elements to which it applies, select


Model | Aux | Shifts | Assoc. The message window will prompt "Daily
Schedule <Day_1> selected. Select an Element Class to associate schedule
to". Pick each of the following element classes:

Defining and Assigning Downtime Schedules


A downtime schedule can be prepared to describe the length of time a
particular element is available for processing and the length of time that is
down for repair or maintenance. This schedule can then be applied to all
the pertinent model elements to define the downtime patterns of those
elements.

1. First define the failure class and its type. Select Model | Aux | Failures |
Create/Modify. The Failure dialog box appears. Use the default name of
Failure_1 and choose Simulation Time as the Failure Mode.

- 158 -
2. Next, define the distributions to describe the time between failures and
the time to repair for this failure class. To define the time between failures,
select Failure Distribution on the Failure dialog box.

Choose Exponential from the Distributions display list. Click on OK. On the
Exponential dialog box enter a Mean value of 3600 sec and click on OK.

3. To define the time to repair, choose Time Only for Repair Process.
Choose Uniform from the Distributions display list. Click on OK. Enter a
Minimum Value of 180 sec. Enter a Maximum Value of 300 sec and click
on OK. Click on OK on the Failure dialog box.

4. Apply this failure schedule to the appropriate elements. Select Model |


Aux | Failures | Assoc. The message window will prompt "Failure Class
<Failure_1> selected. Select an Element Class to associate Failure
<Failure_1> to".

With the LMB, pick each of the following element classes:

Save the Model


Select Model | Build | Model | Save. On the Select File dialog box enter
the name shifts.mdl for the file name of this model. When the File exists.
Overwrite? dialog box appears, select Yes.

Run the Simulation


To run the model, Select Run | Simulate | Simulation | Run. The Run
dialog box appears. Set the Run Time at 9 hours (32400 sec). The
simulation will run to this time and terminate. Leave all other settings at
default and click on OK. The simulation will begin. When time 32400.0
seconds is reached, the simulation will stop and the message window will
prompt "Simulation Run Completed."

- 159 -
CHAPTER 11
LABOR I

Introduction
This lesson introduces the concept of labor allocation in a QUEST
simulation model. In this tutorial, the concepts of part, source, sink, buffer,
and machine are used in association with labor requirements. This tutorial
explains all the ways of modelling the labor in this version of QUEST and
applying them on selected model elements. Some system defaults will be
used throughout this lesson to demonstrate the ease with which QUEST
models can be built.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

- 160 -
3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5. The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6. The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

7. The proper color needs to be set for comfortable viewing. To do this,


select Pref | Preferences | Color | Floor.

8. Select the Abs button. Complete the Floor Color dialog box as shown
and click on OK.

- 161 -
Create Part Classes
Two part classes to be used in this model will be created.

1. Select Model | Build | Part Class | Create/Modify. The Part Class


dialog box appears as shown below.

Select the Display button. The Part Class Display dialog box will appear as
shown.

- 162 -
With the LMB, select the Attributes button. In the Part Class Display Attributes
dialog box, change the part color to Red and click on OK. Click on OK on the
Part Class Display and Part Class dialog boxes.

2. Repeat step 1 for the other Part Class, Part2. Choose Blue as the color
and all others as the default options.

Figure 11-1 The Completed Model

- 163 -
Create Sources
Two sources will be created for this model to serve as the mechanisms by
which the parts can enter the model.

1. Select Model | Build | Element Class | Source. The Source dialog box
appears as shown below.

2. The inter-arrival time (IAT) of the part, Part1, as created by class


Source1 must be defined. Select the IAT button on the Source dialog box.
The Distributions display list will appear. Choose Exponential. The
Exponential dialog box will appear. Enter 75 for the mean value. Leave
the starting stream at 1 and click on OK.

- 164 -
3. Part fractions for Part1, the only part for class Source1, will be defined.
Select the Part Fractions button from the Source dialog box. The Part
Class Fractions dialog box will appear. Enter a value of 1.0 for Part1 and
0.0 for Part2 to indicate that only Part1 arrives at this source.

Click on OK on the Source dialog box.

4. The message window prompts for the position of the Source1_1 on the
floor/2D window. Place the created Source1 on the floor. Refer to Figure
11-1 for the positions of the various model elements to be created in this
model. Use the world display buttons at the bottom of the screen (Rotate,
Cruise, View, etc.) to reorient the screen view in order to get an overall
picture of the working grid.

5. Translate the created source to the appropriate position on the floor.


Select Model | Build | Element | Sel.

The source just created will be highlighted to show that it is selected as this is the
only element in the model. Select the Trn button under the Element title bar and
use the LMB (along the X-axis) or the MMB (along the Y-axis) to translate the
source until it is located at the desired position as indicated by Figure 11-1.

6. Repeat steps 1-5 for a new source, class Source2. Use the same
characteristics, geometry and IAT as Source1. Only Part2 arrives at class
Source2. Therefore, enter a value of 0.0 for Part1 and 1.0 for Part2 in the
Part Class Fractions dialog box for this source.

Create Cycle Processes


In this lesson, two cycle processes will be created both with the same
cycle time but as the tutorial proceeds, different labor requirements will be
assigned to each process.

Process_1 will be shared by classes Machine1 and Machine3.


Process_2 will be shared by classes Machine2 and Machine4.

- 165 -
The cycle process to machine association will be completed after the machine and
labor classes are created.

1. Select Model | Aux | Process | Cycle.

Create a New Cycle Process and the Cycle Process Definition dialog box appears
as shown below.

Select the Cycle Time button and choose Exponential from the Distributions
display list. Enter a mean value of 20 and click on OK.

2. Repeat step 1 and create another Cycle Process, Process_2 with the
same time requirements.

Create Machines
Parts are created at the source and proceed to their respective machines for
processing. The machines are created next.

- 166 -
1. Select Model | Build | Element Class | Machine. The Machine dialog
box appears as shown below. Use default settings and name this machine
Machine1.

2. Repeat the previous steps to create the new machines, Machine2_1,


Machine3_1, and Machine4_1. Use the same characteristics and geometry
as Machine1_1. Position each machine as shown in Figure 11-1.

Create Sinks
Two sinks will be created for this model to serve as the mechanisms by
which the two classes of parts can exit from the model.

1. Select Model | Build | Element Class | Sink. The Sink dialog box
appears as shown. Use the default settings and name this Sink1. Click on
OK.

- 167 -
2. Move the sink to the proper location in the layout as shown in Figure
11-1.

3. Repeat the previous steps to create a new sink class, Sink2.

Create Buffers
Six buffers will be created for this model: one each after the two sources,
one each before the two sinks, and the remaining two between the two
machines along each of the processing lines (See Figure 11-1). Buffers are
created to prevent parts from blocking machines due to differences in
cycle and inter-arrival times or as a result of machine downtime.

1. Select Model | Build | Element Class | Buffer. The Buffer dialog box
appears. Name this buffer class BufferShort_1 and leave all other settings
at their default value.

- 168 -
2. Select the Display button from the Buffer dialog box. The Display
dialog box appears.

- 169 -
3. Select the 3D File button from the Display dialog box and choose table
from this library: ..\QUESTlib\PARTS\GIFTS\BUFFERS\.

Place the buffer in its proper position in the layout as shown in Figure 11-1.

4. Create the other three buffer classes with the same geometry as class
BufferShort_1 (see Figure 11-1) as in steps 1-3 above. Enter the names
BufferShort_2, BufferShort_3, and BufferShort_4, respectively. Move the
elements to their proper position in the layout as indicated by Figure 11-1.

5. A longer buffer, to be placed between each of the machines, will be


created. Select Model | Build | Element Class | Buffer.

The Buffer dialog box appears. Name this buffer class BufferLong_1. Change the
Capacity Type to Number. Select the Capacity button on the Buffer dialog box
and change the capacity to 6.

- 170 -
6. Select the Display button from the Buffer dialog box and choose X-axis
as the Stack Axis direction. For geometry, select the 3D File button and
choose table_long from this directory:
..\QUESTlib\PARTS\GIFTS\BUFFERS\.

7. Repeat the previous 2 steps to create class BufferLong_2. Use the same
characteristics and geometry as BufferLong_1.

8. Move the two long buffer elements to their proper position as shown in
Figure 11-1.

Connect the Elements


Having defined the basic process elements in the system, the next step in
the model building process is to define the proper sequence; that is, the
flow of parts through the system. Logical connections made between the
elements can be accomplished with the following steps.

1. Select Model | Build | Connections | Element.

The message window will prompt for the starting element. Pick Source1_1. The
message window prompts for an ending element. Pick BufferShort_1_1. Repeat
this step for each location denoted by a black arrow on Figure 11-2.

- 171 -
Figure 11-2 The Completed Model

Create Labor
Labor is required by the processes defined for the four machines in the
model. The machines each require a laborer for their entire cycle time. In
this model, machines Machine1_1 and Machine3_1 share Labor1_1;
Machine2_1 and Machine4_1 share Labor2_1.

1. Create the Labor Controller. Select Model | MHS | Controller | Labor.

The Labor_Controller dialog box appears. Leave all the default settings as is and
click on OK. Place the Labor_Controller1_1 in the corner of the floor.

2. Laborers are required to move parts between the machines. To create


laborers, select Model | MHS | MHS Element | Labor. The Labor dialog
box appears. Complete the dialog box as shown and click on OK.

- 172 -
The Animation Mode field can be set to either Move Between Points or Beam
Between Points. With the field set to move between points, labor animation
occurs with a specified speed, in this case, 1.0 ft/sec. If Beam Between Points is
chosen, there is no animation of the labor movement. After a specified move time
has occurred, the laborer will disappear from the original element and appear at
the destination element. This will be shown in a section later in this tutorial.

3. The message window will prompt for an element to locate the labor at.
Pick Machine1_1.

4. Create a second laborer. Repeat steps 2 and 3. Enter Labor2 for labor
class name. Use the Move Between Points option for the Animation
Mode. Locate Labor2_1 at Machine2_1.

Associate Cycle Processes to the Machines


1. To start with we will modify the two cycle processes to define the labor
requirements. Select Model | Aux | Process | Cycle. Choose Process_1.
The Cycle Process Definition dialog box will appear.

Select the Labor button. The Labor Requirements dialog box will appear.
Complete the dialog box as shown and click on OK. This signifies that class
Labor1 is assigned to Process_1.

2. Repeat the previous step for Process_2 and complete the Labor
Requirements dialog box as shown:

- 173 -
3. The next step is to associate the modified cycle processes to the
machines. Select Model | Aux | Process | Assoc.

The message window prompts to indicate a class to set the process for. Use the
LMB to pick Machine 1. The Process Assignment dialog box will appear. Choose
Process1 and click on OK.

4. Following the previous steps, associate Machine3 to Process1 and


associate Machine2 and Machine4 to Process2.

Save the Model


It is a good practice to save the model periodically during the element
building process.

Select Model | Build | Model | Save. Save the model with the name
labor01.mdl.

Run the Simulation


1. Select Run | Simulate | Simulation | Interval. Set the Anim on Step
Size to 4 and Anim Off Step Size to 60.

2. To run the model select Run | Simulate | Simulation | Run. Run the
model for 1000.00 sec

Beam Between Points


This section will demonstrate how laborers are "beamed" between points.

1. Select Model | MHS | MHS Element | Labor. Choose Labor1. The


Labor dialog box will appear. Change the animation mode to Beam
Between Points and click on OK.

2. Repeat the previous step for Labor2 and run the model for 1000.00 sec.
Now Labor1 beams between Machine1 and Machine3, and Labor2 beams
between Machine2 and Machine4.

- 174 -
CHAPTER 12
LABOR II

Introduction
This lesson explains another way of modelling the labor in a QUEST
model. It explains the concept of labor movement along "via paths". Labor
via paths are simple straight line paths created between Labor Points of
different elements. In the default method, when the labor is requested to
move to an element, a default straight line via path is created between its
current Labor_Pt and the destination elements selected Labor_Pt. In the
user-created method, the user can create labor via paths between different
elements. When it is first created, it is a default straight line path with a
starting and ending via points. Additional via points can be added to the
via path and their positions/orientation can be modified.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear

- 175 -
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

7.

The proper color needs to be set for comfortable viewing. To do this,


select Pref | Preferences | Color | Floor.

- 176 -
8. Select the Abs button. Complete the Floor Color dialog box as shown
and click on OK.

Create Part Class


The part class to be used in this model will be created. Select Model |
Build | Part Class | Create/Modify. Accept all the default options and
click on OK.

Create a Source
A source will be created for this model to serve as the mechanism by
which the parts can enter the model.

1. Select Model | Build | Element Class | Source. The Source dialog box
will appear as shown:

- 177 -
The inter-arrival time (IAT) of Part1, as created by class Source1, must be
defined. Select the IAT button on the Source dialog box. The Distributions
display list will appear. Choose Constant and click on OK. The Constant dialog
box will appear. Enter a value of 15 sec and click on OK. Click on on the Source
dialog box.

2. The message window will prompt for a location to position Source1_1


to, on the floor. Refer to Figure 12-1 to identify the location and relative
positions of all the elements of this model. Place Source1_1 as close as
possible to a corresponding location on the floor. Use the world display
buttons at the bottom of the screen (Rotate, Cruise, View, etc.) to reorient
the screen view if necessary for a better view of the working grid.

3. If it is necessary to move Source1 to a different position, select Model |


Build | Element | Sel. Source1 will be selected as this is the only element
in the model. Select the Trn button and use the LMB (along the X-axis) or
the MMB (along the Y-axis) to translate the source until it is located at the
desired position as indicated by Figure 12-1.

Figure 12-1 Completed Model

- 178 -
Create Cycle Process
This section will show how to create a single cycle process, and the cycle
time set with a constant value of 15.

Select Model | Aux | Process | Cycle. Choose New from the Select
Process dialog box and click on OK. The Cycle Process Definition dialog
box will appear. Change the process name to Machining. Select the Cycle
Time button and choose Constant from the Distributions display list.
Enter 15 as the value and click on OK. Click on OK on the Cycle Process
Definition dialog box.

Create Machines
Parts are created at the source and proceed to their respective machines for
processing. These machines are created next.

1. Select Model | Build | Element Class | Machine.

- 179 -
The Machine dialog box appears as shown below. Name this class of machines,
Machine1 and change the No. of Elements to 4. This will create four machines in
the machine class, Machine1.

2. Select the Display button. The Display dialog box appears as shown.

- 180 -
Select the 3D File button, choose Select from library, and choose
lathe118x28x51 from the ..\QUESTlib\PARTS\GIFTS\WORKCELLS\ directory.
Click on OK. The message window prompts the user to place the four machines
on the floor, one after another. Place these machines as shown in Figure 12-1.

Create a Sink
A sink for this model will be created to serve as the mechanism by which
the parts can exit from the model.

1. Select Model | Build | Element Class | Sink. The Sink dialog box
appears as shown. Use the default settings and name this Sink1. Click on
OK.

- 181 -
2. Move the sink to the proper location in the layout as shown in Figure
12-1.

Create a Buffer
A buffer will be created for this model. Place this buffer in front of the
source (See Figure 12-1). Buffers are created to prevent parts from
blocking machines due to differences in cycle and inter-arrival times or as
a result of machine downtime.

1. Select Model | Build | Element Class | Buffer. The Buffer dialog box
appears as shown below. Name this buffer class Buffer1 and click on OK.

- 182 -
2. Move the buffer to the proper location in the layout as shown in Figure
12-1.

Connect the Elements


Having defined the basic process elements in the system, the next step in
the model building process is to define the proper sequence; that is, the
flow of parts through the system. Logical connections made between the
elements can be accomplished with the following steps.

Select Model | Build | Connections | Element. The message window will


prompt for the starting element. Pick Source1. The message window will
prompt for an ending element. Pick Buffer1. Repeat this step for each
location denoted by a white arrow on Figure 12-2.

- 183 -
Figure 12-2 Connecting the Elements

Create Labor
Labor is required by the process defined for the four machines in the
model. The machines each require a laborer for their entire cycle time. In
this model, machines Machine1_1, Machine2_1, Machine3_1, and
Machine4_1 share two laborers of labor class Labor1 for moving the parts
from one point to another in the model.

1. Select Model | MHS | Controller | Labor. The Labor_Controller dialog


box appears as shown below. Select all the default settings and click on
OK. Place Labor_Controller1_1 in a corner of the floor.

- 184 -
2. The next step is to create the laborers that are required to move parts
between the machines. Select Model | MHS | MHS Element | Labor. The
Labor dialog box appears. Complete the dialog box as shown below and
click on OK.

- 185 -
The option of Move Between Points provides the laborer with the animation mode
to move between the points with the specified speed of 1.0 ft/sec. Here two
elements under the labor class Labor1 are being created and they will move
between the elements in the model on the specified via paths.
The message window prompts for an element to locate the first instance of
Labor1. Pick Sink1_1. Similarly, locate the second element of Labor1 on
Buffer1_1.

Associate Cycle Processes to the Machines


To associate the already created cycle process to the machines. Select
Model | Process | Process | Assoc.

The message window prompts to indicate a class to set the process for. With the
LMB, pick Machine1. The Process assignment dialog box appears. Enter
Machining for Cycle_1, and None for Unload Process. Click on OK.

- 186 -
Save the Model
Select Model | Build | Model | Save. Enter labor02.mdl as the model
name.

Setting the Part Routing, Route Logic, and Depart


Requirements
The last part of the tutorial is to set the Part Routings and Departure
Requirements for all four machines of machine class Machine1. Also in
this part of the lesson, the Routing Requirement for part class Part1 will be
specified.

1. To set the Routing Requirement for part class, Part1, select Model |
Build | Part Class | Create/Modify. Choose Part1 and the Part Class
dialog box appears. Enter the values as shown. Click on OK.

2. To set the part routings and the departure requirements for all four
machines of machine class Machine1, select Model | Build | Element |

- 187 -
Modify. Choose Machine1_1 as the element to be modified. Complete the
Modify Element dialog box as shown and select the Part Routing button.

3. The Part Routing Info dialog box will appear. Select Labor
Requirement from this dialog box. The Labor Requirement dialog box
appears. Complete the dialog box as shown and click on OK on this and
each of the remaining dialog boxes.

4. Set the Labor Depart Requirements for the labor picking and moving
parts from the machines. Select the Labor Depart Requirement button
from the Modify Element dialog box for Machine1_1. The Departure
Requirements dialog box appears. Complete the dialog box as shown and
click on OK.

- 188 -
5. Repeat steps 2, 3 and 4 for the remaining three machines and buffer.

6. Modify the Part Requirements for the source to indicate that no labor is
required to move the parts from the source to the buffer. To do this part
routing, select Model | Build | Element | Modify and choose Source1_1
as the element to be modified. When the Modify Element dialog box
appears, complete it as shown and select the Part Routing button.

7. The Part Routing Info dialog box will appear. Select Labor
Requirement from this dialog box. The Labor Requirement dialog box
appears. Select None for each field and click on OK on this and any
remaining dialog boxes.

8. The next step is to set the Route Logic for the buffer so that the parts
arriving at the buffer from the source get routed to the two outgoing via
paths in the cyclic order. To do this, select Model | Build | Element Class |
Buffer and choose Buffer1. Select the Buffer button under the Element
Class title bar and choose Buffer1. From the Buffer dialog box select the
Logics button. The Logics dialog box appears as shown.

- 189 -
Select the Route Logic button. The Route Logic dialog box appears as
shown. Choose Cyclic Order and click on OK.

The parts being transferred between the various elements of the model go
to that element's way point while processing. The way points of the four
machines are close to the floor and need to be moved. To do this, select the
way points of each of the machines and snap them to the surface of the
machine.

9. Select Advanced | Anim | Way Points | All to make the various way
points all visible. Examine the way point for the lathe and check if it is
located on the work surface. If not, select Advanced | Anim | Way Points |
Sel and pick the way point. Then, select Advanced | Anim | Way Points |

- 190 -
Snap. This will bring up a dialog box, Snap Way Point On. Choose
Center on Surface and then pick on the working surface of the lathe.

Save the Model


Select Model | Build | Model | Save. Save the model under the name
labor02.mdl. QUEST will prompt for the confirmation to replace the
already existing labor02.mdl. Select Yes.

Run the Simulation


To run the model, select Run | Simulate | Simulation | Run. Complete the
dialog box as shown and click on OK.

NOTE: Initially when the labor via paths are created, they are straight line paths
between the two selected elements. These labor via paths can be translated, rotated, and
modified in the way needed to define the labor's path. Via paths can be modified with the
buttons available through Advanced | Anim | Way Points. The buttons under the Way
Points title bar can be used for selecting, rotating, translating, and snapping the existing
via point to a new location, thereby changing the existing via path. The Add Via Point
button under the Way Points title bar can also be used to add an additional via points to
the existing via path

CHAPTER 13
LABOR III

Introduction

- 191 -
This lesson explains another way of modelling the labor in the QUEST
model. It explains the concept of labor movement on the path system.
Labor movement on a path system is similar to AGV movement. A labor
path system element can be created with the segments and labor decision
points. The labor moves between the labor decision points through the
segment connections. Labor has no acceleration or deceleration.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2. If QUEST was used previous to starting

this model building session, the QUEST world should be cleared and
reset. To do this, select File | Clear World. When prompted with ? Clear
World ?, select Yes to confirm this selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

- 192 -
5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

Create Part Class

1. Select Model | Build | Part Class | Create/Modify. The Part Class


dialog box is displayed.

- 193 -
Accept the default settings and click on OK. The message window confirms the
creation of the part class.

Create a Source
One source will be created for this model to serve as the mechanism by
which the parts can enter the model.

1. Select Model | Build | Element Class | Source. The Source dialog box
is displayed.

- 194 -
2. Complete the Source dialog box as shown above. Do not click on OK.
The inter-arrival time (IAT) of Part1 as created by class Source1 must be
defined. Select the IAT button on the Source dialog box. The Distributions
display list will be displayed. Select Constant and click on OK. The
Constant dialog box will be displayed next. Enter a value of 60 and click
on OK.

Click on OK on the Source dialog box. The message window prompts for the
position of Source1_1 on the floor/2D window. Place the created Source1 on the
floor in the 3D world.

3. Change the grid size. Select Pref | Preferences | Grid. The Grid dialog
box is displayed. Enter 25 for Number and enter 3 for Spacing. Leave
Display set to Grid and Floor. Click on OK on the Grid dialog box.

- 195 -
4. Change the view and camera specs. From the World Display menu
option, select the View button. The User View Ops dialog box is
displayed. Choose Standard Views and then, from the Standard Views
dialog box, choose Top.

Select the Camera button. The Camera Options dialog box is displayed. Select
Camera Specs. The Camera Specs dialog box is displayed. Toggle the
Projections field to Orthographic. Click on OK.

5. Translate the created source to the appropriate position on the floor.


Select Model | Build | Element | Trn.

The created source will be selected as this is the only element in the model. Using
the LMB (along the X-axis) or the MMB (along the Y-axis), translate the source
until it is approximately located at the desired position as indicated by Figure 13-
1.

Figure 13-1 Labor III Model Layout

- 196 -
Create a Sink
One sink will be created for this model to serve as the mechanism by
which one part class can exit from the model.

1. Select Model | Build | Element Class | Sink. The Sink dialog box is
displayed as shown below. Accept the default settings and click on OK.

2. Locate the sink at the proper location in the layout as shown in Figure
13-1.

Create a Buffer
One buffer to hold parts waiting to enter the system will be created for this
model.

1. Select Model | Build | Element Class | Buffer.

The Buffer dialog box is displayed as shown below. Use the defaults including a
class name of Buffer1. Do not click on OK.

- 197 -
2. On the Buffer dialog box, select the Logics button. The Logics dialog
box will be displayed. From this dialog box, select the Route Logic button
and choose Cyclic order. Click on OK on the Route Logic dialog box, the
Logics dialog box, and the Buffer dialog box.

3. Locate the buffer at the proper position in the layout as shown in Figure
13-1.

Create Machines
Parts are created at the source and proceed to their respective machines for
processing. These machines are created next.

1. Select Model | Build | Element Class | Machine.

The Machine dialog box is displayed as shown below. Name this class of
machines Machine1 and change the No. of Elements field to 4. This will create
four machines under the machine class, Machine1.

- 198 -
2. From the Machine dialog box, select Cycle Process. The Select Process
dialog box is displayed. From this, choose New Process and click on OK.
The Cycle Process Definition dialog box is displayed.

Name this process Machining. Click on Cycle Time and specify the time with a
Constant value of 15 seconds. Click on OK on the Constant dialog box, the
Cycle Process Definition dialog box and the Machine dialog box. The message
window prompts for placing the four machines on the floor, one after another.
Place these machines as shown in Figure 13-1.

Create Labor Segments


Labor has a segment creation mechanism identical to conveyors. The
segment creation doesn't require the merge or split intersection to dictate
the need for a new labor path system. In this model, one labor path system
is created.

1. Select Model | Layout | Create System | Labor.

The Labor_Path_System dialog box is displayed. Complete the dialog box as


shown below and click on OK.

- 199 -
2. Specify the setup method for creating labor path system arcs and the
default elevation. Select Model | Layout | Layout | Setup. The Layout
Setup dialog box is displayed. Toggle the Arc Mode to Angle-Radius,
enter 0.0 for the elevation, and click on OK.

3. Create segments for the labor path system. Select Model | Layout |
Layout | L <-> A. This mode will alternate between line and arc creation.
Use the LMB to pick a point near the top middle of the layout to start
drawing the first segment. The message window will then prompt to
"Indicate Next Point". Select Model | Layout | Rel.

The Rel Coords dialog box is displayed. Enter -25.0 for X and click on OK.

4. Since the user is alternating between lines and arcs, the Arc Parameters
dialog box is displayed. Set the Angle to 90 degrees, the Radius to 3 feet,
and the Direction to Left. Click on OK.

- 200 -
5. The message window will again prompt with "Indicate Next Point".
This point will be heading directly down the left side of the layout. Select
Model | Layout | Rel. The Rel Coords dialog box is displayed. Enter
-50.00 for Y and click on OK.

6. The Arc Parameters dialog box will be displayed again. The values that
were entered the first time are acceptable again here. Click on OK.

7. The message window will again prompt with "Indicate Next Point".
This segment will be placed along the bottom of the layout for the same
distance as the first one. Select Model | Layout | Rel. Enter 25.0 for X and
click on OK.

Select Cancel to remove the Arc Parameters dialog box.

8. Create the segments to form the loop on the right side of the layout.
Select Model | Layout | Layout | L <-> A. Pick a point near the top middle
of the layout.

9. The message window will then prompt to "Indicate Next Point". Select
Model | Layout | Rel. The Rel Coords dialog box is displayed. Enter 25.0
for X and click on OK.

10. When alternating between lines and arcs, the Arc Parameters dialog
box is displayed. Set the Angle to 90 degrees, the Radius to 3 feet, and the
Direction to Right. Click on OK.

11. The message window will again prompt with "Indicate Next Point".
This segment will be placed directly downwards along the right side of the
layout. Select Model | Layout | Rel. The Rel Coords dialog box is
displayed. Enter -50.00 for Y and click on OK.

12. The Arc Parameters dialog box will be displayed again. The values
that were entered the first time are acceptable again here. Click on OK.

- 201 -
13. The last segment in this loop will be placed along the bottom of the
layout. The message window prompts again to "Indicate next point".
Select Model | Layout | Rel. The Rel Coords dialog box is displayed.
Enter -25.00 for X and click on OK.

Select Cancel to remove the Arc Parameters dialog box.

NOTE: After creating the labor layout system, the Model | Layout | Element | Sel/Trn
buttons can be used to position the various model elements with respect to the segments
as shown in Figure 13-1.

Create Labor Controllers


Two labor controllers will be created for this model. Labor_Controller1
will control the labor and the decision points on the right side of the
model, and Labor_Controller2 will control the decision points and the
labor on the left side of the model. The other model elements (source,
sink, buffer, machines, etc.) can be under the control of any of the labor
controllers. In this model, the other model elements are controlled by
Labor_Controller1.

1. Select Model | MHS | Controller | Labor. The Labor_Controller dialog


box is displayed. Accept all the default settings and click on OK. Place
Labor_Controller1 on the right side of the model, signifying that this labor
controller is controlling the labor and the labor decision points on the
corresponding side.

- 202 -
2. Repeat step 1 and create the second labor controller. Place
Labor_Controller2 on the left side of the model, signifying that this labor
controller is controlling the labor and the labor decision points on the
corresponding side.

Create Labor Decision Points


1. Eight decision points will be created for this model. Select Model |
Layout | Dec Point | Labor.

The Labor_Dec_Pt dialog box is displayed. Accept all the default settings. Ensure
that the controller for this decision point is Labor_Controller1_1. Click on OK.
With the LMB, pick a location on the right side of the loop of the labor path
system close to Buffer1_1.

2. Repeat step 1 for the second decision point class, Labor_Dec_Pt2, and
place the decision point close to the machine on the upper right-hand side
of the model (Machine1_3). See figure 13-1.

Create classes Labor_Dec_Pt3 and Labor_Dec_Pt4 and place the decision points
close to Machine1_4 and the sink, respectively, on the right side of the loop.

3. Create a NEW labor decision point for the loop on the left side of the
model. Select Model | Layout | Dec Point | Labor. The Labor_Dec_Pt
dialog box is displayed. Change the Controller field for this decision point

- 203 -
to Labor_Controller2_1. Accept all other default settings. Click on OK.
With the LMB, pick a location, close to Buffer1_1, on the left side of the
labor path system loop.

4. Repeat step 3 for the remaining three decision point classes,


Labor_Dec_Pt6, Labor_Dec_Pt7, and Labor_Dec_Pt8. Place the decision
points as shown in Figure 13-1.

Create Labor
Labor is required to carry the parts from the source, process them at the
machines, and drop them at the sink. In this model, two labor classes will
be created, each having one element. One laborer will move along the
segment on the left side of the model, and the other laborer will move
along the segment on the right side of the model.

1. Create the laborers required to move parts between the machines. Select
Model | MHS | MHS Element | Labor. The Labor dialog box is
displayed. Complete this dialog box as shown below and click on OK.

NOTE: QUEST will enable the Speed field only if the Move Time Mode field is set to
Speed Based.

- 204 -
The option of Move Between Points provides the laborer with the animation
mode to move between the points with the specified speed of 1.0 ft/sec.
The message window prompts for an element to locate the only element of
Labor1. Pick the segment near the buffer on the right side of the loop.

2. Create the second labor. Repeat step 1. On the Labor dialog


box,complete the settings as in step 1. For this labor class (Labor2) choose
Labor_Controller2_1 as the labor controller. Place the laborer close to the
buffer on the left side of the loop.

Connect the Elements


Having defined the basic process elements in the system, the next step is
to define the proper sequence, that is, the flow of parts through the system.
Logical connections are made between the elements, which is
accomplished by the following steps:

1. Select Model | Build | Connections | Element.

- 205 -
The message window will now prompt for a starting element. Pick Source1_1.
The message window next prompts for an ending element. Pick Buffer1_1.

2. Repeat step 1 and make the connections between Buffer1_1 and


Labor_Dec_Pt5_1, and connect the second output from Buffer1_1 to
Labor_Dec_Pt1_1.

3. Repeat step 1 and make the connections from Labor_Dec_Pt8_1 and


Labor_Dec_Pt4_1 to the two inputs of the Sink.

4. Repeat step 1 and connect the machines to their corresponding decision


points as input and output.

a. Pick Labor_Dec_Pt2_1 and pick Machine1_3 to make the input


connection.
b. Pick Machine1_3 and pick Labor_Dec_Pt2_1 to make the output
connection.
c. Pick Labor_Dec_Pt3_1 and pick Machine1_4 to make the input
connection.
d. Pick Machine1_4 and pick Labor_Dec_Pt3_1 to make the output
connection.
e. Pick Labor_Dec_Pt6_1 and pick Machine1_1 to make the input
connection.
f. Pick Machine1_1 and pick Labor_Dec_Pt6_1 to make the output
connection.
g. Pick Labor_Dec_Pt7_1 and pick Machine1_2 to make the input
connection.
h. Pick Machine1_2 and pick Labor_Dec_Pt7_1 to make the output
connection.

Save the Model


It is a good practice to save the model periodically during the model
building process.

The Read Model and Save Model buttons can be found under the Model |
Build | Model title bar. Save the model under the name labor03.mdl.

Setting the Depart Requirements and Part Destination


The last part of the tutorial is to set the departure requirements and part
destinations for the labor decision points.

- 206 -
1. To set the depart requirements for the decision points in this model,
select Model | MHS | Dec Point | Depart Requirements. Pick
Labor_Dec_Pt1_1 and complete the Departure Requirements dialog box
as shown below and click on OK.

2. Repeat step 1 for Labor_Dec_Pt2_1, Labor_Dec_Pt3_1,


Labor_Dec_Pt5_1, Labor_Dec_Pt6_1, and Labor_Dec_Pt7_1.

3. Repeat step 1 for the remaining two decision points (Labor_Dec_Pt4_1


and Labor_Dec_Pt8_1) but complete the Departure Requirements dialog
box as shown below:

4. To set the part destination, select Model | MHS | Dec Point | Part
Destination.

The Select Element Name dialog box is displayed. Choose Labor_Dec_Pt1_1


from this dialog box and click on OK. The Select Part Destination Options dialog
box is displayed.

- 207 -
Select Add under Fixed Destination Info from the Select Part Destination Options
dialog box. The Select a Part Class dialog box is displayed. Choose Part1 from
this dialog box and click on OK. The message window instructs the user to
indicate the destination decision point. Choose Labor_Dec_Pt2_1, and click on
OK.
Select Cancel to remove the dialog boxes.

5. Repeat step 4 and set the part destination for Part1 for the following
combinations.

Labor_Dec_Pt2_1 to Labor_Dec_Pt3_1
Labor_Dec_Pt3_1 to Labor_Dec_Pt4_1
Labor_Dec_Pt5_1 to Labor_Dec_Pt6_1
Labor_Dec_Pt6_1 to Labor_Dec_Pt7_1
Labor_Dec_Pt7_1 to Labor_Dec_Pt8_1

Save the Model


Select Model | Build | Model | Save. Save the model under the name
labor03.mdl.

Run the Simulation


To run the model, select Run | Simulate | Simulation | Run. The Run
dialog box is displayed. The default Run Time is 1000 seconds. Change
the Run Time to 7200 seconds. The simulation will run to this time and
terminate. Complete the Run dialog box as shown below and click on OK.

- 208 -
CHAPTER 14
SIMULATION CONTROL
LANGUAGE (SCL)

14.1 Introduction

This lesson will introduce the programming engine for QUEST called
SCL (Simulation Control Language). SCL is a powerful language that
allows users to change the logic that drives QUEST and to create their
own library of logic.

- 209 -
14.2 The Model

The system to be modelled in this tutorial is shown in Figure 14-1. The


arrows denote the flow of parts through the model. SCL route logic will be
chosen for the buffer to decide where to route individual parts. SCL
process logic will be written for the machines to describe their behavior.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ...". When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

- 210 -
5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

Figure 14-1 View of the Simulation Control Language Model

- 211 -
Create Part Classes
Three part classes will be used in this model. They are:

Part1
Part2
Part3

1. Select Model | Build | Part Class | Create/Modify. The Part Class


dialog box will appear. Enter the values as shown below and select
Display.

The Part Class Display dialog box will appear. Enter 1 for Display Index and
select Attributes. The Part Class Display Attributes dialog box will appear. Enter
values as shown and click on OK.

Click on OK for the Part Class Display dialog box. Click on OK on the Part Class
dialog box.

- 212 -
2. Repeat the previous step to create Part2 and Part3. Choose a different
color for each of the different part classes.

Create a Source
One source will be created to generate parts for the model. It is Source1_1.

1. Select Model | Build | Element Class | Source. The Source dialog box
appears. Name the source class as Source1 and use default settings for all
other fields.

2. The inter-arrival time (IAT) of part classes Part1, Part2, and Part3, at
class Source1 will be defined.

Select the IAT button. The Distributions display list will appear. Choose
Constant and the Constant dialog box will be displayed. Input a value of 10 and
click on OK.

- 213 -
To have parts Part1, Part2, and Part3 all arrive in equal proportions, select Part
Fractions. The Part Class Fractions dialog box will appear. Enter values as shown
and click on OK.

This ensures that the parts Part1, Part2, and Part3 arrive in equal proportions.
Click on OK on the Source dialog box.
Refer to Figure 14-1 for the positions of the various model elements that are
created in this model. Use the world display buttons at the bottom of the screen
(Rotate, Cruise, View, etc.) to reorient the screen view in order to get an overall
picture of the working grid.

3. Select Model | Build | Element | Trn. Move the selected Source1_1 to


its desired position as shown in Figure 14-1. Use the LMB to move
Source1_1 along the X-axis or the MMB to move along the Y-axis.

Create a Buffer
One buffer will be created for this model. It will be used to route the parts
in a cyclic fashion to three conveyors.

- 214 -
Select Model | Build | Element Class | Buffer. When the Buffer dialog
box is displayed, use default settings for all the attributes. Click on OK.

When prompted, position the buffer as shown in Figure 14-1.

Save the Model


It is good practice to save the model throughout any model building
process. There are two ways to do this.

1. Select Model | Build | Model | Save. Choose c:\deneb\QTUTORlib\ as


the library and enter scl.mdl as the file name in the Select File dialog box.
Click on Save.

2. The alternative method of saving a model is to select File | Save Model


or File | Save Model As. The Select File dialog box will appear. Choose
c:\deneb\QTUTORlib\ as the library and enter scl.mdl as the file name in
the Select File dialog box. Click on Save.

- 215 -
Create Conveyors
Three conveyor classes will be created for this model. Conveyor classes
Conveyor1, Conveyor2, and Conveyor3. Each conveyor will be dedicated
to delivering parts to a corresponding machine.

1. Select Model | Build | Element Class | Conveyor. The Conveyor dialog


box appears. Use default settings for all fields. Select the Conveyor Info
button. Enter values in the Conveyor Info dialog box shown below.
Complete the dialog box as shown and click on OK.

Click on OK on the Conveyor dialog box. When prompted, position the conveyor
as shown in Figure 14-1.

2. Repeat step 1 to create Conveyor2 and Conveyor3. Position these


according to Figure 14-1.

Create Machines

- 216 -
Three machine classes will be created for this model. Machine classes
Machine1, Machine2, and Machine3. Machines belonging to these classes
will be created and used to process parts for an appropriate amount of time
and then send them to a sink to leave the system.

1. Select Model | Build | Element Class | Machine. The Machine dialog


box appears. Enter Machine1 for the class name and select the Cycle
Process button.

The Select Process dialog box appears. Choose New Process from this dialog box
and click on OK. The Cycle Process Definition dialog box will appear.

- 217 -
Enter Process_1 as the name. Select the Cycle Time button on the Cycle Process
Definition dialog box to set the cycle time for the process Process_1. Choose
Uniform from the Distributions display list and click on OK. The Uniform dialog
box will be displayed. Input a Minimum value of 20 and a Maximum value 30, as
shown, and click on OK.

Click on OK on the remaining dialog boxes and refer to Figure 14-1 for the
positions of the various model elements to be created in this model. Move the
machine to the proper position in the layout.

2. Two more machine classes, Machine2 and Machine3, need to be


created. They should be created in the same manner as machine class
Machine1 was created. Associate the existing process Process_1 with

- 218 -
machine class Machine2 and machine class Machine3. Select the Cycle
Process button to create the required association when creating the
remainder of the machines. The Cycle Process display list will appear.
Choose Process_1 from the display list.

3. Place these machines at the desired location as shown in Figure 14-1.

Create a Sink
A sink needs to be created for this model, to serve as the mechanism by
which parts can exit the model.

1. Select Model | Build | Element Class | Sink. The Sink dialog box
appears. Use the default settings and click on OK.

2. Use Figure 14-1 as a guide to position the sink. Use the same methods
of moving it as when positioning the source and the machines.

Connect the Elements


Having defined the basic elements of the system, the next step in the
model building process is to define the proper sequence; that is, the flow
of parts through the system. Logical connections are made between the
elements and this is accomplished by the following steps.

1. Select Model | Build | Connections | Element. The message window


prompts the user to indicate a starting element. Pick Source1_1. The
message window next prompts for an ending element. With the LMB, pick
Buffer1_1.

2. Repeat the previous step for each of the following pairs of starting and
ending resources:

Buffer1_1 and Conveyor1_1


Buffer1_1 and Conveyor2_1
Buffer1_1 and Conveyor3_1
Conveyor1_1 and Machine1_1
Conveyor2_1 and Machine2_1
Conveyor3_1 and Machine3_1
Machine1_1 and Sink1_1
Machine2_1 and Sink1_1
Machine3_1 and Sink1_1

- 219 -
14.3 SCL Logic Assignment

Now that the model is connected, only two steps remain before running
the model. First, the route logic that decides where parts go when they
leave Buffer1_1 must be selected. Second, the logic that describes how the
machines process parts will need to be written.

Select Buffer Route Logic


The first logic to be chosen is a cyclic route logic for Buffer1_1.

1. Select Model | Build | Element Class | Buffer. Choose Buffer1 in the


Select Element Class dialog box and click on OK. The Buffer dialog box
will appear. Select the Logics button and the Logics dialog box will
appear. Select the Route Logic button and the Route Logic display list
will appear. Choose Cyclic Order and click on OK. Click on OK on the
Logics dialog box. Click on OK on the Buffer dialog box.

2. This cyclic order route logic was written in SCL and provided with
QUEST by default. To view the SCL associated with this route logic,
select File | Edit File and the Select Library dialog box will appear.
Choose QUESTlib and the Select File dialog box will appear. Next, choose
the file rt_cyc.scl.src from the Sysdef\logics directory. After viewing the
file, exit the editor. If using the default editor (igedit), select the Close
button, in the lower right corner, to exit.

3. To look at the routines, route_do_unload and route_unload_parts, used


in the default route logic file, select File | Edit File and choose
route.scl.src from the Sysdef/logics directory. After viewing the file, exit
the editor.

SCL Statements and Routines


The program will use three SCL statements and three SCL routines.
Statements are used to perform some program operations or cause a
change in a condition. Routines are statements that can take arguments and
return values.

SCL Statements

- 220 -
Require part <part_handle> - Wait for a part of a certain type to arrive. Use
of ANY for part-handle will allow any type to be accepted.
Work <time> - Causes the resource to be busy for amount of time specified.
Fail <start_fail>, <repair_time> - Causes a failure to occur starting
<start_fail> seconds repair time of <repair_time>. Both times are relative to
the simulation clock when the statement is executed.

SCL Routines

get_process( process_name ) - Returns the process handle or identifier for the


process.
sample_cycle_time( process_id ) - Returns a real number from the
distribution defined through the user interface. The user must pass the process
identifier to sample_cycle_time.
pass( ) - Places the part that was on the input of the resource to the output. This
will cause route logic to be executed. A part handle can optionally be passed to the
pass routine. It will return the number of parts that were passed.
EXAMPLE:
fail 0, 60 - Causes a failure to occur immediately for 60 seconds.
get_process( 'Process_1' ) - Return the process id for Process_1.
pass( ) - Passes all parts from the input of the element to the output.

Write Machine Process Logic


A text editor must be started to write the SCL Logic. This can be done
from outside of QUEST or by selecting File | Edit File.

This example will sample the machine cycle time from the user interface
and cause the machines to fail for 60 seconds after every 10 cycles.

Program Organization

There are three sections needed in the program:

variable declaration section


user attributes section
program section

Write the program section

The program file needs to be an ASCII file located in the LOGIC$LIB


directory. The default LOGIC$LIB directory that is shipped with QUEST

- 221 -
is ..\QUESTlib\Logics. The program section must start with "begin" and
terminate with "end". All three sections in the program will be
demonstrated: attribute declaration, variable declaration, and the program
section. The code shown below should be saved to a file called
mylogic.scl located in any LOGICS$LIB directory, e.g.,
c:\deneb\QTUTORlib\Logics.

USER_ATTRIB
fail_count : Real
VAR
proc_id : Process
procedure myproc()

begin
require part ANY
proc_id = get_process('Process_1')
work sample_cycle_time(proc_id)
celem->fail_count = celem->fail_count + 1
if (celem->fail_count == 10) then
fail 0,60
celem->fail_count = 0
endif
pass()

end

4. Select Model | Build | Element Class | Machine and choose Machine1


from the Select Machine Class display list and click on OK. The Machine
dialog box will appear. Select the Logics button from the Machine dialog
box and the Logics dialog box will appear. Select the Process Logic
button and the Workcell Process Logic display list will appear. Choose
User Func and click on OK and select the LOGIC$LIB library where the
SCL file is located and then select file from the Select File dialog box.

NOTE: This process compiles the whole of the SCL file. Any errors will produce
messages which explain and locate the problem(s). Edit the file to correct the problem(s)
and reassign the logic to a machine.

5. After successful compilation, the user is prompted to choose the routine


myproc from the Select SCL Function display list. Click on OK on the
Logics dialog box. Click on OK on the Machine dialog box.

6. Repeat the previous step to assign SCL logic to the other two machine
classes Machine2 and Machine3.

- 222 -
Save the Model
Select Model | Build | Model | Save. Choose c:\deneb\QTUTORlib\ as the
library and enter scl.mdl as the file name in the Select File dialog box.
Click on Save.

Run the Simulation


To run the simulation select Run | Simulate | Simulation | Run. Run the
simulation for 1000 seconds.

- 223 -
CHAPTER 15
AGV MODELLING I

15.1 Introduction

This tutorial introduces the basic modelling constructs used to simulate


Automated Guided Vehicles (AGVs).

Figure 15-1 shows what the model will look like once the model is
complete.

Figure 15-1 Creating an AGV Path System

The model to be constructed in this tutorial consists of an AGV Path


System in the form of a loop. Parts will arrive and be placed in a buffer.
An AGV will be called to get a part from the buffer and to transport it to
an unload point where the part will be removed.

The process of building the model includes:

Defining an AGV controller.

- 224 -
AGV path system layout preparation.
Creating AGV path segments.
Defining an AGV class and the AGVs in the class.
Defining and locating decision points on the AGV path.
Defining and locating the part, buffer, source, and sink.
Connecting the source, buffer, sink, and AGV path.
Routing loaded widgets.
Running the model and examining statistics.

Additional detail and supplementary information is provided through the


tutorial. Specific explanation is provided through the use of NOTES.
While this information may be skipped to get through the specific tutorial,
it is strongly recommended that the user read this information in order to
fully understand the "how-tos" of creating AGV path systems. The
information will also help explain what is going on as the model is being
built.

The mouse button use is carefully chosen for most efficient usage. Use of
the LMB is assumed unless otherwise specified.

Displaying QUEST
Once QUEST is "launched", the QUEST window and QUEST 3D window
will use only about two-thirds of the screen. The 3D window is used for
the 3 dimensional graphics simulation. For best visual results, expand the
QUEST window and the 3D window to fill the screen.

This tutorial operates in the 3D window.

Set Up

1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

- 225 -
2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

- 226 -
15.2 Controller

Logic
The logic which drives an AGV in QUEST can be located in three
different places: AGVs, decision points, or controllers. Logic can be
placed in one or more locations and the combinations of logic are used to
control the behavior of the AGVs. The default hierarchy of logic is to use
logic first from an AGV; second, if no AGV logic is provided, to use logic
from a decision point; and third, if no decision point logic is provided, to
use controller logic.

A controller can provide instructions to AGVs concerning which path to


take and can select which AGV to use for a given task.

Although it is not required that the controller be defined as the first step in
the modelling sequence, it is recommended. Defining the controller first
reduces the number of other actions and provides a default association
with subsequent activities. Accordingly, the first modelling step in this
tutorial is to model a controller.

1. Select Model | MHS | Controller | AGV. The AGV_Controller dialog


box will appear. Use default settings for everything and click on OK.

- 227 -
2. The message window will prompt for a location to be selected to place
the controller.

Pick a location on the floor that corresponds with the position shown in Figure 15-
1. If necessary, the controller can be moved later.

NOTE: The option categories and their meanings are:

Move Mode - defines the conditions under which an AGV will stop at a decision
point.
Path Mode - assists in optimizing the path selected by an AGV on its way to a
selected destination.
Claim Mode - a tool that assists in managing traffic congestion.

AGV Path System Layout Preparation


The objective of this section is to set appropriate options for creating an
AGV Path System. There are some preliminary steps to take which will
make creating the AGV path system easier.

Set Up

1. Ensure that the grid is suitable. Select Pref | Preferences | Grid. The
Grid dialog box will appear. Make the following entries and click on OK.

NOTE: When setting the grid size and spacing for a model, be sure to place an element
into the model first, that is BEFORE, changing or setting the grid size and spacing. If
this is not done, the system has no point of reference and the grid size and spacing will
return to the last default used as soon as an element or part is added to the model. This is
the reason why an AGV controller was created and placed into the model before anything
else.

- 228 -
2. The circle style cursor is recommended for creating and modifying
layouts. Select Pref | Preferences | Environment | Dialog. The Preferences
dialog box will appear. Complete the dialog box as shown and click on
OK.

3. The layout setup option must also be suitably set. Select Model |
Layout | Layout | Setup. The Layout Setup dialog box will appear.
Complete the dialog box as shown and click on OK.

4. It is easier to perform path selection when in wireframe mode. Select


the Display button located at the bottom of the work area on the screen.

The World Display Mode dialog box will appear. Make the following entries and
click on OK.

- 229 -
5. When creating path segments without elevation, a top view of the model
is the most useful. Select the View button.

The User View Ops display list will appear. Choose Standard Views and click on
OK. This will launch the Standard Views display list. Choose Top and click on
OK. When the User View Ops display list appears again, select Cancel to remove
it.

This completes the necessary steps prior to creating an AGV path system.

15.3 AGV Path System Creation


This section will show how to create an AGV path system. The path
system that will be created will consist of eight path segments that form a
loop, with four straight sides and four curved corners. There are different
approaches that can be used to create a path system layout. This tutorial
will use a simple and efficient approach to laying out an AGV path
system.

Figure 15-2 AGV Path Segment - Lines

- 230 -
Figure 15-3 AGV Path Segment - Arcs

In order to build a seamless, fluid path system for AGVs to pass smoothly
from path segment to path segment, accurate connections must be made
between segments. Starting and ending points of each segment must be
precisely set. Using the RMB ensures that a "pick" is made at the end of
an existing path segment. If the LMB is used, the pick may not be
precisely on the existing segment and the AGV will be unable to continue
along the path system. The message window will show the results of each
RMB click and indicate when the starting (or ending) point is selected.
This may take a few attempts. Zooming in on the location will make the
"picking" process easier.

The direction of AGV flow along a path segment is from the first point to
the second.

Defining the Path System


Select Model | Layout | Create System | AGV. The Agv_Path_System
dialog box will appear. Make the entries as shown and click on OK.

- 231 -
The option categories and their meanings are:
Direction - defines the path as being unidirectional or bidirectional.
Maximum Speed - restricts the maximum AGV speed for this path.
Save In - allows the AGV class data to be saved with the rest of the model or in a
separate file.

To create the path system, the Line and Arc method will be used to create
each of the eight path segments, one at a time.

The relative method of location is one of the easiest ways to place path
segment lines based on layout drawings. The user can enter a numeric
value, expressed in units of measure, in the X, Y, Z (or negative/reverse X,
Y, Z) directions.

Use the RMB when picking the starting point of a path segment that is to
be linked to the end of an existing path segment. This will ensure that the
links between path segments have accurate geometry and that logical flow
connections are created between adjoining path segments.

Similarly, use the RMB when picking the end point of a path segment that
is to be linked to the start point of an existing path segment.

Beginning the Path


Start by creating the first path segment on the diagram. This path segment
is labelled as Agv_Path_System1_1.1 (segment 1 of element 1 of path
system Agv_Path_System1).

- 232 -
1. Select Model | Layout | Layout | Line. The message window displays
"Indicate first Point".

The first point of this first path segment will be located, using the relative method,
at the world origin. To do this, select the Rel button. The Rel Coords dialog box
will appear. Make entries as shown below and click on OK.

The message window now displays "Indicate next point".

2. Select the Rel button again. The Rel Coords dialog box will appear.
Make entries as shown below and click on OK.

NOTE: The direction of AGV flow along this segment is from the first point to the
second. That is, in the X direction.

The message window displays "Indicate first Point". Click on Cancel. This
completes the first path segment (Agv_Path_System1_1.1) of the path system.

Adjoining Path Segment


NOTE: A path segment must be linked visually and logically to an adjoining path
segment so that AGVs can move smoothly across segments. Use the RMB where indicated
in order to automatically establish both linkages with a single mouse button pick.

1. Move to the end of the first path segment (Agv_Path_System1_1.1) of


the system.

- 233 -
a. Select the Cruise button and cruise until the end of
Agv_Path_System1_1.1 is visible. With the RMB, circle select the end of
Agv_Path_System1_1.1 so that it is centered in the work area.
b. With the MMB and Cruise, zoom the end of the path segment until its
structure can be seen. See Figure 15-4 for visual reference.
c. Press the space bar to terminate the Cruise mode and return to the
previous process. This use of the space bar is a great time saver.

Figure 15-4 Path Segment Alignment


The next segment, Agv_Path_System1_1.2 of the path system to be created will
be an arc which will curve in the Y direction.

2. Select Model | Layout | Layout | Arc. The message window displays


"Indicate first point".

NOTE: Use the RMB to "pick" the ending point of the first path segment created. The
message window will display a successful pick. This may take a few attempts. Zooming in
on the location will make the "picking" process easier.

3. Move the cursor over the end of Agv_Path_System1_1.1 and click the
RMB.

Figure 15-5 Direction of Travel


A failure will be indicated by a message in the message window which reads
"Nothing found, Indicate first point again".

- 234 -
Continue using the RMB to pick the end of the last segment. A successful pick
will be indicated with a cross appearing at the end of the Agv_Path_System1_1.1
and a prompt in the message window which reads "Enter Arc Parameters". In
addition, the Arc Parameters dialog box will appear. Make the following entries
and click on OK.

4. Use Cruise to center and magnify the end of this second path segment,
Agv_Path_System1_1.2, in the work area.

NOTE: Remember to press the space bar to terminate the Cruise mode.

5. Create the next path segment of the path system by using the Line
method again. This time, the location of the line segment will be chosen
using the RMB to pick the geometry of the end of
Agv_Path_System1_1.2.

6. Select the Rel button. Complete the Rel Coords dialog box as shown
and click on OK.

7. Use Cruise to center the end of Agv_Path_System1_1.3. Use the Arc


method to create the next path segment, Agv_Path_System1_1.4. The end
of path Agv_Path_System1_1.3 will be the first point of the arc. Use the
same arc parameters as Agv_Path_System1_1.2 (see the Arc Parameters
dialog box above).

8. Use Cruise to center the end of the arc just created,


Agv_Path_System1_1.4, in the work area. Create a line as the next path
segment using the end of the arc as the starting point and the coordinates

- 235 -
shown below on the Rel Coords dialog box as the end point, and click on
OK.

9. Use Cruise to view the end of the fifth path segment


Agv_Path_System1_1.5. Create the next path segment as a curve using the
Arc method previously described. Pick the end of the fifth path segment as
the first point on the arc and use the same settings for the Arc Parameters
dialog box. This arc will be Agv_Path_System1_1.6.

10. Use Cruise to bring the end of the path segment


Agv_Path_System1_1.6 into view. Create the next path segment,
Agv_Path_System1_1.7, using the Line method previously used to create
the third and fifth path segments. Select the Rel Button and enter -50.000
ft for the Y value. Click on OK.

Ending/Closing the Path System


1. Use Cruise to center the end of Agv_Path_System1_1.7 in the work
area. Press the space bar to exit Cruise mode.

This time it will be necessary to connect the end of the arc to the beginning of the
first path segment, as well as to place the geometry correctly when locating the
second point of the arc. Therefore, instead of the arc - radius method of arc
creation, the two-point arc creation method will be used. In order to use this
method the layout setup must be changed.

2. Select Model | Layout | Layout | Setup. The Layout Setup dialog box
will appear. Make the following entries and click on OK.

- 236 -
3. Create the last path segment, Agv_Path_System1_1.8, as a curve using
the Arc method. Select the Model | Layout | Layout | Arc button. With
the RMB, pick the ending point of Agv_Path_System1_1.8. When the
message window reads "End Point of Segment Indicated, Indicate next
point", use Cruise to center the starting point of Agv_Path_System1_1.1
which is the first line segment created. Press the space bar to terminate
Cruise mode and return to arc creation.

4. With the RMB, pick the geometry of Agv_Path_System1_1.1. The


message window will confirm the selection of the beginning of the first
segment as being the end of the eighth segment, Agv_Path_System1_1.8.
The confirmatory message will read "Curve Segment Completed, Indicate
first point".

The path system Agv_Path_System1 is complete.

15.4 AGVs

AGVs are grouped into classes, just like any other element in QUEST.
Every AGV must be within a class. An AGV class can contain more than
one AGV and an AGV class must be created before an AGV can be
created.

Create an AGV Class


1. Select Model | MHS | MHS Element | AGV. The AGV dialog box
appears. Make the following entries and click on OK.

- 237 -
2. The Locate Direction dialog box appears. From this dialog box select
Forward and click on OK. This will cause the second AGV to be placed
in front of the first created AGV and so on.

The message window will display "Select a Segment location to place AGV".
With the RMB, select Cruise and bring the end of Agv_Path_System1_1.3 to the
center of the work area. With the MMB, magnify the path segment until the
geometry can be clearly seen. Press the space bar to exit from Cruise.

3. With the LMB, pick the geometry of the path segment. Two AGVs will
be created and displayed queuing from the point selected.

- 238 -
15.5 Decision Points

Decision points (dec points) are required for loading parts to and
unloading parts from AGVs. Decision points must be created on a path
segment.

An element providing parts to AGVs must be connected as the input of a


decision point. An element receiving parts from AGVs must be connected
as the output of a decision point.

1. First create the loading decision point. Select Model | MHS | Dec Point
| AGV. The Agv_Dec_Pt dialog box will appear. Make the following
entries and click on OK.

The message window prompts the user to indicate the locations where the
decision points need to be placed. Refer to Figure 15-1 to see the approximate
location to place the two decision points.

- 239 -
NOTE: Agv_Dec_Pt1 is the name of the class to which the two decision points belong.
The names of the decision points will be Agv_Dec_Pt1_1 and Agv_Dec_Pt1_2.

2. Use Cruise to view Agv_Path_System1_1.7 on the left side of the loop.


Pick a point approximately halfway along the path segment. This is the
location where Agv_Dec_Pt1_1 will be placed.

3. Similarly, create Agv_Dec_Pt1_2 approximately halfway along


Agv_Path_System1_1.3, on the right side of the loop.

15.6 Modelling Other Components

With a path system created, parts and elements can be added to the model.
Previous tutorials have provided information on creating parts, sinks,
buffers, and sources. If you need additional information on how to create
these items please see the chapter titled Basic Constructs 1.

See Figure 15-1 for layout locations.

NOTE: Use default values on all these model elements unless otherwise specified.

1. Select Model | Build | Part Class | Create/Modify to create the various


parts required in this model.

a. Create a part class, using the default name and all other defaults
including default geometry.
b. Create a second part class, set the color to red, and use all other default
settings.
c. Create a buffer and locate it next to Agv_Dec_Pt1_1.
d. Create a source and locate it above the buffer and near Agv_Dec_Pt1_1.
Select the IAT button, choose Constant, and enter a value of 60, i.e., one
part per sixty minutes.
e. Select the Part Fractions button to set the part percentage to 1 for both
part classes.

- 240 -
f. Create a sink and locate it next to Agv_Dec_Pt1_2.

15.7 Modelling Flow

The objective of this section is to create connections between the various


elements in the model and in particular, between the AGV path system
decision points and other elements. Connections are possible at the
element level as well as at the class level. For this model, connections will
be made at the element level.

NOTE:

1. Select Model | Build | Connections | Element. The message window


prompts to select a starting element. Choose Source1_1 from the display
list and click on OK. The message window prompts for an ending
element. Choose Buffer1_1 and click on OK.

Complete the remaining connections in the same manner.


a. Connect Buffer1_1 to Agv_Dec_Pt1_1.
b. Connect Agv_Dec_Pt1_2 to the sink.

2. Select File | Save Model or Model | Build | Model | Save. When the
Select File dialog box appears, enter agv01.mdl as the file name.

15.8 Routing Loads

There are various methods that can be used to instruct AGVs for
destination, route, and what to do on arrival. This tutorial will use part
routing logic for a decision point to control the routing of loaded parts. In
this case, Agv_Dec_Pt1_1 directs the instructions to AGVs when they

- 241 -
have loaded a part at Agv_Dec_Pt1_1. Specifically, the instructions will be
to take the part to Agv_Dec_Pt1_2.

1. Select Model | MHS | Part Destination. The Select Element Name


display list appears. Choose Agv_Dec_Pt1_1 and click on OK.

2. The Select Part Destination Options dialog box appears. Under the
Fixed Destination Info title, select the Add button. The Select a Part Class
display list appears and the message window prompts to select a part class.
Choose Part1 and click on OK.

3. The Select Element Name display list appears. The message window
prompts to select the decision point to which parts of class Part1 should be
routed to. Choose Agv_Dec_Pt1_2. and click on OK.

4. The message window will prompt for the selection of another part class
for routing assignment. Choose Part2 from the Select a Part Class display
list and click on OK.

The Select Element Name display list appears once again. Choose
Agv_Dec_Pt1_2 and click on OK.

5. The message window prompts for the selection of another part class for
routing assignment and the Select a Part Class display list appears. No
further selection is required, but to remove the display list, click on
Cancel.

6. Save the model. Select File | Save Model. Complete the Select a File
dialog box.

- 242 -
15.9 Running the Model

The controller has been identified; the path system developed; AGVs,
buffer, source, sink, and appropriate decision points have been created and
placed; and parts are defined. In this section, the model will be run and
statistical output created. Detailed information on model behavior and a
review of the statistics will be provided in a later tutorial.

Before running the model, return the world display to Smooth. To do this,
select Display, and change Render to Smooth and click on OK.

Simulation Clock

1. Change the time units for the simulation clock. Select Run | Simulate |
Time Units. The Time Units dialog box will appear. Make the following
entries and click on OK.

- 243 -
Animation Refresh Interval

2. To change the animation refresh interval select the Simulation | Interval


button. The Simulation Time Interval dialog box will appear. Make the
following entries and click on OK.

Running the Model

3. Select the Simulation | Run button. The Run dialog box will appear.
Make the following entries and click on OK. Run the model for 30 min

While the model is running, the AGVs will collect loads (parts) from
Agv_Dec_Pt1_1 and unload them at Agv_Dec_Pt1_2. The message window will
display "Simulation Run Completed" when the run time is reached.

Statistical Output

NOTE: More information on statistical output is available in a later tutorial. Specifics of


each of the graph's and chart's output are also explained. The purpose of this section is
to show the variety available.

4. To examine the current state of the AGVs and the controller select Run |
Trace | Current State | Entity.

Click on ANY entity. A display box will provide exhaustive information about the
entity selected. One at a time, pick the geometry of the controller, each AGV, the
buffer, the source, etc.

5. The next step is to examine the statistics provided for the AGVs. Select
Run | Single Run Output | Run Stats | Element. Choose an AGV element
when prompted by the message window. The statistics will be displayed.

- 244 -
CHAPTER 16
AGV MODELLING II

16.1 Introduction

This tutorial explains some of the more advanced features of the


construction of an AGV model in QUEST.

Figure 16-1 Path System with Machines and Extension

The model to be constructed is based on the model that was built in the
previous AGV tutorial. This model is read (loaded) and then enhancements
are made to it. Step-by-step instructions on building the model are
provided in subsequent sections. The enhancements consist of:

The addition of machines which receive parts from AGVs, process them, and
return them to AGVs.
A branch and merge section added to the AGV path system.
Access to the machines on both the original AGV path system, and the new
branch and merge sections.

- 245 -
Control of direction of parts to the machines performed in a more advanced
manner.

Additional detail and supplementary information is provided throughout


the tutorial. Specific explanation is provided through the use of NOTES.
While this information may be skipped to get through the specific tutorial,
it is strongly recommended that the user read this information in order to
fully understand the "how-tos" of building AGV models. The information
will also help explain what is going on as the model is being built.

The sections within this tutorial are:

States, substates, commands, claims, AGV paths. (This section provides an


overview of important functions of these features.)
Creation of AGV path system extension.
Decision points.
Creation and location of machines.
Connections.
Claims, controller claim mode, and decision point claim capacity.
Complex AGV routings
Commands and departure requirements.
Running the model.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

- 246 -
If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ? Select Yes to confirm this
selection.

3. While QUEST is clearing the system the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

- 247 -
16.2 States, Substates, Claims, AGV
Paths, and Commands

The concepts of states, substates, claims, paths, and commands will be


introduced in this section.

1. Select File | Read Model. Choose the model saved in the last tutorial or
choose agv01.mdl from the c:\deneb\QUESTlib\MODELS\USRMNL
directory.

2. Select Run | Simulate | Simulation | Interval. When the Simulation


Time Interval dialog box appears, make the following changes and click
on OK.

3. Select Run | Simulate | Simulation | Run. Make the following entries


and click on OK to run the model for 30 minutes.

The AGV should have picked up a part at Agv_Dec_Pt1_1 and stopped. If it did
not get far enough, select the Step button to move the AGV into position.

4. Select Run | Trace | Current State | Entity. The message window


prompts the user to indicate an entity for current state. Pick the AGV that
just stopped (Agv1_2). The color of the AGV should change to magenta to
show that it is selected.

- 248 -
The AGV1_ 2 State dialog box appears. The current state of the selected AGV is
represented by this data which is very valuable when building and testing an AGV
model. The results may be somewhat different on your display. It is therefore
important to understand what the data represents.
A discussion of the data will also help introduce several new concepts like: AGV
state and substate commands. Following is the breakdown of the data, item by
item.

- 249 -
- 250 -
States and Substates of AGVs

- 251 -
An AGV is a special element whose current status is described by a state
and a substate. Other elements have only a "main" or "primary" state.
Among the main states, BUSY, IDLE, and BLOCKED are common to
other elements.

The four states are BUSY, IDLE, BLOCKED, and FAILED. The
associated substates are:

NOTE: An idle AGV moving to a parking decision point is considered as BUSY in


substatus EMPTY_TRAVEL.

NOTE: If a failure occurs when an AGV is travelling, the AGV immediately tries to
decelerate to stop. This deceleration time is considered as BUSY time. The failure time
and substate start only after the AGV has come to a complete stop.

NOTE: There is not currently a feature for applying shifts to AGVs or AGV path systems.
As a results, there is no substate for this condition under the main state of FAILED.

- 252 -
Claim
The next AGV modelling concept to be introduced is that of a claim. A
claim is a notification to a decision point that an AGV is headed towards
it. To understand a claim and its interaction on the model, first review the
statistics of Agv_Dec_Pt1_2.

Select Run | Single Run Output| Run Stats | Element. The message
window prompts the user to pick up an element. Pick Agv_Dec_Pt1_2 by
the unload point (Sink), and click the mouse. The Agv_Dec_Pt1_2
statistics display list will appear:

This display list shows the cumulative number of AGVs that have visited
Agv_Dec_Pt1_2 and the cumulative number of claims made on this
decision point by AGVs, so far. A description of the display list data
follows:

Click on the X at the upper right-hand corner to remove the display list.

16.3 Creating an AGV Path System


Extension

- 253 -
This section will describe how to create an extension to an existing AGV
path system.

Mouse Button Functionality


Each mouse button performs a unique function when creating or
modifying AGV path systems and path segments.

In order to ensure a seamless, fluid path system for AGVs to travel


smoothly from path segment to path segment, accurate connections must
be made between segments. Not only do starting and ending points of each
segment have to be precisely set, but adding an extension to an existing
segment requires the same precision. Using the MMB ensures that the
"pick" is made for a logical connection. If the LMB is used, the pick may
not be precisely on the existing segment and the AGV will be unable to
continue along the path system.

Use the LMB when locating a point on a new path segment that does not involve
joining, branching, or merging with an existing path segment. That is, when the
point can be arbitrary.
Use the MMB when merging or branching a new path segment with a point on an
existing path segment.
Use the RMB when joining the beginning or end point of a new path segment to
the end or beginning of an existing path segment.

The LMB is recommended for locating the start or end of a path segment in a
location which does not involve joining, branching, or merging with an existing
path segment. This approach locates the point wherever the cursor is when the
LMB is clicked. However, this location could be anywhere and proper geometry
links or logical flows with existing path segments will not be made - even if the
LMB is clicked on an existing path segment.
Use of the MMB will require that the cursor be placed on an existing path
segment when clicked. When this is done, the system will ensure that the new
segment relates to the existing segment in the correct manner. This relationship
consists of geometrical representation, flow direction, and flow connections. It
should be noted that this process in fact deletes the existing segment and then
replaces it with two new segments.
Use of the RMB requires the selection of a path segment to which the new path
segment's point is to be joined. The process involves placing the cursor on the
existing path segment near the end where the join will be made. A check will be
made, automatically, to ensure that the join is end to beginning or beginning to

- 254 -
end. The geometry of the segments will be aligned correctly and flow connections
will be made automatically when using this approach.

Setup

1. Check that the settings for path system creation are still set from the
previous tutorial. In particular, reset the layout system setup options as
follows. Select Model | Layout | Layout | Setup. The Layout Setup dialog
box will appear. Make the following entries and click on OK.

This extension will consist of new AGV path segments which will branch from
the first AGV path segment and rejoin the same segment at a later point.

NOTE: Agv_Path_System1 is the path system chosen by default for the extension to be
added to. If more than one path system existed in this model, a specific path system would
have to be identified.

Figure 16-2 shows the model with the addition of the path extension.

Figure 16-2 Agv_Path_System1 with Extension

2. Select the Display button. The World Display Mode dialog box will
appear. Make the following entries and click on OK.

- 255 -
Figure 16-3 Creating an AGV Path System Extension

3. Select the Cruise button and move until the left-hand side (starting
point) of the first path segment (see Figure 16-3) is clearly visible.

4. With the MMB, use Cruise to enlarge the geometry of


Agv_Path_System1_1.1. Press the space bar to exit from Cruise.

Create the Extension

Now create the AGV path segments which form an "S_curve" branching
off the first AGV path segment as shown in the Figure 16-4. Select Model
| Layout | Layout | Arc. The message window prompts the user to select
the first point.

NOTE: The use of the proper mouse button is critical in the next steps.

5. Using the MMB, place the cursor at the point on


Agv_Path_System1_1.1 where the branch path should start and click the
MMB. See Figure 16-3, Location A. The Arc Parameters dialog box will
appear. Make the following entries and click on OK.

- 256 -
The arc will be displayed, and a message window prompts the user to indicate the
first point. The next path segment is another arc so it is not necessary to select the
Arc button but to simply respond to the message window prompt.

6. With the RMB, select the end point of the arc segment just created.
When the Arc Parameters dialog box appears again, make the following
entries and click on OK.

The "S_curve" is made and the message window prompts the user to indicate the
next point.

Figure 16-4 "S_Curve Extension"

7. Select Model | Layout | Layout | Line. The message window prompts


the user to indicate the first point. With the RMB, select the ending point
of the last arc created.

8. The message window prompts the user to indicate the next point. Select
the Rel button. The Rel Coords dialog box appears. Make the following

- 257 -
entries and click on OK. This creates a new line segment 20 feet long, in
the desired direction.

The message window will prompt the user to indicate the next point. There is no
need to respond to this prompt because the next path segment is an arc.

9. Use Cruise to bring the end point of this segment into view.

10. Select Model | Layout | Layout | Arc. The message window prompts
the user to indicate the first point.

11. With the RMB, select the ending point of the segment created. The Arc
Parameters dialog box will appear. Make the following entries and click
on OK.

The arc will be displayed and the message window will prompt to indicate the
first point.

NOTE: To ensure that the starting and end points of the last segment to be made are
logically joined with newly created segment and the existing segment, use the 2 Point
method of arc creation to close the loop.

12. Select Model | Layout | Layout | Setup. The Layout Setup dialog box
will appear. Make the following entries and click on OK.

- 258 -
13. Select the Arc button. The message window will prompt to indicate
the first point.

14. With the RMB, pick the end point of the last arc created. The magenta
cross will appear and the message window will prompt to indicate the first
point.

NOTE: Once again, the use of the MMB is very important in the next step.

With the MMB, pick the location on the existing path segment where the new
path segment will merge. See Figure 16-3, Location B.
It is not necessary to respond to the message window prompt. The extension has
now been completed

15. Select File | Save or File | Save As... to save the model in directory
c:\deneb\QTUTORlib\MODELS\agv02.mdl.

NOTE: Path segment names have been assigned to the new segments added to
Agv_Path_System1. However, the line segment that was originally named
Agv_Path_System1.1 is now broken into three new segments:

Agv_Path_System1_1.10
Agv_Path_System1_1.15
Agv_Path_System1_1.16.

In addition, Agv_Path_System1_1.1 is no longer a line segment but has been


"reissued" to the second arc in the left-hand "S_Curve". See Figure 16-5.

16. Select the Display button and change Render to Default.

- 259 -
Figure 16-5 Path Segment Names on Extension

16.4 Decision Points

AGV path decision points provide a connection between AGV path


systems and other elements in the rest of the model. These decision points
will be used to allow machines to process parts which are being moved
along the AGV path.

Before the two machines can be added to the new path extension to
perform processes, decision points that will direct part activity will be
required.

Create two more decision points belonging to class Agv_Dec_Pt1. The


two decision points which already belong to this model are
Agv_Dec_Pt1_1 and Agv_Dec_Pt1_2. The two new decision points which
will be created will be named Agv_Dec_Pt1_3 and Agv_Dec_Pt1_4.

1. Select Model | MHS | Dec Points | AGV. The Select Element Class
dialog box will appear. Choose Agv_Dec_Pt1 (which is the name of the
class of AGV decision points) and click on OK.

2. The Agv_Dec_Pt dialog box will appear. Make the following entries
and click on OK.

- 260 -
3. The message window will prompt to indicate a location for
Agv_Dec_Pt1_3. Refer to Figure 16-6 and locate the decision point as
shown.

4. Once Agv_Dec_Pt1_3 is located, the message window will prompt for a


location for decision point Agv_Dec_Pt1_4. Refer to Figure 16-6 and
locate the decision point as shown.

- 261 -
Figure 16-6 Adding Decision Points and Machines

16.5 Creating and Locating Machines

In this section, two machines are created and located. More detail about
creating and locating machines is provided in the later chapter.

1. Select Model | Build | Element Class | Machine. The Machine dialog


box appears. Select the Cycle Process button.

- 262 -
The Select Process display list appears. Choose New Process and click on OK.
The Cycle Process Definition dialog box appears. Select the Cycle Time button.
The Distributions dialog box appears. Choose Constant and enter 5 as the value
and click on OK. Now click on OK for the Cycle Process Definition dialog box.
Finally, click on OK for the Machine dialog box.
The message window will prompt the user to select a location on the floor for
Machine1_1. Refer to Figure 16-6 and locate Machine1_1 at the appropriate
location.

NOTE: Machine1_1 is the first instance of a machine which was created belonging to
the machine element class named Machine1.

2. Similarly, create another machine belonging to a new machine element


class named Machine2. The machine would be named Machine2_1.
Choose a Constant value of 15 for the cycle time of Machine2_1 and
place it in an appropriate location by referring to Figure 16-6.

- 263 -
16.6 Connections

The objective of this section is to establish the connections between the


machines and the AGV path. Establishing connections between a machine
and an AGV path decision point is accomplished in the same manner as
that used to connect any other element with a decision point.

Create Process Flow Connections


1. Select Model | Build | Connections | Element.

Machine1_1 has Agv_Dec_Pt1_3 as both its input and its output.


a. Pick Agv_Dec_Pt1_3 and pick Machine1_1 to make the input
connection.
b. Pick Machine1_1 and pick Agv_Dec_Pt1_3 to make the output
connection.
Machine2_1 has Agv_Dec_Pt1_4 as both its input and output.
c. Pick Agv_Dec_Pt1_4 and pick Machine2_1 to make the input
connection.
d. Pick Machine2_1 and pick Agv_Dec_Pt1_4 to make the output
connection.

Check Element Flow


2. Check the connections using the standard show connection mechanism.
Select Model | Build | Connections | Show. Pick Machine1_1.

NOTE: Note how decision points are referred to in the display list showing the
connections for Machine1_1.

3. Select the Model | Build | Connections | Show buttons and pick


Agv_Dec_Pt1_3. The dialog box will display the connections for the
selected decision point.

- 264 -
Check Path Flow
Connections between path segments in the path system are checked by a
different method.

1. Select Model | Layout | Segment | Show. The Select Segment display


list appears. Pick any segment and click on OK.

2. Save the model. Select File | Save. Use agv02.mdl as the file name and
click on OK.

16.7 Claims, Controller Claim Mode, and


Decision Point Claim Capacity

This section will explain how the model is changed by the introduction of
new decision points and the functioning of claims, controller claim modes,
and decision point claim capacity. It is important to understand this
behavior as it provides the means for controlling AGV traffic.

1. Run the model for three hours (180 minutes) and observe the operation.

NOTE: Although there are new decision points on the AGV path and they are connected
to machines, the AGVs will appear to ignore them. The AGVs will not stop at the new
decision points or even slow down as they pass. However, the AGVs are behaving
differently at a more subtle level.

2. Run the model again for 30 minutes. Agv1_2 should just stop at
Agv_Dec_Pt1_1. Check the current state of the Agv1_2. Select Run |
Trace | Current State | Entity.

- 265 -
Pick Agv1_2. The Agv1_2 State display list will appear. The options and values
contained in this display list have been explained in Section 16.2.

NOTE: The AGV still has a pending command to unload its part at Agv_Dec_Pt1_2. The
AGV current path shows that the AGV will pass through Agv_Dec_Pt1_4 on its way to
Agv_Dec_Pt1_2.

3. A claim is a notification by an AGV to a decision point that the AGV is


headed towards that decision point. Check the claims that have been
placed on Agv_Dec_Pt1_2.

4. Select Run | Single Run Output | Run Stats | Element.

Choose Agv_Dec_Pt1_2 from the Select Element Name display list. The
Agv_Dec_Pt1_2 Statistics display list appears.

The current display list also shows zero (0) Total AGVs Claimed where in
Section 16.2 the quantity was one (1). Since no claims are made against
this decision point, there is no Claim Utilization, Claim Busy Time, or
Num AGVs Claimed with No Wait on this display list.

5. As a comparison, choose Agv_Dec_Pt1_4 from the display list. The


Agv_Dec_Pt1_4 Statistics display list will appear.

- 266 -
The display list for Agv_Dec_Pt1_4's statistics shows Total AGVs Claimed as one
(1). It also has entries for Claim Utilization, Claim Busy Time, and Num AGVs
Claimed with No Wait since there is a claim.
The explanation for this is, that although Agv_Dec_Pt1_2 is the ultimate
destination of the AGV, as the AGV moves along the shortest path towards its
destination it must first pass through Agv_Dec_Pt1_4. Therefore, the AGV must
place a claim on Agv_Dec_Pt1_4.
The reason that only Agv_Dec_Pt1_4 has a claim on the AGV and not both
Agv_Dec_Pt1_2 and Agv_Dec_Pt1_4 relates to the way in which claims are
specified at the level of the controller. The controller attribute claim mode
determines how AGVs will place claims on the decision points in their current
path. Claim mode is a tool that assists in managing traffic congestion and can
operate in one of three options:
Claim Next: AGV will wait only until the next decision point on its selected path
is available. Once this condition is met, the AGV will start to move.
Claim All: AGV will check all decision points in its path. It will place claims
(reservations) on any decision points that are available. The AGV will wait until
all decision points in the path have been successfully claimed before it will move.
Claim All Once: AGV will check all decision points in its path. All points must be
available at the same time before it will place any claims. Consequently, the AGV
will not move until all the decision points on its selected path become available at
the same time.

The claim mode option defines how an AGV will respond to the
conditions at decision points in its selected path. Any AGV that is on a
path that will take it to or past one of these decision points, has a claim on
that decision point. The more claims there are on a decision point, the

- 267 -
more traffic congestion is likely. In addition, the claim mode option
considers the availability of decision points on its selected path.

A decision point has a maximum number of claims permitted - the


Decision Point Claim capacity. A decision point with current claims less
than its claim capacity is considered available.

The claim mode option for this tutorial is set as Claim Next, therefore the
AGV will place a claim on the next decision point in its path, i.e.,
Agv_Dec_Pt1_4. The AGV will proceed towards Agv_Dec_Pt1_2 from
Agv_Dec_Pt1_4 only AFTER it has placed a claim on Agv_Dec_Pt1_2.

If Claim All or Claim All Once is used by the controller, then claims
would be placed on both Agv_Dec_Pt1_4 and Agv_Dec_Pt1_2 before the
AGV departs from Agv_Dec_Pt1_1. This is because these claim mode
options require claims to be placed on all decision points in the AGV's
path before the AGV can move.

6. Except for the message window, close all dialog boxes to remove them
from work area.

16.8 Complex AGV Routings

This section provides information to allow the user to model AGV


routings which are based upon the part being carried by the AGV.

1. Select Model | MHS | Dec Point | Part Destination. The Select


Element name display list will appear. Choose Agv_Dec_Pt1_1 and click
on OK. The Select Part Destination Options display list will appear.
Choose Add from Fixed Destination Info.

- 268 -
The Select a Part Class display list will appear. Choose Part1 and click on OK.

The message window prompts to indicate a destination decision point for Part1
from Agv_Dec_Pt1_1. Select Agv_Dec_Pt1_3.

2. The message window prompts the user to select another part class to set
the destination from Agv_Dec_Pt1_1. Choose Part2 from Select a Part
Class display list and click on OK.

3. The message window prompts the user to indicate a destination decision


point for Part2 from Agv_Dec_Pt1_1. Select Agv_Dec_Pt1_4.

The Select a Part Class display list will appear again. Click on Cancel and for
Select Part Destination Options, click on OK.

NOTE: AGVs loading a part class Part1 from Agv_Dec_Pt1_1 must unload it at
Agv_Dec_Pt1_3. AGVs loading a part class Part2 from Agv_Dec_Pt1_1 must unload it
at Agv_Dec_Pt1_4.

Running the model at this point will get an AGV to load a part and move
to a decision point. The part will be unloaded to the machine and the
machine will perform a process on the part. The part will then be loaded
back onto the AGV. However, as there has been no information specified
concerning what the AGV is to do next with this part, the model will stop
running and will display an error message to that effect.

4. Use the mechanism which has just been described (Decision Point Part
Destination) to route parts from Agv_Dec_Pt1_3 to Agv_Dec_Pt1_2 and
from Agv_Dec_Pt1_4 to Agv_Dec_Pt1_2. Use the Any Part destination
option.

- 269 -
5. Save the model. Select File | Save Model.

16.9 Commands and Departure


Requirements

The objective of this section is to place appropriate departure requirements


for AGVs leaving decision points. A review of activities will help provide
an explanation of underlying processes that occur while the model runs.
The AGV Modelling concept "command" is also introduced.

Underlying Processes
Parts are arriving every 60 minutes at a source (Source1_1) and are
immediately placed into a buffer (Buffer1_1) which makes them available
as input to Agv_Dec_Pt1_1.

As soon as a part is available or presented to a decision point on an AGV


path, a call is made to an AGV to come to the decision point and load the
part.

The selection and calling of an AGV is made by the controller and is based
on defined parameters or by system defaults. Within this tutorial no
specific option selections have been made and therefore the selection of an
AGV is determined based on system defaults.

There is only one AGV class in this tutorial. Therefore, the selection of
which AGV class is required to answer a call is simple and requires no
specification. However, if there are two AGV classes, selection of which
AGV to answer the call is not as simple. In this tutorial, the controller uses
the system default for this selection process and chooses the AGV which
has the shortest path from its current location to the "calling" decision
point.

The selected AGV is said to have a command placed upon it. A command
consists of four elements:

The name of the decision point which placed the command.

- 270 -
The name of the AGV on which the command is placed.
The type of the command.
The AGV path chosen for the AGV to respond the command.

These elements can be reviewed in the current state report for an AGV.

NOTE: An AGV will stay at a position (usually a decision point) until it receives and
accepts a command to go and do something.

Departure Requirements
1. Set the IAT for the source to 30 minutes (2 parts per hour). Select
Model | Build | Element Class | Source. The Select Element Class dialog
box appears. Select Source1 and click on OK. The Source dialog box
appears. Select IAT, and set the IAT to a Constant value of 30 minutes.

2. Run the model for 100 minutes.

NOTE: Agv1_2 has unloaded a part at Agv_Dec_Pt1_4. However, instead of waiting for
the machine to completely process the part, the AGV left while it was still empty. The
model's arrival rates and speeds, etc., were carefully planned so that initial model runs
would disguise the absence of an improper piece of information.

3. Run the model for an additional 100 minutes. Select Run | Simulate |
Simulation | Cont. The AGVs are now in a situation known as "gridlock".
That is, the logic of the model has placed the AGVs in situations that will
never change.

4. Examine the current state of the AGV at the machine. The AGV at the
machine (Agv1_1 at Agv_Dec_Pt1_4) is in a BLOCKED state, with a
substate of UNLOAD_BLOCK. This shows that the AGV is trying to
unload a part at its decision point but that it cannot because there is
already a part in the machine. The part was left there by the previous AGV
which departed empty.

5. Examine the current state of the other AGV (Agv1_2). The AGV is also
blocked. It has a command to load the part that it is carrying to
Agv_Dec_Pt1_4 and it has its path determined. However, it is blocked,
with a substate of CLAIM_BLOCK which shows that it cannot place a
claim which is required before the AGV can move. In this case there is
only one decision point on the AGV path (Remain Dec Point- 1:
Agv_Dec_Pt1_4). Agv_Dec_Pt1_4 has a claim capacity of 1. However,
Agv1_1 already has a claim placed on Agv_Dec_Pt1_4 to unload the part

- 271 -
that it carries. Therefore, Agv1_2 will wait until Agv1_1 releases its claim
on Agv_Dec_Pt1_4. As this will never happen, the model is in gridlock.

WARNING: This is a typical condition in AGV modelling and is often experienced in


operational AGV systems! It can be a result of missing or poor control rules.

In this case, in order to avoid gridlock, the system requires that an AGV wait at
the decision point to collect a part which it has unloaded. In many cases this is not
required.

The next section of the tutorial demonstrates how to model this control
rule. An AGV will contain exactly one part as it leaves Agv_Dec_Pt1_1,
Agv_Dec_Pt1_3, and Agv_Dec_Pt1_4.

6. Select Model | MHS | Dec Point | Depart Requirement. Select


Agv_Dec_Pt1_1 and click on OK.

The Departure Requirements dialog box appears. Make the following entries and
click on OK.

NOTE: Departure requirements can be specified as a set of alternative combinations of


Parts. An AGV which has parts matching any of the alternative combinations of parts
specified can leave the decision point.

7. Perform the same operation for Agv_Dec_Pt1_3 and Agv_Dec_Pt1_4.

NOTE: Entering `1' for the specific part class appropriate to the decision point would
also work. In addition, it would prevent onward routing for a part that was incorrectly
delivered. However, other methods of routing parts to decision points will be used later in
this tutorial where various part classes may correctly arrive at decision points. As a
result, the Any Part = 1 value has been chosen to avoid extra work later.

8. Save the model. Ensure the file name is agv02.mdl.

- 272 -
16.10 Run the Model

As the model runs, watch the flow of parts and AGVs. When an AGV
loads a white part (of class Part1) it goes to Machine1_1 via
Agv_Dec_Pt1_3.

Similarly, when an AGV loads a red part (of class Part2) it goes to
Machine2_1 via Agv_Dec_Pt1_4.

An AGV will stop at a decision point, unload a part, wait while the
machine process the part, load the part, and then depart.

- 273 -
CHAPTER 17
AGV MODELLING III

17.1 Introduction

This tutorial covers further advanced areas of modeling AGVs.

Figure 17-1 AGV Path System

The enhancements consist of organizing a set of decision points into a


collection called Group. The routing of AGVs carrying parts is made more
flexible by the use of this group.

Specifically, the AGV decision points which feed the two machines will be
placed into a Route Cyclic Group. This group will then be used to route
AGVs carrying parts from the load points to the machines so that the
AGVs alternate between the machines.

- 274 -
Groups will be explained in some detail. Also, a detailed explanation is
provided concerning popups, previously known as SCL Hooks. Popups are
associated with the use of groups. However, their usefulness is broader
and the explanation is aimed at the broader scope.

The contents of the tutorial are:

Groups
Creating a Group
Assigning a Group
Routing to a Group
Running the Model
Popups

17.2 Groups

The objective of this section is to introduce groups - their purpose and


how they work.

A group is a collection of similar model elements. It has a name, a type,


and contains specifically selected model elements. There are eight system-
defined types of groups:

Any Element
AGV Claim
Route Next Free
Route Percent
Route Priority
Route Cyclic
Park Cyclic
Park Percent

These can be further grouped into element group, claim group, route
group, and park group.

There is also a method by which new group types can be created. A


description of each system-defined group type is provided. Route group
and part groups are applicable to AGVs as well as to labor.

- 275 -
Element Group
An element group is the only group which the system provides that
contains elements. All the remaining groups provided by the system
contain only decision points.

An element group can contain machines, buffers, sinks, sources,


conveyors, accessories, P&F systems, AGV systems, and any type of
decision point. It can be used to translate or rotate a group of elements
collectively. It can also be used as a way to group elements that will be
accessed from SCL using the GET_GROUP() routine. For more
information on the GET_GROUP() routine, refer to the SCL Reference
Manual.

Claim Group
This group type contains AGV decision points. A claim group is used to
set a capacity for a group of AGV decision points. These AGV decision
points can be located on different AGV path systems. The capacity refers
to the collective maximum number of claims by AGVs that can exist for
the AGV decision points in the group. A claim is a reservation made by an
AGV to designate that the AGV will be traveling to this AGV decision
point in the future.

A claim group is often used to control traffic congestion at intersections.

Route Groups
All four route group types contain AGV decision points. AGV routing can
use a route group to select its destination from a group of AGV decision
points. The rule by which selection is made depends on the specific type
of the route group. There are four route groups.

Route Next Free Group

A route next free group is used to create an ordered list of AGV decision
points from which a routing selection can be made. The routing selection
is done by checking each AGV decision point in the group in the order that
the AGV decision points were included in the group. The check is to find
the first AGV decision point that is connected to an available element.

- 276 -
Route Percent Group

A route percent group is used to assign percentages to each of its AGV


decision points, which are used in AGV decision point selection for
routing.

Route Priority Group

A route priority group is used to create a prioritized group of AGV


decision points, which are used in AGV decision point selection for
routing. The selection checks the highest priority AGV decision point first.
If it has available claim capacity, then the routing will select it. If not, the
selection will check for the next highest priority AGV decision point.
When more than one AGV decision point has the same priority level, the
order in which the AGV decision points were included in the group is the
order in which they are checked.

Route Cyclic Group

A route cyclic group is used to create a fixed sequence of routings to a


group of AGV decision points. This fixed sequence will repeat endlessly,
hence it is described as being cyclical. This fixed sequence is based upon
the order in which AGV decision points were included in the group.

Park Group
A park group is used to select an AGV's park destination decision point
from a group of decision points. The two types of park groups are: park
cyclic and park percent, both contain AGV decision points. Descriptions
follow:

Park Cyclic Group

A park cyclic group is used in a similar manner as a route cyclic group.


That is, it creates a fixed sequence of routings to the AGV decision points
to which AGVs will move and park.

Park Percent Group

A park percent group is used in a similar manner as a route percent group.


It takes samples from the included AGV decision points, based on
percentages assigned to each, in order to determine the AGV decision
point to which the AGV will move and park.

- 277 -
Creating a New Group Type
As well as the system-defined group types, the user can create
individualized group types. This is covered in more detail in subsequent
sections.

Using a Group that Contains AGV Decision Points


SCL code is used to route AGVs. An example of this is when the part is to
be routed as it is loaded to the AGV.

One mechanism available through the user interface is Fixed Routing. This
routing logic is used by assigning it to a specific AGV load decision point.
It allows the user to specify, by part type, the destination AGV decision
point for AGVs which load parts at the specified AGV load decision point.
This mechanism is been described and demonstrated in AGV Modelling I
and II chapters.

The alternative to fixed routing for an AGV decision point is Group


Routing. The group routing mechanism will be used later in this tutorial.
This tutorial explains how the group routing mechanism is used and how it
works. However, it is first necessary to create a group before the
explanation can continue.

17.3 Creating a Group

This section describes the process of defining a route cyclic group, naming
it, selecting its type, and adding AGV decision points to it.

1. Load the model agv03.mdl saved in


c:\deneb\QUESTlib\MODELS\USRMNL.

NOTE: This model is slightly different from the one that was constructed in the chapter
titled AGV Modelling II. That model has only one class for all of the decision points
while the agv03.mdl has three different decision point classes and four AGV decision
points. The first decision point class (DPC) locates a decision point near the buffer. The
second DPC places two decision points near the machines and the third DPC is for the
unloading decision point near the sink. The reason to have these different classes is to

- 278 -
eliminate having to attach a popup to Agv_Dec_Pt1_1 for cyclic distribution of parts to
the next decision points; and from the next decision points, a fixed destination is needed
to unload the parts. If only one class were available for all of the decision points, the
separate functions of cyclic and fixed could not be assigned to the appropriate decision
points for routing the parts.

2. Select Run | Simulate | Simulation | Run. Run the model for 1000 min.
Observe how parts of different colors (classes) are routed to machines
based upon their color (class).

3. Select Advanced | Grp | Group | Cre. The message window prompts


the user to enter new group attributes. The Create Group dialog box
appears. Make the following entries and click on OK.

The message window now prompts the user to circle the AGV decision points to
add to group, Group_1.

NOTE: There are three ways to select AGV decision points for inclusion into a group:
The pick method: using any mouse button; or circle select: holding the RMB down and
circling the AGV decision points that are required. Either of these methods will ignore
anything other than AGV decision points which makes them very easy to use. The third
method is to select the decision points from the Select Element Dialog Box

4. Hold the RMB and circle the AGV decision points adjacent to the two
machines. The message window will display:

Element <Agv_Dec_Pt2_1 added


Element <Agv_Dec_Pt2_2 added.
To select multiple elements, use the <shift> key to choose each desired element
from the Select Element dialog box.
The two selected AGV decision points will be highlighted (their color will be
magenta).

NOTE: An AGV decision point can be in more than one group. This allows different
control rules to be applied to the same destination from different departure points. It also
allows easy selection of different control rules for a departure point.

- 279 -
Group Action Buttons

This is a good point to review the remaining buttons under the Group title
bar.

Mod Change the name of the group.

NOTE: The type of a group cannot be changed.

Del Delete the group, not the entities in the group.


Add Add an AGV decision point to a group.

NOTE: This can be accomplished by picking up an AGV decision point (LMB) or by


circling some AGV decision points (RMB held down).

Show View which elements and/or AGV decision points are contained in a group.
Remove Remove selected AGV decision points from a group.
Sel Select a group for translation/rotation

NOTE: Any group can be selected, however only groups containing elements can be
translated or rotated.

Trn Translate all elements in a selected "any element" group so that they translate
as a group, i.e., maintain their relative positions. This is particularly valuable
when merging models.
Rot Rotate all elements in a selected element group so that they rotate as a group,
i.e., maintain their relative positions. This is particularly valuable when merging
models.

Group Type Action Buttons

The group types available can be modified by the action buttons under the
Group Type title bar.

Cre A new group type can be created:


A name is specified.
Specification of the type of entities to be included: AGV decision points or
elements.
Specification of whether single or multiple groups of this type can be assigned to
a decision point. See the next section for an explanation of group assignment.

Mod A user-defined group can be modified.


Del A user-defined group can be deleted.

- 280 -
As stated above, a group consisting of elements can only be used to
translate/rotate, or to group elements for special access in SCL.

17.4 Assigning a Group

This section describes the process of assigning a group to the AGV


decision point which will use the group in its routing decisions.

1. Select Advanced | Grp | Apply Group | Assign. The message window


prompts the user to indicate an element. Also, the Select an Element
Dialog Box appears. Choose Agv_Dec_Pt1_1.

The Select a Group Type list appears. Choose AGV Route Cyclic and click on
OK.

Because there is only one AGV route cyclic group defined, it is selected and
automatically assigned to Agv_Dec_Pt1_1. If there were more than one AGV
cyclic group defined, a popup would display the list of AGV route cyclic groups
for selection.
The Select a Group Type display list does not disappear immediately. The
message window prompts the user to select a group type to assign to
Agv_Dec_Pt1_1. Since no more group types will be assigned to Agv_Dec_Pt1_1,
click on Cancel to close the display list.

2. Save the model as agv04.mdl in c:\deneb\QTUTORlib\MODELS

- 281 -
NOTE: Assigning a route group (or more than one) to an AGV decision point does not
activate it. This action merely makes the route group available for use by the AGV
decision point. If the model is run at this point, there will be no change to the model as
read in at the start of the tutorial. In order to make use of the assigned group(s) in
routing parts, popups will be used. Before describing this, some further comments are
provided about route groups.

An AGV decision point can have multiple groups assigned.


When a new group type is created (see previous section), the association of the
group is specified as single or multiple. When a group type has a multiple
association, it is permissible to assign more than one group of this type to an AGV
decision point.
The system-defined groups have been created as single association. Therefore,
only one group each of a system-defined group type can be assigned to an AGV
decision point. For example, an AGV decision point could have one route cyclic
group, one route percent group, and one claim group assigned; but not two claim,
route cyclic, or route percent groups.

A second method of assigning a route group to an AGV decision point is


available. This is useful when switching between routing rules.

3. Select Model | MHS | Dec Point | Part Destination. The message


window prompts the user to indicate an AGV/Labor decision point to set
part destination. Selecting from the list or with the LMB, pick
Agv_Dec_Pt1_1. Click on OK. The Select Part Destination Options
dialog box appears. Select the Add button under Group Destination Info
and click on OK.

If there are several route groups defined, a popup list of route groups will appear
and the appropriate selection can be made. If there is only one route group, as in
this case, the assignment is automatic.

NOTE: The popup list of route groups will not differentiate the type of route groups,
although the assignment mechanism does. For example, an attempt to assign a route

- 282 -
cyclic group to the AGV decision point where another route cyclic group is already
assigned will result in a warning message and a confirmation query.

17.5 Routing to a Group

In this session, a popup is attached to the AGV decision point named


Agv_Dec_Pt1_1. The popup will control AGV routing and part destination
by making use of the route cyclic group assigned to the AGV decision
point. In addition, a popup is attached to a buffer named Buffer1_1.
During the execution of the buffer process logic, the popup will permit
easy control of alternative logic applications.

The popup mechanism is explained in more detail in Section 17.7, Popups.

1. Select Advanced | Popup | Attach Popup | Add. The Select an Entity


Type display list appears. Choose Element Class. The Select an Element
Class display list appears. Choose Agv_Dec_Pt1.

2. The message window prompts the user to select a popup to attach. The
Select a Popup display list appears. Choose AGV Part Route and click on
OK. The Agv Part route display list appears. Choose Part Route Cyclic
and click on OK.

- 283 -
The Select Element Class display list appears again. Click on Cancel.

3. Save the model as agv04.mdl in c:\deneb\QTUTORlib\MODELS.

17.6 Running the Model

Run the model. Observe that the parts will be routed to Machine1_1 and
Machine2_1 alternately (cyclically). The fixed routing has been
overridden by the use of cyclic routing.

Hierarchy of AGV Part Routing


By default, there is no part routing for a decision point. If an AGV
decision point is created which calls an AGV to collect a part, the AGV
will load the part and stay at the AGV decision point. Once fixed routing
is used and the routing data is entered, the AGV decision point cannot be
returned to the default condition via the user interface. From this point on,
it is controlled by the feature called popups. Use of this feature allows
switching from fixed and group part routing, but does not allow the
routing options to be eliminated.

- 284 -
If a popup is defined for an AGV decision point, it will have precedence
over fixed routing. Fixed routing can be reestablished by:

Removing the popup from the AGV decision point.


Using the Set Option button under the Attach Popup title bar and attaching
wgt_route_fixed to the AGV decision point.
Using the Set Option button under the Attach Popup title bar and attaching
wgt_route_default to the AGV decision point.

NOTE: While switching back and forth between fixed and group routing, the fixed
routing data and the assigned groups remain unaltered. This greatly eases the process of
moving between alternatives. As shown above, several groups can be assigned to a single
AGV decision point. Because these assignments are unaffected by the selection of a
popup, the process of switching between alternative control mechanisms is very easy.

The foundation for all this is the SCL which uses the popups or fixed
routing data. This default code is provided and can be modified or
replaced in order to meet specific requirements. In the final analysis it is
the SCL which is controlling the part routing and a detailed understanding
of this language will provide further insight into the way in which defaults
work.

17.7 Popups

In this section, further details are provided about the principles,


mechanisms, and usage of popups. A new popup is created and used. The
popup is attached to the buffer named Buffer1_1. The popup will permit
easy control of alternative logic during the execution of the buffer process
logic.

There are six steps in defining and applying a popup.

1. Define a popup via the user interface.

2. Include the SCL code needed to access the popup and execute its
selected procedure or routine:

Define the popup variable in the appropriate SCL procedure/function.

- 285 -
Use the Get_popup_selection routine in that SCL procedure/function to determine
the pointer (handle) of the popup's selected procedure/function.
Assign this value to the popup_selection variable.
Use the popup_selection variable to execute the popup's selected
procedure/function.

3. Write the SCL procedures/functions which are to be the alternative


selections for this popup.

4. Add these alternatives to the popup via the user interface.

5. Attach the popup to an element or AGV decision point as appropriate,


via the user interface.

6. Select the procedure/routine for this popup for this element.

Two additional steps (7 and 8) are provided in this text. These steps will
run the model and change the procedure selected for the popup, for the
element.

Step 1. Define the Popup

1. Select Advanced | Popup | Popup | Cre. Choose or input the following


values:

The popup TUTOR_HOOK has now been defined.

NOTE: This information is currently only in computer memory. Writing the model will
write this popup information to disk as a part of the model. However, the popup data can
also be saved to disk as a separate popup data file. This mechanism facilitates the use of
a user-defined popup across several models.

This is a good point to review the action buttons that are available under
Advanced | Popup | Popup.

- 286 -
Cre Create the popup, define the popup name, its type, and toggle the option to
indicate whether the popup is to be saved along with the model file or as an
independent file.
Mod Change the name or type of an existing popup. Changing the type will
remove all attachments for the popup. Also, changing a popup will cause a
prompt, when clearing the world, that warns that a change has been made.
Del Delete an existing popup.

2. Select File | Save Entity. The Select Entity Type dialog box appears.
From this dialog box choose Popup and click on OK.

The Select a Popup dialog box appears. Scroll down to the bottom of this dialog
box, choose TUTOR_HOOK, and click on OK.

- 287 -
The Select Library dialog box appears. Choose c:\deneb\QTUTORlib\HOOKS\
and save the popup as HOOK_FILE. The Select a Popup dialog box appears
again. Click on Cancel to close this dialog box.

NOTE: The file name is different from the popup name. They could be the same;
however, it is useful to understand that they need not be the same.

3. View the file HOOK_FILE.mdl in c:\deneb\QTUTORlib\HOOKS\.

DEF_SCLHOOK `TUTOR_HOOK' 0
END_DEFINE `TUTOR_HOOK'
The name of the popup is defined "TUTOR_HOOK" and the type set as "0 =
procedure". This is the same information that will be written to the model file.

Step 2. Include the SCL Code to Use the Popup

A buffer process logic will be created which will allow the use of a popup.
This popup will be used to choose from two different, simple messaging
procedures for the buffer process logic.

4. Select File | Copy File. Choose the file


..\QUESTlib\SYSDEF\LOGICS\pr_buff.scl.src to be copied.

The message window indicates to select the destination library. From the Select
Library dialog box choose the library c:\deneb\QTUTORlib. Save the file as
buff_pr.scl in c:\deneb\QTUTORlib\LOGICS\.
The message window confirms that the file pr_buff.scl has been copied to the file
buf_pr.scl in the library c:\deneb\QTUTORlib\LOGICS. This mechanism avoids
having to drop into the Windows operating system to create a new file.

5. The c:\deneb\QTUTORlib\LOGICS\buf_pr.scl file should be edited to


match the following SCL code. Select File | Edit File.

Procedure buf_sort()
VAR
ld_time : Real
-- define the popup variable with no type i.e. type
-- is procedure
position : popup_selection
Begin

Require Part ANY


ld_time = sample_load_time()
load ld_time
-- use the get_popup_selection to call different

- 288 -
-- procedures
-- the selection of the procedure will be via the
-- user interface
position = get_popup_selection('TUTOR_HOOK')
-- now call the procedure to which the popup
-- variable refers
position()
pass()
end
Save the file.

NOTE: In an SCL procedure/routine, use of a popup starts with the definition of a


variable of type popup_selection. If the popup definition refers to a routine, then the
popup_selection variable definition must also specify the routine type. If the popup
definition refers to a procedure, then no additional type needs to be specified. Therefore,
in this case, the popup_selection variable called position has no type, e.g., Real, Integer,
etc., specified. Examples of popup_selections with types specified are provided in the next
steps.

NOTE: The routine get_popup_selection takes as its first parameter the name of the
popup to be performed. When the model is run, the procedure currently attached to this
popup will be executed. Optionally, other parameters can be specified which are then
passed to the procedure which is executed.

Step 3. Write the Alternative SCL Procedures/Routines

This step creates the alternative SCL procedures for this popup. In this
example they are all in one file. However, they can also be placed in
different files.

6. Create a file buf_hooks.scl in c:\deneb\QTUTORlib\LOGICS\. Use the


same method as shown in step 2. Enter the following SCL code into this
file:

Var
reply : string
Procedure wr_res()
Begin
Read_kbd (`Using TUTOR_HOOK with wr_res',reply)
End
Procedure wr_wgt()
Begin
Read_kbd (`Using TUTOR_HOOK with wr_wgt',reply)
End
Save the file.

- 289 -
Step 4. Add Alternatives to the Popup

Add the alternative procedures to the popup definition.

7. Select Advanced | Popup | Options | Add. Choose TUTOR_HOOK


from the Select a Popup dialog box and click on OK. Choose
c:\deneb\QTUTORlib\LOGICS\buf_hooks.scl from the Select Library
dialog box and click on OK. The message window prompts the user to
select a SCL function.

8. From this dialog box select wr_res and click on OK. Choose the same
file again and choose wr_wgt.

The SCL file is compiled again. Select Cancel on the Select File dialog box to
close the dialog box. To verify that the processes are available to the popup, select
Advanced | Popup | Options | Show.
Choose TUTOR_HOOK from the Select a Popup dialog box and click on OK.
The following message window appears indicating that the SCL procedures,
wr_res and wr_wgt, are the options in the popup TUTOR_HOOK.

- 290 -
9. At this point, the information on the popup TUTOR_HOOK is
complete. Save the popup information again as in Step 2 above, to the file
HOOK_FILE.mdl in c:\deneb\QTUTORlib\HOOKS\.

10. View the file.

DEF_SCLHOOK `TUTOR_HOOK' 0
HOOK_PROCEDURE wr_res()
HOOK_PROCEDURE wr_wgt()
END_DEFINE `TUTOR_HOOK'

Step 5. Attach the SCL Code That Uses the Popup to an Element

11. To attach the revised process logic to the process of Buffer1 select
Model | Build | Element Class | Buffer. Choose Buffer1 from the Select
Element Class dialog box and click on OK. The Buffer dialog box
appears. From this dialog box select Logics | Process Logic. The Buffer
Process Logic dialog box appears. From this dialog box select User Func
and click on OK.

Choose c:\deneb\QTUTORlib\LOGICS\buf_pr.scl from the Select Library dialog


box.

12. Choose buf_sort from Select a SCL Function dialog box and click on
OK. Click on OK for the Logics dialog box. Click on OK for the Buffer
dialog box. The message window confirms that the Push Process Logic for
Buffer1 has been set to buf_sort.

Step 6. Attach the Popup to the Element and Select an Option

13. The final step is to attach the popup to the buffer. Select Advanced |
Popup | Attach Popup | Add. Choose Buffer1 from the Select Element
Class dialog box.

The Select a Popup dialog box appears. From this dialog box select
TUTOR_HOOK and click on OK. Choose wr_res from the TUTOR_HOOK
dialog box and click on OK.

- 291 -
No compilation takes place as this procedure is already compiled and in memory.
The process is complete. The buffer named Buffer1 now has access to the popup
named TUTOR_HOOK and is currently going to use wr_res wherever the popup
is used in its SCL code; i.e., in its revised process logic code.

14. Write the model to disk as agv05.mdl in


c:\deneb\QTUTORlib\MODELS\

In the process just completed, by selecting wr_res from the dialog box, there were
three options, even though only two procedures are currently attached to
TUTOR_HOOK. The option "User func" allows the attachment of any procedure
by selection of any SCL file and any procedure within it. This shortcut is useful
when switching back and forth between options seems unlikely. For example, the
procedure could be set for this popup for this buffer without adding the procedure
to TUTOR_HOOK. This selection would involve compilation of the selected SCL
file.

Step 7. Run the Model

Run the model and observe that every time a part arrives in Buffer1, a
message is displayed as a prompt:

Using TUTOR_HOOK with procedure wr_res: This prompt will require a mouse
click or the enter key to continue the model run.

Step 8. Changing the Selected Procedure for a Popup for an Element

Certain system-defined popups are automatically attached to AGV classes


and controllers. Also, these system-defined popups have
procedures/routines automatically selected by default. The process for
changing the procedure/routine selection for these cases is the same as for
a user-defined popup.

15. Select Advanced | Popup | Attach Popup | Set Option. Choose


Buffer1 from the Select Element Class dialog box and click on OK.

The Select a Popup dialog box appears. From this dialog box choose
TUTOR_HOOK and click on OK. Choose wr_wgt from the TUTOR_HOOK
dialog box and click on OK. The Select a Popup dialog box appears again. To
close this dialog box click on Cancel.
The process is complete. The buffer named Buffer1 will now use procedure
wr_wgt instead of wr_res in its process logic.

- 292 -
16. Run the model to confirm the difference. The message will now read:
"Using TUTOR_HOOK with procedure wr_wgt:"

This is a simple use of popups. This feature provides a very powerful way
of adding options to the way that a model runs. This example used popup
type "None" which uses procedures.

The AGV mechanism makes extensive use of popups, including popups with
types other than "None". Some additional information on the use of popups is
provided, using system-defined popups used in AGV modelling.

Examples of a Popup in AGV Modelling

In an SCL procedure/routine, use of a popup starts with the definition of a


variable of type popup. If the popup definition refers to a routine, then the
popup definition must also specify the routine type. If the popup definition
refers to a procedure, then no additional type needs to be specified.

EXAMPLE:
Procedure def_ctlr_proc_logic()

Var

Part_route :popup_selection : Element

Parking :popup_selection : Element

Path_selection :popup_selection : Agv_Path

Departure :popup_selection : Integer

Agv_destination :popup_selection :Element

Ctlr_evt_selection :popup_selection :Ctlr_Event

Agv_selection :popup_selection :Element

Failure :popup_selection

the_agv :Element

part_dest_dec :Element

agv_dest_dec : Element

the_path : Agv_Path

curr_path : Agv_Path

- 293 -
agv_of_class : Agv_Class

depart : Integer

path_changed : Integer

evt, new_evt : Ctlr_Event

the_part : Part

ii : Integer

The next step in the SCL code which uses a popup is the use of the
variable together with the Get_popup_selection routine. The
Get_popup_selection routine returns a handle to a popup, based on the
specified parameters of the routine call. The parameters start with a text
string/text variable naming the popup to be used. Other parameters are
popup-specific.

Example of Popup usage - 1

Part_route = get_popup_selection( AGV_Part_Route, evt->dec,celem)


AGV_Part_Route is a text constant which is set to `AGV_Part_Route'.
evt is a controller event (Ctlr_Event) variable.
evt->dec is the decision point with which the event is associated.
celem is the handle of the current element of the current SCL logic.

NOTE: Note the passing of parameters via get_popup_selection to the routine that is
currently attached to the popup AGV_Part_Route for this AGV decision point.

This use of get_popup_selection will return a pointer to a routine of type element.


This value is assigned to the popup_selection variable Part_route.
Part_route can then be used in place of a routine name (of type element).

part_dest_dec = Part_route(evt->part_handle, evt->dec)


where part_dest_dec is a variable of type element.

This use of the popup_selection variable Part_route will use whatever SCL
routine is currently assigned to the popup named `AGV_Part_Route' for
the specified AGV decision point. It is important to note that whereas one
AGV decision point could use Route_cyclic routine for its
AGV_Part_Route SCL popup, another AGV decision point could use a
different option for the same popup.

- 294 -
Example of popup usage - 2

Failure = get_popup_selection( AGV_Failure, evt->agv_handle, evt->dec,


celem)
AGV_Failure is a text constant which is set to `AGV_Failure'.
evt is a controller event (Ctlr_Event) variable.
evt->agv_handle is the AGV associated with the failure being modelled.
evt->dec is the decision point with which the event is associated.
celem is the current element of the current SCL logic.

This use of get_popup_selection will return a pointer to a procedure. Note


that the return of a procedure pointer rather than a routine pointer occurs
because failure is declared as a popup_selection handle with a null data
type. This value is assigned to the popup_selection variable named failure.

Failure can then be used in place of a procedure name.

Failure(evt->agv_handle)

This use of the popup_selection variable named failure will call whatever
SCL procedure is currently assigned to the SCL popup_selection named
`AGV_Failure'. Note that the parameters that are used to determine which
procedure is assigned to SCL popup_selection AGV_Failure are not
always needed by the procedure itself.

System-defined Popups - Interface data and File data


The default SCL for AGVs has a number of popups. These system popups
have already been predefined, which means that there is a data file
supplied for each system popup.

Each predefined system popup has a data file (suffix is .mdl) in the
subdirectory of the SYSDEF$LIB library (..\QUESTlib\SYSDEF\HOOKS\
by default). All these .mdl files are loaded into memory when a model is
read in.

Each system popup data file references one or more SCL


procedures/routines that are an option for the popup name specified in the
file. In the standard system popup data files, the referenced
procedures/routines are standard SCL procedures/routines. They are
located in the subdirectory of the SYSDEF$LIB library
(..\QUESTlib\SYSDEF\LOGICS by default.) These standard SCL

- 295 -
procedures/routines are compiled and loaded into memory when a model
is read in.

The standard system popup data files can be modified by editing to


include additional SCL procedures/routines. These procedures/routines
will need to be available, in memory, when the program is run. They must
be placed in a location which ensures that they will be compiled when a
model is read in. The location to be used is the subdirectory
USERDEF$LIB library (..\QUESTlib\USERDEF\LOGICS by default).

Examine a popup data file by first examining the popup from the user
interface. First, examine the type of popup.

17. Select Advanced | Popup | Popup | Mod. Choose AGV Load from
the Select a Popup dialog box and click on OK. This will display the name
and type of the popup just selected.

This shows that the popup AGV_Load is of type "None", i.e., it uses procedures,
not routines.

NOTE: By toggling through the options for Type, the range of types for popups can be
reviewed. They are: Element Class, AGV/Labor Command, AGV/Labor Path, AGV/Labor
Segment, Car Class, Controller Event, Group, Double, Integer, Location, PnF Segment,
Process, Real, Element, Sig Wait Entry, String, Part, Part Class, Chart.

18. To abort this process click on Cancel. Now examine the alternatives
available for this popup.

19. Select Advanced | Popup | Options | Show. Choose AGV Load from
Select a Popup dialog box and click on OK. The message window will
show:

- 296 -
Select a Popup

These are the available options for the popup AGV Load. Showing which
popup is attached to elements or a decision point, and which procedures or
routines are currently selected, is described.

20. Select Advanced | Popup | Attach Popup | Show. Choose Agv1 from
the Select Element Class dialog box and click on OK. A dialog box
appears which shows the Agv1's popups.

This shows that for AGV class Agv1 there are three popups defined: AGV Load,
AGV Unload, and AGV Wait.
It also shows the SCL procedure/routines which are currently selected for use by
each of these popups on this AGV class:
AGV Load - when this is used in the SCL code, the SCL procedure/routine called
notify_after_all_loads is used.
AGV Unload - when this is used in the SCL code, the SCL procedure/routine
called notify_after_all_unloads is used.
AGV Wait - when this is used in the SCL code, the SCL procedure/routine called
agv_wait_error is used.

21. Select Advanced | Popup | Popup | Mod. Then choose AGV Load,
AGV Unload, and AGV Wait, in turn. This will verify that each is of type
"None", i.e., relates to procedures.

As an example, the AGV popup named AGV Load currently uses the SCL
procedure notify_after_all_loads. This procedure can be found in the SCL file
agv_load.scl which is located in the SYSTEM subdirectory of SYSDEF$LIB
(c:\deneb\QUESTlib\SYSDEF\LOGICS\ in a standard installation). In this case
both options are contained in the same file. Only the procedure
notify_after_all_loads is shown below.

- 297 -
----------------------------------------------------------------

-- notify_after_all_loads

--

-- Description:

-- This routine executes ALL the LOAD_AGV commands pending on

-- the AGV and then notifies the Controller that the commands

-- have been completed. Load time is associated with each

-- part that is loaded. If load time is to be

-- associated only once and for all parts

-- together, the LOAD statement may be taken out of the REPEAT

-- loop and placed before NOTIFY_CONTROLLER( CMD_COMPLETED ).

--

-- Called by : Load Popup_Selection

--

-- Version : QUEST 3.0

-- Date : 01/17/97

--

-- Notify proper controller based on element type

--

-- Copyright (c) 1994 DELMIA Corp.

Procedure notify_after_all_loads( cmd : Agv_Cmd )

Var

ld_time : Real

mobile_type : Integer

load_proc : Process

Begin

if( cmd->agv_handle->element_type == AGV_VEHICLE ) then


mobile_type = AGV_VEHICLE

- 298 -
else

mobile_type = LABORER
endif
repeat
require part EXACT cmd->part_handle
if( cmd->agv_handle->class->load_process <> NULL ) then
load_proc = do_load_process( )
endif

if( cmd->part_handle->destination <> NULL ) then

-- If the Labor is not going to a Labor Dec_pt,


-- issue the corresponding Unload command
-- If AGV/Labor going to AGV/Lbr dec_pts, if the
-- dec pts have no connection, don't issue unload
-- command

if( (mobile_type == LABORER and


cmd->part_handle->destination->element_type <>
LBR_DEC) or
cmd->part_handle->destination->out_type[1] <>
NO_CONNECTION ) then
issue_pending_agv_cmd( UNLOAD_AGV,\
cmd->agv_handle, cmd->part_handle,\
cmd->part_handle->destination )
endif

endif

cmd = get_pending_agv_command( LOAD_AGV, cmd->dec )


until( cmd == NULL )
if( mobile_type == AGV_VEHICLE ) then
notify_agv_ctlr( CMD_COMPLETED )
else
notify_lbr_ctlr( CMD_COMPLETED )
endif

End

The SCL code that uses the popup named AGV_Load to access the
currently selected procedure is found in the SCL file pr_agv.scl located in
the SYSDEF$LIB (..\QUESTlib\SYSDEF\LOGICS\ in a standard
installation).

NOTE: Do_Load is defined as a popup_selection variable of no specified type and


therefore relates to procedures. Also AGV_Load is a system-defined text constant which
holds the value `AGV_Load', i.e., the name of the popup.

case LOAD_AGV :

- 299 -
if( celem->curr_dec == NULL OR celem->curr_dec <> cmd->dec )
then
set_pending_agv_cmd( cmd )
return
endif

Do_Load = get_popup_selection( AGV_Load, celem, cmd->dec,\


celem->agv_ctlr)
if (Do_Load == NULL) then
unassigned_hook( AGV_Load )
endif
Do_Load( cmd )

The SCL data file for the popup AGV_Load is in the file agv_load.mdl
located in the subdirectory of SYSDEF$LIB
(..\QUESTlib\SYSDEF\HOOKS\).

Here is the data file:

DEF_SCLHOOK `AGV_Load' 0
HOOK_PROCEDURE notify_after_all_loads( )
HOOK_PROCEDURE notify_after_each_load( )
END_DEFINE `AGV_Load'

- 300 -
CHAPTER 18
PULL SYSTEM

Introduction
This tutorial explains the way the pull system works in QUEST. The pull
mechanism allows parts to be created on demand. Demand typically arises
at the sink and is sent in the form of a "request" for a particular part to the
upstream element, which tries to satisfy it. If the element has the requested
part, it is routed out. If it does not possess the requested part, it further
propagates the request upstream. The request could thus get propagated all
the way up to the source, which instantly satisfies the request by creating a
part of the specified class, and routing it to the element which requested it.
Thus, requests travel in a direction opposite that of parts in the system. In
this lesson, the conversion of the existing model to the pull model will be
demonstrated, and throughout the lesson, the information will be given for
each element modified to better explain the concepts of the pull system.

Set Up

1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the

- 301 -
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ..." When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

- 302 -
Figure 18-1 Assembly Model

Load the Model


In this tutorial, the main objective is to show the functionality of the pull
feature in QUEST. To emphasize on the functionality of the pull, read in
the assembly model from the GIFTS directory and modify it to create a
pull model.

Select Model | Build | Model | Read. Load assembly.mdl from


c:\deneb\QUESTlib\MODELS\GIFTS.

Modify the Sink


1. Select Model | Build | Element Class | Modify. Pick the only sink,
sink_1, from the model. The Sink dialog box is displayed. Notice that the
IRT (inter-request time) and the Request Part Fractions buttons in the
Sink dialog box are disabled. In this dialog box, change the Input Type to
Pull. This enables the IRT and the Request Part Fractions buttons.

- 303 -
2. To change the IRT, select the IRT button from the Sink dialog box and
set it to a Constant value of 60.

3. Change the request part fractions. Select the Request Part Fractions
button from the Sink dialog box. The Request Class Fractions dialog box
is displayed. Complete this dialog box as shown below and click on OK.
Click on OK in the Sink dialog box.

NOTE: A sink does not receive requests. It is only a creator of requests. Requests can be
created at specific intervals by setting the inter-request time (IRT) distribution for the
sink. Request part fractions on the sink allow requests of a desired proportion of part
classes to be created. These two functions are analogous to IAT and part fractions,

- 304 -
respectively, on the source. A sink can be set up to create requests after an initial offset
time and also made to stop creating requests after a specified number have been created.

Modify the Conveyors


1. Select Model | Build | Element Class | Modify. Pick the downstream
conveyor, conveyor_3. The Conveyor dialog box is displayed. From this
dialog box, change the Input Type and Output Type to Pull and click on
OK.

2. Repeat step 1 for the other two conveyors in the model: conveyor_1
and conveyor_2.

NOTE: A conveyor is an element which simply propagates the received request


upstream.

- 305 -
Input Type and Output Type
Two attributes, input type and output type, that are set on the element
class, dictate whether an element can send and receive requests. These
types can be either Pull or Push. Only those elements, whose input type is
set to pull, can send out requests and only those elements, whose output
type is pull, can receive requests from downstream.

For example, a buffer whose input type is push and output type is pull will
have parts pushed into it but will send them out only if there is a request
for the part. This buffer does not propagate any requests. In other words,
this buffer can receive requests but it can not send out requests.

Modify the Machine


1. Select Model | Build | Element Class | Modify. Pick the machine,
workcell_1, from the model. The Machine dialog box is displayed. In this
dialog box, change the Input Type and Output Type to Pull.

- 306 -
2. To modify the request routing of the machine, select the Request
Routing button from the Machine dialog box. The Request Routing Info
dialog box is displayed.

From this dialog box, select the Restrictions button. The Request Restriction Info
dialog box is displayed. Complete this dialog box as shown below and click on
OK. Click on OK on the Request Routing Info dialog box and on the Machine
dialog box.

NOTE: A machine, being capable of executing processes that create new parts and
destroy others, has a more complicated way of determining what and how many requests
to propagate. As requests are received, the machine checks if the products of any of the
processes that are attached to it match with the type and number of requests that are
pending with it. The first process whose products can satisfy the pending requests is
selected. Then, new requests for the required parts for the process are created and
propagated. If there are not enough pending requests that can be satisfied by the products
of a process, no request is sent out. The machine waits until this condition is satisfied.

Modify the Buffers


1. Select Model | Build | Element Class | Modify.

The Select Element Class dialog box is displayed. From this dialog box, choose
buffer_7 and click on OK. The Buffer dialog box is displayed. In this dialog box,
change the Input Type and Output Type to Pull.

- 307 -
2. Change the upper and lower thresholds for the buffer. From the Buffer
dialog box, select the Thresholds button. The Class Thresholds dialog box
is displayed. Complete this dialog box as shown below and click on OK.
Click on OK on the Buffer dialog box.

3. Repeat steps 1 and 2 and modify buffer_8 to change the Input Type and
Output Type to Pull. For buffer_8, set the Lower Threshold for rack to 1,
the Upper Threshold for rack to 5, and all others as 0 in the Class
Thresholds dialog box.

- 308 -
4. To see the effect of the lower and upper thresholds working for the two
buffers, buffer_7 and buffer_8, only delete the two buffers next to the
source.

5. Select Model | Build | Element Class | Delete. The Select Element


Class dialog box is displayed. From this dialog box, choose buffer_5 and
click on OK. Select Yes on the Delete Element Class <buffer_5> ? dialog
box and click on OK.

6. Repeat step 5 and delete the buffer class buffer_6.

NOTE: A buffer can have lower and upper threshold levels set for each part class on it.
Whenever the stock of a particular part class falls below the lower threshold level in the
buffer, enough requests are created and sent upstream such that the stock fills up to the
upper threshold level. Thus, for each request received, there may be zero or several
requests created at a buffer for propagation upstream, depending on the current stock
level of the particular part class and orders already sent. At system startup, orders are
sent out from all the buffers in the system so as to fill them up to the upper threshold
level.

Modify Sources
1. Select Model | Build | Element Class | Modify.

Choose source_1 from the Select Element Class dialog box and click on OK. The
Source dialog box is displayed. Change the Part Creation Mode to Passive. The
Output Type is changed to Pull and is disabled. Click on OK on the Source dialog
box.

- 309 -
2. Repeat step 1, modify source_2, and change the Part Creation Mode to
Passive. This will change the Output Type to Pull automatically and
disable the Output Type field.

NOTE: The element receiving the order is a source. If it is an active source, the order
will remain pending until the desired part is created at the source, (as per its IAT). Any
active source is analogous to the push input element. If it is a passive source, the desired
part will be immediately created.

Element Connections
Since, the two buffers next to the sources have been deleted, the element
connections between the corresponding elements will be made again.

Select Model | Build | Connections | Element. The Select Element Name


dialog box is displayed. From this dialog box, choose source_1 and click
on OK. Pick the ending element to be conveyor_1. Similarly, connect
source_2 to conveyor_2.

- 310 -
In this model, all the connections are push connections. The way the pull system
works in QUEST is to make use of push connections in the absence of the pull
connections.

Pull Connections
For the propagation of the requests upstream, the connection mechanism
has been enhanced to provide pull connections. Just as the regular
connection acts as a channel for transferring parts downstream, a pull
connection is a conduit for requests travelling upstream in a system.
Naturally, pull connections are made in the reverse order of push
connections. However, pull connections are not mandatory. In the absence
of a pull connection, the push connection is used to send requests, of
course in the reverse direction. Pull connections are useful in sending
requests to elements when a direct push connection does not exist to this
element.

The same buttons used for making/deleting connections in the push mode
are used for pull connections also. The toggle button under Model | Build
| Connections is used to set the mode to Push or Pull. The other
Connections buttons work on the current mode.

Save the Model


It is a good practice to save the model periodically during the model
building process.

To save the model, select File | Save Model As. Save the model with the
name pull.mdl in c:\deneb\QTUTORlib\MODELS.

Run the Simulation


1. To change the simulation interval, select Run | Simulate | Simulation |
Interval. The Simulation Time Interval dialog box is displayed. Complete
this dialog box as shown below and click on OK.

- 311 -
2. To run the model, select Run | Simulate | Simulation | Run. The Run
dialog box is displayed. The default Run Time is 1000.0 seconds. Change
the Run Time to 2000 seconds. The simulation will run to this time and
terminate. Complete this dialog box as shown below and click on OK.

- 312 -
CHAPTER 19
2D ENVIRONMENT

Introduction
This lesson shows how the 2D environment works in QUEST. The 2D
environment gives users the flexibility to view the data in a dynamic way,
which will be updated at continued moments of time. The 2D world is a
schematic representation of the 3D world. The model created in 3D can be
easily represented in 2D. Also, the model created in the 2D world can be
easily represented in the 3D world using the Model | Build | Element |
Populate button. QUEST will retain all the element and class connections
that the user created in the 2D world.

The model in the 2D world is an iconic representation of the 3D model.


The charts and icons associated with a particular element of the model
represent that element. The element can be selected by selecting the
associated icon or chart in the 2D environment.

This lesson will cover bringing in a standard model from the QUEST
library and using the various features of 2D modelling. This will mainly
include creating the iconic representation model of the 3D model and
creating various charts for this model. The icons commonly used to create
the 2D environment are in the standard QUEST library.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Since a 2D window will be created, it is not necessary to
maximize the QUEST 3D window at this time.

- 313 -
2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ...". When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

- 314 -
2D Representation of the Model
The following steps are required to read in the existing 3D model and
create the 2D iconic representation. The 2D model will contain the icons
representing the elements in the 3D model. Then the 3D elements will be
associated with the 2D icons to have all the properties of the model
elements reflected in the 2D environment.

1. Select Model | Build | Model | Read. Choose the model assembly.mdl


located in c:\deneb\QUESTlib\MODELS\GIFTS\.

This is the model producing the assemblies from the plates and the racks. The
plates are being produced by one source and the racks are being produced by the
other source. After going over the conveyors, the machine is working to produce
the assemblies and finally transferring the assemblies to the sink. Both of the
sources in the model have the same constant IAT (inter-arrival time) of 15.0
seconds.

2. The next step is to create the 2D window, add the icons, and associate
them to the elements in the 3D model.

Select Tools | Windows | 2D Window | Create. The Window Parameters dialog


box as shown below will be displayed.

Accept the default parameters and click on OK. Place the 2D window on the
screen, making best use of the space so that both the 3D model and the 2D
window can be viewed.

3. The next task is to add the icons to the 2D window and associate them
to the elements in the 3D model. Select Model | Charts/2D | Icon | Add.

The Select Library dialog box will be displayed. Choose


c:\deneb\QUESTlib\ICONS\. Choose the source icon (Source) and place it in the
2D window in the upper left-hand corner. Choose the source icon from the Select
Library dialog box again and place the second one below the first one in the 2D
window.

- 315 -
To complete the model, select the other icons (namely buffer, conveyor,
machine, and sink) and place them in the 2D window in the same order as in the
3D model to give the schematic representation of the model. The completed 2D
model will look like Figure 19-2.

Figure 19-1 3D Model Layout

Figure 19-2 2D Model Layout

4. The next step is to associate the icons in the 2D window to the elements
in the 3D model. Select Model | Charts/2D | Icon | Assoc.

The message window reads "Indicate element". Using the LMB, pick the source
on the upper left-hand side of the model in the 3D window. The message window
now instructs to select the chart or icon to associate with the selected element.
Pick the source icon in the upper left-hand corner of the 2D window. Once this

- 316 -
icon is picked, the Modify Icon dialog box will appear. Select all the default
settings in this dialog box and click on OK. The selected icon in the 2D window
will be labeled as Source_1. The number 0 is displayed at the top of the source_1
icon, which indicates the number of parts being processed by this source at any
particular time while the simulation is running.
Select the Assoc button again and pick the second source in the 3D window as the
element to be associated, and associate it to the corresponding source icon in the
2D window. The associated source icon is labeled as source_2.
Repeat this process for all the icons in the 2d window. The icons will display their
corresponding titles. The buffers are marked as buffer_5 to buffer_8. There are
three conveyors, namely conveyor_1, conveyor_2, and conveyor_3. The machine
is titled as workcell_1 and the sink is sink_1.

NOTE: Associated icons differ from the element icons in the following ways:

An element icon may change with state while an associated icon does not.
Element icon text can not be changed while associated icon text is changeable at
element level.

Associated icons are added in 2D world by associating an existing icon with an


element through the Model | Charts/2D | Icon | Assoc button. Element icons are
added through Model | Build | Element | Populate button. The icons created
above are all associated icons.
Associated icons, by default, display the name of, and the current number of parts
in that element. The line of text over the associated icon displays the number of
parts; the line below the element is the element name. This information can be
edited as SCL expressions. By default, when an element is associated to an icon,
the SCL expressions are set as: get_element( 'element_name' )->num_parts
and get_element( 'element_name' )->name. Additionally, models with
associated icons created prior to version 4_0, will have these defaults set.
To change either of the default SCL expressions or font size/type, select Model |
Charts/2D | Modify, choose an associated icon, and modify the SCL expression
in the dialog box that appears.

NOTE: If the evaluated expression contains a "new line" character, only the first line is
accepted; the rest are ignored.

Select OK on the popup to compile the expressions and update the icons.

Charts in the 2D Environment


One important feature of the 2D environment is the dynamically updated
charting capability. The user has the option of representing the animation

- 317 -
results in several ways by creating pie charts, histograms, time series, bar
charts, group bars, and SCL charts. The user also has the option of creating
user-defined charts by using a single-line SCL program.

Changing the Cycle Process Time and IAT for a Source


1. The 2D charts can be viewed more easily by changing the process time
for the machine and the IAT for one of the two sources. To change the
process time for the machine, select Model | Process | Process | Cycle.

Choose process_1 from the Select Process dialog box and click on OK. The
Cycle Process Definition dialog box will be displayed as shown below.

Using the LMB, select the Time button, change the cycle process time to a
Constant value of 45 seconds, and click on OK.

2. To change the IAT for source_1, select Model | Build | Element Class |
Source. Choose source_1 from the Select Element Class dialog box and

- 318 -
click on OK. Select the IAT button from the Source dialog box, change to
a Constant value of 25 seconds, and click on OK. Run the simulation for
1000 seconds.

NOTE: The user can create another 2D window at this point and draw the charts into
the new window, or continue using the first window depending upon the most efficient use
of the space.

NOTE: The associated icons in the 2D window represent the corresponding element in
the 3D window. The name at the bottom of the associated icon is the element name this
icon is associated with; the number at the top of the associated icon is updated when the
simulation runs in order to indicate the number of parts in the particular element at that
instant in time.

Create Pie Charts


1. To create the utilization pie chart, select Model | Charts/2D | Pie Chart
| Util. The message window reads "Indicate Element". With the LMB,
pick the machine, workcell_1. The Create Pie Chart dialog box is
displayed as shown below.

Accept the default settings and click on OK. The message window prompts the
user to select the chart position and then the legend position in the 2D window.
Place the chart and the legend in the 2D window below the schematic
representation of the model. This utilization pie chart gives the dynamically
updated information about the machine, workcell_1. It indicates, as a percentage
of simulation time and the absolute values of simulation time, whether the
machine is idle, busy, blocked, or failed.

- 319 -
2. Run the simulation to see the utilization pie chart for workcell_1
changing dynamically. Select Run | Simulate | Simulation | Run. The Run
dialog box is displayed. Complete it as shown below and click on OK.

The simulation runs for 1000 seconds, showing the dynamic status of the
machine.

3. The next type of chart under the Pie Chart title bar is a part # chart
which indicates the number of parts being processed by the element at one
time. To draw this chart, select Model | Charts/2D | Pie Chart | Contents.

Using the LMB, pick the machine, workcell_1. The Create Pie Chart dialog box
is displayed. Accept the default settings and click on OK. Place the chart and the
legend in the 2D window. The created chart is titled "Part Count for workcell_1",
indicating the number of parts being processed by this machine.

4. To run the simulation, select Run | Simulate | Simulation | Run. The


Run dialog box is displayed. Enter 1000 for the Run time option, leave the
other fields as defaults, and click on OK. The part # pie chart gives the
number of parts that are input into workcell_1. The pie chart indicates that
the utilization is one-half. This is due to the fact that the machine is
producing the assemblies of the racks and the plates and it needs an equal
number of plates and racks. The legend of this chart gives the number of
parts input into this machine and their percentage.

User-defined Pie Charts


The other important feature of the 2D environment is that the user can
create the charts having a one-line SCL program. This part of the tutorial
deals with creating the user-defined pie chart. This chart shows the
number of parts leaving the buffers, buffer_7 and buffer_8.

1. Select the Model | Charts/2D | Pie Chart | User button. The Create
User Defined Pie Chart dialog box appears as shown below.

- 320 -
Accept all the default settings and click on OK. The Pie Chart slice definitions
dialog box is displayed. Fill in this dialog box with the information shown in the
following table and click on OK.

The message window asks the user to place the chart and the legend in the 2D
window. Run the simulation with the run time of 1000 seconds. The user-defined
pie chart now shows the number of parts leaving the two buffers, and the slices of
the pie charts are separated out, which is the option available only on the user-
defined charts.

NOTE: The statistics displayed by any of the charts can be checked and compared by
running the model and halting it at a particular point and selecting Run | Single Run
Output | Run Stats | Element or Part.

This displays all the detailed information related to the part or the element.

Create a Histogram
1. In this part of the tutorial, the part histogram will be explained. To
create the part histogram for buffer_7 select Model | Charts/2D |
Histogram | Part.

The Select a Part Class dialog box is displayed as shown below.

- 321 -
Choose plate and click on OK. The Create Histogram dialog box is displayed.
Fill it in as shown below and click on OK.

Pick the chart position in the 2D window. The chart is displayed in the 2D
window. This histogram indicates the time spent by the plates in the system. To
run the simulation, select Run | Simulate | Simulation | Run. The part histogram
has multiple bars indicating that different numbers of plates are spending different
amounts of time in the system.

Create a Time Series


1. Under the Time Series title bar, the user has the option of creating the
time series for the element and the part. To create the element time series,
select Model | Charts/2D | Time Series | Element.

The Create element time series dialog box will be displayed as shown below.

- 322 -
2. Using the LMB, select the Select Element button. Pick the buffer
(buffer_7) close to the machine as the first element to be added. Select the
Select Element button again and pick the buffer next to buffer_7. This is
buffer_8. Now the time series has buffer_7 and buffer_8 as the two
elements added to it. Click on OK.

3. Specify the chart and the legend position. If there is little space
remaining in the present 2D window, multiple 2D windows can be created
and the charts can be placed in the order that the user wants. To run the
simulation, select Run | Simulate | Simulation | Run. The element time
series is displayed and changes for the two buffers. The curve for buffer_8
indicates a higher number of parts, as the corresponding source (source_2)
has less IAT and hence, more parts (racks) being produced.

NOTE: The other types of histograms and time series follow the similar steps and are left
as an exercise for the user.

Create a Bar Chart


The user has the following options for creating bar charts.

Utilization Bar Chart - This bar chart gives the utilization of the selected element
in the model indicating the time the element is busy, idle, blocked, failed, or off
shift.
Total Parts Bar Chart - This chart gives the total number of parts the selected
element/elements processes during the simulation.
Average Parts Bar Chart - This chart gives the average number of parts for the
selected element/elements during the simulation.

- 323 -
Wait Bar Chart - This chart gives the average time the parts spend in the selected
element/elements.
Res. Time Bar Chart - This chart gives the average time the selected part classes
spend in the system.
User Bar Chart - This gives the user-defined bar chart with the one-line SCL
program.

Create a Group Bar


1. This is an interesting type of chart which can draw the group bar charts
of different elements of the model. To draw the utilization group bar chart,
select Model | Charts/2D | Group Bar | Util. The Element Utilization
dialog box is displayed as shown below.

Using the LMB, select the Select Elements button and pick conveyor_1. Select
Select Elements again and pick workcell_1 and click on OK. Place the chart and
the legend in the 2D window. The bars indicating idle, busy, blocked, or failed in
different colors is displayed for both the selected elements. Run the simulation for
1000.00 seconds.

2. To draw the production group bar chart, select Model | Charts/2D |


Group Bar | Product.

The Element Production dialog box is displayed as shown below.

- 324 -
Since this type of chart is valid for the model elements with production, the only
machine in the model is automatically selected when the Select Elements button
is selected with the LMB. Add the part class assemble to the chart and click on
OK. Place the chart and the legend in the 2D window and run the simulation for
1000 seconds.

SCL Charts
This part of the tutorial covers creating the charts with the SCL
initialization routines. The use of SCL charts provides the user with a lot
of flexibility to create charts and manipulate the data to be displayed on
the 2D charts. In this tutorial, the XY SCL chart is created and the
corresponding SCL initialization routine is also shown. The other SCL
charts have similar functions which are discussed along with their
functionality.

Create XY SCL Chart


1. Select Model | Charts/2D | SCL Chart | XY. The Create SCL XY Chart
dialog box is displayed. Accept all the default settings from the dialog box,
select the Scl init Procedure button, and choose
..\QUESTlib\LOGICS\xy.scl.

The dialog box is displayed for the selection of the initialization procedure. Since
the selected file has only one initialization procedure, the dialog box displays that
particular initialization procedure. Choose the initialization procedure and click
on OK. The message window displays the message "Init and Update Returns
Set". Click on OK on the Create SCL XY Chart dialog box.

- 325 -
The dialog box is displayed for the group labels for the selected XY chart. Enter
the group title as No. Produced and click on OK. The message window prompts
to pick the position of the chart and legend in the 2D window. Pick the respective
positions, and the created SCL XY chart is displayed in the 2D window.

2. To run the simulation, select Run | Simulate | Simulation | Run. The


simulation runs and the created XY SCL chart shows the number of parts
produced by workcell_1.

Following is the xy.scl program with the initialization and update routines used to
create and run the SCL XY chart.
Var
xval : Integer
procedure myproc4_init()
Var
cht_handle : Chart
work_hdl : Element

begin
cht_handle = get_chart( 'Scl XY Chart' )
work_hdl = get_element( 'workcell_1' )
reset_chart_data( cht_handle )
add_xy_data ( cht_handle, 0, 0 )
end

procedure myproc4_update()
Var
cht_handle : Chart
work_hdl : Element

begin
cht_handle = get_chart( 'Scl XY Chart' )
work_hdl = get_element( 'workcell_1' )
add_xy_data ( cht_handle, xval, work_hdl->num_produced )
xval = xval + 2
end
This chart depicts the number of parts produced by workcell_1. The Y axis
depicts the number of parts produced by the machine and the X axis depicts the X
values incrementing by 2. The call to reset_chart_data( ) in the initialization
routine of the SCL procedure allows the chart to be reset once Run | Simulate |
Simulation | Reset Run is selected.
If the call to reset_chart_data( ) is not made in the initialization routine of the SCL
procedure, the data from the various simulation runs will accumulate.
In the SCL file, there is an initialization procedure and an update procedure. The
user selects the initialization procedure, and the update procedure is automatically
selected based on the initialization procedure.

- 326 -
NOTE: The initialization procedure name must have the suffix "_init". The update
procedure nqame must have the suffix "_update".

Various SCL Charts Related Terms and Routines


The following are the various functions defined in SCL to create and set
data within SCL charts.

NOTE: "Value" in all is a numeric expression.

Data Type: Chart

It is a handle data type which gives a handle to a chart. Presently, no attributes are
available for this data type.
get_chart( ) Routine

get_chart( `Chart Name' )


A variable of chart type can be initialized using this routine.
set_pie_data( ) Routine

set_pie_data( chart_handle, slice_index, value )


slice_index is integer expression giving index of pie slice for which value
is to be set. Valid values are 1 to number of slices defined for the chart.
set_bar_data( ) Routine

set_bar_data( chart_handle, bar_index, value )


bar_index is integer expression giving index of bar for which value is to
be set. Valid values are 1 to number of bars defined for the chart.
set_gbar_data( ) or set_group_bar_data( ) Routine

set_gbar_data( chart_handle, group_index, bar_index, value )


or
set_group_bar_data( chart_handle, group_index, bar_index, value )
group_index is integer expression giving index of group. Valid values are
1 to number of groups defined for the chart. bar_index is integer
expression giving index of bar for which value is to be set. Valid values
are 1 to number of bars defined for the chart.
add_hist_data( ) or add_histogram_data( ) Routine

add_hist_data( chart_handle, value )


or
add_histogram_data( chart_handle, value )
This routine adds an observation to the histogram.

- 327 -
add_ts_data( ) or add_time_series_data( ) Routine

add_ts_data( chart_handle, value [, value ]... )


or
add_time_series_data( chart_handle, value [, value ]... )
Add an observation to the time series chart. Number of values given
should match with number of lines defined for time series chart.
add_xy_data( ) Routine

add_xy_data( chart_handle, x_value, y_value [, y_value ]... )


Add an observation to the X Y chart. Number of y values given should
match with number of lines defined for xy chart.
reset_chart_data( ) Routine

reset_chart_data( chart_handle )
This procedure resets the data of the chart whose handle is specified as
argument. Reset means that all data of chart is set to 0 and all historical
data is removed (except for pie charts, for which value for first pie is set to
1). Users should normally call this built-in procedure in init procedure of
SCL histogram or XY charts. If this call is not added to init proc, data
from different runs of the simulation will accumulate.

CHAPTER 20
BATCH CONTROL LANGUAGE
(BCL)
- 328 -
Introduction
Batch Control Language (BCL) is a powerful command and control
system for changing and executing QUEST models. BCL can be used both
while "inside" QUEST or to control QUEST from an external file. It is
comprised of a set of commands and alternative methods for creating and
executing them.

There are four methods that can be used to execute BCL commands:

1. Using BCL from inside QUEST located in the File pull-down menu.

This method offers an alternative to the point-and-click approach by allowing text


commands to change everything from model cycle time to camera orientation.
This approach will be covered in the tutorial Method 1.

2. Using an ASCII file containing BCL commands to "drive" a QUEST


simulation.

This method is excellent for performing "Design of Experiments" and for creating
a choreographed "walkthru" of a model as it runs. These commands can be
attached to a BCL macro button or invoked from the command line. These
approaches are covered respectively in the tutorials Method 2a and Method 2b.

3. Using another Microsoft Windows or UNIX program residing on any


machine in a TCP/IP network to invoke QUEST and interpret results.

This method is useful for optimizing algorithms that use the results of one model
to change the model in an intelligent fashion. This approach is not covered in this
tutorial. For more information on the use of BCL in sockets mode refer to the
Sockets for UNIX / NT tutorial. Also refer to the BCL Reference Manual and SCL
Reference Manual.

4. Using a BCL call from within SCL (Simulation Control Language).

This allows for changes to a model while it is executing. This method is useful for
modelling multiple speed conveyors whose speeds change based on their loads.
This approach is not covered in this tutorial. For more information about this
command, refer to the SCL Reference Manual.

Method 1: BCL Button

- 329 -
In this method, some BCL commands will be typed in one at a time, which
will change an existing model.

Set Up

1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ...". When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

Read in Assembly Model

5. To read in the assembly model from the


c:\deneb\QUESTlib\MODELS\GIFTS directory, select File | BCL. The
BCL Statement dialog box will be displayed.

- 330 -
Enter read model `GIFTS/assembly.mdl' and click on OK.

Examine the Conveyor Speed

6. To examine the current speed of the downstream conveyor, select


Model | Build | Element Class | Conveyor.

The Select Conveyor Class dialog box is displayed. From this dialog box, choose
the downstream conveyor, conveyor_3, and click on OK. The Conveyor dialog
box is displayed. From this dialog box, select the Conveyor Info button. Note
that the current speed for conveyor_3 is 100 mm/sec. Select Cancel to close all
the dialog boxes.

Set the Conveyor Speed

7. To set the speed of the conveyor, select File | BCL. Enter set conveyor
`conveyor_3' speed to 150 and click on OK.

Verify the Conveyor Speed change

8. To verify the change in conveyor speed, select Model | Build | Element


Class | Conveyor. Choose the downstream conveyor, conveyor_3. Note
that the current speed for conveyor_3 is 150 mm/sec.

Examine the Machine Cycle Time

9. To examine the cycle time of the machine, select Model | Build |


Element Class | Machine. From the Select Machine Class dialog box,
choose workcell_1 and click on OK. The Machine dialog box is

- 331 -
displayed. From this dialog box, select the Cycle Process button. The
Select Process dialog box is displayed with process_1 highlighted,
indicating that workcell_1 is using process_1 as its cycle process. Select
the Cancel button to close the dialog boxes.

Select Model | Process | Process | Cycle. The Select Cycle Process dialog box is
displayed. From this dialog box, choose process_1 and click on OK. Finally,
select the Cycle Time button from the Cycle Process Definition dialog box. The
message window indicates that the cycle process currently exhibits a constant
time of 5 seconds. Select the Cancel button to close the dialog boxes.

Change the Machine Cycle Time

10. To set the cycle time of the machine, select File | BCL. Enter set
process `process_1' time to normal(10,2,3) and click on OK.

Verify the Change in Cycle Time

11. Repeat step 9 to verify that the cycle time for workcell_1 is normal
with a mean of 10, a standard deviation of 2, and will use random number
stream 3. Select Cancel to close the dialog boxes.

Set the Background Color

12. To set the background color, select File | BCL. Enter set background
color to .2, .8, .5 and click on OK. The color of the background will
change.

NOTE: The Parameters are the settings (0 through 1) for the red, green, and blue color
elements which make up the color displayed.

Run the Model

- 332 -
13. To run the simulation, select File | BCL. Enter run 1000 and click on
OK. The model will run for 1000 seconds and then halt.

Inquire Machine Utilization

14. To inquire of the average utilization of the machine, select File | BCL.
Enter inquire machine 'workcell_1' util. The BCL message window will
be displayed with the utilization of workcell_1.

Method 2a: Running a BCL Macro from a BCL Macro


Button
In this method, a BCL action button will be created from within QUEST
and used to run a series of BCL commands which are in an ASCII file.

Set Up

1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

- 333 -
2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ...". When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

Examine the Contents of the BCL Macro

5. Select File | Edit File. Select the BCL macro file, assembly_test, in the
directory ..\QUESTlib\ BCLMACROS. Once this has been reviewed, exit
from the screen editor.

Assign a BCL Macro File to a BCL Macro Button

6. To create a BCL macro button, select User | User1 | User 1 | Define.


The User Button Type dialog box will be displayed. Choose BCL Macro
and click on OK. The message window will now read "Place and Size new
Button". Move into the open area for the Action Buttons, hold down the
LMB, and stretch and size a window. Once the LMB is released, an Action
Button will be created.

- 334 -
The Select Library dialog box is displayed. Choose ..\QUESTlib\BCLMACROS\
and click on OK. From the Select File dialog box, choose assembly_test and click
on OPEN.

NOTE: If only one config file is appended, the Select Library dialog box will be skipped
and the Select File dialog box will be displayed. In this tutorial, the only configuration
file appended is the default QUEST configuration file, so the Select Library dialog box
will not be displayed.

7. The Macro Button Attributes dialog box is displayed. Set the dialog box
to the following fields and click on OK.

Execute the Macro

8. Select the newly created BCL macro action button User | User1 |
assembly.

The button will display ? Sure ?. Select again to confirm. The simulation will
start executing commands listed in the BCL file, BCLMACROS\assembly_test and
will return control to the user when the statements have been executed.

NOTE: If the BCL Macro button is clicked, the assembly model runs for 1000 sec and
then the remaining BCL commands are executed. To step through the commands
individually, press all three mouse buttons when the BCL macro completes the
simulation. The BCL Macro dialog box will appear. From this dialog box select Step and
click on OK. Continue to click OK to walk through the various BCL commands and
observe the corresponding effect.

Method 2b: Running a BCL Command File from the


Operating System Command Line

- 335 -
In this method, the user will be creating a BCL macro file and loading
QUEST so that QUEST will automatically run the BCL commands in the
file.

A BCL macro file is an ASCII file containing BCL commands. See the
previous section for a sample of a BCL macro file. The BCL macro file
can be created from within QUEST or from the operating system. Because
QUEST will be reloaded in order to complete this section of the tutorial,
this tutorial proceeds by creating the file.

Go to the Operating System

1. If already in the QUEST menu system, exit QUEST.

Go to the Directory c:\deneb\quest

2. In this directory, create a batch file named quest.bat to run QUEST with
the following information:

set TMP=C:\tmp

set TMPDIR=C:\tmp

set LM_LICENSE_FILE=C:\deneb\quest\license\license.dat

cd C:\deneb\quest\

echo initializing and running %DENEB_PRODUCT%

C:\deneb\quest\quest.exe -b < mybcl > C:\deneb\QTUTORlib\BCLMACROS\


bcl_error C:\deneb\quest\configs\QUEST

NOTE: The user may have to change certain path names depending on the path into
which QUEST is installed. The symbols "<" and ">" are the redirection operators and
are required to run QUEST with the BCL command file. mybcl is the file containing the
BCL commands as explained in the next step. The BCL error messages will be written to
the file bcl_error.

Create an ASCII File of BCL Commands

3. Create a data file of BCL commands called mybcl in


c:\deneb\QTUTORlib\BCLMACROS with any text editor. Enter the
following BCL commands into the file.

- 336 -
read model 'GIFTS\assembly.mdl'

set process 'process_1' time to exponential(15,3)

set stream 3 seed to 11111

run 1000

set stream 3 seed to 22222

run 1000

set stream 3 seed to 33333

run 1000

set stream 3 seed to 44444

run 1000

set stream 3 seed to 55555

run 1000

transfer to menu
This file will instruct QUEST to run through five replications of the assembly
model and allow the user to view the results.

Run the BCL File from the Operating System Command Line

4. In Microsoft Windows 95 / NT, open Windows Explorer (file manager)


and with the LMB, double click quest.bat to start QUEST. This will read
the BCL commands from the BCL macro file mybcl and output any error
messages to bcl_error.

The user can also create an icon for this batch file and double click the icon to run
QUEST.

5. Position the window once it is displayed. QUEST will execute the


commands from the file. When QUEST is finished executing the
commands, control will be returned to the menu system.

Inquire Statistics to Compare the Multiple Runs

6. Select Run | Multi Run | Batch Stats | Element. Pick the machine,
choose Utilization Summary on the Summary Options dialog box, and
click on OK.

- 337 -
This will show the differences in production and utilization between the five runs
executed by the BCL file.

CHAPTER 21
CAD TUTORIALS

- 338 -
21.1 Introduction

In the CAD context, the part modelling functions of the system are used to
model geometry. The modelled geometry is used in simulation models to
represent parts, machines, and other elements.

All parts consist of one or more objects. Objects are composed of one or
more subobjects. Subobjects are composed of geometrical pieces such as
polygons and lines. Simple objects can be created invoking any of several
CAD primitives. CAD primitives include:

Block
Wedge
Cylinder
Cone
Sphere
Pipe

These CAD primitives all produce polygon-based data. The line, circle,
and helix operators produce wireframe data that can be turned into
polygons. Each invocation of these primitive operators produces a
new/additional object in the scene which may be independently selected
and operated on separately from the other objects in the scene. For
example, objects can be translated and rotated relative to each other in the
CAD world. Objects can be saved together either as one static entity
(using Merge or Save All) or as separate entities (using Smash and Save
Object).

The CAD context supports various operations on the created objects. For
example: Del Obj deletes the picked or selected object, Mirror mirrors it
along a principal axis, Clone makes a copy of it, Cut cuts large objects
into multiple objects. Polygons may be Extruded to become objects, and
it's possible to Loft from one polygon to another to produce a solid
blended object joining them. Individual data entities such as points, lines,
and polygons can be selectively deleted from objects.

Additionally, data can be translated from other CAD systems using


formats like IGES, VDA, DXF and others. The system offers direct
support for making imported (especially wireframe) data easier to handle.

- 339 -
There are two line filtering functions, angular and chordal, that can reduce
wireframe line counts. This increases real time graphics performance
dramatically by eliminating collinear line segments (producing single lines
in place) and joining nearly collinear line segments below a user-specified
linear deviation.

Use Erase to quickly remove large amounts of selected data from a region
of a single, large imported object. Autopoly can automatically examine
wireframe data and convert it to polygons, and the user can insert
polygons directly and clean up the object to finish.

21.2 Basic CAD

This tutorial begins by looking at a completed version of drill machine


parts. This will provide an idea of what the completed device will look
like. Then the parts will be assembled to make the drill machine.

This tutorial will use many of the following CAD primitives and operators
to build the geometry. These will be found under CAD | Create.

Block
Wedge
Cylinder
Extrude
Loft
Cone
Sphere
Circle
Revolve Circle

Retrieving and Saving a Part


This tutorial, because of its length, is divided into sections which may be
performed individually; however, the entire tutorial must be performed in
sequence. Some sections begin by having the user Clear and Reset the
world. Others require the use of a part created and saved in a previous

- 340 -
section. If a section requires the user to save the part, the user should do so
to ensure it is ready for subsequent tasks and sections.

The user will retrieve any sample part file from:

<..\QUESTlib\ > or <c:\deneb\QTUTORlib\>


and save newly made files to :
<c:\deneb\QTUTORlib\>
If the tutorial is performed in different sessions, the following steps, setting the
units and world environment preferences, are required at the start of each new
session.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear
World. When prompted with ? Clear World ? Select Yes to confirm this
selection.

3. While QUEST is clearing the system the message window will display
"Reinitializing the System ...". When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

- 341 -
5.

Select Tools | Properties | Units. The Select Units dialog box appears.
Choose Inches for Linear.

6. Click on OK. After exiting and re-entering the dialog box, the
conversion factor mm/unit will read 25.40000

7. Select Pref | Preferences | Environment | Dialog. The Preferences


dialog box will appear. Choose Default for Cursor Style. Click on OK.

Retrieve

- 342 -
1.

Select CAD | Create | Retrieve. Choose Object from the Retrieve dialog
box. Click on OK.

2.

Choose ..\QUESTlib\PARTS from Select Library dialog box and click on


OK.

3. Choose USRMNL from the Select File dialog box and click on Open.
Choose DENEB_DRILL and click on Open.

4. Choose drill and click on OK.

- 343 -
Figure 21-1 Sample Drill

5. Select Rotate. The RMB (right mouse button) always rotates the view
left and right about a Z axis (Roll) which is always aiming straight up. The
LMB (left mouse button) always moves the view up and down about an X
axis (Yaw) which "points" to the right. The MMB (middle mouse button)
spins around a Y axis (pitch) that is headed straight into the display.

Hold down the right mouse button (RMB) and move the mouse from left to right.
Do this until the world rotation roll value equals approximately 90 degrees.

The Absolute Rotation dialog box displays the absolute rotation about the X, Y,
and Z axes (Yaw, Pitch, Roll), of the viewpoint relative to the CAD world origin.
If the dialog box does not appear, the dialog box information mode is turned off.
To turn this on, select Pref | Preferences | Environment | Dialog.
Move to the Dialog Info field and, with the LMB, click on the arrow. Set it to On.
Click on OK.

- 344 -
To avoid this problem in the future, specify the TUTORIALS configuration file
when starting up the system. Refer to Chapter 1, Introduction for more
information on how to start up the system for the tutorials.

6. Select Rotate. Use the LMB and RMB to rotate the drill and get a better
view of it.

7. Select Cruise. Move the mouse from left to right while holding down
any of the mouse buttons. With the MMB, zoom in until the part nearly
fills the screen.

The drill machine will be re-created in this tutorial. For reference, an illustration
is shown in Figure 21-1, which the user should refer to throughout this tutorial.
The tutorial will use many of the CAD primitives to build the geometry.
Feel free to use Rotate, Cruise, and View functions to move around the part to
see how the pieces are put together.

Drill Base
1. After viewing the finished part and knowing what it will look like,
select File | Clear World to clear the last geometry. The Clear World
dialog box appears. Click on Yes.

- 345 -
While QUEST is clearing the system the message window displays "Reinitializing
the System....".
When this is finished, the message window displays "World cleared".

2. Next, reset the world. With the LMB, select File | Reset World. The
Reset World dialog box appears. Click on Yes.

When this is finished, the message window will display "World reset".

Block

The CAD primitive block will be used to create the drilling machine base.

3. Select CAD | Create | Create | Block. On the Block dialog box, set X
Origin to -22.5; Y and Z to 0; and enter lengths as X=45.0; Y=90.0; Z=8.0.
Click on OK.

4. Select the Cruise button. When the button changes to Reset/Fill select
it with the RMB. This function will display all the geometry on the screen.

- 346 -
Half Wedge

The first object to add to the base will be a type of wedge called a half
wedge. The half wedge is a quick way to make a block with a beveled
edge. During this tutorial this half wedge will be identified as the vertical
wedge.

5. Select CAD | Create | Create | Wedge. Complete the Wedge dialog box
using the information shown in the following dialog box. When
completing the B - H - W Axes and Type fields, use the LMB to click on
the arrow for a list of valid options available for this field. Use the LMB to
choose the proper option.

Click on OK.
The snap function allows the user to pick a surface, coorsys, or vertex for a
selected part to be located or snapped to. Options of the snap function are
available through the dialog box and the use of different mouse buttons.

6. Select CAD | Create | Rot Obj. With the LMB, select Snp. Then, with
the MMB, select Snp two more times. This will rotate the wedge about the
X axis (Yaw) by 90 degrees and about the Y axis (Pitch) by 180 degrees.

7. Select CAD | Create | Trn Obj and the Abs button. Complete the
Absolute Coordinates dialog box as shown.

- 347 -
Click on OK. This translates the wedge to a vertical position.

8. To make a second half wedge, select CAD | Create | Create | Wedge


and change the settings to those shown in the following Wedge dialog box.

Click on OK.

9. Select CAD | Create | Rot Obj. Select Snp with the LMB and then
again, with the LMB, a second time.

10. Select CAD | Create | Trn Obj. Select Rel with the MMB and enter
-60 on the Enter relative translation along Y: dialog box. Click on OK.

11. Select Rel with the RMB and enter -48 on the Enter relative translation
along Z: dialog box. Click on OK.

- 348 -
This will move the second wedge up 48 inches. This wedge will be referred to as
the horizontal wedge in the rest of this tutorial.

Super Wedge

12. To make a chamfered block, make a super type wedge. Select CAD |
Create | Create | Wedge and enter the values shown on the following
Wedge dialog box.

Click on OK. To get a better view of the top of the vertical (first) wedge select
Rotate and Cruise to change the world orientation.

13. Select CAD | Create | Snp Obj. The Snap Setup dialog box will
appear. Choose Yes for Center and click on OK. The Snap Object On...
dialog box will appear. Choose Surface and click on OK.

- 349 -
14. Pick the top surface of the vertical wedge. The super wedge (third
wedge created) will snap to a center at 45 degrees.

15. Select CAD | Create | Rot Obj and the Abs button. On the Absolute
Rotation dialog box, enter 45 degrees for Roll and click on OK. The super
wedge will turn 45 degrees and align with the sides of the vertical wedge.

Merge

16. To illustrate one of the merge functions, objects will now be merged
by picking each individual object in the work area. Select CAD | Modify |
Cad Operators | Merge.

17. On the Merge dialog box, choose Merge Objects. Click on OK.

18. Pick the block and the vertical wedge. The vertical wedge will merge
with the block. The object's base coordinate system (coorsys) will be at the
base block origin. The merged objects will be shown in purple. Next, pick
this new object and pick the horizontal wedge and they will be merged as
one object. Pick this new object and pick the super wedge. Now there is
only one object with its base coorsys at the CAD world origin.

The first object picked for each merge action determines the newly merged
object's coorsys. Choosing Merge All would have combined all objects as one
and the coorsys would then be at the CAD world origin.

- 350 -
19. Select Modes from the world display buttons. Choose ON for the
World Axes on the CAD Modes dialog box. Click on OK. This will
display world axes in yellow and the base coorsys of the object will
coincide with the world axes.

20. Select CAD | Create | Save. On the CAD Save dialog box, choose
Save Object. Click on OK. Pick the object. It will change to purple. On
the Select Library dialog box, choose c:\deneb\QTUTORlib\PARTS\ as the
path (directory) to save the file to. Click on OK. In the Select File dialog
box enter file name drill.0 for the part. Click on Save.

21. Select File | Clear World. The Clear World dialog box appears. Click
on Yes.

While QUEST is clearing the system the message window displays "Reinitializing
the System....".
When this is finished, the message window displays "World cleared".

Cylinder
1. Select CAD | Create | Create | Cylinder. Complete the Cylinder dialog
box as follows:

- 351 -
Click on OK. A cylinder will appear at the CAD world origin.

2. The world orientation may need to be changed in order to see the top
surface of the drill head.

3. Select CAD | Create | Save. On the CAD Save dialog box, choose Save
Object. Pick the object; it will change to purple. On the Select Library
dialog box, choose c:\deneb\QTUTORlib\PARTS\ as the path (directory) to
save the file to. In the Select File dialog box enter file name drill.1 for the
part. Click on OK.

Drill Head
The drill head will be created by extruding a flat polygon drawn in the shape of
the drill head. To help create the polygon, two semi circles will first be made.

Circle

1. Select File | Clear World. The Clear World dialog box appears. Click
on Yes.

While QUEST is clearing the system the message window displays "Reinitializing
the System....".
When this is finished, the message window displays "World cleared".

2. Select CAD | Create | Circle. Complete the Circle dialog box as


follows:

- 352 -
Click on OK. A semicircle will appear at the CAD world origin.

3. To make another semicircle, select CAD | Create | Circle. Complete the


second Circle dialog box as follows:

Click on OK.

Extrude

4. Select CAD | Create | New Obj. When ?Sure? appears, select it again
to confirm. This will create a new object.

5. Select Rot Obj and Abs to change the part orientation to view both
semicircles. The Absolute Rotation dialog box should have values close to
those shown on the following dialog box.

6. Select the Cruise button. When it changes to Reset/Fill select it with


the MMB to display all of the geometry on the screen.

7. Select CAD | Create | Polygon. Beginning at any vertex on either


semicircle and moving in a counterclockwise direction, pick all the

- 353 -
vertices of both semicircles. This will create the polygon outline. The
polygon consists of two semi circles with a rectangle between them.

8. Select CAD | Create | Extrude.

a. On the Extrude dialog box choose Polygon. Click on OK.


b. Pick the polygon just made
c. On the Extrusion Modes dialog box choose Vector for Extrusion Mode.
Click on OK.
d. Choose Frame on the Define Vector Method dialog box.
e. With the LMB, pick the green base coordinate axis.
f. Choose Z on the Axis Selection dialog box. Click on OK
g. When prompted, enter 12 on the Vector Magnitude dialog box. Click on
OK.
An elliptical shape will be created. This is the drill head.

9. Select CAD | Create | Trn Obj. With the MMB, drag the object away
from the two semicircles.

10. Select CAD | Create | Del Obj. Pick a semicircle and pick it again to
confirm the selection. The semicircle is deleted. Repeat for the remaining
semicircle.

11. Select CAD | Create | Trn Obj. With the MMB, select Reset to place
the drill head in its original position.

Cylinder

12. A drill motor housing will be created and added to the drill head.
Select CAD | Create | Create | Cylinder. Complete the Cylinder dialog
box as follows:

- 354 -
Click on OK. A cylinder will appear at the CAD world origin.

13. The world orientation may need to be changed in order to see the top
surface of the drill head. If so, select Rotate to view the top surface.

14. To snap the cylinder to the top surface of the drill head, select CAD |
Create | Snap Obj. The Snap Setup dialog box will appear. Choose Yes
for Center and click on OK. The Snap Object On... dialog box will appear.
Choose Surface and click on OK. Pick the top surface of the drill head.

15. Translate the new cylinder in the Y direction. Select CAD | Create |
Trn Obj. With the MMB, select Rel to place the drill head in its original

- 355 -
position. Enter -20 on the Enter relative translation along Y: dialog box.
Click on OK.

16. Merge the cylinder (motor housing) with the drill head. Select CAD |
Modify | Cad Operators | Merge. On Merge dialog box, choose Merge
Objects.

Click on OK. Pick the drill head first and then the cylinder as the second object to
be merged.

Coordinate System (Coorsys)

17. Create a coorsys on the drill head where the up-down drill spindle will
be attached at a later time. To do this, select CAD | Aux | Coorsys |
Create. Pick the drill head. A coorsys will be created at the base coorsys.

18. Select CAD | Aux | Coorsys | Trn Coor to translate this coorsys in the
Y direction. Select Abs and on the Absolute Coordinates dialog box enter
-50 for Y. Click on OK.

19. The new coorsys must be rotated so that the Z axis projects outward.
Select CAD | Aux | Coorsys | Rot Coor. With the LMB, select the Snp
button two times.

20. Select CAD | Create | Save. On the CAD Save dialog box, choose
Save Object. Pick the object. It will change to purple. On the Select

- 356 -
Library dialog box, choose ..\QTUTORlib\PARTS\ as the path (directory)
to save the file to. In the Select File dialog box enter file name drill.2 for
the part. Click on Save.

Loft Setup
1. Select File | Clear World. The Clear World dialog box appears. Click
on Yes.

While QUEST is clearing the system, the message window displays


"Reinitializing the System....".
When this is finished, the message window displays "World cleared".

Retrieve

2. Select CAD | Create | Retrieve. Select Object from the Retrieve dialog
box. Choose ..\QUESTlib\PARTS\ and click on OK. Choose the drill.0 part
and click on Open. The drill base will be retrieved.

3. Select CAD | Create | Create | Cylinder. Complete the Cylinder dialog


box as shown.

NOTE: The height is zero in order to create a flat cylinder.

- 357 -
Click on OK. A new cylinder will appear at the CAD world origin.

4. To snap the cylinder to the surface of the superwedge, select CAD |


Create | Snap Obj. The Snap Setup dialog box will appear. Choose Yes
for Center and click on OK. The Snap Object On... dialog box will appear.
Choose Surface and click on OK. Pick the top surface of the super wedge.
Use Rotate, Cruise, or View to see the top surface of the super wedge.

Translate this cylinder in the Z direction. Select CAD | Create | Trn Obj. With
the RMB, select Rel button and enter 4 on the Enter relative translation along Z:
dialog box. The flat cylinder will move 4 inches up.

- 358 -
Loft Function
The "Parallel Polygons" type of loft function can be used to stretch
polygons between the face of the super wedge and the bottom of the flat
cylinder. This function requires that the two polygons be in same object. In
order to get two polygons into the same object, the merge function is used.

1. Merge the flat cylinder with the super wedge. This is required before the
next task can be completed. Select CAD | Modify | Cad Operators |
Merge. On the Merge dialog box, choose Merge All. Click on OK. In the
Merge All Objects? dialog box, choose Yes and click on OK.

2.

Select CAD | Create | Loft. Choose Parallel Polygons on the Loft


Between dialog box. Click on OK.

With the LMB, pick the top surface of the super wedge and then the bottom
surface of the flat cylinder. The two objects will be "lofted" together.

3. To create a coordinate system on top of the flat cylinder, select CAD |


Aux | Coorsys | Create. Pick the object. A coorsys will be created.

- 359 -
4. Select CAD | Aux | Coorsys | On Surf. Choose Yes on the Center on
Polygon dialog box. Click on OK.

5. With the LMB, pick the top surface of the flat cylinder. The new
coorsys will be snapped to the top surface of the flat cylinder. This coorsys
will be needed later in the tutorial for building a complete drilling
machine.

6. Save the completed object. Select CAD | Create | Save. On the CAD
Save dialog box, choose Save Object. Pick the object. It will change to
purple. On the Select Library dialog box, choose
c:\deneb\QTUTORlib\PARTS\ as the path (directory) to save the file to. In
the Select File dialog box enter file name drill.0. Click on Save.

When the Select File dialog box appears, choose Replace existing file and click
on Yes. The new base and coorsys will be saved as drill.0.

Drill Handle
Select File | Clear World to clear the work area. The Clear World dialog
box appears. Click on Yes.

While QUEST is clearing the system, the message window displays


"Reinitializing the System....".

When this is finished, the message window displays "World cleared".

Cone

A drill handle will be created in this task.

- 360 -
1. Select CAD | Create | Create | Cone. Enter the following values into
the Cone dialog box:

Click on OK and a cone is created at the CAD world origin.

2. Select the Cruise button. When it changes to Reset/Fill, with the RMB,
select it again to bring the cone into view.

3. Create a second cone with the following values:

- 361 -
Click on OK. A second cone, narrow and long, will appear on top of the first
cone. Select Cruise and Reset/Fill to view the long cone.

4. Create a new coorsys on the top surface of the cone. Select CAD | Aux |
Coorsys | Create. Pick the long cone. A coorsys will be created at the long
cone's base coorsys.

5. To transfer this coorsys to the top surface, select CAD | Aux | Coorsys |
On Surf. Choose Yes on the Center on Polygon dialog box. Click on OK.
Pick the top surface of the upper cone. The new coorsys will snap to the
top surface.

6. To rotate this coorsys so that the Z points inward, select CAD | Aux |
Coorsys | Rot Coor. With the LMB, select the Abs button.

- 362 -
Enter 180 degrees for Yaw on the Absolute Rotation dialog box and click on OK.
The coorsys will rotate around the X axis and cause the Z axis to point inward.

7. To change the origin of the cone select CAD | Create | New Org. Pick
the long cone and the coorsys on its surface. The base coorsys will be
transferred to the top surface. Now there are two coorsyses at the top
surface: one which was snapped to the top surface and the other, the base
coorsys, which was transferred when the origin was redefined.

8. To delete the snapped coorsys, select CAD | Aux | Coorsys | Delete.


Choose All from the Delete Coorsys dialog box. Choose Yes to Confirm.
Note that there is still a coorsys on top of the cylinder. This is the base
oorsys.

9. Select CAD | Create | Snap Obj. The Snap Setup dialog box will
appear. Choose Yes for Center and click on OK. The Snap Object On...
dialog box will appear. Choose Surface and click on OK. With the LMB,
pick a side surface of the short cone.

- 363 -
Two more long cones must be created and placed 120 degrees apart around the
short cone, to form the spokes of the handle. Change the object orientation by
selecting Rotate, Cruise, or View, as needed, to view the short cone surfaces
where the long cones will be attached. Press the space bar on the keyboard to exit
from the command.

10. Because the long cone is still selected, use the RMB and pick one
surface of the short cone 120 degrees away (four facets apart) from the
first cone. A second long cone will appear and be snapped to the short
cone.

11. Change the object orientation to be able to view a side of the short
cone 120 degrees from either of the long cones. With the RMB, pick this
side surface of the short cone. A third long cone will be created and will
appear at this surface.

The object should now look like a hub with three equally spaced spokes
perpendicular to the hub.

Sphere

12. To create round ends for the spokes of the handle select CAD | Create
| Create | Sphere. Complete the Sphere dialog box as follows. Use the
LMB to select the X Axis in the dialog box. A sphere will be created.

- 364 -
13. Select CAD | Create | Snap Obj. With the LMB, snap the sphere to
the end surface of a long cone. Choose Surface and Yes on the Center on
Polygon dialog boxes. Pick an end of one of the long cones. Next, with the
RMB, pick the end surface of each of the two remaining spokes to create a
sphere at the end of each. Change the object orientation in order to see the
end surface of each spoke.

14. Merge the center cone (hub) to the long cones (spokes) and spheres
with CAD | Modify | Cad Operators | Merge. On Merge dialog box,
choose Merge All, click on OK, and choose Yes to confirm. Click on OK.

15. Select CAD | Create | Save. On the CAD Save dialog box, choose
Save Object. Pick the object. It will change to purple. On the Select
Library dialog box, choose c:\deneb\QTUTORlib\PARTS\ as the path
(directory) to save the file to. In the Select File dialog box enter file name
drill.3. Click on Save.

- 365 -
Circular Handle
This section requires the handle that was previously created and saved as drill.3.
If the work area is clear, retrieve file drill.3 from c:\deneb\QTUTORlib\PARTS\

Smash

1. The handle created and saved as drill.3 will be modified so that it has a
circular handle. To do this, select CAD | Modify | Cad Operators | Smash.
Pick the drill handle and pick it again to confirm the action. The drill
handle will be separated into cones and spheres.

2.

Select CAD | Create | Del Obj. Pick a sphere and pick it again to confirm
the delete action. Repeat two more times to delete all spheres.

3. Select the View button. Choose Standard Views and click on OK. On
the Standard Views dialog box, choose Top and click on OK. This will
allow the base coorsys to be picked for the next step.

With the LMB, click on Cancel to remove the dialog box.

4. To create a new handle, check the radius of the long cone. Select Tools |
Measure | Distance Measure | Generic. Choose Coorsys on Select
Distance Entity dialog box.

- 366 -
Pick the base coorsys. Choose Vertex from the Select Distance Entity dialog box.
Choose a vertex on the end of one of long cones. Depending on the actual vertex
selected, the distance will be approximately 11 inches. To create a visually
pleasing handle, 10.5 inches will be used for the radius of the circular handle.

Circle

5. Select CAD | Create | Create | Circle. Complete the Circle dialog box
as follows:

A circle is created with a center 10.5 inches away from the CAD world origin.

- 367 -
Revolve Circle

6. To revolve the circle and to make a round handle, select CAD | Create |
Revolve. Choose Curve on the Revolve dialog box. Click on OK.

7. Pick the circle and the base coorsys of the handle for the point of origin.
In the Define Vector Method dialog box select Frame and click on OK.

Pick the base coorsys again to get the Axis Selection dialog box and choose Z for
the Axis. Enter 360 for Angle and 20 for Num Facets on the Revolve dialog box.
Click on OK. A circular handle is created.

8. To translate the circular handle in the Z direction, select CAD | Modify


| Trn Obj. Select the Abs button. Enter 3 for the Z axis on the Absolute
Coordinates dialog box. Click on OK.

- 368 -
9. Merge the objects as one round handle. Select CAD | Modify | Cad
Operators | Merge. On Merge dialog box, choose Merge All and choose
Yes to confirm.

10. Select CAD | Modify | Del line. On the Delete Lines dialog box
choose All Lines. Click on OK and choose Yes in the Delete All Lines?
dialog box. This will remove the circle from the handle.

Size

11. To size this new handle, select CAD | Modify | Cad Operators | Scale.
Select the Abs button. Enter 0.7 for X, Y, and Z Scales and click on OK.
The handle is reduced in size.

- 369 -
12. Select CAD | Create | Save. On the CAD Save dialog box, choose
Save Object. Pick the object and it will change to purple. On the Select
Library dialog box, choose ..\QTUTORlib\PARTS\ as the path (directory)
to save the file to. In the Select File dialog box enter file name drill.4.
Click on Save.

Crank
A crank will be the next part created.

1. Select File | Clear World to clear the work area. The Clear World
dialog box appears. Click on Yes.

While QUEST is clearing the system the message window displays "Reinitializing
the System....".
When this is finished, the message window displays "World cleared".

Cylinder

2. Select CAD | Create | Create | Cylinder. Complete the Cylinder dialog


box as follows.

- 370 -
Click on OK. A cylinder will appear at the CAD world origin.

3. Create a second cylinder with a Diameter of 1.7 and a Height of 12.


Click on OK. Snap the long cylinder to any face of short cylinder. Select
CAD | Create | Snap Obj.

Choose Yes on the Snap Setup dialog box and Surface on the Snap Object On...
dialog box. Pick one of the sides of the short cylinder.

Cone

4. Select CAD | Create | Create | Cone to create a cone. Enter the


following values into the Cone dialog box and click on OK.

- 371 -
5. To place this cone at one end of long cylinder, select Snap Obj. Choose
No for Center and click on OK. The Snap Object On... dialog box appears.
Choose Surface and click on OK.

Pick a location at the end of the long cylinder, on the surface parallel to the top
surface of the short cylinder. The cone will snap to wherever the cursor points.

Sphere

6. To create a hemispherical cap on the end of the long cylinder, select


CAD | Create | Create | Sphere. Enter a Diameter of 1.7, Angle 180, and
change the Axis to X. Click on OK. Snap this hemispherical cap on the
long cylinder end surface using Snap Obj.

7. To create a hemispherical cap on the end of the cone, select CAD |


Create | Create | Sphere. Enter a diameter of 1, angle 180, and axis X.
Click on OK.

Snap this hemispherical cap to the end of the cone using Snap Obj.

8. Merge all objects to one object. Select CAD | Modify | Cad Operators |
Merge. On the Merge dialog box, choose Merge All and choose Yes to
confirm.

- 372 -
9. Select CAD | Create | Save. On the CAD Save dialog box, choose Save
Object and pick the object. It will change to purple. On the Select Library
dialog box, choose ..\QTUTORlib\PARTS\ as the path (directory) to save
the file to. In the Select File dialog box enter file name drill.5. Click on
Save.

Text and Booleans


This section requires the handle previously created and saved as drill.5. If
the work area is clear, retrieve file drill.5 from
c:\deneb\QTUTORlib\PARTS\.

1. Select CAD | Aux | Text | Create. The message window will read
"Select a Polygon to place Text on." Pick the end polygon of the short
cylinder. The Text dialog box will appear. Complete the dialog box as
shown. Click on OK.

Rotate Text

2. To rotate the text so that it is upright, select CAD | Aux | Text | Rot
Text. With the LMB, move the mouse from left to right.

3. To delete the text, select CAD | Aux | Text | Del Text. Pick the text. The
text will change color to indicate it is selected and the message window
will prompt for confirmation. Pick the text again to confirm. The text will
disappear.

- 373 -
4. To separate the subobjects from the object, select CAD | Modify | Cad
Operators | Smash. Pick the drill handle and pick it again to confirm the
smash.

Diff

The Boolean operation, Diff (for difference), will be performed on the two
cylinders.

5. The short cylinder will be invoked in the Y direction by -2 inches.


Select CAD | Modify | Select. Pick the short cylinder.

6. Select CAD | Modify | Trn Obj. Move the short cylinder so that it is
overlapping the long cylinder. The short cylinder should intersect the long
cylinder.

7. Select CAD | Modify | Booleans | Diff. The message window will read
"Subtract first Object from Second. Select the first Object." Pick the long
cylinder as the first object so that it is highlighted. The message window
reads "Select the second Object." Pick the short cylinder as the second
object. The Boolean subtraction is performed.

8. To observe the geometric change, move the long cylinder away from the
short cylinder. Select CAD | Modify | Select. Pick the long cylinder.

9. Select CAD | Modify | Trn Obj. With the LMB, select Rel . Enter 5 on
the Relative translation along X: dialog box. The long cylinder will move
out of the way.

10. Select Rotate and rotate the world to view the hole created in the short
cylinder by the long cylinder and the Diff function.

Short Table
The next parts to be built for the drilling machine are two tables. This
section will build the short table. The following section creates the long
table.

- 374 -
1. Select File | Clear World to clear the work area. The Clear World
dialog box appears. Click on Yes.

While QUEST is clearing the system the message window displays "Reinitializing
the System....".
When this is finished, the message window displays "World cleared".

Block

2. Select CAD | Create | Create | Block. Complete the Block dialog box
as follows:

Click on OK. A block will be created. Select Cruise, if required, to see the block.

3. Repeat step 2 to create a second block. Use the following values:

This block will be created on top of the first block.

Delete Polygons

The next steps will remove one excess polygon from an object before it is
duplicated. This will reduce the total number of polygons of the object.

- 375 -
Because the bottom polygon will be hidden, it is not required for the
geometry. This will reduce geometric complexity thereby enhancing the
system performance.

4. Select Rotate and rotate the world until the bottom polygon of the
second block is visible.

5. Select CAD | Create | Del Poly. When the Delete Polygons dialog box
appears, choose Polygons. Click on OK. Pick the bottom polygon of the
second block and pick again to confirm. The polygon will be deleted.

6. To position the second block on the first block, select CAD | Modify |
Trn Obj. With the RMB, select Rel. Enter -2 on the Relative translation
along Z: dialog box.

7. Select Display and change Render to Wire on the dialog box. Click on
OK.

- 376 -
Clone

8. To make duplicate copies of the small block, select CAD | Create |


Create | Clone. Choose Multi Linear on the Clone dialog box.

Pick the small block and enter the following values on the Multi Linear dialog
box;

Click on OK. Choose Frame on the Define Vector Method dialog box.

When the message window shows "Indicate a Frame", pick on the origin of the
object. On the Axis Selection dialog box, choose Along X. Click on OK. Four
more small blocks will appear on the top of the large block.

Color
9. To demonstrate how to change color, select CAD | Modify | Color.
With the LMB, pick the left-most block on the table. On the Object Color
dialog box, choose Brown. Click on OK. The block will now appear
brown.

- 377 -
The ZIP mode of the right mouse button will apply the last color chosen from the
color dialog box; in this case, brown. With the RMB, pick each of the remaining
blocks on the table to make all of them brown.

10. Select CAD | Modify | Cad Operators | Merge. On the Merge dialog
box, choose Merge All and choose Yes to confirm.

11. Select the world Display button and change Render to Flat on the
dialog box. Click on OK.

- 378 -
12. Select CAD | Create | Save. On the CAD Save dialog box, choose
Save Object. Pick the object. It will change to purple. On the Select
Library dialog box, choose c:\deneb\QTUTORlib\PARTS\ as the path
(directory) to save the file to. In the Select File dialog box enter file name
drill.6. Click on Save.

Orthographic / Perspective
1. Select CAD | Modify | Cad Operators | Smash. Pick the table and pick
it again to confirm. Smash separates the object into subobjects.

2. Select the View button. Choose Standard Views and click on OK. On
the Standard Views dialog box, choose Top and click on OK.

3. Select CAD | Modify | Select. Pick the large block. Next, select CAD |
Modify | Trn Obj.

With the RMB, select Rel. Enter -10 on the Enter relative translation along Z:
dialog box. Click on OK.

- 379 -
4. Select the Camera button from world display. When the Camera Specs
dialog box appears, change the Projection method to Perspective. Click
on OK.

The smaller blocks appear larger (proportionally) than the large block. The reason
for this is that the large block is farther away from the eye than the smaller blocks.
This is the way the human eyes sees; near objects appear larger than far objects.
In some cases, such as when observing the size of objects in relationship to one
another, it is important to avoid the perspective view. Orthographic projection
provides a more accurate display for viewing the size and relationship of objects
to one another.

5. Select the Camera button, again.

When the Camera Specs dialog box appears, change the Projection method to
Orthographic. Click on OK.

6. If the entire object is not visible, use the RMB to select Cruise. With
the MMB, select Reset/Fill to fill the screen.

Long Table
1. Select File | Clear World to clear the work area. The Clear World
dialog box appears. Click on Yes.

- 380 -
While QUEST is clearing the system, the message window displays
"Reinitializing the System....".
When this is finished, the message window displays "World cleared".

2. Create another table. Repeat steps 2 and 3 from creating the Short
Table, with the values shown.

Large Block:
X Origin = -35
Y Origin = 12.5
Z Origin = 0
X Length = 70
Y Length = 25
Z Length = 4
Click on OK.
Small Block:
X Origin = -35
Y Origin = 12.5
Z Origin = 10
X Length = 70
Y Length = 5.5
Z Length = 1.5
Click on OK.

3. Select File | Reset World to reset the world. The Reset World dialog
box appears. Click on Yes.

When this is finished, the message window displays "World reset".

4. Select Cruise and Reset/Fill to place the blocks in the center of the
work area.

Delete Polygons

5. Select the Rotate button and rotate the world until the bottom polygon
of the second block is visible.

6. Select CAD | Create | Del Poly. When the Delete Polygon dialog box
appears, choose Polygons. Click on OK. Pick the bottom polygon of the
second block and pick it again to confirm. The polygon will be deleted.

- 381 -
7. To position the second block on the first block, select CAD | Create |
Trn Obj. With the RMB, select Rel. Enter -6 on the Relative translation
along Z: dialog box. Click on OK.

8. Select Rotate and, with the LMB, drag the mouse up and down to get a
better view of each block. Use this function to make the top surfaces of
both the blocks visible.

Clone

9. To make duplicate copies of the small block, select CAD | Create |


Create | Clone. Choose Multi Linear on the Clone dialog box. Click on
OK.

10. Pick the small block and enter the following values on the Multi
Linear dialog box. Click on OK. Choose Frame on the Define Vector
Method dialog box.

- 382 -
When the message window shows "Indicate a Frame", pick on the coorsys of the
large block. On the Axis Selection dialog box, choose Y. Click on OK. Three
more small blocks will appear on the top of the large block.

11. Merge all these blocks together. Select CAD | Modify | Cad Operators
| Merge. On the Merge dialog box, choose Merge All and choose Yes to
confirm. All the blocks will be merged together with a base coorsys at the
last world origin.

Retrieve

12. Select CAD | Create | Retrieve to retrieve the file named drill.6.
Select Object from the Retrieve dialog box. The two tables will appear to
intersect each other. The next steps will raise the long table above the short
table.

13. Select CAD | Create | Select. Pick the long table. It will change to
purple. Select CAD | Create | Trn Obj and the Vec button. The Translate
Setup dialog box appears, click on OK.

In the Define Vector Method dialog box, choose 2 Points. Click on OK.
To translate the long table in the Z direction, pick the bottom left corner of the
short table for the first vertex and pick the top left front corner of the short table
for the second vertex. The long table will move up and rest on the short table.

14. Select CAD | Create | Save. On the CAD Save dialog box, choose
Save Object. Pick the long table and it will change to purple. On the
Select Library dialog box, choose c:\deneb\QTUTORlib\PARTS\ as the

- 383 -
path (directory) to save the file to. In the Select File dialog box enter file
name drill.7. Click on Save.

Drill Spindle
The next part to be created is the drill spindle.

1. Select File | Clear World to clear the work area. The Clear World
dialog box appears. Click on Yes.

While QUEST is clearing the system, the message window displays


"Reinitializing the System....".
When this is finished, the message window displays "World cleared".

Cylinder

2. Select CAD | Create | Create | Cylinder. Complete the Cylinder dialog


box as follows:

Click on OK. A cylinder will appear at the CAD world origin to be used later as
the up-down drill spindle. Save this file as drill.8.

- 384 -
3. Select File | Clear World to clear the work area. The Clear World
dialog box appears. Click on Yes.

While QUEST is clearing the system the message window displays "Reinitializing
the System....".
When this is finished, the message window displays "World cleared".

Assemble A Drilling Machine


This task will build a drilling machine from all parts created in the
previous sections.

The object orientation or the angle from which the machine is viewed may
be changed at any time during this next task to get a better view of the
device. If so, select any of the world display buttons, such as Rotate,
Cruise, or View.

Set Up

1. Retrieve the drill base created in the previous task. Select CAD | Create
| Retrieve. Choose Object from the Retrieve dialog box. On the Select
Library dialog box, choose c:\deneb\QTUTORlib\PARTS\ as the path
(directory). Click on OK. In the Select File dialog box Choose drill.0 part
and click on Open. The drill base will be retrieved.

2. Repeat step 1 and retrieve drill.1 to the work area. The up-down spindle
will be retrieved at the base coorsys of the drill base. Snap the up-down
spindle to the top surface of the super wedge. (The world orientation and
view may need to be changed in order to see the surface of the super
wedge). Select CAD | Create | Snap Obj.

Choose Yes on the Snap Setup dialog box and Surface on the Snap Object On...
dialog box and click on the top surface of the superwedge

- 385 -
3. Next, the spindle must be translated down. Select CAD | Create | Trn
Obj and select the Vec button. The Translate Setup dialog box appears,
click on OK. In the Define Vector Method dialog box, choose 2 Points
and click on OK. Pick the top corner of the vertical wedge for first vertex
and pick the bottom corner for the second vertex. The up-down spindle
will be moved down into drill base.

4. The drill head is the next part to be retrieved and assembled to the
spindle. Retrieve the file, drill.2. Select CAD | Create | Retrieve.

The drill head will be retrieved at the base coorsys. Use Snap Obj to snap it to the
top of the up-down spindle.
Choose Yes for Center in the Snap Setup dialog box and Surface on the Snap
Object On... dialog box and click on the top of the up-down spindle.

5. A drill handle will be assembled to the drill head in this step. Select
CAD | Create | Retrieve. Retrieve the file, drill.3 to place the first handle
in the work area. Use Snap Obj to snap the handle to the right side of drill
head. Choose Yes for Center and click on OK, the Snap Object On...

- 386 -
dialog box will appear, click on Surface and click on the right side of the
drill head.

6. To translate the handle near the front end of the drill head, use the LMB
to select Trn Obj, and the MMB to select Rel. Enter -15 on the Enter
relative translation along Y: dialog box to move the handle towards the
front of the drill head.

7. Retrieve the file, drill.4, for the circular handle. Snap this handle in the
center of the front surface of the horizontal wedge using Snap Obj.
Choose Yes for Center and click on OK, the Snap Object On... dialog box
will appear, click on Surface and click on the front surface of the
horizontal wedge.

8. To duplicate the handle and place it on the side of the horizontal wedge,
use the RMB to pick the surface on the side of the horizontal wedge. A
second handle will be created at the center of the wedge polygon.

9. Retrieve the file, drill.5, and the crank handle will be placed in the work
area. Snap the crank handle to the side of the vertical wedge. Choose Yes
for Center and click on OK, the Snap Object On... dialog box will appear,
click on Surface and click on the side surface of the vertical wedge.

10. To move the crank handle up the side of the vertical wedge, select Trn
Obj and move the mouse into the work area. With the LMB, drag the
crank handle to a location midway between the center and top of the
vertical wedge.

Table Assembly
The table will be assembled to the base device next.

1. Retrieve the file, drill.6, the short table, and use Snap Obj to snap the
table to the center of the top surface of the horizontal wedge.

2. Retrieve the file, drill.7, and use Snap Obj to snap the long table to the
center of the short table. Choose Yes for Center, the Snap Object On...
dialog box will appear, click on Coorsys and click on a coorsys in the
center of the short table.

- 387 -
If necessary, use Display and change Render to Wire to show all the coorsyses.

Drill Spindle
The drill spindle is the last part to be assembled to the drilling machine.

1. Retrieve the file, drill.8, and use Snap Obj to snap this part to the
coorsys created for the drill head. Click on OK on the Snap Setup dialog
box, the Snap Object On... dialog box will appear, click on Coorsys and
pick the coorsys at the front end of the drill head.

2. Change the world view. Select Display and change Render to Flat.
Click on OK.

- 388 -
Merge

Combine all parts into a single object with single coorsys.

3. Select CAD | Modify | Cad Operators | Merge. On Merge dialog box,


choose Merge All and choose Yes to confirm and click on OK.

4. Select CAD | Aux | Coorsys | Delete. Choose All from Delete Coorsys
dialog box. Select Yes to confirm and all auxiliary coorsyses will be
deleted. Click on OK.

Auxiliary Coorsys
To ensure that parts are moved to the drilling machine table an auxiliary
coorsys must be located there.

5. Select CAD | Aux | Coorsys | Create. Pick the drilling machine. A


coorsys will be created at the base coorsys. This needs to be moved to the
table surface.

6. Select CAD | Aux | Coorsys | On Surf. Choose Yes on the Center on


Polygon dialog box and click on OK. Pick the top surface of the front
plank on the long table. The coorsys will be snapped to the center of the
plank.

- 389 -
To move the coorsys back, select CAD | Aux | Coorsys | Trn Coor. With the
MMB, select Rel. Enter 9.75 on the Enter relative translation along Y: dialog box
and click on OK. The coorsys will center on the long table.

7. Save the drill machines as drill in c:\deneb\QTUTORlib\PARTS\


directory.

21.3 Using Indicate Point Modes

This tutorial will demonstrate the different methods available within the
system for indicating points.

The current indicate point mode is used by the system any time a function
requires the user to indicate a point. Insert polygon, insert line, and cut are
the three explicit functions which require the user to indicate the points.
Also, functions like revolve polygon and dimension insertions, which
require the user to indicate a vector or axis (which may be accomplished
by indicating two points), use the current indicate point mode.

There is a distinction between a point and a vertex. A point is an arbitrary


<x, y, z> location in space. A vertex is an <x, y, z> location associated
with physical geometry, e.g.: an endpoint of a line or edge. A point may be
indicated by the user, but it does not necessarily exist in the geometry
database. A vertex, on the other hand, definitely exists in the geometrical
database.

Set Up

- 390 -
To demonstrate using Indicate Point Modes, first set the parameters.

Units

1. Select Tools | Properties | Units. Set Linear to Millimeters for this


session.

Click on OK. Select CAD to move to CAD World.

2. Select File | Clear World to clear the work area. The Clear World
dialog box appears. Click on Yes.

While QUEST is clearing the system the message window displays "Reinitializing
the System....".
When this is finished, the message window displays "World cleared".

Modes

3. Select the Modes button. Set the working parameters for this session in
the CAD Modes dialog box and click on OK.

- 391 -
Indicate Point: On Vertex
In order to illustrate point insertions, a block must be created and one of
its faces deleted (using Del Poly). Use the polygon operator to insert
various new polygons in the open face.

1. Select CAD | Create | Create | Block. Create a block with the following
parameters:

Click on OK.

2. With the RMB, select Rotate. Hold down the RMB and move the
cursor from right to left until the Absolute Rotation dialog box reads about
-50 degrees in Roll.

3. Now press the LMB and move the cursor from top to bottom until the
Yaw reads about 20 degrees. As this is done, the Pitch and Roll values will
automatically change by small amounts to preserve the Cartesian
relationship between the angles. Finally, the Pitch will read about 15
degrees, even though there was no explicit rotation about Y.

4. Select CAD | Create | Del Poly. When the Delete Polygon dialog box
appears, choose Polygons and click on OK.

5. Pick the polygon on the right face of the block. It will highlight in
purple. Pick it again to confirm deletion. The polygon will be deleted. The

- 392 -
block now has an open side and a new polygon can be stretched over this
opening.

6. Select CAD | Create | Polygon. The message dialog box will display
"Indicate next point" and one of the other polygons in the block will be
highlighted. This highlighted polygon is the current polygon and simply
represents the system's best guess as to the last polygon that was operated
on. In this case, it is the last polygon created when the object itself was
created.

Now, Indicate Points can be used as the corners for new polygons. Since the
Indicate Point mode is On Vertex, only existing vertices can be picked.

7. To try this out, pick the four corner vertices of the open side of the
block in a counterclockwise fashion. A purple splat will appear when the
first and second vertices are picked. A purple polygon will "stretch" and
cover the open face as new vertices are picked.

8. Once the four-sided polygon is complete, repeatedly select the Reject


button. If the Reject button is chosen more than four times, other polygons
of the block start to come undone. In this case, begin again by selecting
the following from the menu system; CAD | Modify | Del All to clear the
CAD World. Then repeat the previous steps to recreate the block, rotate it
to the desired position, and delete the right face.

Indicate Point: On Edge/Lines


Indicate Point mode will be changed to On Edges/Lines and a polygon
made to cover the open face of the block.

1. Select the Modes button. Change the Indicate Point field to On


Edges/Lines.

- 393 -
Click on OK to activate that mode. By indicating points somewhere along an
edge or line, a polygon can be inserted having a vertex in a location where none
previously existed.

2. Select CAD | Modify | Polygon. With the RMB, pick the vertex located
at the lower right-hand corner of the open face. Using the RMB will
indicate a vertex. A splat will appear at this point.

With either the LMB or the MMB, pick a point near the middle of the edge
located along the top face. Two splats will appear along the edge and the edge
itself will be highlighted. One splat will appear at the location that was picked, the
second splat will be located at the endpoint of the edge that was closest to the
picked point.
This endpoint is the Near Endpoint. It is important since it defines a direction
along the edge. The positive direction is the Near Endpoint toward the picked
point.
The Indicate Point dialog box will appear offering three indication methods. This
tutorial will cover all three methods beginning with Indicate AS IS.

3. Choose the Indicate AS IS option and click on OK. The edge and
endpoint highlights will disappear, and the only inserted point (near the
middle of the edge) and the first (regular vertex) point will remain
highlighted.

- 394 -
4. With either the LMB or the MMB, pick a point near the middle of the
edge located along the left side of the open face. This time, choose the
Indicate Absolute option. The Real Distance along Edge dialog box will
appear. A real distance along the edge, measured from the Near Endpoint
toward the picked point (positive direction) will need to be input. A vertex
will be inserted on the edge at this distance. In this example, try a distance
of 40.

Now, the three-sided polygon, highlighted in purple and straddling the open face
of the block, will be seen.
It's possible to enter points which are "along" the edge, but not "on" the edge. For
example: the edge is 100 units long, an entry of 200 will insert the point off in
free space, 200 units from the Near Point along the edge direction. Negative
numbers may also be used.

5. To demonstrate the last indication method, pick along the bottom edge
(with either LMB or MMB), and choose the Indicate Normalized option.
The system will respond with a prompt to enter a Normalized Distance
along the Edge starting at the Near Endpoint. Enter a value of 0.333. A
vertex will be inserted one third of the way from the Near Endpoint
toward the picked point.

An entry of 0.0 will indicate the Near Endpoint, whereas an entry of 1.0 will
indicate the Far Endpoint. Normalized means the picked edge is 1.0 units long in
normalized units. Any number may be entered, positive or negative. Note that a
number like six means six "edge-lengths" in the positive direction. A point
inserted along an edge may be rejected just like any other point.

Indicate Point: On Surface


1. Select the Modes button. Change the Indicate Point field to On
Surfaces. Click on OK.

2. Select CAD | Create | Del Poly. When the Delete Polygon dialog box
appears, choose Polygons. Pick the polygon that was just created, pick it
again to confirm. There should now be only a block with one missing face
in the work area.

- 395 -
3. Select CAD | Modify | Polygon and prepare to insert polygons on and
inside the block. Pick a location in the middle of any polygon and a splat
will appear there. A vertex has been inserted "on" the polygon at the
location picked. Do this several times and notice how polygons form as
before. Notice that the Reject button still behaves as usual.

If a location on a B-spline surface is picked, the point will be inserted at the


analytical value of the surface at that location instead of "on" the polygon
representation of that surface.
To pick a vertex while in this mode use the RMB to indicate the vertex.

Indicate Point: On Curves


1. Select the Modes button. Change the Indicate Point field to On Curves.
Click on OK.

2. Select CAD | Create | Del All and confirm the selection.

3. Select CAD | Create | Create | Circle. Complete the Circle dialog box
as follows.

Click on OK.

4. Select CAD | Create | Polygon and prepare to insert polygons on and


inside the circle.

5. Pick the location in the middle of any segment and a splat will appear
there. A vertex has been inserted right on the segment at the location

- 396 -
picked. Do this several times and notice how polygons form as before.
Note that the Reject button still behaves as usual.

If a location on a B-spline curve is picked, the point will be inserted at the


analytical value of the curve at that location instead of "on" the segmented
representation of that curve.
To pick a vertex while in this mode, use the RMB to indicate the vertex.

Indicate Point: On All


The last Indicate Point mode to be demonstrated is On All. This mode
allows the user to indicate points with any of the indicate point methods.

The system will place a priority on edges over curve/lines, and


curves/lines over surface/polygons.

When an edge is picked, the point will be indicated AS IS along the edge.
Absolute and normalized, are not available in this mode. Using the RMB,
the system will look only for vertices.

1. Select CAD | Modify | Del All and confirm the selection. As before,
prepare the block with a single open face.

2. Select the Modes button and set the Indicate Point mode to On ALL.

3. Select CAD | Create | Polygon. Create a polygon by picking existing


vertices, edges and surfaces. Use as many different methods of indicating
points as possible.

CAD Cut
The following tutorial demonstrates different ways to use the cut operator.
Cutting planes can be specified by:

Selecting a polygon.
Selecting three points.
Specifying a plane equation.

All three methods are described here.

To demonstrate CAD Cut, first set the parameters, and select an object to
cut.

- 397 -
Setup

1. Select Tools | Properties | Units. Set Linear to Millimeters for this


session.

Click on OK.

2. Select CAD to move to CAD world.

Modes

3. Select the Modes button. Set the working parameters for this session in
the CAD Modes dialog box as shown:

Multi Views Allows up to four different views to be displayed simultaneously.

Indicate Point Governs the methods by which the user may indicate points in various
system functions.

- 398 -
Vertex Tolerance Specifies the minimum allowable Cartesian distance between two
points in order for them to remain separate entities. Points within tolerance of each other
are merged into one point. This is useful when dealing with important data.

Planarity Tolerance A constraint on the maximum deviation a point may have from the
plane of a given polygon in order for that point to be a member vertex of the polygon.
This is used, for example, in the polygon insert function. The polygon function allows the
user to define a polygon by indicating vertices to "stretch" the polygon to. If, while
constructing a polygon, a vertex is indicated which lies outside the planarity tolerance,
then a new polygon is begun.

Polyline Angle Specifies the angle used for determining whether to end the polyline with
the current segment, or to include the next segment in the current polyline. If the angle
between the two lines in question is less than this value, then the polyline will terminate
at their common endpoint.

World Axes Designates whether a coorsys which represents the CAD world axes is
displayed.

Cylinder

The yellow coordinate frame located in the center of the display is the
CAD world origin. Users should be aware that it is the zero reference
point for all objects created in the CAD context.

This tutorial will use a cylinder to demonstrate all of the cut operators.

4. Select CAD | Create | Create | Cylinder. Complete the Cylinder dialog


box as follows:

- 399 -
Click on OK. A cylinder will appear on the screen.

5. If the entire cylinder is not visible, select the Cruise button. Zoom the
world back by moving the mouse from right to left, with any mouse button
depressed, until the entire cylinder is visible.

Cut Using Polygon

The first method involves using a polygon that already exists in the CAD
World to define the cutting plane. A square polygon will be created using
the block operator. By specifying Z length of zero, the system will create a
block without sides, i.e., a single polygon. The polygon (block) will be
created with an offset in the Z direction so that the plane of the polygon
will intersect the cylinder object.

1. Select CAD | Create | Create | Block. Create a block with following


parameters:

- 400 -
Click on OK. A block will appear on the screen.

2. To cut the cylinder with the polygon, select CAD | Modify | Cut.
Choose Polygon from the Define Plane Method dialog box and click on
OK.

Pick the block just created to indicate it will be used as the cutting plane. Be
careful not to pick too closely to one vertex.
Choose the Object option from the Cut dialog box.

3. Pick the cylinder as the object to be cut. Confirm the selection with a
second mouse pick. The cut operation will divide the cylinder into two
objects. These objects will be called the upper cylinder and the lower
cylinder.

4. To view the cut cylinder with the block passing through it, select the
Rotate button.

The Absolute Rotation dialog box indicates the absolute rotation about the X, Y,
and Z axes (Yaw, Pitch, Roll) of our viewpoint, relative to the CAD world origin.
Hold the LMB down while moving the cursor from top to bottom to rotate the
world approximately 30 degrees in the positive X (yaw) direction.

- 401 -
5. Select CAD | Create | Select. Pick the block to be the current object.

6. Next, select CAD | Create | Trn Obj. Use the LMB and move the
mouse from right to left to translate the block approximately 100
millimeters in the negative X direction.

The dialog box indicates the absolute translations of the current object's base
coorsys relative to the CAD world origin.

7. Select CAD | Create | Del Obj. Pick the block and confirm the
selection.

8. Select CAD | Create | Select. Pick the top of the cylinder. Only the top
of the cylinder highlights in purple. The bottom is now a separate object
and can be selected apart from the top portion.

Rotations occur around the base coorsys of the object being rotated.
Therefore, to pivot the upper cylinder about an axis parallel to the CAD
world Y-axis, located along the right edge of the cylinder, the base coorsys
of the object must be defined. The base coorsys of the upper cylinder is
currently located at the CAD world origin. The origin must be changed so
that it is located on the lower right-hand corner of the upper cylinder. The
Tools context will be used to find the coordinates of the vertex located
along the cutting plane, on the lower right edge of the upper cylinder.

9. Select Tools | Properties | Coords. Choose the Object option from the
Coordinates dialog box.

- 402 -
Pick the lower cylinder as the object whose base coorsys is to be used as the
reference frame for all analysis operations.

10. Select Tools | Properties | Identify | Vertex. Pick the extreme right
vertex, located along the bottom of the upper cylinder. The Vertex ID
dialog box appears.

The X coordinate would be 25 mm, if the circumference of the cylinder had been
a perfect circle. Since it is an approximation of the circle, with the number of
points specified as 12, the radius of the cylinder reads 25.8819 mm instead of 25
mm in the X direction (Note: The diameter of the cylinder was specified as 50
mm, and the facets were circumscribed).
The Tools function has now loaded these X, Y, and Z values into IGCALC
registers X, Y and Z. These numbers can now be used in future operations by
referencing the registers.

A new object will be made and translated to the vertex just analyzed. The
base coorsys of the upper cylinder will be changed to match that of the
new object. Once this is completed, the upper cylinder can be pivoted
about its Y-axis.

11. Select CAD | Create | New Obj. Confirm the selection. A new object
is created at the CAD world origin.

12. Select CAD | Create | Trn Obj and select Abs. Enter the coordinates
as shown on the Absolute Coordinates dialog box by typing in x for the X
coordinate and pressing <return>. The value 25.8819 mm will appear.
Enter y in the Y coordinate field and z in the Z coordinate field. Click on
OK. This will move the new object 25.8819 mm in the X direction and
75.0 mm in the Z direction based on the values loaded previously into the
IGCALC registers.

- 403 -
The origin of the upper cylinder must now be changed.

13. Select CAD | Create | New Org. Select the upper cylinder as the
object whose origin is to be redefined. Pick the base coorsys of the new
object as the new origin of the upper cylinder.

14. Select CAD | Create | Rot Obj. Rotate the object approximately 35
degrees in the +Y (pitch) direction by pressing the MMB and moving the
cursor from left to right.

15. Select the Rotate button. Rotate the world until the Roll equals
approximately 40 degrees and there is a good view of the two cylinders.
To do this, press the RMB and move the mouse from left to right.

16. The upper cylinder has to be translated away from the lower cylinder.
Select CAD | Create | Trn Obj. Press the RMB and move the cursor from
left to right until Z equals about 100 mm on the Absolute Coordinates
dialog box.

- 404 -
Cut - Three Points

Figure 21-2 CAD Cut Using Three Points

The next cut is a three point cut on the lower cylinder. A plane will be
indicated with three points.

1. Select CAD | Modify | Cut. In the Define Plane Method dialog box,
choose 3 Points and click on OK. Use the RMB to pick a vertex on the
top of the lower cylinder. Pick a vertex located near the middle of the back
of the cylinder, but not exactly in the middle. By using the RMB, QUEST
will seek a vertex rather than a polygon. A purple splat should appear at
the vertex and a message stating that a vertex was indicated.

Use the RMB to pick another vertex. This one should be located straight across
from the first vertex, and still along the top circumference of the lower cylinder.
Pick the third vertex below the second vertex and bottom circumference of the
cylinder. The three points chosen on the cylinder should form an inverted "L".
These three points specify the cutting plane. A 3D plane icon will appear to
indicate the cutting plane that will be used for the operation.

NOTE: The current indicate point mode in the modes function is "on vertex". This means
that only points can be indicated on existing vertices. If one of the other indicate point
modes is chosen, the plane must be selected by indicating three points according to the
current mode. See the "Indicate" discussion in the User Interface chapter for more
details on indicate point functionality. Also note that the Abs button is available to key in
absolute point coordinates with respect to the current object.

2. Choose the Object option from the Cut dialog box. Click on OK.

- 405 -
Pick the lower cylinder as the object to cut. Confirm the selection with a second
mouse pick.

3. Select CAD | Modify | Select. Pick the left half of the lower cylinder to
be the current object.

4. Select CAD | Modify | Trn Obj. Translate the current object


approximately 90 mm in the negative X direction by pressing the LMB
and moving the cursor from right to left.

Cut - Plane Equation

The last cut operation to be described is Cut Using A Plane Equation. The
base coorsys of the right half of the lower cylinder will be used to start the
definition of the cutting plane.

1. If the base coorsys of the right half of the lower cylinder is not visible,
select the Rotate button. Rotate the world until this object's base coorsys
can be seen. It should be located at the yellow CAD world origin.

2. Select CAD | Modify | Cut. In the Define Plane Method dialog box,
choose Frame and click on OK. With the LMB or MMB, pick the base
coorsys of the right half of the lower cylinder. Do not use the RMB
because QUEST will expect the 3-point method of defining the plane.

The Key Absolute Plane dialog box will appear. To cut the object with a plane
perpendicular to the Y-axis, enter 1.0 in the Y Component field and 0.0 elsewhere.
Click on OK.

- 406 -
The 3D plane icon will appear to indicate the plane that will be used for the cut.
Choose the Object option from the Cut dialog box. Click on OK.

Pick the right half of the lower cylinder located at the yellow CAD world origin
as the object to cut. Confirm the selection with a second mouse pick.

3. Select CAD | Modify | Select. Pick the front portion of the right half of
the lower cylinder just cut, i.e., the portion closer to the user, to be the
current object.

4. Select CAD | Modify | Trn Obj. Translate the current object


approximately 100 mm in the positive X direction.

5. To view the cut portion of the cylinder from a different viewpoint, select
Rotate. To reset the X and Z rotations of the world to zero, use the LMB
to select the Reset/Fill button. Then, using the RMB, select the Reset/Fill
button a second time.

- 407 -
This portion of the tutorial creates a machined part illustrating various
techniques of hole creation, fillet creation, polygon grouping concepts, and
polygon patching methods. This tutorial is more complicated than the
previous tutorials and assumes that the user has become fairly proficient
with the CAD systems. There are a number of different ways to
accomplish different parts of this demonstration but only one solution will
be explained. For example, during the define polygon stages, a misplaced
indicate point may produce menus and messages which are not mentioned
in the tutorial. If this occurs, back up or proceed differently from the
tutorial.

Before beginning the step-by-step process, retrieve the part called


Advanced_CAD from the QUESTlib\PARTS\USRMNL\ directory to see
how the part should look when this tutorial is completed. Be sure to
"cruise" around and see what it looks like from different angles. After
viewing the part and before proceeding, select CAD | Create | Del All and
confirm the selection.

Figure 21-3 Sample Machined Part

Set Up

1. Select Tools | Properties | Units. The Select Units dialog box appears.
Choose Inches for Linear.

- 408 -
Click on OK. After exiting and re-entering the dialog box, the conversion factor
mm/unit will read 25.40000

2. Select the Modes button. Set the working parameters for this session in
the CAD Modes dialog box:

Click on OK.

Creating a Notched Block


1. Select CAD | Create | Create | Block. Create a block with following
parameters:

A large and somewhat thin block will appear on the screen. Note that the base
coordinate system (coorsys) of the block will initially be located at the world
origin.

- 409 -
2. Select the Block button again and create a block with the following
parameters:

Click on OK. A small block will appear and cover one corner of the large block.

3. Select CAD | Modify | Booleans | Diff.

The message window will read "Subtract first Object from Second. Select the first
Object". Pick the small block as the first object so that it is highlighted. The
message window reads "Select the second object". Pick the large block as the
second object. The Boolean subtraction is performed.

NOTE: When using Boolean functions its a good practice to avoid coplanar faces and
open objects, which could provide undesirable results.

4. Select CAD | Modify | Del Obj and pick the small block. Confirm the
pick with a second pick. The small block should disappear, leaving a notch
in large block.

Creating a Rounded Corner


1. Select CAD | Create | Create | Fillet. Set the following parameters:

2. Refer to Figure 21-4. Pick Polygon One. Next, pick Polygon Two.

- 410 -
Figure 21-4 Creating the Rounded Corner-- Picking the Polygons
The Fillet Parameters dialog box will appear. Key in the following values.

A rounded corner will be created with two polygons extended past the edges of
the rounded corner. (This is really a reversed fillet).

3. Select Cruise. With the RMB, pick the top polygon where it hangs over
the rounded corner. The system will center the picked location in the
viewport.

4. Select CAD | Modify | Del Poly. When the Delete Polygon dialog box
appears, choose Polygons. Pick the top polygon where the fillet has been
created and pick again to confirm the pick. Pick the bottom polygon and
confirm this pick. This removes both the top and bottom polygons.

5. Select Display and change Render to Wire. Click on OK.

6. Select Cruise to bring the region up close so that twelve vertices, as


illustrated in Figure 21-5, are clearly visible.

7. Select CAD | Modify | New Obj. Confirm the selection. It is necessary


to create a new object so that it can be mirrored for the other side.

- 411 -
Figure 21-5 Creating a Rounded Corner-- Picking the Vertices

8. Refer to Figure 21-5. Select CAD | Modify | Polygon. Pick the vertices
in order, beginning with Vertex 1 and continuing through Vertex 12 to fill
in the top polygon. Change any inaccurate pick with the Reject button to
undo the pick, then pick the correct vertex.

NOTE: The rotation in which vertices of a polygon are picked is important. The new
polygon for the top surface was created by selecting vertices in counterclockwise
direction. This is the same as selecting polygons in a clockwise manner and then
reversing the polygon.

9. Select Display and change Render to Flat. Click on OK.

10. Select CAD | Create | Create | Mirror. Pick the polygon created in
step 8, as the object to mirror. Choose Yes and Z Axis on the Mirror
Object dialog box to clone the object and mirror it along the Z axis.

Because the bottom surface of the notched block is located along the Z origin, the
mirrored polygon may be correctly positioned by translating the polygon by the
width, or Z length, of the notched block. Select CAD | Create | Trn Obj.

- 412 -
11. Select the Vec button. Choose 2 Points on the Define Vector Method
dialog box. Refer to Figure 21-5. Pick Vertex 2b as the first vertex and
Vertex 2 as the second vertex. The mirrored polygon will be translated to
its proper location.

12. Select CAD | Modify | New Org. Pick the polygon just created from
completing the mirror step and then pick the CAD world origin.

13. Select CAD | Modify | Select and pick the original block.

14. Select CAD | Modify | Cad Operators | Mov Poly. Choose Polygon
from the Move Polygon dialog box. Pick the top polygon that was created,
confirm the selection, then pick the bottom one that was "mirrored".

Creating Holes
1. Select CAD | Create | Create | Cylinder. Complete the Cylinder dialog
box as shown.

Click on OK. A cylinder will appear at the CAD world origin.

- 413 -
2. Select CAD | Create | Trn Obj. Select Abs. Enter the following values
on the Absolute Coordinates dialog box. The cylinder will snap to the new
location.

3. Select CAD | Modify | Booleans | Diff. The message window will read
"Subtract first Object from Second. Select the first Object". Pick the
cylinder as the first object so that it is highlighted. The message window
reads "Select the second object". Pick the block as the second object. The
Boolean subtraction is performed.

4. Select CAD | Modify | Trn Obj. With the MMB, select Rel and enter 9
on the Enter relative translation along Y: dialog box. Click on OK.

5. Select CAD | Modify | Booleans | Diff. The message window will read
"Subtract first Object from Second. Select the first Object". Pick the
cylinder as the first object so that it is highlighted. The message window
reads "Select the second object". Pick the block as the second object. The
boolean subtraction is performed.

6. Select CAD | Modify | Del Obj and delete the cylinder. There will now
be two holes in the block.

7. Select CAD | Aux | Coorsys | Create. Pick the block to create a new
coorsys on. This will be needed later to dimension the block.

8. Select CAD | Aux | Coorsys | Trn Coor and select Abs. Enter the
values shown on the following dialog box.

- 414 -
9. Create another coorsys on the block and translate it to X=10, Y=44,
Z=0.

10. Select CAD | Aux | Coorsys | All Visible to enable the display of all
coorsyses.

Create a Fillet
1. Select CAD | Create | Create | Block. Complete the Block dialog box
as shown.

Click on OK. A block will appear at the world origin.

2. Select CAD | Create | Trn Obj. Select Abs. Enter the following values
of X=14, Y=0, Z=4 for the block. It will now appear on top and to one
side of the base block.

3. Select Rotate and select Abs. Set the Yaw angle to 0 degrees, set the
Pitch angle to 0 degrees, and set the Roll angle to 120 degrees. A fillet will
be used to round this block to the notched block along the long portion of
the block.

- 415 -
Figure 21-6 Creating a Fillet-- Picking the Polygon

4. Refer to Figure 21-6. Select CAD | Modify | Cut. Choose Polygon as


the cut option and pick Polygon One. Pick Polygon Two as the polygon to
be cut. Confirm the pick.

Pick Polygon Three and choose Polygon as the cut option. Pick Polygon Two as
the polygon to be cut. Confirm the pick.

5. With the RMB, select CAD | Create | Create | Fillet. Pick Polygon One.
Next, pick Polygon Two. When the Fillet Parameters dialog box appears,
enter the following values:

Click on OK. A fillet will be created.

6. Select Display and change Render to Wire. Click on OK.

7. Select Cruise. Refer to Figure 21-7. With the RMB, pick "Vertex to
Center". The system will center the picked location in the viewport. Then,
use the MMB to zoom in on the region so that the vertices of the fillet
facets can be easily picked. Rotate as necessary.

- 416 -
8. Select CAD | Create | New Obj. Confirm the selection. It is necessary
to create a new object so that it can be mirrored for the other side.
Triangular polygons will fill the surface and be placed in this new object.

9. Refer to Figure 21-7. Because this surface is convex, eight triangular


polygons will be needed to correspond to eight segments in the fillet. Each
triangle has three vertices; two on the Fillet, and a third that is labeled
"Vertex to Center". Select CAD | Create | Create | Polygon.

Beginning with the right-most vertex for each triangle, pick each of the three
vertices in counterclockwise order, for each of the eight triangular polygons. For
example, pick "Vertex 1 of Polygon 3", then "Vertex 2 of Polygon 3", then
"Vertex to Center", to create the triangle identified as Polygon 3. Continue in the
same manner to create the remaining seven polygons.

NOTE: The two extreme polygons (Polygon 1 and 8) are very thin.

Figure 21-7 Creating Triangular Polygons

10. Select Display and change Render to Flat. Click on OK.

11. Select CAD | Create | Create | Mirror. Pick the patch of triangular
polygons as the object to mirror. Clone this object and then mirror it along
the Y axis. Choose Yes and Y Axis on the Mirror Object dialog box. Click
on OK.

- 417 -
The newly mirrored object will appear back-to-back with the original object.

12. Now, the mirrored object will be translated to the other end of the
fillet. Select CAD | Create | Trn Obj. Select Abs to place the object at
Y=20.0 in. It will fill the symmetrical gap at the end.

13. Select CAD | Modify | Merge. Choose Merge All option, confirm the
merge.

14. Select Cruise for a better view of the completed object. Change the
light source as desired.

- 418 -
CHAPTER 22
KINEMATICS

Introduction
This tutorial will show how to create a kinematic device from the devices
in the standard system libraries. This includes selecting the base device
from the library and then attaching the parts to create a kinematic device.
It also shows how to assign the elements and motion script to the created
machine.

It will show how to create a part and associate the script of the part to the
kinematic device's script. This lesson will also cover the positioning of the
way point of the kinematic device, and adding the grab and release of the
parts by the machine.

Set Up
1. Select the maximize button at the top right-hand corner to enlarge the
QUEST window. Select the same button in the QUEST 3D window to
maximize the work area window.

2.

If QUEST was used previous to starting this model building session, the
QUEST world should be cleared and reset. To do this, select File | Clear

- 419 -
World. When prompted with ? Clear World ?, select Yes to confirm this
selection.

3. While QUEST is clearing the system, the message window will display
"Reinitializing the System ...". When this is finished, the message window
will display "World cleared".

4. The next step is to Reset the world. Select File | Reset World. When
prompted with ?Reset World?, select Yes to confirm the selection.

5.

The proper time units need to be set. To do this, select Run | Simulate |
Time Units. Complete the Time Units dialog box as shown and click on
OK.

6.

The proper distance units need to be set. To do this, select Tools |


Measure | Units. Choose the appropriate units as shown and click on OK.

Build Kinematic Device


Following are the steps required to build the kinematic device in this
tutorial. Please refer to Figure 22-2 for a representation of the completed
device and the recommended viewing angle during the building process.

- 420 -
Figure 22-1 Layout for Kinematic Device Model

1. Select Model | Build | Element Class | Machine. The Machine dialog


box will be displayed.

Select the Display button in the Machine dialog box. The Display dialog box is
displayed. Complete this dialog box as shown below and click on OK.

- 421 -
The Kin Data field allows the user to specify how the kinematic element will be
created. The user has the options to select the already created kinematic machine,
use an existing IGRIP workcell, or create the machine in QUEST.
Choose ..\QUESTlib\PARTS from the Select Library dialog box.
The base part for the kinematic device is drill.0 located in
USRMNL\DENEB_DRILL\. Once the part is selected, click on OK. Click on OK
on the Display dialog box and the Machine dialog box. The view will reorient to a
front view of the part and the message window will prompt for picking the
location of the kinematic element on the floor/2D window.

2. Use the LMB and place the created machine on the floor. The machine
is relatively large on the screen. To adjust this, select Pref | Preferences |
Grid. The Grid dialog box as shown below will be displayed. Change the
Spacing to 5.00000 ft and click on OK.

With the LMB, use the Cruise button to achieve the viewing angle similar to
Figure 22-2.

Figure 22-2 Kinematic Device

- 422 -
3. To attach the up-down spindle part to the drill base, select Advanced |
Kin | CAD Parts | Attach.

The message window prompts to select the parent part. Use the LMB and pick the
already created drill base. Choose the up-down spindle part, drill.1, located in
..\QUESTlib\PARTS\USRMNL\DENEB_DRILL\.
Pick the coorsys located in the center of the circular surface at the top of the drill
base.

4. To translate the up-down spindle to its proper vertical location, select


Advanced | Kin | CAD Parts | Sel.

Using the LMB, pick the up-down spindle. The up-down spindle will become
highlighted. Select Advanced | Kin | CAD Parts | Trn Use the RMB to select the
Rel button. Enter -5 on the Enter relative translation along Z dialog box and click
on OK.

5. To attach the drill head to the up-down spindle, select Advanced | Kin |
CAD Parts | Attach.

Pick the up-down spindle as the parent part. Choose the drill head part, drill.2,
located in ..\QUESTlib\PARTS\USRMNL\DENEB_DRILL\.

6. To snap the drill head to its proper position on the up-down spindle,
select Advanced | Kin | CAD Parts | Sel.

Using the LMB, pick the drill head. The drill head will become highlighted.
Select Advanced | Kin | CAD Parts | Snap and choose Surface on the Snap Cad
Part On dialog box. Choose Yes on the Center on Polygon dialog box. Pick the
circular surface on the top of the up-down spindle.

7. To attach the short table to the drill base, select Advanced | Kin | CAD
Parts | Attach. Pick the drill base as the parent part. Choose the short
table, drill.6, located in ..\QUESTlib\PARTS\USRMNL\DENEB_DRILL\.

Pick the base coorsys of the drill base as the initial part position.

8. Snap the short table to its proper position. Select Advanced | Kin |
CAD Parts | Sel and select the short table. Snap the short table to Surface
A as shown in Figure 22-2. Be sure to pick the correct parts.

9. To attach the long table to the short table, select Advanced | Kin | CAD
Parts | Attach and pick the short table as the parent part. Choose the long
table, drill.7, located in ..\QUESTlib\PARTS\USRMNL\DENEB_DRILL\.

- 423 -
10. To attach the tool to the drill head, select Advanced | Kin | CAD Parts
| Attach and pick the Drill Head as the parent part. Choose the tool,
drill.9, located in ..\QUESTlib\PARTS\USRMNL\DENEB_DRILL\.

Select the inverted coorsys at the front end of the drill head.

Assign Resource Kinematics


The kinematic device should have three Degrees of Freedom (DOF). The
up-down spindle will translate along the Z axis. The short table will
translate relative to the drill base along the Y axis, and the long table will
translate along the X axis relative to the short table. The following steps
will establish these kinematic relationships.

1. To set the number of Degrees of Freedom (DOF), select Advanced |


Kin | Devices | Add/Mod. Choose drill.0 from the Select Device dialog
box. Enter 3 on the Change Number DOF dialog box and click on OK.

2. To assign a translate Z motion to the up-down spindle, select Advanced


| Kin | Joints | Type. Select Tz from the Articulation Types dialog box as
shown below and click on OK.

Pick the up-down spindle. Enter 1 on the Translate Z dialog box and click on OK.
This represents the joint number for this kinematic relationship.

3. To assign a translate Y motion to the short table, select Advanced | Kin


| Joints | Type. Select Ty from the Articulation Types dialog box and pick
the short table. Enter 2 on the Translate Y dialog box and click on OK.

4. Repeat the previous step, selecting Tx from the Articulation Types


dialog box to assign a translate X motion to the long table. Enter 3 as the
joint number on the Translate X dialog box. Click on OK.

- 424 -
Create Motion Script
QUEST uses poses to describe motion for kinematic devices. By saving a
series of poses into a motion script, the user defines how the device should
look at different points during the playback of the script. QUEST
interpolates between these user-defined poses to provide a smooth
animation. The script that will be created will be used to show a hole
drilled into a part and will consist of six poses. The part will be shown
when the machine is used in a model.

The following steps are required to define the poses in the motion script.

1. To create the motion script, select Advanced | Kin | Scripts | Cre/Mod.


The already created device will be highlighted and the Script Attributes
dialog box will be displayed. Use the default script name, script_1, and
click on OK.

The buttons under the Joints title bar will be used to position the kinematic joints.
The buttons under the Pose Editor title bar will be used to save and modify poses
to the current script. The first pose in the script will be the current position of the
device as it was built.

2. Select Advanced | Kin | Pose Editor | Append. The message window


confirms the addition of the first pose to the script by displaying "Pose-1
Appended to <script_1>".

3. Select Advanced | Kin | Joints | Sel and pick the short table. Select the
Advanced | Kin | Joints | Jog button. Select the Rate button and enter the
values in the Jog Stepsize dialog box as shown below.

This sets the stepsize for jogging kinematic joints. The kinematic device is
positioned by jogging the kinematic joints that were defined in the previous
section.

NOTE: The next steps require picking the individual joints and using - and + buttons a
specific number of times to incrementally move parts. The button must highlight for each
mouse button click to achieve accurate results. You may need to proceed slowly with the

- 425 -
mouse button clicks for this. The message window displays the poses being appended to
the script.

4. To position the short table under the tool, with the LMB, select the -
button six times. Click on OK.

5. To save the position of the table as the second pose in the script, select
Advanced | Kin | Pose Editor | Append.

6. To lower the drill head towards the short and long table, select
Advanced | Kin | Joints | Sel and pick the up-down spindle.

Select Advanced | Kin | Joints | Jog and with the LMB, select the - button seven
times. Click on OK. The translational stepsize selected earlier stays the same.

7. To save the position of the drill head as the third and fourth poses in the
script, select Advanced | Kin | Pose Editor | Append twice. The purpose
for adding two poses at this time is to allow the drill head to remain at the
bottom of its motion before moving to the next pose.

8. To raise the drill head, select Advanced | Kin | Joints | Sel and pick the
up-down spindle. Select Advanced | Kin | Joints | Jog and then press the
+ button seven times.

9. To save this position of the drill head as the fifth pose in the script,
select Advanced | Kin | Pose Editor | Append.

10. To reposition the tables to their original location, select Advanced |


Kin | Joints | Sel and pick the short table. Select Advanced | Kin | Joints |
Jog and with the LMB select the + button six times.

11. To save the position of the tables as the sixth pose in the script, select
Advanced | Kin | Pose Editor | Append.

12. To specify the proper pose times to achieve smooth animation, select
Advanced | Kin | Pose Editor | Times. Select the Equal Proportion
button from the <script_1> Pose Start Times dialog box and click on OK.
The Equal Proportion button will assign start times to poses with equal
proportion between poses.

13. To set the script-to-process association, there are two methods for
executing a motion script during the execution of a model. Users can
either use SCL to directly execute the script at any time during model
execution, or a script can be associated with a device process. By default,

- 426 -
there is no association defined for a motion script. The tutorial will use the
process association method.

To set the script-to-process association for this kinematic device, define the cycle
process for the device and then associate this cycle process to the script. To create
the cycle process, select Model | Process | Process | Cycle. The Select Process
dialog box will be displayed. Choose New and click on OK. The Cycle Process
Definition dialog box will be displayed as shown below.

Select the Cycle Time Button and set the cycle time for Process_1 to a Constant
value of 45 seconds. Click on OK.
Define that the cycle process being used now is the Process_1 which was just
created. This is called process assignment. Select Model | Process | Process |
Assoc and pick the kinematic device. The Process assignment dialog box is
displayed. Complete the dialog box as shown and click on OK.

- 427 -
To set the script-to-process association for this kinematic device, select Advanced
| Kin | Scripts | Assoc. The Process Script Association dialog box is displayed.
Complete the dialog box as follows and click on OK.

14. To save the kinematic device, select Advanced | Kin | Save Kin. Save
the kinematic device with the name kin_drill.rsc in
c:\deneb\QTUTORlib\RESOURCES or
c:\deneb\QTUTORlib\KINEMATICS.

Play Script
1. To play back the script, select Advanced | Kin | Pose Editor | Play. The
Play Back dialog box is displayed as shown below.

2. Select the # Updates button and accept the default value of 20. This is
the number of times the kinematic device updates during the playback to
produce smooth animation.

3. To play the script, use the LMB to select Play.

- 428 -
Build Model Using Kinematic Device
In order to see how parts can interact with kinematic devices, a simple
QUEST model must be built.

1. To create a part class using default characteristics, select Model | Build


| Part Class | Create/Modify. The Part Class dialog box will be displayed.
Select the Display button. The Part Display dialog box will be displayed.
Select the 3D File button and choose Select from library in the Geometry
Selection dialog box.

Choose the geometry ..\QUESTlib\PARTS\GIFTS\WIDGETS\roller and click on


OK on all the dialog boxes.

2. To create a source with default geometry, select Model | Build |


Element Class | Source. The Source dialog box will be displayed. Select
the IAT button and set it for Source1 to a Constant value of 60 seconds.
Place the source on the left side of the kinematic device.

3. To create a sink with default geometry, select Model | Build | Element


Class | Sink. The Sink dialog box will be displayed. Accept all the default
entries and click on OK. Place the sink on the right side of the kinematic
device.

4. The next task involves connecting the elements. Select Model | Build |
Connections | Element. Connect the source to the kinematic device, and
the kinematic device to the sink.

5. To save the model, select Model | Build | Model | Save. Save it to


c:\deneb\QTUTORlib\MODELS\. Enter the file name kin.mdl for this
model and click on OK.

Run the Simulation


Select Run | Simulate | Simulation | Run. The Run dialog box is
displayed. Complete the dialog box as shown below and click on OK.

- 429 -
NOTE: The parts show up in the middle of the up-down spindle. To correct this, the way
point for the kinematic device needs to be moved.

Position Way Point


The way point for a kinematic device defines where a part will be located
when it is transferred to the device from the source. The following steps
are required to reposition the way point.

1. To reset the previous run, select Run | Simulate | Simulation | Reset


Run. Click it again to confirm.

2. To turn way point visibility on, select Advanced | Anim | Visible. With
the LMB, pick the kinematic device. The Select a Path dialog box is
displayed. Choose Machine1_1_way_pts.

3. To set the display mode to wireframe, select Display, toggle Render to


Wire, and click on OK.

4. To select the way point, select Advanced | Anim | Way Points | Sel.
Pick way point, W_1, in the middle of the up-down spindle.

5. Select Advanced | Anim | Way Points | Snap. To place the way point
onto the long table, choose Center of Surface on the Snap Way Point On
dialog box. Pick the top surface of the third rail from the front of the long
table.

6. To translate the way point to a location between the second and third
rail of the long table, select Advanced | Anim | Way Points | Trn. The
way point will become highlighted. With the MMB, select Rel and on the
Enter relative translation along Y: dialog box, enter -0.26.

7. To change the display mode back to default, select Display, toggle


Render to Default, and click on OK.

- 430 -
Run the Simulation
Select Run | Simulate | Simulation | Run, enter 200 for the Run Time
field, and click on OK.

NOTE: This time, the part is displayed at the proper location, but does not move when
the tables move. In order to make the part move with the tables, the motion script must be
modified to include a grab and a release at the appropriate poses. In this version of
QUEST, a dummy device is created, which is a kinematic device with zero DOF. This
dummy device is replaced by the parts coming to the kinematic device. There is a script
attached to the dummy device. The grab and release information is with the grabee (the
part being grabbed) and is stored in its script.

Add a Grab and a Release


Grabs and releases are the mechanism by which a kinematic device can
move other entities in a QUEST model. The following steps are required
to add a grab and a release to the existing kinematic script, and associate
the scripts of the grabber and the grabee. Finally, the parts coming from
the source will replace the dummy device acting as a grabee. The
following steps are involved for the grab and release.

1. To create a dummy device with zero DOF, select Advanced | Kin |


Devices | Add/Mod. Choose New Device from the Select Device dialog
box. Select the device ..\QUESTlib\PARTS\GIFTS\WIDGETS\roller, enter
0 for the Degrees of Freedom field in the New Kinematic Device dialog
box, and click on OK.

The Snap Device On dialog box is displayed. Choose Surface, choose Yes for the
Center on Polygon dialog box, and place it onto the third rail from the front of the
long table.

2. Select Advanced | Kin | Devices | Sel and pick the dummy kinematic
device. The dummy device will become highlighted. Select the Trn
button, and with the MMB, select Rel and enter -0.26 on the Enter relative
translation along Y: dialog box. This will position the dummy device right
under the tool when the simulation runs.

3. To create a script for the new dummy device, select Advanced | Kin |
Scripts | Cre/Mod. With the LMB, select the dummy device, name it
script_2, and click on OK.

- 431 -
4. Add the grab and release for the dummy device. To add a grab, select
Advanced | Kin | Joints | Grab. Choose Set Grab on the Set/Clear Grab
dialog box and pick the long table as the grabber part to grab the <roller>.

Choose Append new pose from the Pose add option dialog box. Choose Yes on
the Do Association dialog box. Choose the Insert Before a Pose option from the
Pose add option dialog box. Choose pose 1 from the Select Pose dialog box. The
message window reads "Association complete".

5. To add a release, select Advanced | Kin | Joints | Release and choose


Set Release on the Set/Clear Release dialog box. Choose Append New
Pose from the Pose add option dialog box, choose Yes on the Do
Association dialog box, and choose Append New Pose from the Pose add
option dialog box. The message window reads "Association complete".

6. To associate the scripts of the grabber (long table; kinematic device) and
the grabee (dummy device) to the cycle process to do the process script
association, select Advanced | Kin | Scripts | Assoc.

Complete the Process Script Associations dialog box as shown below and click on
OK.

7. To substitute the dummy device with the parts coming from the source,
i.e., the parts of part class, Part1, select Advanced | Kin | Devices |
Substitute. Complete the Substitute Device dialog box as shown below
and click on OK.

- 432 -
Save Kinematic Device
Since the scripts and the positioning of the way point have changed, it will
be necessary to save the kinematic element before saving the model.

Select Advanced | Kin | Save Kin and choose


c:\deneb\QTUTORlib\KINEMATICS\from the Select Library dialog box.
The File Name dialog box is displayed. Enter the file name, kin_drill.rsc
(which should already be set), press enter, and click on OK.

Choose Yes on the Select File dialog box to replace the existing file.

Save Model
To save the model, select Model | Build | Model | Save. Save it to
c:\deneb\QTUTORlib\MODELS\. The File Name dialog box is displayed.
Enter the file name, kin.mdl for this model, press enter, and click on OK.

Choose Yes on the Select File dialog box to replace the existing file.

Run the Simulation


1. To set the simulation interval, select Run | Simulate | Simulation |
Interval. The Simulation Time Interval dialog box is displayed. Complete
this dialog box as shown below and click on OK.

2. Select Run | Simulate | Simulation | Run. Enter 200 for the Run Time,
press enter, and click on OK.

NOTE: Now the part moves with the table and the drill travels through the hole in the
center of the part.

- 433 -
CHAPTER 23
DRAW

Draw is a separate 2D world (parallel to the CAD World and the Model
World). Its purpose is to allow users to create drawings consisting of lines
and text, and to plot these to any scale. Although it is not meant to be a
complete 2D package, it is powerful enough to allow efficient creation of
simple geometry. Views with "hidden lines removed" and "wireframe"
representation can be imported from either the CAD World or the Model
World.

Any geometry that is created in the Draw World can be transferred to the
CAD World. Multiple views can be imported to the Draw World.

This tutorial begins by looking at the finished version of the drawing that
will be created. A view of the drawing will be imported to the CAD World
where it will be transformed into 3D. Later, a file will be imported into the
Draw World using the DXF translator where it will be "cleaned up" and
dimensions will be added. Depending on the hardware configurations, a
plot of the drawing may be created.

Setup
1. Select Tools | Properties | Units. Set Linear to Inches. Click on OK.

2. Select Draw | Aux | General | Grid Setup. The Grid Setup dialog box
appears. Set the X Interval and Y Interval to 1.00000 inches and set the
Line Style to Dotted. Click on OK.

- 434 -
3. Select Draw | Aux | General | Default Color and set the default entity
color to Orange.

4. Select Draw | Basic | Grid Off to toggle the grid function to ON, and
select Draw | Basic | Snap Off to toggle the snap function to ON. This
will allow the vertices of the grid to be selected.

Basic Draw
1. Retrieve a copy of the finished drawing. Select Draw | Basic |
Drawings | Retrieve and choose ../QUESTlib/DRAWINGS/draw_table.

- 435 -
Take some time to get familiar with the drawing. It is a 2D representation
of a machining table used to cut metal. When finished, select Draw | Basic
| Drawings | Clear to clear the Draw World.

Creating Draw Entities

2. Select Draw | Basic | Create | Line. Choose Line from the Create Lines
dialog box.

3. Pick the origin of the XY axis when prompted to pick the first point of
the line. Select the Abs button, and complete the dialog box as follows:

4. Select Draw | Basic | Trans. Select the Abs button. Complete the
Translation Factor dialog box as shown and click on OK.

The line will move half of its total length in the negative X direction, and 3 inches
in the Y direction. This line represents the top of the drawing.
Select Cruise and fill the screen with the drawing.

5. Select Draw | Aux | General | Default Color and choose Blue from the
Color dialog box.

6. Select Draw | Basic | Create | Line and choose Line from the Create
Lines dialog box. With the RMB, pick the left end of the top line as the

- 436 -
first point. Select Abs, complete the dialog box as follows, and click on
OK.

7. With the RMB, pick the right end of the top line and the Abs button.
Complete the Draw Abs Coords dialog box as follows and click on OK.

These blue lines will define the two sides of the object.

Modifying Draw Entities

8. Select Draw | Aux | General | Default Color and choose Orange from
the Color dialog box.

9. Select Draw | Basic | Modify | Cut. Choose 2 point from the Cut
Method dialog box. Click on OK.

10. Pick the Orange line to be the target entity. When prompted to indicate
a cut point, select Abs, complete the dialog box as follows, and click on
OK.

- 437 -
A point will appear above and just to the left of the Draw World axis.

11. Select Abs again and complete the dialog box as shown. Click on OK.

Another point will appear at these coordinates, then the portion of the line
between the two points will disappear, leaving two line segments.

12. Pick the right-hand Orange line. Select Abs and complete the dialog
box as shown. Click on OK.

13. When prompted to indicate another cut point, select Abs and complete
the dialog box as shown. Click on OK.

The drawing should look like this:

The Cut Slice function will be used to cut a line segment so as to create
multiple line segments. The newly created line segment will receive a

- 438 -
numeric suffix, i.e., "Line_0" when sliced, will create the additional line
called "Line_0#1". The next task slices the line in two places and creates
three line segments, one of which will be deleted.

14. Select Draw | Basic | Modify | Cut. Choose Slice. Pick the section of
the Orange line nearest the arrow as shown in the following illustration.

Select the Abs button and complete the dialog box as follows:

Click on OK. A point will appear at these coordinates and a message window will
indicate that the selected entity has been cut.

15. Pick the section of the Orange line near the arrow, as shown in the
following illustration, to be the target for the next cut in order to complete
the slicing.

Select the Abs button. Complete the dialog box as follows:

- 439 -
A point will appear at this location and the message window will indicate the cut
is complete.

16. Delete the line created between the slices. Select Draw | Basic | Del
and choose Entity. Pick the small 2-inch line that was previously created
using the slice function in the previous step, and confirm the selection.

The next task will use the lines of the grid to complete the next part of the
drawing.

17. Select Draw | Basic | Create | Line and choose Line. Select the Abs
button and complete the dialog box as shown. Click on OK.

18. When prompted to indicate the next point, pick the grid vertex located
two inches directly below the point. The next line will begin where the last
line left off. Pick this point, and then select the Vertex that is one inch in
the negative X direction. The lines created will resemble a reversed letter
"L".

19. The next line starts where the previous line left off. Pick this point and
select the grid Vertex one inch below it. The last line is drawn from the
previous point to the origin.

- 440 -
The drawing should look like this:

Creating Groups

20. Select Draw | Advanced | Groups | Create and, to confirm the choice,
select ?Sure?. Enter Center as the name of the new group and click on
OK.

21. Select Draw | Advanced | Groups | Add Ent and pick the four newly
created lines to move them into the group "Center". Note that it is
necessary to confirm each selection in turn.

22. Select Draw | Basic | Modify | Mirror and choose Group. Select the
"Center" group from the dialog box.

Complete the Mirror Method dialog box as follows:

- 441 -
Click on OK on the Mirror Options and Mirror Method dialog
boxes.There are now two groups, "Center" and "Center_1". In order to
manipulate these as one entity, add the second group to the first.

23. Select Draw | Advanced | Groups | Select and choose Center to be


the current group.

24. Select Draw | Advanced | Groups | Add Ent and pick the four newly
created entities in the group named "Center#1". The drawing should look
like this:

This action did not delete the group named "Center_1", rather, it merely copied all
of its contents into the first group. Now the group "Center" needs to be copied to
other parts of the drawing.

Clone

25. Select Draw | Basic | Create | Clone and choose Group from the
Clone Options dialog box. Click on OK.

Select the group Center from the Select Group dialog box and choose Multi
Linear from the Clone Methods dialog box. Click on OK.

- 442 -
26. Complete the Draw Multi Linear dialog box as follows and click on
OK.

When prompted to indicate the axis, pick the origin frame, and choose Along X
from the Draw Axis Selection dialog box. Click on OK.

27. Repeat step 25 to clone the group "Center" to the other side of the
drawing. Complete the Draw Multi Linear dialog box as shown and click
on OK.

Select Along X from the Draw Axis Selection dialog box.

28. Select Draw | Advanced | Groups | Smash and select all four groups
to be smashed: Center, Center_1, Center_2, and Center_3.

29. Select Draw | Aux | General | Default Color and choose Red from the
Color dialog box.

30. Select Draw | Basic | Create | Line and choose Line. Draw a line to
connect the two Blue lines at their bottom edges. Use the RMB to select
the existing lines to ensure that the ends of the lines are correctly
connected. The drawing should look like this:

- 443 -
31. Select Draw | Aux | General | Default Color and choose Lime from
the Color dialog box.

32. Select Draw | Basic | Create | Line and choose Line. Select Abs to
indicate the first point, complete the dialog box as shown and click on
OK.

For the second point, select Abs, complete the dialog box as follows, and click on
OK.

33. Select Draw | Basic | Modify | Mirror. Choose Entity from the dialog
box.

Select the Lime line and complete the Mirror Method dialog box as shown. Click
on OK.

- 444 -
A second horizontal line will appear to the right of the first Lime line. Using the
grid Vertices, draw vertical lines to connect both ends of each of these new lines
to the Red line. Use the RMB to pick the end of the Lime line, and the LMB to
pick the point on the Red line.

34. Select Draw | Aux | General | Default Color. Choose Red from the
Color dialog box.

35. Select Draw | Basic | Modify | Cut. Choose 2 point from the Cut
Method dialog box. Click on OK.

Pick the left side of the Red line as the target entity, and select the intersection of
the left-most Lime line and Red line when prompted for the first cut point. Then,
pick the next Lime and Red line intersection, located 4 inches in the positive X
direction, to be the second cut point. This should open the "box" on the bottom
left side of the drawing. Repeat this operation on the right side of the drawing by
picking the right side of the Red line as the target entity to cut, and make the cuts
at the same intersections. The drawing should look like this:

36. Select Draw | Aux | General | Default Color. Choose Purple from the
Color dialog box.

37. Select Draw | Basic | Create | Line and choose Line. Select Abs when
prompted to select the first point, complete the dialog box as shown, and
click on OK.

- 445 -
38. Select Abs again, complete the dialog box as shown, and click on OK.

The second line begins where the previous line left off. Pick this point and select
the vertex located 6 inches in the positive X direction. Draw the last line from the
last point to the Red line in the positive Y direction. The drawing should look like
this:

Chamfer

39. Select Draw | Aux | General | Default Color. Choose Red from the
Color dialog box.

40. Select Draw | Basic | Modify | Chamfer. Pick the bottom left Red line
as the first line and the Blue line to its left as the second line. Complete the
dialog box as shown and click on OK.

- 446 -
Repeat this Chamfer operation on the right side using the same chamfer distance
values.

41. Select Draw | Aux | General | Default Color. Choose Purple from the
Color dialog box.

42. Select Draw | Basic | Modify | Chamfer. Pick the Purple line on the
left as the first line, and the bottom Purple line as the second line. Accept
the current values in the dialog box and click on OK. Repeat this
operation on the opposite side.

43. Select Draw | Basic | Modify | Cut. Choose 2 point from the Cut
Method dialog box. Click on OK.

44. Pick the center of the Red line as the target entity and cut this line by
picking both intersections of the Purple and Red lines. The drawing should
look like this:

Circle

45. Select Draw | Aux | General | Default Color. Choose Cherry from the
Color dialog box.

46. Select Draw | Basic | Create | Circle. Choose Center, Radius. Click
on OK.

Pick the Draw World Origin when prompted to indicate the center.

- 447 -
47. Select the Abs button when prompted for the Radius. Complete the
dialog box as shown and click on OK.

To translate this circle to its proper location in the drawing, select Draw | Basic |
Trans. Select the Abs button. Translate the circle by -4.5 inches in Y. This will
translate the circle in the negative Y direction. Click on OK.

48. Select Draw | Basic | Modify | Attribs. Complete the dialog box as
shown and click on OK.

Use the LMB to circle the entire drawing and confirm the selection. Choose
Orange from the Color dialog box. The drawing is complete and should look like
the illustration below:

- 448 -
Exporting to CAD
1. Select Draw | Data I/O | Transfer | Export to CAD. Use the mouse to
pick the drawing when prompted for the view to export. The message
window will confirm that the view has been exported.

2. Select Tools | Properties | Units. Set Linear to Inches. Click on OK.

3. Select CAD | Create to enter the CAD World. Select Cruise, and with
the RMB, pick the drawing so that it is centered in the display.

4. Select CAD | Create | Create | Mesh. Pick anywhere on the outside


edge of the object when prompted for the Outer Boundary Polyline. Pick
the Circle when prompted for the Inner Boundary Polyline. Select Done,
the Action button located at the bottom right of the screen. A mesh will be
generated from which a 3D object can be created.

5. Select CAD | Create | Create | Extrude. Choose Object from the


Extrude dialog box. Pick the object, and choose Frame from the Define
Vector dialog box. Click on OK.

When prompted to select a frame, pick the base coorsys. Choose Z in the Axis
Selection dialog box. Click on OK.

6. Enter 24 in the Vector Magnitude dialog box and press <Enter>.

The object is now 3D but still contains all of the geometry used to create it
within the Draw World.

Importing Data (AutoCAD)


This portion of the tutorial will demonstrate the steps needed to import
data in the DXF format directly into the Draw World. After importing the
data, the unnecessary entities which may obscure the view will be
extracted, and dimensions will be added.

1. Select Draw | Basic | Drawings | Clear to clear the world.

2. Select Draw | Basic | Grid On to toggle the grid function to OFF.

3. Select Draw | Basic | Snap On to toggle the snap function to OFF.

- 449 -
4. Select Draw | Data I/O | Translator | AutoCAD. Choose AutoCAD
Input from the AutoCAD Data Direction dialog box. Click on OK.

5. Choose the ../QUESTlib/DXF/draw_gun.dxf file and accept the defaults


in the AutoCAD Defaults dialog box. Click on OK.

The message window will confirm when the translation has been successfully
completed, and the Gun drawing will appear in the Draw World.

Views and Visibility


This drawing needs to be "cleaned up" to ensure that the plot can be
clearly read. Most drawings translated into the Draw World will have
Views and Groups already defined. Items created as layers will usually be
imported as Views and Groups. Since some of these entities will need to
be removed, it is best to check first to see if specific entity types have
already been organized. Views can also be hidden so that they may not be
named in the Entity list, and some entities may be invisible.

1. Select Draw | Basic | Sel and choose Entity.

Take a moment to look at what this drawing contains. This is a representation of a


straight action gun used for spot welding. The drawing shows the distance
between the tips in their open, semi, and closed positions. It also shows the mount
plate, and a side, top, and front view of the gun. For this tutorial, only the side
view will be included. All other entities will need to be deleted.

2. Select Draw | Basic | Del. Choose View from the Delete Options dialog
box. Choose the view named CENTER as the target view to delete and
pick again to confirm.

3. Delete the views named PHANTOM, HIDDEN, and SOLID.

- 450 -
4. Select Draw | Basic | Del. Choose Entity from the Delete Options
dialog box. Circle select the mount plate, top view, and front view of the
Gun. Click on OK.

Dimensioning
1. Select Draw | Dim | Setup | Attributes, complete the dialog box as
shown, and click on OK.

2. Select Cruise. Use circle select to zoom into the area containing the gun
tips.

3. Select Draw | Dim | Create | Linear and choose Line - Line from the
Dimension Type dialog box.

4. Pick the Blue line on the left as the first line and the Blue line on the
right as the second line. When prompted, use the mouse to drag the
dimension.

- 451 -
Another method to move a dimension is as follows:

a. Select Draw | Dim | Modify | Select. Choose the dimension.


b. Select Draw | Dim | Modify | Trn Dim. Use the mouse to translate the
dimension up a bit.

5. Select Draw | Dim | Create | Annotations. Choose Global from the


Annotation Type dialog box. Click on OK.

6. Pick a location on the right side of the dimension and, when prompted
for text, enter Open Position.

7. Select <Enter> and a blank text dialog box will appear. Select <Enter>
again to place the annotation in the drawing.

Plotting the Drawing


1. Select Draw | Data I/O | Plotter | Plot Setup.

NOTE: The PEN PLOT setting in this dialog box is determined by the PEN_PLOTTERS
value in the .qenvfig file. Consult the system administrator on setting the appropriate
value for the plotter.

a. Choose Plot Line Style and choose Wireframe.


b. Choose Plot Scale and toggle to Fit.
c. Set Paper Size to A1.

2. Select Draw | Data I/O | Plotter | Plot Drawing, accept the defaults,
and click on OK.

- 452 -
CHAPTER 24
PUT MODEL

In order to transfer a model, all the associated part files, logic files,
macros, images, etc., must also be transferred. The Put Model function
allows the user to make a copy of the currently loaded model along with
all the associated files. Put model allows the user to copy the model to an
existing library, new library, tape, or file. Copying the model file alone
will not be sufficient to load and run the model on a different system.

Start Up
1. Select Model | Build | Model | Read.

2. Choose ..\QUESTlib\MODELS\GIFTS\ directory and choose paint.mdl


as the model to read.

Put Model in an Existing Library


1. The library where the model will be transferred to must be available.
This will require appending a config file. Select File | Append Config
File. The Select File dialog box appears. Choose the file
..\CONFIGS\qtutor as the file to append. For additional information about
Config Files, see the QUEST Configuration Files Guide.

NOTE: The configuration file, qtutor, appends the library which was created in Chapter
5, Creating a Data Library. All the models created in the tutorials are saved into this
library c:\deneb\QTUTORlib\.

2. Select File | Put Model. The Put Model dialog box appears. Complete
the dialog box as shown and click on OK.

- 453 -
Existing Library - This is the library where the user wants to save the model. This
can be the user's own library or one that is created just for the put model.
Copy Defaults - This option is used if the user would like Put Model to make a
copy of the system files (such as default logic).
Include Environment - This option is used if the user would like to include their
.qenvfig file with the model.

3. Choose c:\deneb\QTUTORlib\MODELS\ from the Select Library dialog


box. Click on OK. This is the directory where the copy of the model is to
be placed.

4. The Select File dialog box appears. The directories path should be
c:\deneb\QTUTORlib\MODELS\. Enter the file name as Putmod_1 and
click on OK.

NOTE: The message window states that the model, parts, and logic files have been
copied to c:\deneb\QTUTORlib\. If the model has associated recordings, textures, include
files, and image files, these will also be copied.

5. This particular model, paint.mdl, is used for demonstration purposes. It


has user-defined logic and kinematic resources. To see what has been
copied to the destination directory through the Put Model feature, select
File | Select File. The Select File dialog box appears.

a. Choose c:\deneb\QTUTORlib\MODELS and look for the Putmod_1.mdl


file.
b. Choose c:\deneb\QTUTORlib\LOGICS and look for the paint.scl file.
c. Choose c:\deneb\QTUTORlib\KINEMATICS and look for the bell.rsc
file.
This clearly demonstrates the advantage of using Put Model over Save Model in
that all of the associated data is saved along with the model rather than simply the
model only.

Optional Method
Complete steps 1 through 4 EXCEPT: choose Yes for Copy Defaults ? in
the Put Model dialog box in Step 2. Once the last step is started, the
directories in SYSDEF, i.e., HOOK-FUNCS, HOOKS, PROCESSES, and
LOGICS, will appear. These directories contain the default SCL logics and
various SCL hooks.

- 454 -
Put Model in New Library
1. Select File | Put Model. The Put Model dialog box appears. Complete
the dialog box as shown below and click on OK. The choice of New
Library allows the user to define the directory where the model is to be
saved.

2. The New Library dialog box appears. Complete the dialog box with the
following:

Library Path Name as c:\deneb\QTUTORlib\TESTlib


Config File name as ..\CONFIGS\qtest

3. The Select File dialog box appears. Enter testput.mdl as the file name
for the model.

NOTE: The message window states that the model, part, logic, ... Files have been copied
to c:\deneb\QTUTORlib\TESTlib\. If the model has associated recordings, textures,
include files, and image files, these will also be copied.

4. To verify the files copied, select File | Select File. Choose


c:\deneb\QTUTORlib\TESTlib\MODELS from the Select File dialog box.

This activity, putting the model in a new library, is provided for


demonstration purposes only. Because it will not be needed for any future
tutorials it will be deleted.

5. Using File Manager (for Windows NT 3.5) or Explorer (for Windows


NT 4.X and Win95), delete the directory c:\deneb\QTUTORlib\TESTlib\
and the config file ..\quest\CONFIGS\qtest.

- 455 -
UNIX Users Only
Put Model to Tape

1. Select File | Model | Put. In the Put Model popup, set the Destination to
Tape; Copy Defaults? to Yes; and Include Environment to No. Click on
Done.

2. The File Name popup appears. The Path Name can remain blank; enter
paint.mdl as the File Name. Click on Done.

3. This will generate the Tape Device popup. Enter the location of the tape
drive, i.e., /dev/tape, or for a remote tape device, [hostname]:/dev/tape.
Click on Done. More information about tape drive devices can be found in
a UNIX manual.

The message window states that the model, parts, and logic files have been
archived to the tape device. If the model has associated recordings,
textures, include files, and image files, these will also be copied. To verify
that the Put Model was indeed archived to the tape, use the UNIX "tar tv"
command to read the contents of the tape. A UNIX manual can provide
information about the "tar" command.

Put Model to a File

1. Select File | Model | Put. In the Put Model popup, set the Destination to
File; Copy Defaults? to Yes; and Include Environment to No. Click on
Done. Choose File. The model will be archived to the specified file. This
option is similar to the Tape Option except that, instead of placing the
model and associated files to a tape, they are saved to a file.

2. The File Name popup appears. Leave the Path Name field blank. Enter
paint.mdl as the File Name for the model. Click on Done.

3. Choose /usr/deneb/QTUTORlib/ from the Select Library popup. This is


the directory where the file will be archived to. The File Name popup
appears. Leave the Path Name field blank. Enter paint.mdl.tar as the File
Name. Click on Done. When prompted to compress the file, choose Yes
and click on Done.

4. To verify the existence of the model and associated files, look in the
/usr/deneb/QTUTORlib. There should be a file named paint.mdl.tar.Z.

- 456 -
CHAPTER 25
VISUAL FILE INTERFACE (VFI)

Visual File Interface is a means of associating an image with file and


directory names. It is a graphical interface to QUEST libraries. With VFI,
the file selection popups in QUEST will display the associated images in
addition to the file and directory names.

The Capture Image button is used to create a VFI image. Each image
consists of a 75x75 pixel TIFF file. This tutorial explains the steps to
create these images.

Figure 25-1 GIFTS With VFI Turned Off

1. To turn on VFI (Visual File Interface), select Pref | Preferences |


Environment | Dialog. The Preferences popup is displayed. Complete the
popup as follows:

- 457 -
Click on OK.

2. Select Model | Build | Model | Read. Choose ../QUESTlib/MODELS


from the Select Library dialog box. A new popup will be displayed which
contains VFI images over library names (which may have been shortened).
This shows the selection of libraries available in the directory
../QUESTlib/MODELS. Standard libraries provided are: GIFTS/,
FEATURE/, and USRMNL/. As each image is highlighted, the full library
name is displayed at the top center of the window.

Choose GIFTS.

- 458 -
Create An Image for Parts
1. With the RMB, select CAD | Create | Create | Block and CAD | Create
| Create | Sphere.

2. Select Cruise and move the view around until both objects are visible.

3. Save the objects. Select CAD | Create | Create | Save. When the CAD
Save popup is displayed, choose Save All.

4. Choose ../QTUTORlib/PARTS/. Add the file name My_part1 and click


on Save.

5. Select File | Capture Image. Choose Specific File from the Define
Image popup.

Specific Directory is the same as Specific File except that, instead of creating the
image for the file, it creates the image for the directory (i.e., subdirectories in
PARTS or MODELS).
Default File is the same as Specific File except that it creates the same image for
all the files in a selected directory. For example, if there are ten models in the
MODELS directory, all ten models would have the same image.

- 459 -
Default Directory is the same as Default File except that it creates the same image
for all the subdirectories in the specified directory.

6.

Place the "frame grabber" over the objects. If the objects are too big to fit
in the frame grabber, use Cruise to zoom the objects smaller. Press the
space bar on the keyboard to return to frame grabber after using Cruise.
When the objects are small enough to fit within the frame grabber, click
the LMB to complete the capture.

7. Choose ../QTUTORlib/ and PARTS and finally My_part1. The image is


captured and saved in the ../QTUTORlib/IMAGES/PARTS directory.

8. Select CAD | Create | Create | Del All.

9. Select CAD | Create | Create | Retrieve. Retrieve an object from


../QTUTORlib/PARTS. The image will appear in the directory window.

Create An Image for Libraries


1. With the RMB, select CAD | Create | Create | Block..

Select Cruise and move around to get a good view of the object. Select
File | File | World | Capture Image. The Define Image popup will be
displayed.

- 460 -
Choose Library from the Define Image popup and choose the ../QTUTORlib/
library.

3. The Create Image popup will be displayed. Toggle PARTS to Yes, all
other options to No, and click on OK.

4. Choose Default for the Image view. The Default view is the view that
was set up in step 2. Toggle through Default to see what other views are
available. Remember to return to Default before leaving the popup. Click
on Done.

Overwrite existing ? is used to make new images when other images currently
exist.
Recursive Capture creates images for the files in the directories below the
directory selected.

The system will retrieve each part file in the library and create an image
for it.

The image file associativity is automatically maintained by QUEST. If a


file is renamed, copied, or deleted using QUEST's file system interface,
the associated image is also renamed, copied, or deleted.

- 461 -
CHAPTER 26
SOCKETS

26.1 Introduction

This document provides information on sockets for Windows and UNIX


. Section 26.2 applies only to Windows, and section 26.3 applies to
UNIX.

Sockets: What They Are and How They Are Used


This section provides a description of sockets and uses a tutorial approach
to show how sockets are operated and how they function.

A socket is a two-way communication mechanism, usually with a port on


the computer, and sometimes another process running on the same
computer or on another computer. In any case, the communication is
between two processes. One of the processes is called the server process
and the other is called the client process.

Often, a socket will be used only for one-way communication. However, it


will still be set up for two-way communication.

The computer on which the server process is running is called the server
host, and the computer on which the client is running is called the client
host.

The procedure for opening a socket involves three steps:

Step 1: Informing the operating system with information about the socket.
Step 2: Opening the socket as a server.
Step 3: Opening the socket as a client.

The order in which these steps are completed is important.

- 462 -
A set of C programs has been provided to assist in initializing and using
sockets. These programs serve as examples of what to do, and can be used
to understand how the communication works. They will now be used to
illustrate the three steps. Before starting the three steps, the programs must
be prepared for use. After completing the three steps, a fourth step will test
the socket communication.

26.2 Sockets for Windows

Preparing the C Files For Use

Copy client.exe and server.exe from the C:\deneb\quest\giftware\bin


directory, provided with the system, to a test location.

Step 1: Informing the Operating System About the Socket

This step depends on the type of computer being used. In Windows, it is


necessary to inform the operating system on each of the client and server
host computers about the location of the socket server. This is done in two
files, which must be set up correctly on each computer.

C:\winnt\system32\drivers\etc\

A file named Hosts in this directory must be set up or modified so that the
identification of the host for the socket server is known to the client and
server hosts.

EXAMPLE:
111.1.1.111 Zircon zircon Zir zir

This example identifies the IP address and aliases for the computers in the
network. Note that usually there will be an alias "localhost" which can be
used when referring to the local computer.

.rhosts

A file named .rhosts must be set up in the user's home directory. This file
lists the computer names, and the user login names that are allowed to use
the computers for this socket communication.

- 463 -
EXAMPLE:
localhost root martin
Buffalo root martin
Polaris root martin

Step 2: Open the Server

Open an MS DOS window and move to the test directory. Type


server.exe 2012 and press <Enter>.

The cursor should move to the next line and it will appear as if the
program (server.exe) has "hung". In fact, that is exactly what it has done.
The program server.c (which can be examined with an editor) simply
opens a socket using the socket number, 2012, which was provided. It then
waits for a message to be sent to it. If the user leaves it long enough, it will
"time out" with a message: "Can't initialize server socket", and the prompt
will reappear. If this happens before successfully completing this test,
reopen the socket as above.

Step 3: Open the Client Process

Open another MS DOS window and move to the test directory. Type
client.exe localhost 2012.

The cursor should move to the next line and it will appear as if the process
(the program named client.exe) has "hung". In fact, that is exactly what it
has done. The program client.c (which can be examined with an editor)
simply opens a socket using the socket number, 2012, which was
provided. It then waits for input from the keyboard.

Testing the Socket Communication

In the window where the client process was started, enter Hello socket
and press <Enter>. The message: "- Echo: Hello socket" will be displayed
in this window.

In the window in which the server process was started, the message "Hello
socket" will be displayed. This concludes the test of sockets.

Additional Notes on the Test

It is highly recommended that the user review the programs client.c and
server.c. It will be noted that these programs reference functions such as

- 464 -
net_init_socket_client, net_writesocket. These functions come from
nettools.obj and are documented in the ..\quest\giftware directory in the
README file. (A copy of README is found at the end of this chapter).
There are several points that may assist the user even if communication is
done entirely within SCL.

NOTE: This README was written for IGRIP and often refers to CLI, which is
DELMIA's Command Line Interpreter. However, it applies identically to QUEST and
BCL.

Using Sockets From Within QUEST


Opening a Server

A socket can be opened from QUEST SCL as a server by the OPEN


SERVER command. (See the QUEST SCL Reference Manual.)

EXAMPLE:
OPEN SERVER '1234' FOR UPDATE AS 1

The number 1234 is an integer which specifies the address to be used for
this port. Note that the number is presented as a text string (see below).
The number 1 is the channel number which the initiating QUEST program
must use for communication. The QUEST SCL which issues this
command must be running on the machine which contains this socket.
This QUEST session will be referred to as the "initiating" QUEST session
for this socket.

The socket server will begin "listening" on the specified port address of
the host it is running on. However, to use this socket in SCL, a client to the
socket server must also be opened.

NOTE: This mechanism can also be used to initiate another process (program) which a
user running QUEST can communicate with. The name of the process is placed within
the quotations, replacing the port address.

EXAMPLE:
OPEN SERVER 'special_program' FOR UPDATE AS 1

The socket server can also be opened outside of QUEST. In order to assist with
this activity and related activities, a set of utilities have been provided in the
..\quest\giftware directory. There is also a README in that directory. (A copy of
README is found at the end of this chapter).

- 465 -
Opening a Client to the Socket Server

The second step is to open a client to the socket server. This is a


communication channel that allows QUEST SCL to have two-way
communication, i.e., READ / WRITE, with the socket server.

The QUEST session may be the same as that which issued the command
to open the server, or it may be a different QUEST session running on the
same or a different host machine.

A socket can be opened from QUEST SCL as a client by the OPEN


CLIENT command. (See the QUEST SCL Reference Manual.)

EXAMPLE:
OPEN CLIENT 'Zircon:1234' FOR UPDATE AS 1

The port number 1234 must match the port number in the OPEN SERVER
command (see above). The host name of the computer on the network
must also be included. In this example, the host name is Zircon. This
information is required even when the QUEST which is issuing this SCL
command is on the same host as the server socket.

The QUEST SCL which issues this command need not be running on the
machine which contains this socket. This QUEST session will be referred
to as the "communicating" QUEST session for this socket.

NOTE: A colon separates the host name and the port number in the example above. The
whole of this parameter is presented as a text string. The channel number need only be
the same as in the open server command when the initiating QUEST sessions and the
communicating QUEST sessions are the same session.

Communicating With the Socket

When a socket server is in a "listening" mode, it is expecting to receive


information. At that time, the communicating QUEST session can send
information to the socket via a WRITE statement.

EXAMPLE:
WRITE(#1,'Hello')

When a socket server is in a "sending" mode, it is waiting to send


information. At that time, the communicating QUEST session can read
information from the socket via a READ statement.

- 466 -
EXAMPLE:
READ(#1,l_string)

Variables and text data can be communicated in this fashion. It is quite


normal to set up a handshaking protocol for communication. That is, when
a message is sent via a socket, the receiving program sends a message
back to the socket notifying it, in effect, that the message has been
received.

QUEST Tutorial for Sockets


This part of the chapter shows how the sockets work in QUEST. The
model files and the SCL logics required for this purpose are all provided.
The standard server program provided in the ..\quest\giftware directory is
used to set up the server, and the SCL initialization logic is used to set up
QUEST as the client process.

The SCL process logic is assigned to the machine in the model, which
sends to and receives the data from the server and writes it to the standard
output.

Open the Server

Open an MS DOS window and move to the directory where the files from
..\quest\giftware\bin are loaded. This should include the executables,
server.exe and client.exe.

1. Type server.exe 2012 and press <Enter>. The cursor should move to
the next line and it will appear as if the program (server.exe) has "hung".
In fact, that is exactly what it has done.

The program server.c, which can be examined with an editor, simply opens a
socket using the socket number, 2012, which was provided. It then waits for a
message to be sent to it. If it is left long enough, it will "time out" with a message:
"Can't initialize server socket", and the prompt will reappear. If this happens
before the tutorial has been successfully completed, reopen the socket as above.

Open QUEST as Client

1. Start QUEST. To read the model, select Model | Build | Model | Read.
Choose ..\QUESTlib\MODELS\USRMNL, then choose socket.mdl.

- 467 -
This is a simple model where the parts are produced by the source, transferred to
the machine for processing, and are finally transferred to the sink. The model has
an initialization logic attached to it, which specifies QUEST as the client process.
The machine, Machine1_1, has a process logic attached to it which sends a
message to the server process and receives the message back from the server. The
received and sent messages are displayed in the QUEST window and the server
window.

2. To run the simulation, select Run | Simulate | Simulation | Run. The


simulation runs, the server window displays the message "Part done", and
Machine1_1's Process Logic Output window displays "Message sent,
reply received Echo: 1". These messages are repeated on their respective
windows for each part completed by the machine. This illustrates the use
of sockets in QUEST.

Description of the SCL Procedures

The provided SCL file, socket.scl, has two procedures.

Procedure open_socket

1. Select Advanced | Popup | Model Logic | Init.

The message window indicates that the procedure open_socket is being used as
the model's initialization logic. This procedure uses the following command:
Open client 'localhost:2012' for update as 17
This command starts QUEST as the client process. The port number 2012 should
be the same as the server process port number. The number 17 is a unit number
which is used later in the READ / WRITE statements. (For more detail, see the
SCL Reference Manual).

Procedure send_data

1. Select Model | Build | Element Class | Modify.

Choose the machine, Machine1_1. The Machine dialog box is displayed. From
this dialog box, select the Logics button and choose the process logic. The
message window indicates that the machine is using send_data as the logic. This
procedure uses the following commands:
WRITE (#17, 'Part done',CR)
READ (#17,l_s_reply)
These commands communicate and transfer the data between the QUEST client
and the server window.

- 468 -
Explanatory Notes
Note that socket port addresses less than 1000 are reserved for root access,
and therefore should be avoided.

server.exe 2222

The server will begin listening on the specified port address of the host it
is running on. Then, run the client program, specifying the host and port
address to connect to. This client program can be run on any machine on
the same net as the server host machine.

client.exe Wilma 2222

The user may replace the host name with localhost. The client will
attempt to contact the host and establish a connection at port number 2222
to the server program. It will then accept standard input (terminal or
redirection) and send it to the server program. The server will, in turn,
reinsert an "Echo" at the beginning of the message and send it back.

The client program can be used to communicate with DELMIA products


which support the CLI and socket connections (IGRIP, ENVISION, etc.).
For example, start up IGRIP with the -s (socket) option on a clear port
address:

igrip -s 7072

Then start the client program on the machine of your choice with the same
socket address:

client Wilma 7072

The connection will be established and commands taken from the standard
input (stdin) of client will be sent to IGRIP and processed as CLI
statements. The return codes and messages of the CLI will be printed on
the standard output (stdout) of the client program.

The above case is also applicable to QUEST. For example, start up


QUEST with the -s (socket) option on an available port address.

- 469 -
quest -s 3333

Then start the client program on any machine with the same socket
address.

client wilma 3333

The connection will be established and commands taken from standard


input (stdin) of client will be sent to QUEST and processed as BCL
statements. The return codes and messages of the BCL will be printed on
the standard output (stdout) of the client program.

26.3 Sockets for UNIX

Preparing the C Files for Use

Copy the following files from the /deneb/quest/giftware directory,


provided with the system, to a test location. The user's home directory is
sufficient.

Makefile
client.c
server.c
nettools.o

The standard Makefile, that is provided, is a set of instructions to the C


compiler to compile and link a set of programs. Move these four files to
the test directory.

Edit Makefile to read:

SHELL = /bin/sh
all: server client
client: client.c nettools.o
$(CC) client.c nettools.o $(CFLAGS) -o client
server: server.c nettools.o
$(CC) server.c nettools.o $(CFLAGS) -o server

- 470 -
Enter the word make. This will produce four new files.

server.o The object file corresponding to server.c


client.o The object file corresponding to client.c
server The executable file to set up the server host
client The executable file to set up the client host

These files are now ready for use.

Step 1: Informing the Operating System About the Socket

In UNIX, it is necessary to inform the operating system on each of the


client and server host computers about the location of the socket server.
This is done in two files which must be set up correctly on each computer.

/etc/hosts

A file named hosts in the /etc directory must be set up or modified so that
the identification of the host for the socket server is known to the client
and server hosts.

EXAMPLE:
111.1.1.111 Zircon zircon Zir zir

This example identifies the IP address and aliases for the computers in the
network. Note that, usually, there will be an alias "localhost" which can be
used when referring to the local computer.

.rhosts

A file named .rhosts must be set up in the user's home directory. This file
lists the computer names, and the user login names that are allowed to use
the computers for this socket communication.

EXAMPLE:
localhost root martin
Buffalo root martin
Polaris root martin

Step 2: Open the Server

Open a window on the computer and move to the test directory. Type
server 2012 and press <Enter>.

- 471 -
The cursor should move to the next line and it will appear as if the
program (server) has "hung". In fact, that is exactly what it has done. The
program, server.c, (which can be examined with an editor) simply opens a
socket using the socket number, 2012, which was provided. It then waits
for a message to be sent to it. If the user leaves it long enough, it will
"time out" with a message: "Can't initialize server socket", and the prompt
will reappear. If this happens before successfully completing this test,
reopen the socket as above.

Step 3: Open the Client Process

Open another window on the computer and move to the test directory.
Type client localhost 2012.

The cursor should move to the next line and it will appear as if the process
(the program named client) has "hung". In fact, that is exactly what it has
done. The program, client.c, (which can be examined with an editor)
simply opens a socket using the socket number, 2012, which was
provided. It then waits for input from the keyboard.

Testing the Socket Communication

In the window where the client process was started, enter Hello socket
and press <Enter>. The message: "- Echo: Hello socket" will be displayed
in this window.

In the window in which the server process was started, the message "Hello
socket" will be displayed. This concludes the test of sockets.

Additional Notes on the Test

It is highly recommended that the user review the programs client.c and
server.c. It will be noted that these programs reference functions such as
net_init_socket_client, net_writesocket. These functions come from
nettools.o and are documented in the /deneb/quest/giftware directory in the
README file. (A copy of README is found at the end of this chapter).
There are several points that may assist the user even if communication is
done entirely within SCL.

NOTE: This README was written for IGRIP and often refers to CLI, which is
DELMIA's Command Line Interpreter. However, it applies identically to QUEST and
BCL.

- 472 -
Using Sockets from Within QUEST
Opening a Server

A socket can be opened from QUEST SCL as a server by the OPEN


SERVER command. (See the QUEST SCL Reference Manual.)

EXAMPLE:
OPEN SERVER '1234' FOR UPDATE AS 1

The number 1234 is an integer which specifies the address to be used for
this port. Note that the number is presented as a text string (see below).
The number 1 is the channel number which the initiating QUEST program
must use for communication. The QUEST SCL which issues this
command must be running on the machine which contains this socket.
This QUEST session will be referred to as the "initiating" QUEST session
for this socket.

The socket server will begin "listening" on the specified port address of
the host it is running on. However, to use this socket in SCL, a client to the
socket server must also be opened.

NOTE: This mechanism can also be used to initiate another process (program) which a
user running QUEST can communicate with. The name of the process is placed within
the quotations, replacing the port address.

EXAMPLE:
OPEN SERVER 'special_program' FOR UPDATE AS 1

The socket server can also be opened outside of QUEST. In order to assist with
this activity and related activities, a set of utilities has been provided in
the /deneb/ quest/giftware directory. There is also a README in that directory. (A
copy of README is found at the end of this chapter).

Opening a Client to the Socket Server

The second step is to open a client to the socket server. This is a


communication channel that allows QUEST SCL to have two-way
communication, i.e., READ / WRITE with the socket server.

The QUEST session may be the same as that which issued the command
to open the server, or it may be a different QUEST session running on the
same or a different host machine.

- 473 -
A socket can be opened from QUEST SCL as a client by the OPEN
CLIENT command. (See the QUEST SCL Reference Manual.)

EXAMPLE:
OPEN CLIENT 'Zircon:1234' FOR UPDATE AS 1

The port number, 1234, must match the port number in the OPEN
SERVER command (see above). The host name of the computer on the
network must also be included. In this example, the host name is Zircon.
This information is required even when the QUEST which is issuing this
SCL command is on the same host as the server socket.

The QUEST SCL which issues this command need not be running on the
machine which contains this socket. This QUEST session will be referred
to as the "communicating" QUEST session for this socket.

NOTE: A colon separates the host name and the port number in the example above. The
whole of this parameter is presented as a text string. The channel number need only be
the same as in the open server command when the initiating QUEST sessions and the
communicating QUEST sessions are the same session.

Communicating with the Socket

When a socket server is in a "listening" mode, it is expecting to receive


information. At that time, the communicating QUEST session can send
information to the socket via a WRITE statement.

EXAMPLE:
WRITE(#1,'Hello')

When a socket server is in a "sending" mode, it is waiting to send


information. At that time, the communicating QUEST session can read
information from the socket via a READ statement.

EXAMPLE:
READ(#1,l_string)

Variables and text data can be communicated in this fashion. It is quite


normal to set up a handshaking protocol for communication. That is, when
a message is sent via a socket, the receiving program sends a message
back to the socket notifying it, in effect, that the message has been
received.

- 474 -
QUEST Tutorial for Sockets
This part of the chapter shows how the sockets work in QUEST. The
model files and the SCL logics required for this purpose are all provided.
The standard server program provided in the /deneb/quest/giftware
directory is used to set up the server, and the SCL initialization logic is
used to set up QUEST as the client process.

The SCL process logic is assigned to the machine in the model, which
sends to and receives the data from the server and writes it to the standard
output (stdout).

Open the Server

1. Open a window on the computer and move to the directory where the
files from /deneb/quest/giftware are loaded. This should include the
executables: server and client.

2. Type server 2012 and press <Enter>. The cursor should move to the
next line and it will appear as if the program (server) has "hung". In fact,
that is exactly what it has done.

The program, server.c, (which can be examined with an editor) simply


opens a socket using the socket number, 2012, which was provided. It then
waits for a message to be sent to it. If it is left long enough, it will "time
out" with a message: "Can't initialize server socket", and the prompt will
reappear. If this happens before successfully completing the tutorial,
reopen the socket as above.

Open QUEST as Client


1. Start QUEST. To read the model, select Model | Build | Model | Read.
Choose /usr/deneb/QUESTlib/MODELS/USRMNL, then choose
socket.mdl.

This is a simple model where the parts are produced by the source, transferred to
the machine for processing, and are finally transferred to the sink. The model has
an initialization logic attached to it, which sets QUEST as the client process. The
machine, Machine1_1, has a process logic attached to it, which sends a message
to the server process and receives the message back from the server. The received
and sent messages are displayed in the QUEST window and the server window.

- 475 -
2. To run the simulation, select Run | Simulate | Simulation | Run. The
simulation runs, the server window displays the message "Part done" and
Machine1_1's Process Logic Output window displays "Message sent,
reply received Echo: 1". These messages are repeated on their respective
windows for each part completed by the machine. This illustrates the use
of sockets in QUEST.

Description of the SCL Procedures


The provided SCL file, socket.scl, has two procedures.

Procedure open_socket

1. Select Advanced | Popup | Model Logic | Init.

The message window indicates that the procedure open_socket is being used as
the model's initialization logic. This procedure uses the following command.
Open client 'localhost:2012' for update as 17
This command starts QUEST as the client process. The port number 2012 should
be the same as the server process port number. The number 17 is a unit number
which is used later in the READ / WRITE statements. (For more detail, see the
SCL Reference Manual).

Procedure send_data

1. Select Model | Build | Element Class | Modify.

Choose the machine, Machine1_1. The Machine dialog box is displayed. From
this dialog box, select the Logics button and choose the process logic. The
message window indicates that the machine is using send_data as the logic. This
procedure uses the following commands.
WRITE (#17, 'Part done',CR)
READ (#17,l_s_reply)
These commands communicate and transfer the data between the QUEST client
and the server window.

Explanatory Notes
The server and client programs are general purpose socket communication
programs. To demonstrate the use of sockets in standalone mode, first start
the server program with a socket port number which is not used in the
/etc/services file. A good way to ensure this is to "grep" the port number
from the services file:

- 476 -
grep 2074 /etc/services

If no entry is displayed, then the socket port address is probably good to


use. Note that socket port addresses less than 1000 are reserved for root
access, and therefore should be avoided.

server 2074

The server will begin listening on the specified port address of the host it
is running on. Then, run the client program, specifying the host and port
address to connect to. This client program can be run on any machine on
the same net as the server host machine.

client Wilma 2074

The client will attempt to contact the host "Wilma" and establish a
connection at port # 2074 to the server program. It will then accept
standard input (terminal or redirection) and send it to the server program.
The server will in turn reinsert an "Echo" at the beginning of the message
and send it back.

The client program can also be used to communicate to DELMIA products


which support the CLI and socket connections (IGRIP, ENVISION, etc.).
For example, start up IGRIP with the -s (socket) option on a clear port
address:

igrip -s 7072

Then start the client program on any machine with the same socket
address:

client Wilma 7072

The connection will be established. Commands taken from the standard


input (stdin) of client will be sent to IGRIP and processed as CLI
statements. The return codes and messages of the CLI will be printed on
the standard output (stdout) of the client program.

The above case is also applicable to QUEST. For example, start up


QUEST with the -s (socket) option on an available port address.

- 477 -
quest -s 3333

Then start the client program on any machine with the same socket
address.

client wilma 3333

The connection will be established and commands taken from standard


input (stdin) of client will be sent to QUEST and processed as BCL
statements. The return codes and messages of the BCL will be printed on
the standard output (stdout) of the client program.

26.4 Generic Information for Windows


and UNIX

socket.scl

File socket.scl
---------------
--------------------------------------------------------------
--
-- File: socket.scl
-- Author: DELMIA Corp.
-- Description: Use of sockets example.
-- Requires the server to be opened as 2012
-- History:
--
--------------------------------------------------------------

--------------------------------------------------------------
--
-- Procedure: open_socket
-- Description: opens the client
-- Usage: Init logic
--
--------------------------------------------------------------
Procedure open_socket()

Begin
Open client 'localhost:2012' for update as 17
End

- 478 -
--------------------------------------------------------------
--
-- Procedure: send_data
-- Description:
--
--
--------------------------------------------------------------
Procedure send_data()
Var
-- string to hold reply from server
l_s_reply : String
Static
-- variable that counts parts - used to show continuous
increments
l_i_var : integer

Begin
-- process a part and pass it to the output
Do_Process (ANY)
-- write (send) a message to the server on the socket
Write (#17, 'Part done',CR)
-- wait for response and display it
l_s_reply = ''
While (l_s_reply == '') Do
Read (#17,l_s_reply)
Delay 1
Endwhile
-- increment the part count
l_i_var = l_i_var + 1
-- display returned message
Write('Message sent, reply received ',l_s_reply,' \
',l_i_var,CR)
End

README

giftware README
-----------------------
* README: An explanation of files delivered in 'giftware'.
*
*
* cre 12-12-89 DELMIA (c) DELMIA Corp.
* mod 02-17-97 DELMIA (c) DELMIA Corp.
*/

The following files are supplied as programming examples in the


'giftware' directory (the directory you're in now).

client.c : An example 'C' program demonstrating the use of


DENEB format Port Sockets in client mode.

- 479 -
client : Executable of client.c
USAGE: client <hostname> <port>

server.c : An example 'C' program demonstrating the use of


DENEB format Port Sockets in server mode.

server : Executable of server.c


USAGE: server <port>

nettools.o : Object file containing Deneb Network Packet


utilities
USAGE: See notes.

Makefile : Makefile for client & server.


USAGE: make all

ignet.h : Definitions for error codes returned by the Deneb


Network Utilities.

The following files are supplied for Deneb products which support
both the CLI (Command Line Interface) and socket mode operation.

cli.h : Definitions for error codes returned by the CLI.


clidemo : Example DELMIA CLI source text.

Low-Level Routines
The low-level routines used by client.c and server.c are available for
simplification of user programs. They are compiled for the user's machine
type and located in nettools.o. The call sequences for these routines are as
follows:

net_init_socket_serv( listen_port, socket_descriptor )


int listen_port;
int *socket_descriptor;

FUNCTION:

Listens for a client connection on the port address specified by the listen_port
parameter. Upon making the connection, it returns the socket descriptor for
further communication calls. Note that this call will hang until a connection is
made.
net_init_socket_client( hostname, portnum, socket_descriptor )
char *hostname;
int portnum;
int *socket_descriptor;

- 480 -
FUNCTION:

Attempts to immediatly connect to a listening socket server running on hostname


at port address portnum. On successful completion, socket_descriptor is set to a
valid value for future communication calls. Note that this call will not hang, but
return a bad error status if the server process is not running.
net_writesocket( socket_descriptor, message_buffer )
int socket_descriptor;
char *message_buffer;

FUNCTION:

Attempts to write 1 packet to the socket specified by the socket_descriptor


(obtained from a previous net_init_server/net_init_client call). This call will
automatically packetize the message into the Deneb Network Packet data format.
net_readsocket( socket_descriptor, message_buffer )
int socket_descriptor;
char *message_buffer;

FUNCTION:

Attempts to read 1 packet from the socket specified by the socket_descriptor


(obtained from a previous net_init_server/net_init_client call). This call will hang
until a packet is received. Note that the buffer should point to a block of memory
large enough to hold the incoming packet (which is currently limited to 4096
bytes/packet). This call reads packets written in the Deneb Network Packet data
format (such as those written by net_writesocket).
net_close_socket( socket_descriptor )
int socket_descriptor;

FUNCTION:

Shuts down the socket specified by the socket_descriptor. No further


communications calls (readsocket/writesocket) will be valid for the
socket_descriptor.
net_test_socket( socket_descriptor )
int socket_descriptor;

FUNCTION:

- 481 -
Immediately determines whether there is data to be read on the supplied
socket_descriptor. Returns True (1) if there is data, False (0) if there is not data,
and -1 if the socket_descriptor is invalid.

COMMENTS:

All net_... routines return Zero ( 0 ) upon successful completion. If an error


condition exists, they will return status codes defined in ignet.h. The
ig_socket_verbose variable may be set to a non-zero (TRUE) value to display
diagnostic messages when a connection is made through net_init_client or
net_init_server.

Sending Packet Data


For those users interested in sending Deneb Network Packet data from a
host machine manufacturer other than that which the software is installed
on, format for Deneb variable length packets is as follows:

Byte: Contents:

1-5 Length of following message (ASCII Text).


6-N Actual message.

EXAMPLE:
[ 17LIFE is Wonderful]

The `[' and `]' simply indicate the start and end of the packet. They aren't
actually sent.

Don't forget to null terminate the string upon receipt.

- 482 -
CHAPTER 27
COSTING

27.1 Introduction

This tutorial introduces the user to Cost Macros. Cost Macros can be used
to analyze the running cost of various resources in a system after running a
simulation and to calculate the product cost of a system. These macros
calculate the cost of the product based on the principle of ABC. (Activity
Based Costing).

The macros have been designed to make them simple to operate. The
macros have been coded in SCL and are constructed so that they can be
easily enhanced by the users.

27.2 File Organization

If a user wants to enhance or alter the characteristics of a macro, the


location of the macro is easily determined. All the relevant files are
present in the COSTlib/SCLMACROS and COSTlib/INCLUDE directories.
The SCLMACROS directory consists of several subdirectories. The
subdirectories are named in such a way that each name signifies the type
of files it contains. For example, CALC_FUNCS is a directory which
contains all the files corresponding to the calculation section. Similarly all
the button functions (functions behind the user buttons) have been grouped
under the MAIN_MACROS directory.

- 483 -
27.3 Terminology

Cost variable Source of cost expenditure,


e.g. power.

Cost driver Measure of consumption of some resource,


e.g. machine utilization in hours.

Cost driver rate Conversion of consumption to cost,


e.g. $24 per cost driver unit.

Cost center An element that performs an activity that is of


importance to the costing analysis,
e.g. a machining department.

27.4 Setup Costing

If the costing macros have not been previously installed, follow the steps
for setup. If costing macros have been installed, proceed to the next
section.

Step 1: Configuration File


The correct configuration file must be appended so that all the functions
are correctly mapped on to the buttons. This is done by including it in the
.qpthfig file. A configuration file cost is provided in the CONFIGS
directory. This configuration file must be appended in order to access the
costing macros. It is recommended that this be appended via the .qpthfig
file. Note the need to amend cost as appropriate when installing to, or
running from a non-standard directory.

Step 2: User Buttons


It is necessary to place a .qbutfig in the home directory that details the user
buttons that are used in costing. Copy the qbutfig_cost file from COSTlib
to the home directory, renaming it .qbutfig.

- 484 -
Alternatively, if .qbutfig is already in use, cut and paste the new button
specifications from qbutfig_cost to .qbutfig.

Step 3: Testing
In this step, QUEST is loaded and the costing macro buttons are displayed
and tested.

1. Load QUEST.

2. Select User | Costing. The user buttons for costing are organized into 4
sections:

Init Section - Initialization


Input Section - Input of cost parameter data
Calculation - Preparation of results
Reports - Presentation of reports

If these buttons are not available, return to Step 2: User Buttons.

3. Select User | Costing | Init Section | Time Units. QUEST will display a
message saying that it is compiling an associated SCL Macro. If QUEST
displays a message saying that it cannot access the required SCL macro,
the configuration is not set correctly. Return to Step 1: Configuration File.

If compilation is successful, then a message will be displayed that there are `No
Elements in the Model !'.

27.5 Element Costing Tutorial

In this tutorial, an existing QUEST model will have costing applied to


elements.

Load the Model


In this step, a QUEST model is loaded and saved.

1. Select File | Read Model. Choose the model


QUESTlib/GIFTS/MODELS/assembly.mdl.

- 485 -
2. Select File | Save Model As. Save the model as costing.mdl in
QTUTORlib/MODELS.

NOTE: This is necessary as the costing module must use the library where the model is
saved in order to save costing parameters.

3. Run the model for 1000 seconds.

Initialize Files
In this step, several files are created that are used by the costing macros.

Select User | Costing | Init Section | Initialize Macro. This creates and
saves ASCII files that are used to store costing data. Model-specific SCL
files are also created and saved.

NOTE: If model elements or classes are added or deleted after the initialization is
performed, costing will not be applied until the model has been run and initialization
repeated.

Set Time Units


In this step, the time units to be used for keyed-in data and for reporting
are specified.

Select User | Costing | Init Section | Time Units. Choose Hour.

Set Currency
In this step, the currency to be used for keyed-in data and for reporting are
specified.

Select User | Costing | Init Section | Currency. Choose Dollar.

NOTE: Additional currencies can be specified by choosing USER from the dialog box.
Only the first three characters of currency names are used.

Define Cost Variables


In this step, the cost variables are defined for each cost center.

1. Select User | Costing | Input Section | Cost Var. Choose SOURCE.

- 486 -
A dialog box is displayed that lists the elements that are present in the model.
Choose source_1.
A dialog box is displayed that requires the entry of names for cost variables that
will be used. Complete the dialog box as follows and click on OK.

The Element Selection dialog box is displayed, allowing the defined cost
variables to be associated with other elements of the same type. Choose source_2.
This process can be repeated for any element for which costing information is
required.

2. Repeat the process in this step, choosing element type MACHINE and
workcell_1.

Name the cost variables as follows:


Power
Coolant
Labor
Maint
Setup

Cancel the dialog boxes.

Define Cost Drivers

- 487 -
In this step the cost drivers and cost driver rates are defined. Cost drivers
are measurable performance statistics provided by running the model.
Additional cost data is also defined.

1. Select User | Costing | Input Section | Drivers.

A dialog box is displayed that lists the element class types that are present in the
model. Choose MACHINE.

A dialog box is displayed that lists the elements that are present in the model.
Choose workcell_1. A dialog box is displayed that displays the cost variables,
using the names defined previously. Each defined cost variable can be "driven" by
any one of the drivers that can be chosen from the pull-down list for that variable.
Complete the dialog box as follows and click on OK.

Complete the Enter cost details for `workcell_1' dialog box as follows and click
on OK.

- 488 -
NOTE: The cost driver rates can be associated to other elements that have the same cost
drivers.

Cancel the dialog boxes.

Define the Paths


In this step the product costing path is defined. Product costing is based on
a defined product path. A product path must first be defined for a part
class. A product path is defined in reverse order from the actual part flow.
The product path to be used in this tutorial is for the part class assemble
and is as follows:

1. Select User | Costing | Reports | Path. Choose assemble.

A dialog box appears, displaying the elements in the model and the message
window prompts for the selection of a source (destination) element for the part

- 489 -
class. The last element in the path of the part class assemble is sink_1. Choose
sink_1.
A dialog box appears, displaying the elements in the model and the message
window prompts for the selection of the "target elements" (previous element to
sink_1) of assemble. Note that if a source element has more than one input, it is
necessary to choose All. Choose conveyor_3.
The same dialog box appears, allowing the selection of an additional previous
element (to sink_1) for assemble. Click on Cancel.

2. A dialog box appears, displaying the elements in the model and the
message window prompts for the selection of a source (destination)
element for the part class. Choose conveyor_3.

A dialog box appears, displaying the elements in the model. Choose workcell_1.
Click on Cancel.

3. A dialog box appears, allowing the selection of an additional previous


element (to conveyor_3) for assemble. Click on Cancel.

4. A dialog box appears, displaying the elements in the model and the
message window prompts for the selection of a source (destination)
element for the part class. Choose workcell_1.

A dialog box appears, allowing the selection of a previous element (to


workcell_1) for assemble. Choose one of the two buffers that are connected to
workcell_1.
A dialog box appears, allowing the selection of an additional previous element (to
workcell_1) for assemble. Choose the other buffer that is connected to
workcell_1.
A dialog box appears, allowing the selection of an additional previous element (to
workcell_1) for assemble. Click on Cancel.

5. A dialog box appears, displaying the elements in the model and the
message window prompts for the selection of a source (destination)
element for the part class. Click on Cancel.

6. A dialog box appears displaying the part classes in the model. Choose
DONE to exit this process.

- 490 -
7. Repeat the process for the assemble product path
QTUTORlib/MODELS/costingpart_path.

NOTE: This information is automatically stored in the file

Costing Calculation
In this step, costing results are calculated for the simulation.

Select User | Costing | Calculation | Calculate. The costing calculation is


performed.

Costing Reports
In this step, costing results are displayed.

Element and Element Class Costing Reports

1. Select User | Costing | Reports | Display. A dialog box appears,


displaying optional reporting approaches.

For all Elements - the running cost for all the elements of the model.
For selected Element - the running cost for a selected element.

Choose For all Elements. Review the report.

2. Select User | Costing | Reports | Display. A dialog box appears,


displaying optional reporting approaches. Choose For selected Element.

- 491 -
3. Select an element and review the report. Cancel the reports.

Part Costing Reports

After defining the path for a part (above) costing reports are available for
part classes.

4. Select User | Costing | Reports | Display. A dialog box appears,


displaying optional reporting approaches.

For a selected Part Class - the manufacturing cost of the part class.
For a selected Part Class due to a selected Element - the value added for a part
class by a specified element.
For a selected Part Class due to all Elements - the value added to a part class by
all the elements on the product path.

Choose For a selected Part Class. Select a Part Class and review the report.

Concept of Correction Factor

Cost variables are assigned to cost centers, not to part classes. There are,
however, situations where a cost driver is dependent on the type of the part
class. i.e., when handling a PartA costs twice as much as handling a PartB.
In order to handle such situations the concept of correction factor has been
introduced.

5. Select User | Costing | Input Section | Corr Fact. A dialog box appears
that displays the elements in the model. Choose any element.

A dialog box appears displaying the part classes in the model and a field for the
selection of a cost variable. By choosing a cost variable and specifying
proportional values, the cost driver rates for any cost variable can be altered by
part class.

- 492 -
6. In the dialog box displayed below, when workcell_1 manufactures a
part of class assemble, this involves three times the power cost of
manufacturing a part of class plate.

- 493 -
CHAPTER 28
AUTOMATED STORAGE AND
RETRIEVAL SYSTEMS (ASRS)

28.1 Introduction

This chapter describes the operation of the ASRS module. It is intended to


provide details of how to use the module as well as a starting point for
those users who may wish to create their own enhancements to the
module. This chapter includes the following sections:

Installation
Scope of the Module
Tutorial 1
Advanced ASRS
Tutorial 2, Storage Domains and Storage Rules
SCL Code Organization

28.2 Installation

Step 1: Configuration File


The correct configuration file, as mentioned in the installation notes, has
to be appended so that all the functions are correctly mapped on to the
buttons. This should be done by including it in the .qpthfig file. A
configuration file asrs is provided in the quest/CONFIGS directory. This
configuration file must be appended in order to access the ASRS macros.
It is recommended that this be appended via the .qpthfig file. Note the
need to amend asrs as appropriate when installing to, or running from a
non-standard directory.

- 494 -
Step 2: User Buttons
It is necessary to place a .qbutfig into the home directory that details the
user buttons used in ASRS. A file qbutfig_asrs is included in the directory
ASRSlib. Copy the file qbutfig_asrs from ASRSlib to the home directory,
and rename it .qbutfig.

Alternatively, if .qbutfig is already in use, cut and paste the new button
specifications from qbutfig_asrs to .qbutfig.

Step 3: Testing
In this step, QUEST is loaded and the ASRS macro buttons displayed and
tested.

1. Load QUEST.

2. Select User. The first three menu options should be:

AS/RS
Domains
Cranes

If the menu options are User1, User2, User3, then the config file has not been
correctly appended. Return to Step 1: Configuration File.

3. Select User | AS/RS. If there are no user buttons, then the .qbutfig file
has not been set correctly. Return to Step 2: User Buttons.

The user buttons for ASRS for this menu option are organized into nine sections:
AS/RS
ASRS Parameters
Rename Aisle/Rack
Rack Location
Racks in Aisle
Rack Del/Seq
Rack Parameters
Bins
ASRS Data

If these buttons are not available, return to Step 2: User Buttons.

- 495 -
4. Select User | AS/RS | ASRS Parameters | Define. QUEST will display a
message saying that it is compiling an associated SCL macro. If, instead,
QUEST displays a message saying that it cannot access the required SCL
macro, then the configuration is not set correctly. Return to Step 1:
Configuration File.

If compilation is successful, then a message will be displayed :


No Elements
ABORTING!
SCL Macro complete
This completes the testing.

28.3 Scope of the Module

An ASRS can be extremely complex. The ASRS module included in this


chapter is aimed at providing push-button modeling capability for a wide
range of ASRS. Certain restrictions have been placed in the module in
order to provide a deliverable in a shorter time-frame. It is expected that
customer response will provide direction for what enhancements are
needed. The approach of providing this module entirely in SCL allows
advanced users to enhance the module themselves.

LIMITATIONS OF THE SYSTEM:


If the model is run with animation off, the animated location of the parts is lost.
However, the actual location is retained and all statistics are correctly maintained.
At any point of time there can be only one ASRS in the model.
The model uses a data file that will not be automatically transferred when using
the Put Model function.

28.4 TUTORIAL 1

This tutorial takes the user through the process of building an ASRS. More
complex control rules for material handling are explored in Tutorial 2 in
this chapter.

- 496 -
Terminology
The following terms and definitions are employed in this tutorial.

Step 1: Create CAD Parts


Create a CAD part that represents a bin. For the purposes of the tutorial,
this has already been done. The CAD part provided is the file
def_ref_frame in the directory ASRSlib/PARTS/ASRS. Note that the
dimensions of the CAD part should be defined accurately when the
geometry is created.

Step 2: Create the Kinematic Buffer


It is necessary to model the storage locations, racks of bins, by creating a
kinematic buffer. For the purpose of this tutorial, a kinematic buffer device
is provided. This file kin_asrs.rsc in directory
ASRSlib/KINEMATICS/ASRS.

If the kinematic buffer was not provided, create the a buffer as a new
device (with a dummy base part), and add to it the CAD parts representing
racks. Once the kinematic buffer device is built, save it as a kinematic
resource, so that it can be reused in any model.

Step 3: Create the Storage System

- 497 -
In this step, a buffer class is created that will be used to model the storage
rack.

1. Select Model | Build | Element Class | Buffer. Enter the following


parameters:

Class Name: asrs


Capacity Type: Infinite
Display | Kin Data: Kin File
Choose ASRSlib/KINEMATICS/ASRS/kin_asrs.rsc as the kinematic file for the
buffer.

2. Locate the ASRS on the floor. Note that the logic will be defined later.

3. Save the model in a user-created MODEL$LIB with the name


tutorial.mdl.

NOTE: It is important that this save is performed, as the save location will be used in
determining where to create and store a data file of ASRS data.

Step 4: Define the ASRS Parameters


In this step, the number of aisles and racks in each aisle are defined.

Select User | AS/RS | ASRS Parameters | Define. An Enter ASRS


Parameters dialog box appears. Enter the following parameters:

Number of Aisles: 4
Number of Racks: 8

The aisles refer to 4 lanes in between the four facing pairs of racks.

NOTE: This data is saved in a file named tutorial_asrs_data.dat in the same directory
that the model tutorial.mdl was saved.

NOTE: The Put Model function will not copy this file.

Step 5: Define the Rack Locations


In this step, the names of racks are associated with specific CAD parts.
This is a way of mapping the abstract concept of rack to a physical entity.

- 498 -
1. Select User | AS/RS | Rack Location | Define. The asrs buffer class is
automatically selected because it is the only element in the model. A
dialog box appears that displays the rack names. Pick RACK_1.

2. Use the mouse to pick the leftmost CAD part (rack). This way, the
picked CAD part is identified as RACK_1.

3. In the same manner, define all the contiguous CAD parts with the
subsequent rack names: RACK_2, RACK_3, etc.

4. Click on Cancel.

NOTE:

If the rack whose name is selected from the dialog box has already been mapped
to a physical rack, then that physical rack is highlighted. If an attempt is made to
map this rack name to another physical rack, a warning will be given, and
confirmation requested before the change is made.
Follow a logical sequence while defining racks. The sequence in which racks are
defined determines the sequence in which stack points (bins) are created. The
sequence of creation of bins determines the sequence in which bins are searched.
Logical sequencing of racks will therefore ensure that incremental bins are
adjacent to each other and that parts are assigned to bins in a logical sequence.
Once racks are defined, they can be identified by selecting User |AS/RS | Rack
Location | Identify.

Step 6: Define the Aisles


In this step the aisles are specified.

A few important points regarding the way an aisle is represented.

An aisle is a lane through which a crane approaches bins in racks.


An aisle is defined by selecting a unique set of racks to be serviced by it.
An aisle has a vector associated with it, which is the direction along which a crane
can move. The orientation of this vector is the same as the orientation of the first
rack in the aisle.
The same rack cannot be included in more than one aisle at a time.
All racks to be serviced by an aisle, should have the same orientation.
When a rack is included in an aisle, the name of the rack is displayed as "aisle
name.rack name". That is, the name of the aisle is prefixed to the rack name for
ease of identifying the aisle associated with the racks.

- 499 -
1. Select User | AS/RS | Racks in Aisle | Add. The asrs buffer class is
automatically selected because it is the only element in the model. A
dialog box appears that lists the aisles. Pick AISLE_1 from the list.

2. A dialog box appears that lists the racks. Pick RACK1 and then pick
RACK2. This way, these 2 racks get included in the aisle AISLE_1. Note
that the racks have been renamed.

3. Click on Cancel. The dialog box that lists the aisles reappears.

4. In the same manner, define the subsequent aisles. At the end of the aisle
definition, the aisles should contain the following racks:

AISLE_1 : RACK_1, RACK_2


AISLE_2 : RACK_3, RACK_4
AISLE_3 : RACK_5, RACK_6
AISLE_4 : RACK_7, RACK_8

5. Verify if the correct racks have been included in each aisle, by using the
Show function. Select User | AS/RS | Racks In Aisle | Show.

6. If the wrong racks have been included in an aisle, they can be removed
by selecting
User | AS/RS | Racks In Aisle | Remove.

Step 7: Define the Rack Parameters


In this step, the parameters of racks are defined.

1. Select User | AS/RS | Rack Parameters | Define. The asrs buffer class is
automatically selected as it is the only element in the model.

2. A dialog box appears that lists the racks. Pick AISLE_1.RACK_1 as


the rack whose parameters are to be defined. Enter the following
parameters:

Number of Bays : 16
Number of Tiers : 5
-------------------------
Bay Width (mm) : 1889.14
Tier Height (mm) : 1006.31
Bin Depth (mm) : 1469.60
-------------------------

- 500 -
Rack Alignment : Y axis

3. Click on OK to accept the values. The dialog box listing the racks
reappears. Click on Cancel.

The dimensions have been measured earlier and used to create the bin and rack
geometries. If the user does not know the measurements of the geometries, then
these measurements must be made before entering the values.
The rack alignment of Y-axis represents that the rack is aligned along the Y-axis
of the base coorsys of the rack. This will be visible; the rack is highlighted and its
base frame becomes visible when the parameters are being entered. The rack
alignment is therefore determined by the way the CAD part was created.

NOTE: There is no need to define the remaining rack parameters. The next step will
involve copying over the parameters of the first rack to the remaining racks.

Step 8: Copy Rack Parameters


In this step, rack parameters are copied to other racks.

1. Select User | AS/RS | Rack Parameters | Copy. A dialog box appears


that lists the racks.

2. Pick AISLE_1.RACK_1 as the rack from which rack parameters will


be copied. A dialog box appears that allows selection of:

INDIVIDUAL RACKS
ALL RACKS

3. Choose ALL RACKS as the target to which the racks are copied. The
dialog box listing the racks reappears. Click on Cancel.

Step 9: Populate the Bins


In this step, part storage stack points are generated for all the bins.

1. In order to observe the bin generation, switch the visibility of the stack
points on for the asrs buffer class. This is not necessary, however it will
assist understanding.

2. Select Advanced | Anim | Add Way Points | All. A single stack point,
S1, will be visible. If necessary, move the stack point to bottom left corner
bin.

- 501 -
3. Select User | AS/RS | Bins | Populate Bins. The asrs buffer class is
automatically selected as it is the only element in the model. The message
"SCL Macro complete" will be displayed once the population is
completed.

NOTE: Normally, population of bins takes quite a while. However, if the QUEST window
is minimized as the process takes place, the population of bins will be faster.

Step 10: Relocate the Stack Points


The stack points are currently located at the corner of each bin. This step
will relocate the stack points.

1. Select User | AS/RS | Rack Location | Def Org. A dialog box appears,
displaying the racks. Pick AISLE_1.RACK_1. Note that this rack is now
highlighted.

2. The Select Option dialog box appears with options:

CRUISE
PICK POINT

3. Choose CRUISE. Cruise close to AISLE_1.RACK_1 and press the Esc


key to exit the cruise mode.

4. The Select Option dialog box reappears. Choose PICK POINT.

5. With the mouse, pick a point (mouse click) approximately at the center
of the bin for the lowest bin in AISLE_1.RACK_1 and then press the Esc
key.

6. Select User | AS/RS | Rack Location | Copy Org. A dialog box appears
displaying the rack names. Pick AISLE_1.RACK_1.

7. A Selection Mode dialog box appears with options:

INDIVIDUAL RACKS
ALL RACKS

8. Choose ALL RACKS. Click on Cancel.

9. Select User | AS/RS | Bins | Populate Bins. Minimize QUEST to


ensure faster execution of this process.

- 502 -
10. After reviewing the generated stack points, switch the visibility of the
stack points off.

Step 11: Create the Material Handling System (MHS)


Crane
In this step, machines are created to model cranes.

1. Select Model | Build | Element Class | Machine. Create a machine


class with the following settings:

Class name: crane


Number of Elements: 4

2. Locate the elements arbitrarily on the floor.

These machines will represent the four cranes that service the four aisles in the
system. Geometries and logic will be assigned later in the tutorial.

Step 12: Define the MHS Class Properties


In this step, an MHS properties template is created. An MHS properties
template contains a set of attributes that control a crane class's behavior.

1. Select User | Cranes | S/R MHS Prop Template | Cre/Mod. Choose


NEW TEMPLATE.

2. A dialog box appears, in which the MHS class properties are to be


specified. Note that these properties apply at the MHS class level and all
four elements of the class will share the common properties. The template
applies to a standardized MHS system, with four DOFs. The number of
DOFs can however be customized from 0 to 4. Keep all except the
following parameters as default:

Axis 1 Max Empty Speed : 50 mm/sec


Axis 1 Max Loaded Speed : 50 mm/sec
Axis 1 accel : 50 mm/sec^2
Axis 1 decel : 50 mm/sec^2
Axis 1 Travel Limit UPPER : 2000.00 mm
Axis 1 Travel Limit LOWER : -2000.00 mm
Note that 2000 mm may not be true in all cases, depending on the location of the
crane.

- 503 -
3. Enter the same parameters for axis 2 and axis 3.

4. For the last (fourth) axis, enter the following values, keeping these
parameters as default:

Axis 4 Max Empty Speed : 100 mm/sec


Axis 4 Max Loaded Speed : 100 mm/sec
Axis 4 accel : 100 mm/sec^2
Axis 4 decel : 100 mm/sec^2
Axis 4 Travel Limit UPPER : 1.0e+20 mm
Axis 4 Travel Limit LOWER : -1.0e+20 mm

5. Click on OK.

6. An MHS Class Template dialog box appears. Click on Cancel.

Step 13: Assign the Template to the MHS


In this step, the MHS class properties template is assigned to the crane
class.

1. Select User | Cranes | Apply Template | Assign. A dialog box appears


listing the created properties templates. In this case there is only one, so
choose it.

2. A dialog box appears listing the elements in the model. Choose one of
the machines. This will apply the MHS class properties template to the
machine class, which will be the crane class. The geometries of the
machines will be changed to represent a crane.

NOTE: The name of the MHS class properties template has been changed. The class
name of the machine has been added as a suffix.

3. Click on Cancel and save the model.

Step 14: Pick-up and Drop-off Stations


In this step, the pick-up and drop-off stations are created. The pick-up
station for an aisle is located at one end of the aisle. The drop-off point for
an aisle is located at the other end of the aisle.

- 504 -
1. Select User | Cranes | Aisle Location | Auto Define. Confirm the
selection by selecting the button again. This function automatically
assesses the location of the start of the aisles.

2. There is a need for interactively fine tuning the pick-up and drop-off
points. Select User | Cranes | Aisle Location | Pick_Up/Drop_Off Pt. A
dialog box appears listing the aisles. Pick an aisle.

NOTE: The option SELECT RACK allows the aisle to be selected by choosing a rack in
the aisle.

3. The Pick_up_Pt/Drop_off_Pt dialog box appears, displaying the


options:

PICK UP POINT
DROP OFF POINT
Select PICK UP POINT.

4. A dialog box appears displaying the following options:

ROTATE FRAME
TRANSLATE FRAME
REGISTER POSITION
A green frame comes into the model. Choose TRANSLATE FRAME.

5. Translate the green frame to the location and orientation of the pick-up
point, somewhere near the center of the entrance to the aisle. When the
frame is correctly located, select User | Crane | Aisle Location |
Pick_Up/Drop_Off Pt, choose REGISTER POSITION from the dialog
box.

NOTE: In this tutorial, the green frame is created in the desired orientation. Hence, only
translation, not rotational movements are made.

NOTE: Aisles should be defined with their X-axis pointing along (parallel to) the lane
along which the crane will travel.

6. The drop-off point location is defined in a similar manner, near the end
of the aisle.

NOTE: If the drop-off point is not defined, it coincides with the pick-up point.

7. Repeat the above process for each of the four aisles.

- 505 -
Step 15: Crane Location
In this step the cranes are located in the aisles at their home position.

NOTE: Locating a crane can be also be performed using standard location functions.

1. Select User | Cranes | S/R Vehicle Home Position | Locate Elem On


Aisle. A dialog box appears displaying the elements in the model. Pick
crane_1.

2. Select an aisle to locate an crane on. A dialog box appears displaying


the aisles in the model. Pick AISLE_1. A Pick_Up_Pt/Drop_Off_Pt dialog
box appears displaying the options:

PICK UP POINT
DROP OFF POINT
Choose PICK UP POINT. The dialog box reappears. Click on Cancel.

3. Repeat this process for all four cranes. On completion click on Cancel
until the process is terminated.

NOTE: It is necessary to align the X-axis of the crane along the length of the aisle.

Step 16: Assigning Cranes to Individual Aisles


In this step, each crane is assigned to an aisle.

NOTE: Only one crane can be assigned to an aisle, and a crane can only be assigned to
one aisle.

1. Select User | Cranes | MHS in Aisle | Assign. The Select an Element


dialog box appears. Pick crane_1.

2. The Select an Aisle dialog box appears displaying the aisles in the
model. Pick AISLE_1.

3. Repeat this process to assign the four cranes to the four aisles. On
completion, click on Cancel until the process is terminated.

4. To remove a crane-to-aisle assignment, select User | Cranes | MHS in


Aisle | Remove.

5. Save the model.

- 506 -
Step 17: Bin Storage Capacity
In this step, the storage capacity of the bins and cranes is defined for each
part class.

1. Create five Part Classes: PartA, PartB, PartC, PartD, PartE. Assign
different colors to them for better visualization.

2. Select User | Domains | Storage Regulations | Pclass Properties. The


Part Class dialog box appears, listing the available part classes. Choose
PartA from the list.

3. The Parameters for Part Class<Part? dialog box appears. Enter the
following values:

Default Bin Capacity: 5


Shuttle Capacity (for S/R MHS capacity factor of 1): 5

4. Repeat the process for each part class.

5. Click on Cancel.

NOTE: The implication of "S/R MHS capacity factor" is as follows: In order to simulate
cranes of different capacities there is a concept called Material Handling Load capacity
factor. This parameter is definable for each crane class properties template created by
selecting User | Cranes | S/R MHS Prop Temp | Cre/Mod. By default the "Load Capacity
Factor" for a crane class is 1.

Step 18: Create a Crane Controller


In this step, a machine is created that will act as a controller for the cranes.

1. Select Model | Build | Element Class | Machine. Create a machine with


the name crane_controller and all other values default.

2. Locate the machine anywhere. The logic will be assigned later.

Step 19: Create Arrival and Departure Stations


In this step, buffers are created to model the location of arriving and
departing parts.

- 507 -
1. Select Model | Build | Element Class | Buffer. Create a new buffer class
with the following parameters:

Class Name : Arr_Stn


Number of elements: 4
Display file : QUESTlib/DEFAULTS/Arrival

2. Locate the arrival stations (buffers) one at the start of each aisle.

3. Create another new buffer class with the following parameters:

Class Name : Dep_Stn


Number of elements: 4
Display file : QUESTlib/DEFAULTS/Depart

4. Locate the departure stations (buffers) one at the end of each aisle.

Step 20: Model Part Arrivals


In this step, a source is created to model part arrivals.

1. Select Model | Build | Element Class | Source. Create a source with the
following settings:

IAT: Constant 300 secs


Lot Size: 5
Part Fractions: 1 for all part classes
Logics | Route Logic: Cyclic Order

2. Locate the source near to the arrival stations.

Step 21: Model Part Orders


In this step, a sink is created to request parts.

1. Select Model | Build | Element Class | Sink. Create a sink with the
following settings:

Input Type: Pull


IRT: Constant 300 secs
Request Lotsize: 5
Request Part Fractions: 1 for all part classes
Logics|Request Propagation: Cyclic Request

- 508 -
2. Locate the sink near to the departure stations.

Step 22: Establish Connections


In this step, the model elements are connected to permit parts to flow.

NOTE: The way in which the connections are made is important. An ASRS is a
combination of a push system (parts arriving) and pull system (requests). Therefore, all
connections are to be made correctly, and in/out types are to be correctly set to push/pull.

1. All inflows into the ASRS are push-based.

2. All outflows from the ASRS are pull-based, i.e. based on requests.

PUSH CONNECTION:

Class connection from source class to arrival station buffer class.


Class connection from arrival station buffer class to crane class.
Class connection from crane class to asrs class.
Class connection from asrs class back to crane class (second input).
Class connection from crane class (second output) to departure station buffer
class.
Class connection from departure station buffer class to sink.

PULL CONNECTION:

Class connection from departure station buffer class to asrs.

Step 23: Specify In/Out Types to Push/Pull


In this step, pull element classes are established.

Set the input/output types of the following element classes as shown:

Sink1
Input Type: Pull
Dep_Stn
Input Type: Pull
Output Type: Pull
asrs
Input Type: Push
Output Type: Pull

- 509 -
The rest should have Push input and output.

Step 24: Assign Logics


1. Assign logics to the element classes as follows:

Arr_Stn
Process Logic: ASRS ARRIVAL STATION Process Logic
Route Logic: ASRS ARRIVAL STATION Route Logic
Init Logic: ASRS ARRIVAL STATION Init Logic
asrs
Process Logic: ASRS Process Logic
Route Logic: ASRS PULL Route Logic
Init Logic: ASRS Init Logic
Request Logic: ASRS Request Logic
crane
Process Logic: ASRS CRANE Process Logic
crane_controller
Process Logic : ASRS CRANE CONTROLLER Process Logic

NOTE: It is essential to set or verify the logics whenever the input or output type is
changed.

2. Save the model.

3. Clear the world. This is important as some data is consolidated at this


point.

Step 25: Running the Model


1. Load the model.

2. Run the model.

3. Whenever a BCL inquire command is executed in SCL, a message will


be displayed in the message window. To suppress these messages, select
Pref | Preferences | Environment | Dialog and set Message Dialog
Display to User.

NOTE: Certain additional messages will be displayed that are used to ensure
appropriate graphical updates.

- 510 -
28.5 Advanced ASRS

The following tutorial builds on Tutorial 1 in this chapter. Tutorial 1 must


be completed before continuing with the advanced Tutorial 2.

Advanced Terminology

Storage Rules
The following are some examples of storage rules:

Part A is a heavy item and therefore needs to be stored in the bottom-most tier of
any rack.
Part B needs to be stored in the first tier of any rack.
Part C should not be stored in the second tier of the rack.
Part D is a high transaction (high demand) item and should be stored in those
racks (or aisles) which are closest to the pick-up and delivery stations.
Part E should not be stored in racks of aisle_1.

These storage rules can be taken care of very easily by using the storage
domain feature.

Storage Domains
Storage domains are characterized by the following parameters:

Domain Name A default or specified name.


Rack Rack containing the storage domain.
Start Bay The starting bay for the storage domain.
Start Tier The starting tier for the storage domain.

- 511 -
End Bay The ending bay for the storage domain.
End Tier The ending tier of the storage domain.
Domain Span Mode ZIGZAG or RECTANGULAR.

Storage Domain Span Mode


Merely defining the starting and ending points does not completely define
the storage domain. How the storage domain spans between these two
points determines the range of bins that lie in this storage domain. For
example, if a storage domain is defined with the starting and ending points
as (3, 1) and (5, 3) respectively, to be interpreted as (bay, tier), then a
number of configurations for span of this storage domain are possible.
However, the two most generic configurations are ZIGZAG and
RECTANGULAR. They are graphically represented below. In either case,
bins are filled from left to right moving horizontally first to fill the first
tier, then moving to the second tier etc. See the following examples.

Storage domain span configuration 1 : span mode ZIGZAG

Storage domain span configuration 2 : span mode RECTANGULAR

- 512 -
Storage Class
A storage class serves two purposes:

A storage class is used to group together a set of related storage domains.


Storage rules for individual part classes are applied to storage classes.

A storage domain lies in one rack because a storage domain can't span
across racks. A storage class is used to group together several storage
domains into a class to which common storage rules can be applied.

NOTE:

A storage domain can be in only one storage class at a time.


Storage domains can be easily added to and removed from a storage class.
There is no limitation on the number of storage domains and storage classes that
can be created.
A storage class is automatically assigned to all part classes in the model.
A distinct storage rule can be applied to each combination of storage class and
part class.

Application of Storage Rules


To apply a storage rule to a particular combination of part class (e.g., Part
A) and storage class (e.g., storage_class_1), enter the following
parameters:

Storage Regulation: the following options are available to the user:

-Storage ALLOWED
-Storage PROHIBITED
-Storage PREFERRED
-Storage MANDATORY
Capacity of the part class in the storage class.

For Storage Regulation, Storage ALLOWED means that the relevant part
class is allowed to reside in the bins of all the domains that lie in that
storage class. This is the default setting, meaning that if the user creates
some storage class and assigns some domains to the class and then does
nothing else, parts by default will be allowed to be stored in the domains
included in the class.

- 513 -
Storage PROHIBITED means that the particular part class is not allowed
to be stored in the domains of the storage class.

Storage PREFERRED means that the domains of the relevant storage class
should be considered first for storage of a part of the relevant part class.
Once all bins in the relevant domains are occupied, then other bins be
considered for storing this part class.

Storage MANDATORY means that the relevant part class can only be
stored in the domains of the relevant storage class and nowhere else.

Capacity of Part Class in Storage Class represents the maximum number


of parts of the relevant part class that are allowed to be stored in each of
the bins of the domains of the relevant storage class. Using this feature,
racks of varying sizes can be simulated. Thus we may have a rack whose
individual bins can accommodate 5 numbers of a certain PartA, and
another rack which can accommodate 10 numbers.

Using the same feature, we can model a situation in which individual bins
of a rack can accommodate 5 numbers of PartA, and 8 numbers of PartB.

There is the option of not specifying any storage domain or storage class.
Specify a storage capacity for each and every part class, and it will be
globally applicable to all bins in the system.

28.6 Tutorial 2, Storage Domains and


Storage Rules

Consider the following set of storage rules:

PartA is a heavy item and therefore needs to be stored in the bottom-most tier of
any rack.
PartB needs to be stored in the first tier of any rack.
PartC should NOT be stored in the second tier of the rack.

These storage rules are displayed graphically below:

- 514 -
This tutorial implements the storage rules described above.

Step 1: Creating Storage Domains for PartA's Storage


Rule
This step defines a storage domain that will be used to implement the
storage rule that restricts Part A's to ground level rows in all racks.

1. Load the model saved at the end of Tutorial 1 of this chapter.

2. Select User | Domains | Storage Domain Parameters | Cre/Mod.


Choose Create a New Domain from the dialog box. Complete the Define
Parameters for Domain dialog box as follows:

Domain Name : Storage_Domain_1


Domain Span Mode: RECTANGULAR
Rack Name: AISLE_1.RACK_1
Start Bay Num: 1
Start Tier Num: 1
End Bay Num: 6
End Tier Num: 1
These specified storage domain parameters are tailored to implement the storage
rule for PartA in RACK1.

3. The dialog box displaying Create a New Domain reappears. It now


includes the storage domain just created.

4. Repeat this process for AISLE_1.RACK_2 through AISLE_4.RACK_8.

Step 2: Creating Storage Domains for PartB's Storage


Rule

- 515 -
In this step, storage domains are created that will be used to implement the
storage rule for PartB.

1. Select User | Domains | Storage Domain Parameters | Cre/Mod. Create


a new storage domain with the following characteristics:

Domain Name: Storage_Domain_9


Domain Span Mode: RECTANGULAR
Rack Name: AISLE1.RACK_1
Start Bay Num: 1
Start Tier Num: 4
End Bay Num: 6
End Tier Num: 4

2. The dialog box displaying Create a New Domain reappears. It now


includes the storage domain just created.

3. Repeat this process for AISLE_1.RACK_2 through AISLE_4.RACK_8.

Step 3: Creating Storage Domains for PartC's Storage


Rule
In this step, storage domains are created that will be used to implement the
storage rule for PartC.

1. Select User | Domains | Storage Domain Parameters | Cre/Mod. Create


a new storage domain with the following characteristics:

Domain Name: Storage_Domain_17


Domain Span Mode: RECTANGULAR
Rack Name: AISLE1.RACK_1
Start Bay Num: 1
Start Tier Num: 2
End Bay Num: 6
End Tier Num: 2

2. The dialog box displaying Create a New Domain reappears. It now


includes the storage domain just created.

3. Repeat this process for AISLE_1.RACK_2 through AISLE_4.RACK_8.

4. Click on Cancel.

- 516 -
Step 4: Creating Storage Classes
In this step, storage classes are created for each of the three storage rules
required.

1. Select User | Domains | Storage Class | Cre/Mod. Choose Create a


New Class from the dialog box. A dialog box appears displaying a default
name for the storage class. Click on OK to select the default name for the
storage class.

2. Create two more storage classes as above.

3. Click on Cancel.

Step 5: Adding Storage Domains to Storage Classes


In this step, storage domains are added to storage classes.

1. Select User | Domains | Domains in Class | Add. A dialog box appears.


Pick Storage_Class_1. Click on Cancel.

2. A dialog box appears. Pick Storage_Domain_1. This adds


Storage_Domain_1 to Storage_Class_1.

3. Continue adding Storage_Domain_2 through Storage_Domain_8 to


Storage_Class_1.

4. Click on Cancel.

NOTE: Any storage rule applied to Storage_Class_1 will therefore apply to


Storage_Domain_1 through Storage_Domain_8. That is, the first row of all eight racks.

5. Pick Storage_Class_2 and add all eight storage domains created for
PartB's storage rules to this storage class.

6. Click on Cancel.

7. Pick Storage_Class_3 and add all eight storage domains created for
PartC's storage rules to this storage class.

8. Click on Cancel until the process is terminated.

- 517 -
Step 6: Adding Storage Rules to Storage Classes
In this step, storage rules will be applied to storage classes.

1. Select User | Domains | Storage Regulations | Specify Regulation. A


dialog box appears displaying the Part Classes. Pick PartA.

2. A dialog box appears displaying the storage classes. Pick


Storage_Class_1. A dialog box appears that allows the specification of the
storage rule parameters. Define the following settings:

Storage regulation: Storage MANDATORY


Capacity in Storage Class: 1
During run time, all parts of class PartA, will be stored in the domains included in
Storage_class_1.

3. Similarly, define storage rules for the remaining part classes.

PartB
Storage regulation: Storage MANDATORY
Capacity in Storage Class: 1
PartC
Storage regulation: Storage PROHIBITED
Capacity in Storage Class: 1

4. Click on Cancel.

5. Save the model.

6. Run the model.

Additional Information
Defining storage domains and classes is not mandatory. They need to be
defined if and only if special storage rules apply to certain part classes.

Frequently Asked Questions

What happens to the rest of the Part classes for which no storage class is
created?

What happens to the storage areas outside the scope of all storage domains
defined?

- 518 -
What happens if a storage class is defined, but not used?

What happens if no domains are included in the storage classes?

The answer to all of these questions is:

No damage is done. If no storage class is applied to a part class, then, by


default, storage is open for that part class in that storage class. The default
capacity for storage in this class is shown as one. The default capacity can
be changed, by using the Pclass Properties button in User | Domain |
Storage Regulations. This way of defining the storage capacity of a
specified part class in a specified storage class, might also provide an idea
as to how to implement the same storage domain and class features for
modeling scenarios where the capacity to store the same part class is
different in different racks. This feature will basically be useful for
modeling racks of different sizes.

28.7 SCL Code Organization

Installation Issues : Code Files, Configuration Settings,


Etc.
Since the entire ASRS code is in SCL, users have the option of modifying
the code to suit their needs. The entire ASRS code is distributed in the
library ASRSlib as follows:

Declarations

ASRSlib/INCLUDE/ASRS/global.inc
ASRSlib/INCLUDE/ASRS/all_funcs_proto.inc

global.inc contains all the global declarations.


all_funcs_proto.inc contains all the function prototypes (function
declarations).

These 2 files will be #included at the top of all files (logics, functions,
SCL macros) as:

#include <ASRS/global.inc>
#include <ASRS/all_funcs_proto.inc>

- 519 -
Library Functions

ASRSLIB/USERDEF/LOGICS/asrsFuncs_ACT_funcs.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_bins_layout_funcs_lib.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_data_upld_dump.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_general_funcs_lib.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_global_funcs_lib.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_MHS_funcs_lib.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_storage_class_funcs_lib.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_UPD_funcs.scl
ASRSLIB/USERDEF/LOGICS/asrsFuncs_user_utility_funcs_lib.scl

Logics

ASRSLIB/USERDEF/LOGICS/asrsLog_arrive_stn_init.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_arrive_stn_proc.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_arrive_stn_route.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_asrs_init.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_MHS_class_proc_logic.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_MHS_controller_proc_logic.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_asrs_proc.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_asrs_pull_route.scl
ASRSLIB/USERDEF/LOGICS/asrsLog_asrs_req.scl

Files bearing the prefix asrsLog represent the logic files, to be assigned to
various ASRS entities. The various logic files which are part of the ASRS
macros are explained below:

asrsLog_MHS_class_proc_logic.scl

Contains the process logic asrs_MHS_class_proc_logic( ) procedure, which needs


to be assigned to the ASRS Storage / Retrieval Machines. This logic is referred to
by the name "ASRS CRANE Process Logic".

asrsLog_MHS_controller_proc_logic.scl

Contains the process logic asrs_MHS_controller_proc_logic( ) procedure for the


crane controller (machine). This logic is referred to by the name "ASRS CRANE
CONTROLLER Process Logic".

asrsLog_arrive_stn_init.scl

Contains the init logic arrive_stn_init( ) procedure for arrival stations (buffers).
This logic is referred to by the name "ASRS ARRIVAL STATION Init Logic".

- 520 -
asrsLog_arrive_stn_proc.scl

Contains the process logic asrs_arrive_stn_proc( ) procedure for arrival stations


(buffers). This logic is referred to by the name "ASRS ARRIVAL STATION
Process Logic".

asrsLog_arrive_stn_route.scl

Contains the route logic asrs_arrive_stn_route( ) procedure for arrival stations


(buffers). This logic is referred to by the name "ASRS ARRIVAL STATION
Route Logic".

asrsLog_asrs_init.scl

Contains the init logic asrs_init( ) procedure for the buffer representing the ASRS
storage system. It is referred to as "ASRS Init Logic".

asrsLog_asrs_proc.scl

Contains the process logic asrs_proc( ) procedure for the buffer representing the
ASRS storage system. It is referred to by the name "ASRS Process Logic".

asrsLog_asrs_pull_route.scl

Contains the pull route logic asrs_pull_route( ) procedure for the ASRS buffer. It
is referred to as "ASRS PULL Route Logic".

asrsLog_asrs_req.scl

Contains the request logic asrs_req( ) procedure for the ASRS buffer. It is referred
to as "ASRS Request Logic".

SCL Macros

ASRSlib/SCLMACROS/ASRS/BASIC_PARAMS/*
ASRSlib/SCLMACROS/ASRS/STORAGE_CLASS/*
ASRSlib/SCLMACROS/ASRS/GEN/*
ASRSlib/SCLMACROS/ASRS/MHS/*

These directories contain all the macro files that are mapped to the user.

- 521 -

Anda mungkin juga menyukai