You are on page 1of 918

USER GUIDE

ISBN: 978-0-9825040-4-8
Copyright 2013 by Imagine That Inc. All rights reserved. Printed in the United States of America.
You may not copy, transmit, or translate all or any part of this document in any form or by any means,
electronic or mechanical, including photocopying, recording, or information storage and retrieval systems, for any purpose other than your personal use without the prior and express written permission of
Imagine That Inc.
License, Software Copyright, Trademark, and Other Information
The software described in this manual is furnished under a separate license and warranty agreement. The
software may be used or copied only in accordance with the terms of that agreement. Please note the
following:
ExtendSim blocks (including icons, dialogs, and block code) are copyright by Imagine
That Inc. and/or its Licensors. ExtendSim blocks contain proprietary and/or trademark information. If you build blocks, and you use all or any portion of the blocks from the BPR,
Discrete Event, Flow, Item, Mfg, Rate, or Quick Blocks library in your blocks, or you include those ExtendSim blocks (or any of the code from those blocks) in your libraries, your
right to sell, give away, or otherwise distribute your blocks and libraries is limited. In that
case, you may only sell, give, or distribute such a block or library if the recipient has a legal
license for the ExtendSim product from which you have derived your block(s) or block
code. For more information, contact Imagine That Inc.
Imagine That!, the Imagine That logo, ExtendSim, Extend, and ModL are either registered trademarks
or trademarks of Imagine That Incorporated in the United States and/or other countries. Mac OS is a
registered trademark of Apple Computer, Inc. Microsoft is a registered trademark and Windows is a
trademark of Microsoft Corporation. GarageGames, Inc. is the copyright owner of the Torque Game
Engine (TGE), and the copyright for Stat::Fit is owned by Geer Mountain Software. All other product
names used in this manual are the trademarks of their respective owners. TGE and Stat::Fit are licensed
to Imagine That, Inc. for distribution with ExtendSim. All other ExtendSim products and portions of
products are copyright by Imagine That Inc. All right, title and interest, including, without limitation,
all copyrights in the Software shall at all times remain the property of Imagine That Inc. or its Licensors.
Extend was created in 1987 by Bob Diamond; it was rebranded as ExtendSim in 2007.
Chief architects for ExtendSim 9:
Bob Diamond, Steve Lamperti, Dave Krahl, Anthony Nastasi, Cecile Pieper
Graphics, documentation, and production for ExtendSim 9:
Carla Sackett, Pat Diamond, and Kathi Hansen

Imagine That Inc 6830 Via Del Oro, Suite 230 San Jose, CA 95119 USA
408.365.0305 fax 408.629.1251 info@extendsim.com
www.extendsim.com

Table of Contents
USER GUIDE
TABLE OF CONTENTS
ABOUT EXTENDSIM
Preface.................................................................................................................. 1
Introduction......................................................................................................... 3
Why simulation is important ..................................................................................................4
Simulation with ExtendSim ....................................................................................................4
What ExtendSim can do .........................................................................................................4
Modeling capabilities ......................................................................................................................4
Simulation architecture ...................................................................................................................5

Whats new in this release........................................................................................................5


Levels of use ............................................................................................................................5
About this User Guide.............................................................................................................6
Additional resources ................................................................................................................7
Model illustrations ..................................................................................................................8

TUTORIAL
Running a Model ................................................................................................. 13
Opening the Reservoir model..................................................................................................14
Model basics............................................................................................................................15
Blocks .............................................................................................................................................15
Connections....................................................................................................................................16

Blocks used in the Reservoir model .........................................................................................17


Running the Reservoir model..................................................................................................18
Displaying the results on the Plotter........................................................................................18
Notebooks...............................................................................................................................19
Making changes to the model..................................................................................................19
Adding and removing blocks ...........................................................................................................20
Changing dialog parameters ............................................................................................................20

Other modifications ................................................................................................................21

Building a Model ................................................................................................. 23


Steps to create the Reservoir model .........................................................................................24
Opening a new model worksheet ............................................................................................25
Setting the simulation parameters............................................................................................25
Building the model..................................................................................................................25
Basic steps .......................................................................................................................................25
About libraries.................................................................................................................................26
Adding blocks to the model.............................................................................................................26
Connecting blocks ..........................................................................................................................27

Working with block dialogs.....................................................................................................29


Rainfall source.................................................................................................................................30
Stream source ..................................................................................................................................31
Combining the sources....................................................................................................................31
Water in the reservoir ......................................................................................................................31

Displaying the results ......................................................................................................................32

Running the simulation ..........................................................................................................33


Additional ways to connect blocks...........................................................................................33
Straight line connection ..................................................................................................................33
Multi-segment line connection........................................................................................................33
Named connection..........................................................................................................................34

Plotting against multiple axes ..................................................................................................35


The final Reservoir model .......................................................................................................36
Additional enhancements ........................................................................................................36
Introduction to hierarchy ................................................................................................................36
The ExtendSim Navigator...............................................................................................................37

Cloning...................................................................................................................................38
Other modifications ................................................................................................................39
Next steps................................................................................................................................40

Simulation Concepts ............................................................................................ 41


Systems, models, and simulation .............................................................................................42
Systems ...........................................................................................................................................42
Models ............................................................................................................................................42
Simulation ......................................................................................................................................43

Modeling methodologies.........................................................................................................43
Comparison of main modeling methodologies ................................................................................44
Comparison table............................................................................................................................45
Table of continuous, discrete event, and discrete rate differences .....................................................45

Other modeling approaches ....................................................................................................47


Monte Carlo modeling....................................................................................................................47
State/Action models ........................................................................................................................49
Agent-based models ........................................................................................................................51

The modeling process..............................................................................................................54


Goals of modeling ...........................................................................................................................54
The simulation process....................................................................................................................55
Before you build a model ................................................................................................................55
Refining models ..............................................................................................................................56
Model verification ...........................................................................................................................56
Model validation .............................................................................................................................57

Additional modeling terminology............................................................................................57


Model parameters, variables, inputs, and outputs ............................................................................57
Constant values and random variables.............................................................................................57

CONTINUOUS MODELING
Introduction......................................................................................................... 59
How the Continuous module is organized ..............................................................................60
Blocks for building continuous models....................................................................................60
Using the ExtendSim blocks............................................................................................................60
Building custom continuous blocks.................................................................................................60
Third-party libraries ........................................................................................................................61

Application areas .....................................................................................................................61


Next steps................................................................................................................................62

Tutorial ................................................................................................................ 63
Removing overflow from the Holding Tank ............................................................................64
Setting the maximum capacity ........................................................................................................64
Determining if there is too much water...........................................................................................65

Comparing contents to overflow limit ............................................................................................ 66


Calculating how much water to remove.......................................................................................... 66
Removing the overflow ................................................................................................................... 67

Simplifying the model .............................................................................................................68


Adding an Equation block .............................................................................................................. 68
Specifying input variables ............................................................................................................... 69
Specifying output variables ............................................................................................................. 69
Entering the equation ..................................................................................................................... 69

Improving the accuracy of the model ......................................................................................70


Next steps................................................................................................................................71

Areas of Application............................................................................................. 73
Scientific .................................................................................................................................74
Predator/Prey.................................................................................................................................. 74
Drug Ingestion ............................................................................................................................... 75

Engineering.............................................................................................................................77
Noisy FM system............................................................................................................................ 77

Business ..................................................................................................................................78
Inventory Management .................................................................................................................. 78

Social sciences .........................................................................................................................79


City Planning ................................................................................................................................. 79

Custom blocks ........................................................................................................................81


Planet Dance .................................................................................................................................. 81
Fish Pond ....................................................................................................................................... 82

Concepts, Tips, and Techniques........................................................................... 83


Simulation timing ...................................................................................................................84
Delta time ...............................................................................................................................84
Delta times other than 1 ................................................................................................................. 85
Determining which dt to use .......................................................................................................... 85
Specifying dt or the number of steps............................................................................................... 85

Feedback and delays ................................................................................................................86


Feedback......................................................................................................................................... 87
Delays in feedback loops................................................................................................................. 87

Integration ..............................................................................................................................87
Simulation order .....................................................................................................................88
Flow order ...................................................................................................................................... 88
Left to right order ........................................................................................................................... 88
Custom order ................................................................................................................................. 88

Mixing block types..................................................................................................................89


Connections to multiple inputs...............................................................................................89
Using plotters as inputs ...........................................................................................................89
Using a plot line as reference or standard.................................................................................90
Uncluttering models................................................................................................................90

DISCRETE EVENT MODELING


Introduction ........................................................................................................ 91
About the Discrete Event module............................................................................................92
How the Discrete Event module is organized.................................................................................. 92
What the Introduction to the Discrete Event module covers........................................................... 93

Discrete event systems and processes .......................................................................................93


Blocks for building discrete event models ................................................................................94
Item library..................................................................................................................................... 94

Third-party libraries ........................................................................................................................94


Creating custom discrete event blocks .............................................................................................94

Terminology and architecture..................................................................................................95


Overview of a discrete event model .................................................................................................95
Layout of a discrete event model .....................................................................................................95
Executive block ...............................................................................................................................95
Items and informational values........................................................................................................95
Item properties................................................................................................................................96
Events .............................................................................................................................................96
Activities .........................................................................................................................................97
Resources ........................................................................................................................................97
Connectors......................................................................................................................................97
Closed and open systems.................................................................................................................97
Types of item handling blocks .........................................................................................................98

Application areas .....................................................................................................................98


Next steps................................................................................................................................99

Tutorial ................................................................................................................ 101


A basic discrete event model ....................................................................................................102
About the model .............................................................................................................................102
Starting a model and setting simulation parameters.........................................................................102
Start small .......................................................................................................................................103

Adding complexity ..................................................................................................................105


Creating a second wash bay .............................................................................................................105
Explicit routing ...............................................................................................................................106
Requiring resources .........................................................................................................................107
Item attributes.................................................................................................................................108

Further exploration .................................................................................................................110

Items, Properties, and Values ............................................................................... 113


Blocks of interest .....................................................................................................................114
Item generating and removing.........................................................................................................114
Item properties................................................................................................................................114
Property-aware blocks .....................................................................................................................115

Item generation .......................................................................................................................115


Generating items at random intervals..............................................................................................115
Random intervals with dynamic parameters ....................................................................................116
Generating items according to a schedule........................................................................................118

Item properties........................................................................................................................119
Item attributes.................................................................................................................................119
Priority............................................................................................................................................126
Quantities .......................................................................................................................................128
Other item properties......................................................................................................................130

Queueing.............................................................................................................. 131
Blocks of interest .....................................................................................................................132
Queueing disciplines ...............................................................................................................132
Queue/server systems ..............................................................................................................133
M/M/1 queues ................................................................................................................................134
Priority queues ................................................................................................................................134

Queueing considerations .........................................................................................................135


Blocking..........................................................................................................................................135
Balking............................................................................................................................................135
Reneging .........................................................................................................................................135
Jockeying ........................................................................................................................................136

Sorting items using the Queue Equation block........................................................................137


How the block works...................................................................................................................... 137
Variables ......................................................................................................................................... 138
Ranking rules ................................................................................................................................. 139
Least dynamic slack ........................................................................................................................ 139
Minimizing setup ........................................................................................................................... 140
Maximizing service levels ................................................................................................................ 141
Combined rules .............................................................................................................................. 142

Matching items using the Queue Matching block ...................................................................142


Queue Matching model.................................................................................................................. 143
Other models that use the Queue Matching block.......................................................................... 143

Advanced queue topics ............................................................................................................143


Viewing and manipulating queue contents ..................................................................................... 143
Initializing a queue ......................................................................................................................... 144

Animating queue contents.......................................................................................................145

Routing ................................................................................................................ 147


Commonly used blocks ...........................................................................................................148
Blocks that route items ................................................................................................................... 148
Blocks that affect the flow of items ................................................................................................. 148

Items from several sources .......................................................................................................149


Select Item In dialog ....................................................................................................................... 150
Merging several item flows into one stream..................................................................................... 151
Balancing multiple input lines ........................................................................................................ 151
Throw Item and Catch Item blocks for merging item streams ........................................................ 152

Items going to several paths.....................................................................................................153


Select Item Out dialog .................................................................................................................... 154
Implicit routing .............................................................................................................................. 156
Simple routing................................................................................................................................ 156
Scrap generation ............................................................................................................................. 158
Sequential ordering......................................................................................................................... 158
Explicit ordering............................................................................................................................. 159
Routing decisions based on Item properties .................................................................................... 160
Conditional routing........................................................................................................................ 162
Machines that can only process certain types of items ..................................................................... 166

Processing ............................................................................................................ 169


Commonly used blocks ...........................................................................................................170
Systems and processes ..................................................................................................................... 170

Processing in series ..................................................................................................................171


Processing in parallel ...............................................................................................................172
Parallel processing using one block ................................................................................................. 172
Simple parallel connections............................................................................................................. 172

Setting the processing time......................................................................................................173


Processing time for an Activity........................................................................................................ 173
Processing time for other activity blocks ......................................................................................... 174
Fixed processing time...................................................................................................................... 174
Scheduled processing time .............................................................................................................. 174
Random processing time................................................................................................................. 175
Custom processing time.................................................................................................................. 176
Implied processing time.................................................................................................................. 177
Cumulative processing time: time sharing....................................................................................... 177
Adding setup time .......................................................................................................................... 178

Bringing an activity on-line .....................................................................................................179


Scheduling activities ....................................................................................................................... 179

Controlling the flow of items to an activity .............................................................................181


Fixed number of items ....................................................................................................................181
Fixed period of time ........................................................................................................................183

Interrupting processing ...........................................................................................................183


Preemption .....................................................................................................................................184
Shutting down ................................................................................................................................185

Multitasking............................................................................................................................190
Simulate Multitasking Activity model .............................................................................................191

Kanban system ........................................................................................................................191


Transportation and material handling......................................................................................192
Travel time ......................................................................................................................................192
Transport blocks..............................................................................................................................193
Convey Item blocks.........................................................................................................................195
How the length is calculated............................................................................................................196
Transportation models.....................................................................................................................197

Batching and Unbatching .................................................................................... 199


Blocks of interest .....................................................................................................................200
Batching..................................................................................................................................200
Batch dialog ....................................................................................................................................201
Simple batching ..............................................................................................................................202
Batching by matching items ............................................................................................................203
Batching a variable number of items................................................................................................204
Properties when items are batched...................................................................................................205
Delaying kits ...................................................................................................................................207

Unbatching .............................................................................................................................207
Simple unbatching ..........................................................................................................................208
Variable batching and unbatching ...................................................................................................209
Properties when items are unbatched...............................................................................................210

Preserving the items used to create a batch ..............................................................................210


Both blocks choose to preserve uniqueness ......................................................................................210
Either block chooses to preserve uniqueness ....................................................................................211

Additional models ...................................................................................................................211

Resources and Shifts............................................................................................. 213


Blocks of interest .....................................................................................................................214
Resource pool blocks.......................................................................................................................214
Other resource blocks......................................................................................................................215

Modeling resources..................................................................................................................215
How to model resources ..................................................................................................................215
Resource Pool method.....................................................................................................................216
Resource Item method ....................................................................................................................219
Other methods for modeling resources............................................................................................221

Closed and open systems.........................................................................................................222


Scheduling resources ...............................................................................................................222
Scheduling resource pools and resource items..................................................................................222
Scheduling resource items ...............................................................................................................223

The Shift block .......................................................................................................................224


Shift types and what they control ....................................................................................................224
Status connectors ............................................................................................................................225
Shift models ....................................................................................................................................225

Advanced Resource Management ............................................................................................229


How Advanced Resource Management works .................................................................................229
Definitions......................................................................................................................................230

Tutorial ...................................................................................................................................230
Phase I: Adding ARM to a model............................................................................................231
Add the Resource Manager block.................................................................................................... 231
Resource Pool ................................................................................................................................. 232
Queue ............................................................................................................................................ 233
Resource Pool Release ..................................................................................................................... 234
Save and run................................................................................................................................... 234

Phase II: Organizing resources.................................................................................................235


Resource Pools................................................................................................................................ 236
Requirements tab of Resource Manager .......................................................................................... 236
Create a string attribute .................................................................................................................. 238
Save and run................................................................................................................................... 240
Results ............................................................................................................................................ 240
Gathering statistical information .................................................................................................... 241

Phase III: An alternate method for creating pools ....................................................................241


Use a Resource Manager to create a pool and resources................................................................... 241
Create a resource requirement......................................................................................................... 243

Additional information ...........................................................................................................245


Groups ........................................................................................................................................... 246
Resource orders............................................................................................................................... 247
Status and transitions...................................................................................................................... 247
Properties ....................................................................................................................................... 248
Release rules ................................................................................................................................... 250
Policies ........................................................................................................................................... 251

Resource requirements ............................................................................................................252


Hierarchy of a resource requirement ............................................................................................... 252
Steps to take before creating............................................................................................................ 252
How to create a new resource requirement...................................................................................... 253
Filtering conditions......................................................................................................................... 253
Quantity expressions....................................................................................................................... 254
Resource requirements.................................................................................................................... 257
Default resource requirements ........................................................................................................ 258

Comparison of the three resource methods..............................................................................259


The Advanced Resources database ...........................................................................................260
Blocks that compose the ARM system.....................................................................................260
Primary transactions for ARM.................................................................................................261
Item-initiated ARM transactions .................................................................................................... 262
Resource Pool-initiated ARM transactions ...................................................................................... 264
Shift................................................................................................................................................ 265

Activity-Based Costing......................................................................................... 267


Blocks of interest .....................................................................................................................268
Modeling with activity-based costing.......................................................................................269
Item types....................................................................................................................................... 269
Defining costs and cost rates........................................................................................................... 270
Combining resources with cost accumulators.................................................................................. 273
Combining cost accumulators ........................................................................................................ 275
Working with cost data................................................................................................................... 275

How ExtendSim tracks costs ...................................................................................................278


Setting the _cost and _rate attributes .............................................................................................. 278
Combining resources with cost accumulators.................................................................................. 278
Calculating costs............................................................................................................................. 279
Combining multiple cost accumulators .......................................................................................... 280

Statistics and Model Metrics ................................................................................ 281

Commonly used blocks ...........................................................................................................282


Gathering statistics ..................................................................................................................283
Clearing statistics ....................................................................................................................283
Clearing Statistics model .................................................................................................................283

Using the History block to get item information .....................................................................283


History model .................................................................................................................................284
Verifying Information model...........................................................................................................284

Using the Item Log Manager to get item information .............................................................285


Accumulating data ..................................................................................................................285
Non-Processing model ....................................................................................................................285
Processing model.............................................................................................................................286

Time weighted versus observed statistics..................................................................................286


Time Weighted Statistics model ......................................................................................................287

Timing the flow of items in a portion of the model .................................................................287

Tips and Techniques............................................................................................. 289


Moving items through the simulation .....................................................................................290
How items move through the simulation ........................................................................................290
Connections to multiple item input connectors ..............................................................................292
An items travel time........................................................................................................................292
Using scaling for large numbers of items .........................................................................................293
Preprocessing...................................................................................................................................293
Restricting items in a system ...........................................................................................................293
Connecting to the select connector .................................................................................................294

Continuous blocks in discrete event models ............................................................................294


Setting time-based parameters using connectors ..............................................................................295
Varying a distributions arguments...................................................................................................295
Using the Holding Tank block to accumulate values .......................................................................296

Cycle timing............................................................................................................................298
Using the Timing attribute feature ..................................................................................................298
Using a Set or Equation(I) and Information blocks .........................................................................299

Item library blocks ..................................................................................................................299


Executive block ...............................................................................................................................299
Templates........................................................................................................................................300
Block types......................................................................................................................................300
Common connectors on discrete event blocks .................................................................................301

Event scheduling .....................................................................................................................302


Event calendars ...............................................................................................................................303
Zero time events..............................................................................................................................303
Event Scheduling model..................................................................................................................304

Messaging in discrete event models .........................................................................................305


Block messages ................................................................................................................................305

DISCRETE RATE MODELING


Introduction......................................................................................................... 309
What this chapter covers .........................................................................................................310
Discrete rate application areas .................................................................................................310
Simulating discrete rate systems...............................................................................................311
Comparison to discrete event and continuous modeling..................................................................311
Discrete rate models ........................................................................................................................312

Blocks for building discrete rate models...................................................................................313


Rate library .....................................................................................................................................313
Creating custom discrete rate blocks................................................................................................313

Terminology and architecture..................................................................................................313


LP technology ................................................................................................................................ 314
Layout of a discrete rate model ....................................................................................................... 314
Executive block............................................................................................................................... 314
Connectors and connections........................................................................................................... 314
Units and unit groups..................................................................................................................... 315
Rates............................................................................................................................................... 316

How the Discrete Rate module is organized ............................................................................316

Tutorial for Discrete Rate Systems ....................................................................... 317


A basic discrete rate model ......................................................................................................318
About the model............................................................................................................................. 318
Starting a model and setting simulation parameters ........................................................................ 319
Start small....................................................................................................................................... 319
Add a dynamic constraint ............................................................................................................... 322
Add a fruit processing line .............................................................................................................. 323
Add maintenance............................................................................................................................ 324
Change the flow unit to containers for the filling process................................................................ 325
Cool the mixture ............................................................................................................................ 326
Package the containers .................................................................................................................... 327
Add a palletizing area...................................................................................................................... 328
Add a second palletizing area .......................................................................................................... 330

Further exploration .................................................................................................................331

Creating Flow ...................................................................................................... 333


Blocks of interest .....................................................................................................................334
Residence blocks for creating flow .................................................................................................. 334

Creating flow ..........................................................................................................................334


Empty and not-empty .................................................................................................................... 335
Tank initialization........................................................................................................................... 335
Interchange block modes ................................................................................................................ 336
Convey Flow initialization .............................................................................................................. 337

Indicators ................................................................................................................................337
Setting indicators............................................................................................................................ 338
Getting information about levels .................................................................................................... 338

Flow attributes ........................................................................................................................339


Names and values of flow attributes................................................................................................ 339
Types of flow attributes................................................................................................................... 339
Creating and assigning a flow attribute ........................................................................................... 340
How flow attributes are propagated in the model............................................................................ 340
Managing and displaying flow attributes......................................................................................... 342
Flow attributes and item attributes ................................................................................................. 343

Storage and Units................................................................................................. 345


Blocks of interest .....................................................................................................................346
Residence blocks for holding flow................................................................................................... 346
Changing the flow unit group......................................................................................................... 347

Capacity..................................................................................................................................347
Full and not-full ............................................................................................................................. 347
Tank blocks capacity ...................................................................................................................... 347
Interchange blocks capacity ............................................................................................................ 348
Convey Flow blocks capacity.......................................................................................................... 348

Units and unit groups .............................................................................................................349


Definitions ..................................................................................................................................... 349
Declaring and selecting flow units .................................................................................................. 351

Defining block units .......................................................................................................................351


Time units ......................................................................................................................................352

Changing the unit group.........................................................................................................352


Change Units block.........................................................................................................................352

Rates, Constraints, and Movement....................................................................... 355


Blocks of interest .....................................................................................................................356
Rates, rate sections, and the LP area ........................................................................................357
Types of rates ..................................................................................................................................357
Rate sections ...................................................................................................................................359
Rate precision..................................................................................................................................360
LP area ............................................................................................................................................360

Flow rules................................................................................................................................360
Critical and relational constraints ....................................................................................................361

Defining a critical constraint ...................................................................................................362


Valve ...............................................................................................................................................363
Tank and Interchange......................................................................................................................364
Convey Flow ...................................................................................................................................365
Merge and Diverge..........................................................................................................................365

Meeting the critical constraint requirement .............................................................................366


Valve or Convey Flow .....................................................................................................................366
Tank or Interchange ........................................................................................................................366
Merge or Diverge blocks .................................................................................................................367

Comprehensive example..........................................................................................................369
Rate sections ...................................................................................................................................369
Critical constraints ..........................................................................................................................369
Relational constraint .......................................................................................................................369
Simulations impact on the effective rates.........................................................................................369

Merging, Diverging, and Routing Flow................................................................ 371


Blocks of interest .....................................................................................................................372
Merging and diverging flow.....................................................................................................372
Mode table......................................................................................................................................373
Select mode.....................................................................................................................................373
Batch/Unbatch mode ......................................................................................................................375
Proportional mode ..........................................................................................................................375
Priority mode ..................................................................................................................................376
Distributional mode........................................................................................................................378
Sensing mode ..................................................................................................................................379
Neutral mode ..................................................................................................................................380

Features of the Merge and Diverge blocks ...............................................................................381


Bias Order resolving competing requests for flow .........................................................................381
Managing flow attributes.................................................................................................................382
Internal throw and catch .................................................................................................................382
Changing decision rules dynamically...............................................................................................382

Throwing flow and catching flow remotely .............................................................................383


Creating a throw/catch connection..................................................................................................384
Filter options to facilitate throw/catch connections .........................................................................385
Examples of throw and catch connections .......................................................................................385

Delaying Flow ...................................................................................................... 389


Blocks of interest .....................................................................................................................390
Controlling a Valves maximum rate ........................................................................................390
Using the Flow Control tab.............................................................................................................391
Observing the maximum rate for a goal ..........................................................................................391

Setting a Valves quantity goal ......................................................................................................... 391


Setting a Valves duration goal......................................................................................................... 395
Setting hysteresis in a Valve............................................................................................................. 397

Delaying flow with the Shift block ..........................................................................................399


Adding a Shift to a model ............................................................................................................... 399

Convey Flow block..................................................................................................................399


Dialog settings ................................................................................................................................ 400
Constraining rates........................................................................................................................... 401
Convey Flow information............................................................................................................... 401
When to avoid using the Convey Flow block.................................................................................. 403

Mixing Flow and Items ........................................................................................ 405


Controlling flow with items and items with flow.....................................................................406
Items controlling flow..................................................................................................................... 406
Flow controlling items .................................................................................................................... 407
Flow controlling items and items controlling flow .......................................................................... 408
Step The Flow Process model.......................................................................................................... 408

Using the Interchange block to mix items with flow................................................................410


Behavioral rules .............................................................................................................................. 410
The flow connector configuration................................................................................................... 411
Item release conditions ................................................................................................................... 411
Interchange modes.......................................................................................................................... 412
Converting between item and flow attributes.................................................................................. 415

Miscellaneous....................................................................................................... 417
Precision..................................................................................................................................418
Biasing flow.............................................................................................................................418
Bias order ....................................................................................................................................... 419
Bias block ....................................................................................................................................... 419
Merge and Diverge blocks .............................................................................................................. 420

Global and advanced options in the Executive.........................................................................422


Global options................................................................................................................................ 422
Advanced options ........................................................................................................................... 424

Common connectors on discrete rate blocks............................................................................426


Animation...............................................................................................................................428
Tank ............................................................................................................................................... 428
Interchange..................................................................................................................................... 429
Valve............................................................................................................................................... 429
Sensor............................................................................................................................................. 431
Convey Flow .................................................................................................................................. 431

Advanced Topics .................................................................................................. 433


What this chapter covers .........................................................................................................434
LP technology .........................................................................................................................434
Overview ........................................................................................................................................ 434
The LP area .................................................................................................................................... 435
The sequence of events ................................................................................................................... 435
Types of information provided to the Executive.............................................................................. 437
The LP calculation ......................................................................................................................... 440

Upstream supply and downstream demand .............................................................................440


Definition....................................................................................................................................... 441
Requirements for the supply/demand calculation ........................................................................... 441
Cautions when using potential rates ............................................................................................... 441

Messaging in discrete rate models ............................................................................................444


Block messages ............................................................................................................................... 445

3D ANIMATION
Introduction to E3D ............................................................................................ 447
What this chapter covers .........................................................................................................448
Blocks and objects for 3D animation.......................................................................................448
Item library blocks ..........................................................................................................................448
Animation library............................................................................................................................449
Custom 3D objects and blocks........................................................................................................449

Overview.................................................................................................................................449
Features...........................................................................................................................................449
Controlling the E3D environment ..................................................................................................451

Prerequisites ............................................................................................................................451
Software and hardware ....................................................................................................................451
Preparation......................................................................................................................................452

How the E3D module is organized .........................................................................................452

Tutorial I .............................................................................................................. 453


The E3D environment............................................................................................................454
Opening the E3D window ..............................................................................................................454
Exploring the E3D window.............................................................................................................454
Changing the associated model .......................................................................................................456
Navigating within the E3D window................................................................................................456
Manipulating the E3D window.......................................................................................................457

3D animation modes...............................................................................................................458
Mode descriptions...........................................................................................................................458
QuickView versus Concurrent or Buffered ......................................................................................458

Running a model with 3D animation......................................................................................459


Opening the model .........................................................................................................................459
Running the model with 3D animation ..........................................................................................460

Next step.................................................................................................................................461

Tutorial II............................................................................................................. 463


Adding 3D behavior to an existing model ...............................................................................464
The goal..........................................................................................................................................464
Open the starter model ...................................................................................................................465
Cause objects to move simultaneously .............................................................................................467
Create objects to represent items .....................................................................................................467
Create objects to represent blocks....................................................................................................468

Enhancing the model ..............................................................................................................469


Add scenery.....................................................................................................................................469
Add a 3D Controller block..............................................................................................................469
Launch with the E3D window ........................................................................................................470

Some things to notice..............................................................................................................470


Internal animation ..........................................................................................................................470
Rotation of 3D objects ....................................................................................................................470
Mounting objects ............................................................................................................................471
Moving blocks linked to objects ......................................................................................................471
Conveyor ........................................................................................................................................471
Item length .....................................................................................................................................472
Conveyor capacity...........................................................................................................................472

Tutorial III ........................................................................................................... 473


Animating a bank line .............................................................................................................474
The goal..........................................................................................................................................474
Open the starter model ...................................................................................................................474

Animate the model in 3D............................................................................................................... 476

Unmount the Activity blocks ..................................................................................................477


Add Transport blocks ..............................................................................................................477
Animating the travel time ............................................................................................................... 477
What the model needs .................................................................................................................... 477
Walking and waiting in a line ......................................................................................................... 478
Leaving the bank ............................................................................................................................ 478
Minimizing the icons of the existing Transport blocks .................................................................... 479
The model so far............................................................................................................................. 479

Block positions to determine a paths length ............................................................................480


Setting the speed and determining the distance............................................................................... 480

Mounting objects ....................................................................................................................481


Steps for mounting an object .......................................................................................................... 481
Create the object............................................................................................................................. 482
Create an attribute.......................................................................................................................... 482
Mount the object on the item......................................................................................................... 482
Create a hierarchical block .............................................................................................................. 483

Unlinking objects from blocks.................................................................................................484


Unlinking positions ........................................................................................................................ 484

Creating custom pathways.......................................................................................................484


Use the correct Transport behavior ................................................................................................. 485
Creating paths ................................................................................................................................ 485
Create a new environment file ........................................................................................................ 485
Create a path object........................................................................................................................ 486
Create path markers........................................................................................................................ 486
Select the path ................................................................................................................................ 487
Repeat the process for another path ................................................................................................ 487

Enhancing the model ..............................................................................................................488

Environment Files & E3D Editors....................................................................... 489


Environment files....................................................................................................................490
Modifying the environment............................................................................................................ 490

The E3D Editor ......................................................................................................................491


Learning about the E3D Editor ...................................................................................................... 491

E3D Editor modes ..................................................................................................................493


Mode categories.............................................................................................................................. 493
World modes .................................................................................................................................. 494
Terrain modes................................................................................................................................. 496

Editor menus and commands..................................................................................................498

3D Objects........................................................................................................... 499
3D objects...............................................................................................................................500
Types of objects .............................................................................................................................. 501
Object properties ............................................................................................................................ 501
Actions ........................................................................................................................................... 501

Creating objects ......................................................................................................................502


Create an object that represents a block .......................................................................................... 503
Create an object that represents an item or other moveable entity................................................... 504
Create a 3D object as scenery.......................................................................................................... 505
Create an environmental effect ....................................................................................................... 507

Deleting objects ......................................................................................................................507


Changing object properties .....................................................................................................508
Changing skins ............................................................................................................................... 508
Move an object ............................................................................................................................... 509

Show or hide objects .......................................................................................................................512


Rotate an object ..............................................................................................................................514
Scale an object.................................................................................................................................516

Saving changes ........................................................................................................................518


Saving an environment file ..............................................................................................................518

WayPoints ...............................................................................................................................518
Creating a waypoint ........................................................................................................................518
Choosing a waypoint as a destination..............................................................................................519

Mounting objects ....................................................................................................................519


Item object on block object .............................................................................................................520
Object on item object .....................................................................................................................520
Scenery object on scenery object .....................................................................................................521

Other object information ........................................................................................................521


Collision .........................................................................................................................................521
Gravity, friction, and momentum....................................................................................................521
Sound .............................................................................................................................................521
Object ID .......................................................................................................................................522
BlockNumber .................................................................................................................................522
GroupTag and UserTag ...................................................................................................................522

Movement, Paths, and Terrains ............................................................................ 523


Traveling time .........................................................................................................................524
Setting travel time in a Transport or Convey Flow block .................................................................524

Creating paths.........................................................................................................................525
Terrains ...................................................................................................................................528
Modifying the terrain ......................................................................................................................529

Tips and Reference ............................................................................................... 531


Tips.........................................................................................................................................532
Using an Equation block to call E3D functions...............................................................................532
Hierarchical blocks and 3D animation ............................................................................................532
Items stack on top of each other ......................................................................................................533
Performance Considerations............................................................................................................533

E3D commands, options, and settings ....................................................................................534


Opening the E3D window ..............................................................................................................534
3D tab in Options dialog ................................................................................................................534
3D Animation tab of Simulation Setup dialog ................................................................................535

Dialog tabs for animation........................................................................................................536


Item Animation tab.........................................................................................................................537
Block Animation tab .......................................................................................................................538
Transport Animation tab .................................................................................................................539

Animation 2D-3D blocks........................................................................................................540


3D Controller block........................................................................................................................541
3D Scenery block............................................................................................................................541
3D Text block .................................................................................................................................542
Animate 3D block...........................................................................................................................542

E3D Editor menu commands .................................................................................................543


File..................................................................................................................................................543
Edit.................................................................................................................................................543
Camera ...........................................................................................................................................543
Window ..........................................................................................................................................544
Lighting Tools.................................................................................................................................544
World..............................................................................................................................................544
Action .............................................................................................................................................544
Brush ..............................................................................................................................................544

HOW TO
Libraries and Blocks ............................................................................................ 545
The ExtendSim libraries ..........................................................................................................546
Animation 2D-3D library............................................................................................................... 546
Electronics library........................................................................................................................... 546
Item library (not available in ExtendSim CP) ................................................................................. 546
Plotter library ................................................................................................................................. 547
Rate library (not available in ExtendSim CP or ExtendSim OR)..................................................... 547
Utilities library................................................................................................................................ 547
Value library ................................................................................................................................... 547
Example Libraries folder ................................................................................................................. 547
Legacy folder .................................................................................................................................. 547

Using libraries .........................................................................................................................548


Opening a library ........................................................................................................................... 548
Closing a library ............................................................................................................................. 549
Searching for libraries and blocks.................................................................................................... 549
Library windows ............................................................................................................................. 551

Creating and maintaining libraries ..........................................................................................551


Creating a new library .................................................................................................................... 552
Saving and compiling libraries ........................................................................................................ 552
Substituting one library for another ................................................................................................ 553
Arranging blocks in libraries ........................................................................................................... 553
Protecting the code of library blocks ............................................................................................... 553
Converting libraries to RunTime format......................................................................................... 554

Working with blocks ...............................................................................................................554


Customizing block icons................................................................................................................. 554
Icon views....................................................................................................................................... 554
Connectors ..................................................................................................................................... 555
Connecting to different connector types ......................................................................................... 558
Dialogs ........................................................................................................................................... 558
Animating blocks............................................................................................................................ 559

Hierarchical blocks..................................................................................................................560
Managing blocks .....................................................................................................................560
Copying blocks............................................................................................................................... 560
Changing a blocks name ................................................................................................................ 560
Removing blocks ............................................................................................................................ 560
Corrupted blocks............................................................................................................................ 560

Creating a Custom User Interface ........................................................................ 561


Cloning...................................................................................................................................562
How to clone a dialog item............................................................................................................. 562
Using cloned items ......................................................................................................................... 563
Unlinked clones.............................................................................................................................. 564

Centralizing data in a database ................................................................................................564


Hierarchy ................................................................................................................................564
Creating a dashboard interface ................................................................................................564
Buttons........................................................................................................................................... 565
Popup menus.................................................................................................................................. 566
On/Off Switch ............................................................................................................................... 566
Additional blocks to control model execution ................................................................................. 566

Notebooks...............................................................................................................................566
Controls ..................................................................................................................................567
Slider .............................................................................................................................................. 567

Switch .............................................................................................................................................568
Meter ..............................................................................................................................................568

Interacting with the model user...............................................................................................568


Notify block....................................................................................................................................569
Equation blocks ..............................................................................................................................570
Additional interactive features if you program .................................................................................571

External applications as an interface ........................................................................................572


Documenting models..............................................................................................................572
Text and graphics ............................................................................................................................572
Help block ......................................................................................................................................572

Model Execution .................................................................................................. 573


Simulation setup .....................................................................................................................574
Setup tab.........................................................................................................................................575
Continuous tab ...............................................................................................................................576
Random Numbers tab.....................................................................................................................577
3D Animation tab...........................................................................................................................579
Comments tab ................................................................................................................................579

Running a model ....................................................................................................................580


Menu commands and toolbar buttons.............................................................................................580
Running a model multiple times .....................................................................................................580
Stepping through a model ...............................................................................................................580
Other points when running models.................................................................................................581
Status bar ........................................................................................................................................582
Blocks that control or monitor simulation runs...............................................................................583
Saving intermediate results ..............................................................................................................583

Timing ....................................................................................................................................584
Continuous simulation timing ........................................................................................................584
Discrete event simulation timing.....................................................................................................584

Simulation order (continuous models) .......................................................................................584


Time units...............................................................................................................................584
Global time unit..............................................................................................................................584
Local time unit................................................................................................................................585
Calendar dates.................................................................................................................................586
Time unit conversions (non-Calendar dates) ...................................................................................587

Other Units.............................................................................................................................587
Flow units .......................................................................................................................................587
Length ............................................................................................................................................587

Length and number of runs.....................................................................................................588


Terminating systems........................................................................................................................588
Non-terminating systems ................................................................................................................588
Determining the length and number of runs ...................................................................................589

Speeding up a simulation ........................................................................................................589


Displaying data or movement..........................................................................................................590
Inefficient settings or block code .....................................................................................................590
Other factors that affect simulation speed .......................................................................................591

Slowing down simulations.......................................................................................................591


Working with multiple models................................................................................................591
How ExtendSim passes messages in models.............................................................................591
Application messages.......................................................................................................................592
Block to block messages ..................................................................................................................593

Presentation ......................................................................................................... 595


Working with text ...................................................................................................................596

Entering text................................................................................................................................... 596


Moving and copying text ................................................................................................................ 596
Drag and drop text ......................................................................................................................... 597
Formatting text............................................................................................................................... 597

Navigator ................................................................................................................................597
Hierarchy ................................................................................................................................598
Uses for hierarchy ........................................................................................................................... 598
Hierarchical blocks ......................................................................................................................... 598
Making a selection into a hierarchical block.................................................................................... 600
Building a new hierarchical block ................................................................................................... 601
Saving hierarchical blocks ............................................................................................................... 605
Modifying hierarchical blocks ......................................................................................................... 606

Animation...............................................................................................................................609
Blocks with built-in animation ....................................................................................................... 609
Blocks for customized animation .................................................................................................... 611
Animation functions....................................................................................................................... 614
Animation pictures ......................................................................................................................... 614
Displaying messages on a blocks icon ............................................................................................. 615

ExtendSim databases ...............................................................................................................615


Connections............................................................................................................................615
Connection lines ............................................................................................................................ 615
Named connections ........................................................................................................................ 618
Smart connections .......................................................................................................................... 618

Model appearance ...................................................................................................................619


Showing and hiding connections and connectors............................................................................ 619
Changing model styles.................................................................................................................... 619

Graphic shapes, tools, and commands .....................................................................................619


Drawing objects in the Shapes menu .............................................................................................. 620
Shuffling graphics ........................................................................................................................... 620
Modifying objects........................................................................................................................... 620

Patterns and colors ..................................................................................................................620


Working with pictures.............................................................................................................621

Analysis................................................................................................................ 623
Blocks that calculate statistics ..................................................................................................624
Statistics ......................................................................................................................................... 624
Clear Statistics ................................................................................................................................ 626
Mean & Variance............................................................................................................................ 626
Information .................................................................................................................................... 627
Cost Stats ....................................................................................................................................... 627

Confidence intervals................................................................................................................627
Sensitivity analysis ...................................................................................................................628
Overview ........................................................................................................................................ 628
Steps for using sensitivity analysis ................................................................................................... 628
Specifying the sensitivity method.................................................................................................... 630
Turning sensitivity on and off ......................................................................................................... 630
Reporting the results....................................................................................................................... 631
Multi-dimensional scenarios ........................................................................................................... 631

Scenario analysis......................................................................................................................632
How the Scenario Manager works .................................................................................................. 633
Tutorial I (dialog parameters).......................................................................................................... 633
Tutorial II (database variables) ........................................................................................................ 640
DOE methods ................................................................................................................................ 646

Optimization ..........................................................................................................................647

How optimization works.................................................................................................................647


Steps for using optimization ............................................................................................................648
Optimization tutorial ......................................................................................................................648
Adding constraints ..........................................................................................................................655
Using the Optimizer block ..............................................................................................................658

Stat::Fit (Windows only) .........................................................................................................661


Tutorial ...........................................................................................................................................662

Plotters....................................................................................................................................663
Plot and data panes .........................................................................................................................663
Plotter tools.....................................................................................................................................664
Plotter dialogs .................................................................................................................................667
Types of plotters..............................................................................................................................668
Copying plotted information ..........................................................................................................671
Clearing plotted information...........................................................................................................671

Reports....................................................................................................................................671
Types of reports...............................................................................................................................671
Generating reports ..........................................................................................................................672
Steps for reporting...........................................................................................................................672
Reporting example ..........................................................................................................................672

Math and Statistical Distributions ....................................................................... 675


Blocks that represent functions................................................................................................676
Other options..................................................................................................................................677

Equation-based blocks.............................................................................................................677
Overview.........................................................................................................................................678
Equation components .....................................................................................................................678
Input variables.................................................................................................................................678
Output variables..............................................................................................................................680
Equation Editor ..............................................................................................................................683
Include files for equations ...............................................................................................................683

Random numbers....................................................................................................................684
Random number generators ............................................................................................................684
Random seeds .................................................................................................................................685
Resetting random numbers for consecutive runs .............................................................................685

Probability distributions ..........................................................................................................686


Characteristics of distributions ........................................................................................................686
Choosing a distribution...................................................................................................................686
Distribution fitting..........................................................................................................................686
ExtendSim distributions..................................................................................................................687

Integration vs. summation in the Holding Tank block ............................................................690

Debugging Tools .................................................................................................. 693


Debugging hints......................................................................................................................694
Verifying results as you build a model......................................................................................695
Connector information ...................................................................................................................695
Cloning dialog items .......................................................................................................................695

Blocks for debugging...............................................................................................................695


Measuring performance to debug models ................................................................................696
Find command........................................................................................................................697
Item Contents of queues and activities ....................................................................................698
Queue blocks ..................................................................................................................................699
Activity blocks.................................................................................................................................700
Executive Block's Item Contents Tab ..............................................................................................701

The Source Code Debugger ....................................................................................................702

Debugging equations ..............................................................................................................702


Starting the tutorial ........................................................................................................................ 702
Setting breakpoints ......................................................................................................................... 702
Stepping through the code.............................................................................................................. 703
Getting to the overflow calculation ................................................................................................. 704
Setting a conditional breakpoint ..................................................................................................... 704

Dotted lines for unconnected connections...............................................................................705


Animation features for debugging ...........................................................................................705
Animating the model...................................................................................................................... 706
Animating item properties (discrete event models only).................................................................. 706

Notebook ................................................................................................................................706
Stepping through the simulation .............................................................................................706
Show Simulation Order command ..........................................................................................707
Slow simulation speed .............................................................................................................707
Model reporting ......................................................................................................................707
Model tracing..........................................................................................................................707
Generating traces ............................................................................................................................ 708
Tracing example.............................................................................................................................. 708

Data Management and Exchange......................................................................... 711


User interfaces for data exchange .............................................................................................712
Copy/Paste ..................................................................................................................................... 713
Importing and exporting data ......................................................................................................... 714
Read, Write, and Query Equation .................................................................................................. 716
Dynamic linking to internal data structures .................................................................................... 717
DDE links (Windows only)............................................................................................................ 724

Internal data storage and management methods ......................................................................726


ExtendSim databases for internal data storage .........................................................................726
How this section is organized.......................................................................................................... 727
Advantages of using internal databases............................................................................................ 727
Creating and interacting with internal databases ............................................................................. 728
How to create an ExtendSim database ............................................................................................ 728
Establishing Parent/Child relationships........................................................................................... 731
Linking a database to data .............................................................................................................. 733
Database management .................................................................................................................... 735
Database dialogs and popup menus ................................................................................................ 737
Excel Add-In for ExtendSim databases............................................................................................ 740
Monte Carlo model ........................................................................................................................ 743

Other internal data storage and management methods ............................................................743


Global arrays .................................................................................................................................. 743
Dynamic arrays............................................................................................................................... 745
Embedding an object (Windows only)............................................................................................ 746
Linked lists ..................................................................................................................................... 748

Exchanging data with external applications .............................................................................748


Spreadsheets ................................................................................................................................... 749
External databases........................................................................................................................... 749

Blocks for data management and exchange..............................................................................750


Read and Write blocks .................................................................................................................... 751
Query Equation and Query Equation(I) blocks .............................................................................. 752
How the blocks work...................................................................................................................... 753
Spawned items................................................................................................................................ 753
Variables ......................................................................................................................................... 754
Ranking rules ................................................................................................................................. 756
Differences between the query blocks ............................................................................................. 756

DB Job Shop Query model .............................................................................................................757


Data access blocks ...........................................................................................................................759
Other blocks for modelers ...............................................................................................................759
Blocks for developers.......................................................................................................................759

Data source indexing and organization....................................................................................760


Transferring data between a data table and a spreadsheet .................................................................760
Transferring data between a spreadsheet and a database ...................................................................760

Communicating with external devices .....................................................................................760


Technologies for communication ............................................................................................761
Text files..........................................................................................................................................761
ActiveX/COM/OLE (Windows only) .............................................................................................763
ADO (Windows only) ....................................................................................................................765
DDE (Windows only).....................................................................................................................765
ODBC/SQL ...................................................................................................................................766
FTP ................................................................................................................................................766
DLLs and Shared Libraries ..............................................................................................................767
Mailslots (Windows only) ...............................................................................................................767

Miscellaneous....................................................................................................... 769
Navigator ................................................................................................................................770
Opening the Navigator ...................................................................................................................770
Model Navigator mode ...................................................................................................................771
Database List mode .........................................................................................................................771
Library Window mode....................................................................................................................771

Printing...................................................................................................................................772
Selecting what to print ....................................................................................................................772
The Print command........................................................................................................................772
Printing and Print Setup hints.........................................................................................................774

Copy/Paste and Duplicate commands .....................................................................................774


Copying within ExtendSim.............................................................................................................774
Copying from ExtendSim to other applications...............................................................................775
Copying from other applications to ExtendSim...............................................................................775

Tool tips..................................................................................................................................776
Changing parameters dynamically...........................................................................................776
Methods..........................................................................................................................................776

Sharing model files..................................................................................................................777


Locking the model ..........................................................................................................................777
The ExtendSim LT version..............................................................................................................778

Referencing dialog variables.....................................................................................................778


Blocks that use the interface ............................................................................................................779
Methods for referencing dialog variables as factors...........................................................................779

APPENDIX
Menu Commands and Toolbars ........................................................................... 781
ExtendSim menu (Mac OS only) ............................................................................................782
File menu ................................................................................................................................782
New Model .....................................................................................................................................782
New Text File..................................................................................................................................782
Open...............................................................................................................................................782
Close...............................................................................................................................................782
Revert Model/Revert Text File.........................................................................................................783
Save Model and Save Model As .......................................................................................................783
Save Text File and Save Text File As.................................................................................................783

Update Launch Control (Windows only) ....................................................................................... 783


Import Data Table .......................................................................................................................... 783
Export Data Table .......................................................................................................................... 783
Import DXF File (Windows only) .................................................................................................. 784
Show Page Breaks ........................................................................................................................... 784
Print Setup (Windows) and Page Setup (Mac OS).......................................................................... 784
Print ............................................................................................................................................... 784
Network License (Windows only; network license only) ................................................................. 785
Properties ....................................................................................................................................... 786
Five most recent models or text files ............................................................................................... 786
Exit/Quit........................................................................................................................................ 786

Edit menu ...............................................................................................................................787


Undo .............................................................................................................................................. 787
Cut................................................................................................................................................. 787
Copy .............................................................................................................................................. 787
Paste ............................................................................................................................................... 787
Clear............................................................................................................................................... 787
Delete Selected Records .................................................................................................................. 787
Select All......................................................................................................................................... 787
Duplicate........................................................................................................................................ 788
Find................................................................................................................................................ 788
Find Again...................................................................................................................................... 789
Replace ........................................................................................................................................... 789
Replace, Find Again........................................................................................................................ 789
Replace All ..................................................................................................................................... 789
Enter Selection ............................................................................................................................... 789
Create/Edit Dynamic Link ............................................................................................................. 789
Open Dynamic Linked Blocks........................................................................................................ 790
Sensitize Parameter ......................................................................................................................... 790
Open Sensitized Blocks................................................................................................................... 790
Paste DDE Link (Windows only) ................................................................................................... 791
Delete DDE Link (Windows only)................................................................................................. 791
Show DDE Links (Windows only) ................................................................................................. 791
Refresh DDE Links (Windows only) .............................................................................................. 791
Insert Object (Windows only) ........................................................................................................ 791
Design Mode (Windows only)........................................................................................................ 791
Object (Windows only) .................................................................................................................. 791
Show Clipboard.............................................................................................................................. 792
Options .......................................................................................................................................... 792

Text menu ...............................................................................................................................799


Library menu ..........................................................................................................................799
Open Library.................................................................................................................................. 799
Close Library .................................................................................................................................. 799
New Library ................................................................................................................................... 799
Tools............................................................................................................................................... 799
List of libraries................................................................................................................................ 801

Model menu............................................................................................................................802
Make Selection Hierarchical ........................................................................................................... 802
New Hierarchical Block.................................................................................................................. 802
Open Hierarchical Block Structure ................................................................................................. 802
Connection Lines ........................................................................................................................... 802
Show Named Connections ............................................................................................................. 802
Hide Connections .......................................................................................................................... 802
Hide Connectors ............................................................................................................................ 802
Controls ......................................................................................................................................... 803

Align ...............................................................................................................................................803
Rotate Shape ...................................................................................................................................803
Flip Horizontally/Flip Vertically......................................................................................................803
Border Thickness ............................................................................................................................803
Shape Fill/Border ............................................................................................................................803
Change Model Style ........................................................................................................................803
Lock Model.....................................................................................................................................803
Use Grid .........................................................................................................................................803
Show Block Labels ..........................................................................................................................803
Show Block Numbers......................................................................................................................804
Show Simulation Order...................................................................................................................804
Set Simulation Order.......................................................................................................................804

Database menu........................................................................................................................804
New Database .................................................................................................................................804
Import New Database .....................................................................................................................804
Export Database..............................................................................................................................805
Rename Database............................................................................................................................805
New Table.......................................................................................................................................805
Import Tables..................................................................................................................................805
Export Selected Tables.....................................................................................................................805
Rename Table .................................................................................................................................805
Edit Table Properties .......................................................................................................................806
New Tab .........................................................................................................................................806
Rename or Delete Database Tab......................................................................................................806
Clone Selected Tables to Tab...........................................................................................................806
Append New Field ..........................................................................................................................807
Insert New Field..............................................................................................................................807
Edit Table Properties .......................................................................................................................807
Append New Records......................................................................................................................807
Insert New Records .........................................................................................................................808
Read/Write Index Checking ............................................................................................................808

Develop menu.........................................................................................................................808
New Block ......................................................................................................................................808
Open Block Structure .....................................................................................................................809
Rename Block .................................................................................................................................809
Set Block Category... .......................................................................................................................809
Compile Block ................................................................................................................................809
New Dialog Item.............................................................................................................................810
New Tab .........................................................................................................................................810
Rename or Delete Tab.....................................................................................................................810
Move Selected Items to Tab.............................................................................................................810
New Include File.............................................................................................................................810
Open Include File ...........................................................................................................................810
Delete Include File ..........................................................................................................................811
Shift Selected Code Left ..................................................................................................................811
Shift Selected Code Right................................................................................................................811
Go To Line .....................................................................................................................................811
Go To Function/Message Handler ..................................................................................................811
Match Braces...................................................................................................................................811
Match IFDEF/ENDIF....................................................................................................................811
Set Breakpoints ...............................................................................................................................811
Open Breakpoints Window.............................................................................................................811
Open Debugger Window................................................................................................................811
Continue.........................................................................................................................................812
Step Over ........................................................................................................................................812

Step Into......................................................................................................................................... 812


Step Out......................................................................................................................................... 812
Show Reserved Databases ............................................................................................................... 812

Run menu ...............................................................................................................................813


Run Simulation .............................................................................................................................. 813
Continue Simulation ...................................................................................................................... 813
Run Optimization or Scenarios ...................................................................................................... 813
Simulation Setup ............................................................................................................................ 813
Prioritize Front Model .................................................................................................................... 813
Use Sensitivity Analysis................................................................................................................... 813
Show 2D Animation....................................................................................................................... 813
Show 3D Animation....................................................................................................................... 814
Show Movies (Mac OS only) .......................................................................................................... 814
Launch Proof (Windows only)........................................................................................................ 814
Launch StatFit (Windows only)...................................................................................................... 814
Generate Report ............................................................................................................................. 814
Report Type.................................................................................................................................... 815
Add Selected To Report .................................................................................................................. 815
Add All To Report .......................................................................................................................... 815
Remove Selected From Report........................................................................................................ 815
Remove All From Report................................................................................................................ 815
Show Reporting Blocks................................................................................................................... 815
Stop................................................................................................................................................ 815
Pause .............................................................................................................................................. 815
Step ................................................................................................................................................ 815
Resume........................................................................................................................................... 815
Debugging...................................................................................................................................... 816

Window menu ........................................................................................................................817


Notebook ....................................................................................................................................... 817
Navigator........................................................................................................................................ 817
Database List .................................................................................................................................. 818
Calendar......................................................................................................................................... 818
E3D Window ................................................................................................................................. 818

Help menu..............................................................................................................................818
ExtendSim Help ............................................................................................................................. 818
Support Resource Center ................................................................................................................ 818
Downloads and Updates ................................................................................................................. 818
User Forum .................................................................................................................................... 818
Whats New .................................................................................................................................... 818
ExtendSim Product Line................................................................................................................. 818
Imagine That Inc. Online............................................................................................................... 818
About ExtendSim (Windows only) ................................................................................................. 819

Toolbar buttons.......................................................................................................................819
ExtendSim database tool bars ..................................................................................................819

Value Library Blocks............................................................................................ 821


Submenus ...............................................................................................................................822
Data Access .............................................................................................................................822
Holding ..................................................................................................................................823
Inputs......................................................................................................................................824
Math .......................................................................................................................................824
Model Analysis........................................................................................................................825
Outputs ..................................................................................................................................826
Routing...................................................................................................................................826

Statistics ..................................................................................................................................827

Item Library Blocks ............................................................................................. 829


Submenus ...............................................................................................................................830
Activity ...................................................................................................................................830
Batching..................................................................................................................................831
Data access ..............................................................................................................................831
Information.............................................................................................................................832
Properties ................................................................................................................................832
Queues....................................................................................................................................833
Resources ................................................................................................................................833
Routing...................................................................................................................................834
Executive.................................................................................................................................835

Rate Library Blocks.............................................................................................. 837


Block descriptions ...................................................................................................................838

Utilities Library Blocks ........................................................................................ 841


Submenus ...............................................................................................................................842
Developer Tools ......................................................................................................................842
Discrete Event Tools................................................................................................................842
Information.............................................................................................................................843
Math .......................................................................................................................................844
Model Control ........................................................................................................................844
Time .......................................................................................................................................845

Upper Limits ........................................................................................................ 847


Cross-Platform Considerations ............................................................................ 849
Libraries ..................................................................................................................................850
Models ....................................................................................................................................850
Menu and keyboard equivalents ..............................................................................................850
Transferring files between operating systems............................................................................851
File name adjustments.....................................................................................................................851
Physically transferring files ..............................................................................................................851
File conversion ................................................................................................................................851

INDEX

About ExtendSim

Preface
ExtendSims architect
talks about simulation

What we experience of nature is in models,


and all of natures models are so beautiful.
R. Buckminster Fuller

ExtendSim

Preface

Dedicated to the pleasure of finding things out


Simulation is defined as the act of imitation. Even a word processor simulates pen and paper, but
how do you get the computer to behave like the stock market, or an electronic circuit, or even a
car, and how can you communicate this power to the user? My search for the answer began in the
early days of the space race.
I was attending the Polytechnic Institute of Brooklyn when the head of the Electronics Engineering department told us that a new department was being formed... a combination of mathematics,
computers, physics and engineering. Being into math, and curious about the large IBM mainframe
lurking down the hall, I immediately joined and made a constant pest of myself at the computer
center.
The bug bit hard, I guess, and I began to realize that I could use computers to duplicate the laboratory experiments in class so well, that I never really did them, I just simulated them on the computer. NASA then asked if I could develop a simulation of their new liquid fuel booster for
something called Project Apollo. I came up with the Rocket-Drop simulation, a monstrously large
program that only had one function: follow the path of a single droplet of fuel, from the shower
heads (as the fuel sprayers at the top of the engine were called) to the rocket engine exhaust, via
subsonic, supersonic, and hypersonic flow.
It hit me then that simulation was inaccessible, except to the select few who had the resources to
put together an entire system dedicated to one function. A generalized simulation application
would be a great and useful thing, if one could find the computer that was both powerful enough
and widespread enough to support it. This was 1965, and Seymour Cray was still building his
superfast (at the time!) computers by hand and graphic user interfaces were still decades in the
future.
When I saw the graphical user interfaces (GUIs) on the Mac OS and Windows machines, I realized that I could use these tools to fulfill that long awaited dream. ExtendSim is built upon those
roots. Imagine That Inc. was founded in 1987 to develop and market Extend and its successor
ExtendSim, the first simulation applications allowing users of any discipline to use simulation and
to develop their own libraries of customized simulation tools.
Imagine That! is dedicated to bringing the art, science, and fun of simulation to the desktop, in a
form digestible and accessible by everyone. ExtendSim is the first user-extendible simulation package that meets those expectations.

Bob Diamond
President
You see? Thats why scientists persist in their investigations, why we struggle so desperately
for every bit of knowledge, stay up nights seeking the answer to a problem, climb the steepest obstacles to the
next fragment of understanding, to finally reach that joyous moment of the kick in the discovery,
which is part of the pleasure of finding things out. attributed to Richard P. Feynman

About ExtendSim

Introduction
Learn about ExtendSims capabilities
and how to get started using them

Begin at the beginning, the King said, gravely,


and go til you come to the end; then stop.
Lewis Carroll

ExtendSim

Introduction
Why simulation is important

ExtendSim is a powerful, leading edge simulation tool. Using ExtendSim, you can develop
dynamic models of real-life processes in a wide variety of fields. Use ExtendSim to create models
from building blocks, explore the processes involved, and see how they relate. Then change
assumptions to arrive at an optimum solution. ExtendSim and your imagination are all you need
to create professional models that meet your business, industrial, and academic needs.

Why simulation is important


Simulation involves designing a model of a system and carrying out experiments on it as it progresses through time. Models enable you to see how a real-world activity will perform under different conditions and test various hypotheses at a fraction of the cost of performing the actual
activity.
One of the principal benefits of a model is that you can begin with a simple approximation of a
process and gradually refine the model as your understanding of the process improves. This stepwise refinement enables you to achieve good approximations of very complex problems surprisingly quickly. As you add refinements, the model more closely imitates the real-life process.

Simulation with ExtendSim


ExtendSim is an easy-to-use, yet extremely powerful, tool for simulating processes. It helps you
understand complex systems and produce better results faster. With ExtendSim you can:
Predict the course and results of certain actions
Gain insight and stimulate creative thinking
Visualize your processes logically or in a virtual environment
Identify problem areas before implementation
Explore the potential effects of modifications
Confirm that all variables are known
Optimize your operations
Evaluate ideas and identify inefficiencies
Understand why observed events occur
Communicate the integrity and feasibility of your plans

What ExtendSim can do


ExtendSim allows you to simulate any system or process by creating a logical representation in an
easy-to-use format.

Modeling capabilities
With ExtendSim, you get powerful modeling constructs, including:
A full set of building blocks that allow you to build models rapidly
A customizable graphical interface that depicts the relationships in the modeled system
Unlimited hierarchical decomposition for organizing model sections, making enterprise-wide
models easy to build and understand
Dialogs and notebooks for changing model values, so you can quickly try out assumptions and
dynamically interface with your model
An internal relational database feature for storing, managing, and reporting model data as well as
for interfacing with external data applications

5
Whats new in this release

A full-featured authoring environment for creating user-friendly front end interfaces that simplify model interaction and enhance communication
The ability to adjust settings while the simulation is running
An equation editor for creating compiled custom logic
The ability to create new blocks, with custom behavior, that are fully integrated with ExtendSim
Complete scalability since model size is limited only by the limits of your system
Evolutionary optimization, Monte Carlo, batch-mode, and scenario analysis
Customizable reports and plotters for presentation and in-depth analysis
Activity-based costing capabilities for analyzing cost contributors
Full connectivity and interactivity with other programs and platforms

Simulation architecture
A robust architecture adds advanced features to make it the most scalable simulation system available:
Multi-purpose simulation. ExtendSim is a multi-domain environment so you can dynamically
model continuous, discrete event, discrete rate, agent-based, linear, non-linear, and mixed-mode
systems.
Integrated compiled programming language and dialog editor, optimized for simulation.
Modify ExtendSims blocks or build your own for specialized applications.
Library based. The blocks you build can be saved in libraries and easily reused in other models.
Scripting support. Build and run models remotely, either from an ExtendSim block or from an
outside application.
Integrated support for other programming languages. Use ExtendSims built-in APIs to
access code created in Delphi, C++ Builder, Visual Basic, Visual C++, etc.
Over 1000 functions. Directly access functions for integration, statistics, queueing, animation,
IEEE math, matrix, sounds, arrays, FFT, debugging, DLLs, string and bit manipulation, I/O,
and so on; you can also define your own functions.
Message sending. Blocks can send messages to other blocks interactively for subprocessing.
Sophisticated data-passing capabilities. Pass values, arrays, or structures composed of arrays.
Full support for a wide range of data types and structures. Arrays, linked-lists, and integers,
real, and string data types are built in.
Integrated data linking. Connect block dialog data to internal and external databases.

Whats new in this release


For a list of the new and enhance features added in this release, go to the ExtendSim web site
(www.ExtendSim.com) or see the ExtendSim 9 Reference.

Levels of use
You can use ExtendSim on many levels:

ExtendSim

Customizable 2D and realistic 3D animation for model debugging and enhanced presentation

ExtendSim

Introduction
About this User Guide

Run pre-assembled models and explore alternatives by changing the data. If you work in a group
environment, one or more authors can create models for others to run for experimentation. The
author can also build a custom front end to facilitate user interaction with the model. The LT
version of ExtendSim allows non-modelers to run pre-assembled models, change data, and
obtain results. For more information, see The ExtendSim LT version on page 778.
Create your own models from the blocks that come with ExtendSim. ExtendSim includes libraries of blocks to handle most modeling needs. To build a model, pull blocks from libraries and
link connectors on the blocks. You can also use pre-built templates (Templates library) or assemble your own hierarchical blocks of subsystems and save them in libraries. This saves starting
from scratch when youre building a model of a process that has elements in common with a previous model.
Use the integrated development environment to create new blocks that conform to the ExtendSim modeling architecture. The development environment is optimized for simulation and
allows you to create blocks with custom code, dialogs, and icons and use them in your models
just as you would other ExtendSim blocks. You can also modify the blocks that come with
ExtendSim to work with your specific needs.
Develop your own modeling architecture, conventions, and features. With the ExtendSim
development environment, you can create a custom set of blocks with unique interfaces, communication protocols, and behaviors. This new architecture can be continuous, discrete event,
discrete rate, agent-based, or an entirely new type of simulation.
Automate your model building using the scripting functions to build wizards, or by using
ActiveX/COM. You can use ActiveX/COM or block-based wizards to cause models to be automatically created or modified. Models can be also be programmatically created from a user input
form or data file. This allows the modeling environment to be utilized indirectly by end-users
who have little or no simulation experience.
An ExtendSim ASP license is required to distribute the functionality of ExtendSim to other users
or to provide internet or intranet access to ExtendSim or to its functionality. Contact Imagine
That, Inc. for more information.

About this User Guide


This manual is a general-purpose tutorial and reference for using ExtendSim. Every effort has been
made to present sample models that you can easily understand, whatever field you are in, so you
can quickly learn how to use this powerful tool.
In addition to the general-purpose Tutorial in the first two chapters, other sections (Continuous
Modeling, Discrete Event Modeling, Discrete Rate Modeling, and 3D Animation) have their own
segment-specific tutorials. The User Guide also has a complete How To section that explores
concepts and techniques for developing and running models.
While you may find that your subject area is not represented in the manual, or that the sample
models reflect some disciplines which are unfamiliar to you, remember that their purpose is to
teach you how to use ExtendSim. What you model, and how you model it, are determined mostly
by your knowledge and expertise in your subject area.

A separate Developer Reference is also available for modelers who use the equation-based blocks
and programmers who want to create custom blocks for specific purposes.

7
Additional resources

Imagine That Inc. provides several resources to support your simulation experience.
1) Getting Started. The Quick Start interface (Getting Started model) opens when you launch
ExtendSim. Use this interface to explore sample models and to view tutorials on building and
running models.
2) Online help.
Access the electronic User Guide and Developer Reference by giving the command Help >
ExtendSim Help or press F1 on your keyboard.
Use tool tips to identify interface elements.
Get complete definition of how a block works, including descriptions of its dialog items
and connectors, by clicking a blocks Help button.
3) Web advice. FAQs are available at www.ExtendSim.com/support/advice/faq.html.
4) Networking. Links for ExtendSim user forums, networks, and blogs are at www.ExtendSim.com/support/advice/forum.html. For example, the ExtendSim E-Xchange is a user forum
for sharing ideas, insights, and modeling techniques with other ExtendSim users. Use this
forum to post issues and solutions, share blocks and models, and to talk directly to other people developing simulations. You must register to join, but access is free and available to all
ExtendSim modelers.
5) Complimentary support. Get technical assistance for installation issues, basic usage questions, and troubleshooting for up to 60 days after purchasing a new product or upgrade. For
continuing support beyond the complimentary period, purchase either an annual Maintenance
Plan or Per-Incident Support.
Contacting Imagine That Inc. Technical Support
You must be a registered customer to receive technical support from our support staff. Register
online when you install ExtendSim (Windows only), register online after installation using the
Register.exe file in the ExtendSim9\Online Registration folder (Windows only), or email your
serial number and contact information to info@ExtendSim.com (Macintosh only).
Technical support is complimentary for the first 60 days after purchase. After that,, you must either
subscribe to the ExtendSim Maintenance Plan or purchase per-incident support.
When you contact our support representatives, please provide the following information:
1) ExtendSim serial number, product name, and release number:

Windows: Located in the Help > About ExtendSim menu command, on the title
page of the User Guide, or on the tear-off remainder of your registration card.
Mac OS: Located in the ExtendSim > About ExtendSim menu command, on the
title page of the User Guide, or the tear-off remainder of your registration card.
2) Name and contact information (telephone, email, and/or fax), so we can reply.
3) Type of computer.
4) Operating system and version.
Be sure you are using the most current version of ExtendSim; updates are available at our web site
(www.extendsim.com)

ExtendSim

Additional resources

Santee River Basin Model (SRM), developed by the National Heritage Institute, et al
This continuous hydrologic model predicts how operational alternatives will affect hydropower generation, lake levels, in-stream
flow, and water uses. It analyzes how dam operations can be altered to improve stream flow in over 300 river miles and helps assess
the effects on lake levels and power generation. A series of hierarchical blocks with nested submodels keep details in layers below the
models realistic top level. For instance, the Catawba-Wateree hierarchical block contains 9 additional hierarchical blocks, some of
which contain even more layers.

ExtendSim
8
Introduction
Model illustrations

Model illustrations
The tutorials used throughout this guide are specifically simplified so that you can easily learn how
to use ExtendSim. In contrast, simulation is more typically used to model complex processes, like
the ones shown on the following pages.

9
Model illustrations

ExtendSim

International Supply Chain model, by James Dailey and Associates


This discrete event model captures two key supply chain realities: the variances of supply chain dynamics and the non-linearity of business environments. The model uses an internal database to store the extensive amount of data, including SKUs, SKU Groups, Stock
Points, and Assembly Lines.

ExtendSim
10
Introduction
Model illustrations

ExtendSim

Standing Joint Force Headquarters (SJFHQ) model by the Naval Postgraduate School and The Boeing Company
This discrete event model simulates the planning processes performed by SJFHQ members, analyzes time-critical information systems, and performs
trade studies to obtain system measures of performance. It captures all processes, sub-processes, information flows, and personnel task assignments. The
simulation takes approximately three seconds to run through one full cycle of processes, simulating 260 hours of operational work time and 6000 individual task assignments. The database allows the modeler to use a set of rules to drive the model architecture and simulation parameters.
Reference: Modeling and Simulation Support for the Standing Joint Force Headquarters Concept by Susan G. Hutchins et al. Published in the 10th
International Command and Control Research and Technology Symposium.

Model illustrations
11

ExtendSim

12

Introduction
Model illustrations

Tutorial

Running a Model
Learn how to run an ExtendSim model
and investigate its components

For the things we have to learn before


we can do them, we learn by doing.
Aristotle

14

Running a Model
Opening the Reservoir model

The first two chapters of this User Guide provide a tutorial that will help you learn the basics of
working with ExtendSim models. This chapter covers:
Opening a model
Blocks, including their icons, connectors, and dialogs

Tutorial

Connections between blocks


Running a model
Displaying simulation results on a Plotter
Using the Notebook to display model inputs and outputs
Modifying models
The following chapter will show how to build the model seen in this chapter. To get the most out
of the tutorial, we recommend that you follow along by performing the actions described.
The ExtendSim Tutorial uses a continuous model to illustrate how to run and build a model. Even
if you will be building non-continuous (discrete event or discrete rate) models, it is important to
complete this Tutorial because:
The tutorials in the non-continuous modules assume you have completed this Tutorial.
It is common to use continuous blocks when building non-continuous models.

Opening the Reservoir model


The tutorial uses the sample Reservoir model. This simple continuous model is useful for illustrating concepts because it can be accessed and understood by all ExtendSim modelers.
To open the model,

Select File > Open.


Browse to
\ExtendSim9\Examples\Tutorials\

Select Reservoir 1 and


click Open.
This model simulates a reservoir being filled by two water
sourcesrainfall and an
incoming stream. The purpose
of the model is to see how
much water accumulates in the
reservoir over time.

Interface with Reservoir 1 model open

Running a Model
Model basics

15

Model basics

Blocks
Each block in ExtendSim represents a portion of
the process or system that is being modeled. Blocks
have names, such as Math or Queue, that signify the
function they perform. A Queue block, for example, will have the same functional behavior in every
Parts of a model
model you build. You can also add your own label
to a block to indicate what it represents in your specific model, such as a Queue block labeled Waiting Line.

Blocks are stored in Libraries. You will learn more about libraries and how to access blocks from
them at About libraries on page 26.

Most blocks are composed of an icon, connectors, and a dialog.


Icons
A blocks icon is usually a pictorial representation of its function. For instance in the Reservoir
model, the block labeled Reservoir is a Holding Tank block. Its icon symbolizes an actual tank that
can have quantities added or removed from it. The small squares attached to the sides of the icon
are connectors, which are discussed in more detail in the following section.

Place your cursor over a blocks icon to see a Tool Tip with its number (a unique identifier based on
when the block was placed in the model), block name, and the library it comes from. To also display a description of the block, go to Edit > Options and check Include additional block
information in the Model tab.
Connectors
Most blocks in ExtendSim have input and output connectors (the small squares attached to the
block). As you might expect, information flows into a block at input connectors and out of the
block at output connectors.
A block can have many input and/or output connectors; some blocks have none. For instance, the
Holding Tank block labeled Reservoir has an input connector on the left for values to enter. The
output connector on the right reports the results of the block's computations; in the tank it reports
the contents at each time step. Additional inputs on the bottom are for controlling specific tank
behavior.
The function of a connector is specific to the block; you can get information about a connectors
function by clicking the Help button in the bottom left-hand corner of the dialog, as discussed in
Dialogs, below. Since connectors are more important when you build a model (as compared to
when you run it), they are discussed in more detail in Connecting blocks on page 27.

Place your cursor over a connector to see its name and current value. You may also see additional
information depending on how the block is programmed.

Tutorial

In the simplest terms, ExtendSim models are made


Input
Output
up of blocks and connections. The Reservoir model, connector connector
Block
for example, has five blocks, as you can see in the
Block
Connection
model window. As the model runs, information
goes into a block, is processed and/or modified, and
is then sent on to the next block via a connection.

16

Running a Model
Model basics

Tutorial

Dialogs
Most blocks have a dialog associated with them. Dialogs are used to enter values and settings
before running simulations and to see results as the simulation runs.
To open a blocks dialog, double-click the blocks icon,
or right-click the icon and select Open Dialog. For
example, if you double-click the Holding Tank icon,
the dialog at right opens.
At the top of the dialog is the blocks global block number, its name, and, in braces, the library it resides in.
Global block numbers are unique identifiers assigned
sequentially to blocks as they are placed in a model.
At the bottom of every dialog is a Help button. The
blocks Help provides information about the block,
such as its purpose and use, connector usage, descriptions of each dialog item, and so on. Beside the Help
Holding Tank dialog
button is a text box where you can enter a label for the
block, up to 31 characters. The View popup is for
changing the icons orientation or appearance when you build modelsfor example, the Holding
Tank offers a choice of Default View and Default View Reverse.
Some dialogs also calculate and display values that are generated as the model runs, so if you leave
a dialog open during the simulation, you can watch the impact on different variables. This interactive simulation capability means you can even change some of the settings in a dialog during a
simulation run, such as choosing different buttons or typing new values.

When you click a button while the simulation is running, the block gets that changed value on the
next step. However, if you type text or enter numbers into a parameter field, the model pauses
while you are typing in order to get your entire input.

Connections
Connections are the lines that are used to join blocks together. They represent the flow of information from block to block through the model. The simulation itself is a series of calculations and
actions which proceed along the path of the connections repetitively. Each repetition is called a step
for continuous models or event for discrete event and discrete rate models.
In the Reservoir model, the blocks calculate in an order determined by the connections, starting at
the left and going to the right.

Running a Model
Blocks used in the Reservoir model

17

Blocks used in the Reservoir model


There are five blocks in the Reservoir model.
Lookup Table

Holding Tank

Tutorial

Random
Number
Math

Plotter I/O

Blocks in the Reservoir model

The following chart lists the blocks and their functions.


Name (Label)

Block Function

Purpose in Reservoir Model

Lookup Table
(Rainfall)

Acts as a lookup table. You can choose


to set it to output data based on the
current time or based on the value it
receives at its input.

Represents rainfall entering the reservoir each month. The amount of rainfall is based on historical averages and
varies with the month.

Random Number
(Stream)

Generates random integers or real


numbers based on the selected distribution.

Generates random values that correspond to the changing flow of the


stream. In this model, the stream
increases the reservoir level between 0
and 1 inch of water per month.

Math

Performs mathematical functions. The Adds the amounts from the two different water sources and transfers them
same Math block can be used for a
wide variety of purposes by selecting to the Reservoir.
the desired function from a popup box
in the dialog.

Holding Tank
(Reservoir)

Accumulates the total of the input values. It also allows you to request an
amount to be removed and outputs
that requested amount, if available.

Accumulates water from its two


sources. In this model, the tank has an
infinite capacity and nothing is
removed.

Plotter I/O

Displays plots and tables of data for up


to four value inputs for continuous
models. Can be used to input its
results to another section of the model
or to another model.

Shows the amount of input from the


two sources and the level of water in
the reservoir, as it is affected by the
amount of water entering it.

18

Running a Model
Running the Reservoir model

There is nothing fundamentally different about the structure of these different blocks. Any block
may create, modify, or present information, and many blocks perform more than one of these
functions. You can, of course, have multiple instances of the same block within a model.

Tutorial

Running the Reservoir model


Now that you have seen the basic parts of a model, you are ready to run the Reservoir simulation
and see how models operate. After running the model, you will see how easy it is to modify models
as you change your assumptions. For now, do not change anything in the blocks dialogs.

Select Run > Run Simulation or click the Run Simulation button

in the toolbar.

As the simulation runs, progress information will be displayed in the status bar at the bottom left
of the model window. (For a simple model like Reservoir that is completed very quickly, the messages may go by too quickly to be read.)
You can learn more about commands for running, stopping, and pausing models in Running a
model on page 580.

Displaying the results on the Plotter


Plotters show both a graphical representation of the numbers fed to them as well as a table of the
numerical values. As described on page 663, ExtendSim comes with a number of flexible plotters
to use in your models.
The Reservoir model runs for a simulated 36 months.
While the model runs, ExtendSim displays the results on
the Plotter, which by default remains on the screen when
the simulation is finished. This is your primary method
for determining what happened during the simulation.
The Plotter block in this model has information entering three of its four input connectors, so the graph displays three lines. The Plotter also has two value axes,
each using a different scale. The legend below the graph
indicates which axis is used for each line (Y2 indicates
the values are plotted on the right axis) and what each
line represents.
In this case, the blue line, labeled 1, is matched with the Plotter results for the model
left axis to show the total contents of the reservoir over
time. Using the right axis, the red line (2) shows the amount of water entering the reservoir from
the rainfall alone and the green line (3) shows the input from the stream. (Because the model uses
random numbers for the stream, specific values may be different after each run.)
The bottom of a plotter window shows the data points which produce the line. Scroll down this
list to see the numerical values for each line. You can also observe the values for any given point by
moving the cursor anywhere in the graph. The corresponding values are displayed above the data
tables column headings.

ExtendSim plotters remember the pictures (but not the data) of the last four plots. You can see the
previous plots by clicking on the small turned-up page symbol
part of the plot window.

at the bottom left of the graph

Running a Model
Notebooks

19

Notebooks
ExtendSim features like the Notebook give you capabilities that go beyond the basics of building
and running models. A Notebook is a window you can customize to help organize and manage the
data in a model.

Select Window > Notebook or click the Open Notebook button

in the toolbar.

The Notebook for the Reservoir model opens. As you can see, the important parameters and
tables you saw in the dialogs of the Reservoir model have been placed in its Notebook.

Run the simulation again. Note that the results shown on the Plotter and the results shown in
the Notebook are the same (the results will change slightly from one simulation run to the next
because the Stream source uses a random distribution).

Reservoir 1 model with Notebook containing clones of dialog items from the Lookup
Table, Random Number, and Plotter I/O blocks.

Notebooks are easy to create and are especially useful for documenting models and to view the
impact of inputs on results. For more information, see Notebooks on page 566.

Making changes to the model


So far, you have run the simulation and viewed the Notebook without changing any of the
assumptions that were supplied when the model was created. One of ExtendSims strongest features is the ability to change assumptions on the fly and see the results instantly. Since the Plotter
remembers the previous four plots, you can easily compare the results after you change assumptions.

Tutorial

You can use a Notebook as a front-end to the model - to control model parameters, report simulation results, and document your model. Each model has its own Notebook which can contain
plots, text, pictures, drawing items, and cloned duplicates of dialog and plotter items.

20

Running a Model
Making changes to the model

You can change a model by adding or removing blocks or by changing parameter values in a blocks
dialog.

Tutorial

Adding and removing blocks


If you have some processes running in parallel (such as the two water sources in the
Reservoir model), you can easily test the results of adding additional parallel processes or removing
existing ones.
You will learn how to add blocks in Building a Model on page 23.
To remove a block, click it to select it, then choose Edit > Clear Blocks or use the Delete or Backspace key. Note that deleting a block removes its associated connections as well.

Changing dialog parameters


You can change a dialog value by clicking in a parameter field while the model is running. When
you do this, ExtendSim pauses the simulation. To continue the simulation, select Run > Resume
or click the Pause/Resume tool in the toolbar. Note that when you make changes to a dialog and
then save the model, the changes are saved with it.
On page 567 you will see how to vary a dialog value manually using Controls, such as Sliders, and
on page 632 how to use scenario analysis to automatically explore various options. For simplicity,
parameters in the following blocks are entered in the dialog as static values that do not change
based on model conditions. To see how easy it is to change dialog parameters and see the impact
on results, try some of the following suggested changes.
Lookup Table block (Rainfall)
The Lookup Table block provides a timevarying value (in this case, the amount of rainfall
each month) for the simulation.
This block looks at the current simulation time,
compares it to the time values in the column labeled Months,
and outputs the corresponding Rain (inches) value.
Right now, the Lookup Table block shows that 2.6 inches of
water are fed into the reservoir at time 0, the beginning of the
run, 4.4 units at the beginning of the next month, and so on.

Change the first value in the Rain column from 2.6 to a


high number, such as 90, then run the simulation again to
see the impact on the results. (To change the number, type
90 in place of 2.6. Then click somewhere outside of the cell,
or OK, to save the change.)
Lookup Table block dialog

Running a Model
Other modifications

21

Random Number block (Stream)


The Random Number block generates values
based on a random distribution. In this model,
it outputs a real number from 0 to 1.

Tutorial

Change the distributions maximum output


from 1 to a different number, such as 30, and run the
simulation again.

ExtendSim lets you choose from dozens of probability distributions or create your own. Learn more in Probability
distributions on page 686.

Random Number block dialog

Math block
The Math block can be used to perform any
mathematical function. In this model, it is used
to add the amounts of water coming in from the
rainfall and the stream.

To add a constant value to the input number, enter an


amount in the Add field.
The Math block is very versatile. By clicking radio buttons
you can quickly change the type of mathematical function
that the block performs.

Math block dialog

Holding Tank block (Reservoir)


In addition to accumulating the amounts
entering, the Holding Tank allows you to
enter an initial amount and to remove
some or all of the contents. You can also
specify which mathematical method is performed on the inputs to calculate the contents.

Enter an amount in the Initial contents field and


run the simulation again to see how the results
change.

Other modifications
As you have seen, ExtendSim offers many options to
change the way a model runs so that you can explore
Holding Tank block dialog
different scenarios. The Reservoir model can be
expanded upon in other ways that will be explored later since they involve more advanced techniques. For example, you can:
Add more real-life contingencies by adding blocks to the model. For example, add more water
sources, then use a Notify block (Utilities library) to monitor the simulation and sound an alarm
if the water level goes above a certain value. For more information, see Notify block on
page 569.
Add blocks and connect them to the Holding Tank to remove some of the water from the Reservoir. The blocks can cause the water to be removed randomly or based on a table of expected
outputs. The Reservoir models in Tutorial on page 63 demonstrate some ways of doing this.

22

Running a Model
Other modifications

Tutorial

View the status of blocks by connecting their outputs to the Plotter, by leaving their dialogs
open while running the simulation, or by taking some of their dialog items and putting them in
the model window, which is referred to as cloning. Youll learn more about cloning in Creating
a dashboard interface on page 564.
Perform analysis such as Scenario Analysis or Optimization and have ExtendSim find the best
set of parameters. See the chapter Analysis on page 623.
Build a user interface for the model by putting sections of the model in layers (hierarchy), building custom reports (Notebook and reporting features), or creating a dashboard front-end (using
buttons and cloned dialog parameters to run the model). These features are discussed in Creating a Custom User Interface on page 561.
Now that you understand how easy it is to run an ExtendSim model, the next chapter will show
you how to build a model from scratch. When you are finished with that chapter, you will see how
easy it was to create the Reservoir model and the ease with which you can create your own models.

Tutorial

Building a Model
How to build an ExtendSim model
and use the model window features

He builded better than he knew;


The conscious stone to beauty grew.
Ralph Waldo Emerson

24

Building a Model
Steps to create the Reservoir model

This chapter continues the Tutorial by describing the steps required to create the Reservoir model
that you ran in Chapter 1. As stated earlier, this model uses continuous simulation, but the concepts described in this chapter also apply to other types of modeling.

Other modules in this guide describe specific discrete event and discrete rate concepts and show
Tutorial

you how to build those types of models, but they assume that you have already completed this
Tutorial.
The topics covered in this chapter include:
Opening a new model window
Simulation setup and run options
Opening a library of blocks
Adding blocks to the model
Connecting blocks using different methods
Using dialogs to set parameters
Making adjustments to the Plotter graph
Hierarchy - top down
Navigating the model
Cloning duplicates of dialog and plotter items

Steps to create the Reservoir model


The basic concept behind the Reservoir model is to simulate what happens to a reservoirs water
level as water enters it over a 36 month period. There is no water in the reservoir at the start of the
simulation and no water is removed from it. As water sources add their contributions each month,
the water level rises.
The steps to create the Reservoir model are:
1) Open a new model worksheet
2) Set simulation run parameters
3) Build the model using blocks from libraries
4) Select block settings and enter dialog parameters

For your reference, the final version of the Reservoir 1 model is located in the ExtendSim9\Exam-

ples\Tutorials folder and is shown on page 36. However, you will learn more about ExtendSim and
modeling if you build the model yourself.

Building a Model
Opening a new model worksheet

25

Opening a new model worksheet


To start a new model:

Choose File > New Model.


ExtendSim opens a blank model worksheet titled
Model-x.
You enter simulation parameters, such as the models time
units and duration, in the Simulation Setup command.

Choose the menu command Run > Simulation Setup

New model worksheet (Windows)

The Simulation Setup command opens a dialog for setting a variety of simulation and 3D animation parameters, such as how long and how many times
the simulation will run, when the random number seed gets reset, the mode of interaction between
the simulation and the 3D window, and so forth. The dialog has tabs for Setup, Continuous, Random Numbers, 3D Animation, and Comments.
The most common simulation settings you will need to enter in the Simulation Setup window
(and often the only ones) are the End time and Global time units parameters located on the
Setup tab. For most purposes, you want the simulation to start at the beginning, so you would
use the default start time of 0.
Customize the Setup tab by entering the following parameters:

End time: 36
Start time: 0 (Default)
Runs: 1 (Default)
Global time units: Months
Click OK
When it runs, the model will simulate 36 months
of time, performing calculations once each
month.
Setup tab of Simulation Setup window
Each time you run a simulation, ExtendSim uses
the same values entered in the Simulation Setup
window. Thus, you will usually only configure the settings once per model. The Simulation Setup
command is discussed fully in Simulation setup on page 574.

Building the model


The Reservoir model requires five blocks. There are two sources of water: rainfall and a stream; the
data for rainfall comes from a table while the stream contributes a random amount. You need a
block to add the two water sources, another block that can hold values (representing the reservoir),
and a plotter to display the results of the simulation.

Basic steps
The basic steps for building a model are:

Tutorial

Setting the simulation parameters

26

Building a Model
Building the model

1) Open the relevant libraries, if necessary. (Most ExtendSim libraries are automatically opened
when you launch ExtendSim.)
2) Add the blocks to the model.

Tutorial

3) Move them to the desired positions.


4) Add connections between blocks.

About libraries
Blocks used in a model are stored in repositories called libraries. The entire definition for a block
(its program, icon, dialog, and so on) is stored in the library. When you include a block in a model,
the block itself is not copied to the model. Instead, a reference to the block is included in and
stored with the model. Any data you enter in the blocks dialog is also stored within the model.
There are many advantages to this method of using references to libraries instead of actual blocks
in models. If you change the definition of a block in a library, all models that use that block are
automatically updated. Also, block definitions are quite large, so storing just a reference to the
library saves memory and reduces processing time.

When you save a model, ExtendSim saves the names of the blocks as well as the locations of the

libraries that store the blocks. The next time you open the model, ExtendSim automatically opens
the libraries the model uses. You can also set a preference in the Options window to have up to
seven libraries load automatically whenever ExtendSim is launched (seeOptions on page 792).
Opening the relevant libraries
To add a block to a model, the library in which that block resides must be open. By default, the
major libraries that are shipped with ExtendSim automatically open when you launch the application. The instruction below are for situations where you have closed a library or when you want to
open a custom library.
The Reservoir model needs blocks from the Value and Plotter libraries. To open these libraries:

Choose Library > Open Library. ExtendSim takes you to the Libraries folder.
Select the Value library.
Click Open.
Repeat the above steps to open the Plotter library.
Open libraries are listed in alphabetical order at the bottom of the Library menu.

Adding blocks to the model


There are two methods for adding a new block to a model:
Select the block from its library within the Library menu.
Drag the block from a Library window, as discussed on Library Window mode on page 771.
For this Tutorial, you will use the first method and select blocks from the Library menu.

Building a Model
Building the model

27

The first block needed for the Reservoir model is a


Lookup Table block, which will be used to enter data
about the amount of rainfall entering the reservoir.
To add the Lookup Table block to the model worksheet:

Tutorial

From the Library menu, scroll to the Value library,


which is listed at the bottom of the menu. When the
Value library is highlighted, a secondary menu opens
that lists several categories, each of which further
expands to show the blocks contained in that category.

Under the Math category, click Lookup Table.

Library menu with Value library categories

An icon for the Lookup Table block


appears in the top-left corner of the model
window. By default, the icon is selected.
To deselect a block, click anywhere in the
window. To move a block, select it and
then drag it to the desired position in the
model window or use your keyboard arrow
keys to move it one pixel at a time.

If you click at a location on the model window before you pick a block from the
menu, the block will appear at the point
where you clicked.

Lookup Table block added to model

From the Library menu choose the


library, category, and block (as indicated
below), to add the four remaining
blocks to the model:

Value library > Inputs category >


Random Number block

Value library > Math category >


Math block

Value library >Holding category >


Holding Tank block

All blocks added to model

Plotter library >Plotter I/O block


When you have finished, the model should look similar to the screenshot above.
This is a good time to save the model so far.

Choose File > Save Model As and name the file My Reservoir.
Connecting blocks
As mentioned in Chapter 1, connections pass information from one block to another. Blocks are
usually connected together by drawing connections from one blocks output connector to another
blocks input connector.

28

Building a Model
Building the model

For a quick one-step method to add and connect a new Item or Rate block in a model, or to insert

Tutorial

a new Item or Rate block between two already-connected blocks, see Smart connections on
page 618.

Connectors
In ExtendSim, the behavior of most connectors is predefined for each specific block. For example,
when you set a Math block to use a function (add, subtract, divide, etc.) it knows what to do with
the values that are input into the block. This makes model building easy since you can connect
blocks and run simulations without having to write equations to define what each block should do
with the inputs or outputs.
There are several types of connectors in ExtendSim. Continuous models,
such as Reservoir, only use value input and output connectors to pass information from one block to another. Other types of connectors will be discussed in later chapters.

Each input connector can only have one source of information. Therefore,

Input

Output

Value connectors

blocks that need to have many sources of input require a separate input
connector for each piece of information.

Types of connections
There are two types of connections in ExtendSim: line connections and named connections. Line
connections join the output of one block to the input of another using connection lines; named
connections use text labels as outputs and inputs, causing data to jump from the output to the
input without using connection lines.
Connection lines can be drawn using three different styles: right-angle, straight, and multi-segment.
The default style is right-angle, which you will use in the following example.
The other styles of line connections, as well as named connections, will be discussed at Additional
ways to connect blocks on page 33.
Connecting the Lookup Table block to the Math blocks variable connector
In the Reservoir model, the two water sources need to be connected to the Math block so that the
amounts of water entering the reservoir from rainfall and from the stream can be added together.
The first step is to connect the Lookup Table block to the Math block.
As mentioned earlier, blocks that need to have more than one source of input require a separate
input connector for each piece of information. ExtendSim provides for this by putting variable
connectors on blocks that might need them. This is usually indicated by a black arrow beneath the
connector that can be dragged to display additional connectors.
The Math block, for example, has a variable input connector as indicated by the black arrow below
its input. However, since the Math block displays two inputs by default, you do not need to
expand the variable connector. For more information about using variable connectors, see Variable connectors on page 556.
To connect the Lookup Table block to the Math block:

Building a Model
Working with block dialogs

29

Move the cursor to the output connector of the Lookup


Table block.
The cursor changes from an arrow to a technical drawing
pen:

Click the Lookup Tables output connector, then drag a


Thickened line = successful connection

Let go of the mouse button.

If you accidentally release the mouse button before the line

has thickened, a dotted red line will appear to indicate the


connection has not been made. To remove it, double-click
the line so that the entire connection thickens (indicating
that you have selected it), then press the Delete or Backspace
key, or choose Edit > Clear Connection. (A single click will
Right-angle connection
select one segment of the line only.) You can then make a
correct connection.
Connecting from the Random Number block
The next step is to connect the second water source, the Random Number block, to the input of the Math block. To do
this:

Draw a connection line between the output connector on


the Random Number block and the second input connector on the Math block, just as you did for the Lookup
Table block earlier.
Connecting the remaining blocks

Connect from Random Number block

Connect the other blocks in the model as follows:

Draw a connection line between the output connector on


the Math block and the input connector on the Holding
Tank block.
Connection from Math block

To monitor the reservoirs level, draw a connection


line between the Holding Tanks output connector
and the top input connector on the Plotter block.

Working with block dialogs


Now that all the blocks have been placed and conConnection between Holding Tank and Plotter
blocks
nected in the model, you can enter data and select
options in block dialogs. The data for this model
comes from a table of values and from a random sample. The sections below will describe the settings used in each blocks dialog.

Tutorial

line to the top input connector on the Math block. You


can tell when you are over the connector because the line
you draw becomes thicker.

30

Building a Model
Working with block dialogs

Rainfall source
The amount of rainfall entering the reservoir is determined by a Lookup Table block that contains
each months expected rainfall. In a real-life situation, for example, these numbers may have been
determined by annual recorded averages.

Tutorial

Double-click the Lookup Table block to open its dialog.


By default, the Lookup Table block is set to Lookup the: input value. In that mode, the block
outputs a value that corresponds to the value it receives at its input. However, you want the
Lookup Table block to output a value--the amount of rainfall for the month--that corresponds to
the current simulation time.

Customize the dialogs Table tab by setting the behavior of the block to look up simulation time
each month:

Lookup the: time


Output is: stepped (Default)
Time units: months (Model Default)
Time means the block will compare current simulation time to a time in the table and output the
corresponding value. Stepped means that ExtendSim will use the exact values you enter in the
table, not an interpolated amount.

Increase the number of rows so the table has room for


twelve months of data:

Click the +/- resize button - the green square at


the bottom right of the table.

Enter 12 for the number of rows and 2 (the


default) for the number of columns.

Click OK
Enter data into the table as shown in the screenshot at
right.

If you click Enter after each value, the cursor will automatically move to the next cell.

Table settings for Lookup Table

Check the Repeat table every checkbox and enter


12 in the months box.
This causes the determination of monthly rainfall to start over every 12 months.

In the label entry box beside the Help button, type in Rainfall.
Labels can have a maximum of 31 characters, including spaces.

Adding label to the Lookup Table block

Block labeled Rainfall

On the Options tab, enter the following text in the column labels
box to give more meaningful headings to the table (be sure to include the semi-colon):

Month;Rainfall (inches)
Return to the Table tab

Building a Model
Working with block dialogs

31

The tables left column now specifies the month and the right column specifies the amount of
expected rainfall in inches. At each step, ExtendSim will check the blocks table for a time in the
first column that is less than or equal to the current simulation time and output the corresponding
value (inches of rainfall) to its right. For instance, for the fourth month the block will output 1.9.

Click OK to close this blocks dialog.


In this model, the Random Number block is used to specify a random distribution of water entering the reservoir from the stream. The distribution is a real number between 0 and 1, indicating
that the stream will add between 0 and 1 inches of water to the reservoirs level each month.

Open the Random Number blocks dialog.


By default the dialogs parameters already have the settings you want:

Distribution: Uniform Real (Default)


Minimum: 0 (Default)
Maximum: 1 (Default)
Enter Stream in the label field next to the Help button.
Click OK.

Random Number dialog settings

Combining the sources


The Math block combines the values from the two water
sources. As indicated by the plus sign on its icon when you
placed the block in the model, the Math block is set by
default to add its inputs. There is no need to change its dialog
settings.

Although you dont need to for this model, the Math block

function can be changed directly in its dialog or by rightclicking a special area on its icon. For the Math, Decision,
and Simulation Variable blocks (Value library), the icons
lower right corner has a sensitized area that looks like a parMath dialog settings
tially turned page. You can right-click that area to change dialog settings.

Water in the reservoir


The Holding Tank block represents the level of water in the reservoir. In this model, the Holding
Tank has no beginning contents and does not release any of its contents.

Tutorial

Stream source

32

Building a Model
Working with block dialogs

Tutorial

Open the Holding Tank blocks dialog.


In the dialog, set:
Initial contents: 0 (Default)
Inputs are: integrated (delay)
Enter Reservoir in the label field next to the Help
button.

Click OK.

The Holding Tank should be set to integrate, rather

than sum, its inputs. This will output the value at time
1 that has been calculated for the period from time 0 to
1. These continuous simulation concepts are discussed
more thoroughly in Integration vs. summation in the
Holding Tank block on page 690.

Holding Tank dialog

Displaying the results


The Plotter I/O block monitors the total amount of water in the reservoir. (Later in this chapter
you will learn different techniques for connecting the Lookup Table and Random Number blocks
to the Plotter, to also monitor the amounts flowing in from the rainfall and the stream.)

Double-click the Plotter to open its plotter window.


Notice that the first column in the table is titled Contents. The Plotter automatically named it
when you connected from the contents output of the Holding Tank block.
To further personalize the plotter window:

Click the text label Value in the upper left corner of the Plotters graph to select its text box.
Type Inches in the text box and click the Tab, Return or Enter key.
Using that same process, change other Plotter labels in the graph pane as follows:
Change Plotter I/O (located at the top of the graph) to Reservoir Model.
Change Time (located below the graph) to Month.
Close the plotter window
Save the model.
When you save a model, ExtendSim creates a backup, ModelName.bak, of your previously saved
model. To open a backup file, add the extension .mox after the .bak so that the file reads ModelName.bak.mox. Then Open the backup file from the File menu.

Building a Model
Running the simulation

33

Running the simulation


Now that you have placed blocks on the model, connected them, and configured their dialogs with data, it is
time to run the model.

Select Run > Run Simulation or click the Run Simulation button in the toolbar.

Additional ways to connect blocks


For this simulation, you need to also connect the rainfall
and stream blocks to the Plotter so you can compare their outputs to the total water collected in
the reservoir.
When you built the model, you used the right-angle connection line style to connect blocks. This
is the default setting for all new models. You can also connect blocks using the straight and multisegment connection line styles. In addition to using connection lines, you can connect blocks
using named connections. These methods are discussed in the following topics.

Straight line connection


You draw this line style in exactly the same way as the right-angle style, but it displays differently.

Select Model > Connection Lines and select the straight line option (second item).

Changing the setting in the Model menu will only affect subsequent connections in this model.
You can change the default setting for all models by choosing Edit > Options > Model tab and
unchecking Default connection line style is right angle.

Draw a line from the output connector on the Lookup Table block to the second input connector on the Plotter.
Both the straight line and right-angle line connections have the disadvantage of running directly
over other blocks and connections, making the model more difficult to read.

Delete the straight line connection by selecting it and pressing Delete or the Backspace key.
Multi-segment line connection
This style has the advantage of letting you draw the lines so that they go around blocks rather than
over them.

With the straight line option still selected, click the Lookup Tables output connector and drag
your cursor until it is above the space between the Holding Tank and the Plotter blocks.

Release the mouse.


This creates the first segment. The cursor
remains a technical pen because you are pointing
at an anchor point.

Immediately click again and drag the cursor to


the second input connector on the Plotter, then
release the mouse button.

First segment and anchor point

Tutorial

A plot similar to the one at right will be displayed. It


only shows one line because only the Holding Tank is
currently connected to the Plotter block.

34

Building a Model
Additional ways to connect blocks

You now have a multi-segment connection. (Note


that a right-angle connection is simply a multisegment connection that is automatically created
by the application.)

Tutorial

Anchor points can be moved if the connection did


not come out as you intended. Simply move your
mouse over the anchor point until the cursor
changes into a hand, then click the anchor point
and drag it to the desired location.

Multi-segment connection

Although this connection no longer crosses over any other elements of the model, you can see how
a larger, more complex model could become very cluttered with so many line segments in the window.

Delete the multi-segment connection by double-clicking a segment until the entire connection
line thickens, then press Delete or the Backspace key. (To delete just one segment of the line,
you would click the segment once and press the Delete key.)

Named connection
Named connections are text labels that are used to represent one output at many locations in your
model. If you have two labels with the exact same text, you can use these to have the flow of data
jump from one part of the model to another. Named connections are often used when you do not
want to clutter up your model with many lines. You can place the names near the blocks to which
they connect and leave much of the area of your model free from connection lines. Named connections are discussed in detail at Named connections on page 618.

Named connections are not case sensitive and spaces and returns are ignored, but you must use
identical spelling in the text names.

Creating a named connection between the Lookup Table and the Plotter
To add a text label for the named connection:

Choose Model > Connection Lines and select either the right-angle or
straight line style.

Double-click in the model window, slightly above and to the right of the
Lookup Table blocks output connector. This opens a text box.

Typing in text box

Type Rainfall in the text box.


When you are finished typing, click anywhere else on the model
window.

Join the Lookup Tables output connector to the word


Rainfall by dragging a line from the connector to the text and,
when the line thickens, release the mouse.

Until you connect the text to an input connector on another block,


the line will remain dotted.

Lookup Table joined to named


connection text

Building a Model
Plotting against multiple axes

35

Click the Rainfall text to select it, then choose Edit > Duplicate.

Drag the duplicate text to a spot slightly below and to the left of
the Plotter and release the mouse.

Draw a line between this text and the second input connector on

Named text connection joined


to Plotter

the Plotter. Note that both the connection lines are now solid.

Create a Stream text label and place it near the output of the Random Number block.
Connect from the Random Number blocks output connector to the text label.
Duplicate the text label and drag it to a spot below and to the left of the Plotter.
Connect from the text label to the third input connector on the Plotter.

To display the actual connection lines between blocks, choose Model > Show Named Connections.
Plotting against multiple axes
Click the Run Simulation button on the toolbar.
The Plotter that appears now has three lines on it: the
blue one displays the amount of water in the reservoir
over time, the red one displays the amount entering the
reservoir from the rainfall, and the green line displays
the water entering from the stream.
At the end of the simulation run, the Plotter automatically scales its axis to be able to display all values for both
columns of data. However, because the total amount of
water in the reservoir has a much greater range than the
amount entering it each month, the lines representing
the rainfall and stream amounts can barely be seen. They
simply look like horizontal lines across the bottom of the graph.
To solve this problem, you can add a separate axis (Y2) on the right-hand side of the graph and set
the Plotter to display the rainfall and stream values against that axis.

If its not already open, double-click the Plotter to open its plotter window.
Click the Trace properties button
, which is the left-most button in the toolbar at the top of
the plot window.
The Tools dialog opens.

In the second row, labeled Rainfall, click the Y1/Y2 button

second from the right.


The button changes so the vertical line is to the right of the horizontal line.

In the third row, labeled Stream, click the Y1/Y2 button, causing
the stream to also be plotted against the Y2 axis.

Plotter Tools dialog

Tutorial

Named connection between Random Number and Plotter


Repeat the process above to create a named connection between the Random Number block and
the Plotter:

36

Building a Model
The final Reservoir model

Close the Tools dialog box.


Click the Run Simulation button on the toolbar.

Tutorial

The graph now displays the Rainfall and Stream lines using the right-hand axis.

The final Reservoir model


If you have followed all the steps, your model should look similar to the Reservoir model shown
here.

My Reservoir model

Additional enhancements
Now that you know how to create a model, you can explore some other features, such as hierarchy
and cloning, that are easy to do and will greatly enhance your models.

Introduction to hierarchy
The Reservoir model displays one block per function performed, i.e. the Lookup Table block outputs the amount of water coming from rainfall, the Random Number block outputs the water
coming from a stream, etc. For such a simple model, this works fine. However, models created for
real-life simulations can involve thousands of blocks. Building, organizing, and presenting a complex model with all the blocks on one layer of the worksheet would be very difficult.

Building a Model
Additional enhancements

37

To help simplify and clarify models, ExtendSim lets you create hierarchical blocks (H-blocks) that
group several blocks together into one block while still allowing you to drill down into the lower
levels to access the individual blocks.
Creating a hierarchical block from existing blocks
In the Reservoir model, you can group the blocks that represent sources of water together into one
hierarchical block. This process is extremely easy.
Do not select the text labels (Rainfall and Stream) of the named connections!

Select Model > Make Selection Hierarchical.


A dialog appears prompting you for a name for the hierarchical block.

Enter Water Sources.


Click Make H-Block.

Hierarchical block

The three individual blocks are replaced with a single hierarchical


block with a white rectangle for an icon. By default, hierarchical
blocks have drop shadows to distinguish them from other blocks; you can change that option by
choosing Edit > Options > Model tab. Note that there are three connectors, including the Rainfall and Stream named connections, on the hierarchical blocks icon.

Double-click the hierarchical block to see the submodel, or individual components, inside it.

The hierarchical block and submodel may look

slightly different depending on how the blocks were


placed.
The windows title bar displays the name of the
hierarchical block. Note that connections for
transferring data from within the hierarchical
block to the outside model are represented in the
submodel as named connections with red borders
around the text. Those connections correspond to
the three connectors on the blocks icon.

Water Sources submodel

Close the Water Sources window.


ExtendSim provides many more features for creating and using hierarchical blocks, including
building hierarchical blocks from scratch, assigning custom icons to them, and providing Help
information. To learn more, see Hierarchy on page 598.

The ExtendSim Navigator


The Navigator is an explorer-like window that can be used for multiple purposes:
To navigate through the hierarchical structure of a model
To access any databases used in the model
To add blocks to the model worksheet, as an alternative to using the Library menu

Tutorial

Group-select (shift-click) the Lookup Table, Random Number, and Math blocks.

38

Building a Model
Cloning

Navigating through the Reservoir model


Since your reservoir model now has a hierarchical block (the Water Sources block you created earlier), you can see how the Navigator is helpful for exploring a model.
To open a Navigator:

Tutorial

Select Window > Navigator or click the Open Navigator tool in the Toolbar.
By default, the Navigator opens in Model Navigator mode,
with the word Model selected in the leftmost popup menu.
The name of the active model is listed at the top of the window and below the Navigators leftmost popup menu, and
each blocks icon and information (name, label, and global
block number) is displayed.

Click the plus sign beside the Water Sources hierarchical


block.
The hierarchical block expands to show the blocks within it.

Select the Lookup Table block in the Navigator.


The corresponding block is selected in the model window.

Double-click the Lookup Table block in the Navigator.


The blocks dialog opens.
Navigator in Model mode
As you can see, the Navigator is indispensable for exploring
complex models, especially for models with many layers or
instances of hierarchy. For additional information, see Navigator on page 770

Cloning
In Running a Model on page 13 you saw how Notebooks help organize, monitor, and interact
with data during simulations. ExtendSim lets you add dialog and plotter items to your Notebook
using a technique called cloning. Clones are exact replicas of dialog items, behaving exactly like the
original. When a cloned value changes, the original dialog item or plot graph also changes.
To clone a plot from the Plotter block to the Notebook:

Select Window > Notebook or select the Open Notebook tool in the toolbar.
An empty Notebook window opens.

Double-click the Plotter block in your reservoir model.

Building a Model
Other modifications

39

Using the Clone layer tool

from the toolbar, click the plot (graph portion) of the plotter
and drag it to the Notebook window.

Tutorial

Cloning plot onto Notebook

Run the simulation again.


The plot in the Notebook is the same as the graph on the Plotter.
For more information, see Cloning on page 562.

Other modifications
Since it is so easy to add and modify elements in ExtendSim models, there are many ways you can
enhance them. Here are just a few examples.
Add blocks to represent more sources of water entering the reservoir.
Add an additional Plotter to see the various lines on different plots--for example if the scales of
the results are very different and you do not want to plot against the Y2 axis. There are four ways
to create a second instance of a Plotter:
Insert another Plotter block from the Library menu, as you did earlier in this chapter.
Insert another Plotter block from the Plotter librarys library window, as discussed at
Library Window mode on page 771.
Copy and paste the existing Plotter.
Select the Plotter, choose Edit > Duplicate, and move the duplicate Plotter to the desired
location.
You can use these same techniques to duplicate any block in the model. Note that if you copy or
duplicate a models existing block, any dialog settings for that block will also be copied.
Configure the Holding Tank block so that it outputs water over time. For an example of this, go
to Tutorial on page 63.
Run the model with Show 2D animation enabled to display the water level in the Holding Tank
block. Learn more, see Blocks with built-in animation on page 609.

40

Building a Model
Next steps

Set delta time to a value less than 1, as discussed onpage 85. This calculates output values
between the steps, so you can see finer resolution of the model results.

Next steps

Tutorial

You have learned the basic techniques for running and building models and some additional techniques for enhancing your models. The following are some suggestions on which sections of the
manual to explore next, depending on what your own simulation requirements are.
The Tutorial modules Simulation Concepts chapter discusses more general simulation and
modeling concepts and how ExtendSim can be used for all types of modeling. It describes the
three main modeling methodologies (continuous, discrete event, and discrete rate) as well as
modeling approaches such as Monte Carlo, Agent Based, and State/Action.
If you already know the type of modeling you want to do, the specific modules are:
Continuous Modeling starting on page 59.
Discrete Event Modeling starting on page 91.
Discrete Rate Modeling starting on page 309.
3D Animation starting on page 447.
The How To module starting on page 546 has several chapters that show how to use ExtendSim to do common modeling tasks (such as creating a user interface, analyzing model results,
etc.).

Tutorial

Simulation Concepts
Learn about systems, simulation,
and modeling methodologies

It must be remembered that there is nothing more


difficult to plan, more doubtful of success, nor more
dangerous to manage, than the creation of a new system.
Niccolo Machiavelli

42

Simulation Concepts
Systems, models, and simulation

The first two chapters of the Tutorial showed how to build and run simulation models in ExtendSim. Since you have seen some of what can be accomplished with ExtendSim, now is a good time
to explore some modeling and simulation concepts. The following discussion is meant to familiarize you with modeling and simulation terminology and concepts used throughout this guide. This
chapter:

Tutorial

Explains modeling concepts and terminology


Discusses model types and common approaches to modeling
Describes the modeling process, including goals and steps
Shows how to verify and validate a model
After reading this chapter you will have a better grasp of modeling concepts and will be ready to
start using ExtendSim for your modeling needs. Note that an in-depth exploration of simulation is
beyond the scope of this document. For more detailed definitions and theory, please refer to the
numerous books on simulation.

If you are already familiar with the concepts to be presented in this chapter, skip it and proceed to
one of the other modules, as discussed in About this User Guide on page 6.

Systems, models, and simulation


All professions use models of one form or another. But the word model does not always have the
same meaning to business professionals, managers, scientists, and engineers. Even within a specific
discipline, such as manufacturing, modeling has many different definitions. The following discussion serves to clarify what modeling means as it relates to ExtendSim.

Systems
The real world can be viewed as being composed of systems. A system is a set of related components or entities that interact with each other based on the rules or operating policies of the system:
Entities are the internal components of the system. Entities are involved in processesactivities
in which they interact with each other.
Operating policiesthe types of controls and availability of resourcesare the external inputs
to the system. They govern how the system operates and thus how the entities interact.
Over time, the activities and interactions of entities cause changes to the state of the system; this is
called system behavior or dynamics. Systems can be mathematically straightforward, such as a
flower growing in the soil and turning towards the sun to maximize photosynthesis. Or they can be
more complex, such as supply chain operations composed of planning, selling, distribution, production, and sourcing subsystems.

Models
A model is an abstracted and simplified representation of a system at one point in time. Models are
an abstraction because they attempt to capture the realism of the system. They are a simplification
because, for efficiency, reliability, and ease of analysis, a model should capture only the most
important aspects of the real system.
Most models can be classified into four basic types:
A scaled representation of a physical object, such as a 1:18 diecast model of a Ferrari, a clay
model of a proposed packaging bottle, or a scale model of the solar system.

Simulation Concepts
Modeling methodologies

43

A graphical or symbolic visualization, such as a flow chart of office procedures, the board game
Monopoly (which represents the hotels and facilities of Atlantic City), or an architects plans for
a building.

A mathematical description that incorporates data and assumptions to logically describe the
behavior of a system. This type of model is typically dynamicit has a time component and
shows how the system evolves over time. ExtendSim products are tools for building mathematically-based, dynamic models of systems.
Dynamic modeling is the foundation for computer modeling. Thus, for purposes of this manual,
the word model will be used to mean a description of the dynamic behavior of a system or process.
ExtendSim models typically have a time component and can show cause and effect and the flow of
entities throughout a system (you can also create ExtendSim animations that show spatial relationships.)

Simulation
The Merriam-Webster OnLine Dictionary defines simulation as the imitative representation of
the functioning of one system or process by the functioning of another. This means that to determine how an actual system functions, you would build a model of the system and see how the
model functions.
Simulations run in simulation time, an abstraction of real time. As the simulation clock advances,
the model determines if there have been changes, recalculates its values, and outputs the results. If
the model is valid, the outputs of the simulation will be reflective of the performance or behavior
of the real system.
Simulation with ExtendSim means that instead of interacting with a real system you create a logical model that corresponds to the real system in certain aspects. You simulate the operations or
dynamics of the system, then analyze one or more areas of interest. You do this in order to reduce
risk and uncertainty so that you can make informed, timely decisions.

Modeling methodologies
The formalism you use to specify a system is termed a modeling methodology. The three main
modeling methodologies are:
Continuous
Discrete event
Discrete rate
These methodologies are described, compared, and contrasted in the later topics in this chapter.
In addition to the main modeling methodologies listed above, other modeling approaches are useful and will be discussed in this chapter. These approaches are usually based on one of the three
main methods and include:
Monte Carlo

Tutorial

An analytical or mathematical formula that yields a static, quantitative solution. For instance, an
analytic model might consist of several independent sample observations that have been transformed according to the rules of the model. Common examples of analytic models are spreadsheet models or linear programming models.

44

Simulation Concepts
Modeling methodologies

Agent-based
State/Action

Tutorial

For more information, see Other modeling approaches on page 47.


As you might expect, you can use different methods to model different aspects of real-world systems. For example, at a chemical plant you could model the chemical reactions as a continuous
process, the control logic of the chemical process using discrete event modeling, and the tanks,
valves, and flow of the production process with discrete rate.
It is good to note, however, that there is no such thing as the model of a system: a system can be
modeled in any number of different ways, depending on what it is you want to accomplish. In
general, how you model the system depends on the purpose of the model: what type, level, and
fidelity of information you want to gather and the amount of detail, or level of abstraction or granularity, of the model. Once that has been determined, you can intelligently choose which type of
model to build.

The types of models that can be built depend on the ExtendSim product that was purchased.
Comparison of main modeling methodologies
The three main modeling methodologies are continuous, discrete event, and discrete rate. Continuous modeling (sometimes known as process modeling) is used to describe a flow of values. Discrete event models track unique entities. Discrete rate models share some aspects of both
continuous and discrete event modeling.
In all three types of simulations, what is of concern is the granularity of what is being modeled and
what causes the state of the model to change.
In continuous models, the time step is fixed at the
beginning of the simulation, time advances in
equal increments, and values change based directly
0
1
2
3
4
on changes in time. In this type of model, values
reflect the state of the modeled system at any par- Time line for continuous simulation
ticular time, and simulated time advances evenly
from one time step to the next. For example, an airplane flying on autopilot represents a continuous system since its state (such as position or velocity) changes continuously with respect to
time. Continuous simulations are analogous to a constant stream of fluid passing through a
pipe. The volume may increase or decrease at each time step, but the flow is continuous.
In discrete event models, the system changes
state as events occur and only when those events
occur; the mere passing of time has no direct
0
2.3 2.7
4
effect on the model. Unlike a continuous model,
Time line for discrete event simulation
simulated time advances from one event to the
next and it is unlikely that the time between
events will be equal. A factory that assembles parts is a good example of a discrete event system.
The individual entities (parts) are assembled based on events (receipt or anticipation of orders).
Using the pipe analogy for discrete event simulations, the pipe could be empty or have any number of separate buckets of water traveling through it. Rather than a continuous flow, buckets of
water would come out of the pipe at random intervals.

Simulation Concepts
Modeling methodologies

In some branches of engineering, the term discrete is used to describe a system with periodic or

constant time steps. Discrete, when it refers to time steps, indicates a continuous model; it does
not have the same meaning as discrete event or discrete rate. Continuous models in ExtendSim are
stepped using constant time intervals; discrete event and discrete rate models are not.

Comparison table
The three main modeling methodologies are summarized in the table below.
Modeling method

ExtendSim library

What is modeled

Examples

Continuous time

Value library

Processes

Processes: chemical, biological, economic, electronics.

Individual items

Things: traffic, equipment,


work product, people.

Electronics library
Discrete event

Item library

Information: data, messages,


and network protocols at the
packet level.
Discrete rate

Rate library

Flows of stuff

Rate-based flows of stuff:


homogeneous products, high
speed production, data feeds
and streams, mining.

Table of continuous, discrete event, and discrete rate differences


Although not definitive, the following table will help to determine which style to use when modeling a system.
Factor

Continuous

Discrete Event

Discrete Rate

What is modeled

Values that flow


through the model.

Distinct entities
(items or things).

Bulk flows of homogeneous stuff. Or flows of


otherwise distinct entities where sorting or
separating is not necessary.

What causes a change


in state

A time change

An event

An event

Tutorial

Discrete rate simulations are a hybrid type, combining aspects of continuous and discrete event
modeling. Like continuous models they simulate
0
2.3 2.7
4
the flow of stuff rather than items; like discrete
Time line for discrete rate simulation
event models they recalculate rates and values
whenever events occur. Using the pipe analogy
for a discrete rate simulation, there is a constant stream of fluid passing through the pipe. But
the rates of flow and the routing can change when an event occurs.

45

Tutorial

46

Simulation Concepts
Modeling methodologies

Factor

Continuous

Discrete Event

Discrete Rate

Time steps

Interval between time


steps is constant. Model
recalculations are
sequential and timedependent.

Interval between events


is dependent on when
events occur. Model
only recalculates when
events occur.

Interval between events


is dependent on when
events occur. Model
only recalculates when
events occur.

Characteristics of what
is modeled

Track characteristics in
a database or assume
the flow is homogeneous.

Using attributes, items


are assigned unique
characteristics and can
then be tracked
throughout the model.

Track characteristics in
a database or assume
the flow is homogeneous.

Ordering

FIFO

Items can move in


FIFO, LIFO, Priority,
time-delayed, or customized order.

FIFO

Routing

Values need to be
explicitly routed by
being turned off at one
branch and turned on
at the other (values can
go to multiple places at
the same time.).

By default, items are


automatically routed to
the first available
branch (items can only
be in one place at a
time.)

Flow is routed based on


constraint rates and
rules that are defined in
the model (flow can be
divided into multiple
branches.)

Statistical detail

In addition to general
General statistics about In addition to general
the system: amount,
statistics, each item can statistics, effective rates,
efficiency, etc.
be individually tracked: cumulative amount.
count, utilization, cycle
time.

Typical uses

Scientific (biology,
chemistry, physics),
engineering (electronics, control systems),
finance and economics,
System Dynamics.

Manufacturing, service
industries, business
operations, networks,
systems engineering.

Manufacturing of powders, fluids, and high


speed, high volume processes. Chemical processes, ATM
transactions. Supply
chains.

Some systems, especially when a portion of the flow has a delay or wait time, can be modeled using
any of the three styles. In this case, you would generally choose how to model the system based on
the level of detail required. Discrete event models provide much more detail about the workings of
these types of systems than continuous models. Continuous and discrete rate models, on the other
hand, usually run faster than discrete event models.
Remember that you may combine blocks from different libraries within the same model. For
example, it is quite common to use continuous blocks from the Value library when creating a discrete event model. However, the discrete event blocks in the Item library and the discrete rate
blocks in the Rate library can only be used in event-driven (non-continuous) models. If you use
any discrete event or discrete rate blocks in a model, the timing will change to event driven (time
steps will not be periodic) and it will not be a continuous model.

Simulation Concepts
Other modeling approaches

47

Other modeling approaches


Although there are several other approaches to modeling, they usually fit within one of the three
major categories (continuous, discrete event, or discrete rate) discussed above. For example, System
Dynamics and Bond graphs are subsets of continuous modeling, and queueing theory models are
subsets of discrete event modeling.

Monte Carlo modeling


Widely used to solve certain problems in statistics, Monte Carlo simulations provide a range of
results rather than a single value. This approach can be applied to any ExtendSim model and used
wherever uncertainty is a factor.
Monte Carlo modeling uses random numbers to vary input parameters for a series of calculations.
These calculations are performed many times and the results from each individual calculation are
recorded as an observation. The individual observations are statistically summarized, giving an
indication of the likely result and the range of possible results. This not only tells what could happen in a given situation, but how likely it is that it will happen.
You build a Monte Carlo simulation in ExtendSim by incorporating random elements in a model
and obtaining multiple observations. There are two ways to do this:
The classical Monte Carlo method is to take a single mathematical equation or set of equations,
then cause the equation to be calculated many times. In this type of simulation, time is not a factor. The entire model is run to completion and evaluated at each step; each subsequent step performs a new calculation. An example is the Monte Carlo model, discussed later in this section.
An alternative Monte Carlo approach, typically applied in a discrete event model, is to either
divide a single simulation run into multiple sections (batch means) or run the simulation many
times (multirun analysis). Monte Carlo is incorporated by adding randomness to the model,
running it many times, and analyzing the results. This method can be applied to any continuous, discrete event, or discrete rate model. It is shown in the Queue Statistics model, described
later in this section. For more information about using the Statistics block (Value library) for
performing batch means or multirun analysis, see Statistics on page 624.
Monte Carlo model
An example of the classical method is the Monte Carlo model. This model determines the
expected revenue from a new product. It runs for 10,000 steps, from time 0 to time 9999, and
each step results in an observation. This cycle is repeated 24 times, once for each of the cases.

Tutorial

Because of their specialized use, three specific modeling approaches (Monte Carlo, State/Action,
and Agent Based) are described below.

48

Simulation Concepts
Other modeling approaches

Tutorial

For scenario experimentation purposes, the inputs and outputs for this model are stored in an
ExtendSim database.

Monte Carlo model

The Monte Carlo model is located at \Examples\Continuous\Standard Block Models.


Queue Statistics model
The Queue Statistics model is an example of an alternative Monte Carlo modeling approach. It
applies batch means analysis to a discrete event model. The model uses the batch-means method
to collect multiple observations of the queueing statistics. Every 100 time units a new set of
observations are recorded. Information (such as the maximum and average queue length, the
number of arrivals and departures, and utilization) is stored and displayed in a table in the dialog
of the Statistics block (Value library).

Queue Statistics model

The Queue Statistics model is located in the folder \Examples\Discrete Event\Statistics. It is not
available with ExtendSim CP.

Simulation Concepts
Other modeling approaches

49

State/Action models
With state/action modeling a system is modeled as a collection of discrete states. Sometimes
known as a state chart, a state/action model represents a system that responds to an event by transitioning to another state. The model is composed of a series of states where each state depends on
a previous state. A state has an associated action and an event that will cause that state to change to
another. The transition from one state to the next is not sequential; each state can lead to any other
state.
All states accept events.
One or more states may create an event as a result of a transition by another state or group of
states.
A group of states can be set to transition conditionally, for instance to only change if another
state or group of states achieve a specific stage. These are known as guard conditions.
State/action models are independent of any of the three modeling methodologies (continuous, discrete event, or discrete rate.) They are useful for specification and verification in many areas, from
computer programs to business processes.
In ExtendSim, the most common ways of creating state/action models are:
Define one or more discrete event items as objects with behavior that is determined by their
states. The information about each state and its next state is stored in a Lookup Table block
(Value library) or an ExtendSim database table. This uses ExtendSims internal event queue and
scheduling capabilities to signal and manage events for the item/objects within the system. This
method can only be used with discrete event models and is illustrated in the State Action model,
described later in this section.
Store each state, action, event, and next state for the system in rows in an ExtendSim database
table. This maps the states for the entire model into one block and works with any type of
model. This method can be used with continuous, discrete event, and discrete rate models and is
shown in the Markov Chain Weather model, described later in this section.
Create new blocks that store their current state in a static variable and send messages to other
blocks at appropriate state change events. To do this, use ExtendSim functions and its simulation modeling environment to create a custom block. For more information about creating new
blocks, see the Developer Reference.
State Action model
In the State Action model, items are created with attributes that determine the items state. The
items are then routed to one of three operations depending on their state. After processing, the

Tutorial

There are rules that govern the communication and transition between the states:

50

Simulation Concepts
Other modeling approaches

Tutorial

items state is changed based on entries in a Lookup Table block (Value library). The item continues to be routed to various processes until it reaches state 4, at which point it leaves the simulation.

State Action model

Initially, each item has a CurrentState attribute with a value of 1. The Lookup Table block causes
each item with CurrentState 1 to be changed to CurrentState 3 after processing, then to CurrentState 2, and finally to CurrentState 4. The operations are represented by Workstation blocks,
which can hold and process the items. After each operation, the item is examined and its state is
transitioned accordingly.
Running the simulation with animation on shows the items changing from state 1 (green), to state
3 (red), then state 2 (yellow), and finally state 4 (blue).

The State Action model is located in the folder \Examples\Discrete Event\Routing, It is not available with ExtendSim CP.

Markov Chain Weather model


A Markov chain represents a transition from one state to another as defined by a table of probabilities. The Markov Chain Weather model simulates the weather based on a Markov chain. The
states are the weather sunny, cloudy, rainy, and so forth; they are stored in an ExtendSim database named Weather. The model runs for 365 days. Each day there is a probability of transitioning from one weather state to the next. For example, if today is sunny, the next day could be sunny
(50%), partly cloudy (30%), cloudy (10%), light rain (5%), or rainy (5%). As the model runs, the
states move through a probability table, changing the weather for each day.
Most of the calculation in this model is done by a single Equation block (Value library) inside the
hierarchical Weather Forecast block. In the equation, a random input and the previous state (the
output of the equation) are used to lookup a probability for the next days weather in the Weather
database. The number and percent of days at each weather state is also calculated and recorded in
the database. Additionally, if the model is run with animation on, the current weather state is ani-

Simulation Concepts
Other modeling approaches

51

mated on the icon of the Weather Forecast block. It does this by showing different icon views,
depending on the state. (For information about icon views, see page 554.)

Tutorial

Markov Chain Weather model

The Markov Chain Weather model is located in the folder \Examples\Continuous\Standard


Block Models.

Agent-based models
Most of the models discussed in this User Guide represent a system where the behavior of the components of the system are known or can be estimated in advance. With agent-based modeling you
usually do not know model dynamics in advance; instead, you obtain that information from the
interaction of the agents in the model.
Agent-based models share the following characteristics:
The identification of individual entities within the model
A set of rules that govern individual behavior
The premise that local entities affect each others behavior
Agent-based modeling is concerned with individual entities (called agents) that interact with
other agents within their specified locality. All the agents have a set of rules to follow but they also
have a degree of autonomy such that model dynamics cannot be predefined. This is because agents
can have intelligence, memory, social interaction, contextual and spatial awareness, and the ability
to learn.
Programming for agent-based models
The agents used in agent-based modeling are programmed as ExtendSim blocks. Blocks and their
enclosed data have unique searchable identities and locations within the model. ExtendSim functions can find and send messages to blocks that have specific characteristics, locations, and values.
This makes it easy to create intelligent behavior, facilitate block-to-block interaction, and cause
blocks to be moved in, added to, or removed from, a model.
The Developers Reference includes several categories of functions that are helpful when creating
agents for agent-based modeling:
Scripting functions are used to build a new model or to add or remove blocks from an existing
model. They do this by creating, placing, and connecting blocks, then populating the blocks
with specific data. These functions can be called from an ExtendSim block within the model or
from an external application.
Block and inter-block communication functions query the status of a block its type, label,
data, location, size, and connectivity with the rest of the model. They also get information about
block dialog values and data table settings.

52

Simulation Concepts
Other modeling approaches

Message sending functions can use the results of inter-block communications to send messages
globally to unconnected blocks or blocks that are connected in specific ways.

Tutorial

Animation functions provide a visual indication of block-to-block interaction, such as the influence of one block on another.
For example, in constructing an agent-based model of the robotic clean up of a chemical spill, you
could use the inter-block communication functions in a Controller block to locate all of the
Robotic Clean Up blocks in the model. The Controller could send messages to the robots asking
them to move towards a spill and clean it up. The robots could send messages back to the Controller stating whether they were available or were currently being recharged, and whether they were
too far from a chemical spill or close enough to be useful. The scripting and animation functions
would show the robot blocks physically moving around within the model and the spill being
removed.
The Game of Life
The Game of Life was devised by British mathematician John Conway in 1970 and published as
an article in Scientific American. It is the most well known example of cellular automata (CA), a
type of modeling studied in computability theory, mathematics, theoretical biology, and other
fields.
A CA model represents a regular grid of finite state automata (cells) that sit in positional relationships to one another, with each cell exchanging information with the eight other cells to which it is
horizontally, vertically or diagonally adjacent. A cell can be in one of a finite number of states and
the state of a cell at time t is a function of the states of its neighboring cells at time t-1. Every cell
has the same rule for updating; each time the rules are applied to the whole grid a new generation
of cells is produced.
You interact with the Game of Life by specifying an initial configuration of effects and observing
how the CA universe evolves. At each step in time, the following happens:
A cell is born if it has a specified number of neighbors who act as parents.
Loneliness causes any live cell with fewer than a specified number of neighbors to die.
Overcrowding causes any live cell with more than a specified number of neighbors to die.
The initial pattern constitutes the first generation of the system. The second generation is created
by applying the above rules simultaneously to every cell in the first generation. In other words,
births and deaths happen simultaneously. The rules continue to be applied repeatedly to create further generations.
Life has a number of recognized patterns that emerge from particular starting positions, including
static patterns (still lifes such as block and boat), repeating patterns (oscillators such as blinker
and toad), and patterns that translate themselves across the board (spaceships such as gliders).
The Life model
The one-block Life model was created using the Life block (Custom Blocks library) that was specifically developed for this model. The code of the block contains the algorithm for Conway's

Simulation Concepts
Other modeling approaches

53

Game of Life. The block's dialog has fields for specifying initial settings and rules; the dialog items
have been cloned to the model worksheet for convenience.

Tutorial

Life model

The concept for this model is that each cell of the grid is defined as living or empty. On each generation, a given cell can give birth to a new life, survive, die, or remain empty. Using the default
settings in the Life block, the model adheres to the following rules:
Count the number of neighbors a given cell has (the maximum possible is 8).
If an empty cell has 3 neighbors, it will produce a new life (birth).
If a full cell has less then 1 or zero (loneliness), or 4 or more neighbors (overcrowding), it will
die.
Changing the default rule values causes some interesting affects on the population.
There are two ways to set the starting population for the model:
Define an initial number of cells (1000 is a reasonable starting population for the size of this
block.) The cells will be populated randomly.
Use the Custom Start grid to select up to 16 initially populated cells in specific locations. This is
a quick way to begin with a recognized pattern, such as a glider or a blinker.
One feature of the Life block that is not specified in Conway's algorithm is that the color of the
cells varies with the age of the cell - new cells are green and older cells vary from light gray to black
as they age.
Variations
The Life block is open source so you have complete access to the dialog editor and block code. To
see the underlying structure of the block, select it on the model worksheet and give the command
Develop > Open Block Structure. The procedures that define cell birth, death, or survival are listed
at the top of the block's structure window.

The Life model is located in the folder \Examples\Agent Based. The Life block is located in the
Custom Blocks library.

54

Simulation Concepts
The modeling process

Boids
The Boids model is based on an artificial life program, developed by Craig Reynolds in 1986, that
simulated the flocking behavior of birds. It can also be applied to schools of fish, herds of animals,
or any other type of flocking behavior.

The Boids model requires 3D animation; it requires ExtendSim Suite to run. The model is located
Tutorial

in the folder \Examples\3D Animation.

Boids model in E3D window

In the model, each bird is an individual agent that interacts with other local agents based on a set
of rules:
Separation birds steer to avoid crowding their local flock mates.
Alignment each bird steers towards the average heading of its local flock mates.
Cohesion birds steer toward the average position of their local flock mates.
Other agent-based models
Additional agent-based models, including Sheep and Wolves and Breakout are located in the
folder \Examples\Agent Based.

The modeling process


An ExtendSim simulation project involves creating a logical model of the system, running the simulation, analyzing the data, optimizing the solutions, and interpreting and presenting the results.

Goals of modeling
The Introduction chapter gave several examples of what you can do with simulation. As stated in
Modeling Tools for Environmental Engineers and Scientists (N. Nirmalakhandan, CRC Press), the
...goals and objectives of modeling are two-fold: research oriented and management oriented.
Specific goals of modeling efforts can be one or more of the following: to interpret the system, analyze its behavior, manage, operate or control it to achieve desired outcomes; to design methods to
improve or modify it, to test hypotheses about the system, or to forecast its response under varying
conditions.

Simulation Concepts
The modeling process

55

The simulation process


Like all tasks, you can start modeling simply by jumping into it. Also like other tasks, it is usually
better to have a plan before starting. ExtendSim makes following a plan for making a model easy.
The basic steps to creating a model are:
1) Formulate the problem. You should define the problem and state the objectives of the model.

3) Build and test the model. Build the system with ExtendSims blocks. Start small, test as you
build, and enhance as needed.
4) Acquire data. Identify, specify, and collect the data you need for the model. This is usually the
most time-consuming step. It includes finding not only numerical data values but also mathematical formulas such as distributions for random events.
5) Run the model. Determine how long you want to simulate and the granularity of results, then
run your model.
6) Verify the simulation results. Compare the model results to what you intended or expected.
7) Validate the model. Compare the model to the real system, if available. Or have system experts
evaluate the model and its results.
8) Analyze your results. Draw inferences from the models results and make recommendations on
how the system can change.
9) Conduct experiments. Implement and test recommended changes in the model.
10) Document. State the models purpose, assumptions, techniques, modeling approaches, data
requirements, and results.
11) Implement your decisions. Use the results in the real world.

Before you build a model


Remember that building a model is an iterative process and each step in the process will require
comparing the model to the existing system, analyzing the results, and refining the model. A natural inclination is to immediately start building the model. However, you will end up with more
useful models if you begin the model-building process by asking a few basic questions, such as:
What is the goal of the model? It is important to determine the purpose of a model. This will indicate the levels of detail required and will help keep you focused.
What are the boundaries of the model and what level of detail should be included? The model goal
should dictate what to include in the model and what to leave out.
Where is the required data? It is useful to start collecting data early in the model building process
because it can often take a while to obtain all of the necessary information. You will also need to
know if the input data is an absolute value or if the data is from a statistical distribution. Addi-

Tutorial

2) Describe the flow of information. Determine where information flows from one part of the
model to the next and which parts need information simultaneously.

56

Simulation Concepts
The modeling process

tional data requirements may surface once the model building process has begun. Your model
may, for example, lead you to explore alternatives that had not been considered before.

Tutorial

How shall the model be conceptualized? Before even running ExtendSim, think about what the
various components of the system represent. Roughly determine the time delays, resource constraints, flows through the system, and any logical actions that occur in the model. This will
help you determine how to build the model.
What alternatives will be investigated? Although the model may lead you into new, unexpected
directions, try to think ahead so that the model can be easily changed from one alternative to the
next.

It is common to use a constant or a uniform (integer or real) distribution in the early stages of
model building so that modeling problems and variations can be more easily detected. After the
model is verified, you can easily change the distributions to correspond to real-world processes.

Refining models
It is important to remember that models may not give you a single correct answer. Instead, they
make you more aware of gaps in your thought process. These problems may involve over-simplification in the model, false assumptions on your part when creating the model, or missing connections between parts of a model. Refining your model step by step helps eliminate these and other
pitfalls.
Every model can be made more complex by adding assumptions and interconnections. The
model-building process commonly begins with the creation of a simple model. After analyzing the
simple model, complexity is added, followed by further analysis, the addition of more complexity,
and so on. The complexity takes one of two forms:
Taking one block (a process) and turning it into many blocks (a more complex process)
Adding a connection between two previously unrelated blocks, usually through a mathematical
operation (finding an interconnection between two processes)
At each step, look at your results and make sure they make sense relative to the data. If you can,
verify the results in the real world. If one result is way off, check the output from each step to
determine where the process went awry.

Model verification
The process of debugging a model to ensure that every portion operates as expected is called model
verification. In the tutorial, you performed part of this verification process by building the model
in stages and with minimal detail, then running it at each stage to observe the results. A common
verification technique could be termed reductio-adabsurdum (reducing to the absurd), which means reducing a complex model to an aggressively simple case so that you can easily predict what the outcome will be. Some examples of reducing to the
absurd are:
Remove all variability from the model, making it deterministic
Run the deterministic model twice to make sure you get the same results
Output detailed reports or traces to see if the results meet your expectations
Run a schedule of only one product line as opposed to several
Reduce the number of workers to 1 or 0 to see what happens

Simulation Concepts
Additional modeling terminology

57

Uncouple parts of the model that interact to see how they run on their own
Run very few or very many items through the model to determine if the model responds properly.

Model validation
Once the model is verified you need to validate it to determine that it accurately represents the real
system. Notice that this does not mean that the model should conform to the real system in every
respect. Instead, a valid model is a reasonably accurate representation based on the models
intended purpose. When validating, it is important to make sure that you know what to compare
to and that you verify that measures are calculated in the same manner.
For validation, your model should accurately represent the data that was gathered and the assumptions that were made regarding how the system operates. In addition, the underlying structure of
the model should correspond to the actual system and the output statistics should appear reasonable. While you would normally compare critical performance measures, it is also sometimes helpful to compare nonessential results that may be symptomatic and therefore show the character of
the system.
One of the best validation measures is Does the model make sense? Other methods involve
obtaining approval of the results by those familiar with the actual process and comparing simulation results with historical data. For example, when validating model performance compared to
historical data, try to simulate the past. If you have sufficient historical data, break the actual system performance into various windows of time, where all of the input conditions correspond to
the input conditions for multiple runs of your model.
For more information, see Debugging Tools on page 693.

Additional modeling terminology


In addition to the following general information, each of the modules in this User Guide has a section with tips specific to that module. For additional general information about using ExtendSim,
see also the How To module that starts on page 546.

Model parameters, variables, inputs, and outputs


A parameter is any numerical characteristic of a model or system. Parameters describe something
about the model and are known or can be estimated.
An input parameter is a value that is required as part of the model specification.
An output parameter is a value determined by the input parameters and the operation of the systemoutput parameters specify some measure of the systems performance or system dynamics.

Constant values and random variables


You enter parameter values in block dialogs to specify settings for a model. Constant values never
change; random values are based on distributions and change each time they are used. Models that
have no random input parameters are referred to as deterministic models. Models that are based on
one or more variables that are random are said to be stochastic, as discussed below:

Tutorial

Other methods for verifying models include making sure that you can account for all the items in
a model, animating the model or portions of the model, or using diagnostic blocks from ExtendSims libraries. For more information, see Debugging Tools on page 693.

58

Simulation Concepts
Additional modeling terminology

Tutorial

Deterministic models contain only non-random, fixed components. No matter how many
times a deterministic model is run, unless some parameter is changed there is no uncertainty and
the output will be exactly the same. Thus the behavior of the model is determined once the
inputs have been defined.
The advantage of a deterministic model is that only one run is necessary, since it produces an
exact measurement of the model's performance. It is also helpful in when initially building a
model since you can be assured that changes in results will be due to changes made to the model
and not to randomness. The disadvantage is that these types of models can only accurately be
used to model a few types of processes, since real-world systems typically contain some element
of randomness.
Adding randomness to one or more inputs to a deterministic model changes it to a stochastic or
Monte Carlo model. Stochastic models are run repeatedly and then analyzed statistically to
determine a likely outcome. Notice that the occurrence of randomness does not mean that the
behavior of a process is undefinable or even that it is unpredictable. Random variables vary statistically as defined by a distribution. This means that their range and possibility of values is predictable.
While stochastic models can be applied to very complex systems, a disadvantage is that the output is itself randomthe average of the simulation runs provides only an estimate of the
model's true behavior.
ExtendSim provides several methods for including randomness in models. For instance, as you saw
in the chapter Building a Model, the Random Number block (Value library) allows you to select
a random distribution or enter a table of values which specifies an empirical distribution of probabilities. For more detailed information about ExtendSims random number capabilities, seeRandom numbers on page 684.

Continuous Modeling

Introduction
Some things to know before you begin
modeling continuous systems

A journey of a thousand miles begins with a single step.


Confucius

60

Introduction
How the Continuous module is organized

The Continuous Modeling module is focused on building models where time advances in equal
steps and model values are recalculated at each time step. It is also a helpful reference if you use
continuous blocks in discrete event and discrete rate models.

How the Continuous module is organized


Introduction
Blocks for building continuous models
Application areas in which continuous modeling is commonly used
Next steps

Continuous

Tutorial
Application areas and examples
Continuous concepts, tips, and techniques

Blocks for building continuous models


To create continuous models you can use:
Blocks from continuous libraries that are packaged with ExtendSim
Continuous blocks that you create
Libraries of continuous blocks developed by third parties

You can use continuous blocks and the ExtendSim database to build State/Action models, as discussed in State/Action models on page 49.

Using the ExtendSim blocks


You can easily build continuous models in many fields using only the continuous libraries (Value and Electronics) included in every ExtendSim product. The blocks in those libraries allow you to perform complex modeling
tasks often with just the click of a button. For example, you can use a popup
menu to specify a distribution in the Random Number block or to select a
function in the Math block; both blocks are in the Value library.
For added power and flexibility, the Equation block (Value library) allows
you to enter formulas and equations to calculate values for models. The
Equation block gives you access to over 1,000 internal functions. You can
also use operators to enter logical statements (if a then b), write compound
conditions (if a 0.5 or b 0.5 then c = 8), and even specify loops (do
task while input 5).

See Value Library Blocks on page 821 for a listing and brief description
of the blocks in the Value library.
If your model becomes too cluttered with blocks, you can encapsulate portions of it into a hierarchical block, then double-click the hierarchical block Value library window
to see the submodel. Hierarchical blocks are created using simple menu
commands and can be stored in libraries for reuse in other models. They are discussed in Hierarchy on page 598.

Building custom continuous blocks


Continuous simulation is used in a broad number of diverse fields, and it would be impossible to
supply one solution that would meet everyone's needs. To provide complete flexibility, all Extend-

Introduction
Application areas

61

Sim products include a development environment for creating custom blocks. You can create your
own blockseven your own libraries of blocksand use them to build models. Because you have
the source code for the blocks that are packaged with ExtendSim, you can adapt an existing block
to your needs or create an entirely new block from scratch.
ExtendSim has an integrated, compiled development environment, so it is easy to build blocks
with custom dialogs and behavior. And because the development environment is optimized for
simulation and user-interface design, you can build blocks with less effort and more flexibility than
by using a traditional programming language. ExtendSim's development environment has the
functionality you need to create blocks that can:
Process data, perform calculations, and show results in numerical, graphical, and animated form
Interact with the user
By programming your own blocks you can:
Obtain specific behaviors not available in the blocks included with ExtendSim
Combine the functionality of several ExtendSim blocks into one custom block for increased calculation speed and convenience. (Note that this is different than using hierarchy to encapsulate
several distinct blocks as a submodel within one block.)
Develop a library of blocks for a specific discipline, such as for control systems or paper-making
processes
Design your own modeling architecture
Blocks you create can be saved in libraries and used throughout your models just as you would use
any of the standard ExtendSim libraries. And the blocks that are packaged with ExtendSim, such
as the Value library, are designed to work well as supplements to any custom blocks you may
develop.

The ExtendSim Developer Reference has all the information you need to program your own
blocks.

Third-party libraries
Third-party developers use the ExtendSim environment to create libraries of blocks customized for
specific fields. For more information about third-party libraries, please go to www.extendsim.com/
prtnrs_developers.html.
Discrete event or discrete rate blocks built by third parties will not run with the ExtendSim CP
product.

Application areas
Computer simulation is indispensable for understanding, analyzing, and predicting the behavior
of complex and large-scale systems. It is used to gain an understanding of the functioning of existing systems and to help design new systems by predicting their behavior before they are actually

Continuous

Communicate with other ExtendSim blocks and with external applications

62

Introduction
Next steps

Continuous

built. The following table gives some of the most common areas where continuous modeling is
used.
Discipline

Fields

Applications

Science

Biology, Biotech, Chemistry,


Ecology, Genetics, Mathematics,
Medicine, Pharmaceuticals,
Physics

Chemical reaction kinetics, thermodynamics, paper making,


population dynamics, growth/
decay, competition/cooperation, chaos, genetic algorithms

Engineering

Aerospace, Agricultural, Automotive, Control Systems, Electronic, Environmental, Forestry,


Material Science, Mechanical,
Mining, Nuclear, Petroleum

Hardware design verification,


electro-mechanical systems, neural networks, adaptive systems,
algorithm validation, signal processing

Business

Finance, Information Technology, Inventory Management,


Human Resources, Operations

Forecasting, credit risk analysis,


asset pricing, derivatives trading,
data flow and sharing, inventory replacement strategies,
resource allocation, process flow

Social Sciences

Economics, Gender Studies,


Migration, Psychology, Social
Dynamics, Urban Studies

Econometric studies, trade policies, relationship modeling,


finite capacity planning, economic booms and recessions,
immigration policies

Next steps
The next chapter in the Continuous Modeling module provides a tutorial that expands upon the
Reservoir 1 model used in the guides Tutorial module. Chapter 3 describes typical industries and
applications for continuous simulation such as scientific, engineering and business; it uses models
provided with ExtendSim as illustrations.The final chapter of the Continuous Modeling module
discusses concepts specific to continuous simulations and give additional tips when building models.
The How To module that starts on page 546 includes chapters on topics relevant to all types of
modeling, including creating a custom user interface, using mathematical and statistical functions,
and statistically analyzing models.

Continuous Modeling

Tutorial
Building a more complex
continuous model

Be the change you want to see in the world.


Mahatma Gandhi

64

Tutorial
Removing overflow from the Holding Tank

The Tutorial module showed how to build the Reservoir model. This chapter illustrates some
additional modeling techniques to enhance that model:
Removing content from a Holding Tank block if it exceeds a specified limit
Using the Equation block to replace the functionality of several blocks
Adjusting delta time (dt) for more accurate simulation results
If you havent already done so, it is recommended that you go through the chapters in the Tutorial
module (starting on page 13) to familiarize yourself with the basic techniques for building models
and running simulations.

Continuous

Example models for comparison to the Overflow model you will build in this chapter are located in
the ExtendSim9\Examples\Tutorials\Continuous folder. Reservoir 2 shows a series of blocks that
calculate and remove the overflow and Reservoir 3 is the same model using an Equation block to
perform the calculations.

Removing overflow from the Holding Tank


The Tutorial chapter Building a Model on page 23 assumed that the reservoir had an infinite
capacity. In this chapter, the model is modified so that there is a limit on how much water the reservoir can hold and overflow is removed. To do this you need to add model elements to:
Establish a maximum reservoir capacity
Compare the contents of the reservoir to the maximum limit
Determine if and when the contents exceed the limit
Calculate the amount to remove if there is any excess
Remove the excess water
With these changes, the reservoir would behave more like an actual reservoir with a dam where
water spills over if it reaches the top.

Setting the maximum capacity


From the \Examples\Tutorials folder, open the model
Reservoir 1.

So that you dont overwrite the original model, give


the command File > Save Model As and save the
model as Overflow.

In the Overflow model, add a Constant block (Value


library) at the bottom left of the model.
This block will represent the overflow limit for the res- Constant block added to Overflow model
ervoir, in this case, 50 inches.

Tutorial
Removing overflow from the Holding Tank

65

In the dialog, set the Constant value to 50 and enter Res depth as the blocks label.

Continuous

Constant block dialog

Close the dialog.


Determining if there is too much water
Add elements to the model to determine at each step if the capacity is exceeded or not.

Add a Decision block (Value library) below the Constant block and to
its right.

In the Decision blocks dialog, choose A > B (the default setting) from
the popup menu. Label the block If too high...
Adding a Decision block

Decision block dialog

Close the dialog.


Add a named connection (Contents, the same as the connection from
the output of the Holding Tank block) to the Decision blocks A input.

Connect from the Constant blocks output to the B input of the Decision block.
When the model runs, the Constant will set the B value to 50.
During the simulation run, the Decision block will evaluate whether or not
the value of the Contents (A) is greater than the value of the maximum
Reservoir Depth allowed (B). If yes, it will assign a value of 1 to the Y output connector. If no, it will assign a value of 0 to the N output connector.

Decision connected

66

Tutorial
Removing overflow from the Holding Tank

Comparing contents to overflow limit


To calculate the difference between the capacity limitation and the tanks contents:

Add a Math block to the right of the Constant block, set its function to Subtract, and label the
block Subtract excess.

In addition to selecting functions directly in the Math blocks dialog, you can choose settings by

right-clicking near the sensitized area (looks like a partially turned page) on the lower right of the
blocks icon.

Continuous

Add a Contents named connection to the top input of the Subtract block.

Calculating the excess water

Connect the output of the Constant block to the bottom input of the Subtract block.
Validating intermediate results
When building a model, it is good practice to frequently test if the model is working correctly.
Even though this model isnt yet finished, validate that model elements are calculating as you
would expect them to.

Run the simulation.


Click the model window to make it the active window.
Hover the cursor over the connectors of the blocks youve added to see
the results.
For example, the top input of the Math block shows the current contents from the Holding Tank, the bottom input shows the Constant
value (50), and the output connector shows the result of the subtraction. (Note that your results may be slightly different from those at
right because the Stream source is random.)

Calculating how much water to remove

Subtraction results

The Decision blocks Y connector outputs 1 (one) if the tanks contents exceeds the limit, but outputs 0 (zero) if it doesnt. This information can be used in a calculation.

Add another Math block to the model, set its function to Multiply, and label the block Then
overflow.

Tutorial
Removing overflow from the Holding Tank

67

Connect from the output of the Math block labeled Subtract excess to the top input of the Math block labeled
Then overflow.

Connect the Decision blocks Y connector to the bottom


input of the Math block labeled Then overflow.
This multiples the amount of excess water, if any, by the Decision blocks Y output (1 or 0) to determine the amount of
water that should be removed from the Holding Tank at each
step.

Multiply block connected

You do not need to connect the Decision blocks N connector to anything since, if the reservoirs
Removing the overflow
When the contents of the Reservoir/Holding Tank are greater than its capacity, water needs to be
removed.

Connect the output of the Multiply block to the w (want) input connector on the bottom left
of the Holding Tank.

Requesting overflow amount

The Holding Tanks want input connector is used to request an amount to be removed. If the tank
has that amount, it will be reported at its get output connector. If the tank does not have that
amount, and Tank contents can be negative is not checked. only the amount available will be at
the get connector. Since this model is only concerned with overflow, the amount requested and
the amount available will be the same.

Create a named connection called Overflow from the get output of


the Holding Tank block to the fourth input on the Plotter.

Overflow connection

Continuous

contents is less than capacity, nothing further needs to be done.

68

Tutorial
Simplifying the model

Continuous

Run the simulation.

Simulation results

Scroll through the Plotters table of data to see the point where the reservoir is beginning to reach
its capacity. Column 4 (Overflow) shows the amount of water that overflows. Because the inflows
continue even while the excess is being removed, and because there is a calculation delay, it is
unlikely that the reservoir will be at exactly 50.

The equivalent model is Reservoir 2, located in the folder \Tutorials\Continuous.


Simplifying the model
Although the model works perfectly well, the blocks that make up the calculation of the overflow
can be a bit confusing to follow. You can easily replace the functionality of those four blocks with a
single Equation block that explicitly defines the mathematical expression.

Adding an Equation block


Delete the Math blocks labelled Subtract Excess and Then Overflow, as well as the Constant and Decision blocks from the Overflow model.

Add an Equation block (Value library).


Add a Contents named connection to the
Equation block input.

Connect the Equation block output to the


want connector of the Holding Tank
block.
Model with Equation block

Tutorial
Simplifying the model

69

Specifying input variables


Open the Equation block dialog.
In the Input Variables table at the left of
the dialog, note that by default Connector 0 is selected from the popup menu in
the Variable Type column. This is the
option you want, because the equation
will get its values from the top input connector. To give the input a more relevant
name:
field to the right of Connector 0.

Specifying output variables


In the Output Variables (results) table at
Equation block dialog
the right of the dialog, note that by default
Connector 0 is selected from the popup
menu in the Variable Type column. This indicates that the results of the equation will be sent to
the top output connector, which is the option you want for this example. To give the output a
more relevant name:

Type Overflow as the Variable Name.


Entering the equation
Click the Open Equation Editor button, delete the default equation, and enter the following
code and comments. (You can edit the equation in the equation pane, but the Equation Editor
window has advantages such as code completion, syntax colorization, brace matching, and tab
support):
real reservoirDepth; // define a new variable as a real number
reservoirDepth = 50.0; // set its value
if (contents >= reservoirDepth) // if contents is >= depth...
overflow = contents - reservoirDepth; // then calculate outflow.
else
overflow = 0.0;

// If the contents is too low, outflow = 0.

Comments, which are preceded by //, are optional but helpful for documentation.

Continuous

Type Contents in the Variable Name

70

Tutorial
Improving the accuracy of the model

Enter Calc overflow for the blocks label.


Close the Equation blocks dialog. ExtendSim displays a message that it is compiling the equation; the
message may appear too quickly for you to see it.

Run the simulation.


Note that the results havent changed - youve simply
substituted the Equation block for the deleted blocks.

Continuous

For more information, see Equation-based blocks on


page 677.

Improving the accuracy of the model


Because the contents of the Holding Tank block are
Final simulation results
used to calculate the amount of water to remove from
the Holding Tank, the model incorporates feedback.
When a model has feedback, the default delta time (dt) of 1.0 is too long and results wont be accurate. (See Feedback and delays on page 86 for more information.)

Choose the command Run > Simulation


Setup > Continuous tab and change the Time
per step (dt) value to 0.1.

Close the Simulation Setup dialog.


Notice that the Holding Tank is properly already
set to integrate its inputs, rather than sum them.
Summation only gives the same results as integration when delta time is exactly 1.0, but integration works with any delta time. Learn more at
Integration vs. summation in the Holding Tank
block on page 690.
When delta time is small, such as for this model,
simulation results will be more realistic if
Lookup Table inputs are interpolated rather
than stepped.

Simulation setup dialog

In the Lookup Table block (labeled Rainfall), change Output is: to Interpolated. This setting
smooths the change between rows in the table.

Tutorial
Next steps

71

Run the simulation again.

Because this model is small and only includes one feedback

loop, there is only a slight different in the results between this


run and the previous one with the larger dt value. However, in
a larger model where there are many instances of feedback, the
second run would produce much more accurate results.

The equivalent model is Reservoir 3, located in the folder


\Tutorials\Continuous.

Next steps

You should also explore the How To module, beginning on


page 545. Those chapters illustrate many more of the features
and capabilities you might use when creating models, such as
sensitivity analysis, controls, and optimization.

Lookup Table dialog

Continuous

The next chapter describes typical areas where continuous


modeling is applied; the final chapter in this module discusses
concepts specific to continuous modeling and provides additional tips to help you build and run continuous models.

Continuous

72

Tutorial
Next steps

Continuous Modeling

Areas of Application
Some of the many ways continuous modeling is used

(Science is)...the separation of the true from the false by experiment or experience.
Richard P. Feynman

74

Areas of Application
Scientific

ExtendSim is used to build continuous models in the fields of physical science, social science, engineering, and business. The first four sections of this chapter describe models created using the
ExtendSim Value and Engineering libraries. The last section shows two models built with custom
blocks: a physics model called Planet Dance and a Fish Pond simulation that examines predator/
prey interactions.

Continuous

Continuous modeling is very broad and diverse field. While it is possible to create almost any continuous model using the standard blocks (such as the Value library) packaged with ExtendSim, it is
more common to use a combination of standard blocks and custom-built blocks. For example,
ExtendSim customers have created libraries for proprietary and commercial use in the fields of
analytical chemistry, environmental decision making, chemical process control, pulp and paper
making processes, and so forth.

Scientific
Common areas where simulation is helpful in science include biology, chemistry, physics, and ecology. This section describes two models, a classic predator/prey model and a simulation of some factors that affect drug absorption in the human body.

Predator/Prey
This model shows a small ecosystem composed of hare and lynx. Each population has a direct
effect on the other: the lynx feed on hare so the hare population declines, the diminishing food
supply results in a decrease in the number of lynx so the hare population grows again and so forth.
Model assumptions
The model particulars and assumptions are:
The 100-hectare ecosystem initially
contains 6000 hare and 125 lynx.
Each hare produces 1.25 offspring
per year and each lynx produces
0.25 offspring.
Hare always have sufficient food
supply; their only cause of death is
being eaten by a lynx.
The lynx hunting range is 1 hectare,
their only food source is the hare,
and each lynx can consume every
hare in its area.

Predator_Prey model

The number of hare killed depends


on their density in the ecosystem and the number of lynx who hunt them.
The lynx mortality rate depends on how many hare they consume in a year.
There are no outside factors (such as the time of year) which affect the rate at which the populations change.
The final model runs for 24 years and calculations are done 12 times per year (dt is 0.0833).

The Predator_Prey model is located in the folder \Examples\Continuous\Standard Block Models.


This model uses blocks from the Value and Plotter libraries.

Areas of Application
Scientific

75

Model details
This model illustrates some interesting continuous modeling concepts:
Because the model has feedback, the Holding Tank blocks are set to Inputs are: integrated (no
delay). For more information, see Integration vs. summation in the Holding Tank block on
page 690.
The Holding Tank block has a want input connector that is used to tell the block how much of
the contents you want removed. The amount wanted and the amount that is actually removed
(indicated at the get connector) may differ, as discussed below.

Dividing the hare population by the area of the ecosystem (100 hectares) determines how many
hares there are per hectare. The lynx can eat every hare in each hectare, but if they eat too many
and the hare population decreases, the lynx mortality rate increases. This contributes to the
cycles seen in the model.
Notice that, at each point in time, the result in the Hares Killed block is higher than the hare
population shown on the plotter. This occurs because hares are constantly being born and the
lynx kill not just the previous steps population but also some of the new births.
The Lookup Table block is set to Output is: interpolated, which means that intermediate values
can be used. For example, an input value of 65 (which is halfway between the Hares Eaten values of 60 and 70) will cause the block to output 0.175 (which is halfway between the Lynx
Death Rate of 0.2 and 0.15).
Further exploration
If you review the initial assumptions for this model, you can probably see several enhancements
that could be made.
The birth rates for both the hare and the lynx could vary based on model conditions or on outside factors. For instance, the birth rate might be dependent on the health of the parents, the
level of crowding, or the amount of pollution in the ecosystem.
You might add a predator or an additional food source for the lynx.
The model assumes an unlimited food supply for the hare. To a food source, the hare would be
considered the predator, so modeling a food source would follow the same logic as adding the
lynx predators.
Hares could have predators other than lynx.
You could factor in outside conditions, such as the time of year and expected weather conditions. Then examine the effects of those conditions on mortality rates.

Drug Ingestion
There really can be too much of a good thing. For some drugs, such as blood thinners, it is important that the patient get enough of a dose to cause the desired outcome, but not so much as could

Continuous

By default, the Holding Tank block is set to not allow its contents to become negative. This
means that the population of hare cannot be reduced below the available amount, no matter
what is requested through the want connector. The amount that is actually removed is reported
at the get output connector. If the tank were allowed to become negative, the amount at the
want connector and the amount at the get connector would be the same. Since it cant go negative in this model, the amount at want could be higher than the amount actually removed and
reported at get.

76

Areas of Application
Scientific

be harmful. One method is to monitor the concentration of the drug in the patient's bloodstream
to determine if it is at effective, but safe, level. Many factors influence drug absorption - the
amount ingested, the rate of absorption, the patient's diet, and so forth - and simulation is the best
method to explore the effect of those factors.

The Drug Ingestion model is located in the folder \Examples\Continuous\Standard Block Models.
This model uses blocks from the Value and Plotter libraries.

Model assumptions
Constant blocks specify the dosage amount (1500 mg) and frequency (3 doses/day)
The stomachs volume is 500ml and the absorption percentage is 0.693

Continuous

Blood volume is 5,000ml and the metabolic constant 0.0433


The model runs for 96 hours; delta time is 0.25
Model details
The Drug Ingestion model
illustrates the bloodstream
concentration for a periodically ingested drug. The drug
is taken at even intervals and
is absorbed into the bloodstream based on the amount
of the drug ingested, the specific rate of absorption for
the drug, and the metabolism, stomach volume, and
blood volume of the person
involved.
Hierarchy compartmentalizes
the Drug Ingestion model
Drug Ingestion model
into submodels representing
the stomach, intestines, and
blood stream. (To see the contents of these hierarchical blocks, double-click their icons or use the
Navigator in Model mode to drill down to the underlying layers.) In the Stomach hierarchical
block, the drug is introduced with a Pulse block that generates a periodic pulse based on the value
from the Constant block that outputs the number of doses per day. This is then multiplied by the
drug dosage and placed in a Holding Tank block representing the amount of drug in the stomach.
In the Absorption section, an Equation block calculates the absorption rate by dividing the
amount of drug in the stomach by the stomach volume, subtracting the concentration of the drug
in the bloodstream, and multiplying that by the absorption constant and the stomach volume constant. The absorption rate is then used to reduce the amount of the drug in the stomach and
increase the amount of the drug in the bloodstream (represented by the Holding Tank in the hierarchical block named Bloodstream). The concentration of the drug in the bloodstream is then calculated by dividing the amount of the drug in the bloodstream by the blood volume. Finally, the
amount of the drug in the bloodstream is reduced by metabolism, calculated in the Equation block
that uses the concentration of the drug in the bloodstream, the blood volume, and a metabolism
constant. A Plotter I/O reports the concentration of the drug in the bloodstream.

Areas of Application
Engineering

77

Variations
Try changing the dosage amount and the frequency of application using the cloned dialog parameters on the left side of the model. Then observe the changes in the concentration of the drug in the
bloodstream. Or, to illustrate the affects of different drugs, vary the metabolism and absorption
constants.

Engineering
Simulation is extensively used for modeling electronic, signal processing, control, and mechanical
systems, as well as neural networks and other engineering systems. The following electronic signal
processing example investigates the performance of a receiver in a digital FM system.

Noisy FM system

The Noisy FM System model is located in the folder Examples\Continuous\Standard Block Models. The model uses blocks from the Electronics and Plotter libraries.

Model assumptions
FM center frequency is 91.6khz
Antenna tuner uses an elliptical filter
Demodulator is a passive RC phase locked loop using an exclusive OR comparator
Model details
This model shows the performance
of a receiver in a digital FM transceiver system, within a noisy environment. The Transmitter is a
hierarchical block with a submodel
containing a bitstream generator and
an FM carrier generator. The bitstream generator is comprised of two
Voltage Controlled Oscillator blocks
(VCOs) and two Clipper blocks:
The first VCO outputs a square
wave that varies between -1 and
+1 volt output.

Noisy FM model

The first Clipper limits the square wave signal to 0 and +1 volt, so that it can modulate the second VCO and produce the periodic bitstream for testing.
A second Clipper limits this square wave output for the Frequency Modulation (FM) generator.
The Clippers can be eliminated, but limiting the VCO input voltage to between 0 and +1 volt
makes it easier to enter frequency modulation range parameters.
The Filter-Bandpass block (labeled Antenna tuner) is set to elliptical because of its economy (fewer
poles & zeroes yield the fewest components). The Comparator block after the antenna acts as a
limiter and detector of the FM signal. The Phase Locked Loop (PLL) block demodulates (separates) the input signal from the FM carrier signal. The output from the loop has a lot of pulses on

Continuous

When designing receivers and demodulators, engineers need to balance quality and cost. Simulation helps illustrate the trade-off, for example when the objective is to filter noise without reducing
the quality of the reception. Fewer components can result in a product that is cheaper to produce
and maintain, but a product with more components might have a better sound.

78

Areas of Application
Business

it, so it is filtered slightly by a simple Butterworth filter. The low-pass filter after the PLL smooths
out the switching transients always present in PLL outputs.

Continuous

Variations
Because elliptical filters have very large group delays at their edges, a Chebyschev might be better.
Try setting the noise to 1.0 volts and running the simulation with the elliptical filter. Then try setting the filter type to Butterworth, Chebyschev, click Recalculate poles... and rerun the simulation. The Chebyschev option works better than the elliptical filter, but notice how many poles are
generated and how complex (costly) the filter will become.
The PLL's parameters can be easily changed for experimentation. For example, enter different
bandwidths, damping, loop types, and phase comparators, and running the simulation again.
Playing with the amount of noise on the signal can give interesting results. For example, increasing
the amplitude in the Noise Generator block will quickly destroy the signal.

Business
Finance, economics, inventory management, and marketplace competition all lend themselves to
analysis through simulation. The following example explores how to minimize costs while still
being able to provide products based on customer demand.

Inventory Management
A company holding inventory incurs both ordering costs and holding costs:
Ordering costs include order processing, labor transportation, inspection, and so forth. They are
generally stated as a fixed cost per order.
Holding cost includes such expenses as warehousing, insurance, taxes, obsolescence, and management. They are generally stated as an amount per item per time period or as a percent of unit
cost per time period.
These costs are involved in a classic trade-off because as the number of orders per time period
increases, ordering cost increases and holding cost decreases. The objective of inventory management is to minimize the sum of the two costs.

The Inventory Management model is located at \Examples\Continuous\Standard Block Models.


The model uses blocks from the Value and Plotter libraries.
Model assumptions
Initially there are 50 units of inventory on hand
Demand is 10 units of product per week and increases to 12.5 units at week 4
The lead time from stock order to stock delivery is 4 weeks for the first run
Sensitivity Analysis automatically varies the lead time by two weeks per run, from 4 weeks on
the first run to 10 weeks on the fourth run
The stock-ordering pipeline is full at 10 units/week for the 4 weeks
The Correction Factor is 1
The Target Inventory is 50 (4 week lead time * 12.5/units expected to ship each week)
The model runs for a simulated 52 weeks

Areas of Application
Social sciences

About the model


Customer demand for product is indicated by a Lookup Table block. The demand amount is the
basis for the Customer Order Backlog amount and is also the basis for ordering more stock. Note
that stock ordering, inventory replenishment, and shipments are shown as a flow, while the calculations (target inventory, etc.) are shown in a separate section. This helps clarify the model for presentation.
The demand for product determines what is shipped, unless there isn't enough inventory to meet
demand. The Correction Factor indicates that a discrepancy between target and actual would be
cured in 1 week (the lower the Correction Factor, the faster a discrepancy is cured.) Since you do
not have Just In Time (JIT) delivery, you want to order sufficient stock to meet future demand,
without over-ordering. You could order just enough to meet current demand, but because there is
a delay until stock is received, inventory levels would not necessarily meet future demand (if
demand increased, you'd be under stocked. If it decreased, you'd be overstocked). You could also
correct the stock order amounts so that they approach target inventory levels (target inventory
considers stock lead time as well as current demand).
Because the model is set to run four times for sensitivity analysis, each page of the plotter will show
the results of one of the runs. Flipping from one page to another quickly shows the effect of
increasing the lead time.
Variations
Parameters you may want to change include the Correction Factor, Target Inventory, and/or Lead
time.

Social sciences
Simulations in the fields of psychology, social dynamics are common. The example that follows
investigates the effect of available office space on new business growth in a small city.

City Planning
Cities and other governmental agencies forecast tax revenues, infrastructure needs, and operational
expenses when setting their annual budgets. Whether predicting population changes, business
usage, or housing needs, growth projection models help provide realistic estimates for budgeting

Continuous

Model details
This model shows inventory stocking/depletion
cycles. Its purpose is to
stabilize the inventory
level so that over- or
under-stocking is
avoided. The model
examines the effect on
inventory levels of a 25%
increase in product
demand. It also uses SenInventory Management model
sitivity Analysis to
explore the effect of
changing the lead times for stock delivery. The MultiSim plotter displays the difference in inventory from one run to the next.

79

80

Areas of Application
Social sciences

purposes. They are also helpful when developing policies such as environmental protections and
residential growth ordinances.

The City Planning model is located at \Examples\Continuous\Standard Block Models. The model
uses blocks from the Value and Plotter libraries.

Model assumptions
The City Planning model represents office occupancy in a city with a limited amount of offices. A
projection provides the number of new businesses that will require office space each month over
the next 240 months. There is also an estimate of the number of businesses that will fail.

Continuous

4,000 offices are initially available


Each business requires an average of 5 offices
2% of the businesses fail each month
About the model
The model examines how
many of the businesses will
be able to occupy offices, the
number of businesses lost
because offices are not available, and what effect business failures have on the
availability of offices. This
model is notable because it
mainly uses the Math block,
rather than the Equation
block, to calculate data. That
way the relationships and
calculations that occur in the
model are shown explicitly.

City Planning model

Growth projections (see the Lookup Table block labeled Demand) are derived from a study estimating growth over a 20 year time period.
For clarity, this model is separated into sections:
Office Bank: The Holding Tank represents the number of offices available. The initial amount
of 4000 is reduced as businesses occupy offices and is increased as businesses fail. Multiplying
the demand for offices by the expected number of offices required per business (5) gives the
amount that will be withdrawn from the office bank. If there are not enough offices available,
businesses cannot relocate to this city. These lost businesses are also calculated.
Businesses Occupying: The number of offices occupied each month is divided by the number of
offices required per business (5) to determine the number of businesses that occupy offices per
month. This amount is accumulated to get the total number of businesses occupying offices, so
that the number of business failures can be calculated.
Business Failures: There is a 6-month delay, then 2% of the businesses fail and move out of their
offices each month.
Notice that the number of failures is based on the net total number of businesses, not just on the
total number of new businesses occupying offices. The failure amount is removed from the Businesses Occupying Holding Tank, so that failures are calculated on a net number. The number of

Areas of Application
Custom blocks

81

offices recovered due to businesses failing is returned to the Office Bank, making more office space
available.
Variations
Vary the available office space, office space usage per business, or growth projections to explore
alternatives.

Custom blocks

Planet Dance
The Planet Dance model demonstrates the inverse square law of gravity. It uses the Planet and
Planet Plotter blocks from the Custom Blocks library. Both blocks were created specifically for this
model.

The model is located in the folder \Examples\Continuous\Custom Block Models.


About the model
When you run the Planet Dance model, the three
Planet blocks pass information about the planets
they represent to the Planet Plotter block. This
block plots the location of the blocks on the
model worksheet by drawing them as animation
objects that move over time.

Each Planet block in the model contains the definition of one planetary object whose mass will
Planet Dance model
affect, and will in turn be affected by, each of the
other objects in the model. The dialogs of the
Planet blocks contain parameters that define the mass, position, density, and initial velocity of a
particular planet. The blocks code contains the math for calculating the gravitational attractions of
the objects to each other.
When this model runs the planets display the slingshot effect. As one object approaches another,
the attraction between them increases, leading to the less massive object being accelerated to a high
speed. Scientists sometimes use the slingshot effect to accelerate vehicles on their trips to explore
the outer planets in our solar system.
Note that the units of the various parameters are not defined in this model. The numbers entered
in the dialogs are just used relative to the other objects in the model.
Variations
This model provides lots of room to experiment with the physics of objects:
Small changes in initial positions or velocities of the objects can cause big changes in model
behavior.
You can either add or remove an object, resulting in a four-body or two-body problem. In each
case, make sure that each object has one, and only one, connection to each of the other objects
on the worksheet; otherwise the math will get confused.

Continuous

As mentioned previously, it is common to develop custom continuous blocks. The advantage is


that you can use the full capability of the ExtendSim development environment, including the
ModL programming language and dialog editor, to create blocks that behave and look exactly as
you want. Then use those blocks to build a model that accesses ExtendSims robust simulation
architecture.

82

Areas of Application
Custom blocks

One interesting problem, which demonstrates the complexities of the physics involved, is to try
to modify the parameters of the objects in the three body problem to produce a system of stable
orbits like the sun, earth and moon. (Before you get too frustrated trying to set this up, please
note that no one has yet been able to get those parameters right.)
Notice that even light objects will have an effect on the location and velocity of heavy objects.
To replicate a relationship like that of the earth and the sun, increase the mass and density of one
of the objects. No matter how much you do this, however, the heavy objects will be affected by
the position of the light object.

Continuous

Fish Pond
As opposed to the Predator/Prey model shown earlier that uses blocks from the Value library, the
Fish Pond model uses a custom-built Fish block to represent both predator and prey.

The Fish Pond model is located in the folder \Examples\Continuous\Custom Block Models. It uses
a Plotter I/O block from the Plotter library and the Fish block from the Custom Blocks library.
The Fish block was specifically created for this model.
About the model
This is a small pond with two types of fish: a predator and a prey. The goal is to balance the pond by
reducing the number of predators. The model uses a
Fish block from the Custom Blocks library and a
Plotter I/O from the Plotter library.
This two creature ecosystem shows how a single
block design can model many types of creatures. By
Fish Pond model
entering different parameters and connecting the
blocks differently, a more complex ecosystem can be
created. The Fish block is used to model two different species: a carrion-eating fish and a natural
predator. At the left of the model, carrion-eating fish eat other fish that have died in the pond. The
block to the right (a piranha) eats the carrion-eaters. Run the simulation and look at the graph; the
Piranha periodically decimate the carrion-eating fish population.
Variations
Each Fish block added to the model represents another species. You can add another predator to
the right of the second block and, based on the default parameters, it will control the piranha population. Try adding a controlling predator to reduce the Piranha population. To do this:

Add a Fish block and position it to the right of the Piranha block.
Connect the Pot. food in connector on the new block to the Pot. food out connector on the
block to the left.

Connect the Carrion connectors.


Connect the Pop connector to the plotter.
The addition of a predator to control the Piranha population allows all the species to propagate in
cycles. You can also experiment by changing the parameters in the dialogs.

Continuous Modeling

Concepts, Tips, and Techniques


Building robust continuous models

The work of adult life is not easy. As in childhood, each step


presents not only new tasks of development but requires
a letting go of the techniques that worked before.
Gail Sheehy

84

Concepts, Tips, and Techniques


Simulation timing

This chapter discusses some concepts specific to continuous modeling and provides tips to keep in
mind when building continuous models. The areas discussed are:
Simulation timing
Setting delta time to determine the granularity of calculations
Feedback and delays in continuous models
Choosing between integration and summation
Determining the order in which blocks execute
Mixing libraries within a model

Continuous

Connecting to multiple inputs


Using plotters as inputs for other blocks
Using a plot line as reference by comparing new runs to a baseline
Techniques to unclutter your models

Concepts applicable to all types of models, such as deciding whether a model should have random

elements, are discussed in the chapter Simulation Concepts that starts on page 41. The following
topics are specific to continuous modeling.

Simulation timing
Most simulations run for a specified time. ExtendSim determines the duration of a simulation run
based on the values entered in the Run > Simulation Setup > Setup tab; the duration is the period
from the start time to the end time.
In continuous simulations, the duration is divided into intervals or steps of equal length, where
start time is the first step and end time is the last step. The length of time, in time units, for each
step is known as delta time or dt. The delta time setting determines how frequently model data is
recalculated.
As the simulation runs, simulation time advances from start time to end time at delta time per
step, calculating model data at each step. At the first step, ExtendSim calculates what the status of
the model is initially. Then it calculates the changes that take place over the next time step and
determines a new set of data points. Model data is generated as a string of successive points corresponding to the steps in time. Notice that, for each step, data is calculated for the entire period
from that step up to, but not including, the next step.
Continuous simulations require that either the number of steps or the time per step be specified.
As discussed below, in most cases a delta time of 1 is adequate. However, for model accuracy it may
be necessary to set a different delta time.

Delta time
Delta time (dt or t) literally means the change in time. It is defined as the length of the time
interval between the present time and one time interval later. When you select a delta time, you are
selecting how finely the total simulation time will be sliced up, i.e. how short the intervals between
calculations will be and thus how frequently the computations will take place. Delta time is set in
the Run > Simulation Setup > Continuous tab.
For the simulation results to be correct, the delta time for a continuous model needs to be small
enough to accurately reflect changes that occur in different parts of the model. In many cases, the
default delta time of 1 is adequate. However, for simulation speed or model accuracy it may be
necessary to set a delta time other than 1.

Concepts, Tips, and Techniques


Delta time

85

Delta times other than 1


Although 1 is the default setting in the Continuous tab, delta time can be set to any number. For
example, to cause the model to run faster and perform calculations less frequently, delta time could
be set to 2 or any other number larger than 1.
A delta time less than 1 reduces the step size, causing calculations to be made more frequently. It
also results in more steps, so that the simulation takes longer to run in real time for the same simulation run time.

Signal processing models need to have their specific time per step (dt) either entered in the Simulation Setup dialog, or have it calculated by blocks in the model. For example, the Filter blocks
calculate the stepsize based on their entered parameters.
Differential equation models (models with integrators in feedback loops) may need to have a
time per step (dt) or number of steps other than 1.
If you are building custom blocks in process control models, you might set up the blocks so that
they have a Stepsize message handler that can calculate the value for the DeltaTime variable,
automating this process. See the Electronics library for some examples of blocks that do this.

If a model contains the Holding Tank block (Value library) and delta time is not exactly 1, you

may need to change the Holding Tank to integrate its inputs, as discussed in Integration vs. summation in the Holding Tank block on page 690.

Determining which dt to use


To determine what delta time setting is reasonable, first run the simulation with a delta time of 1
(the default setting). Then run the simulation with a delta time of 0.5 (one half of the original setting). If there is no significant difference between the two graphs, then delta time of 1 is appropriate. If there is a significant difference, reduce the delta time to 0.2 and run the simulation again.
Continue halving delta time until you determine a delta time which results in no significant differences compared to the smaller delta time. The main idea is to use the largest delta time that will
give accurate results without slowing down the simulation unnecessarily.

Specifying dt or the number of steps


Extendsim requires that either the time per step (delta time) or the number of steps be specified in
the Run > Simulation Setup > Continuous tab. You can enter delta time directly in the dialog or
you can enter the number of steps and ExtendSim will calculate the delta time for you.
A value for the number of steps is automatically calculated based on the setting entered for Time
per step (dt). It is computed as: floor(((EndTime-StartTime)/DeltaTime) + 1.5). You can see this
by choosing the Number of steps radio button after changing the Time per step (dt).
You can also determine the granularity of the simulation run by manually entering a value for
Number of steps. In most cases, this would be a number equal to the duration (length of the simulation run) so that the model calculates values once for each step, and each step would be one

Continuous

If delta time is not 1, it is most common that it would be less than 1. There are many reasons why
delta time would need to be less than 1. Feedback loops and stiff equations in the blocks can
require a smaller delta time to ensure that all calculations are reflected in the graph. Simulations
that are run with too large of a delta time often show values jumping from very high to very low.
This is known as instability or artificial chaos. Examples of models where a delta time of less than
1 may be required are:

86

Concepts, Tips, and Techniques


Feedback and delays

time unit long. A default value for delta time is automatically calculated based on the number of
steps you enter; it is computed as (EndTime-StartTime)/(NumSteps - 1). You can see this by
choosing the Time per step (dt) radio button after changing the Number of steps.

Continuous

Setting the end time when delta time is 1


Assume you want a continuous simulation to run and calculate values each year for 40 years where
start time is 0 and dt is 1. The value you enter for the end time depends on whether there is integration in the model.
If there is no integration in the model, set the end time to 39. Data will be calculated at each of
the 40 steps, starting at step 0 and ending at step 39. Each steps calculation would represent
data for the entire year, the period beginning at that step and continuing up to but not including
the next step (one delta time unit). Thus the model would calculate 40 years worth of data. If
you specified start time as 1 and end time as 40, the duration would also be 40 years.
If there is integration in the model, set end time to 40. Data will be calculated (but not output)
at each of the 41 steps, starting at step 0 and ending at step 40. Each steps calculation would
represent data at the beginning of the year, the period beginning at that step. However, blocks
that integrate take their inputs at one step and output their results at the next step. Thus the
model would calculate 40 years worth of data. If you specified start time as 1 and end time as 41,
the duration would also be 40 years.

Integration is discussed on page 87.


Setting the end time when delta time is other than 1
If you specify delta time as 0.5, the start time as 0, and the end time as 39, the simulation will run
from time 0 to time 39 calculating data for 79 steps, each of which is one half time unit long.
If you specify a delta time which will not result in the duration being divided into equal segments,
ExtendSim will adjust the end time to a higher value. This is to insure that the segments are of
equal duration, and that the simulation will end at the end time displayed in the dialog. Alternately, you can select a new end time or delta time. For instance, assuming end time is 39, you
could specify the Time per step (dt) as 2 years. Data could be calculated every other year, from 0
through 38; however, the last step of the simulation (step 39) would not be calculated. In that case,
rather than omit a step, ExtendSim will adjust the end time to 40. This means that model data will
be calculated once every two years, starting at time 0 and ending at time 40, for a total of 21 steps.

Feedback and delays


Sometimes it is necessary to create a model that tries to compensate for, or vary itself to match,
changes in its inputs. For example, a public address amplifier should output the same sound level
even if the speaker's voice varies in loudness. A good technique to accomplish this involves feeding
back some of the amplifier's output to control its input, so that the amplifier can effectively monitor itself.

Concepts, Tips, and Techniques


Integration

87

Feedback

Reservoir 3 model feeds contents of Holding


Tank back to Equation block to calculate overflow

Delays in feedback loops


ExtendSim is designed to facilitate feedback in models, but using feedback correctly entails some
additional modeling techniques. Since continuous models are recalculated at every time step, there
will be a delay between when the initial variable first affects the model and when the chain of calculations ultimately and indirectly affects the initial variable. The introduction of a delay can cause
the behavior of a model to change significantly, because there is a difference between the effect that
instantaneous access can cause and the response that would happen if access is not instantaneous.
When you run a model that uses feedback, the feedback is delayed by one simulation time step.
This happens because the output feedback signal has to be calculated before it can be used on the
next simulation step, effectively delaying it for one time step. When feedback is delayed too much,
it can have a deleterious effect as it arrives too late, causing the system to over- or under-compensate. Reducing the time step or delta time of the model will reduce feedback delay and result in a
model with more accurate results. See Determining which dt to use on page 85 for more information.

Integration
Integration is a method of estimating the present value by estimating the past and/or future values
of the inputs, calculations, and outputs in a model. It is another way of summing or accumulating
values when the input is a rate (expressed as units per time). The advantage of integration over just
summing values is that integration will accumulate correctly when delta time is not exactly 1.0,
making it especially useful in feedback models that need a smaller delta time to work well. A simple form of integration (Euler) just multiplies the input rates by delta time and accumulates the
result.
The Holding Tank and Integrate blocks in the Value library have integration capabilities. You can
also use ModL functions to add integration to blocks you create. The Holding Tank block accumulates and, if wanted, releases values. Its dialog gives the option to either sum or integrate the
inputs. (Whichever option you choose will have an impact on the accuracy of continuous simulations. To learn more, see Integration vs. summation in the Holding Tank block on page 690.)
The Integrate block is used to perform the mathematical function of integration in models.

There is no feedback in the My Reservoir model you built in the ExtendSim Tutorial on page 23

and it uses a delta time of 1. For that model, the Holding Tank could be set to either sum its inputs
or integrate them (but the end time would need to be adjusted). The Overflow model, described in
the Tutorial on page 63, has feedback and uses a smaller delta time, so the inputs to the Holding
Tank must be integrated.

Continuous

The practice of connecting an output of a model


back to an input is called feedback; it is the main
factor that causes complex behavior in continuous
models. A model with feedback will cause the
result of a calculation to be fed back to one of the
original variables in the calculation, influencing
its own rate of change. Thus feedback causes iterative changes to model variables as the simulation
runs. The initial output variable ripples through
the calculations such that the effect loops back
and re-affects the initial variable.

88

Concepts, Tips, and Techniques


Simulation order

Simulation order
The Run > Simulation Setup > Continuous tab allows you to choose the order in which ExtendSim executes block data for continuous models. (Simulation order is also used by a discrete rate
system to determine initial bias order settings for Merge and Diverge blocks.)
The choices are Flow order (the default), Left to right, and Custom. To see the order in which
blocks are executing, select the command Model > Show Simulation Order before the model is
run.

It would be unusual to change the simulation order from the default choice, Flow order.
Continuous

Flow order
During a simulation, the blocks that compose an ExtendSim model perform calculations that generally depend on their inputs. After doing their calculations, the blocks set their output connectors
to the results of that calculation so that other blocks may use their results.
In this type of system, there has to be a first block: a block that calculates before all of the others
that depend on its results. After the first block calculates, the other blocks should calculate in the
order and direction of their connections. This order is repeated for every time step of the simulation. To see this order, choose Model > Show Simulation Order.
The following are the rules that ExtendSim uses to derive the order of the block calculations in
continuous models:
Blocks that generate inputs to the simulation go first. For example, Lookup Table or Constant
blocks with only their outputs connected to inputs of other blocks would be put first.
Next, ExtendSim executes blocks that are connected to those first blocks, in the order and direction of their connections.
Unconnected blocks and bi-directional network blocks (that have only inputs connected to
inputs) are executed in left-to-right order.

The Feedback block (Utilities library) is useful when there are flow-order issues due to feedback in
a continuous model.

Left to right order


Use caution when changing from Flow order.
If you choose this option, ExtendSim looks at the left/top corner of each block on the worksheet.
The left-most block gets executed first, and the next left-most block gets executed second, and so
on. Blocks with equal left edges get executed in top to bottom order. If your model flows to the
right, and then continues at the left below that flow, this choice will still calculate all the left-most
blocks first. If you use this order, be sure that blocks that calculate values are to the left of the
blocks which need those values. Otherwise, there will be a one step delay in calculating the values.

Custom order
Use caution when changing from Flow order.
In continuous modeling, there are some situations with multiple feedback loops that do not automatically settle into the desired flow order solution. This occurs because there are multiple solutions that solve the DAG (Directed Acyclic Graph) ordering problem, and it is possible for the less
desired solution to be picked.

Concepts, Tips, and Techniques


Mixing block types

89

To solve this ordering problem, start with the model set to Flow order and then change the order
for a few selected blocks using the Model > Set Simulation Order command.

To use the Custom order option effectively, the Model > Show Simulation Order command should
be checked so that the user can see which blocks need a changed order.

Also, note that the Set Simulation Order command is not enabled unless Custom order is selected
and a block is selected.
In the Set Simulation Order dialog, you can
enter a new order number for the selected
block and it will be moved into that position
in the simulation order.

Mixing block types

Set Simulation Order dialog

You can use continuous blocks, such as those


from the Value library, in discrete event and discrete rate models. You cannot, however, use discrete
event or discrete rate blocks in continuous models. All blocks in the discrete event and discrete rate
libraries require an Executive block that changes the timing of the model to event timing.

The types of modeling you can perform depend on your ExtendSim package.
To learn more about what types of connectors can be connected to each other, see Connector
types on page 555.

Connections to multiple inputs


In a continuous model, you can connect from one output connector to as many input connectors as you want. Multiple
inputs from one output is useful when many blocks need the
results of a preceding block. For instance, if you have one output connector connected to four input connectors, the model
might look like the image at top right.

As discussed inEvent scheduling on page 302, the connections work differently in discrete event models.

For aesthetic reasons, you may want to only have one connection coming from the output connector, for example
when the blocks are far away from each other. Instead of four
connections, connect to one of the input connectors, then
connect the input connectors together (sometimes called
daisy-chaining) in the image at bottom right. (Note that
this method may be confusing to others trying to understand
the model.)

Using plotters as inputs

One value output connected to four


inputs in a continuous model

Four value inputs connected together

The blocks in the Plotter library can store every point that was plotted in the table at the bottom of
the plotter. After running a simulation, you can easily access all those points.

Continuous

Note that any custom order is lost if either


Flow order or Left to right order is selected
again.

90

Concepts, Tips, and Techniques


Using a plot line as reference or standard

Continuous

There are some instances where you may want to use the plotter data as input for another ExtendSim model. For example, if you have a larger model divided up into many smaller models in different files, you may want to use this technique. To quickly pass data from one continuous model to
another, use the Plotter I/O block (Plotter library). That block has four output connectors that
correspond to the four input connectors. To get data out of the plotter into another model, simply
select the block, copy it to the Clipboard with the Edit > Copy command, select the second model,
paste the plotter at the beginning of the second model, and hook the plotters outputs to the places
where you need the data.
If you want to use the data in the plotter in another computer application, open the plotter, click
the columns of data that you want, copy to the Clipboard with the Edit > Copy command, move
to the other application, and paste the data there. If you want less than a full column, select the
desired cells by clicking and dragging.

Using a plot line as reference or standard


You may want to plot the current results of a continuous simulation relative to a previous run of a
simulation that you are using as a standard. This is fairly easy with the
Plotter I/O block (Plotter library). First, run the simulation to get the line that you want as a reference in the Plotter block. Select Edit > Duplicate to create a copy of the Plotter, including all the
data contained within it.
Connect the output connector that is associated with the line you want to the input connector on
the original plotter block. When you run the simulation again, the data that generated that line
will be plotted as a reference line.
For example, assume that you want to replot the line that came
from the top input connector of a Plotter. Following the steps
above would make your model look like the image at right.
You could also paste data directly into a column of a Plotter and
Second Plotter for standard line
use that as a reference. If you want just a straight line for a reference, instead of following the above steps, simply use a Constant
block (Value library) to generate the reference line. You can also generate a reference line from a
formula by selecting a function and connecting the output of the Math block (Value library) to the
Plotter.
Note that these approaches are different than using the Plotter MultiSim blocks in the Plotter
library. Those blocks allow you to plot the results of several runs of a simulation on a single plot.

Uncluttering models
You can use a block to mathematically combine the output of one block with the output of other
blocks. You can also use a block to feed the output of blocks into the inputs of several other blocks.
However, using individual blocks to represent each function, step, or portion of a complex model
can quickly cause models to become too busy. If your models end up being cluttered, combine the
functioning of many blocks into a single block. To do this:
Combine groups of blocks into a hierarchical block. See Hierarchy on page 598.
Use an Equation block (Value library) to replace the calculations of several blocks. See Equation-based blocks on page 677.
Create custom blocks that combine the functionality of many blocks as discussed above. See the
ExtendSim Developer Reference.

Discrete Event Modeling

Introduction
Read this before you start
modeling discrete event systems

If we all did the things we are capable of,


we would astound ourselves.
Thomas Edison

92

Introduction
About the Discrete Event module

The goal of every company, government agency, and educational institution should be to develop
an extremely strong competitive organization. Cost reduction and quality improvement alone are
not sufficient to achieve market share. Organizations must also be able to quickly develop and provide innovative new products and services. Invention, innovation, quality, productivity, and speed
are the keys to making companies competitive.
One way to maximize competitiveness is to improve operational systems and processes by:
Eliminating nonessential, non value-adding steps and operations
Implementing and inserting technology where appropriate
Managing the deployment and utilization of critical resources

Discrete Event

Identifying key cost drivers for reduction or elimination


In spite of recent and rapid advances in technology, many companies and institutions still suffer
from outdated equipment and inefficient work practices. This is due in part to the prohibitive
expense and time required to explore alternative methods of operation and try out new technologies on real systems and processes. Simulating a system or process provides a quick and cost-effective method for determining the impact, value, and cost of changes, validating proposed
enhancements, and reducing the resistance to change. Simulation models allow for time compression, are not disruptive of the existing system, and are more flexible than real systems. They also
provide metrics for meaningful analysis and strategic planning.
ExtendSims graphical interface and dynamic modeling capabilities are designed to help organizations answer questions about how they do work: what they do, why they do it, how much it costs,
how it can be changed, and what the effects of changes will be.

About the Discrete Event module


The Discrete Event portion of the User Guide shows how to build comprehensive models of
industrial and commercial systems so you can analyze, design, and document manufacturing, service, and other discrete processes. Build a dynamic model composed of iconic blocks, run the simulation, and analyze the results. Change aspects of the model and run it again to perform what-if
analyses. Whether you model current operations or test proposed changes, the resulting models
make it easy to find operational bottlenecks, estimate throughput, and predict utilization.
Discrete event modeling is an integral part of Six Sigma, business reengineering, risk analysis,
capacity planning, throughput analysis, and reliability engineering projects. Discrete event models
are also useful for examining the effects of variations such as labor shortages, equipment additions,
and transmission breakdowns. They allow companies to look at their fundamental processes from
a cross-functional perspective and ask Why? and What If?

How the Discrete Event module is organized


Introduction
Tutorial
Chapters that discuss specific discrete event modeling concepts:
Items and their properties
Queueing
Routing items from several sources and to multiple destinations
Processing, travel, and transportation

Introduction
Discrete event systems and processes

93

Batching and unbatching groups of items


Resources and shifts
Activity-based costing
Statistics
Tips, techniques, and information about the discrete event architecture

What the Introduction to the Discrete Event module covers


Simulating discrete event systems
Discrete event blocks
Conventions and terminology for discrete event modeling in ExtendSim:
Overview and layout of a discrete event model
The Executive block
Items and informational values
Events
Activities
Resources
Block connectors
Closed and open systems
Types of item handling blocks

Application areas in which discrete event modeling is commonly used


For detailed information about discrete event modeling in general, including how it differs from
continuous and discrete rate modeling, see Modeling methodologies on page 43.

Discrete event systems and processes


Most systems are composed of real-world elements and resources that interact when specific events
occur. The Item library simulates those systems using blocks that mimic industrial and commercial
operations and timing that represents the actual occurrence of events. Use blocks from this library
to create simulations of business operations, manufacturing processes, networks, service industry
flows, information processing, material handling, transportation systems, and so forth.
Discrete event systems have several things in common:
They involve a combination of elements such as people, procedures, materials, equipment,
information, space, and energy (called items in ExtendSim) together with system resources such
as equipment, tools, and personnel.
Each process is a series of logically related activities undertaken to achieve a specified outcome,
typically either a product or a service. Activities have a duration and usually involve the use of
process elements and resources.
Processes are organized around events, such as the receipt of parts, a request for service, or the
ringing of a telephone. Events occur at random but somewhat predictable intervals and can be
economic or noneconomic. Events are what drive most businesses.

Discrete Event

Properties of items, such as attributes and priorities

94

Introduction
Blocks for building discrete event models

Industrial and commercial processes therefore represent the utilization and underactivity of elements and resources driven by events.

Blocks for building discrete event models


The blocks in the Item library are used to build discrete event models. In addition, third-party
developers have created customized discrete event libraries. Plus, you can program customized discrete event blocks.

Item library
Blocks in the Item library correspond to typical activities, operations, and
resources in many environments. These blocks are connected in an activity or
data flow diagram that represents a system. The complexities of generating and
posting events are handled within the blocks, alleviating the need to do any
programming in the ModL language.

Discrete Event

Item library blocks are optimized for modeling service, manufacturing, material handling, transportation, and other discrete systems. They incorporate
high-level modeling concepts such as variable batching, conditional routing,
and preemptive operations as well as blocks that represent machines, labor,
conveyors, and so forth. Built-in performance calculations and statistical
reports allow you to predict the value, effectiveness, and cost of implementing
changes before committing resources.
These blocks have been specifically designed to meet most discrete event modeling needs, allowing you to quickly and easily perform complex modeling
tasks. For instance, you can use a popup menu in a Queue block to specify that
stored items are sorted in first-in-first-out order, last-in-first-out order, or in a
custom order based on their assigned priorities or attributes.

Activity
Batch
Catch Item
Convey Item
Cost By Item
Cost Stats
Create
Equation (I)
Executive
Exit
Gate
Get
History
Information
Queue
Queue
Equation

As mentioned in the Tutorial, blocks from the Value library are frequently used Item library blocks
for data management and model-specific tasks in discrete event models. Using
Value library blocks with Item library blocks does not change the fundamental architecture of discrete event models; they will still be event-based rather than use the time-based architecture of
continuous models.

See Item Library Blocks on page 829 and Value Library Blocks on page 821 for a listing and
brief description of the blocks in those libraries.

Third-party libraries
Third-party developers use the ExtendSim environment to create libraries of blocks customized for
specific fields, such as semiconductor manufacturing or multi-stage manufacturing systems. For
more information about products that can be purchased from third party vendors, please go to
www.extendsim.com/prtnrs_developers.html.

Creating custom discrete event blocks


Because of the Item librarys extensive capability, it is not likely that you would need to program
your own discrete event blocks. If you do want to do this, it is important to note that discrete event
blocks use different data structures and programming methods than continuous blocks. Start with
an existing discrete event block as a base: either use a copy of an Item library block similar to the
one you want to build, or use one of the discrete event template blocks in the ModL Tips library;
those blocks names start with MYO for Make Your Own. The ModL code of an MYO block
is commented to explain how certain features are implemented. Read the Developer Reference

Introduction
Terminology and architecture

95

before modifying discrete event blocks so you have a better understanding of how those blocks
work internally.

Terminology and architecture


Before building a discrete event model, it is helpful to understand the terminology that will be
used and to have an overview of ExtendSim discrete event architecture.

Overview of a discrete event model


Discrete event models pass entities (called items) from block to block as events occur during the
simulation run. The items in the simulation are usually generated as a random distribution within
specific parameters, or as a scheduled list of when events will occur. These items can have properties, such as attributes and priorities, which help them correspond more closely to parts, customers, jobs, and so forth in real life. Items are processed by activities, and the time and extent of
processing is often dependent on the availability of resources.

It is this value information which is plotted and displayed in a discrete event model, not the items
themselves.
Often the object of the simulation is to determine where there are bottlenecks in the process and to
see which parts of the process might be improved. Each branch of the flow diagram should either
feed into another block or end in an Exit block.
A model can combine continuous blocks, typically those in the Value library, with discrete event
blocks from the Item library. If you use any discrete event blocks in a model, the model will
become discrete event and will require the Executive block (Item library).

Layout of a discrete event model


You can place the blocks in a model anywhere you want, remembering that ExtendSim evaluates
discrete event blocks along the path of the connections. The only exception to this generality is
that the Executive block (which is required for all discrete event simulations) must be to the left of
all other blocks.

Executive block
The Executive block controls and does event scheduling for discrete event and discrete rate models.
An Executive block must be placed to the left of all other blocks in a discrete event or discrete rate
model. Its use in a model changes the timing so that simulation time advances from one event to
the next, rather than at uniform intervals.
For more information, see Executive block on page 299.

Most of the Executives options are for advanced users. Unless you use string attributes, it is rare
that you would need to make any changes in the Executives dialog.

Items and informational values


The basic units that are passed between discrete event blocks are items. An item is an individual
entity that represents an element of the system being modeled; it can only be in one place at a
time. Items have a life cycle in which they are created, transformed, and eventually destroyed. They

Discrete Event

The main source of discrete event blocks is the Item library. Most of the blocks in the Item library
have item connectors and value connectors. An item connector passes an item and all the information associated with it to the next item connector. Value connectors and dialog parameters provide
specific information about the item and its properties (attributes, timing, and so on) as well as
information about the effects that the item has in the model (such as queue length and wait).

96

Introduction
Terminology and architecture

change state (physically move, are delayed, or have their properties altered) when events occur,
such as a part being assembled, a customer arriving, and so on. In manufacturing models, items
may be parts on an assembly line; in network models, an item would be a packet of information; in
business models, items may be invoices or people. Items are passed from block to block through
item connectors. The Create block can generate items with a random distribution, at a constant
rate of arrival, at a fixed schedule, or on demand. The Resource Item block provides a finite pool of
items.
Items can have properties different pieces of information attached to an item that make the
item unique. Item properties include attributes, priorities, and quantities, as discussed in Item
properties on page 96.

Discrete Event

Values provide information about items and about model conditions. Values tell you the number
of customers in queue, how many parts have been shipped, and how frequently telephone calls
occur. Values also report processing time, utilization, and cycle time. These informational values
are passed through value connectors. When you use a plotter in a discrete event model you are
plotting information about items, not the items themselves. For example, when the top output of
an Exit block (total exited) is connected to a plotter, it displays the time that each item left the
model and the number of items that have exited.

Item properties
A property is a characteristic of an item that stays with the item as it moves through the simulation. Item properties include attributes, priorities, and quantities.
Attributes
Attributes are an important part of a discrete event simulation because they provide information
about items. Each attribute consists of a name that characterizes the item and a value that indicates
some dimension of the named characteristic. For example, an items attribute name might be
color and its value could be 1 (for red). Or the attribute name might be ProcessTime and
its value 4.76. Attributes are often used for routing instructions, operation times, or part quality
in statistical process control; they are discussed fully on page 119.
Priorities
Priorities allow you to specify the importance of an item. For instance, there might be a step in a
manufacturing process where a worker looks at all the pending job orders and chooses the one that
is most urgent. Each item can only have one priority. The top priority has the lowest value, including negative values (that is, an item with a priority of -1 has a higher priority than an item with a
priority of 2). Priorities are discussed fully on page 126.
Quantities
Each item can be a single entity or a group of duplicates. If the quantity of an item is 1, it represents one item; if it is greater than 1, it represents a group. By default, items have a quantity of 1.
The quantity can be changed by a block like the Set block. For more information, see Quantities
on page 128.

Events
ExtendSim moves items in a discrete event model only when an event happens. Events are occurrences such as receipt of an order, a telephone call, or a customer arriving. They are managed by
the Executive block (discussed on page 299) and only occur when particular blocks specify that
they should.

Introduction
Terminology and architecture

97

Blocks that depend on time cause events to happen at the appropriate time. For instance, an Activity block holding an item until a particular time will cause an event to be posted to the ExtendSim
internal event calendar. When the time is reached, the event occurs and the model recalculates its
data.
Blocks that do not generate events allow the blocks after them to pull items during a single event.
Thus a single event can cause an item to pass through many blocks if those blocks do not stop
them. For instance, a Set block could set the items attribute and pass the item to the next block in
the same event.
For more information, see Event scheduling on page 302.

Activities
Activities are undertaken to achieve a specified outcome, typically either a product or a service.
They have a duration and usually involve the use of process elements and resources. An activity
could involve processing, moving, transporting, or otherwise manipulating an item. For more
information, see the chapter Processing on page 169.
Resources are the means by which process activities and operations are performed. Typical
resources include equipment, personnel, space, energy, time, and money. Resources can be available in unlimited quantities but are most often limited or constrained. They can be consumed in
the process or kept for reuse.
In ExtendSim, a resource that is required for a process or activity to take place can be modeled
either as an item or as a unit in a pool:
Item resources get batched with the items that require them (Resource Item method).
A resource pool contains a count of the resources that are available to the model. The count can
be a number in a Resource Pool block (Resource Pool method) or the number of records in an
internal ExtendSim database (Advanced Resource Management method).
See Resources and Shifts on page 213 for complete information.

Connectors
Most of the discrete event blocks pass an item index through item connectors at each event. Each
passed index contains a set of information about the item its attributes, priority, quantity, and so
on. This is different from value connectors which only pass values.
Blocks in the Item library can contain value connectors as well as item connectors. When combining discrete event blocks with blocks from other libraries, you will only be able to connect compatible connectors. Item connectors can only connect to item or universal connectors; they cannot
connect with value input or output connectors. Likewise, value connectors can only connect with
value or universal connectors; they cannot connect with the item input or output connectors. For
more information about connector types, see Connector types on page 555.

Closed and open systems


Blocks that provide a finite number of resources can be part of closed or open systems. How blocks
are connected in the model determines whether the system is considered open or closed.
Closed systems
In a closed system, resources are routed from a resource block and used in the model. Once they are
no longer being used, the resources are recycled back to the resource block and become available

Discrete Event

Resources

98

Introduction
Application areas

for further use. For example, assume a technician (the resource) is required to assemble parts of a
television. While the technician is assembling the parts, he/she will be busy and will not be available to perform work elsewhere. In a closed system, the technician will return to the technician
pool after assembling the parts and will become available for other assignments.
In a partially closed system, only a portion of the resources are returned to the resource block for
re-use. For example, consider a case were there are different shifts of laborers (the resource). Suppose three laborers are assigned to a task. Upon completion, the shift for one of the laborers is finished and he does not return to the labor pool to be assigned to a new task.
Open systems
Resource blocks may also be part of open systems when the blocks resources are not recycled. In an
open system, resources at the end of the line are not passed back to the Resource block. The most
common example of an open system is stock. Normally, stock passes out of the model at the end of
the line. Another example of an open system is a consumable resource such as a disposable fixture
that makes only one pass through the manufacturing process.

Discrete Event

Types of item handling blocks


Each Item library is identified in its dialog as being a residence, passing, or decision type of block,
as follows:
Residence blocks are able to store an item for some amount of time. Examples of residence-type
blocks are the Queue and Activity.
Passing blocks must pass the item along before any simulation time elapses. Example blocks
include the Set, which sets item properties, and the Equation (I) which performs a calculation as
an item passes through.
Decision blocks conditionally allow an item to pass through. Examples include the Gate and
Select Item In blocks.
Knowing these categories of blocks and how they relate to the processing of items will help you to
build better models. For complete information, see Templates on page 300.

Application areas
Simulation is indispensable for understanding, analyzing, and predicting the behavior of complex
and large-scale systems. It is used to gain an understanding of the functioning of existing systems
and to help design new systems by predicting their behavior before they are actually built. The following table gives some of the most common areas where discrete event modeling is used.
Discipline

Fields

Applications

Manufacturing

Aerospace, Biotech, Agriculture,


Semiconductor, Food and Beverage, Automotive, Pharmaceutical, Consumer products

Inventory and resource management, Six Sigma/Lean initiatives, scheduling, capacity


planning, evaluation of procedures.

Service Industries

Retail, Banking, Finance, Restaurants, Hotels, Insurance,


Utilities

Service levels, scheduling,


throughput analysis, evaluation
of procedures, Six Sigma/Lean
initiatives, workflow.

Introduction
Next steps

Discipline

Fields

Communications/Networks

Capacity planning, perforCall centers, Satellite Systems,


Airborne and Ground Commu- mance evaluation, throughput
analysis, determination of relinication Systems
ability and fault tolerance.

Transportation/Material Handling

Airlines, Railroads, Freight and Emergency planning, schedulMail, Moving and Cargo, Ware- ing, service level, Six Sigma/
housing, Logistics
Lean initiatives.

99

Applications

Next steps
The next chapter is a tutorial showing how to use the Item library to build a discrete event model.
Other chapters in the Discrete Event module provide some tips you may find useful when building
models and illustrate specific discrete event concepts, such as item generation, assigning properties
to items, and activity-based costing.

Discrete Event

The How To module that starts on page 546 includes chapters on topics relevant to all types of
modeling, including creating a custom user interface, using mathematical and statistical functions,
and employing different types of analysis for your models.

Discrete Event

100

Introduction
Next steps

Discrete Event Modeling

Tutorial
Building a discrete event model

102

Tutorial
A basic discrete event model

The key to discrete event modeling is the construction of a flow diagram using blocks to represent
the problems operations and resources. The Item library is designed for building discrete event
models of commercial and industrial processes. It is often used with other ExtendSim libraries,
especially the Value and Plotter libraries.
The following example shows how to build a discrete event model of a car wash; it will use most of
the important blocks in the Item library. Starting with a simple model, then adding complexity
and features, this chapter will show how to:
Model a single waiting line with a single server
Add a second server
Animate the model in 2D
Route items through the model

Discrete Event

Add constraining resources

Use attributes to characterize items so they can make decisions about which route to take
This tutorial assumes you have completed the chapters in the Tutorial module that starts on
page 14 and that you have read the introductory discrete event chapter that starts on page 92.

A basic discrete event model


The most common discrete event model involves the handling of one or more waiting lines or
queues, such as those found in supermarkets or factories.

About the model


The Car Wash model represents a business operation where cars can be washed and waxed. The
assumptions for the final model are:

The model runs for a simulated time of 8 hours (480 minutes)


Cars arrive approximately every 4 minutes
There is only one route into the car wash
There are two bays, one for washing only and one for washing and waxing
It takes 6 minutes to wash a car; it takes 8 minutes to wash and wax a car
Approximately 25% of the cars want to be waxed
Cars have to be driven through the operation by an attendant
The blocks come from the Item, Value, and Plotter libraries
The Car Wash models are located in the folder \Examples\Tutorials\Discrete Event\Car Wash.

Starting a model and setting simulation parameters


The following steps are typical when starting any discrete event model.

Open a new model worksheet


Give the command Run > Simulation Setup. In the Setup tab enter the simulation parameters:
End time: 480
Global time units: minutes
If they arent already open, open the Item, Plotter, and Value libraries
Place an Executive block (Item library) on the top left corner of the model worksheet

Tutorial
A basic discrete event model

103

The Executive block does event scheduling and manages discrete event simulations. It must be
present in every discrete event model.

Start small
In building any simulation model, it is easiest to start with a simple subset of the process and add
detail until you arrive at a completed model that approximates the system thats being modeled.
This allows you to test at various stages while making the model building process more manageable.
The first step is to model the car wash with one bay that just washes cars. Since there is only one
line into the car wash, each car must wait in line for the preceding car to move through the wash
before it can enter. When finished with this portion of the tutorial, your model should look like
the one shown below.

Discrete Event

Modeling a waiting line with a single server

Modeling a waiting line with a single server


The following table lists the blocks that will be added to the worksheet and their use in the model.
Except for the Plotter block from the Plotter library, the blocks in the table are from the Item
library.
Category:Name
(Label)

Block Function

Purpose in Car Wash Model

Routing:Create
(Dirty Cars)

Generates items or values, either ran- Generates cars that arrive randomly,
domly or on schedule. If used to gen- approximately every 4 minutes.
erate items, it pushes them into the
simulation and should be followed by
a queue-type block.

Queues:Queue
(Entry Line)

Acts as a sorted queue or as a resource Holds the cars and, when the wash bay
pool queue. As a sorted queue, holds is available, releases cars one by one in
items in FIFO or LIFO order, or sorts first-in, first-out order.
items based on their attribute or priority.

104

Tutorial
A basic discrete event model

Category:Name
(Label)
Activities:Activity
(Wash Bay)

Routing:Exit
(Exit)

Block Function

Purpose in Car Wash Model

Processes one or more items simultaneously. Processing time is a constant


or is based on a distribution or an
items attribute.

Washes the cars for a simulated 6 minutes.

Removes items from the simulation


and counts them as they leave.

Removes the cars from the model.

Discrete Event

Plotter,
Discrete Event

Reports the length of the waiting line


and how many cars have been washed.

Starting at the right of the Executive block, place the blocks on the model worksheet in a line
from left to right, based on their order in the table. The model should look like the one shown
on page 103.

Label the blocks as indicated in the table.

An easy method for placing blocks on a model worksheet is to access an open library using the
Navigator, as discussed in Library Window mode on page 771.

Entering dialog parameters and settings


There are only a few values to enter to reflect the basic car wash assumptions.

In the Create blocks dialog, the default setting is that items are created randomly using an exponential distribution. Since this is exactly what you want, just enter Mean: 4. With this setting,
one car will arrive approximately every 4 minutes.

By default, the Queue block is specified as a sorted queue, with items stored and released in
first-in, first-out order. Since this is what the model specifies, do not make any changes to the
Queue.

The assumptions indicate that cars are washed one at a time and that it takes the same amount
of time to wash each car. In the Activity blocks dialog, the default settings are that the capacity
is 1 and the delay is a constant amount of time. Since those settings are what you want, just
enter Delay (D): 6, indicating that it takes 6 minutes to wash each car.

The Exit block automatically counts and passes items out of the simulation and the Plotter will
graph results as the simulation runs. There are no settings to enter for those two blocks.
Making connections and running the simulation
To indicate the flow of items, connect the blocks item connectors as follows:

From the Create blocks item output to the Queues item input
From the Queues output to the Activitys input

Tutorial
Adding complexity

105

From the Activitys output to the Exits input


So that the model will display results, connect the following value connectors:
From the top (total exited) value output on the Exit to the top Plotter input
From the L (queue length) value output on the Queue to the second Plotter input
Save the model.
Run the simulation.
Verifying results
This is a good opportunity to verify the results. Because
the model has random numbers your results will differ
slightly, but the plotter graph should be similar to the picture at the right.

Animating the model


You dont have to animate the model, but it is sometimes helpful to see the process in action.

In the Create blocks Item Animation tab:


Choose Select item animation from the popup menu
Select Car from the animation object popup menu
Click OK to close the dialog
Select the command Run > Show 2D Animation
Run the simulation
Now cars are displayed as they flow through the model. With animation on, it is easy to see that
cars are arriving faster than they can be washed.
Animation is very useful for debugging models or for making presentations, but it can considerably increase the time it takes a simulation to run. To turn animation off, unselect the command
Run > Show 2D Animation or unselect the Animation On/Off tool in the toolbar.

Adding complexity
Now that you understand how to build the basic model, you can add more details and features.

Creating a second wash bay


Since long lines deter customers, it would be better to keep the entry line short. There are two
ways to model this:
Increase the processing capability of the Activity block
Add a second wash line
Both of these are examples of parallel processing (described in more detail on page 172.)

Discrete Event

At the end of the simulation, the plotter might show that


80 cars have been washed and that there are around 40 cars
waiting to be washed. This would correspond to the information in the Create block, which shows that about 120
cars were generated. These numbers make sense considering that 1 car is generated approximately every 4 minutes and the simulation runs for 480 minutes.

106

Tutorial
Adding complexity

To increase the number of cars that the wash bay can process at a time, you would simply change
the capacity setting in the Activitys dialog. For instance, allowing a maximum of 2 items in the
Activity would simulate a wash bay that could wash two cars at a time.
Since the assumptions state that the final model has two bays, instead of increasing the Activitys
capacity you will add a second bay:

Copy the Activity block in the Car


Wash model and paste it below the
original Activity block. Label the
new block Wash Bay 2.

Connect the Queues item output to


the item input on Wash Bay 2. This
creates a parallel connection with
the original wash bay.

Discrete Event

Expand the Exit blocks variable


input connector so that it reveals a
second input.

Adding a second bay

Connect Wash Bay 2s item output to the Exit blocks second item input.
Save and run the simulation.
With the second wash bay, the entry line length stays near 0 most of the time, as shown in the
plotter and the Queue blocks Results tab.

Explicit routing
In the model so far, the number exiting from one wash bay is probably larger than the number
exiting from the other. (You can see this in the Exit blocks dialog.) Since you have not specified
any rules concerning how the cars are routed to a wash bay, a car will go to the first available bay.
However, if both bays are free, the car will go to the bay that was first connected in the model. This
implicit routing is not obvious and is rarely what you want.
Unless it is completely unimportant in the model, you should always explicitly state the routing of
items using the Select Item In and Select Item Out blocks. Otherwise, the order in which their
connections were made will dictate the routing, as discussed in Implicit routing on page 156.
To explicitly specify the order in which items go to free inputs, use the Select Item Out block.

Insert a Select Item Out block (Item library)


between the Queue and the two Activity blocks
and label it Select Route.

Connect the item inputs of the blocks.


This section of the model should look like the screenshot to the right.
The Select Item Output block has many options. You
can specify that the item is routed to a random outExplicit routing
put, to a specific output based on a value at the
select input connector or based on the items attribute or priority, or sequentially. Using the various
options to route items is described fully in Select Item Out dialog on page 154.

Tutorial
Adding complexity

107

In the dialog of the Select Item Out block:

Choose the option Select output based on: sequential


Select If output is blocked: item will try unblocked outputs
This causes the items to be sequentially routed between the two bays. If the selected bay is blocked,
the item wont wait for it to be free but will instead be routed to the other bay if it is available.
When you run the model, the same number of cars will have been washed as in the previous
model, but each wash bay will have been used equally.

The preceding examples have two wash bays and purposefully dont take into consideration the
model assumption that 25% of the cars want wax in addition to a wash. You could specify the second bay as also providing waxing, and use the option Select output based on: random in the
Select Item Out block to route 25% of the cars to that bay. But this tutorial will explore a more
powerful method for accomplishing this in the section Item attributes on page 108.

Requiring resources

As a count of resources that are made available to the model as a whole and released when no
longer required.
As items that are joined with other items and flow through the model with them until separated.
In both situations, items cannot continue traveling through the model unless the required resource
is available.

Add a Resource Pool block (Item library) to the model and place it in any convenient place.
Label the block Attendant Resource. In its dialog, enter Resource Pool name: Attendants,
and enter Initial number: 1 (the default).

In the Queue blocks dialog:


Set the queue behavior to: Resource Pool queue.
In the table, select the Resource Pool named Attendants and set the Quantity to 1. This
indicates that each car will now require one attendant to drive it through the car wash.

Delete the connections from the Activity blocks to the Exit block.
Add a Resource Pool Release block (Item library) after each of the two Activity blocks, and connect from the Resource Pool Release blocks to the Exit block.

In each Resource Pool Release block, select to Release by: name and choose that the name of
the resource pool is Attendants.

Discrete Event

Up to this point, the Car Wash model assumes that you drive the car through the wash. However,
many car washes require that an attendant do this. This situation can be easily modeled as a number of resources (the attendants) which are required by and made available to the model. As is discussed in Modeling resources on page 215, there are two methods to model resources:

108

Tutorial
Adding complexity

The model should look similar to the one at the right.


Running the model shows
that the scarcity of attendants causes a constraint on
the process, and fewer cars
get processed than when an
attendant was not required.
In the dialog of the Resource
Pool block, you could try
increasing the initial numRequiring resources
ber of attendants to 2 or 3 to
explore the effect that has on
model results.

Item attributes
Discrete Event

Most car washes allow cars to have wax applied after the wash. Attributes are a very powerful feature that give items unique properties and characteristics. You can use attributes in this model to
indicate that specific cars should or should not be waxed. This is accomplished by adding an attribute to the cars coming from the Create block, then checking for the value of that attribute as the
car gets washed.
As discussed in Item attribute types on page 120, ExtendSim supports both string and value
attributes for items. The following example uses a string attribute type.
Creating a string attribute

Add a Set block (Item library) between the Create


and Queue blocks so they look like the screenshot
to the right. Label the Set block Set Attribute.

In the Set blocks dialog, choose New String


Attribute from the tables Property Name
popup menu.

Name the string attribute Preference and click OK.


This causes the Executive blocks Item Attributes tab to appear. The table in this tab is where the
attribute values (and the corresponding strings) for the Preference attribute are declared.

In the table for entering string values for an attribute, enter the
strings Wash Only and Wash and Wax as shown in the screen shot
to the right.

Close the dialogs of the Executive and Set blocks.


The Executive blocks lookup table provides a descriptive text label
(string) for each attribute value. That string can then be used in the
model in place of the corresponding attribute value, making the model
more understandable. But the underlying architecture is that the values
for an attribute are still numbers. In this case, the values for the Preference attribute are 1 (for Wash Only) and 2 (for Wash and Wax).
Generating the correct types of cars
To specify that items are correctly generated as 75% Wash Only and 25% Wash and Wax:

Tutorial
Adding complexity

109

Add a Random Number block (Value library) to the model.


Connect its value output to the first value input of the Set block.
Choose an Empirical table for the distribution in the Random Number block.
In the dialog that appears, give the table 2 rows.

Connecting to a Set block causes the Random Number blocks empirical table to be aware of attributes. In this case, connecting the Random Number block to the Set blocks first value input
causes the empirical table to be populated with popup menus that relate to the first attribute (Preference) in the Set blocks properties table.

In the first row of the empirical table, select Wash Only from the popup menu and enter a
Probability of 0.75.

In the second row of the empirical table, select Wash and Wax from the popup menu and
enter a Probability of 0.25.

Close the Random Number dialog.


the Resource Pool block enter Initial number: 2.

Since the bottom bay will now be used for cars that also need waxing:
Change the label of the bottom bay to Wash/Wax Bay.
Enter Delay: 8 in that bays dialog, to indicate that waxing and washing takes longer than
washing alone.
Each item generated by the Create block will now have a Preference attribute. In 75% of the cases
the car will be characterized as Wash Only; 25% of the time the cars will be designated as Wash
and Wax.
The next step is to have the model determine which car is which.
Checking the attribute
In the dialog of the Select Item Out block:

Choose to Select output based on: property.


In the property popup menu, select the string attribute named Preference.
Check the box to Display string attributes in table.

This causes the Preference attribute to be listed in the tables header and puts popup menus for
that attributes strings in the table.
The Select Item Out block routes items to its outputs based on the selection conditions and internal rules. When attributes are used to select the outputs, the blocks top output is referenced as
number 0, the second output as 1, and so forth.
To cause cars that dont need waxing to be routed to the top output:

In the tables first row, select Wash Only from the Preference popup menu.
Enter 0 in the Select Output column for the Wash Only row. That setting will route the Wash
Only cars to the top output.
To cause cars that need waxing to be routed to the second output:

Discrete Event

So that there will be sufficient attendants to drive all the cars that are generated, in the dialog of

110

Tutorial
Further exploration

In the tables second row, select Wash and Wax from the Preference popup menu.
Enter 1 in the Select Output column for the Wash and Wax string. That setting will route the
Wash and Wax cars to the second output.

Close the dialog, save the model, and run the simulation.

Discrete Event

You may notice that fewer cars pass through this car wash than in the example without attributes
or attendants. This is due to the problem of a car with a particular attribute following another car
with the same attribute. There is only one entrance to the bays, and the bays now have designated
purpose. This means that the second car must wait for the first one to finish even if the other bay
is free. Note, however, that every time you run the model, the numbers for the two lines in the Exit
block indicate that the cars have been processed in roughly the same proportion as specified in the
Random Number block.
Final model
For your reference, the completed
model, titled Final Car Wash, is
located in the folder \Examples\Tutorials\Discrete Event\Car
Wash. This model also has buttons
for running the model and turning
animation on and off. For information about adding buttons to
models, see Creating a dashboard
interface on page 564.

Final Car Wash model

Further exploration
There are many other ways to modify the model shown in this section. Some possible variations
are:
Have the wash or wash/wax times be dynamic rather than static. There are several ways to do
this:
Specify that the delay in the Activity block is from a distribution. This would cause the
processing times to be random, rather than fixed as shown in Random processing time
on page 175.
Use a Lookup Table block to schedule the wash or wash/wax times to be dependent on the
time of day, as seen in Scheduled processing time on page 174.
Have an Equation block (Value library) calculate a wash time based on model conditions.
Then connect the Equations output to the Activity blocks D input.
Assign attributes to the cars to represent the expected time to process it, with each type of
car requiring a different processing time. This is especially useful in a manufacturing environment where there are several types of products that require different process times.
Add more wash or wax bays, then use the Select Item Out block to give preference to specific
bays rather than just letting cars randomly go to any available bay.
Have arriving cars look at the waiting line and not enter the car wash if the line is too long (balking) or leave the line after arrival if the wait time reaches a certain point (reneging). These concepts are discussed more in Queueing considerations on page 135.

Tutorial
Further exploration

111

Model other aspects of the car wash, such as the limited capacity of a parking lot to hold cars
after the wash process. To do this, use the Resource Pool block to represent the total number of
parking spaces available. Then set the Queue block as a Resource Pool queue to hold cars waiting for a parking space. The Resource Pool Release block would release parking spaces as the cars
pass through it.
Consider using a hierarchical block from the Templates library to replace some of the functionality in this model. For example, the Create - Arrivals Vary by Time template would be helpful
if you had a historical record of car arrivals.

Discrete Event

Discrete Event

112

Tutorial
Further exploration

Discrete Event Modeling

Items, Properties, and Values


Generating and removing items, and using item properties

114

Items, Properties, and Values


Blocks of interest

As discussed in Items and informational values on page 95, items are what flow through the
model, properties contain information about items, and values provide information about model
conditions. This chapter discusses items and their properties and how information about them is
reported as values. It will cover:
Generating items randomly and by schedule
The Create blocks Start connector

Attributes, priorities, quantities, and other item properties


Most of the models illustrated in this chapter are located in the folder \Examples\Discrete
Event\Items and Properties. For other models, location information is provided at the beginning of
their respective discussions.

Blocks of interest
The following blocks will be the main focus of this chapter. The blocks library and category
appear in parentheses after the block name.

Discrete Event

Item generating and removing


Create (Item > Routing)
Creates items randomly, by schedule, or infinitely. Can also be used to create values randomly or by schedule. Can initialize newly created items with properties, such as attributes
or priorities.
Exit (Item > Routing)
Passes items out of the simulation. Reports the total number exited and the number that
were taken from each input.

Item properties
Get (Item > Properties)
Displays the value of user-assigned and system level item properties: attributes, priorities,
quantity, and item index.
Set (Item > Properties)
Attaches user-assigned properties (attribute, priority, and quantity) to items passing
through.
Equation(I) (Item > Properties)
Can be used to set, modify, or check attributes on existing items. Calculates the equation
when the item arrives.
Executive
Its Item Attributes tab is used for attribute management, such as renaming or deleting attributes or locating where they are used in a model. It is also where string/value equivalents
are declared for string attributes.

Items, Properties, and Values


Item generation

115

Property-aware blocks
Item properties include attributes, priorities, and quantities. In addition to the blocks listed above,
the following blocks in the Item library provide an interface for viewing, selecting, or modifying
existing item properties or for adding new ones:
Queue Matching

Batch

Read(I)

Cost By Item

Resource Item

Equation(I)

Select Item Out

History

Shutdown

Information

Throw

Query Equation(I)

Unbatch

Queue

Workstation

Queue Equation

Write(I)

Item generation
Items for a model are usually generated using the Create block. While it can also generate values,
the Create block can create items:
Randomly. A random distribution causes items to be generated with a random or constant
interarrival time. The distribution determines the time between item arrivals; a smaller interarrival time indicates that items will arrive more frequently. See the examples below.
By schedule. Creating items by schedule causes an item to be generated at a specific arrival
time. The schedule defines when the item will arrive and the time between arrivals is fixed. See
the examples in Generating items according to a schedule on page 118.
Infinitely. This provides an infinite supply of items that are available on demand. For instance,
connecting a Create block with this behavior to a Gate block would provide an item to the Gate
block each time it opens.

A Create block is set to Create items infinitely should never be connected to an infinite capacity
queue, since generating an infinite supply of items would overwhelm the system.
In a model, each item can represent an individual entity or a collection of individual entities. For
instance, 50 items coming into a model could represent 50 people or it could represent 50 bus
loads of people. How you characterize items is completely up to you.

Generating items at random intervals


The Create block can generate items that arrive to the model at random times. When set to Create items randomly, the Create block outputs items at random intervals; the arguments of the distribution define the interarrival time.
Example model
As you saw in the Discrete Event Tutorial on page 102, the Car Wash model is an example of using
the Create block to generate items at random intervals.

The Car Wash model is located in the \Examples\Tutorial\Discrete Event folder.

Discrete Event

Activity

116

Items, Properties, and Values


Item generation

Choosing a distribution in the Create block


The dialog of the Create block contains
several distribution choices in its Specify a distribution popup menu, as well
as a table for entering data when an
empirical distribution is selected. Each
distribution is described in the Create
blocks Help; they are also discussed
briefly in Probability distributions on
page 686.

Discrete Event

Choosing a distribution in the dialog of


the Create block defines both the interval between item arrivals (the interarrival time) and the characteristics of the Exponential distribution selected; mean is 4
rate of arrival.
In the Car Wash model, for example, selecting an exponential distribution with a mean
of 4 will cause one car to arrive approximately every 4 minutes for the duration of
the simulation. This results in an interarrival
time of 4. However, the shape of the exponential distribution dictates that it is more
likely that the time between arrivals will be
between 0 and 4 than between 4 and 8.

Random intervals with dynamic


parameters

Distribution of outputs when mean is 4

You may want the parameters in a random distribution to change as a function of time or model
status during the simulation run. The arguments for a given distribution can be controlled dynamically through the Create block's value input connectors.
Random Intervals model
In the Random Intervals model, time dependent arrival rates are modeled by connecting the
Lookup Table block (Value library) to the Create blocks value input connectors. A table in the
Lookup Table block provides the mean values for an exponential distribution that has been set in
the Create block. This causes the timing of item arrivals to be based on the time of day.

Random Intervals model

Items, Properties, and Values


Item generation

117

Specifying the dynamic parameters


As seen in the dialog of the Create block, items arrive exponentially. Notice that the exponential
distribution has a Mean parameter. Connecting the output of the Lookup Table block to the
Mean input connector of the Create block causes the mean of the distribution to come from the
Lookup Table during the simulation run, overriding any entry in the dialog. This dynamically
changes the average interarrival time.
The distribution determines the interarrival time. A
smaller mean value indicates that there is less time
between arrivals and items arrive more frequently.
In the Lookup Tables dialog, the mean is smallest
from hour 10 until hour 12, causing items to arrive
more frequently during that period.

Discrete Event

Choosing time units for the columns


When the block is set to Lookup the: time, the
Lookup Table block looks at the current simulation
time and outputs a corresponding value. Its table is
used to determine the value that is output (by default
the Output column; in this model, the Mean column) at a given simulation time (by default the Time
column; in this model the Hour column). Its time
units popup menu (in this model hours) represents
the unit of time for the values in the Time/Hour column. However, that does not control what the output of the Output/Mean column represents.

The time unit for the Lookup Table blocks output

column is determined by the block that receives its


output values.

Scheduling interarrival time

When a value passed to a blocks input connector is


used to set a time parameter (as in this case), the value sent must be defined in the time unit that
the receiving block expects. In this model, the values from the Mean column are sent to the Create
block and are used to calculate the average time between arrivals. Since the Create block is using
minutes as its local time unit, the values in the Mean column of the Lookup Table block also represent minutes. For instance, the value of 6 in the Mean column represents an average of 6 minutes
between arrivals, even though the event time in the Hour column is in hours.
Do not set the mean of a distribution to 0. The Create block will warn you if you make this modeling error.
Making sure the arrival occurs when expected
To avoid unexpected results, it is important to understand what happens in the Create block when
you vary the mean of the arrival intervals over time. The blocks default behavior is to generate an
arrival time, called nextTime, for the next item based on the current input parameters. When
simulation time reaches nextTime, the Create block releases an item and generates a new nextTime
based on the current values of the input parameters. For the period of time between releasing
items, the Create block will not react to changes in the input parameters. If the inputs change drastically, this can cause unexpected results as discussed in Cycle timing on page 298.

118

Items, Properties, and Values


Item generation

Generating items according to a schedule


Scheduling item arrivals can provide more flexibility and precision than having them generated
randomly. Setting the behavior of the Create block to Create items by schedule allows item arrivals to occur at fixed intervals that are specified in a table.

Discrete Event

Scheduled Intervals model


Assume you want five items generated, one per minute, but that the simulation takes ten minutes
to run. Setting the Create block to Create items randomly and selecting a Constant distribution
would generate one item per minute, but there will be ten items. Generating items by schedule
allows you to customize when items will be created and how many items the model will have.

Scheduled Intervals model

In the example model, the dialog of the Create block is set to Create items by schedule. The
schedule of arrival times, which is cloned onto the model worksheet, indicates that one item will
be generated at Create Time 1, another item at Create Time 2, and so forth up to time 5. With this
schedule, the model has five arrival events.
The items proceed to a Queue to wait for processing by the Activity, which takes three minutes to
process each item. Since the simulation runs for ten minutes, only three items exit; one item is left
in the Queue and one item is still being processed in the Activity.
This method is especially useful when the time between item arrivals is known but not regular. For
instance, the first item could be generated at Create Time 1, the second item at Create Time 3, and
the third item at Create Time 3.5.
Notice that the Item Quantity column has a default value of 1 for each item generated. This means
that each item generated represents 1 item. Item quantities are described fully in Quantities on
page 128.
An alternative method would be to use a Create block set to Create items randomly, and select a
Constant distribution with a value of 1 in its dialog. Then in the blocks Options tab, select Maximum items generated: 5. This method is less flexible than the earlier method, since each item
would have to have the same interval between arrivals.
The Start connector
When the Create block is set to Create items by schedule it has a start value input connector that
can be used to control when the schedule is executed. The timing in the Create block depends on
whether or not the start input is connected:
If the start connector is not connected, the schedule's item creation times are synchronized with
the simulation run's absolute time. For example, if the schedule's first create time is at time 2
and the simulation's start time begins at time 0, an item would be created when simulation time

Items, Properties, and Values


Item properties

119

reaches 2. However, if the starting time entered in the Simulation Setup dialog is 4, the item
scheduled at time 2 is never created.
If the start connector is connected, such as to a Decision block (Value library), the schedule's
item creation times are relative to when the connector is activated. For instance, assume simulation starting time is 0 and the first item is scheduled for creation at time 11. If the start connector gets activated at simulation time 5, then the first item will be created at time 16 (5 plus 11).

Starts are activated whenever the connector receives a message with a True value (defined as greater
than or equal to 0.5).
The Create blocks Options tab provides choices for how the start connector should behave, as discussed below:
Follows schedule. This is the default option and should be used for most situations. Once the
start connector is activated, the entire schedule will be executed. Any new activation signals
arriving before the current schedule has completed are ignored.

Generates one item per event. This is an advanced option for special situations. With this
choice, the schedule is restricted to one row. Each time the start connector is activated, a zerotime event is scheduled. Once the Create block gets the zero-time event message, it will execute
the schedule.

Item properties
A property is a quality or characteristic that stays with an item as it moves through the model.
Some properties can be assigned to items by the model builder; others are automatically assigned
by the system.
An items properties include:
User-assigned attributes. These are discussed in the next section.
Priority. See page 126.
Quantity. See page 128.
System-assigned attributes. See page 130.

Item attributes

Because they allow items to be distinguished from each other, item attributes play a very important
role in a discrete event simulation. They are especially useful for telling an activity-type block how
long the item should be processed, or for determining where the item should be routed before or
after processing. The following sections describe how to create, use, and manage attributes.
Flow attributes provide a similar functionality for the flow in Rate library blocks in ExtendSim AT
and Suite. For more information, see Flow attributes on page 339.
Attribute names and values
Each item attribute is composed of a name and a numeric value:

Discrete Event

Generates one item per message. This is an advanced choice for special situations. It is most
often used when a custom-created block is connected to the start connector and you want an
item to be instantaneously generated for every message. With this choice, the schedule is
restricted to one row. Each time the start connector is activated, the row is executed.

120

Items, Properties, and Values


Item properties

An attributes name identifies some general characteristic of the item such as size, route,
CarType or tank capacity. Attribute names are limited to 15 characters.
An attributes value indicates one dimension of the named characteristic. For instance, an item s
size attribute could have a value of 8 or a value of 12, while an attribute named CarType
could have a value of 1 (for Ford), 2 (for Toyota), or 3 (for Volvo). An attribute value is
not just a number; it can also be the address of data in a database.
Attributes are meant to be unique; if you attempt to add a new attribute with exactly the same
name as an existing one, ExtendSim warns you that the name already exists. While attribute names
are not case sensitive (Type is equal to type), spaces are significant and should be avoided.

Discrete Event

Attribute names and values are stored in a pair of dynamic, global arrays, described in Attribute
arrays on page 125.
The Car Wash model for the tutorial on page 108 used string attributes. Models with string attributes use text to represent the corresponding attribute value. However, the underlying architecture
is that attribute values are still numbers. For more information, see Item attribute types.
Number of item attributes in a model
In a model, each item can contain up to 500 attributes that uniquely describe the item. Every
item contains the full set of attributes that have been defined in the model. The Executive blocks
Item Attributes tab displays all of the models attributes.
Each attribute contains a value that can represent either:
A number that can be used for routing, timing, and so forth.
The address of data in a database or global array. The data pointed to can contain a single number or an unlimited amount of additional data that describes the item, its route, its properties,
and so forth.

If you use attributes efficiently, there is almost no limit to what can be represented. If you do

approach the 500 attribute limit, consider using DB address attributes (discussed below) to reference information in the ExtendSim database.
Item attribute types
ExtendSim supports three types of attributes for items:
A value attribute holds a real number as its attribute value.

The value of a string attribute is still a number, but it is represented in the model by a string.
With string attributes you enter a descriptive text label (string) for each potential attribute value
in a lookup table in the Executive blocks Item Attributes tab. The string can then be used in the
model in place of the corresponding number. For example, a string attribute named CarType
might have three possible values: 1, 2, and 3. Once the lookup table for this attribute has been
properly configured, the blocks referencing the CarType attribute will display the strings Ford,
Toyota, or Volvo instead of the numbers 1, 2, and 3.
The value of a DB address attribute contains a single value that represents a location or address
in a database. This address is composed of four separate numbers, where each number is an
index for an ExtendSim database, table, field, and record. Taken together, the numbers target a
specific location in the database. (Incomplete DB addresses are allowed. For example, an item
may have a DB address attribute with only the database and table indexes defined.)

Items, Properties, and Values


Item properties

121

In addition to item attributes, the Rate library blocks of ExtendSim AT and Suite have two types
of flow attributes. These are discussed starting on page 339.

The value of a DB address attribute cannot be used directly. It must be decoded using a Get.

Read(I), or Write(I) block or by accessing DB attribute functions in one of the equation-based


blocks.
Using item attributes
The following table lists some common attribute-based modeling activities and the blocks that are
usually used to facilitate them. All blocks are from the Item library.
Use Block(s)

Initialize newly created items with attributes

Create (when Create items by schedule is


the selected behavior)

Define default attributes for item resources

Resource Item

Set or modify values for existing attributes

Set, Equation(I), Queue Equation

Check attributes on existing items

Any property-aware block; see the table on


page 115.

Route items based on attributes

Select Item Out (when Select output based


on attribute is chosen)

Sort and release items from queues based on attributes Queue (when it sorts by attribute value),
Queue Matching
Sort items based on attribute values and conditionally Queue Equation
release them based on an equation
Pull in items and batch them based on attribute values Batch (when Match items into a single
item is the selected behavior)
Use attribute values to specify a delay or processing
time

Activity (when Delay is: an items attribute


value)

Define the value/string correspondence for item string Executive (Item Attributes tab in Declare
attributes
string attribute values mode)
Find which block uses an attribute

Executive (Item Attributes tab in Manage


all attributes mode)

Managing attributes and their names, such as renaming or deleting an attribute

Executive (Item Attributes tab in Manage


all attributes mode)

Calculate an items cycle time

Set an attribute to the current time in a Set


block or use the Timing attribute feature in
the Create blocks Options tab. Then use the
Timing attribute feature in the Information
block so that it calculates the difference from
start to end time. See Cycle timing on
page 298.

Discrete Event

To Do This:

122

Items, Properties, and Values


Item properties

Adding item attributes to a model


The Item library blocks that deal with attributes are listed in Property-aware blocks on page 115.
These blocks provide a popup menu interface for selecting existing item properties or for adding
new ones.
Depending on the block, the popup menu may offer different choices of attribute types to set. For
example, the Set block allows creating value, string, or DB address attributes.
Creating a new attribute causes it to appear in the list of properties in the blocks dialog and makes
the attribute accessible by every property-aware block in the model.
The following information describes how to create different types of attributes in the Property
Name column of the table in the Set blocks dialog:

Discrete Event

To create a new value item attribute, click the Property Name popup menu, choose New Value
Attribute, type the name of the new attribute in the dialog that appears, and click OK. For
example, a value attribute might be named size.
To define a new string item attribute, select New String Attribute from the popup menu in the
Property Name column, enter a name, and click OK. This automatically opens the Executive
blocks Item Attributes tab. The table in this tab is where the attribute values (and the corresponding strings) for string attributes are declared. An example of this is shown in Creating a
string attribute on page 108. An example of a string attribute could be CarType and the corresponding string/value combinations might be Ford/1, Toyota/2, and Volvo/3.
Creating a new DB address attribute requires an existing ExtendSim database. In the Set dialog,
select an ExtendSim database from the popup list that appears. To create the DB address attribute, click the popup menu in the Property Name column, choose New DB Address Attribute,
type the name of the new attribute in the dialog that appears, and click OK. For example, a DB
address attribute could be named ProcessTime.
With the three different types of attributes, the Set dialog could look like:

After attributes have been created, they must be attached to items in the model and they must have
unique values assigned to them.
Selecting attributes and attaching them to items
To allow an attribute to be used, define the attribute and assign a value to it. This is done using
one of the attribute-handling blocks, such as Set or Create.

Items, Properties, and Values


Item properties

123

The most common method for assigning attributes to an item is to select an attribute in the dialog
of a Set block, then pass the items through the block. The value of the attribute can be defined in
the Sets dialog or through its value input connectors.
Another commonly used block is the Create block when it is in Create items by schedule mode.
This is a convenient way to initialize new items with a set of attributes as they are introduced into
the model. In the Creates schedule table, you can select an attribute from a popup menu in one of
the columns, then enter a value for that attribute for each Create Time row in the table. An item
generated at the specified times will have the attribute name and value indicated in the table.
Other blocks, like the Resource Item block, can also be used to attach attributes to items.

The information that follows assumes that you are using the Set block to assign an attribute to an
item and that you have already created the attribute using a method described on page 122.

String attribute
To set a string item attribute, select an existing attribute
(listed below the New String Attribute divider) from the
popup menu in the Property Name column. Then click
the cell in the Value column to bring up a popup menu
containing all the string values that have been defined for
the attribute. In the example at right, the selected string
attribute is CarType and the Value popup menu contains the strings Ford, Toyota, and Volvo. If
Toyota is selected, the corresponding value that gets stored on the item for the CarType attribute
will be the number 2.
Connecting a Random Number block (Value library) that uses an Empirical table to a Set block
that accesses a string attribute will cause the strings for that attribute to appear as a popup list in
the empirical tables Value column. This is shown in Checking the attribute on page 109.
DB address attribute
Each Set block only points to one ExtendSim database, which becomes one element of the DB
address. To set a DB address attribute in a Set dialog:

Choose a database from the popup menu.


In the Property Name column of the Set blocks table, select a DB address attribute from the
popup menu or create a new one; existing attributes are listed below the New DB Address Attribute divider.
Once the DB address attribute has been selected, the Set dialogs table enlarges to display the other
elements of the address (Table, Field, and Record). The value for the DB address attribute is
defined by clicking the appropriate popup menus in the table, selecting whether that elements
information should be selected from a list, entered as an index, or accessed from a connector. The
screenshot below is an example of the ProcessTime DB address attribute, which gets its value from
a record in the Times field of the Processing Time table in the Process database.

Discrete Event

Value attribute
To set a value item attribute, select an attribute in the Property
Name columns popup menu. (Existing value attributes are listed
below the New Value Attribute divider.) Then enter a number in
the Value column. In the screenshot at right, the Size attribute
has been selected and 14 has been entered as the value.

124

Items, Properties, and Values


Item properties

You dont need to select every element for a DB address attribute. For example, you may only want
to specify the database, table and field indexes and ignore the record index.

Discrete Event

For a DB address attribute, the Value column displays the database address, as determined by the
indexes of the settings in the Table, Field, and Record columns. In the screenshot above, the Value
notation is 2:1:1:2, where 2 is the index of the Process database, 1 is the table index for Processing
Time, 1 is the field index for Times, and 2 is the index for the selected record, which has a value of
5.04.
Once the attribute has been set, the attribute information indicated in the Set blocks dialog will be
assigned to each item as it arrives to the block. Attribute values may also be defined dynamically
using the Set blocks value input connectors to override values set in the dialog.
Every model has an internal list of all the attribute names that have been created for use by items in
that model. However, not all items in the model will make use of every attribute name. For an item
to use an attribute name, the value of the attribute must be explicitly set using an attribute modifying block (such as a Set block).
Getting attribute values and reporting changes
In order to manipulate an item based on the attribute, usually to route it or process it, you need to
get the item's attribute value. The most common method for getting attributes is to select the attribute by name from the list in the attribute popup menu in an attribute-reading block, such as the
Activity or Get block.
Activity or Workstation blocks
In the dialog of an Activity or Workstation block, you can specify that an item's attribute value be
used as its processing time, as shown below.

Get block
When items pass through the Get block, it accesses information about the attributes that have
been specified in the table in its dialog. It then reports the information in the table and on its value
output connectors. What the Get block reports and where, depends on the type of attribute:
Value attributes. The value for the attribute is posted in the Value column of the attribute table
and on the value output connector that corresponds to the attribute.
String attributes. The string text is displayed in the Value column of the attribute table and the
number that corresponds to the string is posted on the appropriate value output connector.

Items, Properties, and Values


Item properties

125

Connecting a Lookup Table block (Value library) that is set to Lookup the: input value to a Get
block that accesses a string attribute will cause the strings for that attribute to appear as a popup
list in the Lookup Table blocks left most column.

DB Address attributes. You can get either an individual element of a database address or its
entire address. To do this, from the popup menu in the tables DB attrib reports column, select
which of the 5 components will be retrieved (db index, table index, field index, record index, or
db address). The first 4 choices provide individual elements of the address; the db address
choice provides the entire address. The information will be reported in the Value column and on
the value output connector for that attribute.

To access all five elements of a DB address attribute, add five rows to the table. Each row should
have the same DB address attribute listed in the Property Name column, but different selections
for the DB attrib reports column. This comes in handy when the Get block is working in conjunction with the Read or Write blocks (Value library). It allows the read or write location to vary
based on what information is traveling on the item.

Modifying attribute values


The most flexible way to modify the value of an items attribute or other property is with the Equation(I) block (Item library). This block can look up property information and modify it by applying some mathematical formula, then use the result as the new attribute value for the item. For
example, if an item arrives with a value of 5 for the attribute nextRecord, you could add a 1 to
the 5 and create a new attribute value of 6 for that items nextRecord attribute. The Air Freight
model discussed on page 219 is an example of this.
Another way to modify properties is to connect from a Get blocks value output to a Math or
Equation block (both from the Value library). Then have that block apply some mathematical formula and output the results to a value input on a Set block. The property must be selected in the
dialogs of the Get and Set blocks, and the value connectors must be for that property.
Attribute arrays
Attribute names and values are stored in a pair of dynamic global arrays:
The one-dimensional Names array stores the name of each attribute currently used in the
model. Attribute names can be up to 15 characters long. You will receive an error message if you
attempt to give an attribute a name greater than 15 characters. Attribute names are not case-sensitive.
The two-dimensional Values array stores the value of each attribute for each item in the form of
real numbers.

Discrete Event

In addition to value outputs for reporting an attributes value, the Get block has a (delta) connector for reporting when an attributes value changes. The connector outputs a 1 when an
item's attribute value (for the first attribute specified in the dialog) differs from the previous item's
attribute value. Otherwise it outputs 0. This is useful for determining when there is a new type of
item or when an attribute value used for processing time has changed. For example, you can have
an attribute called Type with values that specify the type of item. When the value of Type
changes, indicating a new type of item, the connector outputs 1. This is shown in Adding setup
time on page 178.

126

Items, Properties, and Values


Item properties

The following picture represents the attribute arrays:

As new attribute names are added to the model, new cells (array elements) are appended to the
Names array and new columns are appended to the Values arrays, up to a maximum of 500.

Discrete Event

As new items are created during the simulation run, new rows are added to the Values array. The
number of rows in the Values array is unlimited and will be the same as the number of items in the
model. As shown in the above picture, item A has an attribute named type that has an attribute
value of 2 and item B has an attribute named size with a value of 6.01.
Note that each attribute named in the model causes a cell to be reserved in the Values array for
every item. However, not every item uses every attribute. To allow an item to use an attribute, you
must assign a value to the attribute using one of the attribute-handling blocks (such as the Set
block). If there is no value assigned, the attribute is not used by that item. This is shown in the figure above, where item B has no assigned value for the attribute name color and item C does not
have a value for the attribute size.

Priority
Like attributes, a priority is a
type of item property that
can be assigned to an item.
Priorities signify the importance of items. Using the
_Item priority property, you
can assign priorities to items
and manipulate them based
on their priorities.
Priorities are particularly
useful when you want to
examine a population of
Setting an items priority
waiting items and determine their processing order.
For example, you might have
a step in a manufacturing
process where a worker examines the pending job orders and chooses the one that is the most
urgent.

Items can only have one priority. If you need multiple levels of priorities, use attribute values
instead.

Items, Properties, and Values


Item properties

127

When a new priority is added to an item that already has a priority, the new priority prevails.
When items are batched, the highest priority of the items prevails in the resulting batched item.

The lowest value (including negative values) represents the top priority.
Setting, getting, and using priorities
The following table lists some common priority-based modeling activities and the blocks that are
usually used to facilitate them. All blocks are from the Item library.
Use Block(s)

Initialize newly created items with priorities

Create (when Create items by schedule is


the selected behavior)

Define default priorities for resource items

Resource Item

Set, modify, or check priorities on existing items

Set, Get, Equation(I)

Select incoming items based on priorities

Select Item In (when Select input based on


item priority is chosen)

Sort and release items based on priorities

Queue (when it sorts by priority)

Sort items based on priority and conditionally release


them based on an equation

Queue Equation

View an items priority

Get, History

Allocate resource pool units to the highest ranked item Resource Pool
first

The Select Item Out block does not assign or use items priorities. Instead its output connectors
can be prioritized so that an item will be routed to the first available connector that has the highest
priority. As shown in Explicit ordering on page 159, the Select Item Out block prioritizes the
path an item will take rather than the item itself.
Priorities model
In the example, a Random Number block (Value library) outputs values to a Set block, as follows:
10% of the time it outputs a 1
40% it outputs a 2
For the remaining 50% it outputs a 3.

Priorities model

Discrete Event

To Do This:

128

Items, Properties, and Values


Item properties

The table in the dialog of the Set block indicates it will assign priorities to incoming items. Connecting from the Random Number blocks output to the Set blocks ItemPriority value input connector causes the priorities to be set according to the values from the Random Number block.
Since the lowest number is the highest priority, 10% of the time items will be assigned the highest
priority.
The Queue block is set to sort by priority. This means that the highest priority items held in the
block will be made available to the Activity block before other items. A History block, added to the
model by right-clicking on the Queues output connector, shows that only top priority items are
processed; the Activity cannot keep up with the demand.
The section Interrupting processing on page 183 shows how priority values are used to determine if one item should preempt another.

Discrete Event

For an item to be ranked by priority, there must be other items in the group at the same time. For
example, items will only be sorted by priority in a Queue block if they have to wait there with
other items.

Quantities
Quantity is another type of property that can be assigned to items. Each item can be a single entity
or a group of duplicates. As is true for priority, an item can only have one quantity assigned to it at
a time; the default quantity is 1. If the quantity property for an item is 1, it represents one item. If
the quantity is other than 1, it represents a group. Item quantities are typically set in the Create
and Set blocks.

An items quantity can be any number, including a negative number. An item with a quantity of 0
or less disappears when it reaches a queue.
For most purposes you would not want to change the quantity of an item from its default value of
1. However, to model a change of shift consisting of five workers going off duty at the same time,
to simulate the delivery of a box of 300 pieces of mail to a mail room, or for similar situations, set
the quantity of the item to be other than 1.
How blocks treat items with quantities other than 1
Items with quantities other then 1 are treated differently depending on the nature of the block processing them. They will travel together as a unit, being processed essentially as one item, until they
reach an Exit, a Queue, a Batch, or a Resource Item block, or are sent into a universal connector
(such as Change, Demand, Select, or Start.)
When an item with a quantity other then 1 reaches an Exit, Queue, Batch, or Resource Item
block, it is decomposed into separate identical items. For example, when it enters a Queue, an
item with a quantity of 10 will become 10 distinct items, each with a quantity of 1 and each
with the same properties (attributes, priority, and so on) of the original item. An item with a
quantity of 0 will disappear when it reaches a Queue.
When items with quantities other than 1 are sent into a universal connector (such as demand or
select), they are treated as one item, but the quantity of the item may be used by the block as
control information. See below for more information on how universal connectors deal with the
incoming items that have quantities other than 1.
All the other blocks deal with items that have quantities other than 1 as a single item, ignoring the
quantity associated with it.

Items, Properties, and Values


Item properties

129

The Activity block accepts an item with a quantity greater than 1 as a single item and process it as
one unit. To have the items be processed separately, precede the Activity block with a queue, since
queues decompose items with quantities greater than 1.
Setting an items quantity
A quantity can be assigned to an item in the Create, Set, or Equation(I) blocks.
Set block
In the table in the Set blocks dialog, select _Item quantity in the Property Name column and
enter the quantity in the Property Value column or input a value to the Blocks _Item Quantity
value input connector. Each item that passes through the Set block will be assigned that quantity.
Create block
The default setting in the Create block is that one item is input to the model at each arrival event;
this is the most common case when building models. How you specify that a multiple number of
items be released at each event depends on which behavior is selected for the Create block:

Create block is set to Create items by schedule. Enter values in the tables Item Quantity column for each Create Time field that has arrival times.
For example, assume you want to show that one item arrives randomly approximately every 4 minutes. To do this, use the same settings as in the Car Wash model from the discrete event tutorial: in
the Create block select the Exponential distribution and enter Mean: 4; in its Options tab leave
Item quantity (Q): 1. To show that 2 car/items arrive every 4 minutes, keep the settings at Exponential with a mean of 4, but enter Item quantity (Q): 2. The block will now output one item
with a quantity of 2 approximately every 4 minutes.
As discussed in How blocks treat items with quantities other than 1 on page 128, the blocks that
follow the Create block determine how an item with a quantity greater than 1 is treated. For
instance, if an item with a quantity of 2 goes directly into a Queue or Resource Item block, it will
be split into two items each with a quantity of 1. However, if the item goes directly into an Activity
block, it will be treated as a single item with a quantity of 2. In most cases, you will want to follow
the Create block with a Queue, which will decompose the item into two separate items.

In most cases, you probably will not want to generate more than one item at each event. For example, rather than inputting 2 items every 4 minutes as discussed above, you would probably want to
generate 1 item every 2 minutes. This is because, unless they are inside a container of some sort, it
is not common to see two items arrive at exactly the same time; items are more likely to arrive at
slightly different times.

Quantities model
For example, assume you will receive 500 items a week, but that almost all of them are received on
Wednesday. In this case, there are five arrival events (one event each on days 1 through 5), each
with an item quantity of either 50 or 300.
This Quantities model is similar to the Scheduled Intervals model from page 118, except each
item the Create block generates has a quantity greater than 1 and the Activity processes 5 items at
a time.

Discrete Event

Create block is set to Create items randomly. Change Item quantity (Q) in the Options to an
integer number other than 1. Or input a value to the Create blocks ItemQuantity (Q) value
input connector.

130

Items, Properties, and Values


Item properties

The dialog of the Create block is set to Create items by schedule. The arrival times (Create
Time) and the number of items arriving at the scheduled time (Item Quantity) are entered in the
table, which has been cloned onto the model worksheet.
The table indicates that on the third day (Wednesday) 300 items arrive but that 50 items arrive on
each of the other days.

Discrete Event

Quantities model

The Create block outputs an item with a quantity greater than 1 as if it were a group of items all
arriving at the same time. When the item goes to a Queue block, it becomes multiple copies of
itself. In this example, as each item is sent from the Create block to the Queue block, it will
become either 50 or 300 units, depending on its quantity.
Running the model shows that the Create block creates 5 items, but that 500 items have arrived to
the Queue.

Other item properties


In addition to the item properties discussed above, such as the item quantity or user-defined attributes, ExtendSim can assign properties to items. As shown in the property popup menu below,
these system properties are preceded by the _ character and include:
_Item index. This property is available in the Get, Equation(I), and History blocks and points to where the item is
located in the item arrays stored in the Executive block. It is
used by block developers for debugging.
_3D object ID. When you select a 3D animation object to
represent an item, this property stores the index of the object.
_Cost or _Rate. If there is an entry for cost somewhere in the
model, ExtendSim will add the _Cost and _Rate attributes to
property popup menus. For more information, see Working
with cost data on page 275 and Combining multiple cost
accumulators on page 280.

History block Properties menu

_Resource Order ID. This item property is only available in


the Queue and Queue Equation blocks (Item library) if Store
Resource Order ID in attribute is checked and the blocks are part of the Advanced Resource
Management system. The property is the value of a record index in the Resource Orders table of
the Advanced Resources database. The record represents the last requested requirment that was
assigned to an advanced resource item.

Discrete Event Modeling

Queueing
Storing items in buffers or waiting lines

132

Queueing
Blocks of interest

A queue provides a buffer or waiting line to store items awaiting further processing. Queues can
have simple behavior, such as holding items in first in. first out (FIFO) order, or more complex
behavior, such that items are held and released in groups based on their attributes. You can also set
an option in the Queue blocks dialog to specify how long an item will wait until it reneges, or prematurely leaves.
This chapter covers:
Queueing disciplines: LIFO, FIFO, Priority, Attribute, and User-Defined
Queue/server systems
Blocking, balking, and reneging
Sorting items using the Queue Equation block
Least dynamic slack, minimizing setup, and maximizing service levels
Using the Queue Matching block to match items into groups based on their attributes

Discrete Event

Viewing and initializing queues with the Queue Tools block


Displaying queue contents through animating

This chapters examples are located in the folder Examples/Discrete Event/Queueing.


Blocks of interest
The following blocks are the main focus of this chapter. Each blocks library and category appears
in parentheses after its name.
Queue (Item > Queues)
Stores items until there is downstream capacity. As a sorted queue, holds items in FIFO or
LIFO order, or sorted by their priority or attribute value. As a resource pool queue, holds
items in FIFO order.
Queue Equation (Item > Queues)
Stores items. Calculates an equation when it receives an item or when it is triggered by a
value connection. When there is downstream capacity, releases items based on the results of
the equation.
Queue Matching (Item > Queues)
Has a specified number of internal queues for holding items in separate groups. Releases a
group when there is downstream capacity and the group requirements have been met. This
block is useful for matching one type of item with another.
Queue Tools (Utilities > Discrete Event Tools)
When connected to the L (length) output of a queue, views and initializes the queues contents. Displays information about item properties in a table. Can add an initial number of
items, with specified properties, to a queue.

In this chapter the focus is on using a Queue block to represent a sorted queue. For information
about using the Queue block as a resource pool queue see Resource pool blocks on page 214.

Queueing disciplines
ExtendSim supports several scheduling algorithms, also known as queueing disciplines, through the
queue blocks.

Queueing
Queue/server systems

133

FIFO. When set to be a sorted queue, the Queue block can represent a first in, first out (FIFO)
queue, also known as a first come, first served queue. When set as a resource pool queue, the
Queue block represents a FIFO queue for resource pool units. The MM1 model on page 134
is an example of a FIFO queue and most of the models in the Discrete Event module use a
Queue block in FIFO mode. For more information about resource pools and how the Queue is
used as a resource pool queue, see Resource pool blocks on page 214.
LIFO. When set to be a sorted queue, the Queue block can represent a last in, first out queue.
As is true when the Queue is set to FIFO mode, the Queue block automatically takes care of
LIFO sorting.
Priority. As a sorted queue, the Queue block can read priorities and pass items with the highest
priority (lowest number) out first. For this to happen, the arriving items must have a priority.
Items that have not been assigned a priority in the model have a default priority with a Blank
value; they get relegated to the end of the waiting line. To see a Queue sorting items based on
priorities, see Priority queues on page 134 or Animating queue contents on page 145.

User-Defined. The Queue Equation block allows a user-defined equation to decide the sorting
order for items it holds. This can be used to specify any user-defined criteria for sorting, including Least Dynamic Slack, Minimize Setup, Maximize Service Level, and any other combination
of sorting rules. A discussion of these ranking rules and example models start on page 137.

It is important to remember that, except for a FIFO queue, there must be other items in a queue at
the same time to allow the queueing disciplines to work appropriately and affect the order of the
items. For example, if you set a Queue block to sort by priority, and there is never more than one
item in the block at a time, the effect of queueing based on priority is negated.

Queue/server systems
Queue/server systems involve the creation of items which then wait in a queue until they can be
processed by one or more servers. The following blocks in the Item library are used to represent
queue/server systems:
The Create block is used to provide items at exponential interarrival times (and many other
interarrival times as well).
A Queue block, set to sort in FIFO, LIFO, or some other order, holds the items and releases
them in the designated order. It can have a maximum queue length specified in its dialog.
The Activity block represents servers: you can specify an exponential or other distributional service time within its dialog or by connecting a Random Number block (Value library) to its D
(delay) connector.

Discrete Event

Attribute. As a sorted queue, the Queue block can use attribute values to sort items in the
queue. In addition, the Queue Matching block allows you to define custom scheduling algorithms based on item attributes. It groups items based on certain attributes and releases them as
a group once requirements are met. For this sorting rule, items must have attributes assigned to
them before entering the Queue. Items that have not been assigned an attribute in the model
have a default attribute with a Blank value; they get routed to the end of the waiting line. The
process for having a Queue sort items based on attributes is similar to the process for sorting
using priorities.

134

Queueing
Queue/server systems

M/M/1 queues
A standard notation often seen in queueing theory is M/M/1. This is a basic construct, representing a single server queue. The notation translates to: exponential interarrival times/ exponential service times/ single server. It is also common to see the designation M/M/1/, where the translates to
unlimited queue length, or the designation
M/M/1: //FIFO, which translates to exponential interarrival times/ exponential service times/ single server: unlimited queue length/ infinite population/ first in, first out service.

Discrete Event

MM1 model
A typical M/M/1 system expressed using ExtendSim blocks, with the addition of a plotter and an
Exit block, would look like the screenshot below.

MM1 model

Priority queues
As is true when any other sorting rule is used, a Queue block that sorts by priority will hold items
until there is downstream capacity. Once the downstream block can accept an item, the Queue
searches through the contents of the queue and releases the item with the highest priority. For the
Queue to work properly in this mode, items that enter should already have their priority set; items
without a priority are assigned a default Blank priority and get sent to the end of the waiting line.
Priority model
In the Priority example, items enter the
model and immediately have their priority
set to 2. They then
enter a Queue block set
to Sort by: priority.
After the machining
processes, each item is
inspected for flaws. If
the item does not pass Priority model
inspection, its priority
is re-set to 1 and it is sent back to the Queue block where it waits to be re-machined. When the
machine can accept a new item, the Queue block will release the item with the highest priority. In
this case, any item waiting to be re-machined will be released first.
Run the model with animation turned on to watch the items with a priority of 1 (red circles)
bypass items with a priority of 2 (green circles) while waiting in the Queue.

Queueing
Queueing considerations

135

Queueing considerations
Once items are generated for the model, it is common that they will be held in a queue, typically a
Queue block. In addition to the queueing disciplines discussed above, queues and the items in
them can exhibit other behaviors.

Blocking
Blocking occurs when an item is prevented from leaving a block because there is a downstream
capacity constraint. Blocking is common in serial operations where there are several activities in a
row without queues in between; each activity has the potential for blocking arriving items. It also
occurs when activities are preceded by queues with finite capacity, causing backups in the preceding activity. Blocking increases the waiting time for items in queues and is added to the calculation
of their utilization.
The examples in the sections Processing in series on page 171, Sequential ordering on
page 158, and Machines that can only process certain types of items on page 166 illustrate
potential blocking situations.
Sometimes customers enter a facility, look at the long line, and immediately leave. This is an example of balking. In the Balking model. balking is easily represented by setting a maximum queue
length and then using a Select Item Out block to prioritize sending items to that queue. If the
queue is full, the Select will send the items to another part of the model; in this case, an Exit
block..

Balking model using Select Item Out to prioritize the Queue

Balking can also be represented by having a Decision block (Value library) look at a queues length
or wait time. If the line meets certain conditions (is too long, takes too long to move, etc.), a Select
Item Out block routes the item out of the model before it enters the queue.

Reneging
Reneging occurs when an item, having entered a queue, leaves before it reaches the output. An
example of this is telephone callers who, after being put on hold, will hang up without getting help
if they feel they have waited too long for assistance.
To simulate reneging, select an option in a Queue blocks Options tab. The choices are:
Renege items after a specified number of time units. The number of time units can be set in the
blocks dialog or through its R (renege) connector.
Renege items immediately when the R (renege) connector gets a true value (0.5 or greater).

Discrete Event

Balking

136

Queueing
Queueing considerations

When either of these choices is checked, an alternate item output appears on the right of the
Queue block. Items that renege leave through that Renege output. They can be routed back to the
original line (as in the example below), routed elsewhere in the model, or they can exit the model.

Discrete Event

Reneging model
In the Reneging model, parts wait in the first buffering queue until they can be heated by a furnace, then wait for processing in a second buffer. If too much time passes before a part is processed
(such that it cools down), the part is sent back to the first buffer to wait for reheating.

Reneging model

The Options tab of the Queue that represents Buffer 2 specifies that a part will wait 5 minutes
before it must be returned for reheating. The relevant information has been cloned onto the model
worksheet. As seen in its Results tab, the Queue block automatically counts and reports how many
items have reneged.

Jockeying
Jockeying is when items move from one waiting line to another in an attempt to gain some advantage. To see a good example of jockeying, go to any supermarket and watch as people leave the end
of a slow moving cashiers line to try and get onto a faster line.
The reneging feature on the Options tab of a Queue block is useful for building a model of this
type of behavior. Normally, items renege if they have spent too much time in a queue. But the
Queue block has a connector that can force reneging of the last item in the line. The Jockey.mox
model is a good example of this.

Queueing
Sorting items using the Queue Equation block

137

Jockey model
In this model customers arrive from the Create block and are routed through the Select Item Out
block to the shortest of three possible queues.

As customers wait in the queues it is possible for the lines to move at different speeds. The last customer in each queue has the option to move to another queue if a shorter line opens up.

Sorting items using the Queue Equation block


The Queue Equation block (Item library) is used to release items in an order that is based on a
ranking rule. Items enter the queue and are stored in the order of their arrival (FIFO). However,
instead of the items leaving in FIFO order, an equation in the blocks dialog determines which
item (if any) should leave the queue next. The equation is automatically calculated once for each
item in the queue and the results are used to assign a ranking for each item. The item with the best
ranking is the one that is allowed to leave next.

How the block works


Importantly, only the equation results from the winning item are used for that particular calculation cycle. For example, if the queue currently holds 10 items, the equation will be calculated 10
times and 10 individual sets of equation results will be collected. But only the equation results
from the item with the best ranking will be used; results from the other 9 items are discarded.
So that the item leaving next will be properly chosen, by default a new calculation cycle is initiated
every time an item enters or leaves the queue or when a value input connector receives a message.
To override the default behavior, the factors that initiate calculation cycles can be controlled
through check boxes in the blocks Option tab.
The tables below describe a number of equation input and output variables that are unique to the
Queue Equation block. Along with the common input and output variables described in Equation components on page 678, these variables are designed to help users write equations that will
properly select the next leaving item. In particular, the QEQ item rank variable is used to assign a
ranking to each item in the queue.

At least one QEQ item rank output variable must be defined for this block to function properly.

Discrete Event

Jockey model

138

Queueing
Sorting items using the Queue Equation block

Once each item has been assigned a ranking, the items are released from the queue according to
the ranking rule selected in the Options tabs Release popup; the ranking rules are listed on
page 139. The block's internal data structure keeps track of the ranking assigned to each item.

Giving an item a Blank ranking makes it an ineligible candidate for leaving the queue for that particular query cycle

Variables
The Queue Equation block has several types of input and output variables. The tables below
(input variables and output variables) describe the common set of variables shared by all equationbased blocks. The following variables are unique to the Queue Equation block.
To modify the number of rows used in the variable tables:

Discrete Event

Change the number of rows in the table by clicking the green +/- resize button in the tables bottom right corner and entering the number of rows desired.
Delete rows by first selecting the rows you wish to delete, clicking the green +/- resize button,
and then selecting the option to "delete selected rows."
Duplicate any rows by first selecting the row you wish to duplicate, clicking the green +/- resize
button, and then selecting the option to "copy selected row."
Input variables
.

Input Variable

Uses

QEQ arrival time

The time the item arrived to the queue

QEQ FIFO position

The items first-in, first-out (FIFO) position in the queue

QEQ current best item rank

The best (highest or lowest) item rank result for the current calculation cycle

QEQ attrib last item to exit

Provides the chosen attribute value of the last item to exit the
block

QEQ num items in queue

The number of items currently in the queue

QEQ static calc cycle init

A static variable that gets initialized to its starting value at the


beginning of every calculation cycle. Changes to this variable
remain fixed (static) across equation calculations.

QEQ static item value

A static variable used to temporarily store information on items


during their stay in the queue.

AR requirement is avail

This boolean variable is True if an advanced resource (AR)


requirement is available for the current item. See note below.

AR num requirements avail

Provides the number of advanced resource (AR) requirements


available for the current item. See note below.

The AR variables are only shown in the Queue Equation block if Enable Advanced Resources (AR)
is checked in the blocks Options tab and the model contains a Resource Manager block (Item
library of ExtendSim AT and ExtendSim Suite).

Queueing
Sorting items using the Queue Equation block

139

Output variables
Output Variable

Uses

QEQ item rank

Defines each items rank (position) in the queue. At least one of


the output variables must be of this type.

QEQ halt calculation cycle

If set to True, this variable will prematurely halt the current calculation cycle.

QEQ next item

Controls which item in the calculation cycle is evaluated next.

AR allocate requirement

If set to True, the current items advanced resource (AR) requirement will be allocated to it. See note above.

As mentioned earlier, while you can specify other equation results, one of the output variables has
to be of the type QEQ item rank. Furthermore:
Only the results for the item ranked best will be output.

These variables are only available for the item that is currently being released.
Ranking rules

The Release popup on the Options tab provides the following selections to determine which item
should be released first:
Highest ranked item. Each items rank value is calculated by the equation and the item with the
highest ranking is allowed to exit.
Lowest ranked item. Each items rank value is calculated by the equation and the item with the
lowest ranking is allowed to exit.
The first True ranked item. The equation will be calculated once for each item until either an
item receives a True ranking or there are no items left to evaluate.
All True ranked items. All items receiving a True ranking are moved to an internal departures
list where they are immediately and permanently available to be moved downstream.
The results are saved for each item in the departures list. These results are used (or broadcast) at the time the item exits the queue.
Items in the departures list are no longer evaluated by the equation. This can reduce the
number of times an item is evaluated, reducing run times.
Items are released in FIFO order.

Least dynamic slack


Least dynamic slack is a ranking rule for queues that tends to reduce the lateness of a sequence of
orders. Slack is defined as the due date minus the remaining processing time. In essence, it is the
float that is available before the item is due to be completed. When using slack to sort items, priority is given to those items that are closest to being late. In a model that represents orders for services or goods, choosing the order with the least dynamic slack tends to minimize the number of
late orders.

Discrete Event

You can use more than one QEQ item rank variable; the secondary ranking variable will be used
to arbitrate in the case of tied ranking.

140

Queueing
Sorting items using the Queue Equation block

Discrete Event

Least Dynamic Slack model


The example model Least Dynamic Slack illustrates the improvement in on-time performance that
can be achieved by sequencing orders by least dynamic slack instead of first in, first out ordering.

Least Dynamic Slack model

The two models are identical, except the top model uses Queue Equation blocks with least
dynamic slack calculations and the bottom model uses Queue blocks and typical FIFO ordering.
In the model, the equations in the Queue Equation blocks calculate the dynamic slack for each
item. The item with the smallest dynamic slack (least amount of time before being late) will be
selected first. As seen on the plot which has been cloned onto the model worksheet, on-time performance is higher using least dynamic slack (top line) compared to FIFO (bottom line).

Minimizing setup
In some systems, setup time (the changeover from one product to another) can add significant
delay to the processing of items. If this is the case, it may be useful to process the same item type
until there is no longer any of that item type in the queue. Only when a particular type of item has
been exhausted will another type of item be processed. Giving priority ranking in a queue to the
same type of product that has just exited the queue reduces the number of setups or changeovers
between products. Like least dynamic slack, minimizing setup time is another type of queue ranking rule.
Minimize Setup model
The model Minimize Setup compares the Product attribute for each item in the Queue Equation
block to the Product attribute on the last item to leave the queue. The first item with its Product
attribute value equal to the item that has just exited is released first. If no item in the queue can be
found with an attribute value that matches the last exited item, the first item in the queue is
selected. The plot shows the effects of this rule: the queue builds up initially until it can combine
enough batches together to gain an efficiency from minimizing the setup time. (The example

Queueing
Sorting items using the Queue Equation block

141

includes a second model, with a FIFO queue instead of a Queue Equation block, for comparison
purposes.)

Maximizing service levels


In a service system, the service level can be defined as the number of customers served within a certain time period. For instance, technicians might be rated on the percentage of customer requests
fulfilled within a certain time period. To maximize this, a queue that applies the maximize service
level rule gives priority to those customers who waited less than the service level time, leading to
dramatic improvement in the service level. However, this type of system might not be popular with
real-life customers since some of them may have to wait a very long time while other customers
who arrived later would wait a much shorter time.
Maximize Service Level model
The top section of the Maximize Service Level model uses a Queue Equation block to sort the
queue into two priority levels:
The service priority is the customer who has spent the longest time (but less than 10 minutes) in
the queue
Customers who have waited longer than 10 minutes are placed at the back of the line
The lower section of the model is exactly the same as the top, except it uses a Queue block in FIFO
sorted queue mode. As the model is run, two plotters show the effect on service level and wait
time. Comparing the service level of the upper model to the bottom model, it is obvious that there

Discrete Event

Minimize Setup model

142

Queueing
Matching items using the Queue Matching block

Discrete Event

is a dramatic improvement if the sorting rule is used. However, the second plotter makes it equally
as obvious that some customers have a much longer wait when the service level is maximized.

Maximize Service Level model

Combined rules
Because of its tie-breaking capabilities, the Queue Equation block can be used to model situations
where two items are considered equal using the primary sorting rule but a secondary rule is used to
determine the item with the higher priority.
Combined Rule model
The Combined Rule model uses the least dynamic slack as the primary rule. However, if the least
dynamic slack is within 2 time units, the rank (order of the items in the queue) is used.

Combined Rule model

Matching items using the Queue Matching block


The Queue Matching block has a variable number of item connectors where each connector represents a separate internal queue. Within each queue, the block sorts items into different groups
based on each item's match attribute value. Items are released from a group only when the required
number of items are present in each group in each queue.

Queueing
Advanced queue topics

143

This block is especially useful for making sure that items have a particular characteristic at a specific time. For instance, you would use this queue to reassemble parts in the correct order or to
insure that subassemblies are correctly matched with each other.
For more detail, please see the Queue Matching online help by clicking the Help button in the
lower left of the blocks dialog.

Queue Matching model


In the following example, electronic systems arrive from the field, are separated into their individual components for refurbishing, and are reassembled. In this operation, all of the components but
only 40% of the housings need to be reworked. In addition, it is important that the housings for
each system be reassembled with their original (refurbished) component set.

The Information block counts each electronic system as it arrives and outputs the total number
that have passed through the block. The Set block uses this value to set a Serial Number attribute
for each electronic system. After refurbishment, the system is reassembled using its original parts.

Other models that use the Queue Matching block


The folder Examples\Discrete Event\Queue Matching contains additional models that use the
Queue Matching block. Those models explore more advanced topics such as modeling fixed and
variable requirements for specific items.

Advanced queue topics


This section discusses viewing, initializing, and animating the contents of a queue. These techniques are useful in creating a more exact model as well as for debugging and/or validating a
model.

Viewing and manipulating queue contents


Although the Queue itself has a Contents tab that can show and report the items within the Queue
at any time (See Item Contents of queues and activities on page 698), a powerful ExtendSim feature is the ability to also manipulate the contents of a queue. The Queue Tools block (Utilities
library) allows you to view items in a queue, manually manipulate the ordering of those items, and
initialize the queues contents. To use this block, connect from the L (length) output of a Queue or
Queue Equation block to the value input connector of a Queue Tools block. The block has two
tabs, View and Options, as discussed in the following sections.
View tab of Queue Tools block
The Queue Tools blocks View tab is used to manipulate items in a Queue or Queue Equation
block and display information about the items. When the model is run, every item in the attached
queue will have an entry in the table.

Discrete Event

Queue Matching model

144

Queueing
Advanced queue topics

Popup menus at the top of the columns are


for selecting which of the items properties
(attribute, quantity, priority, and so forth)
to view. There are also buttons (Up, Down,
Destroy) on the View tab that can change
the rank of an item in the queue or delete
an item from the queue. For instance, in
the screenshot to the right an item with a
priority of 4 has been moved in front of
other items with priorities of 1.

Manipulating a queue

Discrete Event

To manipulate the items in a queue, run


the model, pause the simulation at the desired point, select an item, and use the buttons in the dialog to move or destroy it. (To pause a simulation run, click on any cell in the Queue Tools table or
use the Pause button in the ExtendSim toolbar or the Pause menu command.) Leaving this block
open (or having a clone on the model worksheet) while the simulation is running will slow the
model down; it is best to close it when not needed.
The View tab of a Queue Tools block is cloned onto the worksheet of the Initializing and Viewing
model, discussed in the next topic.

Initializing a queue
Sometimes it is useful to introduce items into the model at the start of the simulation run. The
Options tab in a Queue Tools block (Utilities library) can be used to preload a queue with items at
start time. Situations where queues might be initialized with items include:
Reducing start-up bias. By placing items in queues at the start of a simulation, the model begins
in a state that is closer to steady-state.
Importing current system status in a scheduling model. When using simulation to model a
detailed schedule, it is necessary to start the simulated system with the same work-in-progress as
the real system.
To use this block, connect from the L (length) output on a queue to the value input connector on
a Queue Tools block. The blocks Options tab has three choices:
No queue initialization: Items are not added to the queue at the start of the simulation.
Initialize queue: The queue is initialized with the number of items entered in the number field
and property values as specified in the Properties table.
Initialize from global array: The number of items and property values are read in from a specified global array. Because global arrays can themselves be initialized from a number of sources
including Excel, a database, or the Internet, this is a very useful way to import the contents of a
queue from an external source.

Queueing
Animating queue contents

145

Initializing and Viewing model


The Initializing and Viewing example uses the Options tab of a Queue Tools block to introduce
items into a Queue block at the start of the simulation. A clone of the blocks View tab has been
placed on the model worksheet.

Initializing and Viewing model

Animating queue contents


By default, the number of items in a Queue block are displayed on its icon. However, a more
detailed animation showing an animation picture for each item can be obtained by putting the
Queue inside a hierarchical block and animating the hierarchical block's icon. To add this type of
animation to a model:

Encapsulate a Queue inside a hierarchical block (right-click the Queue block and select Make
Hierarchical.)

Open the hierarchical block's structure (right-click the hierarchical block and select Open
Structure) and add a number of identically sized animation objects from the icon tools in the
toolbar.

On the Item Animation tab of the Queue block, enter the first and last animation object numbers in the Animate H-block objects fields.

Discrete Event

In this model, ten items are added to the queue at time 0. As seen in the Properties table in the
Queue Toolss Options tab, these initial items have their item priority set to 1, their item quantity
set to 1, their Type attribute set to 1, and their Arrival attribute set to 0. The tab also indicates that
those items are represented by a cyan circle for animation. After the initial 10 items, items from the
four processes are animated as circles with the same color as the arrows.

146

Queueing
Animating queue contents

Animating Queue Contents model


This example model animates a priority queue. There are four possible priorities, as indicated by
the colored arrows on the left. Green circles represent items with a priority of 1, yellow circles indicate an item has a priority of 2, and so forth.

Discrete Event

Animating Queue Contents model

Items with a lower number for their priority (a higher priority) will move to the front of the queue.
The animation shows this happening as new items with lower priorities will pass other items.
In this model, there are four rows and six animation objects per row on the icon of the hierarchical
block to the right of the arrows. The Item Animation tab of the Queue block inside that hierarchical block is set to Animate H-block objects: 1 to 24. This causes all 24 objects on the hierarchical
blocks icon to be animated, based on what is happening in the Queue.
For more detailed information about animating hierarchical blocks, see Animating a hierarchical
blocks icon on page 612.

Discrete Event Modeling

Routing
Handling items from several sources;
sending items to multiple destinations

148

Routing
Commonly used blocks

When building models, you will frequently encounter situations where you want to manipulate
items coming from several sources or send items to several possible destinations. Depending on the
purpose, there are several methods for accomplishing this. This chapter will cover:
Items arriving from multiple sources
Merging items from several streams into one stream
Balancing waiting line lengths
Using the Throw Item and Catch Item blocks
Items going to several destinations
Simple routing to one of several streams
Scrap generation
Successive, explicit, and conditional ordering of routes

Discrete Event

Routing based on item properties


The models illustrated in this chapter are located in the folder \Examples\Discrete Event\Routing.

Commonly used blocks


The following blocks will be the main focus of this chapter. The blocks library and category
appear in parentheses after the block name.

Blocks that route items


Catch Item (Item > Routing)
Receives items sent remotely by a Throw Item block.
Select Item In (Item > Routing)
Selects an input and outputs its item.
Select Item Out (Item > Routing)
Sends each item it gets to a selected output.
Throw Item (Item > Routing)
Sends items remotely to a Catch Item block

Blocks that affect the flow of items


Decision (Value > Math)
Can be used with Item library blocks to control the flow of items in a portion of the model.
Gate (Item > Routing)
Controls the flow of items in a portion of the model (area gating) or based on model conditions (conditional gating).

Routing
Items from several sources

149

Math (Value > Math)


Performs a mathematical operation, such as addition or subtraction, that can be used with
Item library blocks to control the flow of items in a portion of the model.
Max & Min (Value > Math)
Outputs the minimum or maximum value found among its input connectors. Can be used
with Item library blocks to control the flow of items in a portion of the model.

Items from several sources


Depending on your modeling needs, you may want to merge different streams of items into one
stream of individual items, select one item from several for routing or processing, or join separate
items into a single item.

Merge streams of items in the Merging Inputs model on page 151.


Direct items requiring more processing in Cumulative processing time: time sharing on
page 177.
Reroute preempted items in Preemption on page 184.
Those models use the Select Item In block to route items. The section Throw Item and Catch
Item blocks for merging item streams on page 152 illustrates using a Catch Item block to merge
multiple streams of parts into one stream.
To select an item for processing from several sources based on some decision, use the Select Item
In block. The decision can be a logical decision (choose every other item to route to the top
waiting line) or it can be based on some characteristic of the item (get the item with the highest
priority). The specifications for the decision are determined by the entries you make in the dialog of the Select Item In block and are modified by blocks connected to its select input connectors. Using the Select Item In block to choose specific items is shown in Balancing multiple
input lines on page 151.
To join items from various sources and process them as one unit, use a Batch block, as described
in Batching on page 200. This is most common when modeling manufacturing processes or
packaging operations where subassemblies are joined together. It is also used when two or more
items need to be temporarily associated with each other for processing or routing, such as a clerk
processing an order. Note that batching differs from using the Select Item In and Select Value In
blocks, which only merge streams of items so that items remain separate and are processed separately.

To merge streams of items from one hierarchical layer into one stream at a different hierarchical
layer, you can add connectors to the hierarchical block or use the Throw Item and Catch Item
blocks, at shown on page 152.

Discrete Event

To merge streams of items from several sources into one stream, where each item remains separate and retains its unique identity, use the Select Item In or Throw Item and Catch Item blocks.
You then typically direct the single stream into a queue. For example, you can use this to represent traffic merging into one lane or people accessing one hallway from several offices. A Select
Item In block is used to:

150

Routing
Items from several sources

Select Item In dialog


The Select Item In block chooses an item from one of its input connectors and sends that item to
its output connector. The selection is based on settings and options in the blocks dialog.
Selection options
The Select Item In block has several rules for selecting an item from its input connectors:

Discrete Event

Item priority. Selects the input connector that has an available item with the highest priority
(the lowest numerical value for its priority.) For example, you could use this option to select
from a group of queues to a single activity. The queue with the item that has the highest priority
will be selected. This option always starts and restarts its selection search at the top input.
Random. The inputs are selected randomly based on probabilities entered in the blocks selection table. Enter probabilities in decimal format. For example, enter 0.75 for 75%. If the
entered numbers do not equal 1.00, the actual sum will appear in red in the bar below the Probability column. If Select from: all inputs is chosen, an input will be randomly selected whether
or not an item is available at that input. This situation can potentially cause starving, as discussed below. If Select from: only inputs with available items is chosen, the block will only
select from inputs with available items.
Select connector. The value received at the select connector determines which input is chosen.
The blocks dialog has an option for setting which value chooses the top input; the default is 0.
The lower connectors will be numbered sequentially after the top connector. That is, if the top
input is chosen by a select value of 1, the second input will be numbered 2, the next lower input
would be numbered 3, and so forth. In that case, a value of 3 at select would cause the item from
the third connector from the top to be selected. Note that, even if items are available at the other
inputs, the block will wait for an item at input 3, potentially causing starving as discussed below.

See Item library blocks on page 299 for some precautions when using this option with a Get
block.

Sequential. Selects the inputs in strict sequential order starting at the top; this is also known as a
round robin selection. This option could cause starving (discussed below), since the block will
wait for an item to become available at each selected input.
Merge. Items are taken as they become available through any input. Generally, this option is
used to combine the flows of items where there is no blocking of items arriving at the Select
Item In block. Inputs are selected in a round robin fashion starting from the top; once a selection has been made the selection search will resume at the next lower input.

Residence blocks such as the Activity have variable item input connectors. This works the same as
using the Select Item In block in Merge mode to merge multiple item streams.

Starving conditions
If an item is not available from the selected input of a Select Item In block, the following options
will cause a starving condition:
Random (if Select from: all inputs is chosen)
Select
Sequential

Routing
Items from several sources

151

Merging several item flows into one stream


The Select Item In block can combine the inputs from any number of sources into one stream of
output items.

An alternative is to use the variable item input connectors on an Activity or other residence block.
Merging Inputs model
In the Merging Inputs example model, the Select Item In block will accept items from any of the
three inputs. Its dialog is set to Select input based on: merge. If the Select Item Ins output is
blocked, the block will force items to wait in the Queues (labeled Buffers 1-3). When the Select
Item In becomes unblocked, it will check each input in turn to try to pull an item through for processing by the Activity. As you can see in the table that has been cloned from the Select Item In
block, when it is ready to process items, the Activity gets whichever item is available. This can
cause some queues to have longer waiting lines than others, as you can tell from their Results tabs.

Discrete Event

Merging Inputs model

Balancing multiple input lines


To even out the queue lengths of multiple input lines, use a Select Item In block controlled by a
Max & Min block (Value library), which checks the length of each queue. An example of this
would be three loading docks that fill up as trucks unload, and you want items to come first from
the dock that is most full.

152

Routing
Items from several sources

Discrete Event

Input Line Balancing model


The Input Line Balancing model is the same as the Merging Inputs model, except a Max & Min
block looks at the length for each of the queues and sends that information to the Select Item In
block.

Input Line Balancing model

On the Max & Min block, the con output connector tells which of the inputs has the largest value,
in this case it indicates the longest queue. This tells the Select Item In block which queue to
retrieve the next item from. In the dialog of the Select Item In block, Select input based on: select
connector and Top input is chosen by Select value: 1 have been selected. As you can see from the
cloned Throughput table, items are drawn in a balanced manner from each line, and the queue
lengths are almost equal, as opposed to what happened in the Merging Inputs model, earlier.

Throw Item and Catch Item blocks for merging item streams
The previous examples discussed routing items using connections to blocks that are nearby and at
the same level of hierarchy. Sometimes, especially in large models, it is necessary to send an item to
a different hierarchical layer. The Throw Item and Catch Item blocks are especially useful when
there are items from various locations in a model (even from various hierarchical levels) that need
to be sent to one place. Note that these blocks are used as an adjunct to routing, not a replacement
for the methods described previously.
Throw Item and Catch Item blocks pass items without connections and can even be used deep
within nested hierarchical blocks to send items to other hierarchical blocks. For that reason, they
are sometimes used instead of the Select Item In and Select Item Out blocks.

Throw and Catch blocks should only be used when named connections will not be sufficient. For
instance, to pass items through different levels of hierarchy or to use the routing features on the
Throw and Catch blocks.
Throw & Catch model
The Throw Item and Catch Item blocks can also be used to merge several item flows into one
stream. In the following example, three Throw Item blocks route items to Shipping, which is a

Routing
Items going to several paths

153

hierarchical block containing two blocks, a Catch Item and an Exit. The Catch Item block is
labeled To Shipping and is designated as belonging to Catch group 1.

A popup menu in the Throw Item


blocks dialog displays the labels of
the possible Catch Item blocks. You
Selecting Catch Item block labeled To Shipping
have the option of routing all items
to the Catch Item block specified in
the popup menu (as shown to the right) or routing items to different Catch Item blocks depending
on the value of a specified attribute or priority (see Throw and Catch Attributes model on
page 161).

You must enter text in the label field at the lower left corner of each Catch Item blocks dialog.
Only labeled Catch Item blocks will appear in a Throw Item blocks popup menu.
Catch Item groups
If you are working with a large number
of Catch Item blocks, you may want to
organize them into groups. To do this,
Catch Item group popup menu
select or create a group name using the
Catch Item group popup menu in the
Catch Item block, shown at right. Then use the Catch Item group popup menu in a Throw Item
block to select the desired group. Once a group is selected in the Throw Item block, the blocks
Specify Catch Item by: Label popup menu will only contain the labels for the Catch Item blocks
in the selected group.

Groups can only be defined in a Catch Item block.

Items going to several paths


In many cases, you will need to route items from one stream to one of many different streams:
Taking a stream of items and routing them to different activities or operations is called parallel
processing. In parallel processing, each item is handed off to one of several activities, such as an
Activity block. The logic that determines which operation the item is routed to can be simple
(the part is machined at the first available station) or it can be complex (bottle type A is filled at

Discrete Event

Throw & Catch model

154

Routing
Items going to several paths

Machine 3). Different methods of routing items to parallel processes are described in detail
throughout this chapter. See also Processing in parallel on page 172.
For situations where one item is unbatched or separated into its component items, use the
Unbatch blocks. For example, you might receive a shipment of furniture consisting of 8 desks,
20 chairs, and 7 typewriter returns, or a mail cart with 1000 pieces of mail. You use an Unbatch
block to disassemble that item into its individual components, then route the items to appropriate destinations, as described in Unbatching on page 207.

Discrete Event

To select the path an item should go on, use the Select Item Out or Throw Item blocks. The
Select Item Out block is useful for routing a stream of items to several paths based on some decision. For instance, you can send all the parts that need rework to a rework station, and ship the
remaining parts. Or direct patients requiring immunizations to the Injection Clinic. The use of
these blocks is described in Sequential ordering on page 158, Explicit ordering on page 159,
Routing decisions based on Item properties on page 160, and Select Item Out dialog below.

Select Item Out dialog


The Select Item Out block is appropriate for routing items onto one path or another. Its dialog
contains several options for determining which route an item should take.
Selection options
The logic in the dialog of the Select Item Out block chooses which output connector an input
item should be routed to. The selection options are:
Property. The appropriate output is determined using the items propertyits attribute or priority. Values to represent the outputs are entered in the tables Select Output column; the default is
that 0 selects the top output. For each item, the block finds the value of the specified property in
the tables second column (which is named for that property), and determines the corresponding
output connector for that value in the Select Output column. Since the block will hold the item
until there is downstream capacity, this option can cause blocking.
Connector priority. An attempt is made to send the item out each connector, in the order of the
connectors priority, until the item is accepted by a connected block. The priority for each connector is entered in a table in the blocks dialog. The top priority is the lowest number, such that
an output with a priority value of 1 has a higher priority than an output with a priority value of
3.

Note that this is different from assigning a priority to an item and selecting the output based on the
items priority, as can be done with the blocks Property option. With the Connector priority
option, the Select Item Out block essentially prioritizes the output path, not the item.

Random. Outputs are selected randomly based on settings in the blocks probability table. Enter
probabilities in decimal format. For example, enter 0.75 for 75%. If the entered numbers do not
equal 1.00, the actual sum will appear in red in the bar below the Probability column. When the
option If output is blocked: item will try unblocked outputs is chosen, the block will randomly
try to find an output that can accept the item. When If output is blocked: item will wait for
blocked output is used, the block will select an output and the item will wait until that output is
able to accept the item; this can cause blocking.
Select connector. The value received at the select connector determines which output is chosen.
The blocks dialog has an option for setting which value chooses the top output; the default is 0.

Routing
Items going to several paths

155

The lower connectors will be numbered sequentially after the top connector. That is, if the top
output is chosen by a select value of 1, the second output will be numbered 2, the next lower
one would be numbered 3, and so forth. In that case, a value of 3 at select would cause the item
to go to the third connector from the top. Since the block will hold the item until there is capacity downstream from connector 3, this option can cause blocking.

See Item library blocks on page 299 for some precautions when using this option with a Get
block.

Sequential. Outputs are selected one after the other in sequential order starting from the top;
this is also known as a round robin selection. When the option If output is blocked: item will
try unblocked outputs is chosen, the block will try the next connectors sequentially. When If
output is blocked: item will wait for blocked output is used, the block will select an output and
the item will wait until that output is able to accept the item; this can cause blocking.

The Select Item Out block expects integer values for comparison and will truncate non-integer values. For example, if select connector is chosen as the selection condition, the numbers 0.001 and
0.999 received at the SelectIn input would both be truncated to a 0.

Property
Random (when If output is blocked: item will wait for unblocked output is chosen)
Select
Sequential (when If output is blocked: item will wait for unblocked output is chosen)
For the random and sequential selection conditions, the ability to choose what happens if the output is blocked is useful for certain modeling problems. For instance, in the Simple Routing model
shown below, if the top Queue block is designated to get the item, but it is blocked, the Select Item
Out block will route the item to an unblocked Queue.
Predicting the path of the item before it enters the block
As mentioned above, an item can be pulled into a Select Item Out block but not be able to proceed
because the downstream path is blocked. An alternative to this situation is to cause the item to wait
in an upstream queue, rather than in the Select Item Out block. This is accomplished by checking
Predict the path of the item before it enters this block. When this is enabled, the Select Item Out
block will query upstream to determine the properties of the next item to arrive. It then checks to
see if the appropriate downstream path is clear. Only if the item can be sent out the desired output
will the item be pulled in. This guarantees that the item will not get stuck in the Select Item Out
block.

This setting requires that any properties used to make the selection have to be set before the item
begins to move into the Select Item Out block. For example, a Queue is necessary between a Set
block and a Select Item Out block.

Discrete Event

Blocking conditions
The Select Item Out block is a decision-type of block; its default is to pull in the item and then
determine the path that the item will take. In some situations, the selected output path may be
blocked and the selected item will have to wait to leave. Some selection conditions can cause the
items behind a selected item to be blocked:

156

Routing
Items going to several paths

Implicit routing
The simplest, but not necessarily the best, way to route items is by creating connections between
the output of the collection point and the inputs of each activity-type block. This causes ExtendSim to pass items to the first available activity.

Discrete Event

However, if more than one activity-type block is free when an item is ready, it is not obvious which
block will get the item. For instance, a Queue that holds items for three Activity blocks would look
like the model below.

Simple Connections model

If two or more machines are free when an item comes out of the queue, the machine that was first
connected will get the item. With these types of simple parallel connections, even just disconnecting and then reconnecting a connection line could change the order of activities getting items.
This implied routing may not be reflective of the actual system and is usually not want you would
want.
Unless it is completely unimportant in the model, you should always use the Select Item In and
Select Item Out blocks to explicitly state how items should be routed.Otherwise, the order in
which their connections were made will dictate the routing.

Simple routing
It is most common to route a random number of items to one section of the model, while the rest
are routed to another. An example of this is an intersection where a number of cars will turn to the
left, some will go straight, and some will turn right.
Simple Routing model
In this model, items are routed randomly to one of three machines, as indicated by the setting
Select output based on: random. The probability table in the dialog of the Select Item Out block

Routing
Items going to several paths

157

indicates that 0.50 (50%) of the items will go to the top Queue while the remainder will be distributed equally between the remaining two Queues.

Simple Routing model

The previous model routed items based on probabilities. To distribute an input item to any available output, in the Select Item Out dialog choose Select output based on: sequential and If
output is blocked: item will try unblocked outputs.

Simple Routing One Queue model


A model similar to Simple Routing would be if there were only one queue and it was placed before
the Select Item Out block. As mentioned above, however, if two sequential items are destined for
the same activity they will block items that arrive behind them. The option If output is blocked:
item will try unblocked outputs allows the Select Item Out block to try other outputs if the first
choice is unable to accept the item.

Simple Routing One Queue model

As seen in the model, even though 50% of the items should be going to the top machine, item distribution is almost even. Because all the machines process items for the same amount of time, the
top machine is often busy and, rather than cause the system to be blocked, its intended item is
routed to a different machine.

Discrete Event

Notice that there are queues in front of the machines. If you omitted the queues, there is a possibility that items arriving from the Create block could be blocked. For example, if the second item
were destined for the top machine, but that machine was still processing the first item, the other
machines would have to wait for items until the top machine finished processing and pulled in its
item.

158

Routing
Items going to several paths

Scrap generation
An important aspect of some systems is modeling the generation of scrap or simulating a yield rate.
For instance, many manufacturing processes create an expected but irregular quantity of waste or
bad items. This can be accomplished in ExtendSim by randomly routing some items out of the
normal processing stream.

Discrete Event

Scrap Generation model


This example is similar to the model that is described in Simple unbatching on page 208, except
it has a Select Item Out block that determines whether items coming from the Unbatch block
should continue for processing or be discarded, and the Activity block processes two items at a
time. The Select Item Out block is set to Select output based on: random. By setting a probability
that 0.90 of the items will exit through the top connector and 0.10 through the bottom (scrap)
connector, the Select Item Out block causes one out of every ten items to become scrap.

Scrap Generation model

As an alternative, you can also set and check attributes to represent items that need to be scrapped.
This will be shown later in this chapter.

Sequential ordering
To hand items to operations in successive order regardless of whether another operation is free, use
the Select Item Out block set to Select output based on: sequential.

Routing
Items going to several paths

159

Sequential Ordering model


With the sequential setting, the Select Item Out block will choose outputs in successive order starting from the top output. The blocks dialog is set to If output is blocked: item will wait for
blocked output.

Sequential Ordering model

To distribute an input item to any available output, choose Select output based on: sequential
and set the block to If output is blocked: item will try unblocked outputs.

Explicit ordering
If there are several operations, and you prefer certain ones to be active more than others, you can
explicitly state which operations have a higher priority for items. This is common when you want
to avoid using an operation because it is not as efficient (such as an older piece of equipment) or
because it is an uneconomical use of a resource (having a supervisor wait on customers.)
Choosing the selection condition connector priority in its dialog allows the Select Item Out block
to be used to specify the priority of each output.

Note that this is different from assigning a priority to an item, since the Select Item Out block
essentially prioritizes the output path, not the item.

Discrete Event

The first two activities are set to process for 1 time unit while the third activity takes only 0.5 time
units. For this model, even if the third activity is the first one ready to accept an item, it will only
get an item after the first and second activities have pulled in an item. Also note that an item is
only pulled from the Queue block when an activity has finished processing, potentially causing
blocking in the system. The example Balancing multiple output lines on page 163 shows a solution for this.

160

Routing
Items going to several paths

Explicit Ordering model


For example, assume you want Machines 1 and 3 to get most of the items for processing, and
Machine 2 to only get items if Machine 1 and 3 are busy. The model is:

Discrete Event

Explicit Ordering model

The dialog of the Select Item Out block is set to Select output based on: connector priority. In the
table, the highest priorities (which are the lowest numbers) are assigned to the top and bottom outputs, and the next lowest priority is assigned to the middle output. In this case, Activity 1 has first
priority on items. If Activity 1 is busy, Activity 3 will get the item. Only if Activity 1 and 3 are busy
will Activity 2 get the item.

As seen in this model, multiple outputs can have the same priority. However, the item will go to

the topmost output that has the highest priority and is free. If that output is not free, the next
lower output with the same priority will be checked to see if it is free, and so forth. If this is not
what you want, set the priority values explicitly. For instance, you could set the output priorities to
1, 2, and 3 rather than to 1, 2, and 1 as was done in the example model.

Routing decisions based on Item properties


You may want to route items based on some characteristic of the item, such as its priority, size,
quality, age, or state. To do this, assign an attribute or priority to the item and read that property
value to route the item.

Routing
Items going to several paths

161

Attributes for Routing model


To specify whether or not an item must have a process performed on it, set an items attribute to a
yes-or-no value using the Random Number block (Value library) as shown in the Attributes for
Routing model, below:

Attributes for Routing model

This method is especially useful if the checking process takes more than one step. For instance, you
may need to transport the item to the checking station using transportation blocks, but only if
checking is needed. All those steps would be between the Select Item Out block and the Select
Item In block.
With this model, an item that needs to be checked can be pulled into the Select Item Out block
but not be able to advance because there is already an item in the Activity. To prevent this, you can
cause the block to predict the path of an item before it enters, as discussed page 155.

An item that requires checking that is blocked in the Select Item Out block will also block other
items that arrive after it, even if they do not need to be checked. If this is not how your process
works, insert a Queue before the Activity to hold items that need checking.

The example Machines that can only process certain types of items on page 166 is another
instance of using attributes to route items. For a very different approach, the DB Job Shop model
located in the folder Examples\Discrete Event\Routing uses information from the ExtendSim
database to route items.
Throw and Catch Attributes model
As described in Throw Item and Catch Item blocks for merging item streams on page 152, the
Throw Item block can be used to route items to a specific Catch Item block that is identified by its
label. Throw Item blocks can also be used to route items to different Catch Item blocks depending
on the value of an items attribute or priority. A modification of the Attributes for Routing exam-

Discrete Event

The Empirical distribution in the Random Number block specifies that 75% of the items do not
require checking (0 value for the CheckItem attribute) and 25% do (1 for attribute value). The
Select Item Out block, set to Select output based on: property, reads the attribute value to determine which of two routes the item will take, one through the checking line (value = 1) and the
other around it (value = 0). The Select Item In block is used to combine both lines into one
stream, exiting the simulation.

162

Routing
Items going to several paths

ple, built using Throw Item and Catch Item blocks rather than the Select Item Out block, is
shown below.

Discrete Event

Throw & Catch Attributes model

In this example, The Throw Item block is set to Specify Catch block by: Property: Machine Type,
where Machine Type is a value attribute. The Throw Item block reads the Machine Type attribute
and routes the items to the appropriate Catch Item block according to the table in the throwing
blocks dialog, which is cloned onto the model worksheet.
To cause an attribute or priority value to be associated with a specific Catch Item block, type the
value into the Property Value column and select the appropriate Catch Item block using the
popup menu in the [Catch Block] column.
State Action model
Another routing example is the State Action model where items are routed to operations depending on their state. For complete information, see State/Action models on page 49.

Conditional routing
Sometimes you will want to route items based on the current conditions of the model. For example, monitoring queue lengths to determine whether or not an activity will be brought on-line or
balancing the use of parallel waiting lines.
Bringing a system on-line
Most of the examples in this manual show items being passed to operations where all the operations are on-line and running. In many situations, particular operations are only started when they
are needed. You can bring another system on-line based on the time of day (such as in Scheduling
activities on page 179) or based on some other factor such as the backlog of work.

Routing
Items going to several paths

163

Conditional Routing model


For example, you might have a
factory where most of the processing is done by two machines
but excess work is handled by a
third machine. ExtendSim can
simulate this easily using the
Decision block (Value library)
and the Activity block (Item
library).
The L output of a queue that is
feeding one or more machines
outputs the number of items
Conditional Routing model
waiting to be processed. If this
value is greater than a certain
threshold, you can route some of the items to another machine or activate another process.

You can also model this situation in the opposite manner, by having all the operation blocks process items and then shut one or more of them down under certain conditions. If you do this, items
may be trapped in the shutdown operation until processing resumes.
When you bring a system on line, it may cycle on and off too frequently. See Bringing an activity
on-line on page 179 for some methods for avoiding this.
Balancing multiple output lines
Operations are often preceded by queues before each operation, such as a staging area for each
machine (as compared to the single staging area for all machines as in the Explicit Ordering
model on page 160.) The location and ordering of placement of queues in a model can affect how
the model performs.

Discrete Event

In the model, the dialog of the Decision block specifies that the Y connector outputs a true value
(1) when the value at the A input is greater than 5. This activates the Gate blocks demand connector so that it lets items through to the third machine (until then, it will not accept items). When
the Queue holds 5 or fewer items, the Gate closes.

164

Routing
Items going to several paths

Buffering Operations model


A model with queues before each operation could look like:

Discrete Event

Buffering Operations model: Parallel processing with buffering

In the model, the queues have a maximum queue length of 30 each. The first queue that was connected will receive all the items until that queue reaches its maximum, then the next queue will
start to fill (unless the first machine kept up with the flow of items, in which case the next queue
will never receive any items). In the Buffering Operations model, for example, most of the items
go to the top queue and get processed by Machine 1 and none of the items go to the bottom queue
to be processed by Machine 3. This is rarely what you want.
To even out the use of the machines, use a Select Item Out block set to select machines sequentially, as shown in the Sequential Ordering model on page 159, and place a queue before each
machine. Note however, that if the machines work at different speeds, this will cause the queue of
the slowest machine to fill more rapidly than the other queues.

A green bar across its top indicates that a Queue is set to something other than infinite capacity.

For instance, the Queues in this model are set to hold a maximum of 30 items and therefore have
green bars across their tops.
Output Line Balancing model
A better method than the Buffering Operations example would be to check the length of the waiting line in each queue and give the next item to the queue that is shortest, causing the queue lines

Routing
Items going to several paths

165

to be balanced. The Max & Min block (Value library) connected to a Select Item Out block is
excellent for this.

Output Line Balancing model: Choosing the shortest queue

Compared to the Buffering Operations model shown earlier, in this model the number of items in
the queues tend to be more balanced. However, the system is not as efficient as it could be since an
item often goes to the queue for Machine 1 even though Machine 3 is idle. This happens because
if all the queue lengths are equal, the Max & Min block will report the first connector as having
the shortest queue length. In this case, Queue 1 has first priority for items and the Max & Min
block is just looking at the queue lengths and is not considering whether or not the Activity is
occupied.
Line Balance with Activities model
The previous model showed how to balance the queues. A more useful model would be to include
information about the items being processed when selecting the shortest queue. You can do this by
adding the value of an Activitys F (full) connector to the queue length. The full connector is 1
when the activity is at capacity and 0 otherwise. The resulting model, Line Balance with Activities,

Discrete Event

In the model, the Max & Min block tells the Select Item Out block which queue line is shortest
and thus which queue to hand the next item to. The Min & Max block is set to Output the: minimum value and Top input connector # is: 1. With these settings the blocks top input (L1) is
number 1 and the con output reports which of the inputs (L1, L2, or L3) has the lowest value,
indicating the shortest queue. The dialog of the Select Item Out block is set to Select output based
on: select connector and Top output is selected by select value: 1.

166

Routing
Items going to several paths

prevents items from going to a queue followed by an occupied activity when other activities are
idle.

Discrete Event

Line Balance with Activities model

As in the previous model, the queue lines tend to be more balanced than the Buffering Operations
model; but this method makes more efficient use of the Machines.

Yet another option would be to use a Workstation block to replace the Queue and Activity blocks.
The Workstation can report all of the items in its internal queue and activity through its Length
connector.

Machines that can only process certain types of items


A typical assembly line can handle more than one type of item at a time. For example, you may
have three stereo models being assembled on a single line. Most of the assembly is identical, but a
few different parts are used at different points. Unfortunately, some machines in such a heterogeneous assembly line cannot work on particular models being assembled. The method for accomplishing this is a combination of splitting items into different paths to establish the different
types of items, then recombining the paths appropriately for the different machines. The Select
Item Out block and the Select Item In block are handy in such situations.
Processing by Type model
Assume there is an assembly line where each item has an attribute called Type that is either 1, 2, or
3, depending on the type of item it will be. At one step of the assembly process, there are four
machines. Two of the machines can work on all three types, but one of the machines is old and can

Routing
Items going to several paths

167

only work on types 1 and 2, and the other machine can only work on type 3. The model is shown
below:

Processing by Type model

The Select Item Out block is set to Select


output based on: property. It looks up
the value of the Type attribute (1, 2, or 3)
and selects the appropriate output (1, 2,
or 3) based on entries in the blocks
Options table in Select Item Out block
options table, shown at right.
Notice the use of the queues as buffers in the above model. They are used to store the items by
type, with the top queue for Type 1, etc. Without the queues, the whole line could be blocked,
depending on the order in which items arrive. For example, if the first three machines are all processing a Type 1 item, and a Type 1 item is the next to exit the Select Item Out block, blocking
occurs until one of the machines is finished with its item. The fourth machine will not be able to
pull in an item until one of the other machines finishes processing and pulls in the new Type 1
item. Even then, it will have to wait until a Type 3 item is output before it can process anything.

Named connections are used to simplify the look of this model. Without these, there would be a

spaghetti of connection lines connecting the Queue blocks to the Select Item In blocks. Another
option for organizing the model would be to use Throw Item and Catch Item blocks to route the
items to the appropriate machines.

Discrete Event

A Set block assigns a Type attribute to each item. The empirical table in the Random Number
block (Value library) indicates that there is a 50% probability that the item will be Type 2, and
25% probability that it will be either Type 1 or 3.

Discrete Event

168

Routing
Items going to several paths

Discrete Event Modeling

Processing
Using activity-type blocks to cause and control processing

170

Processing
Commonly used blocks

This chapter will discuss different ways to use activity-type blocks and how to control processing
time and the availability of items and resources. It will cover:
Processing in series and in parallel
Setting the processing time
Bringing an activity on-line
Interrupting processes: preemption and shutdowns
Multitasking
Kanban systems
Material handling and transportation blocks

The models discussed in this chapter can be found in the folder Examples\ Discrete Event\Processing. That folder also contains some subfolders, as indicated in the relevant sections of this chapter.

Discrete Event

Commonly used blocks


The following blocks will be the main focus of this chapter. The blocks library and category
appear in parentheses after the block name.
Activity (Item > Activities)
Processes one or more items simultaneously; outputs each item as soon as it is finished. Can
also be used for multitasking.
Convey Item (Item > Activities)
Moves items on a conveyor from one block to another. Has dialog settings to define
whether the conveyor is accumulating or not, what the length of the item is, and how far
and how fast the item moves.
Create (Item > Routing)
Creates items or values randomly or by scheduled. Can be used to control shutdowns for
the Activity block.
Shutdown (Item > Resources)
Used to control shutdowns for an Activity (Item library) or Valve (Rate library). Useful for
setting random or constant time-between-failures (TBF) and/or time-to-repair (TTR).
Transport (Item > Activities)
Moves items from one block to another. Has dialog settings for defining how fast and how
far the item moves.
Workstation (Item > Activities)
Acts as a FIFO queue combined with an Activity block, holding and processing items.
Takes in one or more items at a time, holds them in FIFO order, processes them simultaneously, then outputs each item as soon as it is finished.

Systems and processes


Systems encompass one or more processes, which are a series of activities that achieve an outcome
based on the inputs. Some examples of processes, the events that might drive them, and the items
that flow through or are consumed by the process are:

Processing
Processing in series

Process

Event

Item(s)

Activity

Planning strategic direc- Plan implementation


tions

Decisions

Planning meetings

Developing a new prod- Employee has a new


uct
product idea

A prototype

Document the specifications

Receipt of raw materials Parts, labor

Assemble the parts

Sales fulfillment

Customer orders goods An order, or the goods


themselves

Process the order, ship


the goods

Call center support

Customer calls on telephone

Telephone call

Route call to technical


support

Processing an insurance Claim is received (or


claim
accident occurs)

Claim

Review the claim

Emergency room
admitting

Accident

Patients, medical personnel

Assess incoming
patients (triage)

Regulating traffic

Traffic light changes

Cars, pedestrians

Cross the street

Computer network

Packet is transmitted

Packet of data

Communication

Material handling

Arrival of AGV

Parts, AGVs

Load part onto AGV

Hiring employees

Company wins contract Employees

Interview potential candidates

Completing an expense Employee finishes trip


report

Report

Prepare and file report

Writing a contract pro- Request for proposal is


posal
issued

Proposal

Research the requirements

Approving a loan

Application

Review credit history

Customer submits
application

The following discussions most often refer to the Activity block for processing. However, the

Workstation block can often be used instead of a Queue and an Activity, and the Convey Item and
Transport blocks are also useful for simulating processing.

Processing in series
Serial processing occurs when items flow from one activity to another, where each activity performs one required task on the item, out of a series of required tasks. This is most common in
manufacturing activities, order entry, or service-intensive situations. A simple example of serial

Discrete Event

Manufacturing a product

171

172

Processing
Processing in parallel

processing is an assembly line, where several processes are performed on one part prior to shipment.

Discrete Event

Serial Processing model

Since there are many machines in series without buffering queues between them, it is possible that
items will be not be able to leave one machine because the next machine will still be busy; this is
known as blocking (as discussed in Blocking on page 135. Serial processes can cause the entire
operation to be slowed to the speed of the slowest activity. This will cause utilization to increase by
the amount of time that the item is blocked. If this doesnt accurately represent your process, put a
queue in front of each machine to represent a holding area, as shown in Select Item Out dialog
on page 154.

Processing in parallel
It is common in industrial and commercial systems for there to be multiple activities working in
parallel, each representing the same task being performed. For example, you might have five
machines that can each process parts arriving from the stockroom. Or three bank tellers who are
available to wait on customers. With the blocks in the Item library, there are many ways to route
items to parallel activities.
Remember that, unless items are purposefully duplicated in the model, they can only follow one
path at a time.

Parallel processing using one block


When you do not need to show each activity as a separate block, you can choose that the Activity
block represent several operations that occur in parallel. This is accomplished by entering a number greater than one for the Maximum items in activity field in the blocks Process tab.
The Activity block can take in items (up to the specified maximum) and process them for a specified time starting from when they arrive. The item with the shortest time in the block (based on
the items arrival time and how long it takes to process) is passed out first. For example, you could
use the Activity block to represent a supermarket where customers arrive at different times and take
varying amounts of time to shop. Customers who arrive early or who only shop a little will leave
first; customers who arrive later or shop a long time will leave later.

Simple parallel connections


You can also use multiple Activity blocks in a model, each of which represents a process that can
accept items in parallel with the other Activity blocks. The simplest way to hand out items to separate parallel activities is by creating connections between the output of the collection point and
the inputs of each Activity. This causes ExtendSim to pass items to the first available Activity
block. However, if more than one block is free when an item is ready, it is not obvious which block

Processing
Setting the processing time

173

will get the item. For instance, a Queue that holds items for three Activity blocks would look like
the model below.

Simple Connections model

If two machines are free when an item comes out of the queue, the machine that was first con-

Unless it is completely unimportant in the model, you should always explicitly state the ordering
for parallel activities using the Select Item In and Select Item Out blocks. See Items going to several paths on page 153 for examples of how to control the flow of items to parallel processes.

Setting the processing time


Activities involve a processing time or delay that is the amount of time it takes to perform a task.
Processing time can be static or can vary dynamically depending on model conditions. It can be
random, scheduled based on the time of day, customized depending on the item that is being processed, or any combination of these.
You model the processing or delay time explicitly using the Activity or Workstation blocks or
implicitly by specifying the length and speed in the Transport or Convey Item blocks. The Activity
block is most frequently used to represent a process or operation, and is illustrated in most of the
examples for this module

The models discussed in this section can be found in the Examples\Discrete Event\Processing\Time folder.

Processing time for an Activity


In the Process tab of the Activity block you can select that the delay is:
A constant. This uses whichever number is entered in the Delay (D) field. See also the discussion of Fixed processing time on page 174.
From the D connector. The processing time is the value at the D input, overriding any value initially entered in the Delay (D) field. For example, see Fixed processing time on page 174 and
Scheduled processing time on page 174.
An items attribute value. With this option, you can select an attribute to control the processing
time. This is illustrated in Custom processing time on page 176.
Specified by a distribution. This choice provides a random processing time, based on the distribution and its arguments selected in the dialog. An example of this is shown in Random processing time on page 175.

Discrete Event

nected will get the item. With simple parallel connections, even just disconnecting and then reconnecting a connection could change the order of activities getting items.

174

Processing
Setting the processing time

From a lookup table. This choice allows you to use an attribute value to specify the parameters
of a random distribution. With this option, two popup menus and a table appear. The first
popup is for choosing a distribution; the second is for selecting an attribute. The table is where
the processing time for each type of item is characterized. with each row containing a different
set of arguments for the selected distribution. As each item enters the block, its attribute value
identifies which row in the table the item is associated with, and thus what its processing time is
based on. This option is illustrated in the Simulate Multitasking Activity model on page 191.

Processing time for other activity blocks


The Workstation block works much like a Queue combined with an Activity block. It has most of
the same options (shown above) for setting the processing time as the Activity. (Because of its
internal queue, the Workstation does not have a D input connector.) The Convey Item and Transport blocks calculate an implicit processing time based on the settings for speed and length entered
in their dialogs. They are discussed in Transportation and material handling on page 192.

Discrete Event

Fixed processing time


Set the delay in the Activity dialog if the delay doesnt change and you know how long it is. For
example, if Machine A always takes 5 minutes to process parts, enter the value 5 as the processing
time in the Activitys dialog. This is most common in the early stages of model building when you
use constant parameters to get repeatable results.
Another method for having a fixed or constant processing time is to connect to the D input of the Activity block. For instance, you can connect
from a Constant block (Value library) or a Slider control, as shown at
right. If you use the Slider, you can manipulate it with each simulation
run, or within a simulation run, to see the effect of various processing
times.
Connecting to the Activitys D connector overrides any manual entry in
the Delay (D) field.

Scheduled processing time

Slider control used to


set Activitys processing
time

If a process takes a specific amount of time under most conditions, but


takes another amount of time if the conditions are different, you can schedule the processing time.
This is common when simulating worker performance, where output could be a factor of time.

Processing
Setting the processing time

175

Scheduled Time model


For example, assume that a worker normally takes 5 minutes to perform a task, but takes 5.25
minutes to do the task after doing it for 6 hours. To do this, connect a Lookup Table block (Value
library) to the D input of the Activity block as shown in the following model.

Scheduled Time model

Lookup Table blocks time units


Notice that the time unit for the Hours column in the Lookup Tables dialog is hours and that the
time the worker takes to perform the task (Task Time column) is in minutes. The time units for
the model are hours, so the first column must be in hours. However, since the output of the
Lookup Table block is connected to the D connector of the Activity block, the Task Time column
should be defined in the same time units (minutes) that are used for the Activitys Delay parameter.
For this model, at a particular hour of the day (Hour column) an activity will take a specified number of minutes to perform the task (Task Time column). Time unit consistency is discussed in
Choosing time units for the columns on page 117.

Random processing time


A common requirement for activities is to set a random processing or delay time. This is easily
accomplished by selecting a distribution in an Activity block.
Random Activity model
In the dialog of the Activity block, select the appropriate distribution, for example Normal, and
specify the value of the parameters, such as a mean of 2 and a standard deviation of 0.2. The pro-

Discrete Event

The Lookup Table block is set to Lookup the: time. Data that represents the workers day is
entered in the Hours column; the time to perform the task is entered in the Task Time column. As
indicated in the Lookup Tables dialog, a portion of which is cloned onto the model worksheet, the
time to perform the task changes at hour 6.

176

Processing
Setting the processing time

cessing time will then be normally distributed and the Activity block will process each item for
approximately 2 time units.

Random Activity model

For more information, see Constant values and random variables on page 57, Random numbers on page 684, and Probability distributions on page 686.

Discrete Event

Custom processing time


Attributes can be used to specify how long a specific item will be processed. This is a very powerful
feature since the Activity block can recognize each items processing time and behave accordingly.
Custom Time model
In the simplest case, set an items attribute value to the desired amount of processing time, then use
the Activity block to read the attribute value and process the item for that period of time.

Custom Time model

The Custom Time model uses the Set block to set


the value of an attribute called CheckTime to the
amount of time it takes to check the item. Items
that need a final check have a CheckTime attribute
value of 5, for instance, and items that ship
unchecked have an attribute value of 0. That value
(0 or 5) is provided by the Random Number block
(Value library) using an Empirical distribution
where 25% of the items have a value of 0 and 75%
have a value of 5.

Custom processing time

All items then go through the checking step, easily represented by an Activity block. In its dialog,
this block indicates that the Delay is: an items attribute value and the attribute is CheckTime.

Although items with a CheckTime value of 0 will not be processed by the Activity block, they may

be delayed in the Queue (which is set to FIFO order) while a preceding item undergoes checking.

Processing
Setting the processing time

177

Implied processing time


Some ExtendSim blocks allow you to specify distance, speed, or other factors that indirectly result
in a processing time. For example, the Convey Item block allows you to enter an item length and
the length (in feet or meters) and speed (in feet or meters per time unit) for an accumulating or
non-accumulating conveyor.
These settings in Convey Item and Transport blocks result in delay times for items. For example, if
you set the Transport to be 10 feet long with a speed of 1 foot per time unit, it will take 10 time
units for an item to travel to the next block.
For more information about using the Convey Item and Transport blocks, see Transportation and
material handling on page 192.

If the Metric distance units preference is selected in the Edit > Options dialog, length units in
these blocks are set by default to meters. Otherwise, their length units are in feet.

Cumulative processing time: time sharing

You can do this using an activity block, building the model such that the attribute value is
decreased by the amount of processing time. In this situation, each activity subtracts its processing
time from the attribute value, so that the value represents the remaining processing time. Use a Get
block after each activity to determine if the item was fully processed or not, and therefore whether
it should proceed to the next activity or be routed out of the line.
Time sharing occurs when an activity processes an item, sends it back to a queue for a short period,
then processes it again until the required processing time is completed. This is common for computer networks and telephone communication systems. In these systems, time is specified in small
fractions of a second, there are a lot of jobs that must be processed at the same time, and there are
only a limited number of processors to do the work. In time sharing, instead of each job being processed sequentially, all jobs are processed at what appears to be the same time. However, each job is
processed a small bit at a time, and a given job may have periods in between where nothing is happening to it. Since the time units are so small, the periods when there is no processing of a specific
job are typically not noticed, and each job appears to be processed continuously.

Discrete Event

The prior section discussed setting an items attribute to the time required by a specific activity.
You can also set its attribute value to the total processing time required, then route the item to a
series of activities, each of which performs one part of the processing, until the attribute value is
reduced to zero and the item is fully processed. This is common when there are several stations
with different processing times, any of which can process the item. Or when there is one machine
that processes each item for a specified time, then passes the item to another section for further
processing, and the item must be returned to the original machine for finishing.

178

Processing
Setting the processing time

Cumulative Time model


A simple time-sharing model has one activity that processes each job for a short period of time,
then sends the job back to the queue so it can be processed again, until the total required processing time for that job has elapsed.

Discrete Event

Cumulative Time model

In the model, items (jobs) are generated randomly and the Set block attaches a RemainingTime
attribute to each job generated. The Random Number block determines the initial value of that
attribute, 1, 2 or 3 milliseconds, which represents the total processing time required for each job.
The Activity block processes the job for a fixed time (1 millisecond). An Equation(I) block then
subtracts the amount of time spent processing (Process Time, or PT) from the RemainingTime
attribute.
Once the remaining processing time has been
calculated, the decision to route the item back to
the Queue or to the Exit is made in the Select
Item Out block. Jobs with a RemainingTime of Table in Select Item Out block
0 are routed through the top output and exit the
simulation; items that have 1 or more millisecond of processing time left are routed back to the Queue for further processing. Notice that the
table in the Select Item Out block (shown above) only indicates explicitly what happens if the
remaining time is 0 or 1. However, the blocks dialog is set to Invalid Select value: chooses bottom
output. With these settings, an item with a RemainingTime value of 0 will exit the top output. If
the value is 1 the item will exit the bottom output. And any value other than 0 or 1 will also exit
from the bottom output.

The time units for this model are integers representing milliseconds, because the Select blocks

expect integer values for comparison and will truncate non-integer values. (For example, the value
0.003 would be truncated to a zero.) When using non-integer values for the processing time, convert the attribute values to integers before they go to the Select Item Out block. You can do this
with a Lookup Table block (Value library).

Adding setup time


Every process is not 100% efficient. For instance, it is common in manufacturing for a machine to
be reconfigured when the type of item it is processing changes. This reconfiguration usually takes
additional time beyond the normal processing time. In the example below, the processing time
(and the part type) is determined by the attribute values, similar to what was shown in Custom
processing time on page 176. However, this model requires an additional setup time whenever
the type of item changes.

Setup time can add significant delay to the processing of items. For an example showing how to
minimize setup time, see Minimizing setup on page 140.

Processing
Bringing an activity on-line

179

Setup Time 1 model


In the Setup Time 1 model, a Process attribute is assigned to each item. The attribute value represents how long items should be processed for either 1, 3, or 5 minutes, depending on probabilities entered in the Random Number block (Value library). The delta) output connector on the
right of the Get block signals when the value of the Process attribute has changed, indicating that
the current item is of a different type than the previous item. This information is used to add a
setup time to that items processing time, resulting in a longer total delay time for the first item of
a new type, each time the type changes.

The delta) connector outputs 0 (for False) as long as the value of the Process attribute stays the
same and outputs 1 (for True) when the attribute value changes, indicating the arrival of a new
type of item. The Constant block (Value library) specifies a setup time of 3 minutes. As long as the
attribute value does not change, the Constant block is multiplied by 0, adding nothing to the normal processing time. When the attribute value changes, the Constant value is multiplied by 1, and
the 3 minute setup time is added to the value of the Process attribute to determine the processing
time for that new item. You can see this if you run the simulation the processing time is cloned
onto the worksheet and will be 1, 3, or 5 minutes for most items but 4, 6, or 8 minutes for the first
item that is of a new type.
Notice that each item still has its original attribute value. You do not change the attribute value in
this model, it is only used to determine whether the item type has changed and thus whether the
item requires a setup time. The processing time (whether equal to the attribute value or equal to
the attribute value plus the setup time) is input at the D connector. The Activity block processes
based on the value at the D connector, not directly based on the attribute value.

While the model above shows the mathematics explicitly, the Equation block (Value library) can
also be used to specify the setup time. This is illustrated in the model Setup Time 2.

Bringing an activity on-line


As discussed in the following sections, many systems, activities, or operations can be brought on
and off-line based on a schedule or on the current conditions of the system.

The models discussed in this section can be found in the Examples\Discrete Event\Process-

ing\Bring On-Line folder. The Shift block is discussed starting on page 224 and models using the
Shift block are located in the folder Examples\Discrete Event\Resources.

Scheduling activities
Activities dont always occur randomly; they can be scheduled. This is common when you bring an
activity on-line based on the time of day. This could be represented by a schedule in the Create

Discrete Event

Setup Time 1 model

180

Processing
Bringing an activity on-line

(Item library) or Lookup Table (Value library) block connected to and controlling a Gate block
(Item library), by using a Create block to schedule the capacity of an Activity, or by using a Shift
block to control an Activity. As seen below, the Scheduling Activities 1 model uses a Gate block
and the Scheduling Activities 2 model schedules an Activitys capacity. Shift blocks are discussed in
The Shift block on page 224.

So that you can compare both the Scheduling Activities 1 and Scheduling Activities 2 models, they
have the same random seed, as seen in their Run > Simulation Setup > Random Number tabs.

Discrete Event

Scheduling Activities 1 model


The following example shows how to schedule the availability of a portion of an operation using a
Gate block. The Scheduling Activities 1 model represents a diner that opens at 10 AM and closes
eight hours later. Customers arrive exponentially throughout the day, with most customers arriving
during the lunch period, which is from 11 AM until 2 PM (from hour 1 to hour 4). There is 1
dining section that can service 5 people at a time throughout the day. A second dining section that
can also service 5 people at a time is available only for the lunch shift.

Scheduling Activities 1 model

The scheduling of random customer arrivals is accomplished by


entering values in a Lookup Table block (Value library), set to
Lookup the: time. The output of the Lookup Table block is
connected to the mean input of a Create block, which generates
customers exponentially. As seen in the table to the right, the
Lookup Table outputs a smaller value from time 1 to time 4.
The output represents the average time between arrivals, so
arrivals will occur more frequently from time 1 to time 4.

Customer arrivals

Opening the second dining section is accomplished by connecting a Create block to a Gate block,
allowing customers access only during certain hours.
The Gate block is set to set to Mode: conditional gating with values, so that it only allows items
through when its demand connector is activated by a value. This is accomplished by connecting a
value connector, such as the one on the Create block when it is in Create values by schedule mode,
to the demand connector. As long as the value connector is true (outputs 1), the Gate stays open;
when the value is 0, for false, it closes. Running the model with animation on shows that, even
though the queue length is increasing, the Gate shuts down after three hours.

Processing
Controlling the flow of items to an activity

181

Scheduling Activities 2 model


As an alternative to the preceding example, you could have used the C connector on the Activity
block to control its capacity, simulating the opening of the second dining section.

Scheduling Activities 2 model

Shift block used to schedule


Yet another approach to scheduling an Activity would be to use a Shift block to control it. For
instance, the Shift block could contain the same information as the Create block that is connected
to the C input on the Activity in the Scheduling Activities 2 model, above.
For more information, see the section titled The Shift block on page 224.

Controlling the flow of items to an activity


As discussed in Scheduling activities on page 179 you can have an activity start based on the time
of day. Some methods of adding an additional activity to a model can cause the new activity to
cycle on and off frequently. You may not want this to occur, as it can result in higher start up costs,
increased machine wear and scrap production, and excess energy consumption. Instead, you can
add some hysteresis and have the activity stay on to process a number of items, or stay on for a
period of time.
When bringing a system on-line, there are two main ways to control the flow of items to an activity:
Specify the number of items that will be processed
Specify the amount of time the activity will be on-line

You can view and report the item contents of Activity blocks at any time. Please see Item Contents
of queues and activities on page 698.

Fixed number of items


Instead of having a system cycle on and off, you may want to keep the optional activity running.
For instance, you can keep a machine on to process a particular number of items, even if the waiting line for the other machines is below the threshold that originally activated it. This reduces the
number of times the machine turns on and off.

Discrete Event

Each dining section has the capacity to serve five customers at once. By doubling the capacity of
one Activity block during the period between 11 AM and 2 PM you can model both dining sections being open. This is accomplished by connecting the value output of a Create block, set to
Create values by schedule, to the C input on the Activity. In the model, the portion of the Create
block that controls the capacity of the Activity is cloned onto the model worksheet.

182

Processing
Controlling the flow of items to an activity

Discrete Event

Fixed Items model


To keep an activity running until it has processed a fixed number of items, add a Create block
between the Decision and Gate blocks to the model discussed in Conditional routing on
page 162. (The Conditional Routing model is located in the Examples\Discrete Event\Routing
folder.) The resulting model is named Fixed Items, and is shown here.

Fixed Items model

In this model, the optional machine will be brought


online if/when the queue exceeds five items. The Y
output of the Decision block (Value library) is connected to the start connector of a Create block, which
is set to Create items by schedule; the schedule is
shown at right. The Decision block outputs a true
value (1) at Y if the queue length is 5. When that happens, the Create block (Control the Gate) starts its
schedule and puts out a single item with a quantity of
10 to the demand input on the Gate block. This causes
the Gate to stay open until 10 items pass through the
block.
There are two items of special note in this model: how
the start and demand connectors are activated.

Activating demand with an item

Since the Create blocks start connector is connected, and since the block is in Create items by
schedule mode, the blocks schedule runs in relative simulation time (begins its schedule relative
to when start is activated), as explained in the section The Start connector on page 118. Once
start is activated (gets an value 0.5) it causes the entire schedule to happen; messages from the
Decision block to the start connector are ignored until the schedule is complete. The second line
of the schedule means that the Create block will also ignore any start messages for 5 time units
after the schedule has been completed. This provides hysteresis and allows the machine to process items (and hopefully reduce the buffer length) before the sequence is activated again. If the
schedule did not include this pause, the Activity block could be activated constantly.
The demand connector is activated when it gets an item, causing the Gate to open and allow
items through. The number of items allowed through before the Gate closes is determined by

Processing
Interrupting processing

183

the quantity of the item at demand. For instance, each item with a quantity of 10 creates a
demand for 10 items before the Gate will close.

Fixed period of time


You may want to keep the optional machine on for a particular length of time instead of for a certain number of items.
Fixed Time model
To do this, use the Create block, set to Create values by schedule, to output values to the demand
connector on the Gate block.

Discrete Event

Fixed Time model

In the table in the Create blocks dialog, the first line


has 0 for the output time and a value of 1. The second
line has the time you want to turn off the optional
machine, and a 0 for the value. For example, to keep
the optional machine on for five minutes, you enter
the values as shown at right.
Once start is activated, the demand connector will
receive a value of 1 (True). After 5 time units have
passed, the value at demand will change to 0 (False).
Because you are connecting a value output to demand,
the Gate block will stay activated as long as the value
the demand connector receives is greater than or equal
to 0.5, which in this example is for 5 time units.

Interrupting processing

Activating demand with a value

In discrete processes, it is common for interruptions to occur. This could happen for any number
of reasons, such as the arrival of an item that has a higher priority for processing, random machine
failures, planned shutdowns, the occurrence of a higher priority event, and so forth. Interruptions
are of two kinds, preemption and shutdown.
Preemption occurs when an Activity block is told to prematurely end one or more items processing. When this occurs, the Activity immediately sends the preempted items out of the block
through an alternate item output connector.

184

Processing
Interrupting processing

Shutdown occurs when processing is suspended for one or more items currently in an Activity
block. Items that have been shut down may or may not have their processing completed when
the shutdown ends. In any case, they are either discarded or leave through the normal item output connector.
The Activity block has a Preempt tab for specifying what to do when there is preemption and a
Shutdown tab for controlling what happens when the block gets a message to shutdown. The
Convey Item block can be shutdown by reducing its speed to zero. The Shutdown block is most
commonly used for shutting down an activity.

Preemption and shutdown are discussed in the following two sections. The models for those sections are located in Examples\Discrete Event\Processing\Preemption and Shutdown folder.

Preemption

Discrete Event

Preemption occurs when a signal is received at an Activity block's PE (preempt) input, prematurely
ending an item's processing by forcing it to leave through an alternate output.
In the Preempt tab you can specify that preemption occurs only if the block is already processing
its maximum number of items and that the preempted item's remaining processing time be stored
as an attribute for subsequent processing. Once preempted, the items processing can be finished
by another Activity, finished later by the original block, or never finished at all, depending on how
the item is routed in the model.
PE input connector
Once preemption is enabled in the Preempt tab, the PE (preempt) universal input connector and
an alternate item output connector appear on the Activitys icon. The connection to the PE connector can either be a value input or an item input, depending on what is selected in the Preempt
tab. The type of connection to the PE input determines how preemption is controlled:
Value connection. Based on which of the first four preemption options (discussed below) is chosen, the selected item or items will be preempted whenever a true (0.5 or greater) value is
received at the PE input.
Item connection. When a preemption item arrives at the PE connector, the Activity looks up
the specified attribute value on the preemption item. The Activity then searches all items currently in processing, and any of those items with an attribute value equal to the one on the preemption item will be required to leave the block. In addition, the Activity block has an option to
transfer attributes from the preemption item to the preempted items.
Preemption options
As discussed above, preemption occurs when a signal is received at an Activity blocks PE (preempt) input. Settings in the blocks Preempt tab determine which item or items must leave.
Depending on whether the preempt signal is sent by a value or an item connector, the preemption
options are:
The item that is closest to finishing
The item that is furthest from finishing
The item with the lowest priority
All items currently being processed
Only items with a particular attribute value

Processing
Interrupting processing

185

The first four options are only available when a value connection is made to PE; the last option is
only available, and is the only choice, if an item output is connected to PE.
Preempting model
For instance, an Activity and Queue (set to Sort by: priority) can be used in conjunction with a
Decision block (Value library) in such a way that lower priority items being processed may be preempted to make room for higher priority items as they arrive at the Queue. Note that it is not
guaranteed that a lower priority item will be preempted. If Preempt only if block is full is
checked, items will be preempted only if the Activity block is full.
In the Preempting model, the Queue reports the priority of the item that is about to leave and the
Activity reports its lowest priority item; this information is sent to the Decision block. If it is determined that there is a higher priority item in the Queue than is being processed by the Activity, a
True signal (a value greater than 0.5) is sent to the Activitys PE input. Notice that the Activitys
dialog is set to When signal is received at PE input, preempt... the item with the lowest priority
and to Preempt only if block is full.

Discrete Event

Preempting model

Unless they are preempted, items arriving to the Activity block are processed for the time indicated
in the blocks dialog. In blocks Preempt tab, Store remaining time in attribute: remainingTime
is selected. If an item is preempted, the Activity attaches the remaining processing time to the item
as an attribute named remainingTime. Since the Activity also has Use this attribute as delay
checked, when the preempted item returns to the Activity block it will process only for the time
indicated by the remainingTime attribute.

Shutting down
Employee breaks, equipment maintenance, inventory-taking closings, and tool failures all involve
interruptions in activities for a period of time called downtime. If interruptions are significant,
models should include provisions for shutting down activities to avoid overly optimistic predictions.
Shutdowns involve a temporary or permanent halting to the processing of items currently in the
Activity block. The blocks Shutdown tab has settings to determine which items should have their
processing shut down, how long to interrupt the processing, and what to do with the items in an
Activity when the shutdown occurs.
You can shut down activities at a scheduled time, such as for vacations or machine maintenance, or
it can be a random occurrence, such as for equipment failures or emergency leaves. Activities can
also be shut down based on some factor in the model, for instance when a downstream Queue is
full. Like shutdown occurrences, the duration of the downtime can be a constant value or a ran-

186

Processing
Interrupting processing

dom number. A shutdown can also be used to block the entry of additional items while the shutdown is in effect.
SD input connector
Once shutdown is enabled in the Shutdown tab, the SD universal input connector appears on the
Activitys icon. It is common to connect from a Create or Shutdown block to the SD input but
connections can be made from other blocks as well. The input to the SD connector can either be a
value connection or an item connection, depending on what is selected in the Shutdown tab. The
type of connection to the SD input determines both which items are shut down and for how long:

Discrete Event

Value connection. This acts like an on/off signal. The entire block will be shutdown whenever a
true (0.5 or greater) value is received at the SD input. This suspends the processing of all items
in the block and stops new items from entering it. The Activity will stay shut down until the SD
input gets a false (less than 0.5) value.
Item connection. When a shutdown item arrives at the SD connector, the Activity will shut
down the item or items currently being processed, as specified by the shutdown options discussed below. The duration of the shutdown is determined by an items attribute or quantity as
specified in the Shutdown tab; the value of that property on the shutdown item determines how
long the shutdown will be in effect.
The Create block is used to schedule the shutdown for the Scheduled Shutdown model on
page 187; the Shutdown block provides random shutdowns for random durations for the Random Shutdown model on page 189.
Shutdown options
As discussed above, shutdown occurs when a signal is received at an Activity blocks SD (shutdown) input. Settings in the blocks Shutdown tab determine which items currently in processing
will be shut down. Depending on whether the shutdown signal is sent by a value or an item connector, the shutdown options are:
All items currently in processing
A randomly chosen item
Items whose attribute matches the attribute at SD
Entire block
The first three choices are only available if an item connector is connected to SD; Entire block is
only available, and is the only option, if a value output is connected to SD. If Items whose attribute matches the attribute at SD is selected, the Activity looks up the specified attribute value on
the shutdown item. The Activity then searches all items currently in processing, and any of those
items with an attribute value equal to the one on the shutdown item will be shutdown.
Item options
Once a shutdown is in affect, the shutdown items are handled in one of four ways, as specified in
the Shutdown tab of the Activitys dialog:
The item can be discarded, such as when food is spoiled by the machine going down.
The Activity can resume processing the item after the shutdown ends.
An Activity can restart processing the item after the shutdown ends.
The Activity can finish processing the item prior to shutting down, such as when the shutdown
is part of scheduled maintenance and can wait until the item is finished.

Processing
Interrupting processing

187

Items that are not discarded leave through the Activitys normal item output.
SD output connector
The Activity blocks variable output connection contains an SD connector that can be used to relay
shutdown status. Depending on how the Activity has been configured, this connector either outputs a 1 (one) while the Activity is down and a 0 (zero) when it is up, or it outputs the number of
items that are currently shutdown. If a value connection has been made to the SD input, the SD
output connector is set to 1 or 0; if an item connection has been made to the SD input, the SD
output connector reports the number of items currently shutdown.
Scheduled Shutdown model
The Create block is often used to schedule an Activity to shut down. For example, the Scheduled
Shutdown model schedules downtime for a machine by connecting a Create blocks item output to
the SD input on an Activity.

Discrete Event

Scheduled Shutdown model

The Shutdown Schedule from the Create blocks Shutdown tab is cloned onto
the model worksheet and shown at right.
It indicates that two items will be created,
Schedule in Create block
one at time 2 and one at time 7. Each
item has a downTime attribute as seen at
the top of the fourth column; the attributes value is 2.5 for the first item and 1 for the second
item. In the Create blocks dialog, this maintenance schedule has been set to repeat every 10 time
units.
The Activity block is set to
process one item at a time. Its
Shutdown tab, shown at
right, indicates that all items
currently in processing will be
shutdown when a shutdown
item is received at SD,
downTime is the name of the
attribute that determines the
duration of the shutdown
event, and the block will keep

items, resume process after


shutdown.

Settings in Activity block

188

Processing
Interrupting processing

With this information and the settings in the Activitys Shutdown tab, processing will shut down

for any item that is already in the Activity at time 2 and that item will not resume processing until
time 4.5. Likewise, any item in the Activity at time 7 will be shut down and not resume processing
until time 8, and so forth.
When shutdown is triggered by an item connection to SD, the selected items being processed by
the Activity block will be shut down at the time and for the duration specified. However, because
the block supports parallel processing, if items arrive to the block after the shutdown has been triggered, those items will be processed normally. For complete shutdown of the block, use a value
connection instead of an item connection.
When the model is run, the plotter will show both the number of items processed (obtained from
the Exit block) and the timing and duration of the shutdowns (obtained from the SD output on
the Activity.) The SD output gives a value of 1 while an item is shutdown and a value of 0 while it
is not.

Discrete Event

The Shutdown block


The Shutdown block provides for dependent or independent failure policies and can be used to
model the failure or scheduled downtime for a single or multiple components.
A shutdown event can either be random (e.g. a failure) or intentional (e.g. scheduled maintenance). The Shutdown block manages both types of events and broadcasts the overall down status
as either a value or item signal. Typically these signals are used to directly control either the Activity (Item library) or the Valve (Rate library).
Random failures are modeled on the Shutdown blocks first tab where distributions can be
selected for the Time-Between-Failure (TBF) and Time-To-Repair (TTR).
Scheduled shutdowns are modeled either by connecting to the Shutdowns sched input or by
going to the blocks Options tab and linking the Shutdown block to a Shift block. Note that
there are policy options allowing the modeler to specify the impact an intentional down event
will have on random downs. For example, when a maintenance event is scheduled, should progress towards the next failure event be reset?
Whether random or scheduled, there are two types of down signals:
Value down signals by default are 1 for down and 0 for up. However, on the Shutdowns first
tab you can control what the up and down values should be. For example, if the Shutdown
block is connected to the R connector on the Valve block, it would make more sense to have
the down = 0 in order to close the Valve during a down state.
An item down signal is generated by the Shutdown block once for every shutdown event. Each
item has two attributes that indicate to the Activity which items to shut down and for how long.
Typically, this option is used when you want to target specific items to shut down inside the
Activity.
When a database table is used to specify TBF and TTR distributions, one Shutdown block can be
used to model any number of component failures. The components (and their respective fail
behaviors) that are modeled in one particular Shutdown block are typically related in some way.
For example, you would want to use one Shutdown block to model the failure of a bicycles tires,
chain and brakes because all three components are only wearing out while the bike is being ridden,
and if one component fails, the wearing on the other two stops. It would be unnecessarily difficult
to model the correct reliability behavior of this bicycle with three separate Shutdown blocks.

For more detail, click the Help button in the lower left of the Shutdown blocks dialog.

Processing
Interrupting processing

189

Random Shutdown model


While the Scheduled Shutdown model on page 187 used a Create block to schedule when an
Activity would be down, the Random Shutdown model uses the Shutdown block to halt processing on a random basis for a random amount of time. It does this by connecting the Shutdown
block to an Activity blocks SD input.

Random Shutdown model

Send a value to signal shutdown


Output a Down value: 1 and an Up value: 0
Use an Exponential distribution with a Mean: 9 for the Set time between failures (TBF)
parameter
Use a Triangular distribution with the settings Minimum: 1, Maximum: 3, and Mostly likely:
2 for the Set time to repair (TTR) parameter.
With these settings both the TBF and TTR are random. A true signal (a value of 1) from the Shutdown block will cause the Activity block to shut down the entire block, halting all items currently
in processing and blocking any new items from entering. It is only when the signal switches from
true to false (a value of 0) that the block will resume processing. In this case, the Activity will
remain down for approximately 2 hours before coming back online.
Model-related shutdown
The Scheduled Shutdown and Random Shutdown examples presented earlier showed how to shut
down a process in isolation from other events in the model. You can also shut down activities based
on model factors such as the length of a waiting line or whether another activity is in process.

Discrete Event

In this model the dialog of the Shutdown block is set to:

190

Processing
Multitasking

Explicit Shutdown model


The Explicit Shutdown model represents a buffer downstream from a machine that reaches a limit.
So that the queue length will control shutdown events, the F connector from the Queue block is
connected to the SD input connector on the Activity block.

Discrete Event

Explicit Shutdown model

For this model the Queues limit is specified in its dialog; whenever the Queue is full, the F connector outputs 1. The Activitys Shutdown tab indicates that the SD (shutdown) is: value input
connection and that therefore the Activity stays down until SD value < 0.5. This causes the
Activity to stay shut down for as long as the Queue is full.
This is an example of how to have downstream factors affect upstream activities. If you examine
the model closely, you see that the last machine is processing so slowly that Queue 3 quickly
reaches its limit of 5 items. Since a Queue cannot take in any more items while it is full, the middle
Activity is blocked (cannot process a new item until an item is removed from Queue 3). However,
the first Activity continues to process items, filling Queue 2. By explicitly shutting down the first
Activity, you affect where items are stockpiled and which Activities are shut down when one of
them is blocked.

Please also see The Shift block on page 224 for examples of activity and resource allocation that
are tied together and scheduled as Shifts.

Multitasking
The Activity block has a checkbox in its Process tab that
allows the block to simulate multitasking. Choosing
this option means that the blocks available time to process items (its Delay time) must be divided between
each of the items in the block. This causes each item to
take longer to finish processing and leave. Examples of
multitasking include computer processors or a person
who is working on multiple tasks at the same time.

Choosing multitasking in an Activity

With multitasking, if only one item is in the block the actual processing time will be exactly the
same as the original delay time specified by the block. If two items are in the block, each item will
take twice as long as the original specified processing time. If three items are in the block, their
processing times will be multiplied by three, and so forth. This is equivalent to situations where a
single server or operator has to divide their available time between multiple customers or tasks.
The changes to the processing time occur dynamically as items enter and leave the block. When
new items enter the Activity, the remaining delay times for all of the items in the block will become
progressively longer. As processed items leave the block, the delays for the remaining items will
become shorter.

Processing
Kanban system

191

Simulate Multitasking Activity model


In this example model, there are three kinds of jobs that are being processed on a computer. The
computer must share its time between all the jobs it is simultaneously working on.

Discrete Event

Simulate Multitasking Activity model

The Simulating Multitasking Activity creates a random number of each type of job (small medium
and large), as determined by probabilities entered in the Random Number block (Value library).
Each job has a Job Size attribute with the string value small, medium, or large. The jobs processing
time is defined by a distribution and entries in a table in the dialog of the Activity block, which is
set to Delay is: from a lookup table. (For a description of this setting, see Processing time for an
Activity on page 173.)
Running the model shows that the moving average processing time increases as the number of
items in the Activity increases.

Changing the capacity of the Activity changes the number of items allowed in the block, but it

does not change the calculation for the delay time. Thus, if Simulate multitasking activity is
enabled, increasing the capacity will not necessarily increase the throughput rate of the Activity
block.

Kanban system
A kanban just-in-time (JIT) inventory system limits the amount of inventory between processing
stations with a controlling kanban card. In this type of system, a station is only authorized for
processing if a kanban for that part is available. When processing is complete, the kanban moves
with the part to the next station. As the next station consumes parts, it returns the kanbans to the
previous station to authorize additional processing.

192

Processing
Transportation and material handling

Discrete Event

Kanban model
A Kanban system is modeled in ExtendSim by monitoring the queues between machines and having that information regulate processing. To do this, set the Queue block capacity to the number
of kanbans and connect the F (full) output from the block back to the preceding Activitys SD
(shutdown) output connector. When the queue has remaining capacity, its F connector will output
0 (zero) and the preceding Activity block will be authorized to produce parts. If the Queue block is
full, its F connector will output 1 and the preceding machine will be shut down until the queue
length is reduced.

Kanban model

If you run this model with animation on, the Activity blocks will be struck through in red while
they are shut down.

Transportation and material handling


The following Item library blocks are used to represent transportation and material handling:
Transport
Convey Item
Resource Item
The Convey Item and Transport blocks represent ovens, conveyors, and so forth to provide fixedpath routes with a specified travel time for items. The Resource Item and Transport blocks are used
with the Batch and Unbatch blocks to simulate AGVs and other independently moving vehicles.

The models discussed in this section can be found in the Examples\Discrete Event\Processing\Material Handling and Transportation folder.

Travel time
In a discrete event model, items move from block to block as dictated by the connections. These
connections indicate the direction of movement, but they dont provide any delay for the items. If
travel time is significant, it is common to either:
Increase the delay time of destination blocks to compensate for the travel time.
Specify a minimum wait time in a Queue blocks Options tab to simulate travel time.
Set an explicit travel time in a Convey Item or Transport block, as shown below.

Processing
Transportation and material handling

193

Transport blocks
Transport blocks (Item library) move items from the
start of a path to the end based on distance and
speed information. When the model is animated,
these blocks can display multiple items travelling a
certain distance simultaneously. There is also an
option to specify that items cannot pass each other.

While you can choose either feet or meters as the dis-

Transport block: Behavior tab

tance unit in the blocks dialog, the default is feet. If


Metric distance units has been selected in the Edit > Options command, the default will be
meters.
Travel time options
The blocks Behavior tab has options that specify how to calculate travel time the time it will take
an item to travel from the starting point to the ending point. Travel time can be based on:

Speed and distance. How fast the item is traveling, and how far the item must travel to reach its
destination, are entered in the fields in the Behavior tab or received at input connectors. The calculated move time is displayed in the dialog. This option is most often used if the transportation
pathway is centered around the block.
Speed and calculated distance. The items speed is entered in the Item speed field or received at
an input connector. The distance is determined from information entered in the frame labeled
Select From and To locations for calculated distance, as discussed below. This travel time
option is most commonly used for 3D animation when you want the location of the transportation pathway to be independent from the block.

If Speed and calculated distance is selected, the starting and ending locations (which determine the distance) must be defined in the tab.

Calculated distance
If Speed and calculated
distance has been selected
as the travel time, a frame
appears at the bottom of
the dialog for entering the
distance information. If
the from and/or to locations are set to anything
other than Entered X and
Y location, the relative
positions of the blocks in Frame for entering information to be used to determine the distance
the model, and their connections, determine the distance.
The factors considered in the calculation are: the from location, the to location, how the distance is calculated, and the distance ratio.

Discrete Event

Move time. Each item will take the amount of simulation time that is entered in the Move time
field or received at the D input connector. This acts just like a delay in an Activity block; length
and speed are ignored.

194

Processing
Transportation and material handling

From location options


Previous non-passing block (the default)
Entered X and Y location
Block location
Enclosing hierarchical block
Previous block
(See explanations following the To location options.)

To location options
Next non-passing block (the default)
Entered X and Y location
Block location
Enclosing hierarchical block for next block

Discrete Event

Next block
Note: In the Item library non-passing blocks are either residence or decision types of blocks, as
described in Types of item handling blocks on page 98. If Entered X and Y location is
selected, the numbers can either be entered in the dialog or defined by the location of block in
the model; remember that the 3D coordinates are expressed in meters. The block location
option means the current block; this choice is especially helpful when the from location is a previous block (non-passing or not).

If the selected from and/or to locations are blocks, the distance starts at the from blocks output
connector and ends at the to blocks input connector.
Calculate distance options
The popup menu provides two methods for calculating the distance from the
start to the end of the path:
Along the connections between the from and the to locations
In a straight line between the from and the to locations
More options are available if the E3D window is open and you
have created custom paths for 3D animation. In this case, the
Button on Transport Animation tab
paths will appear at the bottom of the popup menu as shown.
The blocks Transport Animation tab has a button, shown at
right, that will calculate the length of the currently selected custom 3D path. It then puts that
length into the distance parameter field on the blocks Behavior tab.
Notice that the shape of the conveyor will not visually change with these choices, but the information is included in the calculation of the conveyors length. For instance, if there is a series of rightangle connections between the from and the to locations, the conveyors length will be longer than
if the straight line option had been selected.
Distance ratio option
This popup menu is for specifying the ratio between pixels in the 2D model and meters in the
E3D window. It will control how the distances defined in the Behavior tab affect 2D or 3D animation. The choices are:

Processing
Transportation and material handling

195

Use speed and distance directly. Specifies a ratio of 1 pixel to 1 meter.


Use 3D distance ratio. Uses the distance ratio defined in the Run > Simulation Setup > 3D tab;
the default is 20 pixels per meter.
Use distance ratio of: This is for entering the ratio directly. A value of x means a ratio of x
pixels to x meters or feet.

These options are explained more in the comprehensive example discussed in How the length is
calculated on page 196.

Convey Item blocks

Convey Item block: Behavior tab

The Convey Item block can


be:
Accumulating. If the blocks ability to pass items through exceeds downstream demand,
any items delayed from exiting will begin piling up at the outflow end of the block, up to
the Capacity setting.
Non-accumulating. If downstream demand exceeds the blocks ability to pass items
through, the conveyor will stop until the item at the end moves into the next block.
Instead of the Transport blocks reference to the distance from one point to another, the Convey
Item block is concerned with its length.
If Travel time: move time is selected, a length entry is also required. In combination with the
item length (discussed below), the conveyors length determines how quickly items can move
onto the conveyor.
The length of the items that pass through this block must be defined. They can be defined as:
A constant
From an attribute
Based on length and capacity. (For instance, if the conveyors capacity is 1,000 units and its
length is 50 units, the length of each item will be 50/1000, or 0.05 units.)
Item length does not visually change the item picture or object but it is included in calculations
for accumulation, capacity, and the timing of when items are pulled onto and released from the
block.

Discrete Event

The Convey Item block (Item


library) moves items along a
conveyor, oven, cooling unit,
moving walkway, or any other
type of moving path. The items
travel along the length of the
conveyor, from its start to its
end. The Behavior tab is similar
to that for a Transport block,
discussed above. The differences are:

196

Processing
Transportation and material handling

How the length is calculated


When Travel time: speed and calculated length is selected in a Convey Item block, the relative
positions of blocks in the model, and their connections, determine the paths length. The following
example explains how the length is determined.
The bottom potion of the
Behavior tab for a Convey
Item block is seen at right. In
this frame:
The 2D From x location is
211 pixels (the position of
the previous non-passing
block) and the To x location is 344 pixels (the position of the next non-passing
block).

Length calculations for Convey Item block

Discrete Event

By default, the length is calculated in a straight line between the from location and the to location. (The alternative is to calculate the distance along the connections.) The shape of the
blocks object will not visually change with either choice, but the choice affects the determination of the paths distance. For instance, if there were a series of right-angle connections between
the from and the to locations, and along connections was selected, the distance would be longer
than if the straight line option had been selected.
The Distance ratio (pixels per meter) is based on the 3D
distance ratio set in the command Run > Simulation
Setup > 3D Animation tab. The default is 20 pixels per
meter, as shown at right.
In addition, the blocks Block Animation tab is set by default
to stretch the object to the conveyors length. This will cause
the Conveyor object in the E3D window to automatically
resize to reflect the calculated length.

Distance conversion ratio

Setting in Block Animation tab

How the settings affect the length


The distance between the previous non-passing block (the from location) and the next non-passing block (the to location) is calculated in a straight line between the output connector of the from
block and the input connector of the to block. This is 133 pixels (344 pixels - 211 pixels).
The distance ratio of 20 pixels per meter is used to convert the 133 pixels into meters. The result is
the length of the conveyor: 6.65 meters. as can be seen in the blocks Behavior tab. (This is also
reflected in the 3D information, where the From x location is 10.55 meters and the To x location
is 17.2 meters, a difference of 6.65 meters.)

If the from and/or to locations are blocks, the determination of the length starts at one blocks
output connector and ends at the other blocks input connector.
Moving this Convey Item block along the connection line between the from and the to blocks will
not have any affect on the conveyor length. This is because the distance between the from and to
locations stays the same. However, moving the from block away from the Convey Item will change
the length of the conveyor. This is because the Next non-passing block is now further away from
the Previous non-passing block.

Processing
Transportation and material handling

197

For information about how these blocks are used for 3D animation, see Adding 3D behavior to an
existing model on page 464 and Animating a bank line on page 474.

Transportation models
The following models use Convey Item, Resource Item, and Transport blocks to simulate item
movement along fixed paths and material handling using AGVs.
Transportation 1 model
To model vehicles such as AGVs in ExtendSim, use a Resource Item block to provide items that
represent the vehicles, a Batch block to attach the vehicle with whatever it is transporting, one or
more Transport blocks to provide the transportation delay, and an Unbatch block to separate the
vehicle from its load at the end of the route.

Discrete Event

Transportation 1 model

The Transportation 1 model shows how two parts are assembled, inserted into a computer, then
moved to a loading dock. Part A is moved by a Convey Item block to the assembly machine while
Part B is moved there by a Transport block. The two parts are joined by a Batch block for processing. After assembly, they move by a Transport block to the machine that will put them into the
computer. Since the computer is heavy, it is moved to the final assembly machine by a Transport
block that represents a small crane.
To simulate movement, AGVs from a Resource Item block are batched to the parts/items and then
moved via the Transport block. If the AGV is released at the end of each route, as it is in the model
above, the part is left behind where it can then be processed before moving on to another section
of the model. To model a situation where the Resource Item transports the item to an activity, then
waits there to continue transporting the item again, dont release the Resource Item until the last
stop in the route.
Transportation 2 model
In the Transportation 1 model there is no time associated with the return of the AGVs to the Resource Item
block. To model how long the return path takes, insert
Transport blocks after the Unbatch blocks and enter a
distance and speed for the AGV return trip. This is
shown in the model segment shown at right.
Adding time for AGVs to return

Discrete Event

198

Processing
Transportation and material handling

Discrete Event Modeling

Batching and Unbatching


Joining items or separating them

200

Batching and Unbatching


Blocks of interest

In a discrete event model, items pass through the system and something is done to or with them.
The process often involves temporarily or permanently joining, or batching, resources or other
items with the original item. For instance, in a manufacturing plant, precursors of the final products come into the process as raw materials, subassemblies, and packaging that are joined in various combinations. During the manufacturing process they are often batched with other precursors
and require additional resources such as pallets and workers for processing. These batched items
move through the process together.
These same concepts apply to other discrete processes. For example, in an emergency room model,
doctors are temporarily batched with their patients during medical diagnosis. In the same model, a
technician, a diagnostic machine, and a patient would be batched for the duration of x-ray treatment. In a communication system, multiple packets might be batched together to create a single
message. For a retail store model, customers could be shown arriving and selecting merchandise,
then be temporarily batched with a sales person to make the purchase.
This chapter discusses:

Discrete Event

Blocks for batching and unbatching


How to batch and unbatch items
Dealing with item properties when items are batched or unbatched
Delaying the batching of items until all requirements are present

Preserving unique item properties as items are batched and unbatched


The models discussed in this chapter can be found in the folder \Examples\Discrete Event\Batching.

Blocks of interest
The following blocks will be the main focus of this chapter. The blocks library and category
appear in parentheses after the block name.
Batch (Item > Batching)
Joins multiple items into a single item for use in the model. This causes the original input
items to be destroyed and replaced by one output item. A batched item may be unbatched
at a later point in the model, but that is not required.
Unbatch (Item > Batching)
Outputs multiple items for each input item. Depending on selections in the dialog, this
block can separate items that were previously batched or make duplicates of items that were
never batched.

Batching
Batching allows multiple items from different sources to be joined as one new item for simulation
purposes (processing, routing, and so on). The Batch block accumulates items from each source up
to a specified count, then releases a single item that represents the batch. In this process, the original input items are destroyed and replaced by one new output item.

Items may have properties, such as attributes, before they are batched. To specify what will happen
to the properties of items that have been replaced by a new batch item, see Properties when items
are unbatched on page 210.

Batching and Unbatching


Batching

201

The number of items required for a batch is called the batch size. In some situations you know in
advance how many of each item is required to make one item; in other situations the number of
items batched depends on model factors and changes dynamically.
Items can be permanently batched together as one new item that flows through and exits the
model, or they can be temporarily joined for some specific purpose and unbatched at a later point
in the process. For example, two manuals could be batched with three promotional pieces and one
CD to make a software package that is shipped as one product. Or a ship attempting to dock
might be temporarily batched with two tugboats resources to guide it through the docking process,
after which the tugboats and the ship are sent on separate paths.

Batch dialog

Batch tab
The top of the Batch blocks Batch tab has a
popup menu with two options that determine
how the block behaves. These are summarized
below and illustrated in models later in this
chapter.
Batch items into a single item creates a batch
Batch tab in Batch block
using items on a first-in, first-used basis as
they arrive at the item input connectors. The
quantity of items required from each input is entered in a table or (if this choice is selected on
the Options tab) determined by the value at a BatchQuantityIn connector.
Match items into a single item creates a batch of items that have a common attribute value. For
instance this could represent a process where items were combined together based on a serial or
order number. For this choice, it doesnt matter which input connector the items arrive from.
The table in the Batch dialog is for entering the number of items from each input that are required
to make a batched item; the size of the batch can also be set using value input connectors as discussed later in this chapter. The first column shows the block label or name the input is connected
to. The Quantity column is for specifying the number of items required from the input and the
next column reports the number of items available. Checking the fourth column determines if
Delay Kit is activated; as discussed on Delaying kits on page 207, this causes the specified item
or items to not be pulled into the block until certain conditions are met.
Options tab
Among other choices, this tab has options for setting the size of a batch through value input connectors and determining when to start a batch.
BatchQuantityIn connectors
Checking Use quantity input connectors on the Batch blocks Options tab enables the
BatchQuantityIn variable connector. Each BatchQuantityIn value input connector corresponds to
an item input connector and controls the batch size for that item connector. If a value input con-

Discrete Event

The Batch block has three tabs for determining


when items should be batched, how many items
to include in a batch, and what to do with the
properties of items that are batched. The Batch
and Options tabs are discussed below; options in
the Properties tab are described on page 205.

202

Batching and Unbatching


Batching

nector has been connected, it will set the number of items required at its adjacent item input connector. If a value input connector is not connected, the number of items for the adjacent item
connector will be set by the value in the Batch dialog.
When Use quantity input connectors is checked, there are two options that affect the batch size.
With either option, the initial size of the batch is the value at the BatchQuantityIn connector
when the first item on its corresponding item input connector arrives to the Batch block. The
options determine what happens if the input value changes:
Dynamically as batch is created. If the value at a BatchQuantityIn connector changes before
that item connectors batch is released, the number of items required for that batch will change
as well. This enables the size of a batch to be changed dynamically.

The number of items to be batched from each input connector can never be less than the number

Discrete Event

of items that have already arrived to the block from that input. That is, if 10 items have already
been pulled in through an item input connector, and the BatchQuantityIn connector changes to 8,
the batch size for that item input connector will be set to 10, not 8.
By first item at each connector. The size of the batch does not change after the first item for
the batch has arrived, even if the value of the BatchQuantityIn connector changes. Once that
batch is released, a new batch size can be set.

The demand connector


To enable the demand connector, check the Show demand connector box in the Batch blocks
Options tab. Then choose one of the following options:
Start batch when value at demand 0.5. No items are brought into the Batch block until the
value of the demand connector equals or exceeds 0.5. For instance, while the Batch block sees a
0 at demand, no items will enter for batching. When it sees a 1 at demand, the required items
currently available will enter the Batch block to be joined together. Depending on how the
model is constructed, selecting this behavior can cause blocking of upstream items.
Create batch when value at demand 0.5. Items are allowed into the Batch block as they are
available, up to the required number. However, the batched item will not leave the block as long
as the demand connector has a value < 0.5. When the demand connector becomes 0.5, the
batched item leaves the block. With this option, a batch can consist of fewer items than the
number in the Quantity Needed column, because the batched item will have been created by
joining whichever items were available when the demand connector got a value 0.5.
A value output connected to the Batch blocks demand input is used as a true/false indicator, triggering batching. The actual value from the value connector is ignored; what is considered is
whether or not it equals or exceeds 0.5.

Simple batching
The simplest batching method is to cause multiple items to be joined as one new item, replacing
the original items in the model. The batched item may or may not be unbatched at a later point,
depending on model requirements.

Batching and Unbatching


Batching

Simple Batching model


The model shown at right joins one
Open Box with three Bottles;
they then travel as one item to be
shipped. For this model, the Batch
blocks behavior is set to Batch items
into a single item. The items are
joined by the Batch block according
to settings in the table in its dialog.
The Batch block will not release the
batched item until it has received one
item (a box) from the top input and
three items (bottles) from the bottom
input.

203

Simple Batching model

Batching by matching items


Selecting the Match items into a single item option in the Batch dialog allows you to specify an

Matching Items model


The Matching Items model shown below simulates a refurbishment process for police cars. As the
cars arrive, they are assigned a consecutive serial number by the Information and Set blocks. The
Information block counts each car in order and outputs that number to the Set block, which
assigns the count number as the value of the Serial Number attribute. For instance, this causes the
Serial Number attribute for the second car to be assigned a value of 2.
The engine is then separated from the car by an Unbatch
block. (When items are unbatched, you can specify what
the block should do with their properties. This is accomplished by selecting an Action for item properties in the
Unbatch blocks Properties tab, as shown at right. Actions
are discussed in Properties when items are unbatched
on page 210.)
Properties tab of Unbatch block
These two components (the engine and the car) are refurbished individually. When both components are finished being refurbished, the engine is reassembled into its original car by matching them together in a Batch block set to Match items into a

Discrete Event

attribute the items must match and a different attribute that determines the batch size. With this
option, each batch will be composed of items whose matching attribute value is the same; the
batch size attribute of the first item in the batch determines how many items are in the batch.
With this option, it does not matter which input connector the items arrive at. As items arrive to
the Batch block they are segregated based on their matching attribute value until the total number
of items in that group equals the batch size attribute. When this occurs a batch is created and the
item representing the batch leaves the block.

204

Batching and Unbatching


Batching

single item, Match on attribute: Serial Number, and Get batch size from attribute: Components.

Matching Items model

Discrete Event

For a similar model that uses the Queue Matching block to match items based on an attribute
value, see Matching items using the Queue Matching block on page 142.

Batching a variable number of items


Sometimes the number of items required to create a batch changes during the course of the simulation. For instance, outside factors could determine how many items go into each batch, or you
may want batches to be made in a time-dependent fashion. As shown in the following two models,
the Batch blocks Options tab allows you to manipulate the size of batches through quantity input
connectors or through a demand connector.

For additional examples of dynamically setting batch size, see also the Batch and Unbatch Variable
model on page 209 and the advanced batching models Equation(I) Controls Batch and Queue
Eqn Controls Batch that are located in the folder \Examples\Discrete Event\Batching.

Batching Variable model


This example model uses a Batch blocks quantity input connector to determine the size of a batch.
A Random Number block (Value library) sets random batch sizes of two to five items. In the Batch
blocks Options tab, Use quantity input connectors is checked to enable the BatchQuantityIn
connector and Set batch size: dynamically as batch is created is selected. The output of the Random Number block is connected to the BatchQuantityIn connector on the Batch block. These settings cause batches to be created that require a variable number of items. The information about
the size of the batch can be saved on an attribute specified in the blocks Options tab.

Batching Variable model

The BatchQuantityIn connectors will not be visible on the Batch blocks icon unless Use quantity input connectors has been checked in the blocks Options tab.

Batching and Unbatching


Batching

205

Batch on Demand model


You may want batches to be made in a time-dependent fashion, such as based on the time of day or
on a periodic basis. The Batch blocks demand connector can be used to control when items are
pulled into or sent out of the block. For example, if the model represents filling a truck with boxes,
you can signal the demand connector to stop the batching at the end of the day or when another
truck arrives at the loading dock. The batched item (the truckload of boxes) is then created and
released. In this example model:
The top Create block sends a value that triggers the Batch blocks demand connector at scheduled times, every 5 seconds.
The Options tab of the Batch block is set to Use quantity input connectors. Set batch size: by
first item at each connector and Start batch when value at demand 0.5.
The Batch blocks quantity input (BatchQuantityIn), is connected to the L (length) output on
the Queue block.

The information about when items arrive and the size of the batch is recorded by the History
block and displayed in its cloned table.

Batch on Demand model

By default the History block clears its information each time the model is saved. A choice on the

blocks dialog allows you to Save item history with model, but that option can cause the model
to become quite large.

Properties when items are batched


As described in Item properties on page 114, items can have properties such as attributes and
priorities. When items are combined into a batch, their properties need to be combined as well.

Discrete Event

With these settings and connections, the Batch block will create a batch every 5 seconds, the size of
the batch is dependent on how many items are available to the Batch block when it creates the
batch, and items will be allowed into the block only when demand is triggered.

206

Batching and Unbatching


Batching

Property options
A table in the Batch blocks Properties tab allows
you to define what happens to item attributes
and priorities. The tables first column lists every
property for the items in the model. The second
column, Action, gives potential options that can
be taken for that propertys values. This allows
you to select how properties get transferred from
the original items to the batched item.
The Properties tab for the Batch block in the
Matching Items model looks like the screenshot
at right. It shows two user-defined attributes
(Components and Serial Number) and the item
properties _Animation and _Item Priority.

Action options for properties

Discrete Event

Attributes and priorities


The options that can appear in the Action column for attributes and priorities are:
Maximum. Sets the value of the property to the largest number found on any of the items that
formed the batch.
Minimum. Sets the value of the property to the smallest number found on any of the items that
formed the batch.
Average. Sets the value of the property to the average value of that property for all of the items
that are part of this batch.
Sum. Sets the value of the property to the sum of that propertys values for all of the items that
are in this batch.
First at con X (the default). Sets the value of the property to the value of that property of the first
item that entered on connector X. Con 1 is the topmost item connector.
Last at con X. Sets the value of the property to the value of that property of the last item that
entered on connector X. Con 1 is the topmost item connector.
Count at con X. Sets the value of the property to the number of items that entered on connector
X. Con 1 is the topmost item connector.
Other item properties
An Item's quantity property (_Item quantity) determines its count toward the batch size. For
example, if an item arrives with a quantity of 2 and two items are required at that input, then that
input is full and no further items are required for that batch from that input. In most cases, the
item quantity of the items going into the batch will be 1.
Some models have an animation attribute (_Animation) that stores the indexes of the 2D and
3Danimation pictures for the items moving through the model. Note that the animation attribute
can only be set to First at con X or Last at con X.
Batch size attribute
By creating a new attribute or selecting an existing attribute for Store number of items in batch in
attribute: in the Batch blocks Properties tab, an attribute can be set to the total number of items
in the batch as it is released.

Batching and Unbatching


Unbatching

207

Delaying kits
You might not want to begin forming a batch until some or all of the items required for each part
of the batch are available. This is most common when you do not want a resource item from the
Resource Item block to flow into the Batch block until all the items requiring that resource are
available. A good example is a manager who does not want to wait for everyone else to arrive at a
meeting.
The Batch blocks Delay Kit feature restricts specified items from entering the block until all of the
other input connectors have the items they need. Delay Kit is enabled through checkboxes in the
fourth column of the table in the Batch dialog. Each item input for which Delay Kit is checked
will have its items wait outside until all required items for the unselected inputs are in the block.

Delay Kit is only available when the Batch blocks behavior is set to Batch items into a single
item.

Unbatching
Unbatching can be used to separate items that
were previously batched or to duplicate items
that have not been batched. Some examples
of when you would use unbatching are:
Returning an item resource to the Resource
Item block
Ungrouping items that had been temporarily grouped so that they could be processed
at the same time
Creating items based on a single seed
item
Creating a logical item to trigger some
action in the model while allowing an item
that represents the physical part to continue processing

Unbatch dialog

If items were previously batched with Preserve uniqueness enabled in the Batch blocks Options tab, the Unbatch block can be used to
restore the items that formed the batch with their original properties. This is accomplished if Preserve uniqueness is also checked in the Unbatch blocks dialog. For information about this feature,
see Preserving the items used to create a batch on page 210.
Be careful when using any property-setting blocks in the path between a Batch and an Unbatch
block. Those property modifications could be lost, depending on selections in the Unbatch blocks
Properties tab, as discussed on page 210.

Discrete Event

When the kitting starts


If the number of items required at a Delay Kit input is one, and all the other required items have
been pulled into the block from their input connectors, the batched item will be created as soon as
the Delay Kit item is available. If the number of items required at a Delay Kit input is greater than
one, the block will start a kit as soon as all the other required items are available and there is at least
one of the Delay Kit items available. This causes items with Delay Kit to be pulled into the block
as they become available; the batched item will not be created until all the items with Delay Kit are
available.

208

Batching and Unbatching


Unbatching

The top section of the Unbatch tab in the Unbatch block has two options that determine how the
block behaves when costing is involved. Each option causes the block to output a number of items,
specified in the dialog, for each item that is input. The options are:
Create multiple items. This is the default choice. If the model has costing, costing attribute values are distributed to the output items as specified by settings in the table in the Unbatch blocks
Properties tab. The section Simple unbatching on page 208 shows how to use the block to
separate batched items.

Discrete Event

Release cost resources. Resources can have a cost associated with them. If an item is batched with
a resource, cost information is maintained with it. If the model has costing and the Release cost
resources option is selected, the block releases the resources out of the same connector that they
were originally batched and updates costing information for the items accordingly. For more
information, seeCombining resources with cost accumulators on page 278.
The Unbatch block will not behave differently when either of these two options are selected unless
the model calculates costs.
The Unbatch tab also has a table for specifying the number of items that will be sent through each
output connector. The first column displays which blocks the Batchs output connectors are connected to. The Quantity column is for entering the number of items that will be output for each
input item the Batch block gets, while the next column displays the number of items present.
When preserving items that have been batched or when releasing cost resources, it is important to
physically match where items enter a Batch block with where they leave an Unbatch block. For
instance, items that arrived to the Batch block on the top input should be released from the top
output of an Unbatch block.

Simple unbatching
The Batching and Unbatching model is an extension of the example Simple batching on
page 202, with the addition of laborers and unbatching. Since there is no costing in this model,
the Unbatch dialog is set to Create multiple items (the default option).

Batching and Unbatching model

In this model, the packaging process must be performed by a laborer. There are 10 laborers available and each is represented by an item in the Resource Item block. Each worker item is temporarily batched with the bottles and cartons to represent the requirements of the packaging process.

Batching and Unbatching


Unbatching

The dialog of the Batch block (shown at


right) indicates that one laborer is needed
for each package assembly. Since Delay
Kit is checked for that row, the labor
resource will not be drawn into the Batch
block until the other items required for
the batch (1 box and 3 bottles) have
arrived.

209

Binding a worker

The worker is returned to the pool when the task is finished,


while the boxed bottles exit the simulation. This is modeled
by the Unbatch block, which takes a single item (the output
from the Activity) and creates two items, as shown on the
right. One item represents the worker who is sent back to the
Resource Item block through the top output and the other
represents the assembled package that is shipped.

Unbatching 1 worker and 1 package

The previous model showed how to batch and unbatch a fixed number of items from each input.
This example shows how to batch a variable number of items and unbatch that same number of
items.
To keep track of the number of items a batch is composed of, select an attribute in the Batch
blocks Properties tab to store the number of items in the batch. When the batch is created this
attribute's value will be the number of items that arrived to create the batch.

As discussed later in this chapter, if both the Batch and Unbatch blocks are set to preserve the

uniqueness of items, batch size does not need to be saved in an attribute. Instead, just check Use

preserved items to determine unbatch quantities in the Unbatch blocks dialog.


Batch and Unbatch Variable model
An example of batching a variable number of items and unbatching that same number, is shown in
the model below.

Batch and Unbatch Variable model

In this model, the Batch blocks Options tab indicates that the size of each batch is stored on an
attribute named batchsize, which is accessed by a Get block. Attaching the Get blocks value output to the Unbatch blocks UnbatchQuantityIn connector sends information about the size of the
batch to the Unbatch block, causing each batch to separate into its original number of items.

Since the Batch block is set to Set batch size by first item at each connector:, the size of the
batch is locked when the first item for that batch arrives in the Batch block.

Discrete Event

Variable batching and unbatching

210

Batching and Unbatching


Preserving the items used to create a batch

Properties when items are unbatched


As happens when items are batched, when items are unbatched you can specify what the block
should do with their properties. This is accomplished by selecting an Action for item properties in
the Unbatch blocks Properties tab.
For example, assume a Batch block combines six
bottles that have a Weight attribute, and that the
bottles are then filled with liquid such that the
batch weighs 12 pounds. When these bottles are
subsequently unbatched, you can select one of the
following actions for the Weight attribute:

Unbatch block property actions

Discrete Event

Preserved value. This option causes the bottles


to retrieve their preserved value, if preserve uniqueness is turned on. (See the following topic for
more information about preserving uniqueness.) In this case the weight of each bottle will be
what it was before batching and the 12 pounds of weight acquired after batching is discarded.
Batched value. With this choice, the 12 pounds of weight will be copied to each of the resulting
bottles.
Distribute. The 12 pounds of weight will be divided among each item equally, 2 pounds to each
bottle.
Automatic. Behaves as Preserved value if Preserve uniqueness is checked; otherwise behaves as
Batched value.

Preserving the items used to create a batch


Before items are batched they may have properties such as attributes attached to them. By default,
a reduced set of those properties is transferred to the new batched item, according to actions
selected in the Properties tab of the Batch block. (For more information, see Property options on
page 206.)
If it is important in your models to retain the attributes and priorities of the items that were
batched, select Preserve uniqueness in the Batch block and in the Unbatch block. This marks the
items in the batch as unique so that an Unbatch block can restore all of the items properties.

For those properties that you want to retain, select the Preserved Value action in the Properties tab
of the Unbatch block, as discussed in Properties when items are unbatched on page 210.

Do not select Preserve uniqueness unless the items have unique information attached to them,
the items are not just temporarily batched, and you need to restore the items and their properties
at a later point. Preserving uniqueness requires a lot more memory and slows processing time.

Both blocks choose to preserve uniqueness


The consequences of selecting, or not selecting, Preserve uniqueness in both the Batch and
Unbatch blocks are:
If the Preserve uniqueness option is checked, the batch is temporary. The original members of
the batch are stored when the batch is created and they can be restored when the item representing the batch is unbatched. Examples include batching a group of parts together to process them
as a group and later unbatching them to continue processing individually, or batching an item
with a resource and later returning the resource item with an Unbatch block.

Batching and Unbatching


Additional models

211

If the Preserve uniqueness option is not checked, the items used to make up the batch are
destroyed when the batch is created. The batch, represented by a new item, is permanent and
the original items cannot be restored. Examples include batching items together into a box for
final shipping, or batching an order with the required inventory.

If a Batch block is set to preserve uniqueness, the unique identity of the items will only be restored

upon unbatching. While batched, the attributes of the unique items will be combined into one set
of attributes, as specified by settings in the Batch blocks Properties dialog.

Either block chooses to preserve uniqueness


To restore the items with their properties intact, the option to Preserve uniqueness must be
selected in both the Batch and Unbatch blocks. There are special outcomes if Preserve uniqueness is selected in either the Batch or the Unbatch block, but not in both blocks:

If Preserve uniqueness is not selected in the Batch block but is selected in the Unbatch block, it
is the same as if preserve uniqueness is not checked at all. Because the original information about
the batched items was lost when they were batched, the Unbatch block will unbatch identical
copies of the items that arrive to it.
Neither of these conditions is typically desirable.

Additional models
The folder located at \Examples\Discrete Event\Batching contains additional batching models not
discussed in this chapter:
Equation(I) Controls Batch
Queue Eqn Controls Batch
Both models show advanced concepts for dynamically changing the size of batches.

Discrete Event

If Preserve uniqueness is selected in the Batch block but not in the Unbatch block, the behavior
of the Unbatch blockdepends on whether or not Duplicate preserved items is selected. If
Duplicate preserved items is not selected, the preserved items travel with the first item that
leaves the Unbatch blocks top output connector. All the other items leaving the Unbatch block
will be identical and not contain any information about the preserved items. If Duplicate preserved items is selected, each item leaving the Unbatch block will have a duplicate copy of the
preserved items. In this case, the Unbatch block copies the set of preserved items and attaches
them to each unbatched item.

Discrete Event

212

Batching and Unbatching


Additional models

Discrete Event Modeling

Resources and Shifts


Modeling resources and controlling them with shifts

214

Resources and Shifts


Blocks of interest

Items will sometimes require resources before they can proceed to the next step in a process. For
example, a car might need an attendant to drive it through the car wash, a vendors invoice could
require a receiving report before payment is made, or parts might need to be assembled by a
worker. Resources provide a service to the items in a model; their availability or lack thereof can
cause constraints on the flow of items.
One of the main reasons to model a process is to analyze resource availability and utilization and to
determine the impact of resource constraints on the systems capacity. This tells how efficiently
current resources are being used and what happens if they will not be available or when there is a
wait for them to become available. Often the objective is to try to improve resource utilization
without causing overly long waiting lines or to determine how to reduce waiting lines without adding more resources.
This chapter discusses:
Modeling resources with the Resource Pool block
Modeling resources using the Resource Item block

Discrete Event

Other methods for modeling resources


Closed and open systems
Ways in which resources can be scheduled
Controlling resources and activities with the Shift block

Advanced Resource Management and setting up resource requirements


The models illustrated in this chapter are located in the folder \Examples\Discrete Event\Resources
and Shifts.

Blocks of interest
The following blocks are the main focus of this chapter. Each blocks library and category appears
in parentheses after its name.

Resource pool blocks

Resource Manager (Item > Resources)


Manages and controls the behavior and utilization of advanced resources. Use this block to
create, modify, view and delete Advanced Resources. This block creates internal databases
where it stores all of the information needed to manage and control Advanced Resources.
See Advanced Resource Management on page 229.
The Resource Manager block is an advanced tool that is available in the ExtendSim Suite and
ExtendSim AT packages only.
Resource Pool (Item > Resources)
Stores a count of resources for the model. The resources are taken by the Queue block (in
resource pool queue mode) and released by the Resource Pool Release block at some later
point in the model.
Queue (Item > Queues)
When the Queue type is set to resource pool queue, items wait here for required resource
pool units from the Resource Pool block. Once the needed resource units are available, the
block checks for downstream capacity before releasing items.

Resources and Shifts


Modeling resources

215

Resource Pool Release (Item > Resources)


Releases the specified number of resource pool units, making them available for re-use and
causing the count in the Resource Pool block to increase.

Other resource blocks


Resource Item (Item > Resources)
Unlike the resource pool method, this block stores resources as items for use in the model.
Resource items are usually batched with items that require them; they may or may not be
unbatched at some later point in the process.
Shift (Item > Resources)
Generates a shift schedule that can be used to change the capacity or stop the activity of
other blocks in the model.

How to model resources


As seen in the following sections, there are many ways to simulate resources when building models
some are explicit and some are implicit. Resources can be explicitly modeled using specialized
resource management blocks; this has the advantage of direct access to features like automatic costing and utilization calculations. In some situations, however, it could be simpler or provide more
control to model resources just as any other item in the model or by limiting block capacity.
Explicit methods
The ExtendSim discrete event architecture supports three explicit methods for modeling resources:
Resource Pool method. As a count of the resources that are available in a pool. By keeping track
of the available resource pool units, this method controls the flow of items that require the
resources. This is accomplished using the resource pool blocks (Resource Pool, Queue [in
resource pool queue mode], and Resource Pool Release), as shown in the Resource Pool
method section of the User Guide.
Resource Item method. As one or more resource items that are available to another item. This
method involves batching resource items from the Resource Item block with the items that
require them and, typically, unbatching the resource when it is no longer needed, as described in
the Resource Item method section of the User Guide.
Advanced Resource Management method. As records in a table in an internal database, where
each record represents a resource with individual properties and statistics. The Resource Manager block provides the interface for managing advanced resources. This resource management
system is an advanced tool that is only available in the ExtendSim AT and ExtendSim Suite
packages. See Advanced Resource Management on page 229.
These methods are compared in the table on page 259.

Discrete Event

Modeling resources
Resources are the means by which process activities and operations are performed. Different parts
of a model can share the same resource, just not at the same time. While a particular resource is
being used in one place in a model, it is not available for any other part of the model. Thus the
availability or lack of availability of resources causes constraints in a model.

216

Resources and Shifts


Modeling resources

Implicit methods
In addition to the explicit methods listed above, ExtendSim provides additional ways to model
resources, as discussed in the Other methods for modeling resources section of the User Guide.

Resource-type blocks should only be used in a model if their presence is required for the system.
Otherwise, use an implicit method.

Resource Pool method

Discrete Event

The resource pool blocks in the Item library (Resource Pool, Queue, and Resource Pool Release)
cause restraints to be placed on the flow of items in the model based on the availability or lack of
resources. The Resource Pool block maintains a count of the number of resources that are currently available for use. When an item enters a Queue block that is in resource pool queue mode,
the Queue will query the resource pools to determine if the required number of specified resources
are available. If so, the number of resources currently available will be decremented in the appropriate Resource Pool block, and the item that requires the resource will be released from the
Queue. If the required number of resources are not available, the item will wait in the Queue until
resources become available.

In a closed system, the resources are returned to the Resource Pool block by passing the
resourced item through a Resource Pool Release block. In an open system, such as for a consumed resource, the resource is not returned to the pool but is removed from the system when the
item exits. Closed and open systems are discussed on page 222.
Since resources are not returned to the originating block in an open system, statistical calculations
such as utilization cannot be accurately determined.
Advantages and disadvantages of using resource pools
Advantages
The Resource Pool block does not require any connections to other blocks in a model. Because
of this, using resource pools to model resources (as opposed to using the resource item/batching
method that will be described later) is more flexible when the same resource can be used in many
different places or when an item can use any one of a group of resources.
The resource pool method does not require complex routing of resource items because the
resources are not actual items but merely constraints on the flow of items through the model.
When items wait for resource pool units, they can be ranked by priority or FIFO order. The
Resource Pool block is able to globally allocate the resource pool unit to the highest ranked item.
Disadvantages
The resource pool method does not allow the use of attributes to track information about the
individual resources. To use attributes, you must use resource items; this is shown in Resource
Item method on page 219.
It is more difficult to control the complex scheduling of competing resources across a number of
different queues using resource pools.

After learning about resource pools, see Advanced Resource Management on page 223 for a
more rigorous method of creating resource requirements, scheduling, and tracking resources.

Resources and Shifts


Modeling resources

217

Simple Resource Pool model


The discrete event tutorial on page 107 showed how to use and release resources from resource
pools, as does the following example:

Simple Resource Pool model

In the Activity block, processing takes 5 minutes and the


capacity is infinite, so any number of pieces can be
Resource Pool dialog
worked on at a time. Within the Queue and Resource
Pool Release blocks, the quantity of resources required/
released is 1 and the name of the resource pool (Labor) is listed.
Running the model shows that the amount of processing that can occur is constrained by the
number of laborers available. Although the Activity has an infinite capacity, the cloned plotter
graph shows that there are not enough workers available for much of the simulation.

So that the focus is on the constraining effect of labor resources, the Activity block is set to infinite
capacity. This causes the availability of labor, but not the processing of material, to affect the flow
of items in the model.
Resources required from different pools
In the Multiple Pools example, there are three Resource Pool blocks, each with their own labor
resource. Items require either Labor 1, Labor 2, or Labor 3.

Multiple Pools model: One laborer per piece required from


any of the three pools

Discrete Event

The Simple Resource Pool model represents a flow of


material where each piece requires one laborer for processing. In the dialog of the Resource Pool block (labelled
Labor Pool), the pool of resources is called Labor and the
initial number of Labor units is 3, as shown at the right.
One piece of material is generated by the Create block
about every two minutes. Since this model uses resource
pool units, the Queue blocks type is set to resource pool
queue. This causes generated material to wait in the
Queue until the required Labor is available.

218

Resources and Shifts


Modeling resources

Discrete Event

Because it will hold items that require resource


pool units, the Queues type is set to resource pool
queue. As shown in the Queues dialog, the three
resource pools have been selected from popup
menus in the table and the block is instructed to
take the resource from any one of those pools.
When an item enters the Queue, it will query
each of the resource pools in the order that they
are listed in the table (from top to bottom). In
other words, if no resources are available in Pool
1, the Queue block will try Pool 2, and then Pool
3. If a resource is still not found, the material will
be held in the Queue until the resource requirement is met by whichever pool first has an available resource.

Queue block dialog

Note that the Queue block (Options tab) stores


the information about which pool the resource came from, and how many resources were used, in
an attribute that attaches to the items processed. In this model, the information is stored in the
attribute Resource Name. This attribute is used by the Resource Pool Release block to inform
the appropriate pool when a resource is no longer in use.
The Multiple Pools model is similar to the Simple Resource Pool model in that each piece of material requires 1 laborer. However, in this model the laborer can come from one of three pools rather
than from a pool of three laborers. As in the earlier example, modeling this process using the
resource item/batching method would require complex logic to correctly route the resources.
Same resource used in multiple places
The Multiple Uses model has two parallel processes, each requiring laborers. Items waiting in both
Queues (set to resource pool queue) require a labor resource from the same Resource Pool block,
which has 3 laborers initially available. When an item enters one of the queues, a request is sent to
the Resource Pool block for a labor resource. The requests are satisfied in the order in which they
were received (or in order of the requesting items ranking as specified in the Resource Pool dialog).

Multiple Uses model

Resources and Shifts


Modeling resources

219

Resource Item method


Another method for explicitly modeling resources is by using the Resource Item block. With this
method, each resource is represented by an item whose purpose is to provide a service for other
items in the model. The number of resources that are initially available are entered in the dialog of
a Resource Item block. For an item in the model to use this type of resource, the item must be
batched with the resource (see also Batching and Unbatching on page 199.) While the resource
is batched with an item, it cannot be used elsewhere in the model. If a resource is not available, the
batch will not be able to be completed, and the item will have to wait until a resource becomes
available. As with the resource pool method, the movement of items in the model is restrained
based on the availability or lack of resources.
If you are modeling a closed system, the resource must be unbatched from the item when it is no
longer being used. Once it is unbatched, it should be routed back to the resource-type block so
that it may used again. In an open system, for example where the resource is a consumable product, the resource can stay batched with the item. Closed and open systems are discussed on
page 222.

See Items, Properties, and Values on page 113 for a complete explanation of attributes and other
item properties.
Some limitations of using resource items are:
The Resource Item block must be connected in the model and the connection must be such that
the resources it outputs can be batched with the items that require them.
The resource item cannot see the items waiting for it. You must use routing blocks to direct
the resource item to the correct Batch or Unbatch block.

After learning about resources, see Advanced Resource Management on page 223 for a more rigorous method of creating resource requirements, scheduling, and tracking resources.

Air Freight model


An example of using the attributes of resource items to track information is shown in the following
model of an air freight company. An airplane receives orders for flights, but regulations require that
airplanes must undergo maintenance after every 50 hours of flight time. Thus the model needs to
track the airplanes accumulated flight time (hours). Once an airplane accumulates 50 hours of

Discrete Event

Advantages and disadvantages of using resource items


A resource item can have properties such as attributes, a priority, and a quantity like any other
item. For this reason, this method of modeling resources is preferred if you need to track information about resources.

220

Resources and Shifts


Modeling resources

flight time, it is sent for maintenance and the accumulated hours are reset to 0. The model looks
like:

Discrete Event

Air Freight model

The Create block generates orders which are batched with an airplane from a Resource Item block.
While the airplane is batched with a flight order, it is not available for other flight orders; the order
will wait in the Queue (set to type: sorted queue, and Sort by: first in, first out) until the plane
becomes available.
The Resource Item block attaches an Hours attribute to the airplane. Settings in the Batch blocks Properties tab, shown at right,
cause the airplanes Hours attribute (the first attribute from the
item arriving at the second connector) to be attached to the
batched item.

For more information about item attributes, see Item attributes

Batch block properties

on page 119.

An Activity block (labelled Flight) uses a random distribution to determine how long each flight
will take, then outputs the flight time to its Process Time (PT) connector. The Equation block gets
the airplanes flight time and adds it to the planes Hours attribute.
After the flight, the airplane is unbatched from the order; the airplane returns to the Resource Item
block for reuse and the order exits the simulation. The Get block reads the value of the airplanes
Hours attribute and the Decision block determines if the accumulated flight time is greater than
50 hours. If it is, the airplane will be routed to the maintenance group for processing. After maintenance the Set block re-initializes the Hours attribute to zero. If accumulated time is not greater
than 50, the airplane is returned to the Resource Item block where it will wait for another flight
order.
When the simulation is run, a clone of the output from the Equation blocks dialog shows the
value of the airplanes Hours attribute. With animation on, it is easy to see that once the airplane
has an Hours value greater than 50, it routed to the maintenance group.
For this model it is essential to be able to track information about the airplanes flight time. Therefore the ability to assign attributes to the airplane resource is critical.
Stripping attributes from resource items
As described in Properties when items are unbatched on page 210, an item returning to a
Resource Item block after batching may have many attributes that are irrelevant to the returning
item. The Resource Item block provides the option of stripping attributes or keeping them with

Resources and Shifts


Modeling resources

221

resources that are recycled; the default is to strip them. When tracking resource information using
attributes (as in the above model), you will not want to strip the attributes, so the block is
unchecked. However, in cases where you are not concerned with attribute values after the item has
been recycled, you may want to strip the attributes so that the item will be clean when it comes
out of the Resource Item block again.

The Queue Matching block (Item library) holds different types of items until the requirements for
each type have been met. This can be useful when modeling the release of resources and items into
a Batch block. For more information, see Matching items using the Queue Matching block on
page 142.

Other methods for modeling resources


The Resource Pool and Resource Item methods described earlier in this chapter use specialized
blocks to explicitly represent resources. The ExtendSim architecture provides many additional
methods for modeling resources. For example, it might be simpler or provide more control to
imply a lack of resources by limiting capacity in some blocks or to model resources just like any
other item in the model.

For instance, the Simple Resource Pool model on page 217 illustrates how to model resources
using the resource pool blocks. A simpler method would be to use the Activity block to represent a
limited resource, without using explicit resource blocks. In this case, you would remove the
Resource Pool and Resource Pool Release blocks from the model, set the Queue as a FIFO sorted
queue, and set the maximum items in the Activity block to three. The Activitys capacity limitation
would have the same constraining effect as the Resource Pool block in the original Simple
Resource Pool model.
Another advantage of modeling resources implicitly is that the Activity block can be shutdown and
brought back online using the Shutdown block, as shown in Shutting down on page 185. This is
common when modeling random failure.
Conceptual resources
The concept of what is a resource is not limited to the explicit (resource pool and resource item) or
implicit (capacity-constrained) methods of representing resources. Theoretically, a resource is anything where its availability can restrict items flowing from point A to point B. Some examples are:
Any item can conceptually represent a resource. For example, batching a bus item with people items, where the bus is required before the batched bus/people item can be released from a
Queue (see Delaying kits on page 207). Note that the bus is created as any other item, not as a
resource item from the Resource Item block.
Using the ExtendSim database or global arrays to track resource availability, limiting the flow of
items in a model. For example, item availability would be regulated by how data in the database
changes during the course of a run.
Using block combinations to control item movement as model status changes over time, such as
a Queue followed by a Gate that is connected to a Read block.
Your cleverness and knowledge of ExtendSim can probably lead to even more ideas.

Discrete Event

Implicit resources
A resource can be implied in a model by restricting or scheduling the capacity of residence type
blocks like the Activity and Queue. These blocks are useful for implicitly modeling resources.

222

Resources and Shifts


Closed and open systems

Closed and open systems


As discussed on page 97, blocks that provide a finite number of resources can be part of closed or
open systems. In a closed system, resources are recycled back to the originating block. In an open
system, resources are not recycled but instead exit the system. Systems can also be partially closed,
for example when some of the resources are recycled back and others are not.

Discrete Event

The following model uses three Resource Item blocks to illustrate a closed system (Technicians), an
open system (Stock), and a partially closed system (Fixtures).

Closed and Open Systems model

The model assumes that about one third of the fixtures are consumed in the process; they are
restocked at periodic intervals by the Create block.

Scheduling resources
To accurately characterize the impact of resources in a simulation model it is common to model
resource scheduling logic, both in terms of where and when a resource should be assigned. For
example, if one resource item is required in multiple places, such as an item that could be routed to
two or more Batch blocks, then scheduling logic needs to be added to the model.
There are several ways resources can be scheduled. Some methods apply to using either resource
pools or resource items and some apply only to scheduling resource items.

Scheduling resource pools and resource items


As discussed in the following sections, there are two systems available to schedule resource pools
and resource items:
Use the TR (total resources) connector on individual resource blocks, as described in the following section.
Use Shift blocks to control aspects of one or more resource blocks. This is discussed in
Resources model on page 227.
Using the TR (Total resources) connectors
Blocks that provide resources (whether as items or as resource pool constraints on items) have value
connectors labeled TR (total resources). You use the TR input connector to change the total number of resources available. This change can be scheduled, such as when workers take breaks, or
unscheduled, such as an equipment failure.

Resources and Shifts


Scheduling resources

223

The value at the TR connector determines how many resources the block has and can result in an
increase or a decrease in resource availability. For example, if the initial number in a Resource Item
block is 10, and the block gets a value of 3 at its TR input connector, the block will eliminate 7
resources from its availability list. If the block doesn't have enough resources to dispose at the time
of the change, it will dispose of them as they return.
Scheduling Resources model
It is common to schedule the availability of resources based on some
factor in the model, typically time.
For example, in the model discussed
in Scheduling activities on
page 179, you could have scheduled
workers in the diner depending on
the time of day using the Resource
Item and Create blocks.

The schedule for workers is entered in


the dialog of the Create block, as shown
at right. The block is set to Create values
by schedule, and its value output is
attached to the TR (Total resources)
input of a Resource Item block.

This model is set to use Calendar dates.


The Simulation Setup dialog and block
options (such as selecting calendar format when a Create block is set to schedule its outputs) facilitate the display of
times and dates in Calendar format. For
more information, see Calendar dates
on page 586.
In this model the workers are part of a
partially closed system. Some are recycled back to the Resource Item block
Arrival times for workers
through its item input connector, while
other workers are added to or removed
from the block through its TR connector.

Scheduling resource items


There are at least four additional ways to schedule resource items in ExtendSim:
1) A Resource Item block followed by a Gate can control when resource items are released.

Discrete Event

The new model is shown at right. It


assumes there are three workers initially available when the coffee shop
opens at 6am. Two additional workers arrive after 5 hours and remain
just for the lunch period, from 11am
Scheduling Resources model
to 2pm (1400 hours). The coffee
shop closes after 10 hours.

224

Resources and Shifts


The Shift block

2) A Resource Item followed by a Select Item Out block controls where resource items are routed.
3) A combination of the Gate and Select Item Out blocks can be used to control both where and
when items are scheduled.
4) The Queue Equation block is useful for controlling both where and when items are scheduled
for use when the scheduling logic is more complex. With this block, ModL logic statements
can intelligently control the scheduling of items based on their properties, information in the
ExtendSim database, or even the status of other sections of the model. For more information,
see Sorting items using the Queue Equation block on page 137.

The Shift block

Discrete Event

The Shift block is used to schedule both the magnitude and availability of capacity in other blocks
in a model. This is useful for simulating situations where a systems resources follow a pattern of
coming on and off line over time. For example, the Shift block could be used to model workers in
a factory following a repeated daily pattern of reporting to work in the morning, taking a break for
lunch and going home at some point in the evening.
Each Shift block represents a named shift and its schedule that can be referenced by other Item
library blocks. The Shift controls the capacity of the blocks that reference it, based on the schedule
that is defined in its dialog table. If a shift schedule is changed, all blocks using that named shift
will receive the same modified shift pattern. In addition, shifts may be repeated at regular intervals
if the Repeat schedule every checkbox is selected. This is useful for modeling repeated shift patterns, e.g., an eight-hour workday each day of the week or breaks that occur every four hours.

It would be quite easy to define a complex shift schedule that includes all breaks, holidays, weekends, and so forth. However, before adding such complexity to a model, carefully consider whether
such detail adds to the validity of the model. If, for example, nothing at all happens during the
weekend, a better solution would be to simply assume one week is 5 days long (or specify that in
the Simulation Setup dialog) rather than adding a Shift block to model the weekends. Shifts
should only be used when they will make a significant difference in the results of the simulation.

Shift types and what they control


A Shift can schedule capacity in a number of Item and Rate library blocks. For example, it can turn
an Activity on or off, or specify a maximum number of items the block can process at a time. The
schedule depends on whether the selected Shift type is On/Off or Number.
An On/Off type of shift acts like a binary switch that turns associated blocks on or off at specific
points in time. For example, an On/Off shift might be used to shut down an Activity block during lunch and evening hours, to open or close a Gate block, or to turn a Valve (Rate library) on
and off according to a schedule.
The Number shift type explicitly defines the size of a blocks capacity over time. For instance, it
might set the size of a Resource Pool to 3 for the morning shift, 0 over lunch, 5 for the afternoon
shift, and 0 overnight.

Resources and Shifts


The Shift block

225

The following table shows which Item library blocks can be controlled by a Shift block, which
types of shifts those blocks support, and what aspect of a block, if any, the Number type of shift
controls:
Shift Type: On/
Off or Number

Number Type Setting on Shift Controls This


Aspect of Item Library Block

Activity

Both

Maximum number of items in the Activity at a


time.

Convey Items

On/Off

N/A

Create

On/Off

N/A

Gate

Both

In area gating mode, the number of items


allowed in the gated area at a time. In schedule
gating with Shift, the Gate is always open when
the Shift value is >0.

Resource Item

Both

Total number of resources available, per the TR


(Total resources) connector.

Resource Pool

Both

The total count of resources available, per the TR


(Total resources) connector.

Transport

Both

Block capacity.

Workstation

Both

Maximum number of items in process.

In the Rate library, the Convey Flow, Interchange, Tanker, and Valve blocks can use a Shift set to
On/Off type. See the Rate module for more information about using the Rate library.
If a Shift block is used in a model, statistics in the Queue blocks will probably not accurately reflect
utilization, etc.

Status connectors
The Shift blocks value input connector (StatusIn) can be used to override the shift schedule. If the
input connector is less than 0.5, the Shift is considered off shift; this will override any value found
in the Shift blocks dialog table. If the input connector is greater than 0.5, the shift schedule from
the dialog table is used.
The Shifts value output connector (StatusOut) reports the current shift status (ON = 1 or OFF =
0 for On/Off type Shifts, or the number for Number type Shifts).

Shift models
The following models show how to use the Shift block in typical modeling situations. They also
illustrate how the two types of Shift, On/Off and Number, are used in simulations.

The models are located in the \Examples\Discrete Event\Resources and Shifts folder.

Discrete Event

Item Blocks That


Can Use Shifts

226

Resources and Shifts


The Shift block

Discrete Event

On/Off type example


In the Shift On and Off model at
right, an On/Off type of shift turns
the Activity block on for 4 hours in
the morning, off for 1 hour at
lunch, back on for 4 hours in the
afternoon, and off again in the evening until the next morning. The
schedule, named Day Shift, is set
in the Shift block; the dialog of the
Activity block is set to Use Shift:
Day Shift, which causes the Activity
to go on or off according to that
schedule.
The model contains a cloned graph
from the plotter. On the graph the
upper (blue) line reflects this 24Shift On and Off model
hour shift cycle for seven days, a
total of 168 hours. Observe how the
lower (red) line, which is plotted against the Y2 axis, reflects the queue lengths dynamics during
the various on and off shift periods.
Number type examples
Shift Capacity Change model
In the model Day Shift
Capacity Change, shown at
right, a Number type of shift
is used to control the maximum number of items in the
Activity block. As determined by the Shift block, the
Activity is limited to 2 items
during the morning shift, 0
during lunch, 3 items during
the afternoon shift, and 0
overnight. The schedule,
named Day Shift, is set in
the Shift block; the dialog of
the Activity block is set to Use
Shift: Day Shift. Since this
Shift Capacity Change model
model uses a number type
shift, the Shift blocks table
controls the maximum number that can be allowed in the Activity at one time. When the model is
run, the cloned Activity dialog item Maximum items in activity reflects the Shift tables schedule
of allowed items. Shift behavior over the course of seven days (168 hours) is reflected in the plotted
upper line of the graph. The lower graph line reflects the queue lengths growth when activities are
limited.

Resources and Shifts


The Shift block

227

Resources model
The next example also
uses a Number type of
shift. It illustrates a Shift
block controlling
Resource Pool availability so that workers start
their shift, work 4 hours,
take a lunch break, work
4 more hours, and then
leave for the day.
When workers are not
available, the backlog
starts building up in the
Queue.

Weekly and Daily Shifts model


In the Weekly and Daily
Shifts model, shown at right,
a 40-hour work week with
two days off during weekends
is modeled by feeding a Week
Shift (set to On/Off ) into a
Day Shift (set to Number).
The Week Shift is On for the
five weekdays and Off during weekends. Consequently,
during weekdays, the Week
Shift block sends a value of 1
to the StatusIn connector of
the Day Shift block, allowing
it to observe its own daily
schedule. However, during
weekends, the Week Shift
Weekly and Daily Shifts model
block overrides the Day Shift
schedule by sending it a value
of 0. The plotted line in the cloned graph shows two work weeks (336 hours); the first and second
weeks are separated by a weekend.
The cloned dialog item shows the same daily schedule as in the preceding model, with activity
halted during lunch and at night.

Discrete Event

Complex patterns
Shift blocks may be con- Resources model
figured serially, controlled
by other blocks, or used
in other patterns to create more complex shift patterns.

Discrete Event

228

Resources and Shifts


The Shift block

Controlling Shifts model


Another example of a more
complex shift structure is
the Controlling Shifts
model where a Math block
(Value library) monitors the
processing at the Activity 1
block. While Activity 1 is
processing, the shift is
turned off, stopping any
processing in Activity 2. An
example of this would be if
a worker is required to
monitor two processes, but
can only monitor one process at a time and must stop
the second process while the
first process is active.

Arrivals and Activity model


Controlling Shifts model

The Arrivals and


Activity model illustrates how Shift blocks
can shut down portions of a model without connections. This
example shows the
day shift dynamically
setting the maximum
capacity of an Activity to either 1 or 5
items and the Arrival
shift turning the topmost Create block on
and off at specified
times.
Arrivals and Activity model

Resources and Shifts


Advanced Resource Management

229

Advanced Resource Management


In ExtendSim, Advanced Resource Management (ARM) is an integrated system for organizing
resources, distinguishing between them, and allocating them throughout a model. ARM provides a
convenient and straightforward method for defining complex resource requirements for items as
well as a flexible set of rules for how resources get allocated to them. And it provides automated
methods for quickly changing resource information and generating statistical reports.
The ARM system is an advanced tool that is only available in the ExtendSim AT and ExtendSim
Suite packages.
The ExtendSim database feature provides the ARM systems architectural framework. ARM uses an
Advanced Resources database to represent, manage, and track the status and properties of
resources, pools, and groups, as well as allocation and release rules. The database is automatically
created when a Resource Manager block is added to a model.

In the ARM system, resources are records that are stored in the Resources table of the Advanced
Resources database.

The ARM system can co-exist with the other resource modeling systems (items as resources and
non-ARM resource pools). Thus models can use a mixture of resource modeling methods.

How Advanced Resource Management works


The basic mechanism for allocating and releasing resources using ARM is:
1) The model has multiple types of resources with specified properties
2) Resource requirements are defined; each resource requirement is a specification of how many
and what types of resources are needed
3) A Queue is set to be an advanced resource queue
4) Depending on their needs, items in the Queue request resources, then wait until their resource
requirements can be satisfied
5) Once resources are allocated to items, the items are released from the Queue
6) Resources remain allocated to items until the resources are released by Resource Pool Release
blocks
7) Shift blocks can be used to bring advanced resources on and off schedule
8) The management of resource states and quantities and the allocation and release of resources is
controlled by the Resource Manager
9) As the model runs, discrete transactions occur between the advanced resource blocks and an
internal advanced resource database. These transactions are driven by item arrivals in the
Queue and Resource Pool Release blocks, shift changes, and resource pool quantity changes.

The primary ARM transactions are illustrated and described in more detail starting on page 261.

Discrete Event

In addition to the database, several blocks (listed on page 260) form integral parts of ARM. The
Resource Manager is the central component of the system. It provides a dialog-based interface for
creating and managing resources, requirements, policies, and release rules. Other blocks (Queue,
Queue Equation, Resource Pool, Resource Pool Release, Shift, and Statistics) control or report various
aspects of resources. Together with the ExtendSim database feature, these blocks comprise the
ExtendSim Advanced Resource Management system.

230

Resources and Shifts


Tutorial

Definitions
The following definitions and abbreviations are used regarding the ARM system. Italicized words
are defined in the table.
Term

Definition

Discrete Event

Advanced resource (AR) A resource that is part of the Advanced Resource Management (ARM) system.
Filtering condition
(FC)

A specified condition of a resource or group property that gets saved. A filtering condition becomes a component of a quantity expression. It is thus the
smallest (atomic) component of a resource requirement. When applied during
the simulation run, the filtering condition limits the collection of resources
to those that meet the condition.

Group

A means for organizing resources. Groups can be used to control which


types of resources are allocated to and released from items. Although a
resource can only belong to one pool, it can be a member of many different
groups.

Properties

A method for distinguishing one resource, group, pool, or item from the others.

Quantity expression
(QE)

A component of a resource requirement that specifies the desired number of


resources to be selected from a list of those that meet the filtering conditions.
A resource requirement has a quantity expression that consists of a specified
quantity of one or more filtering condition results.

Resource

The means by which process activities and operations are performed. Typical resources include equipment, personnel, space, energy, time, and money.

Resource order

A request by an item to satisfy a resource requirement. This causes the


Resource Manager to assign the item a unique Resource Order ID.

Resource Order ID

The location (record index) of a resource order in the Orders database table.

Resource pool

A means for organizing resources. Pools can be used to control which types
of resources are allocated to and released from items, as well as to capture
statistics. A resource can only belong to one pool but it can be a member of
many groups.

Resource requirement
(RR)

A named rule that specifies how many of what types of resources to allocate
to an item. The rule could be simple (1 washer/waxer is required per car) or
it could be a complex expression involving several resources, groups, and so
forth. A resource requirement can be composed using one or more quantity
expressions.

Resource release rule

A customizable mechanism for controlling which resources to release when


items enter Resource Pool Release blocks. Each resource release rule is associated with a specific resource requirement and is designed to control the
release of resources at the quantity expression level of the resource requirement.

Tutorial
The purpose of the following tutorial is to highlight some of the advantages of advanced resources
and illustrate ARM capabilities that could not easily be accomplished using the Resource Item or

Resources and Shifts


Phase I: Adding ARM to a model

231

Resource Pool methods. To do this, the tutorial focuses on the problem of worker training strategies. In particular, the Final Car Wash model is modified and experimented with to determine how
many people to hire and what mix of skills (only washing cars, only waxing cars, or cross-trained to
do both) the workers should be trained on.
The tutorial is divided into three phases, described below.
Phase I: Adding ARM to a model
This phase just adds advanced resource capability to the Final Car Wash model, without changing
any underlying assumptions. It starts on page 231.
1) Adding a Resource Manager block to the model
2) Changing the dialogs of the models Resource Pool, Queue, and Resource Pool Release blocks
to supply, require, and release advanced resources, respectively
Phase II: Create more complex requirements and specialized resource types
Starting on page 235, Phase II shows how to create complex resources and resource requirements.
2) Using the Resource Manager to create two complex resource requirements
3) Creating a new string attribute that links to the table of resource requirements and changing
blocks to accommodate it
Phase III: Using the Resource Manager to create pools and requirements
The final phase shows how to use the Resource Manager block to create pools, resources, and
resource requirements. It starts onpage 241.
1) Creating a pool and resources using the Resource Manager block
2) Defining a new resource requirement

To understand the ARM system, it is important to go through the tutorial. For comparison to your
work, example models that correspond to the tutorial are located at Examples\Tutorials\Discrete
Event\Advanced Resources. Also see the Auto Club Emergency Service model located at Examples\Discrete Event\Resources and Shifts\Advanced Resources.

The following tutorial assumes that you have completed the Discrete Event Tutorial (Car Wash)
and that you are comfortable working with string attributes and the ExtendSim database. These
topics are covered in the User Guide.

Phase I: Adding ARM to a model


This phase changes dialog settings of the blocks in the Final Car Wash model, causing the model
to use advanced resources without changing its basic behavior. When finished, running the new
model should result in exactly the same outputs as running the original model.

Add the Resource Manager block


The advanced resource capability is not enabled until the model has a Resource Manager block.

Open the model named Final Car Wash (\Examples\Tutorials\Discrete Event)


Save the model as Final Car Wash RM so you dont overwrite the original model
Place a Resource Manager block (Item library, ExtendSim AT and ExtendSim Suite only) in the
Final Car Wash RM model. The block can be placed anywhere, but the top of the model will
provide easiest access.

Discrete Event

1) Creating three resource pools to represent three types of resources

232

Resources and Shifts


Phase I: Adding ARM to a model

Label the block Resource Manager

In the dialog of the Resource Manager block, notice that, other than the Resources tab, the tabs are
disabled. The tabs in this block are meant to be used sequentially. Until the model has advanced
resources, the other tabs will remain disabled.

Resource Pool
The next step is to create an advanced resource pool and some resources. This is done by changing
the settings in the Resource Pool block that is already in the model.

Because using them automates many of the steps, Resource Pool blocks provide a quick and efficient entry to using the ARM system.

Discrete Event

Change block settings


In the dialog of the models Resource Pool block (labeled Attendant Resource):

Change the resource pool behavior to: advanced resource pool


Create a new pool:
Select Advanced pool name: New advanced resource pool
In the dialog that appears, name the advanced resource pool Washer/Waxer
Define the properties for the pools
resources:

Initial status: Idle (the default)


Shift: none (the default)
Initial number: 2
The settings should now look like the screen
shot shown here.

Click OK to close the blocks dialog


A message appears warning that the properties of this pool have been changed. Click Yes to
accept the changes and close that dialog.
The resource pool of 2 who can wash and wax cars has now been replaced by an advanced resource
pool of 2 who can wash and wax cars.
What happened
This process created a new advanced resource pool, named Washer/Waxer, that has 2 resources.
Both resources have an initial status of Idle and no Shift. When the pool was created, the ARM
system automatically named the resources Washer/Waxer_1 and Washer/Waxer_2, stored them as
records in the Resources table of the Advanced Resources database, and listed them in the Resource
Manager block so they can be edited. (As will be discussed later, the ARM system also automatically created a default requirement for the pools resources.)
Look at the Resource Manager: Resources tab
To see how the Washer/Waxer pools resources are stored in the Resource Manager:

Go to the Resources tab of the Resource Manager block


Select Mode: Edit resources

Resources and Shifts


Phase I: Adding ARM to a model

233

In the Set resource filters frame:


Choose Pool name: Washer/Waxer as the filter
Leave the rest of the filtering fields as they are
The Edit filtered resources table at the bottom now lists the two resources that are in the Washer/
Waxer pool, along with their initial properties. This table is where resource properties can be
edited.

2 resources

Do not change any of the initial properties


Click OK to close the Resource Managers dialog
Queue

Change block settings


In the dialog of the Queue block (Wait for Attendant):

Change the queue behavior to: advanced resource queue


Choose Get resource requirement from:
List selection (the default)

In the list selection popup, be sure that RR_Washer/Waxer is selected, as shown above.
Click OK to close the dialog
This tells the Queue that it must hold each car until the resource(s) specified by RR_Washer/
Waxer are available. Requiring one Washer/Waxer per car is the default resource requirement.
What happened
When a Resource Pool block is used to create a pool, the ARM system automatically creates an
associated default resource requirement. The default is that one resource is required from the associated pool in order for the item to be released from the Queue. And the default requirement is
given the same name as the resource pool, preceded by RR_. Thus the default resource requirement is named RR_Washer/Waxer and, again by default, each car requires one Washer/Waxer. (If a
more complex resource requirement is needed, it must first be defined on the Resource Managers
Requirements tab, as discussed in Phase II of this tutorial.)
If a pool has been created using a Resource Pool block, the ARM system automatically specifies a
default resource requirement, with a quantity of 1 resource, as being required for each item. If the
pool is instead created using the Resource Manager block, this automated process is optional. For
more information, see Default resource requirements on page 258.
Look at the Resource Manager: Requirements tab
It is helpful to see how the Resource Manager handles resource requirements.

Go to the Requirements tab of the Resource Manager block

Discrete Event

The Queue is where item/cars wait until the required types of resources, in the specified quantities,
are available.

234

Resources and Shifts


Phase I: Adding ARM to a model

Check to enable Create/modify resource requirements (the top check box)


The dialog expands to show the resource
requirements popup, some operators, and an
expression area. This frame is where resource
requirements can be created or edited, but it is
also useful for getting a quick look at the existing requirements. For instance, RR_Washer/
Waxer is the name of the default resource requirement that was automatically defined when the
new pool was created. The expression area indicates that RR_Washer/Waxer requires 1 resource
from the Washer/Waxer pool for each car to exit the Queue.

Click OK to close the Resource Managers dialog


Resource Pool Release

Discrete Event

In the dialogs of both of the Resource Pool Release blocks (Release Attendants):

For the release behavior, select Release: advanced resources


For the release rule, choose Release: all resources (the default setting)
Click OK
Save and run
So that the changes to the Advanced Resources database will be saved, save your Final Car
Wash RM model.

Run the simulation (it will run a lot faster if you turn off animation).
The new model is now fully converted to run using advanced resources but retains the information
of the original model. If the same random seed value is entered in the Run > Simulation Setup >
Random Numbers tab, the converted model will produce identical results to the original model.

For extra assurance, compare the results of this phase of the tutorial to the Final Car Wash RM1
model located at Examples\Tutorials\Discrete Event\Advanced Resources.

In order for the new pool and its resources to be saved, the model must be saved. This action also
saves the Advanced Resources database, which contains all the information about the pools and
their resources.
What happened
As each car gets to a Resource Pool Release block, its release rule causes all resources (in this case, 1
Washer/Waxer) to be released. The Washer/Waxer resource then becomes idle and is made available for the next item waiting in the Queue.
Look at the Resource Manager: Release Rules tab
The Resource Pool Release blocks have three mechanisms for releasing advanced resources. The
options are to release:
All resources
All resources from a specific resource order
Resources using a custom rule

Resources and Shifts


Phase II: Organizing resources

235

While not needed in this tutorial,


custom release rules can be created and saved on the Resource
Managers Release Rules tab. For
more information, see Release
rules on page 250.
Look at the Resource Manager: Policies tab
When a resource transitions to the idle status, it
immediately attempts to service one of the items
waiting for advanced resources. If multiple items
are waiting, they are serviced in an order governed by settings on the Resource Managers Policies
tab.

While not needed for this example, the Policies tab provides additional flexibility when building
advanced resource models. For more information, see Policies on page 251.

Phase II: Organizing resources


If the ARM system only substituted for the Resource Pool method it wouldnt be very useful. The
advanced resource management system provides a mechanism for implementing far more complicated resource requirements. The next part of the tutorial has two purposes:
Showing how to allocate resources by type
Using attributes to set resource requirements
These are described below.
Allocating resources by type
Phase II of the tutorial has a generalist who can both wash and wax cars plus two specialists, one of
whom can only wash while the other can only wax. The purpose of the simulation is to explore
how many workers need to be cross-trained as generalists.
Because some resources are specialized, complexity will be added to the resource allocation logic:
Cars that need washing only will require either one Washer or one Washer/Waxer
Cars that need washing and waxing will require either one Washer and one Waxer or one
Washer/Waxer
To enable this, three different resource pools will represent the different skill sets of the car wash
workers. The first pool consists of workers who can only wash cars, the second pool consists of
workers who can only wax cars, and the third consists of workers who can both wash and wax cars.

While not necessary for this tutorial example, resources from different pools can be organized into
groups with rankings and skill levels. This is discussed in Groups on page 246.

Using attributes to set resource requirements


While Phase I showed how to select the resource requirement from a popup list, the following section shows how to set the resource requirement as a string attribute and use that attribute to spec-

Discrete Event

The default setting is that items are sorted first by the ranking of the resources that they require
and secondarily by their arrival time to the queue. (Since the default resource requirement rank is
1, and absent any other conditions the advanced resource queue behaves as if items are released in
first-in, first-out order, the sorting order has no effect on the cars waiting in this model.)

236

Resources and Shifts


Phase II: Organizing resources

ify item requirements cars that require either one Washer or one Washer/Waxer and cars that
require either one Washer/Waxer or both a Washer and a Waxer.

Resource Pools
Three pools are required for this phase of the tutorial: Washer/Waxer, Washer, and Waxer. Each
pool will have one type of resource (washer/waxer, washer, or waxer) available for the model.

This tutorial uses three Resource Pool blocks to represent the three pools. However, Resource Pool

blocks are optional in the ARM system and pools can also be created using the Resource Manager,
as shown in Phase III.

Discrete Event

Change the original Resource Pool


This phase of the tutorial makes additional changes to the model created in Phase I.

Open (or continue using) the Final Car Wash RM model you created in Phase I
In the dialog of that models Resource Pool block (labeled Attendant Resource):
Change the initial number to 1
Change the label of the block to Washer/Waxer
Click OK to close the dialog
A dialog appears with a message that this action will change the properties in the pool Washer/
Waxer. Click Yes to acknowledge and accept the change.
Add two additional pools
The next step is to add resources that are specialized:

Add a second Resource Pool block to the model. (The easiest way to do this is to Edit>Duplicate the existing Resource Pool block, which you labeled Washer/Waxer.)

In the blocks dialog, define the advanced resources as follows:


Select Advanced pool name: New advanced resource pool
In the dialog that appears, name the advanced resource
pool Washer

Enter Initial number: 1 but leave the rest of the settings at the default

Change the label of the block to Washer


Click OK to close the dialog
If the new Resource Pool block is a duplicate of the original, a dialog appears with a
reminder that the properties of this pool have been changed. Click Yes to accept the
changes and close that dialog.

Add a third Resource Pool to the model and repeat the above process, except:
Name the third advanced resource pool Waxer
Change the label of the block to Waxer
Save your Final Car Wash RM model

Resources and Shifts


Phase II: Organizing resources

237

Requirements tab of Resource Manager


Some cars need only to be washed and some need waxing as well as washing. The next step is to
define those resource requirements. Now that there are three Resource Pool blocks in the model,
there are also three default resource requirements: RR_Waxer, RR_Washer, and RR_Washer/
Waxer. These are listed in popup menus in the Queues dialog and in the Create/modify resource
requirements frame of the Resource Managers Requirements tab. (Default resource requirements
are discussed more on page 258.)

The ARM system created default resource requirements as well as the default building blocks (the
filtering condition and quantity expression) that compose that resource requirement.

Cars requiring washing only


These cars can be washed by either a washer/waxer or by a washer. This model then needs a new
resource requirement that will request either one washer/waxer or one washer.

Go to the Requirements tab of the Resource Manager.


If not already done, check Create/Modify Resource Requirements. This enables a section
Notice that the popup list of resource requirements has the three default resource requirements
(each of which is 1 resource from the pool) that were automatically created for the three pools in
this model.
To create a new resource requirement:

Select Choose resource requirement: New resource requirement. The popup changes to
unsaved resource requirement a reminder that the requirement must be saved to be usable.

From the popup labeled Insert quantity expression, choose


1 from Washer/Waxer. This places that quantity expression in
the expression area.

Mistakes can be cleared clicking Clear Last or Clear All.


Click the OR button to cause that operator to be placed in the expression area
From the Insert quantity expression popup, choose 1 from Washer. This places that quantity
expression in the expression area after the OR operator.
The expression should look like this:

Click the Save As button


In the dialog that appears, name the requirement Wash Requirement
This creates a new resource requirement named Wash Requirement. The expression area indicates
that this requirement can be satisfied using either 1 resource from the Washer/Waxer pool or 1
resource from the Washer pool. If both the resources are available, the Washer/Waxer resource will
be used first.
The expression is evaluated from left to right. Thus resources towards the left of the expression will
be used before those on the right. This evaluation affects model results, as discussed on page 240.
Cars also requiring waxing
The next step is to create a new resource requirement for the cars that also want waxing. Those cars
can use either one washer/waxer or one washer and one waxer.

Discrete Event

where operators and logical expressions are used to define requirements.

238

Resources and Shifts


Phase II: Organizing resources

To create the new resource requirement:

Select Choose Resource requirement: New resource requirement


To open a parenthesis in the expression area, click the ( button, the left-most button in the
row of buttons above the expression area. This is the left grouping operator for the expression.

From the Insert quantity expression popup, choose 1 from Washer


Click the AND operator
From the Insert quantity expression popup, choose 1 from Waxer
To close the parenthesis, click the grouping operator )
Click the OR operator
From the Insert quantity expression popup, choose 1 from Washer/Waxer

Discrete Event

The expression should look like the screenshot to the right.

Click the Save As button


Name the requirement Wash/Wax Requirement
When executed, this requirement will first attempt to allocate one resource from the Washer pool
and one resource from the Waxer pool. If these resources are not both available, it will then
attempt to allocate one resource from the Washer/Waxer pool.

Click OK to close the dialog


Create a string attribute
In the original Final Car
Wash model, the preference
for washing only or for washing and waxing is set as a
string attribute named Preference. By pointing to either
row 1 or 2 in a table in the
Executives Item Attributes
tab (shown at the immediate
right) the attribute routes cars
to the correct bay.

Resource Requirements table


of Advanced Resources database

String values table in Executive


blocks Item Attributes tab

As you will see below, the two


new resource requirements (Wash Requirement and Wash/Wax Requirement) are in records 4 and
5, respectively, of the databases Requirements table, shown above right.
This section shows how to create a new string attribute that points to records 4 and 5 in the database table. The goal is to link the Executives string values table to the databases table of resource
requirements. This will give the Resource Manager a mechanism to point to the records that contain the resource requirements for the model.

An alternative method would be to use a Lookup table as is done in the Auto Club Emergency Service model located at \Examples\Discrete Event\Resources and Shifts\Advanced Resources

When the string attribute is changed, settings in the following blocks must also be changed to use
the new attribute:

Resources and Shifts


Phase II: Organizing resources

239

Set
Random Number
Queue
Select Item Out

These changes are only necessary because the attribute needs to be changed. If the model had been
originally constructed to use the ARM system, there would be no reason to make these changes.
Set block
In this model, the attribute is set in the Set block (Set Attribute). In the blocks dialog:

In the Property Name column, select the Preference cell to open the popup menu
From the list of properties, select New String Attribute
Name the new attribute Requirements and click OK. This opens the Executive blocks Item
Attributes tab. The string values table on the right is now named Requirements.

requirements that have been created for this model.

Click Link. This causes the Executives Item Attributes tab


to appear. It also causes the Resource Requirements table to
be linked to the Requirements string attribute, as indicated
in the string values table shown at right.

Close the Executives dialog. Notice that in the Set blocks dia-

Table with attribute strings

log the Property Name is now Requirements.

Close the Sets dialog


Save your model
Random Number
The resource requirement now comes from the value of a string attribute named Requirements.
However, the Random Number block originally looked at the Preference attribute to determine
how often the requirement would be for wash only or for wash and wax. The block must be
changed to use the correct values of the new string attribute.

In the dialog of the Random Number block (Preference Percentage):


In row 0, select Wash Requirement from the popup. That requirement will now be selected
75% of the time.

In row 1, select Wash/Wax Requirement from the popup. That requirement will be
selected 25% of the time.

Close the dialog


Queue
The Queue is where items in this model get their resource requirements. Instead of from a list
selection, the block must now get the resource requirement from the new string attribute.

Discrete Event

In the string values table (Requirements), click the Link button to open the Link dialog
Choose Link To: Database Table
Select the database named Advanced Resources and click OK
Choose Table Name: Resource Requirements. This displays a table listing all the resource

240

Resources and Shifts


Phase II: Organizing resources

In the dialog of the Queue block (Wait for Attendant):

Choose: Get resource requirement from: Attribute value


For the attribute name, select
Requirements

Close the dialog


Select Item Out
The Select Item Out block is where items get routed to one bay or the other. This step is to select
the item routing method using the new string attribute.
In the dialog of the Select Item Out block (Select Route):

For the selection condition, choose Select output based on: property (it should already be

Discrete Event

selected)

For the property, choose the string attribute Requirements


In the Requirements column of the Select options table:
For row 0, choose Wash Requirement
For row 1, choose Wash/Wax Requirement
Notice that the To Block column indicates where cars
with that requirement will be routed.

Select Item Out table

Close the dialog


Save and run
Save your model
Run the simulation and observe the results

For extra assurance, compare your model to the Final Car Wash RM2 model located at Examples\Tutorials\Discrete Event\Advanced Resources.

Results
Go to the Results tab of the Resource Manager block
In the resource results frame, examine the results displayed in the table
Notice that Washer/Waxer_1 and Washer_1 are much more heavily utilized than Waxer_1. This is
because:
Waxer_1 can only wax cars and cars that need to be waxed represent only 25% of the cars coming into the car wash.
Washer/Waxer_1 and Washer_1 can both be used when cars only need washing as well as when
they need washing and waxing. Thus the remaining workload is distributed evenly between
Washer/Waxer_1 and Washer_1.
How the resource requirement expression is composed impacts which resources get selected.
Since the ARM system attempts to satisfy resource requirement expressions in left to right order,
and the model contains resource requirements that use OR logic, changing the way the statement
for the requirements is written impacts the behavior of the system.
For example, there are three possible ways the Wash Requirement could have been written:

Resources and Shifts


Phase III: An alternate method for creating pools

241

1) 1 from Washer/Waxer OR 1 from Washer


2) 1 from Washer OR 1 from Washer/Waxer
3) 1 from Washer
Likewise, there are two possible ways the Wash/Wax Requirement could have been written:
1) (1 from Washer AND 1 from Waxer) OR 1 from Washer/Waxer
2) 1 from Washer/Waxer OR (1 from Washer AND 1 from Waxer)
Thus from a resource requirements perspective alone, there are six (3 x 2) different ways to configure this model.
Try experimenting with each configuration to determine which one produces the best system performance. (The Scenario Manager would be especially useful for doing that.) Use the Event Logging tab of the Resource Manager block to generate a resource transaction log in order to observe
which resources are getting allocated to specific orders.

Gathering statistical information

The Resource Managers Results tab contains individual and pool level statistics for advanced
resources in the model. These statistics apply to the current simulation run and include utilization, the number of resource orders serviced, and so forth. The same information will be displayed if a Statistics block (Value library) is added to the model before the simulation runs.
The Results tab of Resource Pool blocks provide statistics on the total number of resources in the
pool, how many are in use or are available, and their average utilization.
If the Resource Managers Event Logging tab is enabled when the simulation is run, it records
specified information about the resource transactions that occurred. The type of transaction is
user-selected in the dialog. To view the results, click View Database, then select and open the
Resource Transaction Log table.

Phase III: An alternate method for creating pools


Resource Pool blocks are useful for quickly creating an ARM system. Additionally, the default
resource requirements that are automatically created when a those blocks are used can be helpful.
However, models would soon get too busy if Resource Pool blocks were the only method for creating pools. And it is unlikely that every resource requirement would be for only 1 of one type of
resource, as happens with the default requirements.
This phase of the tutorial shows how to use the ARM system without the help of Resource Pool
blocks and their default resource requirements.

Use a Resource Manager to create a pool and resources


Resource Pool blocks provide a quick entry into the ARM system. The Resource Manager block,
however, is more flexible and allows for more robust configurations.
Create the pool
Open the Final Car Wash RM model that was used in the previous two phases

Go to the Resources tab of the Resource Manager block


Choose Mode: Create resources

Discrete Event

The ARM system provides extensive data for analysis and there are a number of ways to observe
and analyze results for this model:

242

Resources and Shifts


Phase III: An alternate method for creating pools

In the Specify default resource properties frame:

Select Pool name: new resource pool


In the dialog that appears, name the pool My New Pool
A second dialog asks if you want to create a default resource
requirement for the new pool. (Default resource requirements are discussed on page 258.)

Click No. (It doesnt matter if you accidentally click Yes; the default resource requirement
can be ignored or deleted).
In the Resources tab dialog, notice the following:
The option to Make names distinct is checked by default
The default name for the pools resources is the same as the pools name; this is the root
name of individual resources created for the pool

Discrete Event

Create the resources


Change the name and set the properties
Whichever name is entered in the Resource name field will be the root name for all the resources
created for this pool. In addition, whichever default properties are set will apply to every resource
in the pool. (Names and properties can be changed later, as seen below.)
In the Specify default resource properties frame:

Enter Resource name: My Resources


Do not change the default properties
Create the resources
In the Create resources with the specified properties frame:

Enter 5 as the number of new resources for the pool


Click Create
Five resources are created and displayed in the table. Notice
the following:
Since Make names distinct is checked, each resource
has the root name (My Resources) followed by a different number.
Every resource has the default properties.
Modifying resource properties
By default, the newly created resources all have the same properties and they all use the same root
name. There are two methods for changing resource properties, including names:
1) Change the properties in the Create resources table while the tab is still in Create resources
mode. Only the newly created resources for the selected pool will appear in the table. If you
close the block or switch modes, the table will reset to empty.
2) Change the mode to Edit resources, filter for the pool (leaving Resource name blank), and change
properties in the Edit filtered resources table. All of the resources for the selected pool will
appear in the table.

Resources and Shifts


Phase III: An alternate method for creating pools

243

Once resources have been created, changes to their properties are automatically and immediately
saved to the database. (The model file must still be saved.)

It is not necessary to change any resource properties for this tutorial


Save the model
In order for the new pool, its resources, and their properties to be saved:

Save the model


This action also saves the Advanced Resources database, which contains all the information about
the pools and their resources.

Create a resource requirement


The previous section purposefully chose to not have the ARM system create a default resource
requirement for the pool. This section shows how to manually create a resource requirement.
Resource requirements are built in three steps.

2) The second step is to define and save a quantity expression. Quantity expressions are logical
statements consisting of the desired number of resources and one or more filtering conditions,
such as 2 resources from a particular pool.
3) The goal is to arrive at a resource requirement. In the simplest case, the resource requirement
could be the same as the quantity expression. It could also be a complex expression that selects
resources with specific properties from several pools and/or groups.

This section of the tutorial gives a quick overview. For more information about creating resource
requirements, see Resource requirements on page 252.

Create a filtering condition


The Resource Managers Requirements tab has three check boxes that are unchecked by default.
Because resource requirements can be very complex, it is easiest to work in this tab if only one
frame is open at a time.
In the Requirements tab:

Check the box to enable Create/modify filtering conditions.


Choose filtering condition: new filtering condition
The popup changes to unsaved filtering condition and the text is in red a reminder that the filCreating a new filtering condition
tering condition must be saved to be usable.

Discrete Event

1) The first step is to create and save a filtering condition. A filtering condition is a specified
aspect of a resource or group property. For instance, a filtering condition could be that the
resource comes from a particular pool. Think of creating filtering conditions as a way to make
collections of resources. When used in a quantity expression, filtering conditions limit the collection to a selected list of resources that meet the specific conditions.

244

Resources and Shifts


Phase III: An alternate method for creating pools

Choose to Filter using properties of:


resources

Using the popups, create the expression


Property: Pool = My New Pool

Click Save As and save the filtering condi-

Creating a filtering condition

tion as Any New Pool Resources

Click Test. This opens the Viewer, displaying which resources the filtering condition would
select at this time. (New resources might be added, or existing ones deleted, before the filtering
condition actually gets applied.)

Close the Viewer


Disable the Create/modify filtering conditions frame by unchecking its check box

Discrete Event

Create a quantity expression

Check the box to enable Create/modify quantity expression


Choose quantity expression: new quantity expression
The popup changes to unsaved
quantity expression and the text is in
red a reminder that it must be saved
to be usable.

Enter Quantity = 2
Click SELECT
This places the expression in the expression area. The expression indicates that two resources will
be selected. Since there is no limit on the type of resources, any two resources from the Resources
table could be chosen.
To limit the resources to those specified by a filtering condition:

Click WHERE, causing it to be placed in the expression area


From the Insert resource filtering condition popup, choose Any New Pool Resources
The expression indicates that
two resources will be selected
from the Resources table where the pool name is My New Pool.

Save the quantity expression as 2 from My New Pool


A dialog appears asking if you want a resource requirement to be created for this quantity expression. The choices are:
1) Choose Yes if you want the resource requirement to be the same as what is described in the
quantity expression. In this case, the resource requirement would be for any two resources as
long as they were from the pool named My New Pool.
2) Choose No if you want a resource requirement that is more complex than what is described in
the quantity expression.
(For more information about default resource requirements, see page 258.)

In the dialog, choose No. (If you instead chose Yes, the resulting resource requirement can be
ignored or deleted.)

Resources and Shifts


Additional information

245

Click Test. This opens the Viewer, displaying which resources might be selected. As indicated in
the table, without any other conditions being present the system will choose the first two
resources in the list.

Close the Viewer


Close the Create/modify quantity expression frame by unchecking the check box
Create a resource requirement
Check the box to enable Create/modify resource requirements

Choose resource requirement: new resource requirement


The popup changes to unsaved resource requirement and the text is in red a reminder that the
requirement must be saved.

Requirement

Click Test. The Viewer indicates which resources will be selected to fulfill the requirement. All
other things being equal, one washer will be selected or the first two resources in My New Pool
will be selected.
For more detailed information about creating resource requirements, see Resource requirements
on page 252.

The purpose of Phase III was just to show how to create pools, resources, and resource require-

ments using the Resource Manager block. Since the new resource requirement is not used in the
model, it has no affect on model behavior.

Even if a model has no Resource Pool blocks, it should probably have Resource Pool Release
blocks. Use of Resource Pool Release blocks is optional only if the resources are considered to be
consumed and the accumulation of excess records for the non-disposed resources does not cause
concerns for model size and memory usage.
Dont lose your work
The new resource requirement is automatically saved in the Advanced Resources database. However, for the database to be saved:

Save the model

You can compare your model to the Final Car Wash RM3 model located at Examples\Tutorials\Discrete Event\Advanced Resources.

End of the tutorial


For another advanced resources example, see the Auto Club Emergency Service model; it is located
at Examples\Discrete Event\Resources and Shifts\Advanced Resources.

Additional information
The following areas were not covered, or not completely covered, in the tutorial; they are discussed
below.
Groups

Discrete Event

Select Insert quantity expression: 1 from Washer


Click OR
Select Insert quantity expression: 2 from My New Pool
Save the new resource requirement as New Resource

246

Resources and Shifts


Additional information

Resource orders
Status and transitions
Properties of resources, pools, groups, and items
More information about creating a resource requirement
Release rules
Policies

Groups
Groups provide a means for organizing resources from different pools or from the same pool. If
included as part of a filtering condition, groups can be used to control which resources are selected
for a resource requirement.

Although a resource can only belong to one pool, it can be a member of many different groups.
Discrete Event

Creating groups and grouping resources


To create a new group that includes some resources:

Go to the Resources tab of the Resource Manager block


Select Mode: Manage groups
Optional: in the Set resource filters frame, choose filters to limit which resources are displayed
In the Create/modify groups frame, choose Group: New resource group
Name the new group
In the dialog that appears, choose whether or not the system should create a default resource
requirement for the group. This option is explained in Default resource requirements on
page 258.

In the Select resources to group frame, check the Select box for each resource you want to include
in the group

Click the arrow button. The button, shown at right, is located between the Select
resources for groups and the Create/modify groups frames. Clicking the button causes the
selected resources to become members of the group.
Assigning properties to groups
As discussed on page 250, each member of a group can be
assigned a Skill Level and/or a Resource Rank. These group
properties are used to prioritize which resource to select first
from the group, when a group requirement is executed.
Any number, including 0 (zero) and decimals, can be assigned to a group member as its Skill Level
or Resource Rank.
Deleting groups or their members

Go to the Resources tab of the Resource Manager block


Select Mode: Manage groups
Optional: in the Set resource filters frame, choose filters to limit which resources are displayed
In the Create/modify groups frame, choose the group you want to delete

Resources and Shifts


Additional information

247

To delete the entire group, click Delete Group


To remove only certain members, check the appropriate Select boxes and click Remove
Selected Members

Deleting a group and its members, or removing individual members from a group, does not delete
the resources.

Using a group in a resource requirement


A filtering condition can be created that filters on a group property, either Skill Level or Resource
Rank. That filtering condition can then be used as a component of a quantity expression, but only
in conjunction with a second filtering condition that filters on a specific resource group. For more
information, see Using group filtering conditions on page 256.

Resource orders

A resource order is the association of a particular item with a specific resource requirement; it is represented by a unique Resource Order ID (discussed on Item properties on page 250). Resources
are allocated to orders and each item can have multiple resource orders.
When an item gets to a Queue, the Queue makes a request to the Resource Manager for the
resources specified by the items resource requirement. The Resource Manager then:
Converts that request into a resource order
Creates a corresponding record in the Resource Orders table that refers to the resource request
and identifies which Queue the order came from, when it was ordered, and so forth
Assigns a Resource Order ID to the item
Attempts to satisfy the items resource requirement
When a resource is successfully assigned to an item, the Resource Order ID field in the
Resources table is updated. That information is used to track the resources last allocation.
This architecture allows the ARM system to track data and calculate statistical information such as
when a resource was requested and the average length of time it took to satisfy.
For more detailed information, see Primary transactions for ARM on page 261.

Status and transitions


A resources status provides information about its current state. The status usually changes dynamically during a simulation run. Resources can have any one of five different status settings:
1) Idle
2) Busy
3) Off Shift
4) Down
5) Disabled

Discrete Event

If each item could only have one resource requirement, and if each resource requirement could
only be selected by one item, statistical information could be obtained just from the resource
requirements usage. Instead, the ARM system allows each item to have multiple resource requirements and even the same resource requirement multiple times but at different Queues. Additionally, several different items can each have the same resource requirement. To track data and
calculate statistical information, the ARM system uses resource orders.

248

Resources and Shifts


Additional information

Idle or Disabled can be set as the initial status when the resource is created or edited. Busy is a function of the resources use in the model. Off Shift and Down are controlled by the Shift and Shutdown blocks (Item library), respectively. The Resource Managers Results tab gives information
about the amount of time each selected resource was busy, idle, and so forth.
Except that a resource cannot transition from disabled to down, each status can transition to any of
the others. This gives a total of nineteen status transitions. To track status transactions, check
Resource status transition in the transaction type table on the Resource Managers Event Logging
tab.

Properties

Discrete Event

Individual resources, pools, groups, and items each have their own properties. Properties provide a
means to distinguish between them and characterize their behavior. As the simulation runs, information about properties is displayed in the Resource Managers Results tab.
Resource properties
The Resources table of the Advanced Resources database stores each resource as a distinct record,
sorted by Resource ID. The fields of this table represent resource properties, which can be static or
dynamic.

The ARM system has a list of pre-defined static and dynamic resource properties. Custom resource
properties can also be added, as discussed below.

Static properties
Static properties are specified when the resources are created, either in the Resource Pool block or
on the Resources tab of the Resource Manager. Their values remain fixed during the simulation
run.
The Resource ID property is automatically defined by the system. It uniquely identifies the resource
and is not modifiable by the modeler. Other static properties are definable by the modeler:
Resource name. The name does not have to be unique unless Make names unique (Resources tab
of Resource Manager block) is checked when the resource is created.
Pool. The pool name must be unique.
Initial status: idle or disabled.
Shift, if the Shift block (Item library) is present in the model.
Groups. If a resource is a member of more than one group, the Groups column of the Select
resources to group table (Resources tab, Manage groups mode) will display a popup menu listing
the groups.
Cost per unit of time.
The time unit used for costing.
Cost per use.
These static properties are also part of the filtering conditions used to create or modify resource
requirements.
Dynamic properties
As the simulation runs, the ARM system tracks status information and calculates resource statistics. This data is stored as dynamic resource properties, which include:
Status and status start time

Resources and Shifts


Additional information

249

Pending status and pending status start time


Total orders serviced
Total idle/busy/disabled status time
Total down or off-shift time
Utilization
Total cost
Aside from being useful for analysis, these dynamic properties are made available when creating or
modifying filtering conditions.
Custom resource properties
In addition to the dynamic resource properties that are pre-defined in the ARM system, custom
dynamic resource properties can be added.
To create a custom dynamic resource property:

In the Resource Managers Resources tab, choose either


Check the box to Display groups, pools, and properties

In the new frame that appears to the right, change its


mode from Groups to Properties

Click Add New and name the new property


Select a data type from the popup menu shown at right
The new property is now available for any resource. It will
be displayed in the property popup menu when a resource
filtering condition is created (Requirements tab of Resource Manager block).
Editing resource properties
To edit resource properties, choose Mode: Edit resources in the Resource Managers Resources tab.
In this mode, the tab is divided into two sections the top is for narrowing the list of resources
that will be displayed in the table that is at the bottom.
For individual resources, change the appropriate settings in that resources row
To change one or more properties for several resources:

Choose whether column heading selections should apply only to the selected rows or to all
rows

If selected rows is chosen, check the Select boxes for the resources to be changed
Use the popup menu in the column heading to choose the new setting. For example to
change all of the displayed resources to the disabled state, choose that setting in the Initial
Status column.

The fields in the Groups column are only for information; they cannot be changed.
Pool properties
A pool can have an ID, a Name, and a Parent ID. The Name and Parent ID are user-modifiable.
The Name must be unique. Pools can be structured hierarchically; if one pool is part of another
pool, the Parent ID identifies the next highest pool in that hierarchy.

Discrete Event

Mode: Create resources or Mode: Edit resources

250

Resources and Shifts


Additional information

The Pools table of the Advanced Resources database lists all the pools in the model as well as a
summary of the results from the simulation run (total idle time, total utilization, and so forth) for
each pool.
Group properties
Group properties are stored in the Group Resources table of the Advanced Resources database.
The group properties are Name, Skill Level, and Resource Rank, all of which are user-modifiable.
While they are considered group properties, the Skill Level and Resource Rank are assigned to the
individual members (resources) of the group.
Group properties are useful when creating or modifying filtering conditions. Both the Skill Level
and the Resource Rank are used to prioritize which resource to select first from the group, when a
group requirement is executed. The Skill Level or Resource Rank can be any number, including 0
(zero) and decimals.

Discrete Event

The Groups table of the Advanced Resources database lists all of the models groups. The Group
Resources table displays all of the groups in the model as well as the properties and Resource ID of
each of their members. (Remember, a resource can be included in more than one group.)
For information on creating and managing groups, see Groups on page 246.

While the principle is the same, a groups Resource Rank is not the same as a resources Resource
Requirement Rank.

Item properties
In addition to the item properties discussed in the User Guide, every item at an advanced resource
queue has a unique Resource Order ID assigned to it. The ID is automatically stored in a special
item property and refers to a record index in the Resource Orders table of the Advanced Resources
database. (See Resource orders on page 247.)
While not an item property, resource requirements have a resource requirement rank that controls
the order in which idle resources search for waiting items to service. A resource requirement with a
better rank will have first choice of any available items that require that resource. For more information, see Resource allocation policy on page 251.

Release rules
A Resource Pool Release block has three choices for controlling which resources to release when
items enter the block. The options are:
Release all resources
Release all resources from a specific resource order
Release resources using a custom rule
Custom Resource release rules provide a user-definable mechanism for controlling which resources
to release. They are designed to control the release of resources at the quantity specification level of
a resource requirement. Consequently, each resource release rule is associated with a specific
resource requirement.
To create or modify a release rule:

Go to the Resource Managers Release Rules tab


Choose an existing resource release rule or create a new one
Select the resource requirement that the rule should be associated with

Resources and Shifts


Additional information

251

In the Quantity Expression table, specify the Release Quantity


Policies
When a resource transitions to the idle status, it immediately attempts to service an item that is
waiting for advanced resources. If multiple items are waiting, they are serviced in an order governed by settings on the Resource Managers Policies tab.
As discussed in more detail below, the Policies tab is for:
Setting a resource allocation policy that determines which item gets the next idle resource
Overriding the resource requirement rank. (The original resource requirement rank is entered
on the Requirements tab when the resource requirement is created.)
Resource allocation policy
The top section of the tab is for determining which item, from a sorted list of all the waiting items
in the model, gets the resource. How the items are sorted affects which item gets the resource.

Item priority the lowest number, including negative values, is the highest priority
Value attribute
DB Address attribute
Queue arrival time
Resource requirement rank. When a resource requirement is created, it gets a ranking value that
is set in the Requirements tabs Resource requirement rank field. And before a waiting item can be
released from an advanced resource queue, it must be associated with a resource requirement.
Since each item has one or more resource requirements where each has a rank, the resource
requirement rank can be used to sort waiting items. A resource requirement rank must be 0;
the default resource requirement rank is 1. (Also see Overriding the resource requirement rank
on page 252.)
Items can be sorted by any one of these properties, in ascending or descending order. A secondary
sorting order is also allowed.

The default is to sort items by the ranking of their resource requirements and then by the time the
item arrived to the queue.

Allocation
There are two possibilities for item selection:
By default, the resource picks the first item in the sorted list whose entire resource requirement
can be met by available resources. If the first item doesnt qualify, the next items qualification is
assessed, and so forth. If none of the items qualify, the resource waits until a qualifying item
appears in the Queue.
If Only try the top sorted item is selected, the resource will only look at the first item in the sorted
list. If its entire resource requirement can be met, it is picked. If not, the resource waits until a
qualifying item appears at the top of the sorted list of waiting items.

Discrete Event

Sorting criteria
Item properties are used to control the order in which waiting items are sorted. The properties are:

252

Resources and Shifts


Resource requirements

Overriding the resource requirement rank


One of the properties that waiting items can be sorted by is the resource requirement rank, discussed
in Sorting criteria on page 251. The resource requirement rank is a single value that applies by
default to every resource that is part of the particular resource requirement. A resource requirement
rank must be 0; the default resource requirement rank is 1.
On the Resource Managers Policies tab, the
resource requirement rank can be overridden for
an individual resource. This means that, only for
the specified resource, a resource requirements
rank will differ from the original value entered on
the Requirements tab. Since a resource requireWash/Wax resource requirement is ranked higher
ment could be composed of multiple resources,
each resource that is part of a resource requirement can override the resource requirements rank with a different value.

Discrete Event

Overriding is accomplished by changing the values in the RR Rank column in the Override
resource requirement rankings table.

The original ranking values are displayed in square brackets in the RR Rank column.
Resource requirements
A resource requirement is a named rule that specifies how many of what types of resources to allocate to an item. An advanced resource queue will only release an item if the resources required by
the item are available. Resource requirements are created:
Manually, as discussed below
By default, as discussed starting on page 258

Hierarchy of a resource requirement


Resource requirements are developed in the Requirements tab of the Resource Manager block.
They are created using a three-level hierarchy of components:
1) Resource requirements are the top level component. They consist of quantity expressions.
2) Quantity expressions are components that are created at the middle level of the hierarchy. They
consist of filtering conditions.
3) Filtering conditions are created at the bottom level of the hierarchy.

Steps to take before creating


Before creating a resource requirement, it is helpful to perform the following steps:
1) Identify the components that will be needed:
a)Determine how many distinct collections of resources are required
b)Identify the criteria that are common to each resource collection
c)Determine the quantity required from each collection
d)Determine if alternative collections could be considered if the quantity cannot be obtained
from a particular collection
e)Identify the criteria for any of those alternative collections
f )Determine the quantity required from any of the alternative collections

Resources and Shifts


Resource requirements

253

2) Use the results of the process above to determine how many quantity expressions are needed. A
quantity expression will be required for each distinct resource collection from which a quantity
will be selected.
3) Once the quantity expressions have been identified, determine how many different criteria are
needed to represent all of the distinct resource collections referred to in step 1. Each criterion is
expressed as a condition on the values of a resource or group property and is referred to as a filtering condition. Filtering conditions are used in quantity expressions to generate the collection of resources from which the specified quantity is selected.

How to create a new resource requirement


As was shown starting on page 243 the steps in manually creating a resource requirement are:

Create the filtering conditions needed by the quantity expressions


Create the quantity expressions needed by the resource requirement
Create a resource requirement using the quantity expressions
Filtering conditions are the smallest component of a resource requirement and creating one or
more filtering conditions is the first step in defining a resource requirement. A filtering condition
is a specified aspect of a resource or group property. For example, a filtering condition could be
that the resource comes from a particular pool or that a group member has a skill level higher than
a certain number.
Saved filtering conditions are used in quantity expressions, discussed later. When a quantity
expression with a filtering condition gets executed, the population of resources is narrowed to a list
of resources that meet the specific condition that was filtered for.
The Create/modify filtering conditions frame
(Resource Managers Requirements tab) is where
filtering conditions are created and edited.

Creating a new filtering condition

Types of filtering conditions


Filtering conditions filter on properties. There are two types of filtering conditions, depending on
whether the properties belong to resources or group members:
1) A resource filtering condition filters on one specified
resource property, as shown in the screenshot to the
right. A resource property is one of the dynamic or static
properties in the Resources table. Examples of resource properties are: pool, total idle time, or a
group. (See Resource properties on page 248.)
2) A group filtering condition filters on one specified group property either Skill Level or Resource Rank. (See Group properties on page 250.) There must be at least one group in the
model to enable group filtering conditions.
Note that a group filtering condition is not associated with a particular group. Instead, it is a
condition on the properties of group members generally. As discussed in Using group filtering conditions on page 256, a group filtering condition must have a corresponding resource
filtering condition that limits the collection of resources to a specific group.

Discrete Event

Filtering conditions

254

Resources and Shifts


Resource requirements

Creating a filtering condition


On the Requirements tab, check the Create/modify filtering conditions frame to enable it. Then
either choose an existing filtering condition from the popup menu and modify it or create and
name a new filtering condition.
Each filtering condition is composed of one conditional operator applied to one property. The
conditional operators are: =, >, <, >=, <=, and != (not equal). The property can be a resource property or a group property. (See Properties on page 248). Note that group properties are only
enabled if the model has at least one group of resources.

Each filtering condition filters for one condition of one property.

Discrete Event

Testing
Once the property and condition selections have been made, use the Test button to apply the
selections to the models resources. This opens a table displaying all the resources that match the
selected filtering condition. For a group filtering condition, every resource that has the specified
group property will be displayed, no matter what group it is in.
For the definition of a filtering condition, select it in the Choose filtering condition popup menu of
the Resource Managers Requirements tab. The settings will be for the selected filtering condition.
Saving
A new or modified filtering condition wont be available for use until the Save or Save As button
has been clicked. Until the filtering condition is saved, its name will be displayed in red.

Saving the filtering condition saves it to a database. To save the database, save the model.

Deleting a filtering condition


If you try to delete a filtering condition, it may give an error message that it is being used by a
quantity expression. Before the filtering condition can be deleted, any quantity expressions that use
it must also be deleted. And before those quantity expressions can be deleted, any resource requirements that use them must also be deleted.
Default filtering conditions
By default one filtering condition is automatically created for each pool that was created using a
Resource Pool block; default filtering conditions are optional if pools or groups are created using
the Resource Manager block. Default filtering conditions have FC_ before the name of the pool
or group. See Default resource requirements on page 258.
Examples of filtering conditions
Examples of filtering conditions include:
FC#1 filter using a resource property Pool that has the condition = Pool 2
FC#2 filter using a resource property Total Idle Time that has the condition > 10
FC#3 filter using a group property Skill Level that has the condition = 2
FC#4 filter using a resource property Group that has the condition = Group A
As discussed below, saved filtering conditions are used to create a quantity expression.

Quantity expressions
Defining quantity expressions is the second step towards creating a resource requirement. A quantity expression is a logical statement that is used to select a certain quantity of resources from an
identified collection of resources. The collection of resources is limited by the combination of filtering conditions that is entered in the expression, which can be quite complicated. However, for

Resources and Shifts


Resource requirements

255

each quantity expression only the specified quantity of qualifying resources will be drawn from the
entire identified collection.
Each quantity expression consists of three clauses:
1) A Quantity clause that specifies how many resources to select from a resource collection.
2) A WHERE clause that generates the resource collection. The WHERE clause contains the criteria that resources must satisfy in order to be selected. The criteria are specified using one or
more filtering conditions.
3) An optional Order By clause that is used to sort the collection of resources generated by the
WHERE clause. The collection of resources is sorted based on the values (in ascending or
descending order) of a selected resource property.
When the simulation is run, the quantity expression will be applied as shown below:

Discrete Event

How a quantity expression gets applied during the simulation run (Order By is optional)

The Create/modify quantity expressions


frame (Resource Managers Requirements tab) is for specifying the quantity of resources to be drawn from a set
of resources defined by filtering conditions. The result is then saved as a quantity expression for use
when building a resource requirement.
Choices for the Quantity clause
The quantity is entered using a popup menu at the right of the
SELECT button, shown in the screen shot above. As seen in
the screen shot to the right, the choices for popup menu are:
All the resources
A quantity determined from a named attribute
A quantity that is user-input
Unless it is limited by a WHERE clause in the quantity expression, the selected number of
resources will be drawn from all the resources in the Advanced Resourcess Resources table.

256

Resources and Shifts


Resource requirements

Choices for the Order By clause


Ordering the resources is optional. If chosen, any one of the resource properties listed on page 248
can be used to sort the resources. The resources at the top of the sorted list will be used first.
The default is that an ascending value of utilization is used to sort the resources. This causes
resources that are being utilized the least to be selected first.
Creating a quantity expression
On the Requirements tab, check the Create/modify quantity expressions frame to enable it. Then
either choose an existing quantity expression from the popup menu and modify it or create a new
quantity expression.
To create a new quantity expression:

First determine if the expression should start with all the resources from the Resources table or
only a specified number of those resources (see Choices for the Quantity clause, above).

Also decide if the resources should be sorted by a property (see Choices for the Order By
Discrete Event

clause on page 256). Resources at the top of the list will be chosen first.

Then click the SELECT button to place the quantity in the expression area.
At this point, the quantity expression requires a specified quantity (all or a number) of resources.
However, the collection of resources is all the resources in the Resources table of the Advanced
Resources database. In complex models, that could mean a very large number of resources.

In models with large numbers of resources, it will speed simulation run times if the first part of the
expression uses a filtering condition that limits the search area to a pool or group.

To narrow the search area, click the WHERE operator. Then insert a filtering condition; typically
this would be a resource filtering condition that references a Pool or Group (for example, Property:
Pool = Pool 2).
To use additional filtering conditions, use the AND/OR operators in conjunction with grouping
parentheses. The result is displayed in the expression area.

See below if group filtering conditions are used.

Example
The quantity expression named Pool2_IdleResources is shown in the screen shot below. It was created using a quantity of 3 and two of the filtering conditions (FC#1 and FC#2) that were shown in
Examples of filtering conditions on page 254.
The quantity expression states that 3
resources will be
required and that each
resource must come
from Pool 2 (FC#1 is
True) and have a total
idle time > 10 (FC#2 is True).
Using group filtering conditions
When creating a quantity expression, group filtering conditions must be used in conjunction with
a resource filtering condition that specifies a particular group. This is accomplished by choosing
Group as the property for the resource filtering condition.

Resources and Shifts


Resource requirements

257

For example, assume the members of Group A and Group B all have Skill Level = 2. If the quantity
expression includes a condition that filters on the group property (Skill Level = 2), it must also
include a second condition that filters on a resource property that is the Group (either Group =
Group A or Group = Group B).

When creating a quantity expression, group filtering conditions must be used in conjunction with

a resource filtering condition that specifies a particular group. And the resource filtering condition
must be specified before the group filtering condition can be added to the expression.
Testing
The application of a quantity expression selects a specified quantity of specified resources. It is then
used to create the resource requirement. To determine if the expression selects the resource that is
wanted, use the Test button.
Saving
A new or modified quantity expression wont be available for use until the Save or Save As button
has been clicked. Until the quantity expression is saved, its name will be displayed in red.

Saving the quantity expression saves it to a database. To save the database, save the model.

Default quantity expressions


One quantity expression with a default quantity of 1 is automatically created for each pool created
using a Resource Pool block; default quantity expressions are optional if pools or groups are created
using the Resource Manager block. A corresponding resource requirement is optionally created
when a new quantity expression is created. See Default resource requirements on page 258.

Resource requirements
The final step is to create the actual resource requirement what the Queue requires so that it can
let its items leave and continue traveling through the model. Resource requirements are logical
expressions consisting of one or more quantity expressions combined using AND/OR operators in
conjunction with grouping parentheses.
The Create/modify resource requirements
frame (Resource Managers Requirements tab) is for specifying what
resources are required for items to leave
the Queue. The result is saved as a resource requirement.
Resource requirement rank
When it is created, each resource requirement gets a resource requirement rank. The resource
requirement rank must be 0; the default rank is 1. This ranking is used for sorting items that are
waiting for resources, as discussed in Resource allocation policy on page 251. It can be overridden for a particular resource, as discussed in Overriding the resource requirement rank on
page 252.
Creating a resource requirement
On the Requirements tab, enble the Create/modify resource requirements frame. Then either choose
an existing resource requirement from the popup menu and modify it or create a new one.

Discrete Event

Deleting a quantity expression


If you try to delete a quantity expression, it will probably give an error message that the quantity
expression is being used by a resource requirement. Before the quantity expression can be deleted,
any resource requirements that use it must also be deleted.

258

Resources and Shifts


Resource requirements

To create a resource requirement, either choose a quantity expression from the popup menu or
start with a grouping operator. Use the AND and OR operators between quantity expressions; use
the grouping operators to group quantity expressions. The resource requirement rank can be
changed from the default of 1.
Example
The tutorial on page 245 showed how to create a resource requirement. To determine if the expression selects the resources that are wanted, use the Test button.
Saving
A new or modified resource requirement wont be available for use until the Save or Save As button
has been clicked. Until the resource requirement is saved, its name will be displayed in red.

Saving the resource requirement saves it to a database. To save the database, save the model.
Default resource requirements

Discrete Event

Under certain circumstances the ARM system creates a default resource requirement. In some cases
this is done automatically and in other cases it is optional.
The circumstances when a default resource requirement could be created are:
Every time a new pool is created using a Resource Pool block
Optionally when a new pool is created using a Resource Manager block
Optionally when a new group is created using a Resource Manager block
Optionally when a new quantity expression is created using a Resource Manager block
When a new pool or group is created
When a default resource requirement is created for a new pool or group, 3 components are created:
1) A filtering condition named FC_[name of pool or group], with the condition that:
For a new pool, the resource must come from the new pool (Filter using properties of
resources, where the property = [the new pool]).
For a new group, the resource must come from the new group (Filter using properties of
resources, where the property = [the new group]).
2) A quantity expression named 1 from [name of pool or group], indicating that the requirement is for exactly 1 resource from the pool or group.
3) A resource requirement named RR_[name of pool or group]. (When a resource requirement
is automatically created for a new pool or group, it is the same as the quantity expression.)
Because the default filtering condition is the newly created pool or group and the default quantity
expression is 1 resource from that pool or group, the default resource requirement is that 1 resource
is required from the new pool or group.

The default resource requirement for a new pool or group is that one resource will be required.

When a quantity expression is created


When a new quantity expression is created, the option is given to create a corresponding default
resource requirement. The default resource requirement will be the same as the quantity expression, but its name would be preceded by RR. The name of the resource requirement can be
changed before the requirement is saved.

Resources and Shifts


Comparison of the three resource methods

259

Comparison of the three resource methods


Technique

Resource Item Block

Resource Pool Method

Advanced Resource
Management

Resources are represented


as a quantity in a pool in
the Resource Pool block.
Individual resources cannot have properties and are
thus indistinguishable
within a pool. The
Resource Pool block maintains statistics.

Resources are represented


in a table in an internal
database. Each resource is a
record in this table. The
fields in the table are used
to store property values
and statistics for individual
resources.

Requirements
Specification

There is no dedicated user


interface for specifying
resource item requirements. Typically, Queue
Equation or Queue
Matching blocks are used
to hold items until the
required resource items are
available. Then, released
items are batched with
resource items.

Requirements are specified using a data table in


the Queue. The table specifies the required quantities
from one or more pools.
The required pools are
selected using the settings
in the dialog. The required
counts can be specified
using attribute values or
connectors.

Requirements are specified using logical expressions created in the dialog


of the Resource Manager
block. These expressions
consist of components that
specify required quantities
and filtering conditions
that limit the set of
resources to those wanted.

Advantages

1. Does not require con1. Because resources are


items, they can have prop- nections to blocks.
erties that allow them to be
distinguished individually. 2. Does not need complex
routing logic to control the
2. Modelers have full con- allocation and release of
trol over the logic govern- resources.
ing how resources are
3. Resources automatically
utilized.
know which items are
waiting for them.
4. Provides the capability
to globally prioritize the
allocation of resources to
the highest ranked items.

1. Does not require connections to blocks nor


complex routing logic.
2. Resources automatically
know which items are
waiting for them.
3. The allocation of
resources to the highest
ranked items is globally
prioritized; multi-tiered
ranking is supported.
4. Resources have properties that allow them to be
distinguished individually.
5. Allows for very complex
resource requirements and
provides a flexible mechanism for creating resource
release rules.
6. All information about
resources is globally available to the model; details
can be logged in the database.

Discrete Event

Resource
Resources are represented
Representation by items that are created
and reside in Resource
Item blocks. The Resource
Item block maintains statistics. Attributes can be
used to store properties
and statistics for individual
resources.

260

Resources and Shifts


The Advanced Resources database

Resource Pool Method

Advanced Resource
Management

1. Does not allow the use


of attributes or other properties to track information
about individual resources.

1. The complexity of this


method requires more
learning time compared to
the other methods.

2. It is more difficult to
control the complex sched2. A resource item cannot uling of competing
see the items waiting for resources across a number
it. Routing blocks must be of different queues using
used to direct the resource resource pools.
item to the correct Batch
or Unbatch block.

2. Advanced Resource
Management is only available with the ExtendSim
AT and ExtendSim Suite
packages.

Technique

Resource Item Block

Disadvantages 1. The Resource Item


block must be connected
in the model such that the
resources it outputs can be
batched with the items
that require them.

Discrete Event

The Advanced Resources database


The Advanced Resources database provides the architectural framework for the ARM system.
ARM uses the database to represent, manage, and track the status and properties of resources,
pools, and groups, as well as resource allocation and release rules. The database is automatically
created when a Resource Manager block is added to a model. It is easily accessed by clicking the
View Database button in the Resource Managers tabs or through the ExtendSim Database menu.
There are several tables in the database. The most relevant to the modeler are described below.
Table

Description

Pools

Summarizes the results from the simulation run (total idle


time, total utilization, and so forth) for each pool.

Resources

Lists each resource and its properties, current status, and


statistical information.

Resource Transaction Log

Depending on the settings in the Resource Managers


Event Logging tab, this table displays the transactions,
status transitions, and results of the simulation run.

Also see Primary transactions for ARM on page 261.

Blocks that compose the ARM system


While the Resource Manager block is central to the ARM architecture, several other blocks perform important functions.

Resources and Shifts


Primary transactions for ARM

Block
(Library)

Function When Used With Advanced Resources

Resource Manager
(Item AT & Suite)

Provides the interface for managing advanced resources, resource requirements (allocation rules), release rules, and transaction logs. Use it to:

261

Create, edit, and delete resources, pools, groups, and their properties
Create resource requirements
Define release rules
Define policies for allocating idle resources to items
Enable event logging
View statistical results

Controls the ordering and allocation of resources Note: Selected queue


behavior must be advanced resource queue.

Queue Equation
(Item)

The equation can be used to conditionally allocate requirements to items


released from the Queue Equation block. Note: Enable advanced resources
(AR) on the blocks Options tab.

Resource Pool
(Item)

A shortcut for creating a pool of resources. Controls the initial properties


and number of resources in a pool and reports aggregated results for its
resources. Notes: 1) Selected behavior must be advanced resource pool. 2)
Since all its capabilities can be achieved using the Resource Manager block,
this block is optional. 3) Resource Pool resources do not have properties
unless the resources are advanced.

Resource Pool Release


(Item)

Controls the release of resources. Notes: 1) Selected behavior must be release


advanced resources. 2) Even if the model doesnt use any Resource Pool
blocks, use of Resource Pool Release blocks is optional only if the resources
are considered to be consumed and there are no concerns about model size
and computer memory due to the accumulation of excess records for the
non-disposed resources.

Statistics
(Value)

Reports statistics for individual resources. Especially useful for exporting


data and for performing batch means and multi-run analyses.

Shift
(Item)

Notifies the Resource Manager block when there is a change to a shift being
used by one or more advanced resources.

Primary transactions for ARM


The following diagrams and tables give an overview of how advanced resources are used in a
model. The explanation is divided into three sections which describe what happens when:
An item arrives at a Queue that is part of the ARM system
A Resource Pool block gets a message to add or remove advanced resources
A Shift block is used in the ARM system

In the explanations, the Database Tables Used column has the following abbreviations: RO
(Resource Orders), RTL (Resource Transaction Log), and RR (Resource Requirements).

Discrete Event

Queue
(Item)

262

Resources and Shifts


Primary transactions for ARM

Item-initiated ARM transactions


This part explains what happens when an item arrives at a Queue that is part of the ARM system.

INTERNALDATABASE

, 7 , 11

Discrete Event

RESOURCEMANAGER

,6

10
5

QUEUE

RESOURCEPOOLRELEASE

Description

MessageSending Block

MessageDatabase Tables
Receiving Block
Used

An advanced resource item arrives in


the Queue.

Queue

The Queue orders resources from the


Resource Manager.

The Resource Manager generates a


resource order and assigns a Resource
Order ID to the item.

RO, RTL

The Resource Manager checks for


availability of required resources.

RO, Resources,
RR, RTL

The Resource Manager notifies the


Resource
Queue when the required resources are Manager
available for the item.

Queue

Resource
Manager

Queue

Resources and Shifts


Primary transactions for ARM

Description

MessageSending Block

263

MessageDatabase Tables
Receiving Block
Used

The Queue checks if it is blocked. If it Queue


is not, it grants permission to the
Resource Manager to allocate the
resources to the item.

Resource
Manager

The Resource Manager allocates the


resources and changes their status to
busy.

The item with the resources allocated


to it is released to the model.

The item arrives in the Resource Pool


Release.

Resource Pool
Release

10

The Resource Pool Release sends a


Resource Pool
command to the Resource Manager to Release
release resources from the item.

Resource
Manager

11

The Resource Manager releases


resources from the item and changes
the status of the released resources from
busy to their pending status.

RO, Resources,
RTL

RO, Resources,
RTL
Queue

RO, Resources,
RTL

Discrete Event

RO, Resources,
Resource Release
Rules, RTL

264

Resources and Shifts


Primary transactions for ARM

Resource Pool-initiated ARM transactions


When a Resource Pool block receives a message that resources need to be added or removed, the
transactions occur as illustrated below.

INTERNALDATABASE
RESOURCEPOOL

1
3
2

,7

Discrete Event

RESOURCEMANAGER

6
5
QUEUE

Description

MessageSending Block

MessageDatabase Tables
Receiving Block
Used

The Resource Pool receives a message


to add/remove resources.

Resource Pool

The Resource Pool notifies the


Resource Pool
Resource Manager that the quantity of
pool resources has changed.

Resource
Manager

The Resource Manager changes the


quantity of resources for the pool.

Resources, RTL

If resources were added, the Resource


Manager attempts to service waiting
items.

RO, Resources,
RR, RTL

Resources and Shifts


Primary transactions for ARM

MessageSending Block

Description

Resource
Manager

If items can be serviced, the Resource


manager notifies Queues with waiting
items that the required resources are
available.

The Queues check for being blocked. If Queue


they are not blocked, they grant permission to the Resource Manager to
allocate the idle resources to the items.

The Resource Manager allocates the


resources and changes their status to
busy.

The Queues release the items.

MessageDatabase Tables
Receiving Block
Used
Queue

Resource
Manager

RO, Resources,
RTL

RO, Resources,
RTL
Queue

Discrete Event

Shift
When advanced resources use a Shift block, the transactions are as follows.

INTERNALDATABASE
SHIFT

1
3

,7

RESOURCEMANAGER

6
5
QUEUE

265

266

Resources and Shifts


Primary transactions for ARM

Discrete Event

Description

MessageSending Block

MessageDatabase Tables
Receiving Block
Used

The Shift receives a status change message.

Shift

The Shift sends a shift status change


message to the Resource Manager.

The Resource Manager changes the status of all resources that use the Shift.

Resources, RTL

If any resources have transitioned to the


idle status, the Resource Manager
attempts to service waiting items that
depend on those resources.

RO, Resources,
RR, RTL

If items can be serviced, the Resource


Manager notifies Queues with waiting
items that the required resources are
available.

The Queues check for being blocked. If Queue


they are not, they grant permission to
the Resource Manager to allocate the
idle resources to their items.

The Resource Manager allocates the


resources and changes their status to
busy.

The Queues release the items.

Shift

Resource
Manager

Resource
Manager

Queue

Resource
Manager

RO, Resources,
RTL

RO, Resources,
RTL
Queue

Discrete Event Modeling

Activity-Based Costing
Identifying and tracking fixed and variable costs
to determine operating costs

The cost of a thing is often more


than the sum of the cost of its parts.
The Rev. P.N. Wallis

268

Activity-Based Costing
Blocks of interest

Activity-based costing (ABC) is a method of identifying and tracking the operating costs directly
associated with processing items. It is the practice of focusing on some unit of output, such as a
purchase order or an assembled automobile, and attempting to determine as precisely as possible
its total cost based on the fixed and variable costs of the inputs. ABC helps identify, quantify, and
analyze the various cost drivers (such as labor, materials, administrative overhead, rework, etc.) and
determine which ones are candidates for reduction.

Discrete Event

Once a model has been built, the discrete outputs of the system, as well as
the processes and resources that are
involved in creating those outputs,
have already been identified. To add
ABC to models, you enter costing
information into dialogs of blocks in
the model. Blocks that generate items
or provide resources, and blocks that
process items, have fields and Cost tabs
for specifying costing data. Enter vari- Cost tab of Activity block
able cost rates per time unit and fixed
costs per item or use. After the cost
information has been defined, costs will automatically be tracked as the items in the model change
state.
This chapter covers:
Identifying cost accumulators and resources
Defining fixed and variable costs

How ExtendSim tracks costs


The models illustrated in this chapter are located in the folder \Examples\Discrete Event\ABC.

Blocks of interest
The following blocks are the main focus of this chapter. Each blocks library and category appears
in parentheses after its name.
Cost by Item (Item > Information)
Calculates the cost of every item in the model, as well as the average and total cost of the
process.
Cost Stats (Item > Information)
Records the input costs and total cost generated in each costing-based block. Determines
total model cost based on a specified confidence interval.
In addition to the two Cost blocks, many of the Item library blocks have cost fields or a
Cost tab for entering and reporting cost information, or have cost-handling capabilities, as shown
in the table below:
Blocks with Cost tabs or fields

Blocks with cost-handling capability

Activity

Batch

Convey Item

Get

Activity-Based Costing
Modeling with activity-based costing

Blocks with Cost tabs or fields

Blocks with cost-handling capability

Create

Equation(I)

Queue

Set

Resource Item

Unbatch

269

Resource Pool
Transport
Workstation
The Interchange block (Rate library) can also define costing information for items in discrete rate
models.

Modeling with activity-based costing

Item types
For purposes of costing, every item in a model can be categorized as either a cost accumulator or a
resource. Understanding the difference between cost accumulators and resources is important,
because ExtendSim treats them differently, as you will see in Combining multiple cost accumulators on page 280.

As is true of items that are resources, non-item resources from the Resource Pool block do not
accumulate their own costs.
Cost accumulators
You perform ABC to determine the costs associated with storing or processing an item. The item
being stored or processed is called the cost accumulator and will accumulate costs as it waits, gets
processed, or uses resources. Cost accumulating items can be introduced into a model using the
Create and Resource Item blocks, as you will see in Costs for cost accumulators on page 271.
The following example shows how costs are assigned to cost accumulating items.

Discrete Event

To include activity-based costing in models, you need to know how to define cost rates, how to
properly combine cost resources with items, and how to gather and work with cost information.
Although an understanding of ABC is important, most of the work will be done by the ExtendSim
architecture.

270

Activity-Based Costing
Modeling with activity-based costing

Receive Inventory model

Receive Inventory model

Discrete Event

Assume you want to determine the cost associated with receiving crated inventory at a warehouse.
There is a one-time docking fee of $3.00 for every shipment that is received, and it costs $0.15 an
hour any time the crate waits for processing (such as in the receiving area.)
As each shipment arrives, a labor resource takes an average of 30 minutes to unpack the crate and
stock the contents on the appropriate shelves. In this case, the crate is being processed and is therefore the cost accumulator. The half-hour processing time and the hourly wage of the laborer is
used to automatically calculate the cost of unpacking and shelving. That cost is then added to the
accumulated cost being tracked with the crate. As the crate progresses through the steps of being
received and unpacked, ExtendSim will add the cost incurred at each step to the accumulated cost.
Resources
As discussed in Modeling resources on page 215, resources can be modeled using resource pool
blocks or by batching resources from a Resource Item block with other items. In the resource pool
method, resource units act as constraints on the flow of items throughout the model. In the batching method, resource items are required to be batched with other items before the items can proceed to the next process.
Whether resource pool units or resource items, resources provide a service for the items in a model;
they do not accumulate their own costs. Whenever a cost accumulator uses a resource, the
resources cost rates are used to calculate costs which are then added to the total cost of the cost
accumulator. (Cost rates are discussed on page 272.) For instance, in the Receive Inventory model
described above, the laborer is a resource item that is batched with the crate. Since the laborer is a
resource, it will not accumulate its own cost. Rather, the cost rate of the laborer (the hourly wage),
and the time it takes the laborer to unload the crate, is used to automatically calculate the cost of
unpacking the crate.

The default is that the Resource Item block outputs resource items. However, you can select in the
blocks Cost tab to output items as cost accumulators. This is discussed at Resource Item block
on page 272.

Defining costs and cost rates


To include ABC in a model, simply enter information in the costing section of the dialogs of costaware blocks. There are two types of cost information:
A direct or fixed cost, which is entered as the Cost per item or Cost per use in block dialogs.

Activity-Based Costing
Modeling with activity-based costing

271

The variable cost rate, entered in block dialogs as the waiting cost/time unit or processing cost/
time unit.
You do not need to define all cost information in order to perform ABC. However, if even one cost
field is defined as a positive, non-zero number, ExtendSim will automatically track costs when the
simulation is run.
Cost accumulating items have their own fixed costs and variable cost rates. As they use resources,
wait for processing, and are processed, they acquire additional costs from resources, queues, and
activities.
The following information describes how and where to define costs.
Costs for cost accumulators
You specify costing information for a cost accumulator in the cost section or tab of the block that
originates the item. Each cost accumulator can have a fixed cost per item, such as its direct materials cost, and a variable waiting or processing cost rate, which causes it to accumulate costs as it is
stored or waits for processing.

Create block
Costing information is entered differently in the Create block depending on whether the block is
set to Create items randomly or to Create items by schedule.
In the Receive Inventory
model described on
page 270 the Create
block generates crates
randomly. The Waiting
cost/hour and the Cost
per item for each crate
are defined in the cost
Cost section of Options tab; block set to Create items randomly
section of the blocks
Options tab, as shown above.
When the Create block generates items by schedule, you must explicitly set _cost and _rate system attributes (discussed in Working with cost data on page 275) for each cost accumulating
item. The value of the _cost attribute should be set to the cost accumulator's fixed cost. The

Discrete Event

Cost accumulators are usually generated by the Create block. They can also be provided by a
Resource Item block, depending on a setting in its Cost tab.

272

Activity-Based Costing
Modeling with activity-based costing

value of the _rate attribute should be set to the cost accumulator's variable cost rate (waiting cost
per time unit), as shown below.

Discrete Event

Create tab; block set to Create items by schedule

The _rate attribute must be defined using the same time unit as the models default global time
unit. In the example, the time unit is hours, so the _rate attribute is the hourly rate.
Resource Item block
Cost accumulators can
also be provided for a
model using the
Resource Item block.
To do this, you must
choose that the block

Provide items that calculate costing as: cost


accumulators in the

Cost tab of Resource Item block, providing cost accumulators

blocks Cost tab, a portion of which is shown at right.


Costs of resources
The costs that will be assigned to items that require resources are defined in the Resource Pool and
Resource Item blocks. The Cost tab in those blocks has fields for entering the following information:
The cost per time unit rate, used to calculate and assign a time-based cost to the cost accumulator while it uses the resource.
The cost per use is a one-time cost assigned to the cost accumulator for the use of that resource,
such as a fixed service charge.

Activity-Based Costing
Modeling with activity-based costing

In the Receive Inventory model described


earlier, cost rates for the
laborer are defined in
the Resource Items
Cost tab. The blocks
dialog indicates that
items stored in the
block are resources, as
seen at right.

Cost tab of Resource Item block, providing resources

For the Resource Item block to provide resources, the Cost tab must be set to Items are:
resources, the default choice. Otherwise the items will be cost accumulators, as discussed earlier.

The processing cost per time unit is used to calculate the time-based processing cost of each item
that passes through the block.
The cost per item is a fixed cost added to every item that passes through the block.
The Activity block has a PC (Processing Cost) input for targeting different processing costs on different items as well as a CPI (Cost per Item) input to attach a unique CPI to each item.

Combining resources with cost accumulators


As discussed in Modeling resources on page 215, there are two ways that items can use resources.
One method is to batch a resource item with another item. While batched, the resource item is in
use and cannot be used by another item until it is unbatched and returned to the Resource Item
block. The second method is to use the resource pool blocks, which act as a constraint on the flow
of items throughout the model. This section discusses how to properly use these two methods
when performing ABC.
Batching and unbatching resources with cost accumulators
The Resource Item block holds resources for use in the model. When batching a resource item
with a cost accumulator, the resources cost rates are automatically stored with the cost accumulator and used in any subsequent cost calculations.

A maximum of two separate types of resource items can be combined with a cost accumulator at a
time. For instance, one or more worker resources from a Resource Item block and one or more cart
resources from a different Resource Item block.
To unbatch a resource and remove its cost rate information from the cost accumulator, you must
select Release cost resources as the Unbatch blocks behavior. This choice tells the block to modify
the information stored with the cost accumulator to indicate that the resource has been released.
If the Unbatch blocks behavior is set to Create multiple items, the items released by the block
will be identical to the item which entered the block. In other words, there would be multiple copies of the cost accumulator, and each copy would still be joined with the resource.

Discrete Event

Activities
You can also define cost information in activity-type blocks; those costs are accumulated by each
item the block processes. The activity-type blocks are the Activity, Convey Item, Transport, and
Workstation. Within the Cost tab of these blocks, enter a cost per time unit and a cost per item:

273

274

Activity-Based Costing
Modeling with activity-based costing

Multiple Resources model

Discrete Event

Multiple Resources model

In the example model, the cost accumulator is initially batched with 2 of Resource A and 2 of
Resource C. When multiple resources are batched with a cost accumulator, they may be released all
at once (as with Resource A), released incrementally (as with Resource C), or remain with the cost
accumulator. Whenever a resource is batched or released, the cost array of the cost accumulator is
updated to reflect the current number of resources in use. (The cost array is described in Combining resources with cost accumulators on page 278.)
There are three things to remember when batching resource items with cost accumulators:
1) A resource will be released from the output connector that corresponds to the input connector
originally used to batch it to the cost accumulator. For example, if the resource entered the
Batch block through the ItemsIn(2) connector, it will be released through the Unbatch
blocks ItemsOut(2) connector.

As in the Multiple Resources model, this could mean that one or more of the Unbatch blocks outputs will be unconnected and you will need to define that there will be zero items output through
that connector.
2) If an item is simultaneously batched with different types of resources, you must use different
connectors for each resource type when creating the batch. In the Multiple Resources model
above, Resource A uses connector ItemsIn and Resource C uses connector ItemsIn(2).
3) When performing ABC, you are limited to two different types of resource items batched with a
cost accumulator item at one time. This limitation is not true, however, when modeling
resources using the resource pool blocks, as you will see below.
Cost accumulators and the resource pool blocks
As described in Resource Pool method on page 216, as cost accumulating items pass through a
Queue block in Resource Pool mode, resources are allocated to the items. When this happens, the
cost rate of the resource pool unit is automatically stored with the cost accumulator and used in
any subsequent cost calculations.
When a resource pool unit is released using the Resource Pool Release block, the information
stored with the cost accumulator is modified to indicate that the resource has been released.

Activity-Based Costing
Modeling with activity-based costing

275

Unlike what happens where resource items are batched with other items, there is no limit to the
number of different types of resources a cost accumulator can use when using the resource pool
blocks. Furthermore, the two methods of modeling resources (batching resource items and
resource pools) may be used in conjunction with each other.

Combining cost accumulators


The Batch block can be used to combine cost accumulators arriving from one or more paths. This
may be used in conjunction with an Unbatch block, for instance to combine cost accumulators for
processing and separate them after processing has been completed. In the Properties tab of both
the Batch and Unbatch blocks you can specify what the block should do with the cost values. This
is accomplished by selecting an Action for the _cost and _rate attributes.
Costing attributes when items are unbatched
For example, assume a Batch block combines three cost accumulators together and that while
batched, these items accumulate an additional $9.00 due to processing. When these cost accumulators are unbatched, you can select one of the following actions for the _cost and _rate attributes
in the Properties tab of the Unbatch block:

Batched value. With this choice, the $9.00 will be copied


to each of the resulting cost accumulators.

Distribute. The value will be divided among each item


equally. In this case, $3.00 to each.
For more information, see Preserving the items used to create a batch on page 210 and Properties when items are
batched on page 205.

Working with cost data


To provide access to cost information, ExtendSim creates two attributes (_cost and _rate) for every
item in models that have costing. Since these are automatically created, they are considered system
attributes. If a cost is defined somewhere in the model, these attributes will appear in attribute
popup menus, shown below:

Attribute popup menu

The information that is stored in these attributes depends on whether the item is a cost accumulator or a resource, as described in the following table:

Discrete Event

Preserved value. This option causes the cost accumulators to retrieve their preserved value, if
preserve uniqueness is turned on. In this case, the $9.00 is discarded.

276

Activity-Based Costing
Modeling with activity-based costing

Item type

_cost attribute

_rate attribute

Cost accumulator

The accumulated cost of the item

The items waiting or storage cost


(cost per time unit defined using the
models global time unit)

Resource

The cost per use of the resource

The resources cost per time unit


(defined using the models global time
unit)

Discrete Event

The attribute handling blocks in the Item library (Get, Set, and Equation(I)) can be used to read,
set, or manipulate these attributes. In addition, two statistics blocks in the Item library (Cost By
Item and Costs Stats) can be used to gather cost data.
Viewing Cost Data
You can use a Get block to read the _cost and _rate attributes of any item, then plot the data or use
the attribute value to perform additional calculations. For example, you can use a Get block to
read the _cost attribute of cost accumulators and connect the Get blocks _cost output connector
to a Plotter Discrete Event to plot the accumulated cost of each item that passes through. This is
shown in the model discussed in the following section.
Changing Cost Data
In most cases, it is sufficient to define the cost rates of the various cost drivers in a model and allow
ExtendSim to automatically calculate and track costs. However, there may be times when you need
to manipulate the cost values generated. The attribute handling blocks in the Item library (Get,
Set, and Equation(I)) can be used to accomplish this.
Change Rate model
For example, suppose the cost rates of a resource vary throughout the day. During peak times the
demand for the resource is high and the cost per time unit increases. This can be modeled using

Activity-Based Costing
Modeling with activity-based costing

277

the Set block (Item library) and the Lookup Table block (Value library) to explicitly set the _rate
attribute of the resource as it exits a Resource Item block, as shown in the model below:

The table in the Lookup Table block has a different rates for the period between hour 4 and hour
6.

A change in the rate will only affect resources as they exit the Resource Item block. Resources currently in use will not be affected until they are recycled back through the Resource Item and Set
blocks.
In the above model, a Get block reads the _cost attribute before the items exit the model. The
accumulated cost of each cost accumulator is then plotted. The plot (cloned onto the worksheet),
shows that the cost of the items increases during the period of time that the resources cost rates are
higher.
Gathering and Analyzing Cost Data
The Create, Resource Item, and Resource Pool blocks, as well as queue and activity-type blocks,
are capable of generating costs that get tracked with cost accumulating items. Additionally, each
cost-generating block displays the total cost it generated in its Total Cost dialog item.
You can also use the Cost By Item and Cost Stats blocks (both in the Item library) to gather summarized cost information. The Cost By Item block reads and stores the _cost and _rate attributes
of all the cost accumulating items that pass through it. The Cost Stats block collects and displays
the total cost for each cost-generating block in a model.
Cost By Item block
Depending on selections in its dialog, the Cost By Item block lists the accumulated cost of each
item that passes through it, the time the item passed through the block, and the total and average
cost of all the items that have passed through. This block can also be used to list the cost of the
items sorted by type.
In the Sort By Type model (shown below) three different item types are generated by randomly
assigning a Type attribute of 1, 2, or 3. It costs $5.00 per hour to run the machine. The machines
processing time for, and therefore the cost of, each item varies by type. The Cost By Item block

Discrete Event

Change Rate model

278

Activity-Based Costing
How ExtendSim tracks costs

lists the costs of the items sorted by the Type attribute. As an item passes through the block, the
row corresponding to the value of the Type attribute (1, 2, or 3) is updated.

Discrete Event

Sort by Type model

Cost Stats block


The Cost Stats block is useful to determine which blocks are contributing the most to the total
cost of the items being processed. See the help text of the block for a detailed description of how to
use the Cost Stats block.

How ExtendSim tracks costs

The previous sections discussed how to perform ABC in ExtendSim. This section provides a more
detailed look at how ExtendSim tracks costs and is included mainly for informational purposes.

Setting the _cost and _rate attributes


When you define the cost or cost rate for a cost accumulator or resource (as discussed in Defining
costs and cost rates on page 270), ExtendSim will assign the value to the appropriate costing system variable for that item. The fixed cost of the item is assigned to the _cost attribute and the variable cost rate is assigned to the _rate attribute.

Combining resources with cost accumulators


Whether you use the resource item and batching method or the resource pools method to model
resources, two things happen when a resource is attached to a cost accumulator:
1) The value of the resources fixed cost is automatically added to the cost accumulators _cost
attribute.
If using the batching method, the resources fixed cost comes from the resources _cost attribute. If
using resource pools, the resources fixed cost comes from the Cost per use dialog item of the corresponding Resource Pool block.
2) The resources variable cost rate and the number of resources used are stored in an internal program structure called the cost array.
The cost array stores costing information for each cost accumulator in the model. ExtendSim uses
the data in the cost array to calculate the time-based cost contributed by any resources that are
combined with the cost accumulator. If using the batching method, the resources variable cost rate
comes from the resources _rate attribute. If using resource pools, the resources variable cost rate
comes from the Cost per time unit dialog item of the corresponding Resource Pool block.

Activity-Based Costing
How ExtendSim tracks costs

279

When a resource is released by an Unbatch or Resource Pool Release block, the information stored
in the cost array is updated to indicate that the resource is no longer combined with the cost accumulator.

Calculating costs
As previously mentioned, the Create block and activity, queue, and resource-type blocks are all
capable of generating costs. As these blocks process cost accumulators, they will automatically calculate the cost and add it to the items _cost attribute. In addition, each cost-generating block will
update its Total Cost information. This dialog item displays the total cost contributed by that particular block only. The following sections briefly discuss how these calculations are performed.
In the Create block
When a cost accumulator is generated, ExtendSim will add the fixed cost (Cost per use) of the Create block to the cost accumulators _cost attribute.
For each cost accumulator generated, ExtendSim also will add the fixed cost of the Create block to
its Total cost dialog item.

For each cost accumulator that passes through the block, ExtendSim also will add the fixed and
variable cost contributed by that activity-type block (not including costs contributed by any
resources combined with the cost accumulator) to that blocks Total cost dialog.
In queue-type blocks
Queue-type blocks have a checkbox labelled Calculate waiting costs. If that checkbox is selected
when a cost accumulator enters a queue-type block, ExtendSim will calculate the time-based cost.
This is composed of the waiting or storage cost of the cost accumulator as calculated from the cost
accumulators _rate attribute and the variable cost of any resources currently combined with cost
accumulator. The time-based cost is added to the _cost attribute of the cost accumulator.
For each cost accumulator that passes through a queue-type block, ExtendSim also will add the
waiting cost calculated from the cost accumulators _rate attribute (not including costs contributed
by any resources combined with the cost accumulator) to that blocks Total cost dialog item.
In resource-type blocks
The Resource Item block is capable of providing items that are either cost accumulators or
resources, depending on selections in its Cost
tab, as shown at right.
If the block is providing cost accumulators, it
will generate costs similar to a queue-type
block.

Cost options in Resource Item block

If the block is providing resources, the total


cost of using the resources is calculated and displayed in the blocks Total cost dialog item. The calculations are based on the resources utilization rate and cost rates defined in the blocks Cost tab.

Discrete Event

In activity-type blocks
When a cost accumulator enters an activity-type block, ExtendSim will add the activitys fixed cost
(cost per item) to the cost accumulators _cost attribute. In addition, it will calculate the variable
time-based cost (the processing or transportation cost of the activity and the waiting cost of any
resources currently combined with the cost accumulator), and add it to the _cost attribute of the
cost accumulator.

280

Activity-Based Costing
How ExtendSim tracks costs

Combining multiple cost accumulators


In manufacturing processes, different parts of the product may be worked on in parallel, then combined later to form the final product. In these cases, multiple cost accumulators will contribute to
the cost of the final product.

Discrete Event

Multiple Cost Accumulators model


For example, when a computer manufacturer prepares a system for an end user, the CPU and the
monitor must each be assembled then combined into one shipment. The CPU and monitor may
be worked on in parallel, then combined using a Batch block, as shown in the model below:

Multiple Cost Accumulators model

When the two cost accumulators, the CPU and the monitor, are batched together, two things will
happen:
The _cost and _rate attributes of the input items are added together. The resulting cost accumulator will have an accumulated cost equal to the combined accumulated cost of the input items
and a waiting cost rate equal to the combined waiting cost rates of the input items.
Any resources, whether from batching or from a resource pool, that are combined with the input
cost accumulators will be combined with the cost accumulator that is output from the batching
block. Note that any rules or limitations associated with batching resources with items will apply
to the resulting cost accumulator (see Batching and unbatching resources with cost accumulators on page 273).

Discrete Event Modeling

Statistics and Model Metrics


Statistically analyzing discrete event models

282

Statistics and Model Metrics


Commonly used blocks

Remember that, by itself, simulation does not provide exact answers or optimize a system. Instead,
a well-built model will capture important data and report statistical results. These metrics should
provide the information needed for the analysis and decision-making process.
This chapter discusses specific methods for statistically analyzing discrete event models, such as:
Gathering statistics for specific types of blocks
Clearing statistical accumulators after a warm-up period
Using the History block to get item information
Tracking change-of-state information about items
Using attributes to accumulate information about items
Determining cycle time by timing the flow of items
When to use time weighted statistics
For a more generalized discussions of statistical analysis, see also the following chapters:

Discrete Event

Math and Statistical Distributions starting on page 675

Analysis starting on page 623


The models illustrated in this chapter are located in the folder \Examples\Discrete Event\Statistics.

Commonly used blocks


The following blocks will be the main focus of this chapter. The blocks library and category
appear in parentheses after the block name.
Clear Statistics (Value > Statistics)
Clears statistics in other blocks, eliminating the statistical bias of the warm-up period.
Display Value (Value > Outputs)
Displays and outputs the value that is input.
History (Item > Information)
Records information about items and their properties, such as the value of an attribute, the
items arrival time, its priority, and so forth.
Information (Item > Information)
Reports item statistics such as a count of the number of items, the throughput rate, cycle
time, and the time between item arrivals.
Mean & Variance (Value > Statistics)
Calculates a mean, variance, standard deviation, and confidence interval.
Statistics (Value > Statistics)
Summarizes statistics for a particular type of block, such as activities or queues. Reports
results in a table. Information is calculated using a specified statistical method, which can
be customized.

Statistics and Model Metrics


Gathering statistics

283

Gathering statistics
The Statistics block (Value library) accumulates data and calculates statistics for a particular type of
block using a specified statistical method. In addition to the block number, block name, and the
time the information was observed, this block displays metrics that are specific to the block type,
such as utilization or average wait time for activity-type blocks or the mean, variance, and standard
deviation of all the Mean & Variance blocks in the model.
The Queue Statistics model, located in the folder \Examples\Discrete Event\Statistics, uses the Statistics block to gather information about queues.
Since the Statistics block is used to gather information in continuous, discrete event, and discrete
rate models, it is discussed fully in Statistics on page 624.

Clearing statistics
At the start of a simulation run the queues are often empty and operations have nothing to process.
After the model has been running for a while, it gets to the point where it is functioning more like
the real system at normal operating levels. The interval from when the model starts to when it is
functioning in a steady or normal state is called the warm-up period.

Clearing Statistics model

Clearing Statistics model

In the Clearing Statistics model, statistics are cleared after 40 seconds, removing the warm-up
period for the model. This is seen by the utilization of 1 for Activity B when the model is run.
Unchecking the Clear activity statistics checkbox on the model worksheet causes the utilization of
Activity B to approach, but never actually reach, 1. This is due to the effect of the initial idleness of
the Activity B block at the start of the simulation run.

Using the History block to get item information


When building a model, it is important to start small, verify that the section you have built is
working as expected, then enhance that model section. The History block is particularly useful for
verifying model data because it provides important information about each item as the simulation
runs.
There are two ways to add a History block to a model:

Discrete Event

The Clear Statistics block (Value library) is used to reset statistical accumulators for the blocks
specified in its dialog, eliminating the statistical bias of the warm-up period. For more information
about this block, see Clear Statistics on page 626.

284

Statistics and Model Metrics


Using the History block to get item information

Connect it in series by dragging a History block from the Item library and connecting it
between other blocks so that items pass through it.
Connect it in parallel by right-clicking an item output connector and selecting Add History
block. This automatically connects a History block to the original blocks item output connector. If a History block is added in this manner, only its input connector is used. (Caution: Be
sure there is an Item library block connected to the original blocks item output connector, otherwise its item will have no place to go.)
Each item that passes through the block (if it is connected in series) or is viewed by the block (if it
is connected in parallel) is allocated a row in the History blocks table. The tables first column displays the items arrival time. Popup menus at the top of the other columns are for selecting additional information to display, such as the value of an attribute, an items property, and so forth. You
can choose to save item history with the model, show string attributes, and display Calendar dates.

Discrete Event

Since the History block can use a lot of memory, put it in the model during testing, then remove it
when you have verified that the section is working as expected. To automatically remove all of the
blocks that have been added by right-clicking, right click one of them and select Delete all autocreated History blocks.

History model
The History model shows two
History blocks: one has been
physically placed in series between
a Queue and an Activity and one
has been auto-created and placed
in parallel to the Queue block.
Both blocks report the same information (the items arrival time and
the value of an attribute called
Item arrival), as shown in the
cloned table in the model window.

History model

If a History block has been autocreated and placed in parallel to


another block, there must be subsequent blocks that can pull the items in. This is discussed at
Pulling and viewing on page 291.

Verifying Information model


The example shown at the right
illustrates the use of the History
block to verify that batches are created at the correct time with the
correct number of items.
The topmost Create block (labeled
Schedule Batches) schedules when
the batch is created and the Queues
length (L) output determines the
batch size. This causes all items
within the Queue to be batched.

Verifying Information model

Statistics and Model Metrics


Using the Item Log Manager to get item information

285

Using the Item Log Manager to get item information


The Item Log Manager (ILM) block (Item library) tracks how items change states during a run by
doing two things:
1) During the simulation run, it directs other blocks in the model to collect data on items as they
pass through. These remote data collecting blocks include History, Activity, Queue, Queue
Equation, and Resource Item. Each of these blocks can be remotely instructed to collect specific item property information for the ILM through its Data Collection tab.
2) Once the remote blocks have collected the data, the ILM packages it into a report. You can
control which types of data are included in the report and the order in which the data appears.
This is done on the ILM block's Configure Log tab.
Once the run is complete, any number of reports can be generated from the data that has been collected in the remote blocks. These reports can be generated after each run either automatically or
manually. You can have one or more ILM blocks in a model with each one responsible for generating its own report. The ILM also supports generating reports across multiple runs.

Accumulating data
There are various methods you can use to accumulate data. Attributes can be used to hold cumulative values, such as the total weight of an assembly or the number of parts in a box. And the Holding Tank block (Value library) can accumulate total processing time to determine equipment
refurbishment schedules. Data can be accumulated at any step in the model, even when the item is
not being processed.
It is important to not make the error of assuming that you can combine attribute values and then
accumulate them. See Using the Holding Tank block to accumulate values on page 296 for more
information.

Non-Processing model
In the Non-Processing model, one part from Stock and another from Manufacturing are combined into an assembly. The stock part weighs 10 pounds and the manufactured part weighs
between 1 and 3 pounds. The model uses an attribute called Weight to track the weights of the
separate parts.

Non-Processing Model

Discrete Event

See the Air Freight with Item Log model for an example of using item logging. Also see the help
of the Item Log Manager block for a detailed example showing how it works.

286

Statistics and Model Metrics


Time weighted versus observed statistics

The Properties tab of the Batch block is set to sum the values of the Weight attribute for the completed assembly. After the parts are batched, an Equation(I) block increments the Weight attribute
by 0.5 pounds. At the loading dock, the weight of the current item is displayed as it leaves.

Processing model

Discrete Event

If the data to be accumulated is dependent on processing, you can accumulate values using a Holding Tank block (Value library) connected to the PT (process time) connector on an Activity block.
For example, to accumulate the total amount of processing time parts required, as an indication of
when the processing equipment needs to be refurbished.

Processing model

In this model, each time an item leaves the Activity, its processing time will be added to the value
in the Holding Tank.

Time weighted versus observed statistics


The Mean & Variance block (Value library) can calculate either a time weighted or observed statistic:
If Use time weighted statistics is checked in the Mean & Variance block, the mean, variance,
and standard deviation are calculated by weighting the input value based on the simulation time.
This is derived by dividing the input value by the duration of that input value and then summing these over the course of the simulation.
If Use time weighted statistics is not checked, the sum of the input values will be divided by the
total number of input values received, resulting in an observed statistic.
When using the Mean & Variance block, carefully consider the type of statistics that you want to
calculate. Some guidelines for whether or not to select the time weighted statistics option are:
If the value that you are collecting statistics on has a value at every point in the simulation,
enable time weighed statistics. A good example of this is the number of items in a block
(reported by the L connector). At any point in the simulation, there are a certain number of
items in a block. To determine the average value, weight it over time.
If the value that you are collecting statistics on only has a value at specific events, do not use time
weighted statistics. An example of this is the W or wait time connector. This connector only has
a value when an item leaves the block, which is a specific event. In that case, time weighted statistics should not be used.

Statistics and Model Metrics


Timing the flow of items in a portion of the model

287

Time Weighted Statistics model


The Time Weighted Statistics example shows the difference between the two methods of calculating statistics and how they are calculated.

Comparing the weighted and un-weighted approaches to the average queue length reported in the
Queue blocks Results tab, it is clear that not using time weighted statistics would give an incorrect
answer for this model.

Timing the flow of items in a portion of the model


In addition to performance information that is directly available in a model, you may want to
determine cycle time how long it takes an item to go from one part of the model to another. For
example, you may want to know how long a customer waits in line to place an order, or how long
it takes that customer to get served once the order is placed.
To see how to determine cycle time in a model, see Cycle timing on page 298.

Discrete Event

Time Weighted Statistics model

Discrete Event

288

Statistics and Model Metrics


Timing the flow of items in a portion of the model

Discrete Event Modeling

Tips and Techniques


Helpful information for when you build discrete event models

290

Tips and Techniques


Moving items through the simulation

This chapter provides some tips, techniques, and information you may find helpful when building
discrete event models. The chapter covers:
Moving items through a simulation
How items move: holding and pushing. viewing and pulling
Implications of connecting to multiple item inputs
An items travel time
Using scaling for a large number of items
Preprocessing
Restricting items in a system
Connecting to the select connector
Issues for continuous blocks in discrete event models
Setting time-based parameters using a Random Number or Lookup Table block

Discrete Event

Varying a distributions arguments for the Create block


Accumulating values using a Holding Tank block
Cycle timing
Item library blocks
The Executive
Types of blocks: residence, passing, decision, and non-item
Common connectors on Item library blocks
Templates for common situations
Event scheduling

Messaging in discrete event models


The models for this chapter are located in the folder \Examples\Discrete Event\Tips.

Moving items through the simulation


In general, item input connectors on discrete event blocks will pull an item in, do something with
it, wait for the block connected to the item output connector to pull the item out, then pull in
another item. For example, the Activity block will pull items from preceding blocks, process those
items, and hold them to be picked up by another block.
It is important that you understand the ExtendSim discrete event behavior so you can avoid making modeling errors.

How items move through the simulation


It is important to understand how items move through specific blocks so that you can avoid two
rare but possible pitfalls: losing items from the simulation and having items stop moving in the
simulation.
To avoid the problems discussed below, you should probably connect Create blocks to queues so
that items do not get lost and connect the History block in parallel with other blocks that will
actually pull in the items.

Tips and Techniques


Moving items through the simulation

291

Holding and pushing


Item library blocks treat their output items in one of two ways:
Most blocks hold the item and it leaves only when another block pulls it in.
When set to create items randomly, by schedule, or infinitely, the Create block pushes the item
from the block when it is generated, regardless of whether it will be picked up by another block.
The Create block has to push items out, because those items are created within the block and are
arrival time related.

Unwise:

Wise:

Of course, if the Activity has an infinite capacity, it is not necessary to place a queue after the Create block.
A Create block set to Create items infinitely should never be connected to an infinite capacity
queue, since generating an infinite supply of items would overwhelm the system.
Pulling and viewing
There are two ways a blocks item input connector can have access to an item: it can pull an item
from the preceding block (as most connectors do), or it can simply view an item that is waiting at
the item output of the preceding block. If an item input connector pulls an item in, it has access to
the item for processing. However, if an item input connector only views items, it does not have
direct access to them, it can only sense their presence at the preceding output connector.
The particular connectors that only view items (not pull them) are:
The Gate blocks sensor connector when it is set to Type: area gating or its demand connector
when the block is set to Type: conditional gating with items.
The item input connector on the History block, if the block has been added in parallel to
another block. This is shown below and described in Using the History block to get item information on page 283.

Discrete Event

Avoid this pitfall


When a Create block pushes an item and
it is not picked up, the item disappears
from the simulation. Generally this
would only be used in certain very specific types of models. In most situations
where the Create block is set to create
items randomly, by schedule, or infinitely, follow the block with a queue to
collect the items and hold them, so that
all the items generated are available for
the rest of the model.

292

Tips and Techniques


Moving items through the simulation

Avoid this pitfall


When one block holds an item and that
item is only viewed by another block,
the item does not move through the
simulation and is blocked. This is never
desired.
For example, both screenshots to the
right show a History block that has
been auto-created and is viewing items
in an Activity block. In the top (error)
screenshot, after the Activity block has
finished processing its first item, the
item will have nowhere to go since it is
blocked.

Error:

OK:

Discrete Event

Connections to multiple item input connectors


You can connect from one item output connector to as many item input connectors as you want.
However, since items can only be in one place at a time, the first connector to pull in the passed
item gets it and the other connectors do not.
Furthermore:
If more than one input on a single block is free, the item will arbitrarily go to any available
input. (Note that the selection is arbitrary not random.)
If more than one block is free to accept the item, the item will go to the block that was first connected in the model. This is shown in Implicit routing on page 156 and Simple parallel connections on page 172.
It is more typical that you would want to specify which input connector, or which block, would
get an item. For more information, see Items going to several paths on page 153.
Unless it is completely unimportant in the model, you should always use the Select Item In and
Select Item Out blocks to explicitly state how items should be routed. Otherwise, the order in
which their connections were made will dictate the routing.

An items travel time


In a discrete event model items travel from block to block as dictated by the connection lines. The
lines between blocks indicate the path of the movement, but they dont provide any delay to the
items.
In most cases, travel time is insignificant and can be safely ignored. Where an items travel time is
significant to the model, you can:
Increase the delay time of destination blocks to compensate for the travel time
Specify a minimum wait time in a Queue blocks Options tab
Explicitly set a travel time in a Transport or Convey Item block, as discussed in Transportation
and material handling on page 192. (You can easily add a Transport block between two blocks
by right-clicking the leftmost blocks output connector and selecting Add transport block.)

Tips and Techniques


Moving items through the simulation

293

Using scaling for large numbers of items


In discrete event modeling problems, the number of items that need to be processed through the
simulation may be quite large. This will slow down the execution of the model and increase the
amount of memory required. It is often possible (and non-destructive to the validity of your
results) to scale down the number of items passing through the model. For example, if there is one
item representing a single log in a simulation of a lumber mill, the same model could quite possibly run faster, and equally well, with one item representing ten logs.
When you make scaling changes to a model of this nature, it is very important to reflect the
changes everywhere in the model. Thus, if an activity that represented a saw in the lumber mill was
set to take one time unit to process an item (one log) before, it must now take ten time units to
process the same item (ten logs) after the scaling.

While scaling can sometimes be a useful approach, the Rate library is specifically designed to
model high volume and/or high speed systems. In most cases, using the Rate library is superior to
item scaling. The Rate library is available with the ExtendSim AT and Suite products.

Preprocessing

Set the initial value in a Resource Item block to the number


of items you want to generate. Connect the Resource Item
block to a Set block where you attach item properties (priority, attribute, etc.). Then connect to a Queue that sorts based
on the desired item property.
When the model is run, all the items will travel from the
Resource Item block to the Queue on step zero. This makes
the items, with all their properties, available to the rest of the
model at the start of the simulation.

Preprocessing

If there are many items in the Resource Item block, the status bar may show the phrase Initializing Data. As soon as the preprocessing is done, the timer will settle into a more useful number.

Restricting items in a system


As part of a model you may want to have a section composed of a group of blocks in which only
one item (or a limited number of items) can be anywhere in the section at a time. For example,
assume you are modeling a manufacturing process with a paint room. There are many blocks that
represent the steps in the paint room but only two items are allowed in the entire paint room at a
time. New items must be restricted from entering the room until one or more items leave.
When set to Type: area gating, the Gate block is perfect for this because its sensor connector tells it
each time an item has reached the end of a system. The number of items allowed are set in the
Gate blocks dialog; in this case, two. Put the Gate block at the beginning of a system; at the end of
the system, run a parallel connection from the output of the last block to the Gate blocks sensor
connector.

Discrete Event

You sometimes want to have all the items available at the beginning of a simulation instead of generating them as the simulation proceeds. For instance, if you need some random orders presented
to the model in sorted order, you might want to sort them before the simulation starts. This is difficult under normal circumstances since the first order would begin traveling through the simulation as the second one was being created. There is an easy method that will cause ExtendSim to
create lots of items, store them in a queue, and release them.

294

Tips and Techniques


Continuous blocks in discrete event models

In this example, the paint room


is represented by two Activity
blocks. The Gate block will
pass the first two items it
receives into the paint room,
then only let a new item pass
when it sees the first item at its
sensor connector. As each item Restricting items
leaves the paint room, a new
item can enter. Note that the sensor connector doesnt accept any items; it only views them as an
indicator of their position in the model.

Another, more flexible, approach is to use a Resource Pool block to restrict items in a section of the
model. This is useful when you need to track statistics on utilization, or if you have multiple flows
of items accessing the same physical space.

Discrete Event

Connecting to the select connector


The select connector is used to
control the behavior of the Select
Item In and Select Item Out
blocks. If the select connector gets
its value from a Get block, you
should avoid putting Set blocks,
activities, and queues between the Safe and unsafe connections to the select connector
Get block and the Select block.
These blocks can alter the value sent to the select connector or delay the item so that the Select
block routes the wrong item.
For instance, the model segment shown at the left of the above screenshot will work properly. The
one shown to its right may not work correctly, because the item to be routed may still be in the
Activity block.

Continuous blocks in discrete event models


Value library blocks can be considered passive blocks in discrete event models. In most cases,
blocks from the Value library will not recalculate unless told to do so by an Item library block. This
has important ramifications for the behavior of Value library and other continuous blocks in discrete event models.
When an Item library block needs a new value at one of its value input connectors, it will send a
message out that connector to the connected Value library block, requesting a new value. Likewise,
when an Item library block has calculated a new value at one of its value output connectors, it will
send a message to the connected Value library block notifying it of the change. Typically these
messages will cause the Value library blocks to recalculate. The messages are then propagated to all
other connected Value library blocks.
In discrete event models, most blocks from the Value library typically neither post events to the
Executive nor receive event messages from the Executive. Furthermore, Value library blocks do not
recalculate on each time step in discrete event models as they do in continuous models. Rather,
they are only alerted to recalculate if they receive a message from an Item library block. And most
Item library blocks are triggered to action only by the arrival of an item. Complications can arise if
a Value library block does not get a message from an Item library block when you expect or want it
to recalculate.

Tips and Techniques


Continuous blocks in discrete event models

295

Some Value library blocks, such as the Clear Statistics and the Lookup Table, do generate events in
a discrete event model because they need to perform a specific action at a scheduled time.
To prevent modeling errors, it is helpful to understand this relationship between Item and Value
library blocks. Common situations where this is important include:
1) Setting time-based parameters using connections from a Random Number or Lookup table
block. This is described on page 295.
2) Varying an argument for a Create blocks distribution with a Lookup Table where there is the
possibility of a message being ignored. This can cause a lot fewer items to be created than
expected, as discussed on page 296.

3) Using a Holding Tank block to accumulate the result of a calculation performed on two or
more values coming from Item library blocks. If not modeled properly, the Holding Tank can
get duplicate messages and will have incorrect results. This is described on page 296.
For a detailed discussion about messaging between discrete event and continuous blocks, see
Value input and output connector messages on page 305.
Some time-based parameters can be set using a connector value. In these situations, the value sent
to the input connector must be defined in the time unit specified in the receiving block. The following examples illustrate issues you should be aware of.
Random Number block
Assume you want the delay for an Activity block to be approximately 30 minutes and you connect
a Random Number block to the Activitys D input connector. If the local unit of time for the
Activity is minutes, you would set the Random Number block to generate numbers with a mean of
30. However, if the Activity block used hours as its local time unit, the Random Number block
should be set to generate numbers with a mean of 0.5.

It is a modeling error to expect the Random Number block to create random values at each event
in a discrete event model. The only time this Value library block will be activated to output a new
value is when it receives a message on one of its connectors. In the above example, the Random
Number block will get a message each time an item arrives to the Activity block, so each item will
get a random delay time. For more information, see Value input and output connector messages
on page 305.
Lookup Table block
It is possible that the numbers in one column of a block are based on the time unit for that block,
and the numbers in another of its columns are based on the time unit for a second block. An
example of this is described in Choosing time units for the columns on page 117.

Varying a distributions arguments


It is common to use another block to specify the arrival intervals by varying the argument (such as
the mean) of a distribution in the Create block. To avoid unexpected results, it is important to
understand what happens in the Create block when you do this. The Create blocks default behavior is to send a message to the Executive block giving an arrival time, called nextTime, for the
next item based on the current input parameters. When simulation time reaches nextTime, the
Executive block sends a message to the Create block. The Create then releases the item and generates a new nextTime based on the current values of the input parameters. For the period of time

Discrete Event

Setting time-based parameters using connectors

296

Tips and Techniques


Continuous blocks in discrete event models

between releasing items, the Create block will not react to changes in the input parameters. If the
inputs change drastically, this can cause unexpected results as shown in the following example.
Lookup Table example
Assume you connect a Lookup Table block to the mean
input connector of a Create bock, varying the interarrival
mean according to the schedule in the table at right.

Discrete Event

For this example, both the Time and Output 1 columns


of the Lookup Table block are defined using hours as the
time unit. The mean for the interarrival time is 12 hours
Lookup Tables table
except for the period between hours 6 and 14 where the
mean is 0.5 hours. Because the mean is only an average,
it is possible for the Create block to generate an item at time 0 with an arrival time of 14 or more.
If that happens, the Create block will get the message that the mean should have changed to 0.5
between hours 6 and 14, but it will ignore it. In this case, the number of arrivals will be much less
than expected.
The Options tab of the Create block has a check box labeled Interarrival time changes occur
immediately. When checked, it will cause the Create block to immediately respond to changes to
any input parameter. In the case of the above example, the Create block would recognize that the
mean had changed from 12 to 0.5 at time 6. It would then generate a new random number for the
arrival time using the new input values.

Using the Holding Tank block to accumulate values


When accumulating data in a model, it is important to not make the error of assuming that you
can add attribute values and then accumulate them.
Incorrect approaches
Assume you want to accumulate the sum of two attribute
values. Your first intuition might be to add the two attribute values together and send the result to a Holding
Tank block (Value library).
Two incorrect approaches to do this are shown at right.
In the first case the attribute values are obtained from
Incorrect approach #1
two Get blocks; in the second case the attribute values
are captured from one Get block. In both cases the Holding Tank will give incorrect results.
Each time an item passes through a Get block, a message is sent
out each value output connector. The way this been constructed,
the passing of one item will result in two additions being contributed to the Holding Tank block.
Attributes Error model
Incorrect approach #2
The Attributes Error model illustrates the modeling problem
and some potential solutions. The problem with this model is
clear if you look at the numbers, 11 and 42 respectively, displayed by the Exit and Display Value

Tips and Techniques


Continuous blocks in discrete event models

297

blocks. Since the values of attribute A and attribute B are both 1, the accumulated total displayed
on the Display Value block should only be twice the value displayed in the Exit block; clearly this
is not the case in this model.

Attributes Error model: Problem

The Attributes Error model includes four examples: the problem and the three solutions discussed
below.
Solution #1: two Holding Tank blocks
One way to solve this problem is to accumulate the
attributes values separately using two Holding Tank
blocks. The contents of the Holding Tanks are then
added together. This prevents the double counting
of the previous example, because each Holding Tank
block receives only one message and value per item
that passes through the Get block it is attached to.
Solution #2: the Equation(I) block
Another solutions is to perform the calculation in the Equation(I)
block (Item library). The Equation(I) sums up and accumulates the
attributes in one step, so it avoids the double messaging problem altogether. The equation entered is:
Accumulate = Accumulate + a + b;
Result = Accumulate;

where accumulate is a static variable and a and b are the two attribute values from the item entering
the Equation(I) block. The equation adds the two attribute values to the accumulated value, then
sets the output to the accumulated value.
As an alternative, instead of both summing the attributes and accumulating, the Equation(I) could
just sum the attributes and output that value to a connected Holding Tank.

Discrete Event

The reason for the modeling problem shown above involves the message passing system in discrete
event models. Individual items travel through the Get blocks sequentially. As an item passes
through the first Get block, the block sends a message and the value of the attribute to the Math
block (Value library). The Math block then recalculates and sends a message and the value to the
Holding Tank block (Value library). When the item moves to the second Get block, it will send a
message to the Math block again. This causes the Holding Tank block to get two messages and two
values for each item that passes through the system. This kind of problem will occur in any discrete
event system where there are multiple connections to a Holding Tank block (either directly, or
indirectly as shown above) or if one Get block was used with two outputs.

298

Tips and Techniques


Cycle timing

Solution #3: the Stop Message block


You can also use the Stop Message block (Utilities
library) to prevent the Math and Holding Tank blocks
from receiving two messages for every one item. This
block stops messages from being passed through a
value connection; it is designed to solve problems of
this nature.
The Stop Message block is connected between the
value output of Get 1 and the value input on the Math
block. This will prevent the first message from reaching the Math block but will allow the value to
be passed.

Discrete Event

Cycle timing
The amount of time one block takes to process an item is known as the delay or processing time.
Cycle time is the time an item takes to travel through a group of blocks. If there is no blocking in a
model (that is, if all items leave their blocks exactly at the end of their delay time), the cycle time is
the sum of the delay times for the section being measured. In most situations, this would rarely
occur, and cycle time is usually more than the sum of the processing times. For instance, it is common that an item cannot leave a block because the next block is still processing its item.
To track an items cycle time, use either the Timing attribute feature (if the item is being tracked
from its origin) or a Set or Equation(I) block with an Information block (if the item is being
tracked from some place other than its origin).
These methods are discussed below. In each case,
the Information block reads the attribute and calculates the difference between when the item
started the cycle and when it ended. The dialog of
the Information block displays the current, average, minimum, and maximum cycle time for all
items with the specified attribute. Its output con- Cycle time portion of Information dialog
nectors report the count of items, the time
between items, their cycle time, and the throughput rate.

Using the Timing attribute feature


If you are tracking the item from its origin, use the Timing attribute feature in the Create blocks
Options tab to create a new value attribute and assign it to all items that are generated by the Create block. Then place the Information block at the end of the section you want to observe and
select the name of the attribute as the Timing attribute in its dialog.
In the example shown at
right, a value attribute
named CycleTime has
been created in the Create block, and the blocks
Options tab is set to
Timing: CycleTime.
Cycle Time 1
The Information block is
placed after the Primer activity and is set to Calculate TBI and Cycle Time statistics, and its Timing
attribute: is also set to CycleTime. For this model, the Information block calculates the time

Tips and Techniques


Item library blocks

299

from when items were first created to when they finish being primed. This includes the time items
wait in the Queue.

Using a Set or Equation(I) and Information blocks


If you are tracking the item from some place other than its creation point, put a Set or Equation(I)
block at the beginning of the section you want to observe, create a new value attribute in that
block, and set the attribute to the current time. Then place an Information block at the end of the
section and enter the name of that attribute as the Timing attribute in its dialog.

Cycle Time 2

Item library blocks


Executive block
The Executive block controls and performs event scheduling for discrete event and discrete rate
models. An Executive block must be placed to the left of all other blocks in a discrete event or discrete rate model. Using it in a model changes the timing from continuous to discrete, and simulation time advances when events occur, rather than periodically.
This block can be used to:
Manually control when the simulation stops. The default is that a simulation stops at the end
time set in the Run > Simulation Setup dialog. You can also choose to stop the simulation when
the number at the Executives count input reaches a specified value.
Allocate item availability. To conserve memory, this number should be something close to and
less than the maximum number of items that you expect to see in the simulation. The default is
that 10,000 items are initially available and additional items are made available in batches of
10,000.
Declare and manage string attributes for items in Item library blocks.
A table in the Item Attributes tab is used to enter a descriptive text label (string) for each
potential attribute value for a selected string attribute. For more information, see Creating a string attribute on page 108 and Item attribute types on page 120.
Other tables in the Item Attributes tab allow you to select an attribute for renaming or
deleting, and display blocks that use the selected attribute.
Declare and manage string attributes for flow in Rate library blocks

Discrete Event

In the example at right, an


attribute named CycleTime2
has been created in the Set
block. The Simulation Variable block (Value library)
outputs current time and is
attached to the Set blocks
value input connector. For
this model, the Information
block calculates just the time
that the items take to go
through the priming and
drying processes.

300

Tips and Techniques


Item library blocks

A table in the Flow Attributes tab is used to enter a descriptive text label (string) for each
potential attribute value for a selected string layer attribute. For more information, see
Flow attributes on page 339.
Other tables in the Flow Attributes tab allow you to select a flow layer attribute for renaming or deleting, and display blocks that use the selected attribute.
Manage flow units and select global and advanced options for discrete rate models. For more
information, see Global and advanced options in the Executive on page 422.

Set information for the LP solver used in discrete rate models. For more information, see LP
technology on page 434.
Unless you use string attributes, it is rare that you would need to make any changes in the Executives dialog. Most of its options are for advanced users.

Templates

Discrete Event

The Item Templates library contains templatessubmodels within hierarchical blocks for common modeling situations such as emptying a queue at intervals or selecting the shortest queue.

Block types
As discussed on Item connector messages on page 307, Item library blocks pass messages
through item connectors. There are three types of item-based blocks that determine how the item
connector messages are handled:
Residence-type blocks are able to contain or hold items for some duration of simulation time.
Some residence blocks post events and some do not.
Passing-type blocks pass item through without holding them for any length of simulation time.
These blocks implement modeling operations that are not time-based; they usually do not post
future events.
Decision-type blocks route the items through the model. These blocks choose a route based on
an item property, a random value, a sequence, or an input from a connector. Depending on
what options are selected in the block, a decision-type block may or may not be able to hold
onto items.
Why block types matter
Knowing these categories of blocks and how they relate to the processing of items will help you to
build better models. For example an item will not enter a passing block before it has been determined that there is space in the next downstream residence block. And when you debug models it
is useful to understand where the items can reside for any amount of time, as well as the time
required for an item to move from one residence block in the model to another. In addition, some
of the options in the blocks refer to specific block types. An example of this is the Transport block
where you can specify that the distance to the next block is from the Transport block to the next
non-passing (residence or decision) type block.

Tips and Techniques


Item library blocks

301

Table of block types


Not all of the blocks in the Item library fit neatly into these categories, but it is helpful to use the
categories as a framework for thinking about the messaging architecture. Following is a table of the
blocks in the Item library and their associated type.
Type

Block

Type

Activity

Residence

Queue Matching

Residence

Batch

Residence

Read(I)

Passing

Catch Item

Passing

Resource Item

Residence

Convey Item

Residence

Resource Pool

N/A

Cost By Item

Passing

Resource Pool Release

Passing

Cost Stats

N/A

Select Item In

Decision

Create

Residence

Select Item Out

Decision/Residence*

Equation(I)

Passing

Set

Passing

Executive

N/A

Shift

N/A

Exit

Residence

Shutdown

Residence

Gate

Decision

Throw Item

Passing

Get

Passing

Transport

Residence

History

Passing

Unbatch

Residence

Information

Passing

Workstation

Residence

Queue

Residence

Write(I)

Passing

Queue Equation

Residence

* If an item is allowed into the Select Item Out block before the decision is made (see the dialog
check box), then it is a residence-type block. If the decision is made before the item enters the
block, then it is a decision-type block.

Common connectors on discrete event blocks


Many blocks use abbreviations or acronyms to indicate a connectors purpose. Some of these represent more than one purpose and are context sensitive. The following connector labels appear on
many Item library blocks:
Connector

Meaning

Delta

Count

Average cost (Cost By Item)

AD

Accumulated demand (Gate)

AS

Activity status

BT

Blocked time

Discrete Event

Block

Discrete Event

302

Tips and Techniques


Event scheduling

Connector

Meaning

Capacity (Activity, Workstation)


Current cost (Cost By Item)

CI

Confidence interval

CT

Cycle time

Delay (Activity)

DB

ExtendSim database

DT
DV
F

Down time (Activity)

Interval between items

Length of waiting line (Queue, Activity, Workstation)


Length of line (Information - will be 0 or 1)

LO

Length out (Queue Matching)

MG

Match group (Queue Matching)

NB
P

Number blocked

PE

Preempt

PT

Process time

Quantity

Renege time (Queue)


Row (Cost By Item)
Record (Read Item, Write Item when ExtendSim database is selected)

RS

Reset

SD

Shut down

Down value (Shutdown)


Full (Activity, Queue)
Field of a database table (Read Item, Write Item)

Priority

Total cost (Cost By Item)

TBF

Time between failures (Shutdown)

TP

Throughput rate (Information)

TTR

Time to repair (Shutdown)

U
UV
W

Utilization
Up value (Shutdown)
Wait time for items leaving the queue

Event scheduling
ExtendSim moves items in a discrete event model only when an event happens. Events are controlled by the Executive block and only occur when particular blocks specify that they should.
Blocks that depend on time cause events to happen at the appropriate time. For instance, an Activ-

Tips and Techniques


Event scheduling

303

ity block holding an item until a particular time will cause an event to be posted to the ExtendSim
internal event calendar. When the time is reached, the event occurs and the model recalculates its
data.
Blocks that do not generate events allow the blocks after them to pull items during a single event.
Thus a single event can cause an item to pass through many blocks if those blocks do not stop
them. For instance, a Set block could set the items attribute and pass the item to the next block in
the same event.
Discrete event and discrete rate simulations use the same method for updating the simulation
clock. Simulation models of this type are driven forward by event and the state of the model
changes only at event times.
At each event, blocks that have posted an event to the event calendar for the current time receive a
message notifying them that the time has arrived. Once all of the blocks have received their messages, the time for the next event is determined. Through this event scheduling mechanism the
simulation clock jumps from one event to the next.

Event calendars

This two-stage event calendar is very efficient and flexible. Unlike single stage event calendars, relatively little time is spent by the Executive in maintaining and searching the event list.
The Executive
The Executive block maintains a list of all event times for the model in its event calendar. At the
beginning of each simulation event, the Executive locates the next future event and sends a message to each of the blocks in sequence that posted an event for that time. Once a block has completed processing its event, it will post its next event time to the Executive. If the block does not
have a future event time, it will post a very large value as its next event time, effectively removing it
from the list of pending events.
Blocks may have two or more entries on the Executives event calendar. This is because they have
different types of events that need to be processed. For example the Convey Item block has an
event that occurs when an item is able to enter the block and an event for when the item leaves the
block.
For more information about the Executive block, see page 299.
Internal event calendars
Each block that has a time delay associated with it (for example the Create, Activity, Pulse, and
Shutdown blocks in the Item library) maintains its own, independent next event time.
Blocks such as the Activity, Convey, or Shutdown block can have multiple future events (one event
for each item in the block) ongoing simultaneously. In this case, the blocks maintain their own
internal event calendar, posting only the earliest of these events to the Executive's event calendar.

Zero time events


As the simulation progresses, there are many times when it is useful to generate a zero time event.
This is done to allow an item to complete the process of moving into a block before the block
attempts to perform additional actions on the item. For this purpose, the Executive maintains a
current events list. This is a short list of the blocks in the model that need to receive a message
before the simulation clock advances.

Discrete Event

ExtendSim utilizes a two-stage event calendaring method the Executive block maintains a list of
all events for the model and time-delay blocks maintain their own event calendars.

304

Tips and Techniques


Event scheduling

A prime example of this is the Queue block. When an item arrives to a Queue, a zero time event is
posted so that the Queue can return control to the upstream block that sent the item. The Queue
receives another message before the clock advances so that an attempt can be made to send the
item to the next downstream block. This feature enhances the efficiency and predictability of discrete event models.

Event Scheduling model


A discrete event model is helpful in
understanding how event scheduling
works. For this example: items arrive,
wait at the first queue, are processed at
the first activity, wait at the second
queue, are processed at the second
activity, and leave through an exit.

Event Scheduling model

In this model, there are three blocks that post events:

Discrete Event

The Create block posts an event for the creation of each item. The time between item arrivals is
0.6.
The Activity 1 block posts an event for the earliest completion time of an item in the block. The
duration of this activity is 1.0.
The Activity 2 block posts an event for the earliest completion time of an item in the block. The
duration of this activity is 0.5
As the simulation progresses through time, the event calendar in the Executive might look like this:
Time

Create posts next Activity 1 posts Activity 2 posts


Events
event time
next event time next event time

0.0

0.0

Infinity

Infinity

Item #1 is created

0.0

0.6

1.0

Infinity

Item #1 begins service at Activity 1

0.6

1.2

1.0

Infinity

Item #2 is created

1.0

1.2

2.0

1.5

Item #1 completes service at Activity 1


Item #1 begins service at Activity 2
Item #2 begins service at Activity 1

1.2

1.8

2.0

1.5

Item #3 is created

1.5

1.8

2.0

Infinity

Item #1 completes service at Activity 2

1.8

2.4

2.0

Infinity

Item #4 is created

2.0

2.4

3.0

2.5

Item #2 completes service at Activity 1


Item #2 begins service at Activity 2
Item #3 begins service at Activity 1

2.4

3.0

3.0

2.5

Item #5 is created

Notice how the next event time is always the lowest of all of the event times for all the blocks; this
is how a discrete event simulation works. Also, the table illustrates the concept of event scheduling
but does not show all of the detail of what is happening as the items move through the blocks. For
example, the Queue schedules a zero time current event as it moves the item through, but this is
not shown in the table.

Tips and Techniques


Messaging in discrete event models

305

Messaging in discrete event models


As discussed in How ExtendSim passes messages in models on page 591, the ExtendSim architecture allows application messages to be sent from ExtendSim to a models blocks and block messages to be passed between blocks.
Discrete event models use the same application messages as do continuous and discrete rate models. The block messages sent between Item library blocks are discussed below.

Block messages
Discrete event blocks have a sophisticated messaging structure for communicating with each other
and with blocks in the Value and Rate libraries. These messages can be categorized as:

Event
Value connector
Item connector
Block-to-block

A future event message occurs when the simulation clock reaches a time posted by a block. For
example, when an item enters an activity, the activity will post a future event to the Executive
corresponding to the items finished time. Once the simulation clock has advanced to this
future event, the Executive sends an event message to the activity, alerting it that the item has
finished processing.

A current event message occurs when a block wants to be activated before the simulation clock
advances, but after it has completed its response to another message. For example, a queue will
post a current event message to the Executive as it is pulling in items. After all the items have
arrived to the queue, the Executive sends a current event message to the queue. This signals the
queue to try and push all the items out of the block.
The only blocks in the Value library that post future events are the ones that provide values or perform actions at specific times. Examples are the Clear Statistics block that resets the simulation statistics at a scheduled time and the Lookup Table block that provides values at scheduled times.
Other Value library blocks lie dormant during a discrete event simulation unless they receive an
activating message (either directly or indirectly through another block) from an Item library block.
Value input and output connector messages
Blocks in a discrete event model send value connector messages either because a new number is
needed by an input connector or because the value of an output connector has changed. These
messages either request updated information for the input connectors or notify connected blocks
that the output value has changed.
When a message is sent from an input value connector, the sending block requests an updated
connector value from the receiving blocks. Messages sent out the input connectors go only to
the outputs of the directly connected blocks.

Discrete Event

Event messages
Event messages communicate between the Executive block and Item library blocks in a model. In a
discrete event model the simulation clock advances from one event to another. Each time the clock
advances, the Executive block sends event messages to the Item library blocks that have associated
themselves with that event. There are two types of events: future and current.

306

Tips and Techniques


Messaging in discrete event models

Whenever an output connector changes, messages are sent to all of the inputs of the directly
connected blocks. In this case, the sending block alerts the receiving blocks of a connector value
change. Blocks that receive messages at their input connectors may, if appropriate, propagate
messages:
Out other input connectors to make sure that all input values are current
To their output connectors to notify other blocks of the change in value

Discrete Event

Through this mechanism, a single value change may cause any number of connected blocks to
recalculate, ensuring that any system dependencies are automatically evaluated. For example, if the
value of an input connector on an equation-type block changes, messages are first sent out the
other input value connectors if they are connected (ensuring the equation will have up-to-date
inputs prior to calculation.) Then, with updated inputs, the block recalculates its equation and
posts the new results on its output value connectors. Once the new results have been posted, messages are sent out the output connectors, alerting any connected blocks that the results have
changed.
Example of value connector messaging
The sample model shown below illustrates how value connector messages work. In this example,
items arrive, an attribute is set to a random number, and the items are then processed at two work
areas (Queue and Activity blocks) in series. Three Value library blocks (Random Number, Math,
and Display Value) provide a random number for the attribute value, add the two queue lengths,
and display the sum of the lengths, respectively.

Example of value connector messages

When an item arrives to the Set block a message is sent out its value input
connector. The Random Number block responds by providing a new random
number each time it receives a message. This simple messaging example is
shown at the right.
In a discrete event or discrete rate model, the only time most Value library
blocks (such as the Random Number block) are alerted to do something is
when they receive a message on one of their value connectors. For instance, do
not expect the Random Number block to continuously output a stream of
random numbers in discrete event or discrete rate models.
In the more complex messaging case that
is shown to the right, when an item
arrives at the first queue its length will
increase by 1. Since this changes the
blocks L (length) output connector,
Queue 1 sends a message to all inputs
connected to L (in this case the Math
block). When the Math block receives
this message, it sends a message to the L

Three messages sent

One message sent

Tips and Techniques


Messaging in discrete event models

307

connector at Queue 2, ensuring that both inputs are up-to-date before any calculation is made.
The values of the two length connectors are then added together and a third message is sent to the
Display Value block, which then updates its animation and dialog.
Item connector messages
Item connector messages (primarily wants, needs, and rejects) propel items through the model.
These messages use a conversation of messages to move items from one block to another. This
mechanism allows for items to be both pushed and pulled from one block to the next. How these
messages are handled depends on whether the block is a passing, residence, or decision block (see
Cycle timing on page 298.)
Pushing items
In the case of pushing, the upstream block first sends a wants message.
If the downstream block is a passing block, it forwards the message to the next downstream
block through its output connector.

If the downstream block is a decision block, it determines the status of the decision and any
downstream blocks. It often does this by sending additional item or value messages and then
responding with a needs or rejects.
Create sends
w ants to
downstream block

No
Passing Block

Do I need an
item?

Need Item

Yes
Reject Item
Send wants to
next downstr eam
block

Flowchart for how items are pushed

Pulling items
To pull an item, a residence block sends the wants message upstream. This wants message is passed
through the passing and decision blocks until it reaches a residence block. If the residence block
has an item that is ready to leave, then a needs message is returned. If no item is available, then the
residence block rejects the wants message.

Discrete Event

If the downstream block is a residence block, it responds with either a needs message (if it can
accept an item) or a rejects message (if it is unable to accept an item based on its status).

308

Tips and Techniques


Messaging in discrete event models

Following is an example of pulling an item from an upstream block to a downstream block:


Activity completes
processing and
sends a w ants
upstream

Passing or
decision block

No

Do I have an
item?

Item needs to
be taken

Yes
No item,
reject wants
Send wants to
next upstream
block

Discrete Event

Flowchart for how items are pulled

This is only the first step in the process of moving an item. A number of messages follow that propel the item through the network of blocks. More details about those messages can be found in the
Developer Reference.
Block-to-block messages
Block-to-block messages update the status of other blocks in the model. Sometimes a block needs
to communicate with another block in the model, but there is no direct connection between them.
For example, if a change in the shift status occurs, a Shift block needs to notify all of the blocks
that reference that shift. These messages are sent through the air to the blocks. In most cases, you
will not even be aware that these messages are being passed back and forth. The actual operation
and context of the message depends on the blocks involved in the conversation.

Discrete Rate Modeling

Introduction
Some things to know before you start
modeling discrete rate systems

The question of doubt and uncertainty is what is necessary to begin;


for if you already know the answer, there is no reason to gather any evidence about it.
Richard P. Feynman

310

Introduction
What this chapter covers

Discrete rate modeling is based on rates of flow that change when events occur. In a discrete rate
system, quantities of flow (material, product, data, etc.) are located in one or more parts of the
model. During the simulation run, the flow moves from one location to another at a certain speed,
called the effective rate. The movement between blocks that hold or route the flow follows paths,
rules, and constraints that are set in the model.

Discrete Rate

As discussed in Modeling methodologies on page 43, the primary modeling approaches are continuous, discrete event, and discrete rate. In some situations (listed later in this chapter), simulating a system using discrete rate modeling is a more natural fit compared to using continuous or
discrete event modeling. Processes that are event driven, rather than time driven, do not lend
themselves to continuous simulation. Systems where there is no item that can be identified, or
when there are so many items that identification is meaningless, can be more naturally represented
using a rate-based approach rather than discrete event modeling. Furthermore, rate-based models
run faster than discrete event models and are applicable to thinking in terms of flows, tanks, rates,
and so forth.
Any system or process that involves a quantity of something that is stored at one place, then moves
to another place at a rate per time unit, can be simulated using discrete rate modeling.
Like continuous and discrete event modeling, rate-based modeling can help you perfect processes
and products. It is useful for planning resource capacity by determining the rate at which products
are being processed or sold. It is helpful for testing various schedules to maximize process efficiency. And it can be used to analyze the effect of processes on the internal and external environment.
For information about discrete rate modeling in general, including how it differs from continuous
and discrete event modeling, see Modeling methodologies on page 43.

What this chapter covers


Discrete rate application areas
Simulating discrete rate systems
Blocks for doing rate-based modeling
An introduction to some important discrete rate concepts:
LP technology
Layout of a discrete rate model
The Executive block
Connectors and connections
Flow units and unit groups
Flow rates: constraining, effective, infinite, and potential
How the Discrete Rate module is organized

Discrete rate application areas


Discrete rate simulation is used in two diverse areas:
To model commodities that would normally be considered stuff rather than things, for
example powders or liquids, gases and other fluids in the following areas:
Petrochemical
Manufacturing

Introduction
Simulating discrete rate systems

311

Mining
Water Treatment
Pharmaceutical
Metallurgy
Electric power transmissions
Any other industry that processes commodities in bulk or batches
To model things that are so numerous that it would be inconvenient or overwhelming to
model them individually:
Food and beverages (tea bags, cereals, soda cans, cheese)
Drugs, cosmetics, and biotech (pills, bottles of lotion)
Milling (carpet and paper)
Data storage and manipulation (samples, messages, packets)
Any other industry that mixes, fills, or packages products on high-volume or high-speed
lines

As will be seen in the Discrete Rate Tutorial, it is common for discrete rate models to also include
portions that are discrete event processes.

Simulating discrete rate systems


Discrete rate modeling takes a very different approach compared to continuous or discrete event
modeling.

Comparison to discrete event and continuous modeling


The Value library blocks in continuous models and the Item library blocks in discrete event models act individually and independently to calculate values or move items. They may send messages
and communicate with each other, but there is no overall global connection between the blocks in
those types of models.
By comparison, Rate library blocks are dependent on each other and have an effect on one another.
Discrete rate models are divided into areas where the included blocks are not independent but
instead are part of a global system. The blocks within each area communicate through an internal
linear program (LP) that provides the global oversight for that area. Each block in an LP area contributes a part of the LP equation for the area; the result of the LP calculation is the effective rate
for that part of the model. This system is optimized such that, if a particular area does not need to
recalculate, it wont.
Another major difference is how items move in a discrete event model compared to how flow
moves in a discrete rate model.
In a discrete event model, items move from one block to another instantaneously. An Item
library block might hold an item for some simulated period of time, but there is no constraint
on the movement of items between blocks and that movement is instantaneous.
By contrast, the movement of flow in a discrete rate model must take some time. In the absence
of any constraints, the rate of flow would approach infinity and the flow would move instanta-

Discrete Rate

Thus discrete rate models simulate flows that are either homogeneous (identical goods that are the
same throughout and do not vary in essential characteristics) or heterogeneous (numerous items
that are clearly distinct, but cannot be easily sorted or separated).

312

Introduction
Simulating discrete rate systems

neously from one point in the model to another; this is never correct. For this reason, flow
movement must be constrained by rates and conditions that are built into the model, and a lack
of appropriate constraints is a modeling error that will stop the simulation run.

Discrete rate models


Discrete rate models are concerned with flows, constraints, rates, events, storage capacity, and routing.
Flow is what is stored in and moves through a discrete rate system. Flow can be almost anything:
liquids, electronic transactions, and cereal can all flow in a model. Flow is expressed and measured in flow units either generic units or defined units such as packets, gallons, transactions,
boxes, etc.
Flow moves through flow connections in one direction, from one blocks outflow connector to
another blocks inflow connector. It moves at a rate that is expressed as a quantity of flow per
time unit the number of packets per second, gallons per minute, boxes per hour, and so forth.

Discrete Rate

The discrete rate architecture maximizes the movement of flow. Unless limited in some manner,
flow would approach infinity and overwhelm the system. Because the discrete rate architecture
maximizes the movement of flow, every model must contain one or more constraints (typically a
Valve) to limit the rate of flow to something less than infinity. Some examples of constraints
include the presence or absence of flow in a Tank, the maximum flow rate defined by a Valve
block, and the rule chosen to distribute flow in a Diverge block.
While constraints determine the maximum rate that flow can move, the effective rate is the
actual rate of movement. The effective rate for each section of the model is determined using
linear programming (LP), given the set of constraints that has been defined by the model's structure. The models set of effective rates define how fast flow actually moves from one section of
the model to another. As the simulation clock advances from one event to the next, the quantity
of flow which has moved is updated.
The state of a discrete rate model changes only when an event occurs. An event might be a Tank
that becomes empty or full, a maximum rate that changes during the run, a block that changes
its output proportions, and so forth. Each time an event occurs, ExtendSim makes a calculation
to determine, at that moment, what the effective rates are in each part of the model. Any portion
of the model that can potentially be impacted by the new event has its effective rates recalculated. This takes into consideration the constraints put on the rates, the location of the flow, and
storage capacity in the system.
Each discrete rate model is conceptually divided into unit groups, rate sections, and LP areas.
These divisions are handled automatically and internally, and are determined by the type of
blocks used in a model, how the blocks are connected, the settings in the blocks, and so forth.
Unit groups are introduced on page 315, rate sections are described on page 357, and LP areas
are discussed on page 360.
A connection between two rate-based blocks can thus be viewed as an infinitely small pipe that is
always full of something at a constant pressure as soon as the effective rate is more than 0, the
pipes contents move at the highest rate possible based on all the constraints given by the system.
When the effective rate is 0, the pipe is still full but the flow instantly stops.

Introduction
Blocks for building discrete rate models

313

While the ExtendSim discrete rate architecture preserves mass balance in the system, no explicit
consideration is given to pressure, energy, momentum, or temperature, since these are beyond its
scope.

Blocks for building discrete rate models


The blocks in the Rate library are optimized for creating discrete rate models. In addition, you can
build custom discrete rate blocks using the ExtendSim development environment.

Rate library
The Rate library allows you to simulate a wide range of flow systems by
connecting blocks together and entering parameters. The complexity of calculating the effective flow rate and the generation of events that dictate a
new rate calculation are handled within the blocks, alleviating the need to
do any programming in the ModL language.
The blocks in the Rate library can be categorized as follows:
Some blocks hold and provide flow
Other blocks impact the effective rate of the flow
The remaining blocks are for routing flow

As mentioned in the Tutorial module, discrete rate models can use continuRate library blocks
ous blocks from the Value library for data management and model-specific
tasks. Using Value blocks with Rate library blocks does not change the fundamental architecture of discrete rate models; they will still be event-based rather than use the
time-based architecture of continuous models. Discrete event blocks from the Item library can also
be used in discrete rate models; they are helpful for representing entities such as tankers, airplanes,
people, and so forth that interface with flow.

See Rate Library Blocks on page 837, Item Library Blocks on page 829, and Value Library
Blocks on page 821 for a listing and brief description of the blocks in those libraries.

Creating custom discrete rate blocks


Because of the Rate librarys extensive capability, it is not likely that you would need to program
your own discrete rate blocks. If you do want to do this, it is important to note that discrete rate
blocks use different data structures and programming methods than continuous or discrete event
blocks. It is suggested that you start with an existing discrete rate block as a base, using a copy of a
Rate library block similar to the one you want to build. Read the Developer Reference before modifying discrete rate blocks so you have a better understanding of how those blocks work internally.

Terminology and architecture


Before building a discrete rate model, it is helpful to understand the terminology that will be used
and to have an overview of ExtendSim discrete rate architecture.

Discrete Rate

These blocks are optimized for modeling anything flowing through a system. They incorporate concepts like constraints, goals, flow prioritization,
mixing, batching, unbatching, level indicators, and so forth. The blocks
have been designed to meet most rate-based flow needs so you can quickly
and easily perform complex high-volume/high-speed modeling tasks.

314

Introduction
Terminology and architecture

LP technology
To provide global oversight to calculate the effective rates in a discrete rate model, ExtendSim uses
linear programming (LP) technology. The purpose of the LP calculation is to determine the maximum effective flow rates in the system given the constraints defined by block settings and the
structure of the model. After all the rules for storage capacity and movement have been declared in
the model, ExtendSim uses the LP calculation to cause as much flow as possible to move through
the system. This calculation is handled automatically and internally. For more information, see the
advanced topic LP technology on page 434.

Layout of a discrete rate model


A discrete rate model can combine continuous blocks (such as those in the Value library), and discrete event blocks (typically from the Item library), with discrete rate blocks from the Rate library.
If you use any discrete rate blocks in a model, the model will require the Executive block (Item
library).
Other than the Executive block, you can place the blocks in a model anywhere you want, remembering that ExtendSim evaluates discrete rate blocks along the path of the connections.

Since ExtendSim will always try to maximize the flow, causing the rate of flow to approach infinity
in the absence of any constraints, it is important to place upper limits on the flow at strategic locations throughout the model. Otherwise, the flow would move instantaneously from one part of the
model to another; this would be a modeling error.

Executive block
Discrete Rate

The Executive block (Item library) does event scheduling and makes the LP calculation for rate-based models. It must be present in every discrete rate model and it must
be placed to the left of all the other blocks in the model.
In addition to the information discussed on page 299, the Executive plays a special
Executive
role in discrete rate simulations. The blocks Discrete Rate tab allows you to set global
options for discrete rate models, manage quantity units, and select advanced options
for specific Merge and Diverge modes. Its LP Solver tab has information about the linear program
(LP) that provides global oversight for discrete rate models.

The settings in the Discrete Rate tab are explained fully on page 422.
For most purposes you will not need to change the settings in the Executive block.

Connectors and connections


The Rate library provides blocks for simulating rate-based flows. Most of the blocks in the Rate
library have flow connectors and value connectors; the Interchange block also has item connectors.:
Connector type
Flow
Value
Item

Line type

Introduction
Terminology and architecture

315

In a discrete rate model, flow connectors report the effective rate of the flow at each event. The
flow moves in one direction, from one blocks flow output (outflow) connector to another
blocks flow input (inflow) connector.
Value connectors provide information about the quantity of flow and a blocks capacity, as well
as information about the effects that the flow has in the model.
The item connectors on the Interchange block provide an interface between portions of the
model that are discrete rate and portions that are discrete event.
When combining discrete rate blocks with blocks from other libraries, you will only be able to
connect compatible connectors. To represent the flow from one block to another, an outflow connector has to be connected to an inflow connector. Each flow connector can have one and only one
flow connection. However, it is possible to connect an outflow connector to both an inflow and a
value input connector. In this case the value connector reads the effective rate from the connection.
A flow connection cannot be made with an item connector. For more information, see Connector
types on page 555.

Units and unit groups


There are four types of units in the Rate library:

Time units define how time is measured as the model run progresses. Like other ExtendSim
blocks, blocks in the Rate library can use the default global time unit or a local time unit. Hours,
minutes, and seconds are all examples of time units.
Calendar dates are not available if months or years have been selected as the specific global time
unit for a discrete rate model. Furthermore, if Calendar dates has been selected, Rate library blocks
will not be able to select Months or Years as their local time unit.
Length units specify how long something is; they are usually entered as feet, meters, and so
forth. The Convey Flow block has a length unit.
Block units are an internal unit of volume specific to the Tank and Interchange blocks. If you
select a block unit that differs from the flow units that come into and out of a block, you must
enter a conversion factor. The conversion factor represents the ratio of the block unit to the flow
unit.
A unit group is a collection of blocks connected together
through flow connections and sharing one flow unit. To see
the unit group, click the grey square to the right of a blocks
flow units popup menu. All the blocks in that blocks unit
group will be highlighted on the model worksheet.

Unit group selector to right of popup

For more information, see Units and unit groups on page 349.

Discrete Rate

Flow units indicate what is flowing


from one flow connector to
another. For instance, gallons, bottles, and transactions are all types of
flow units. Each discrete rate block Flow units
in a discrete rate model has a flow
unit. The flow units are identical for all the blocks within a unit group (defined below).

316

Introduction
How the Discrete Rate module is organized

Rates
One of the most important aspects of a discrete rate model is the rate of flow. A rate is the ratio of
the flow units to the models time units. This is displayed in block dialogs as units/time, gallons/
minute, transactions/second, boxes/hour, and so forth.
Several different types of rates are considered during the model building process:
Maximum rate the upper limit of the rate of flow, as described on page 357.
Effective rate the actual rate of flow. See page 357 for more information.
Upstream supply and downstream demand potential rates. See page 440.
Infinite rate any value equal to or greater than a large specified number. See page 358 for more
information.

How the Discrete Rate module is organized


The discrete rate portion of the User Guide shows how to build models to simulate rate-based
flows moving through a system at a certain speed. It will show you how to design and document a
rate-based model, run the simulation, test different scenarios, and analyze the results. The Discrete
Rate module is divided into several chapters:
Introduction
Tutorial

Discrete Rate

Chapters that discuss specific discrete rate modeling concepts and techniques:
Flow sources and properties
Flow storage
Flow movement: rates and constraints
Routing flow directly and remotely
Delaying flow using goals, hysteresis, and the Convey Flow block
Mixing flow and items
Bias, animation, and other miscellaneous concepts and features
Advanced topics such as LP technology, upstream supply and downstream demand, and messaging in discrete rate models.
It is important that you complete the chapters in the main ExtendSim Tutorial module that starts
on page 14 before you proceed to the Discrete Rate Tutorial. If you will use any item-based blocks
in your discrete rate models, it is also suggested that you complete the Discrete Event Tutorial that
starts on page 102.

Discrete Rate Modeling

Tutorial for Discrete Rate Systems


How to build a discrete rate model

318

Tutorial for Discrete Rate Systems


A basic discrete rate model

The key to discrete rate modeling is constructing a flow diagram using blocks from the Rate library
to represent flows through the system. The Rate library is designed specifically for building discrete
rate models. Blocks from other ExtendSim libraries, especially the Item, Plotter, and Value libraries, are often used with the Rate library to create discrete rate models.
The example in this chapter shows how to build a discrete rate model of a yogurt process; it will
use many of the blocks from the Rate library. Starting with a simple model, then adding complexity and features, this chapter will show how to:
Build a model of a simple rate-based process
Add a maximum flow rate that varies with the time of day
Add a second supply of product that is occasionally shut down for maintenance
Mix the two supplies according to a proportion
Create a filling operation that puts the liquid yogurt into containers
Add a conveyor to simulate a cooling process
Package the containers into cartons
Create a palletization area where the cartons are stored
Add a second palletization area in parallel to the first

Discrete Rate

While this example model simulates a mixing, filling, and packaging process, the Rate library is
useful for simulating many diverse concepts and processes.
This tutorial assumes you have completed the chapters in the main Tutorial module that starts on
page 14 and that you have read the Discrete Rate Introduction that starts on page 310. It is also
suggested that you complete the Discrete Event Tutorial that starts on page 102.

A basic discrete rate model


Rate-based models are mainly concerned with how quickly the flow moves in different sections of
the model, and what the yields will be, given the constraints and configurations of the model. A
common rate-based model involves a flow of product moving from one holding area to another,
with a valve that determines how quickly the flow moves.

About the model


The Yogurt Production model represents a process that takes a supply of liquids, converts it into
plain yogurt, then mixes the yogurt with fruit. The fruited yogurt mixture is poured into individual yogurt containers and cooled and the containers are then packaged into cartons. The final step
is to place the cartons on pallets for storage.
The assumptions for the final model are:
The supply of liquid to make the yogurt comes from one location and the fruit comes from
another location. Both locations have an infinite supply.
For most of the day, the liquid is processed into yogurt at a rate of 100 gallons/minute. Since
fewer workers are available during lunch, the processing rate decreases to 60 gallons/minute for
that hour.
After processing, the yogurt is routed to the mixing area.
The fruit is processed and delivered to a mixing area at a rate of 8 gallons per minute when
equipment is not undergoing maintenance, and a rate of 2 gallons per minute when it is.
Each 10 gallons of mix is composed of 1 gallon of fruit and 9 gallons of plain yogurt.

Tutorial for Discrete Rate Systems


A basic discrete rate model

319

The packaging process yields 12 containers of yogurt per gallon of mix.


The cooling cycle occurs on a 100 foot long refrigeration unit. The yogurt must be cooled for at
least 20 minutes before the containers can be packaged into cartons.
Each carton holds 48 containers of yogurt
There are two palletizing areas, one of which has a higher priority than the other.
Pallets arrive every 2 minutes and can hold 24 cartons.
Time units are in minutes and the simulation duration is 480 minutes.
The blocks come from the Rate, Item, and Plotter libraries.

The final Yogurt Production model, and the models that illustrate the steps described in this chapter, are located in the folder \Examples\Tutorials\Discrete Rate. To get the maximum benefit of
this tutorial, it is recommended that you build the models yourself.

Starting a model and setting simulation parameters


The following steps are typical when starting any discrete rate model:

As mentioned in the Introduction to this module, the Executive block does event scheduling and
manages discrete rate and discrete event simulations. It must be present in every discrete rate and
discrete event model.

Start small
In building any simulation model, it is easiest to start
with a simplified subset of the process and add detail
until you arrive at a completed representation of the
system that's being modeled. This allows you to test at
various stages while making the model building process more manageable.
The first step is to model a single line of production,
Basic yogurt production line
where one Tank holds product that moves to another
Tank at a constant rate. When you have finished this
portion of the tutorial, your model should look like the one shown above.

Discrete Rate

Open a new model worksheet


Give the command Run > Simulation Setup. In the Setup tab enter the simulation parameters:
End time: 480
Global time units: minutes
If they aren't already open, open the Rate, Item, Plotter, and Value libraries
Place an Executive block (Item library) on the top left corner of the model worksheet

320

Tutorial for Discrete Rate Systems


A basic discrete rate model

Creating a model of the simple yogurt production process


The following table lists the blocks that will be added to the worksheet and their use in the model.
Except for the plotter from the Plotter library, the blocks in the table are from the Rate library.
Name (Label)

Purpose in Model

Tank
(Liquid Supply)

Acts as a source, intermediate storage, Contains an unlimited amount of liqor sink for the stuff of the model.
uids that can be processed into yogurt.

Valve
(Yogurt Process)

Acts as a constraint on flow. Controls, Regulates the flow of liquid at 100 galmonitors, and transfers the flow at a
lons per minute. (A constraint is
specified rate.
required; otherwise, the flow would
approach infinity!)

Tank
(Yogurt)

Discrete Rate

Block Function

Plotter,
Discrete Event
(Plotter)

Acts as a source, intermediate storage, Can hold an unlimited amount of


or sink for the stuff of the model.
processed yogurt.

Displays information about the flow


and about model values.

Reports how many gallons of yogurt


per minute are processed (the effective
rate) and the total amount of yogurt
produced.

Starting at the right of the Executive block, place the blocks on the model worksheet in a line
from left to right, based on their order in the above table.

Label the blocks as indicated in the table.

An easy method for placing blocks on a model worksheet is to access an open library using the
Navigator as discussed in Library Window mode on page 771.

Making connections
To indicate the flow of product, connect the blocks flow connectors as follows:

Connect from the outflow connector on the first Tank (labeled Liquid Supply) to the Valves
inflow connector.

Connect from the Valves outflow connector to the second Tank (labeled Yogurt).
To gather information about the amount of yogurt processed:

Connect from the Yogurt tanks inflow connector to the top input on the plotter.
Connect from the Yogurt tanks LE (level of contents) value output connector to the plotters
second input.
When you are finished, the model should look like the one shown on page 319.

Tutorial for Discrete Rate Systems


A basic discrete rate model

321

Entering dialog parameters and settings


To reflect the basic assumptions for this model, the flow units and the constraints need to be
defined.
Each model must contain one or more blocks (typically a Valve with a non-blank maximum rate)
to restrict flow. The ExtendSim discrete rate architecture attempts to move flow through the model
as fast as possible. In the absence of any constraints, the flow rate would theoretically approach
infinity and flow would move from one part of a model to another instantaneously. This condition
would cause ExtendSim to stop the simulation and display an error message.

For the Liquid Supply tank:


In its Tank tab, check the (infi-

nite)checkbox for the field labeled


Initial contents. This places the
word infinite in the initial contents field, as seen at right.

Initial contents set to infinite

In the blocks Options tab, select


New Unit in the popup menu for Flow group unit: and enter gallons as the flow unit.

In the dialog of the Valve block, enter Maximum rate: 100 gallons/minute.
There are no entries to make for the Yogurt tank. Its default settings indicate that it has no initial contents and its maximum capacity is infinite, which is what you want.

In the plotter dialogs toolbar, open the Trace Properties dialog.


Choose that the second input (Values) is plotted against the Y2 axis.
Change the style of the line for that second input to interpolated.
(For information on how to change the properties of lines, see Trace properties tool on
page 665.)

Save the model and run the simulation.

Discrete Rate

In this model, the plotter will display the Valves maximum rate on its top input and the number of
gallons of yogurt processed on the second input. Since the scaling for these numbers is so different,
the plotters graph needs to be adjusted. To do this:

322

Tutorial for Discrete Rate Systems


A basic discrete rate model

Verifying results
This is a good opportunity to verify the
results. There is never any change to the
rate of flow, so there is no need for the
model to recalculate the effective rate. This
means that the simulation is finished in two
events: the start event and the end event.
The plotter indicates that the effective rate
is 100 and a total of 48,000 gallons of
product (shown on the Y2 axis) have been
produced in the process. This makes sense
because the assumptions were that 100 gallons of yogurt would be produced per minute and the simulation time is 480 minutes.

Add a dynamic constraint

Plot of simulation

Discrete Rate

While the preceding model used a constant


maximum rate, a more common situation
is for a Valves maximum rate to change with time. The model assumptions are that the liquid is
processed into yogurt at a rate of 100 gallons per minute for most of the day, but that during the
lunch period the rate is reduced to 60 gallons per minute. To show this in the model:

Add a Lookup Table block (Value library) to the model.


Connect the Lookup Table blocks output to the R (maximum rate) input connector on the
Valve.

In the Lookup Table blocks dialog, select Lookup the: time.


In the blocks Options tab, enter the column labels Minute;Gallons/Minute.
In the blocks Table tab, enter the values shown at the
right for the Minute and Gallons/Minute columns.
This will cause the Valves maximum rate to be 100
gallons/minute for the entire model except for the
period from time 240 to time 300, when it will be 60
gallons/minute.

Label the block Variable Constraint Rate.


The model should now look like the screenshot at
the right. When the simulation is run, the plot
shows that the Valves maximum rate (from the
Lookup Table block) is 100 gallons/minute for
most of the day, but changes to 60 gallons/minute for 60 minutes, as expected. It also shows that
the yogurt output is reduced from the 48,000 gallons achieved in the previous model. This occurs
because the Valves maximum rate reduced from
the constant 100 gallons/minute in the previous
model.

Values for Lookup Tables dialog

Adding a variable constraint

Tutorial for Discrete Rate Systems


A basic discrete rate model

323

The Lookup Table block will actively output values at each specified time, based on entries in the

table in its dialog, and does not need to be prompted for output. This is discussed in Polling constraints on page 363.

Add a fruit processing line


So far you have created a yogurt processing line. The specification for the final model indicates
that fruit is mixed with the yogurt, requiring a second processing line:

Delete the connection from the Valve to the Yogurt tank and move the tank to the right.
Below the Lookup Table block of the yogurt processing line, add another Tank block to the
model.

In the blocks Tank tab, check the checkbox in the field labeled Initial contents, causing
the initial contents to be infinite.

In the blocks Options tab, select Flow group unit: gallons.


Label the block Fruit Supply.

because it is connected to the Tank. (If you had not first connected the Tank to the Valve, you
could select gallons as the units in the Options tab.)

To merge the two flows, add a


Merge block to the model and place
it to the right and between the
Yogurt Process and the Fruit Process
blocks.

Connect from the outflow connector of the Yogurt Process


Valve to the top inflow connector on the Merge.

Connect from the outflow connector of the Fruit Process


Valve to the second inflow connector on the Merge.

Fruit process line added

In the Merge tab of the blocks dialog, select Converge mode: proportional from the
popup menu.

In the Proportion column of the Merge blocks dialog table, enter 9 for the Yogurt Process
and 1 for the Fruit Process.

Label the Merge block Mixing.


Connect the Merge blocks outflow connector to the Yogurt tanks inflow connector.
When finished, the model should look similar to the one above.

Discrete Rate

Add a Valve to the right of the Fruit Supply tank.


Connect from the Fruit Supply tanks outflow connector to the Valves inflow connector.
In the Valve tab, enter Maximum rate: 8 gallons/minute.
Label the block Fruit Process.
Notice that gallons have automatically been selected as the flow units for the Valve. This is

324

Tutorial for Discrete Rate Systems


A basic discrete rate model

When you run the model, the mixing process should output 80 gallons per minute and the entire
process will yield about 37,600 gallons of yogurt. This is an interesting model to run with animation on. (Be sure to have animation set to the slowest speed.) When you do this, the rate displayed
at the top of the Yogurt Process icon is sometimes displayed as the fraction 72/100. This is the
ratio of the effective rate to the Valves maximum rate. In this model, there is sometimes not
enough fruit and the entire process becomes constrained, so the effective rate can be less than the
specified maximum rate.
In validating the model, notice that the effective rate for the yogurt part of the process can never be
higher than 72. Since the maximum output of the fruit process is 8 gallons per minute, and the
mixing process requires a ratio of 9 portions of plain yogurt to 1 portion of fruit, the maximum
amount of plain yogurt that can be required is 72 (8*9) gallons per minute.

A complete description of the animation information shown on the icons for Rate library blocks is
given on Animation on page 428.

Add maintenance
A common situation is for a process to have a slow production rate when some of the equipment is
down for maintenance and a faster rate the rest of the time.

Discrete Rate

The fruit process has a slow rate of 2 gallons per minute during equipment maintenance and a
normal rate of 8 gallons per minute. Maintenance occurs approximately every 60 minutes with a
random duration of a minimum of 5 minutes, a maximum of 20 minutes, and a mostly likely time
of 15 minutes. To reflect this:

Add a Shutdown block (Item library) to the model. There are two
ways to do this:

Click the Add Shutdown button in the Valves dialog. This automatically connects a Shutdown block to the Valves R (maximum
rate) input connector and opens the Shutdowns dialog.

Place the Shutdown block on the worksheet from the Rate library.
If you do this, connect the output of the Shutdown block to the
Fruit Process Valves R (maximum rate) value input connector.

Shutdown block added

In the Shutdown blocks dialog:


For the shutdown configuration, enter Down value: 2 and Up Value: 8
For the time between failures (TBF) choose an Exponential distribution with a Mean: 60
For the time to repair (TTR) select a Triangular distribution with a Minimum: 5, Maximum: 20, and Most likely: 15

Label the block Maintenance Shutdown.

Like the Lookup Table block, the Shutdown block outputs its information without being

prompted. Thus the Valve does not need to ask it for data and it should not be set to poll constraints. Polling constraints is discussed more on page 363.
When you run the model with animation on, notice that the Valve is partially shut down for maintenance a random amount of time and that its maximum rate is reduced to 2 gallons/minute during maintenance. Also notice that fewer gallons of yogurt are produced during the process than
before the Shutdown block was added.

Tutorial for Discrete Rate Systems


A basic discrete rate model

325

Change the flow unit to containers for the filling process


It would be difficult to ship the processed yogurt without putting it into containers. The model
assumptions state that the yogurt mix is packaged into containers at a ratio of 12 containers per
gallon of liquid. To represent this:

Delete the connection


between the Merge block and
the Yogurt tank.

Add a Change Units block to


the model and connect it
between the Merge and the
Yogurt tank. Label the block
Change Unit 1.
The model should now look like
the screenshot to the right.

In the dialog of the Change


Units block:
Changing the flow unit
Do not change the first
setting (Change units
from: gallons)
In the popup for the second unit setting (to: gallons), select New Unit and name the new

So that each gallon will result in 12 containers, enter Conversion factor: 12 containers/
gallons. (Be sure to select containers/gallons from the popup menu.)

If you check the box for Show unit change on icon in the Change Units dialog, the area
above the icon will display the text gallons=>containers.
After the settings have been entered, the dialog of the Change Units block should look like the following:

Dialog of Change Units block with user entries

When the model is run, the number of yogurt containers produced each minute, and thus the
total number of containers processed, will vary depending on the Valves maximum rate and the
flow restrictions caused when there is not enough fruit for the mix. Although it may vary from the
example model, the plotter should indicate that approximately 370,000 containers of yogurt were
produced. This makes sense because, as the Results tab in the Merge block shows, the process produced about 30,000 gallons of yogurt.
At the end of the simulation run, holding the cursor over each outflow connector will show the
final rate at that connector. For example, when the Yogurt Process has an effective rate of 72 gallons per minute, the Fruit Process will have a rate of 8 gallons per minute, the Mixing block will

Discrete Rate

flow unit containers.

326

Tutorial for Discrete Rate Systems


A basic discrete rate model

indicate that 80 gallons of mix were produced that minute, and the Change Units blocks output
will show that 960 (80 * 12) containers of yogurt were packaged.

This model assumes that the process of pouring yogurt into containers occurs at the same rate as
the process of mixing the plain yogurt with the fruit. In this case, the packaging process does not
slow down the rest of the process. To model a packaging process that would have an impact on the
rest of the process, connect a Valve between the Merge and Change Units blocks and enter the
appropriate packaging rate.

Cool the mixture


The yogurt process includes a 20 minute cooling phase on a 100-foot long refrigeration unit
before the yogurt containers can be packaged into cartons. The Convey Flow block is designed to
represent a delay in the movement of flow.

Delete the flow connection from the Change Units block to the Yogurt tank.
Add a Convey Flow block to the model and connect it between the Change Units block and the
Yogurt tank.
Notice that if you make these connections first, the correct flow unit (containers) is automatically selected in the new blocks Options tab.

In the Options tab of the Convey Flow block:


Select New Unit from the Length unit: length unit popup menu. In the dialog that
Discrete Rate

appears, enter feet.

In the Convey tab of the Convey Flow block:


Notice that the block is already set to Accumulating-maximum density by default.
From the popup menu to the right of that popup, select the behavior Delay determines
travel time.

Enter Delay: 20 minute*.


Enter Maximum density: 500 containers/feet.
Label the block Cooling Cycle.
The model should now look like the following:

Cooling phase represented by Convey Flow block

Tutorial for Discrete Rate Systems


A basic discrete rate model

327

When you run this model, notice that there is no product flowing into the Yogurt tank for the first
20 minutes. This happens because it takes that long for the first containers to leave the refrigeration unit represented by the Convey Flow block. This causes starving in the downstream portion
of the model that follows the Convey Flow block. Because it takes longer to get the finished product, fewer containers get produced than in the previous model.

Although it doesnt happen in this model, if the Convey Flow block were full, it could slow down
the upstream processes that feed into it. This is known as blocking.
While the use of the Convey Flow block is appropriate for this model, be careful about placing too
many Convey Flow blocks in a model as they are computationally intensive. The Convey Flow
block should only be used if the system requires precise tracking of flow movement. A Valve and a
Tank can often be used instead, with less impact on simulation speed. For more information, see
When to avoid using the Convey Flow block on page 403.

Package the containers


The next step of the process involves packaging the yogurt containers into cartons. This is represented using another Change Units block.

Delete the flow connection between the Cooling Cycle and the Yogurt tank.
Add a second Change Units block to the model;
Connect it between the block labeled Cooling Cycle and the block labeled Yogurt.
In the blocks

units from:
containers).
In the popup

Discrete Rate

dialog, do
not change
the first setting (Change

Dialog of second Change Units block

for the second unit setting (to: containers), select New Unit and name the new flow unit cartons.

So that each carton will hold 48 containers, enter Conversion factor: 48 containers/cartons.

If you check the box for Show unit change on icon, the area above the icon will display
the text containers=>cartons.
Label the new block Change Unit 2.

328

Tutorial for Discrete Rate Systems


A basic discrete rate model

If you clone the plot pane onto the model worksheet, your model should be similar to the following:

Packaging containers into cartons

Discrete Rate

Although the amounts will vary depending on the yogurt processs constraint rate and the potential
unavailability of fruit due to maintenance, when you run the model it should result in approximately 8,000 cartons. (Each carton holds 48 containers and the process should have produced
about 390,000 containers of yogurt.)

Add a palletizing area


The models assumptions state that there is a palletizing area where cartons are stored for shipment.
One empty pallet arrives every 2 minutes and each pallet can hold 24 cartons. If there is no empty
pallet to replace it, the flow of yogurt stops when a full pallet leaves. As discussed below, this is easily represented using the Rate librarys Interchange block and discrete event blocks from the Item
library.
Interchange block
The Interchange block represents a tank, or holding area, where the flow of discrete rate blocks can
interact with items from discrete event blocks. The block can only get one item at a time. In its
default behavior (Tank only exists while item is in it), the block behaves similar to an on/off
switch. When it has an item, it has a capacity for flow; in the absence of an item, the block has no
flow capacity. (In the blocks alternate behavior, the tank has capacity and items that come to it can
contribute flow to the block and/or remove flow from it.)
In this model, empty item/pallets are generated randomly. The arrival of an item/pallet causes the
Interchange block to have flow capacity; the maximum capacity of 24 cartons is entered in the
blocks dialog. Once the maximum capacity is reached, the full item/pallet leaves the block. The
Interchange block then has no capacity until another empty pallet arrives.

The Interchange block is discussed more fully in Using the Interchange block to mix items with
flow on page 410.
Adding a palletizing area to the model
Delete the Yogurt tank.

Tutorial for Discrete Rate Systems


A basic discrete rate model

329

Place the following blocks in the model and connect


their item connectors as shown at right:

Create (Item library)


Queue (Item library)
Interchange (Rate library)
Exit (Item library)

First palletizing area

Label the 4 new blocks as indicated in the screen shot above.


Connect from the outflow connector of Change Unit 2 to the plotters top input connector.
Connect from the outflow connector of Change Unit 2 to the inflow connector on the Interchange 1 block.

In its dialog, set the behavior of the Create block to Create items randomly, choose the Constant distribution, and enter constant: 2. This causes one item/pallet to be available every 2
minutes.

There are no changes required for the Queue block. It is already set to hold items in a first in,
first out manner.

In the Item/Flow tab of the Interchange block, define item behavior (Item is Tank) by making
the following entries:

On arrival, Item/Tank capacity is: a constant 24 cartons. (Be sure to enter the number
Release item: when tank contents Level (load process).
Define Level: full.
With these settings, the Interchange block has a capacity of 24 cartons each time it gets a new
item, which represents an empty pallet. Once 24 cartons of yogurt have arrived through its flow
connector, the blocks Level will be full and the item (now representing a full pallet with 24 cartons) will be released. The Interchange block will then try to access another empty pallet; the
yogurt process will stop until an empty pallet is available.

There are no dialog changes required for the Exit block.

Discrete Rate

24.)

330

Tutorial for Discrete Rate Systems


A basic discrete rate model

When you are finished with this section, the model should look like:

First palletizing area

Discrete Rate

When you run this model, you should see an almost solid block of color on the plotters plot pane.
This is caused by the plot line being repeatedly redrawn as the effective rate goes from a high of
about 52 cartons per minute to 0 and back again. To see this, stretch the plot wider until you can
see some white areas between the colored areas. These white areas occur when the effective rate is
0. In this model, pallets arent arriving quickly enough and the process is slowed from what it could
be and frequently stops. One way to solve this would be to have two palletizing areas.

Add a second palletizing area


The easiest way to add a second palletizing area is to duplicate the blocks in the first palletizing
area to another part of the model.

Select the 4 blocks in the palletizing area and give the Edit > Duplicate command. This creates
a second set of blocks.

Move the 4 blocks that comprise the second palletizing area below the first area.
Label the new blocks Create 2, Queue 2, Interchange 2, and Exit 2.
Add a Diverge block to the right of the Change Unit 2 block:
Connect from the Change Unit 2 block to the Diverge.
Connect from the Diverge blocks top outflow connector to the inflow connector on the
Interchange 1 block

Connect from the Diverges second outflow connector to the inflow connector on the
Interchange 2 block.

In the dialog of the Diverge, notice that by default the block is set to Diverge mode: priority of outputs and that a priority of 1 is assigned to the top Interchange block and a priority
of 2 to the bottom Interchange block. Do not change these settings, since this is what you
want.

Tutorial for Discrete Rate Systems


Further exploration

331

The model should now look like:

Two palletizing areas

In this model, the top palletizing area has first priority for the cartons and the lower palletizing area
only receives product if the top area is busy. Unlike the previous model, the plotter indicates that
the effective rate of the process is hardly ever 0 cartons per minute.

The final model, named Yogurt Production, and the models for all the intermediate steps, are
located in the folder Examples\Tutorial\Discrete Rate.

Further exploration
Additional ways to enhance and explore this model include:

A Shift block could be added to the Convey Flow block, stopping the process at the end of the
day and causing the Convey Flow block to be emptied of product.
The palletization areas could include the time it takes to unload a full pallet and load an empty
pallet. Adding this type of changeover is shown in the Yogurt Changeover model on page 413.
The filling processes could be enhanced by adding delays for the filling, cleaning the equipment
and other maintenance.
Instead of assuming a generic fruit being added to the yogurt, use flow attributes to represent
different fruits. Flow attributes are discussed starting on page 339. The Yogurt Production with
Flavors model is located at Examples\Tutorials\Discrete Rate. The Yogurt Production with Flavors Plus model goes a step further and uses flow attributes and the item/flow attribute mapping
capability of the Interchange block to preempt items, avoiding mixed pallets of flavored yogurt.

Discrete Rate

Verify that the model is working as you expected by running it with animation on or by adding
a Pause Sim block (Utilities library) to the model and pausing each step. (Animating a discrete
rate model is described in Animation on page 428. The Pause Sim block is discussed in
Blocks that control or monitor simulation runs on page 583.) The final Yogurt Production
model located at Examples\Tutorials\Discrete Rate is animated and includes a Pause Sim block
so you can step through each event.

Discrete Rate

332

Tutorial for Discrete Rate Systems


Further exploration

Discrete Rate Modeling

Creating Flow
Creating flow and giving it properties

334

Creating Flow
Blocks of interest

This chapter discusses creating and characterizing flow in a discrete rate model. It will cover:
Creating flow in the model
Using indicators to monitor the level of flow
Working with flow attributes

Blocks of interest
The following blocks from the Rate library will be the main focus of this chapter.

Residence blocks for creating flow


Convey Flow
Delays the movement of flow from one point to another. Can have multiple segments,
each with an initial contents of flow.
Interchange
Represents a Tank that can interact with discrete event items. The block can have an initial contents of flow and can receive more flow while the simulation runs.

Discrete Rate

Tank
Acts as a source, intermediate storage, or final storage (sink). The block has a capacity and
can provide an initial quantity of flow for the simulation.

Blocks for managing flow attributes


Get(R)
Displays the value of flow attributes. Allows you to select the type of information
reported and which attribute you want displayed.
Set(R)
Allows you to assign attributes to the flow.
Diverge
When flow is diverged, this block provides options for how the flow attributes are handled.
Merge
When flow is merged, this block provides options for how the flow attributes are handled.

Creating flow
Flow is what is stored in and moves through a discrete rate system. It can be almost anything: oils
and chemicals, manufactured product, transactions, electricity, and so forth.
The Convey Flow, Interchange, and Tank blocks are residence-type blocks; they hold flow and can
serve as sources of flow for the model. There are two ways flow can be introduced into a discrete
rate model:

Creating Flow
Creating flow

335

1) By setting an initial contents for a Convey Flow, Interchange, or Tank block. These three residence blocks can be preloaded with initial amounts of flow, either a finite amount or, in the
case of the Tank and Interchange blocks, an infinite amount. Depending on the block and
options that are selected, the initial amount is:
Created by entering a constant number, or selecting infinite, in the blocks dialog
Entered in a table for each segment (Convey Flow block)
The attribute values for any number of initial layers (Tank block)
The value of an item attribute (Interchange block)
Getting the value from a ICO valuein connector (Interchange block)
2) Once an initial contents has been set, under certain conditions the contents of the Tank or
Interchange block can be changed during the simulation run. An example is the Interchange
block when it is set to Tank only exists while item is in it. In this case, you can choose to have
each arriving item reestablish the initial contents.

Empty and not-empty


If a Tank or Interchange blocks initial contents is finite, its status can alternate between the empty
and not-empty states. This change of state has an impact on the effective rate calculations:
If the Tank or Interchange block is not empty, its flow level can fall. Consequently, the effective
outflow rate could be higher than the effective inflow rate.

When a Tank or Interchange block changes state between empty and not empty, ExtendSim will
calculate a new set of effective rates. For more information about rates, see Rates, rate sections,
and the LP area on page 357.

The Convey Flow block has a different mechanism for calculating a change of state between empty
and not-empty. For more information, see the Delaying Flow chapter.

Tank initialization
A Tanks initial contents can be:
Entered in the dialog as:
0 (the default)
A number

Options for initial contents

Infinite
Specified by flow attribute values and be either finite or infinite. (Flow attributes are discussed
starting on page 339.)
To simply cause the Tank to have an infinite amount of initial contents, select the Initial contents
option, then check the (infinite) check box. For example, in the Yogurt Production model from
the Discrete Rate Tutorial, the Tank blocks that represented Liquid Supply and Fruit Supply had
infinite initial contents, while the Tank that stored the Yogurt product had no initial contents.
If the option for Finite initial contents with flow attribute values is selected, a check box causes the
initialization to be repeated whenever the Tank becomes empty.

Discrete Rate

If the block is empty, it cannot provide more flow than what it concurrently receives. In this
case, the effective outflow rate has to be less than or equal to the effective inflow rate.

336

Creating Flow
Creating flow

If a Tank has no inflow connections, by definition it is being used as a source. If at some point the
source reaches the empty state, the effective outflow rate will remain at zero for the remainder of
the simulation run.

Interchange block modes


The Interchange block represents a tank, or holding area, where flow can interact with items generated by discrete event blocks. Flow can enter the Interchange block not only through its inflow
connector but also through the arrival of an item. Conversely, flow can exit the block through its
outflow connector or through the exiting of an item.
The Interchange block has two options that affect how the blocks initial contents and maximum
capacity are set:

Discrete Rate

Tank only exists while item is in it. This behavior is analogous to a truck (an item) that arrives at a
loading dock (a tank) where the loading or unloading of product can take place at a certain rate.
The truck arrives with a capacity and perhaps some quantity of product already in it. As long as
the truck is in the dock, loading or unloading is possible and occurs at the specified rate. When
the truck leaves, the docks ability to load and unload product disappears (the inflow and outflow effective rates are set to zero).
Tank is separate from item. This behavior is similar to a truck (an item) that brings product to a
holding area (a tank) that may nor may not contain product. The truck empties its load and perhaps takes some of the holding areas product with it when it leaves. This process occurs instantaneously. Whether the truck is at the holding area or not, both the truck and the holding area
can have product. The holding area can receive or deliver flow to the system even if there is no
truck (the inflow and outflow effective rates can be greater than zero).

For more details about these two modes, see Interchange modes on page 412.

Depending on the option selected, the Interchange has different choices for setting an initial contents.
Initialization of contents when Tank only exists while item is in it
This choice allows the block to
have an initial contents only
when an item arrives. To set an
initial contents for this block,
choose one of the options from Interchange initial contents, default behavior
the dialogs popup menu,
shown here:
A constant. Enter a number in the field; the default is 0. To cause the initial contents to be infinite, check the fields (infinite) check box or set the field to blank.
Value at ICO. The value at this connector will control the initial contents.
Value of item attribute. Select an items attribute in the dialog. When an item arrives, the initial
contents will equal that attributes value.
In the Yogurt Production model from the Discrete Rate tutorial, the Interchange blocks were set to
Tank only exists when item is in it and Initial contents (on item arrival): 0.

Creating Flow
Indicators

337

Initialization of contents when Tank is separate from item


To set the initial contents for the Interchange
block when this behavior has been selected,
leave the Initial contents field set to the default
Interchange initial contents, alternate behavior
infinite amount or enter a number.
With this behavior, arriving and departing items can cause contents to be contributed to or
removed from the tank, depending on choices set in the blocks dialog.

Convey Flow initialization


The initial contents for the
Convey Flow block are set in
its Initialize tab. The table
allows you to customize a
Example initial contents for Convey Flow block
number of segments for the
conveyor, each with its own
initial contents. Each row in the table represents an individual segment of the conveyor possessing
a uniform density that differs from the adjacent segments.

In this example, the sections between 0 and 25 feet and between 50 and 75 feet do not hold any
product.

Indicators
As the simulation runs, the level of flow in the residence blocks (Convey Flow, Interchange, and
Tank) will vary over time.
You might want an indication when a blocks flow level is within a certain range of values. This is
common when monitoring a block to determine if its contents are approaching or have reached
one or more important benchmarks. For instance, some emergency procedures might need to take
place if a Tanks level reaches the high range; they can be discontinued when the contents return
to a normal range.
For residence blocks, indicators are a method of reporting what category or range the current level
of flow falls into. With this feature, each range is assigned a name, a lower limit, and an upper
limit. When the level of flow reaches a value that falls within a different range, the block reports
the change on its I (indicator) value output connector and alerts any connected blocks to the
change in status.

While the Tank and Interchange blocks report information about the current level of flow from

their I (indicator) connectors, the Convey Flow block reports how far (the accumulation
length) the accumulation point is from the end of the conveyor. (When the amount of product
ready to leave exceeds the amount that can be received downstream, flow begins to accumulate
from the end of the conveyor. For more information, see Distribution of flow on page 401.

Discrete Rate

The Initialize tab has a Show Example button that places example settings in the table. These are
helpful for understanding how to make the entries you want; they can also be used as a starting
point for entries. Shown above is the example setting for a 100 foot long accumulating-density
conveyor that transports containers. The table indicates that the block would have an initial density of 10 containers per foot for the segment from 75 to 100 feet (a total of 250 containers) and 5
containers per foot for the segment from 25 to 50 feet (a total of 125 containers).

338

Creating Flow
Indicators

Setting indicators
The Indicators tabs on all
three residence blocks have
similar interfaces. Each
Indicators tab has a table
(shown on the right with
example settings) for specifying an indicator name for
Example indicators in Tank block
each range of values, entering the low limits, and
defining values (an ID number for each indicator) to output when the block's flow level falls
within a particular range.
To create indicators, enter your own information or click the Show Example button to populate
the table with some example indicator names and settings. In either case, ExtendSim will calculate
the High Limit values based on the Low Limit entries.

The top row has to have the highest range; the bottom row must have the lowest range.
To add or delete table rows, use the +/- button in the table's lower right corner. For instance, to

Discrete Rate

delete the example settings, change the number of rows to 0.

The screen shot above shows a Tanks names, limits, and ID values to output after the Show Example button has been clicked. Each indicator name corresponds to a range of flow contents defined
by the Low and High Limits for that row. (The High Limit column is presented for clarity only,
since those numbers are calculated using the values entered for the Low Limits.)
Unless the block has infinite capacity, the indicator limits can be expressed in absolute numbers
(shown above) or as percentages.
See Bucket Elevator 2 model on page 415 for an example of how indicators are used in an Interchange block to control a Valves effective rate.

If the block has infinite capacity, the limits must be expressed as absolute numbers. If the block's
initial contents are set to infinity, the indicators are disabled.

Getting information about levels


There are two types of
events that will cause a new
indicator to be reported:
When the level is increasing and the blocks contents reach the next
indicators Low Limit.

Example indicators in a Tank

When the level is decreasing and the blocks contents reach the next indicators High Limit.
In each case, the new output ID is used to update the I value output connector, and any connected
blocks are alerted to the change.
Using the above table as an example, if the level in the Tank increases from 120,000 to 175,000
containers, the block will compare that level to the Low Limit and send the value 3 to its I (indicator) output connector. However, if the level of the Tank instead decreases from 230,000 to
175,000 containers, the block will compare that value to its High Limit and output the value 2.

Creating Flow
Flow attributes

339

The value that is output at the I (indicator) connector depends on whether the level of flow is

increasing or decreasing, and where in the range the new indicator level falls. The Tank block has a
S (status direction) output connector that reports if the level is going up or down when the event
occurs.
Tank Flow Units model
The Yogurt tank in the Tank Flow Units model (Examples\Discrete Rate\Sources and Storage)
outputs values that indicate the level of flow in the Tank; those values are displayed on the third
line on the plotter.

For more information about the Convey Flow block, including the use of sensors, see the discrete
rate chapter on Delaying Flow.

Flow attributes
A flow attribute is a quality or characteristic of flow that stays with it as it moves through the
model. Flow attributes provide information about the flow and allow you to organize quantities or
volumes of flow into layers.
The entire set of attribute values assigned to a particular layer is what distinguishes it from other
layers. In other words, all the units of flow in a layer possess the same set of flow attribute values.
While not all Rate models require the use of flow attributes, some uses for flow attributes include:
1) The flow held in a Tank can be organized into individual, distinct layers. This allows you to
control where incoming flow is deposited and which type of outgoing flow next exits.
3) Flow can be routed through the Merge and Diverge blocks based on flow attribute values.
Attributes are assigned to the flow by the model builder. They become linked to sections of flow
that pass through the blocks, according to settings in the blocks dialogs.

Names and values of flow attributes


As with item attributes (discussed on page 119), each flow attribute is composed of a name and a
value.
A flow attribute's name identifies some general characteristic of the flow such as Product, Flavor, or Color. Attribute names are limited to 15 characters.
A flow attribute's value indicates one dimension of the named characteristic. For instance, a flow
attribute named Product could have a value of 1 or a value of 5, while a flow attribute named
Flavor could have a value of 1 (for Vanilla), 2 (for Berries), or 3 (for Caramel).
Attributes are meant to be unique;. If you attempt to add a new flow attribute with exactly the
same name as an existing one, ExtendSim warns you that the name already exists. While attribute
names are not case sensitive (Type is equal to type), spaces are significant and should be avoided.
Discrete rate models can have many flow attributes and each attribute can have multiple values.

Types of flow attributes


ExtendSim supports two types of flow attributes for Rate library blocks:
A layer attribute holds a real number as its attribute value.
The value of a string layer attribute is still a number, but it is represented in the model by a string.

Discrete Rate

2) Flow rates through the Valve block can be calculated based on flow attribute values.

340

Creating Flow
Flow attributes

Discrete Rate

With string attributes you choose a descriptive text label (string) for each potential value of the
flow attribute; the information is entered in a lookup table in the Executive block's Flow Attributes
tab. The string can then be used in the model in place of the corresponding number. For example,
a string layer attribute named Flavor might have three possible values: 1, 2, and 3. Once the
lookup table for this attribute has been properly configured, the blocks referencing the Flavor attribute will display the strings Vanilla, Berries, or Caramel instead of the numbers 1, 2, and 3. For
instance, see the string layer attribute Flavor in the Executive, below.

Creating and assigning a flow attribute


There are several methods for creating a new flow attribute:
Use the Set(R) block
Use the Tank, if the initial contents is set
using flow attribute values
Use the Merge and Diverge, if you customize how attributes behave at their inflows or
outflows
The Interchange block has a mapping capability such that item attributes can be mapped to flow attributes, and vice versa.
To create a new flow attribute in the Set(R) block, use the green +/- resize button to add any
needed rows to the table in its dialog. Then use the pop-ups at the top of the columns to add a new
layer or new string layer attribute, give it a name, and (in the case of a layer attribute) assign an initial attribute value. Selecting a string layer attribute type causes the Executive to open to the Flow
Attributes tab shown on page 342; this is where strings that correspond to the attributes values are
entered. Values for flow attributes can also be set dynamically through value input connectors on
the Set(R) block.

How flow attributes are propagated in the model


Flow attributes attach to sections of flow and are present throughout the model. And a discrete rate
model can have many flow attributes where each flow attribute can have multiple values. However,

Creating Flow
Flow attributes

341

the values of flow attributes are location specific. This means that the value of a flow attribute is
unique at any time in each section of the model. (For information on sections. see Rates, rate sections, and the LP area on page 357.)
Flow layers in residence blocks
As mentioned earlier, flow attributes are used to organize quantities or volumes of flow into layers,
where each layer represents an amount of flow that has specific and unique characteristics. By definition, the attribute values for every unit of flow in a particular layer must be the same.
Flow layers are stored, tracked, and distributed by the Tank, Interchange, and Convey Flow blocks
in the following ways:
Tank. The Tank has the ability to
store incoming layers of flow by placing them on top or on bottom, or by
adding the incoming flow to a preexisting matching layer. Outgoing
flow can be taken from the top, the
bottom or from anywhere in between,
as shown on the right. This flexibility
allows the Tank to mimic LIFO,
FIFO, and priority behavior.

Convey Flow. The Convey flow will always receive and distribute flow layers in a FIFO fashion.
For example, a layer in a Tank could be a quantity of yogurt with the Flavor attribute value
Vanilla and the Nuts attribute value No Nuts. Vanilla yogurt with nuts would be in a different
layer, as would Berry yogurt without nuts.
ExtendSim handles the organization of layers within the residence blocks according to options set
in the blocks dialogs.
Propagation of attribute values outside of residence blocks
All Rate blocks get attribute values from inflow connectors and set attribute values on outflow connectors. For instance, a Merge block will receive attribute values from each of its upstream
branches and, depending on these values and the rules set in the block, it will set the attribute values for the downstream flow.
If the upstream flow has the potential to satisfy downstream demand, the connectors in between
will reflect the attribute values of the upstream flow even if the effective rate is zero. On the other
hand, if there is no upstream flow available to potentially satisfy downstream demand, the attribute values on the connectors in between will be a Blank.For example, if the demand is for Vanilla
yogurt and the Tank has Vanilla yogurt but the effective rate is currently zero, the attribute value
will be Vanilla. However, if the effective rate is zero and the demand is for Berry yogurt, which
isnt currently present in the Tank, the flow attribute value will be a Blank.

Discrete Rate

Interchange. The Interchange block can use layers to manage the filling and releasing of items.
For example, theres an option to release an item as soon as an attribute on incoming flow
changes to a different value. This allows you to fill items with flow that contains a uniform attribute value.

342

Creating Flow
Flow attributes

Managing and displaying flow attributes

Discrete Rate

The Flow Attributes tab of the Executive block (shown below) is for managing flow attributes
deleting, renaming, and changing their initial values. It is also where the strings for string layer
attributes are defined and where you can search for blocks that use a specific flow attribute.

Unlike an item attribute, which is assigned to individual items, flow attributes are assigned to the
flow in a section of a model. Flow attribute values can thus be read at any time and from any
model location. Each Rate block that holds or provides flow has a Contents tab showing the attribute values of its flow by volume. The Get(R) block can be used to retrieve the values of flow attributes elsewhere in the model.
In order to manipulate flow based on
the attribute, usually to route it or process it, you need to get the flows attribute value. The most common method
for getting attributes is to select the
attribute by name from the list in the
attribute popup menu in the Get(R)
block, as shown on right. When flow
passes through the Get(R) block, the
block accesses information about the
attributes that have been specified in
the table in its dialog. It then reports
the information in the table and on its
value output connectors. What the
Get(R) block reports and where,
depends on the type of attribute:
Layer attributes. The value for the attribute is posted in the Value column of the attribute table
and on the value output connector that corresponds to the attribute.

Creating Flow
Flow attributes

343

String layer attributes. The string text is displayed in the Value column of the attribute table
and the number that corresponds to the string is posted on the appropriate value output connector.
In addition to the Time Changed column in its dialog, the Get(R) block has a (delta) connector
for reporting when a flow attributes value changes. The connector outputs a 1 when the value of
the first flow attribute specified in the dialog changes. Otherwise it outputs 0.

Flow attributes and item attributes


It is common for systems to exhibit mixed-mode behaviors, where items from the discrete event
arena intermingle with discrete rate processes. The Interchange block provides a matrix for converting item attributes into flow attributes and vice versa. See its Flow Attributes tab.

Example models
Two models that use flow attributes are located in the Examples\Tutorial\Discrete Rate folder:
Yogurt Production with Flavors
Yogurt Production with Flavors Plus
Both models are a continuation of the Yogurt Production model discussed in the tutorial that starts
on page 318. They use attributes to simulate the production of five different flavors of yogurt. The
model named Yogurt Production with Flavors Plus uses the item/flow attribute mapping capability
of the Interchange block to preempt items, avoiding mixed pallets of flavored yogurt.

Discrete Rate

Discrete Rate

344

Creating Flow
Flow attributes

Discrete Rate Modeling

Storage and Units


Storing flow and the use of flow units

346

Storage and Units


Blocks of interest

As discussed in Simulating discrete rate systems on page 311, quantities of flow are located in
one or more parts of a discrete rate model. During the simulation run, the flow moves from one
location to another at the effective rate. In order for the flow to move, one or more of the models
blocks need to have the capacity to hold flow as time advances.
The Convey Flow, Interchange, and Tank blocks are residence type blocks they have capacity
and can hold defined amounts of flow.
Flow units describe what is flowing from one Rate library block to another. Blocks that are connected together through flow connections and share the same flow unit are part of the same unit
group. The Change Units block is used to create a new unit group. This causes the blocks downstream of the Change Units block to be in a unit group different from its upstream blocks.
This chapter discusses providing and storing flow and the use of flow units in a discrete rate model.
It will cover:
Defining a blocks flow capacity
Indicators that provide information about a blocks level of flow
Defining and selecting time, flow, and length units
Using the Change Units blocks to create a different flow unit group
This chapter focuses on setting capacity for the Convey Flow, Interchange, and Tank blocks. Other
aspects of those blocks are covered in different chapters:

Discrete Rate

The Convey Flow block is most often used for delaying flow and will be discussed more fully on
page page 399.
The Interchange block is mainly used for interacting with items from discrete event portions of
the model and will be discussed more completely starting on page 410.
Setting maximum inflow and outflow rates for the Tank and Interchange blocks is described in
page 364.

The Tank Flow Unit model is located in the folder \Examples\Discrete Rate\Sources and Storage.
The Yogurt Production model is located at \Examples\Tutorials\Discrete Rate.

Blocks of interest
The following blocks from the Rate library will be the main focus of this chapter.

Residence blocks for holding flow


Convey Flow
Delays the movement of flow from one point to another. Can accumulate flow to a maximum density, accumulate flow to fill empty sections, or act as a non-accumulating conveyor.
Interchange
Represents a Tank that can interact with discrete event items. The block has two behaviors: the Tank only exists while an item is in it; the Tank is separate from the item.

Storage and Units


Capacity

347

Tank
Acts as a source, intermediate storage, or final storage (sink). The block has a capacity and
can have an initial quantity of flow for the simulation.

Changing the flow unit group


Change Units
Changes the flow unit from one unit to another, resulting in a new flow unit group. The
dialog has a field for entering the conversion factor and a popup menu for indicating the
direction of the change.

Capacity
The Tank, Interchange, and Convey Flow blocks are considered residence blocks. This means that
they have capacity and can hold defined amounts of flow as time advances.
A residence block's maximum capacity can be a specific number or, in the case of the Tank or
Interchange blocks, it can be set to infinite.

Full and not-full


When a residence blocks capacity is finite, its status can alternate between the full and not-full
states. This change of state has an impact on the model's set of effective rates:
If a residence block with finite capacity is not full, there is room for the flow level to rise. Consequently, the effective inflow rate can be greater than the effective outflow rate.

Any time a residence block with a finite capacity changes state between full and not-full, ExtendSim will calculate a new set of effective rates.

A residence block with infinite capacity can never be full during the simulation run. In this situa-

tion, it is similar to a residence block with finite capacity that is not full; its effective inflow rate can
be greater than its effective outflow rate.

Tank blocks capacity


A Tank can be a source of flow, an intermediate storage for flow, or a final storage for flow
(sink). A Tanks capacity can be infinite, a
finite but non-zero number, or zero.

Default setting for Tanks capacity

By default, the Tank has an infinite capacity to hold flow, as indicated by the Maximum capacity:
infinite setting in its dialog. In this state it will never be full.

A blank is the same as checking the infinite setting.

A Tanks maximum capacity can be changed in the blocks dialog by entering an amount in the
Maximum capacity field (which unselects the checkbox). It can also be changed dynamically
through the blocks C (capacity) value input connector. If the C connector is used, it overrides
any entries made in the dialog. With a non-zero finite capacity, the Tank can be in either the full
or not-full state at any point in time.

Discrete Rate

If a residence block with finite capacity is full, the flow level is not permitted to rise; the effective
inflow rate will be less than or equal to the effective outflow rate.

348

Storage and Units


Capacity

If a Tank's capacity is set to zero, flow can still move through the block but the flow will not stay
in the block for any length of time. In this case, the Tank is neither full nor not-full, and the
effective inflow rate will equal the effective outflow rate.

If a Tank has no outflow connection, by definition it is being used as a sink. If at some point the

sink reaches the full state, its effective inflow rate will be set to zero for the remainder of the simulation run.

Interchange blocks capacity


The Interchange block has two options that affect how the blocks initial contents and maximum
capacity are set. These options are discussed in Interchange block modes on page 336.
Capacity when Tank only exists while item is in it
This is the default behavior. With this setting the Interchange block has a capacity to hold flow
only while an item resides in the block. With an item present, the block acts like a tank and therefore has a definable capacity, either finite or infinite. If the capacity is finite, as along as an item is
present in the block, the block can alternate between the full and not-full states.

Discrete Rate

The blocks capacity is fixed at the moment the item enters the block; it remains fixed until the
item leaves. When the item leaves, the Interchange's capacity automatically goes back to zero.
Therefore, at the time of item departure any flow currently in the block is loaded onto the item.
The timing of when the item leaves the Interchange depends on logic set in the Interchange block.
For more information, see Item release conditions on page 411.
To define the capacity for an
Interchange block when it is set
to this behavior, choose one of
the options from the dialogs
popup menu, shown at right.

Maximum capacity; default behavior

A constant. Enter a number in the field; the default is infinite.


Value at IC. The value at this input connector will control the blocks capacity.
Value of attribute. Select an attribute in the dialog. When an item arrives, the tanks capacity will
equal the items attribute value.
In the Yogurt Production model of the Discrete Rate Tutorial, the Interchange blocks are set to
Tank only exists when item is in it and their capacity is set to the constant value 24.
Capacity when Tank is separate from item
With this option, the Interchange blocks behavior is similar to a Tank block it receives flow from
its inflow connector, it holds flow, and it releases flow from its outflow connector. The difference is
that an items arrival can contribute flow to the existing contents and an items departure can
remove flow from the existing contents. The items impact on the blocks contents is entered in the
Define Item behavior section of the blocks Item/Flow tab.
To set the capacity for the block when this
behavior has been selected, enter a number in
the Maximum capacity field or leave it set to the
default value of infinite.

Maximum capacity; alternate behavior

Convey Flow blocks capacity


The maximum capacity for a Convey Flow block is a combination of two factors:

Storage and Units


Units and unit groups

349

1) The blocks length and maximum density determine the maximized capacity. By default, ExtendSim calculates a maximized capacity for the
Convey Flow block by multiplying its length by
Maximized capacity
its maximum density. This is indicated in the
Capacity field by the maximized capacity
checkbox shown above. In this case, the blocks maximum capacity will equal its maximized
capacity.
2) A number in the Capacity field in the Options tab can reduce the capacity below the maximized amount. In some cases, it may be necessary to define a capacity smaller than the maximized capacity determined by the length*density calculation. For instance, the Convey Flow
block could have structural properties limiting how much weight it can safely support. To do
this, uncheck the checkbox in the Capacity field of the Options tab and enter the desired number. In this case, the blocks maximum capacity will be less than or equal to its maximized
capacity.

A Convey Flow blocks maximum capacity can never exceed its maximized capacity, no matter
what number is entered in the Capacity field.

Units and unit groups


This section focuses on defining, selecting, and changing flow units, discusses the effect of changing time units, and shows how to use the Change Units block to change the unit group.

Definitions
The following sections discuss flow, block, time, and length units. A unit group is two or more
blocks connected together through flow connections and sharing one flow unit.
Units and unit groups were introduced on page 315; they are described fully below.
Flow units
The flow unit indicates what is flowing from one Rate library block to
another. As is true for ExtendSim time
units, flow units can be unspecified
generic units (in which case the block Generic flow and time units in a Valve
dialog will just display the word
units) or they can be specifically
defined in the model. For instance, a defined flow unit could be a packet, gallon, transaction, box,
liter, and so forth. Existing flow units can be selected, and new units can be defined, in the
Options tabs of Rate library blocks. In addition, the Discrete Rate tab of an Executive block (Item
library) has a section for managing flow units. This provides a central location where units can be
added, deleted, or renamed.

This chapter will be mostly concerned with flow units.

Discrete Rate

For example, if the Convey Flow blocks length is 100 and maximum density is 10, the blocks
maximized capacity will be 1,000. To reduce the capacity to something less than 1,000, enter a
number (for instance 300), in the Capacity field. The block will then only be able to contain 300
units of flow, even though its calculated maximized capacity was 1,000.

350

Storage and Units


Units and unit groups

Block units
The Tank and Interchange blocks can have
an internal block unit
that is different than the
flow unit. This is an
internal representation
of volume that is specific
to the Tank or InterFlow and block units in the Tank
change block, and does
not affect the flow unit
for the unit group. If you select a block unit that differs from the flow units that come into and out
of a block, you must enter a conversion factor. The conversion factor represents the ratio of the
block unit to the flow unit. Block units are discussed fully in Defining block units on page 351.

Using block units is optional; the default block unit is the flow unit.

Discrete Rate

Time units
Time units can be generic, in which case the block will just say time or can
be specific. Each model can define specific time units, which become the
default for the model. You can change a discrete rate blocks time unit from the
model default time unit to any local time unit using a popup menu in the
blocks Options tab.

Default time unit

If a local time unit is selected in a discrete rate block, that local time applies to the entire block but
only to that block. Changing to a local time unit does not change the global time unit for the flow
group or for any blocks in the rest of the model. For complete information, see Time units on
page 584.
Calendar dates are not available if months or years have been selected as the specific global time
unit for a discrete rate model. Furthermore, if Calendar dates has been selected, Rate library blocks
will not be able to select Months or Years as their local time unit.
Length units
For convenience, the Convey Flow block allows you to name a length unit. This is used internally
by the block with other settings to determine the blocks speed. You can use the default generic
unit length unit or declare a specific unit of length such as feet or meters.
Unit groups
A unit group is two or more blocks connected together through flow connections and sharing one
flow unit. Connecting the first blocks outflow connector to the second blocks inflow connector
creates a unit group. Unless the unit group is explicitly changed, all the blocks that are connected
through flow connectors use the same flow unit and are in the same unit group. If a flow unit is
changed in one of the blocks in a unit group, the unit group does not change but all the other
blocks in that group are updated automatically to the new flow unit.
To see the unit group, click the grey square to the right of a
blocks flow units popup menu, shown above. All the blocks
in that blocks unit group will be highlighted on the model
worksheet.

Unit group selector to right of popup

Storage and Units


Units and unit groups

351

You can define multiple unit groups, which use different flow units, in portions of a discrete rate
model. For instance, one part of the model could be expressed in bottles and another could represent boxes of bottles. The Change Units block can create a different unit group.

Declaring and selecting flow units


As mentioned above, flow units indicate what is moving from one flow connector to another, and
a unit group is a collection of connected blocks that share the same flow unit. This section focuses
on defining, selecting, and changing flow units.
To convert from one unit group to another in a model, use the Change Units block discussed on
page 352.
Where to declare a flow unit
Each block in the Rate library has the ability to select an existing flow unit or create a new one.
This is done in the blocks Options tab, which has a popup menu for either selecting an existing
flow unit or creating a new one. Specifying a flow unit in one block causes that unit to be used by
every block within the same unit group, and automatically sets that flow unit for any blocks that
are subsequently added to that unit group.
To see the unit group, click the unit group
selector button to the right of a block's
flow units popup menu. All the blocks in
that block's unit group will be highlighted
on the model worksheet.

Unit group selector to the right of the popup menu

Managing flow units in the Executive block


The Executive blocks Discrete Rate tab has a section
for managing flow units in a model. The table displays all the units for a given model and provides
buttons for adding, deleting, and renaming the
units.
To use this feature, select the flow unit you want to
change in the table, then click the appropriate button. ExtendSim will warn you and give options if
the unit is being used in the model.

Flow units for Yogurt Production model

Defining block units


As mentioned earlier, the Tank and Interchange blocks allow you to define a block unit that is different from flow units. This is an internal representation of volume only and is specific to the Tank
or Interchange block. It does not change the flow units or the unit group for the flow that has
entered or exited the block. If a block unit has been specified, a factor to convert the block unit
into flow units must also be entered.

Discrete Rate

Declaring a flow unit


To declare a flow unit, select an existing unit or create a new unit from the popup menu in the
Options tab. The selected flow unit applies not only to the block but also to the entire flow unit
group and it will automatically be set in new blocks that are connected within the unit group. For
instance, page 321 of the discrete rate tutorial showed how to create a new flow unit named gallons. When the fruit processing section was added, the popup menu for the Fruit Supply Tank
already included gallons selected as its flow unit.

352

Storage and Units


Changing the unit group

To define a block unit, in the Options tab of the Tank or Interchange block, select Define a flow
unit for the group and a block unit for the block. In addition to providing fields for declaring a flow
unit, this option displays a field for entering an internal block unit. It also has a field for entering
the factor to convert between the flow unit and the block unit.
Tank Flow Units model
The Tank Flow Units
model is the same as the
model described on
page 324. However, the
newer model has pints,
rather than gallons, as
the block units in the
Yogurt Tank, causing
Defining a block unit in the Tank
the processs output to
be displayed in the plotter as pints. Clicking the unit group selector button in its Options tab shows that this Tank is still
part of the unit group that uses the flow unit gallons.

Time units

Discrete Rate

A popup menu in the Options tab allows a blocks time unit to be changed from the model default
time unit to any local time unit.
If a local time unit is selected in a discrete rate block, that local time applies to the entire block but
only to that block. Changing to a local time unit affects every parameter in the block, but it does
not change the models global time unit or the time units used in any other block in the model. For
more information, see Time units on page 584.

Changing the unit group


By default all the blocks connected to the same flow stream belong in the same unit group. However, the Change Units block has the ability to create a new unit group, causing connected blocks
in a portion of the model to have a different flow unit.

Change Units block


To change the flow units from
one part of a model to another,
use the Change Units block.
While changing a flow unit in
most blocks will change the flow
unit for the entire group, adding
a Change Units block to the
Dialog of Change Units block
model causes a new unit group to
be created the Change Units blocks inflow connector will be part of one unit group comprised
of those blocks upstream of the Change Units block; its outflow connector will be part of another
unit group comprised of those blocks downstream of the Change Units block.
The Change units from: popup menu defines the flow unit that is entering the block; the to: popup
menu is for selecting or creating the new flow unit. The block has a field for entering the factor
that converts the incoming flow unit into the outgoing unit, and a popup menu to select the direction the conversion should take. You can also change the time units for this block in its dialog.

Storage and Units


Changing the unit group

353

Yogurt Production model


An example of changing flow units is shown in the tutorial on page 325, where gallons of liquids
were converted into containers of yogurt.

Discrete Rate

Discrete Rate

354

Storage and Units


Changing the unit group

Discrete Rate Modeling

Rates, Constraints, and Movement


Limiting the movement of flow through rates and constraints

356

Rates, Constraints, and Movement


Blocks of interest

As discussed in the Introduction to this module, the movement of flow in a discrete rate model
must take some time. It is a modeling error if the flow moves instantaneously throughout a model.
ExtendSim's discrete rate system attempts to move flow through the model as fast as possible. In
the absence of any constraints, the effective rate of flow would approach infinity and the flow
would move instantaneously throughout the model; this is never correct. For this reason, flow
movement must be constrained by rates and conditions that are built into the model, and a lack of
appropriate constraints is a modeling error that will stop the simulation run
In order to restrict flow rates:
Discrete rate blocks are required to define their own sets of constraining flow rules
Each area of a model must have one or more critical constraint mechanisms
Critical constraint flow rules, such as a blocks maximum rate, place an upper bound on the rate of
flow, limiting it to a number less than infinite. The blocks aggregated set of flow rules ultimately
defines how fast flow is permitted to move over time throughout the model.
This chapter discusses rates, the blocks that constrain flow, and how model conditions impact the
rate of flow. It will cover:
Rates, rate sections, and the LP area
Flow rules for defining how a block permits flow to move through it

Discrete Rate

The blocks that specify critical constraints


How to meet the constraint requirement

A comprehensive example of constraints and rate sections


Most of the models illustrated in this chapter are located in the folder \Examples\Discrete
Rate\Rates and Constraints. The tutorial models mentioned are located at \Examples\Tutorials\Discrete Rate.

Blocks of interest
The following blocks from the Rate library will be the main focus of this chapter.
Convey Flow
Delays the movement of flow from one point to another. Can accumulate flow to a maximum density, accumulate flow to fill empty sections, or act as a non-accumulating conveyor.
Interchange
Used to mix flow with items, this block can also limit its maximum rate of inflow and
outflow.
Tank
The block most frequently used to store flow can also limit its maximum rate of inflow
and outflow.

Rates, Constraints, and Movement


Rates, rate sections, and the LP area

357

Valve
Controls and monitors the flow, limiting the rate of flow passing through. This block
can also be used to set a goal for the duration or quantity of flow.

Rates, rate sections, and the LP area


One of the most important aspects of a discrete rate model is the rate of flow the speed of flow
movement. The flow rate is represented as the ratio of flow units to the models time units. This is
displayed in block dialogs as units/time, gallons/minute, transactions/second, boxes/hour, and so
forth.
Discrete rate models can be thought of as being divided into rate sections and LP areas. The flow
connectors within each rate section have the same effective rate, which is the speed at which flow
moves through those blocks. The LP area is composed of one or more rate sections whose effective
rates might change during the simulation.
The types of rates considered during the model building process, rate sections, and the LP area, are
discussed below.

Types of rates
The following rates are taken into consideration by ExtendSim and by a blocks flow rules. (Flow
rules will be discussed on page 360.)

The maximum rate puts an upper limit on the movement of flow through a block. Six Rate
library blocks have the ability to set a maximum rate. You can set an explicit maximum rate in the
Interchange, Tank, and Valve blocks. The maximum rate for the Convey Flow block is mathematically derived. Maximum rates may also be implicitly specified under certain conditions in the
Merge and Diverge blocks. In each case, the maximum rate is the highest rate of flow those blocks
will allow, and hence the highest potential rate of flow for that part of the model.
An inflow connector for a Convey Flow, Interchange, or Tank block can have one maximum rate
while the blocks outflow connector can have a different maximum rate. The maximum rate for the
Convey Flow blocks inflow is derived from settings in its dialog; the maximum rate for its outflow
is derived from dialog settings and model conditions. The maximum inflow and maximum outflow rates for the Interchange and Tank blocks can be entered directly in their dialogs.
In order to avoid an error condition, each area of a model must have some mechanism in place to
restrict the rate of flow to a number that is less than infinity. If the required minimum set of constraints is not present, ExtendSim stops the simulation and displays an error message.
Effective rate
One of the most important reasons for creating a discrete rate model is to determine the
actual rate of flow movement. The effective
rate is the calculated actual rate of flow

Effective rate (Valves Results tab)

Discrete Rate

Maximum rate
ExtendSim's discrete rate architecture
attempts to move flow through the model as
fast as possible. In the absence of any conDefault maximum rate for Valve
straints, the flow rate would theoretically
approach infinity and flow would move from one part of a model to another instantaneously; this
would be a modeling error.

358

Rates, Constraints, and Movement


Rates, rate sections, and the LP area

between Rate library blocks during the simulation run. It is the result of an internal calculation
taking into account the maximum rates and all the constraints of the process. In some situations
the effective rate is the same as the maximum rate; in others it is lower. One effective rate is associated with each rate section in a model, as discussed Rate sections on page 359.
In a rate section, the effective rate of flow cannot be higher than the lowest maximum rate for all
the blocks in that section. In fact, it can be lower than the lowest maximum rate, and could even
be zero (0), depending on model conditions.
While each rate section can have only one effective rate, a section can have more than one block
that has a maximum rate. In fact, it is common to have several Valve blocks, each with their own
maximum rate, in a rate section.
Infinite rate
An infinite rate is a theoretical rate that would cause the flow to instantaneously move from one
location in the model to another.

Discrete Rate

The Executive blocks Discrete Rate tab


specifies that a rate equal to or greater
than some number is considered infinite; the default is that a rate 1e10 is
considered infinite, as shown above.

From the Executives Discrete Rate tab

You can change the infinite number to be anything that you want. However, because of the 12
digit precision limitation of the effective rates, the number should be set as close as possible to the
highest possible effective rate which would ever reach this limit. (Setting a correct infinite rate is
more critical in the case of potential upstream supply and potential downstream demand calculations, an advanced topic discussed on page 440.)
Infinite effective rate
Since instantaneous movement is not possible in the real world, the Rate library does not support
an infinite effective rate. The infinity number specified in the Executive establishes an upper limit
on the models allowable set of effective rates. If the simulation calculates an effective rate that
equals or exceeds that number, ExtendSim will stop the simulation and generate an error message.
This could happen, for instance, if a source tank is directly connected to a sink tank, without any
intervening constraint.
Infinite maximum rate
The Executives infinity number (by default, 1e10) can be used in a block's rule set when conditions are such that it cannot in any way constrain the movement of flow. For example this would
be accomplished by checking the (infinite)checkbox for a Valves maximum rate. With an infinite maximum rate, the Valve will not limit the speed of flow passing through it.
If you set the Valves maximum rate field to blank or to a number 1e10, the block would also not
limit the speed of flow passing through it.
Upstream supply/downstream demand
This potential rate is considered when using an advanced mode in the Diverge. Merge, and Sensor
blocks. It is described fully in Upstream supply and downstream demand on page 440.

Rates, Constraints, and Movement


Rates, rate sections, and the LP area

359

Rate sections
A rate section is defined as a network of connected blocks, all possessing the same effective
rate. Each rate section can include a succession of
blocks and connections. A rate section always
starts with an outflow connector and ends somewhere downstream with an inflow connector.
Thus it will always contain at least two blocks
sharing at least one flow connection.

Two rate sections in a model

While some blocks always define the boundary between two rate sections, other blocks never
define a new rate section boundary:
Because a residence block (Convey Item, Interchange, or Tank) can hold flow for some period of
time, its effective inflow rate can be different from its effective outflow rate. Since the boundaries between rate sections never change, residence blocks always define the boundary between
two different sections, even if their effective inflow rate is the same as their effective outflow rate.
For example, a Tanks inflow connection ends one rate section and its outflow connection starts
another section.

All residence blocks, and certain passing blocks, always define the boundary between two different
rate sections. These boundaries are established internally by ExtendSim at the beginning of the
simulation run; they do not change.
The table below lists what role each block in the Discrete Rate library plays in defining the boundaries of a rate section:

Block

Always defines a
new rate section?

Bias

No

The inflow effective rate is the same as the outflow effective rate. The block influences the effective rate associated
with the section it is part of.

Catch Flow

No

The outflow effective rate is the same as the catch effective rate.

Change Units

Yes

The outflow effective rate is the inflow effective rate multiplied by the conversion factor.

Convey Flow

Yes

The outflow effective rate can be different than the outflow effective rate because it is a residence block.

Diverge

Yes

The effective rates can be different across all flow connectors the input and all the outputs.

Comments

Discrete Rate

Some passing (non-residence) blocks define a new rate section and others dont. While flow is
not permitted to be held in a passing block for any length of simulation time, some passing
blocks are capable of defining boundaries between sections. For example, a Valve is part of one,
and only one, rate section. On the other hand, the Change Units block's effective inflow rate
will always be different than its outflow rate because it performs a unit conversion. It therefore
defines the boundaries between two rate sections.

360

Rates, Constraints, and Movement


Flow rules

Block

Always defines a
new rate section?

Comments

Interchange

Yes

See Convey Flow comment

Merge

Yes

See Diverge comment

Sensor

No

The inflow and outflow effective rates are the same.

Tank

Yes

See Convey Flow comment

Throw Flow

No

The inflow effective rate is the same as the throw rate.

Valve

No

The inflow and outflow effective rates are the same.

For an example of rate sections, see the Comprehensive example on page 369.

Rate precision
The mathematical precision for effective rates is limited to 12 digits. This can become an issue if
you separate any two effective rates in an area by more than 12 digits of precision. For more information, see Precision on page 418.

Discrete Rate

LP area
While rate sections dont change after the start of a run, the boundaries of the LP area change
dynamically during the simulation. An LP area is composed of one or more rate sections linked
together by the fact that their effective rates could change during the simulation run. When an
event occurs that causes the effective rate for one rate section to be reevaluated, ExtendSim determines which other rate sections might be impacted. The affected rate sections constitute the LP
area and become part of the LP calculation.
Since the LP area is computed internally, and because it is most important for the LP calculation,
it is discussed fully in The LP area on page 435.

Flow rules
Flow rules completely define how a block permits flow to move through during the simulation
run. When calculating rates of flow, ExtendSim's discrete rate architecture tries to maximize
throughput throughout the system, subject to a set of constraints. In order to restrict flow, discrete
rate blocks are required to define their own sets of flow rules. The aggregated set of these rules ultimately defines how fast flow is permitted to move over time throughout the model.
A blocks particular set of flow rules is derived from four factors:
The blocks fundamental behavior.
How its dialog has been configured, such as setting a Tanks maximum input rate or entering a
conversion factor in the Change Units dialog.
How its value connections have been connected. For instance, the Valve blocks R (maximum
rate) input connector can be used to dynamically modify the blocks maximum flow rate.
How its flow connections have been connected. A Tank is a source if only its outflow connector
is connected; it is a sink if only its inflow connector is connected.
These flow rules completely describe the events or conditions under which a particular block may
constrain the movement of flow through it. However, changes in a blocks constraints during a
simulation cause its effective rates to be reevaluated and can cause a connected blocks effective

Rates, Constraints, and Movement


Flow rules

361

rates to be reevaluated, propagating calculations throughout an LP area. When recalculation is


required, the Executive block (Item library) uses the aggregated set of flow rules from all the blocks
in the LP area to calculate a new set of effective rates for the area. Thus a particular blocks flow
rules can be superseded by the global calculations of the Executive.

Critical and relational constraints


There are two primary types of flow rules: critical constraints and relational constraints.
Critical constraints
While all flow rules cooperate to constrain the rate of flow,
some blocks provide special rules called critical constraints. Critical constraint in a Valve
If a rate section contains one or more critical constraints, they
place an upper bound to the rate of flow for the blocks within that section. A critical constraint is
unconditional no matter what happens in the simulation, the effective rate of flow cannot be
higher than the lowest critical constraint of any block in that rate section. For example, the Maximum rate field is a Valve's critical constraint; the entry in that field defines an upper limit on the
rate of flow through the block. If that entry is the lowest critical constraint in the rate section, the
effective rate for every block in that section cannot be higher.
The blocks with the potential to set a critical constraint for flow are the Convey Flow, Diverge,
Interchange, Merge, Tank, and Valve; of these, the Valve is most commonly used. As will be shown
in Meeting the critical constraint requirement on page 366, these blocks must be placed at critical locations in order for the model to run properly.

Relational constraints

Relational constraints define the way the effective rates of different sections are related to each
other, creating dependencies between rate sections. For instance, the relational constraint between
one rate section (effective rate x) and another rate section (effective rate y), could be defined as xy,
x=y, 2x-3=y, or any other expression. Relational constraints get updated when the block reacts to
new parameters or to changes in its state, but they dont affect a blocks critical constraints.
An example of a relational constraint is the
Change Units block, where the use of a conversion factor causes the outflow effective rate
to be different than the inflow effective rate.
The Change Units block defines the boundar- Different inflow and outflow rates
ies between one rate section and another; the
conversion factor specifies the relationship of the two effective rates.
For another example of a relational constraint, see Comprehensive example on page 369. For an
advanced discussion of relational constraints, see The relational constraint calculation on
page 439.

You dont enter relational constraints, they are determined by the behavior of the blocks.

Discrete Rate

ExtendSim's discrete rate system attempts to move flow through the model as fast as possible.
Without any mechanism to impede its progress, the effective rate would theoretically approach
infinity and the flow would move from one part of a model to another instantaneously. In order to
avoid this error condition, each LP area of the model must contain one or more constraints (typically a Valve) to restrict the flow to a number that is below infinity. If the required minimum set of
critical constraints is not present in a model, ExtendSim stops the simulation and displays an error
message.

362

Rates, Constraints, and Movement


Defining a critical constraint

Comparison of constraints
Some blocks can set a critical constraint, some can set a relational constraint, and some can do
both. Even for blocks that can set constraints, the block may in some situations place no constraint
on the flow.
The blocks that can set a critical constraint are the Convey Flow, Diverge, Interchange, Merge,
Tank, and Valve.
Relational constraints can be set by the Change Units, Convey Flow, Diverge, Interchange,
Merge, and Tank blocks.
For example, a Tank where both the Maximum inflow rate and Maximum outflow rate are
checked will set critical constraints for its inflow and outflow.
If neither Maximum inflow rate nor Maximum outflow rate is checked, the Tank will not have
any critical constraints but could have relational constraints. If the Tank has a finite capacity but is
neither full nor empty, it places no constraints on the flow. However, once the Tank reaches the full
state, its inflow rate is required to be less than or equal to its outflow rate; this is a relational constraint.
The effective rate for a rate section cannot be any higher than the lowest critical constraint set for
by any of the blocks in that section. Furthermore, because the aggregated set of flow rules also typically contains relational constraints, the effective rate for the section can vary anywhere between
zero and the smallest critical constraint.

Discrete Rate

For a table that lists the blocks and which constraints they can provide, see Types of information
provided to the Executive on page 437.

Defining a critical constraint


As mentioned earlier, a critical constraint defines the upper limit to the rate of flow through a rate
section. While a particular rate section may or may not have a critical constraint, at least one of the
rate sections within the LP area must have a critical constraint mechanism to limit the flow rate to
a number that is less than infinity.
You can explicitly set a critical constraint in the Valve, Tank, and Interchange blocks. You do this
by entering a maximum rate in the block's dialog, obtaining a value for the maximum rate from
the blocks input connector, or linking the maximum rate field to the value of a cell in a global
array or ExtendSim database.
For the Convey Flow block, the critical constraint is derived from settings in its dialog and
sometimes other model values, rather than being entered directly.
A critical constraint may also be implicitly specified under certain conditions by the Merge and
Diverge blocks.
The next sections describe how to set a critical constraint. See also Meeting the critical constraint
requirement on page 366 for examples of how to apply the constraint requirement in your models.

Rates, Constraints, and Movement


Defining a critical constraint

363

Valve
The Valve is the block most often used for explicitly setting a critical constraint. You can enter a value in the
maximum rate field in the block's dialog, link the field
to an ExtendSim database or global array, or connect the
blocks R (maximum rate) input connector to some
value output.

Defining constraints for Valve

For an example of setting a fixed maximum rate for the


Valve, see Entering dialog parameters and settings on page 321.
Dynamically changing the maximum rate
There are two ways to change a Valves maximum rate during a simulation run:
Connect to the blocks R (maximum rate) input connector
Link the blocks Maximum rate field to an ExtendSim database or global array
Connecting to the Valves R input connector or linking its maximum rate field to a data source
overrides any values directly entered in the maximum rate field. Instead, that field will display the
current maximum rate as determined by the simulation run.

The checkboxes for Initial maximum rate and Poll constraint every, discussed below, are only
used when the Valve's maximum rate is configured to change dynamically.

As you saw in Add maintenance on page 324, the Add Shutdown button in the Valves dialog
automatically connects a Shutdown block (Item library) to the Valve's R input connector. This can
be used to stop the flow, or reduce its rate of movement, for a period of time. See also Shutting
down on page 185 for a description of how to use the Shutdown block.
Initializing the maximum rate
When the Valves maximum rate is configured to change dynamically, the Initial maximum rate
checkbox serves an important role. This is because the first effective rate calculations for a simulation occur just before simulation time starts moving forward. If the Valves R connector is connected or if the maximum rate field has been dynamically linked, problems can arise at this stage
because neither the block connected to the R connector nor the linked data source has yet had a
chance to provide an initial value. The Initial maximum rate checkbox resolves this issue by initializing the maximum rate.
The initial value entered in the dialog will be used until the Valve gets a different value from its R
input connector or from the linked data source.

For multiple runs, the Initial maximum rate checkbox prevents the Valve from using the last
maximum rate from the current run as the initial maximum rate for the next run.

Polling constraints
The checkbox to Poll constraint every... can be used when a Valves maximum rate is configured to
change dynamically. This option directs the Valve to request a new maximum rate value at fixed
intervals during the run. This causes the Valve to periodically query the block connected to its R
(maximum rate) input connector or the cell linked to its maximum rate field for the new values.
Any values received between the queries will be ignored.

Discrete Rate

For an example of using the Valves R input connector to cause the maximum rate to change
dynamically, see Add a dynamic constraint on page 322.

364

Rates, Constraints, and Movement


Defining a critical constraint

This checkbox is optional when the maximum rate field is connected to a fixed number in a linked
cell in a data source. It is required if the linked cell contains a random number or if the R input
connector is connected to a passive block like the Random Number (Value library), since a passive
block wont independently generate a new value for the maximum on its own. (The checkbox is
not needed if the R connector is connected to block that actively generates values, such as the
Lookup Table block set to output values at regular time intervals in the discrete rate tutorial.)

Each time the maximum rate in a Valve changes, effective rates must be re-calculated across multiple sections. If you are using the poll constraint feature in several Valves, consider having them
update at the same time. This will dramatically reduce the number of recalculations.

While the polling feature can be handy during the early stages of the model building process, flow
rates in real world systems rarely change at fixed intervals. Use this feature judiciously and with
caution.

Controlling how and when the Valve applies its maximum rate
The Valves Control Flow tab has advanced options that allow you to manage how and when that
block applies its maximum rate. By setting a goal or using hysteresis, you can explicitly control
when the Valves constraining rate will be observed, when it will be ignored, and for how long
either of those will happen. These topics are discussed in the Delaying Flow chapter.

Discrete Rate

Tank and Interchange


The Tank and Interchange blocks have
dialog options for explicitly defining
their maximum inflow and outflow rates.
Unlike the maximum rate in a Valve,
these constraints do not change dynamically during the simulation.

Default maximum rates for Tank

You can enter either a maximum inflow rate or a maximum outflow rate, or both of these.

Rates, Constraints, and Movement


Defining a critical constraint

365

The Tank Constraint example shows two flow streams with identical behavior. In the bottom flow
stream, Tank 2 uses the options Maximum inflow rate and Maximum outflow rate to replace
the filling and emptying valves found in the upper flow stream.

Tank Constraint model. Top stream with two Valves to constrain flow; bottom
stream with maximum rates defined in Tank 2.

flow rates in a Tank or Interchange block can be used to satisfy the models requirements for a constraint.

Convey Flow
The Convey Flow block calculates critical constraints for its inflow and outflow connectors separately. The critical constraints are derived from model conditions and settings in the dialog.
The critical constraint for the Convey Flow blocks inflow is calculated by multiplying the
blocks effective speed by its maximum density entry.

The effective speed can be less than or equal to the speed set in the dialog. If the block is non-accumulating, or if it is accumulating but cannot accumulate more, and the blocks ability to deliver
flow exceeds downstream demand, the effective speed will be lower than the entered speed.
The critical constraint for the blocks outflow is the result of the multiplication of the blocks
speed setting by the density of flow present at the outflow end of the block.

Setting the initial contents or capacity for a Convey Flow block is discussed in the chapter Storage
and Units. The Delaying Flow chapter shows how to use the Convey Flow block to delay the
movement of flow in a model.

Merge and Diverge


The critical constraint for one or more of a Merge or Diverge blocks branches can be implicitly
specified under certain conditions. Most often, the result would be a rate of 0 (zero).
When a Merge or Diverge block is set to certain modes, flow can be blocked from moving through
one or more of its branches. For example, if one branch of a Diverge block in Distributional mode
has been assigned a blank value or a value <=0, flow through that branch is halted. Similarly, flow

Discrete Rate

Instead of using a Valve block to constrain flow, setting maximum inflow and/or a maximum out-

366

Rates, Constraints, and Movement


Meeting the critical constraint requirement

through all but the selected branch is blocked when the Merge block is in Select mode. In both of
these cases, the maximum rate would be 0 for the affected branches.
The Mode table on page 373 lists each mode for the Merge and Diverge blocks. The column
labeled Parameter values that always block the flow indicates which conditions would always
cause a branch to have an implied constraint of 0.

Meeting the critical constraint requirement


As discussed earlier, while a particular rate section may or may not have a critical constraint, at
least one of the rate sections within the LP area must have a critical constraint mechanism to limit
the flow. Otherwise, the rate of flow would approach infinity.

By definition, residence blocks always delineate the boundary between two rate sections. A general
rule is that there must be at least one critical constraint between every two residence blocks. (The
critical constraints can be provided by the Convey Flow, Diverge, Interchange, Merge, Tank, and
Valve blocks. The residence blocks are the Convey Flow, Interchange, or Tank.) The exceptions to
the general rule include certain situations where a Merge or Diverge block is between two residence blocks.

The following examples illustrate some ways the required critical constraint mechanism can be met
in discrete rate models.

Discrete Rate

Valve or Convey Flow


The No Merge or Diverge model illustrates two typical ways to provide a critical constraint to the
rate of flow between two residence blocks (in this case, Tanks) that dont have a Merge or Diverge
block between them.
The example to the right uses a Valve to constrain the
flow between two Tanks. This is the most straight forward and most common situation. In order for the
Valves maximum rate to provide the critical constraint
it must be:
Greater than or equal to 0 (zero)
Less than 1e10 (the defined infinite rate)
Not a blank
The example to the left uses a Convey Flow block
to meet the requirement for a critical constraint.
A Convey Flow block derives the critical constraint for its inflow from its dialog settings and
the critical constraint for its outflow from its dialog settings and model conditions. Because it has
critical constraints at both its inflow and outflow connectors, the Convey Flow block limits the
rate of flow from the first Tank to the second to a number that is less than infinite.

Tank or Interchange
Instead of using a Valve to provide the critical constraint between two residence blocks, you can
specify maximum inflow and maximum outflow rates for an intervening Tank or Interchange
block. With these maximum rates, the Tank or Interchange will limit the rate of flow between the
two residence blocks to a number less than infinite. This is shown in the Tank Constraint example
discussed in Tank and Interchange on page 364.

Rates, Constraints, and Movement


Meeting the critical constraint requirement

367

Merge or Diverge blocks


If a Merge or Diverge block is between two residence blocks, the inflow and outflow branches may
or may not require a critical constraint mechanism.

For any Merge/Diverge mode, if a critical constraint has been placed on a Merge blocks outflow

branch, no critical constraints are required on its inflow branches. Likewise, a critical constraint on
a Diverge blocks inflow branch means that no critical constraints are required on its outflow
branches. If those constraints have not been placed, the critical constraint requirement depends on
the blocks mode.

The following table provides an overview of each modes requirements for critical constraints when
neither the Merge blocks outflow branch nor the Diverge blocks inflow branch has a critical constraint. (In this table, the word variable branch means an inflow branch for the Merge block or
an outflow branch for a Diverge block.)
Critical constraint requirements if there is no critical constraint on
the non-variable branch

Batch/Unbatch

Only on one of the variable branches

Distributional

Each variable branch

Neutral

Each variable branch

Priority

Each variable branch

Proportional

Only on one of the variable branches (See Note, below)

Select

Each variable branch

Sensing

Each variable branch

Note: For the Proportional mode, the variable branch with the critical constraint should not have a
proportion <=0. Otherwise, that branch will be closed and the other variable branches will have
potentially infinite effective rates. This is an error condition.

Merge and Diverge blocks, including their modes, are described fully in the chapter Merging,
Diverging, and Routing Flow.
The two examples that follow use the Minimum Valve model to illustrate some of the tables concepts.

Discrete Rate

Mode

368

Rates, Constraints, and Movement


Meeting the critical constraint requirement

Proportional mode
The top section of the Minimum Value model indicates the critical constraint requirement when a Merge
or Diverge block is in Proportional mode. If the block
is located between two residence blocks, only one critical constraint is needed as long as the branch's proportion is neither 0 nor blank. (This lower requirement for
constraints is an exception to the general rule described
on page 366.) The effective rates for the other branches
are deduced from the Valve's maximum rate.
In the Minimum Valve example shown on the right, a
Valve is placed on a Diverge blocks bottom outflow
branch, and that branch does not have a 0 or blank
proportion.

Only one constraint needed

Discrete Rate

Priority mode
The lower section of the Minimum Value model indicates the critical constraint requirements
when a Merge or Diverge block is in Priority mode. In this case, the number of critical constraints
that must be placed on the branches between residence blocks depends on where those constraints
are placed. These situations are shown in the Minimum Valve model.
If a critical constraint is placed between a residence
block and a Diverge blocks inflow branch, you do not
need to place any other critical constraints on the
Diverge blocks outflows. Likewise, if you place a critical
constraint on a Merge blocks outflow branch, you do
not need to place any critical constraints on its inflow
branches. This is shown on the right, where a Valve with
a maximum rate greater than or equal to 0 but less than
1e10 (the infinite rate) is on a Diverge blocks inflow
branch and there are no critical constraints required on
its outflow branches.

No constraint on each outflow

If you dont
place a critical constraint on a Diverge blocks inflow
branch, you must place at least one critical constraint
on each outflow branch. Likewise, if you dont place a
critical constraint on a Merge blocks outflow branch,
you must place at least one critical constraint on each
inflow branch.

Constraint on each outflow

This is shown in the screenshot to the left, where there


is no critical constraint on the Diverge blocks inflow
branch. This means each outflow branch must have a
critical constraint, in this case a Valve with a maximum
rate greater than 0 but less than 1e10 (the infinite rate).

Rates, Constraints, and Movement


Comprehensive example

369

Comprehensive example
The following example illustrates many of the
concepts from this chapter. The top line of the
Tank Constraint model, shown on the right, has
two rate sections, two critical constraints, and one
relational constraint.

The sections that follow use the abbreviation FPT

Tank Constraint model

to indicate flow units per time unit.

Rate sections
Rate sections are determined internally by a communication between Rate library blocks and the
Executive (Item library). The boundaries between rate sections are established at the beginning of
the simulation run; they do not change during the run even if the effective rates change.
At the beginning of the simulation run:
The Filling valve has a maximum rate of 10, gets its inflow from an infinite Source, and sends its
outflow to an empty Storage tank that has a capacity for 100 flow units. The system will thus
calculate an effective inflow and outflow rate of 10 FPT for the Filling valve at the start of the
simulation run. (This will change once the Tank fills.)

The Emptying valve has a maximum rate of 5 FPT and sends its outflow to an infinite Sink. Its
effective inflow and outflow rate is 5 FPT.
At the start of the simulation run, the Storage tanks effective inflow rate is different from its effective outflow rate. Thus the first rate section for the Tank Constraint model starts at the Source
blocks outflow connector and ends at the inflow connector on the Storage tank. The second rate
section starts at the Storage tanks outflow connector and ends at the Sinks inflow connector.

Critical constraints
There are two critical constraints in the top line of the Tank Constraint model. The first critical
constraint is the 10 FPT entered in the Filling valves maximum rate field. The second is the 5
FPT entered in the Emptying valves maximum rate field.

Relational constraint
Relational constraints define the way the effective rates of different sections are related to each
other. At the beginning of the simulation run there are no relational constraints the effective
inflow rate is independent of the effective outflow rate. When the Tank (which has a finite capacity
of 100 flow units) becomes full, it applies one critical constraint: inflow rate must be less than or
equal to outflow rate.

Simulations impact on the effective rates


Since it is empty at the start of the run, the Storage tank's initial set of flow rules will not include
placing any restrictions on its inflow rate. Consequently, the initial effective rate of flow through
Rate Section 1 is limited only by the Filling valve's critical constraint of 10 FPT.

Discrete Rate

The Storage tank has a a capacity for 100 flow units, gets its inflow from a valve with a maximum rate of 10 FPT and sends its outflow to a valve with a maximum rate of 5 FPT. At the
beginning of the simulation run, its effective inflow rate will thus be 10 FPT and its effective
outflow rate will be 5 FPT.

370

Rates, Constraints, and Movement


Comprehensive example

Discrete Rate

However, this initial effective rate for the first rate section is only temporary. Since the Storage
tank's capacity is finite and since Rate Section 2's effective rate is only 5 FPT, the Storage tank will
eventually become full. Once this happens, the effective rate of 10 FPT in Rate Section 1 can no
longer be maintained. Consequently, the Storage tank introduces a relational constraint that
requires its inflow effective rate (Rate Section 1) to be less than or equal to its outflow effective rate
(Rate Section 2). Once the Storage tank is full, its relational constraint causes the effective rate
through Rate Section 1 to be reduced to 5 FPT.

Discrete Rate Modeling

Merging, Diverging, and Routing Flow


Using the Merge, Diverge, Throw Flow and Catch Flow blocks

372

Merging, Diverging, and Routing Flow


Blocks of interest

When building models, you will frequently encounter situations where you want to route the
streams of flow in a model. This is accomplished using the Catch Flow, Diverge, Merge, and
Throw Flow blocks.
The Merge and Diverge blocks have similar interface and capabilities. These two blocks send and
receive flow through a variable number of inflow and outflow connectors. Their dialogs provide
rule-based options to merge or diverge flow in a discrete rate environment.
The Throw Flow and Catch Flow blocks also have similar interfaces. These blocks route flow
remotely from point to point.
This chapter covers:
Blocks for merging, diverging, and routing flow
Merge and Diverge modes
Additional features of the Merge and Diverge blocks

Using the Throw Flow and Catch Flow blocks


The models illustrated in this chapter are located in the folder \Examples\Discrete Rate\Merge and
Diverge.

Blocks of interest

Discrete Rate

The following blocks from the Rate library will be the main focus of this chapter.
Catch Flow
Receives flow sent from Throw Flow or Diverge blocks. Allows you to group blocks that
can send the flow into sets, so that the list of possible connections can be filtered.
Diverge
Distributes flow from one inflow branch to one or more outflow branches at a time. The
block has several modes for determining how the flow is distributed through the branches.
Merge
Merges flows from one or more inflow branches at a time into one outflow branch. The
block has several modes for determining how the inflows should be received.
Throw Flow
Sends flow to Catch Flow or Merge blocks. Allows you to group the blocks that can receive
the flow into sets, so that the list of possible connections can be filtered.

Merging and diverging flow


The systems modeled using discrete rate technology typically have multiple flow streams that need
to be merged into one stream or, conversely, one flow stream that needs to be diverged to multiple
streams. The Merge and Diverge blocks have been designed specifically to model this type of routing behavior.
The Merge and Diverge blocks have seven different rule-based options that determine how they
send and receive flow. These modes mostly behave as mirror images of each other in the two
blocks. The list of modes, and their similarities and differences, are summarized in the Mode
table, below. The examples that follow the table show how each of the modes can be applied.

Merging, Diverging, and Routing Flow


Merging and diverging flow

373

For the Merge block, each input connector is referred to as an inflow branch. For the Diverge
block, each output connector is referred to as an outflow branch. Collectively they are known as
the variable branches.

Mode table
The following table lists the Merge and Diverge modes in alphabetical order and summarizes their
main similarities and differences.

Mode

See page

Sum of
inputs =
sum of
outputs?

Fixed rule?

Bias order
required?

Parameter value at
each branch that
will always block
the flow

Compatible
with Sensing
mode?

Batch/Unbatch

375

No

Yes

No

None

Yes

Distributional

378

Yes

No

Yes

Blank, <=0

Maybe

Neutral

380

Yes

No

No

None

Maybe

Priority

376

Yes

No

Yes

Blank

Maybe

Proportional

375

Yes

Yes

No

Blank, <=0

Yes

Select

373

Yes

Yes

No

None

Yes

Sensing

379

Yes

No

Yes

Blank, <=0

Yes

Some modes use a fixed flow rule to obtain or distribute the flow no matter what happens in
the rest of the model, the fixed rule will be respected. For other modes, the flow rules express a
preference and are only invoked in specific situations depending on model conditions.
Competing requests for flow amongst Merge and Diverge blocks that have been set to the Distributional, Priority, and Sensing modes require the use of bias ordering. This is discussed in
Biasing flow on page 418.
While other parameter values may block the flow in certain circumstances (for instance, if a
number is out of range), for some modes a Blank or zero (0) will always cause the flow to be
stopped. Values that are out of range will cause an error message; a zero (0) or Blank will not
generate an error message.
As discussed in their respective sections, incompatibilities can arise if an area of the model has
one or more blocks that use the Sensing mode and other blocks that use either the Distributional, Neutral, or Priority mode. These situations should be avoided whenever possible as they
can give inaccurate results.

Select mode
When the Merge or Diverge blocks are in Select mode, only one selected branch at a time is open.
A table in the blocks dialog allows you to assign a unique ID number to each inflow branch (for
the Merge block) or outflow branch (for the Diverge block). The ID connector on the blocks icon
is then used to select which branch to open.
Options in the blocks dialog allow you to specify what happens if the value at the ID connector
doesnt match any of the branch IDs listed in the table:

Discrete Rate

Characteristics
Explanations for the mode characteristics are:

374

Merging, Diverging, and Routing Flow


Merging and diverging flow

Choose top connection


Choose bottom connection
Stop flow
Generate error
A blank value received at the ID connector always stops the flow until the connector receives a
valid input.

The Select mode uses a fixed flow rule to obtain the set of effective rates for each branch and to

Discrete Rate

determine which branch to route the flow to.


Select Mode Diverge model
In the Select Mode Diverge model, a Create block is set to output a sequential
value (1, 2, 3, or 4) every 20 time units.
At its ID input connector, the Diverge
block receives the value from the Create
block, compares that value to entries in its
dialog table, and selects the appropriate
outflow connector. Three Tank blocks,
each with an infinite capacity for flow
units, are connected to the Diverge block.
The Tank blocks are identified by the ID
values entered in the Diverge blocks dialog. For example, an Output ID of 1 indicates the Tank labeled Infinite Sink 1.

In this example the Create block is


responsible for controlling the Diverge
Select Mode Diverge model
block. When the Create block sends a
value of 2 to the Diverge blocks ID connector, the flow is routed to Infinite Sink 2, and so forth.
Notice that in this model 4 is an invalid number and the Diverge block is set to Invalid value at
ID: stop flow. When the Create block sends a value of 4, all flow through the Diverge block stops
and a red bar appears on the block's right side. This pause in the flow could be used for a specific
purpose, for instance to allow time to empty downstream Tanks.

Try running the model after checking Pause each step (in the upper left corner of the model).

This will cause the simulation to pause so you can more easily see the effect of the Create block
sending values to the Diverge block. Clicking the Pause/Resume button in the toolbar will continue execution to each succeeding event. (There can be more than one event without time
advancing.) For more information, see Stepping through a model on page 580.
Select Mode Merge model
This model is the mirror image of the Select Mode Diverge model discussed above. While the
three source tanks provide an infinite supply of flow, it is the Merge block that controls which tank
flow is drawn from. Since the Merge block is in Select mode, the Create block controls the routing
of flow by providing different values (1, 2, 3, 4 sequentially every 20 minutes) at the Merge blocks
ID connector.

Merging, Diverging, and Routing Flow


Merging and diverging flow

375

In this model, the Merge block is set to Invalid value at ID: choose top connection. This means
that when the ID connector gets a value of 4 from the Create block, it will select the flow from its
top input connector.

Batch/Unbatch mode
The Batch and Unbatch modes are used to cause a different total amount of outflow than what
would be indicated by the total amount of inflow or to change the total amount of inflow into a
different total amount of outflow.
When the Merge block is in Batch mode, each unit of flow from each inflow branch is combined into one outflow unit. The effective rates of each inflow branch and the outflow connector are thus required to be equal. In this mode, the Merge block's behavior is similar to that of
the Batch block (Item library).
When the Diverge block is in Unbatch mode, each unit of flow from its inflow branch is cloned
into one unit of flow for each outflow branch. The effective rates for the inflow connector and
each outflow branch are thus required to be equal. In this mode, the Diverge block's behavior is
similar to that of the Unbatch block (Item library).

The Batch/Unbatch modes are different from all the other modes because the amount of total
inflow is never equal to the amount of total outflow.

Notice the amount of flow (1,000 units) that


has entered the Infinite Sink is half the total
amount of flow that has left the two source
Batch Mode Merge model
tanks. This is because the effective rate for the
Merge blocks outflow connector is required to
be the same as the rate at each of its two inflow branches.
Unbatch Mode Diverge model
In this example, one unit of flow per time unit from the Infinite Source is unbatched into two flow
units per time unit one for Infinite Sink 1 and the other for Infinite Sink 2. Notice the total
quantity of flow (2,000) in the two sink tanks is double the amount of flow (1,000) that exited the
source tank.

Proportional mode
With the Proportional mode, you define in a table what the proportion of flow through each
branch will be. The proportion for each branch is defined in the table relative to each of the other
branches. For instance, a value of 2 for the top outflow branch and 4 for the bottom outflow
branch would indicate that the bottom branch should have twice the amount of flow as the top

Discrete Rate

Batch Mode Merge model


In the Batch Mode Merge example, the Merge
block is set to Merge mode: batch. Each time
unit the block takes one unit of flow from
Infinite Source 1 and one unit of flow from
Infinite Source 2. It then combines them to
make one unit of output flow per time unit.
Since the model runs for 1,000 time units, the
Infinite Source 1 and Infinite Source 2 blocks
each provide 1,000 units of flow.

376

Merging, Diverging, and Routing Flow


Merging and diverging flow

branch. If a particular branch's proportion has been defined to be blank or <= 0, the effective rate
for that branch is set to 0 and the flow is stopped for that branch.

See Merge blocks in Proportional mode on page 425 for options when a Merge block is part of
an empty loop.

This mode uses a fixed flow rule where the effective rate at each branch is required to meet the
proportion defined by the table. Consequently, if the flow through one or more of the branches is
blocked or starved, the effective rates for all branches will be set to zero and all flow through the
block is halted.

Discrete Rate

Proportional Mode Diverge model


In this example, flow coming from the Infinite
Source is evenly distributed between the
Diverge blocks three outflow branches. This
occurs because the proportions in the table in
the Diverge blocks dialog have been set to
1:1:1. With this proportion, the effective rate
across all three branches is required to be the
same an identical amount of flow must pass
through each branch.
The initial constraining rate for the three Valve
blocks is set to 100. However, the Shutdown
block forces Valve 1's constraining rate to alternate between 0 and 100 as the model runs. This Proportional Mode Diverge model
has an impact on the effective rate for all three
branches. When the constraining rate for Valve
1 switches to 0, the outflow from all three branches goes to 0 even though the constraining rate for
Valves 2 and 3 is still equal to 100. This is because the Diverge block must enforce its ratio, which
is 1:1:1 in this example.
Proportional Mode Merge model
This model is the mirror image of the Proportional Mode Diverge model discussed above. While
all three Valve blocks limit the supply of flow from the source tanks at an initial constraining rate
of 100, the Shutdown block forces the constraining rate in Valve 1 to alternate between 0 and 100.
As in the previous model, when the constraining rate in Valve 1 switches to 0, the effective rates for
all three branches become 0 because the Merge block is in Proportional mode and must enforce
the 1:1:1 equality it is set to.

Priority mode
The Priority mode allows you to attach priorities to the inflow branches of the Merge block and
the outflow branches of the Diverge block. These priorities only impact the effective rates assigned
to the branches when discrepancies arise between the upstream flow supply and the downstream
flow demand; otherwise they are ignored.
In the case of the Diverge block, when the upstream supply is greater than or equal to the downstream demand, the block passes as much flow through each branch as the downstream demand
will allow and the priorities are ignored. However, when the cumulative downstream demand
exceeds upstream supply, the priorities that have been assigned to each branch are used to calculate the appropriate effective rates for the outflow branches.

Merging, Diverging, and Routing Flow


Merging and diverging flow

377

In contrast, the Merge block passes as much flow as possible through each inflow branch when
downstream demand exceeds upstream supply, ignoring the priorities. However, when the
cumulative upstream supply exceeds downstream demand, the priorities assigned to each branch
are used to calculate the appropriate effective rates for the inflow branches.
Special cases apply to the use of the Priority mode in a Merge or Diverge block:
If the priority for a particular branch has been set to blank, the effective rate for that branch will
be zero and the flow will stop for that branch.
If the priorities of two or more branches are equal, the flow will be divided among them in a
distributional manner with equal proportions (see Distributional mode, below.)

The priority entries in a Diverge blocks dialog are not fixed rules but instead are situational; they
are only used to resolve discrepancies when downstream demand exceeds upstream supply. For a
Merge block, the entries are used to resolve discrepancies when upstream supply is greater than
downstream demand.

Merge/Diverge blocks in Priority mode are not always compatible with Merge/Diverge blocks in
Sensing mode. Consequently, an area of the model with some blocks in Sensing mode and others
in Priority mode are prone to error. See Cautions when using potential rates on page 441 for
more information.

However, if a supply scarcity is introduced by changing the constraining rate in Valve 1 from 8 to
4, the Diverge block will calculate a set of effective rates that distributes the now limited supply of
flow according to the defined priorities. Since the priorities have been assigned in descending order
(top outflow branch has highest priority), the Diverge block will do its best to satisfy the downstream demand that has been placed on the top outflow branch first. After that, if supply is still
available, the Diverge block will attempt to service subsequent branches. This pattern is repeated
until every branch has been satisfied or until the upstream supply of flow runs out, whichever
comes first.

Discrete Rate

Priority Mode Diverge model


In this example, the
constraining rates in
the valves have been set
such that the upstream
supply of 8 flow units
per time unit through
Valve 1 exceeds the
cumulative downstream demand of 6 set
by Valves 2, 3,and 4.
Because a large enough
supply of flow exists to
satisfy downstream
demand, the priorities
in this case are ignored
and have no impact on Priority Mode Diverge model
the set of effective rates
defined for each outflow branch.

378

Merging, Diverging, and Routing Flow


Merging and diverging flow

Priority Mode Merge model


When the blocks are in Priority mode, the difference between a Merge block and a Diverge block
(illustrated above) is that the priorities defined in the Merge blocks table impact the effective rates
for the inflow branches if there is a downstream scarcity of demand. The Priority Mode Merge
model illustrates the use of Priority mode when 1) the downstream demand exceeds upstream supply, and 2) downstream demand is less than upstream supply.

Distributional mode
Similar to the Proportional mode described on page 375, the Distributional mode allows you to
define a desired set of proportions for each branch. However, unlike the Proportional mode (but
similar to the Priority mode discussed on page 376), these proportions serve as the decision rule for
assigning effective rates to the branches only when discrepancies arise between the upstream flow
supply and the downstream flow demand.

Discrete Rate

In the case of the Diverge block, when the upstream supply is greater than or equal to the downstream demand, the block passes as much flow through each branch as the downstream demand
will allow and the proportions are ignored. However, when downstream demand exceeds
upstream supply, the proportions assigned to each branch are used as a guide to determine how
the limited supply should be distributed across the outflow branches.
In contrast, the Merge block passes as much flow as possible through each inflow branch when
downstream demand exceeds upstream supply, ignoring the proportions entered in the dialogs
table. However, when upstream supply exceeds downstream demand, the proportions assigned
to each branch are used as guides to determine how the limited demand should be distributed
across the inflow branches.

The distributional proportions entered in a Merge or Diverge blocks table are significant only in
certain situations; they are ignored otherwise. Proportions do not follow a fixed flow rule; they
only impact the effective rates assigned to the branches when discrepancies arise between the
upstream flow supply and the downstream flow demand.

Merge/Diverge blocks in Distributional mode are not always compatible with Merge/Diverge
blocks in Sensing mode. Consequently, an area of the model with some blocks in Sensing mode
and others in Distributional mode are prone to error. See Cautions when using potential rates on
page 441 for more information.
Distributional Mode Diverge model
In this example, the proportions for the Diverge
blocks two branches are
set to 1:1. The constraining rates in the valves are
defined such that the
upstream supply of 10
flow units per time unit
through Valve 1 equals the
cumulative downstream
demand of 10 set by
Valves 2 and 3. Because a
large enough supply of
Distributional Mode Diverge model
flow exists to satisfy

Merging, Diverging, and Routing Flow


Merging and diverging flow

379

downstream demand, the distributional proportions are ignored and have no impact on the set of
effective rates defined for each outflow branch of the Diverge block.
Two examples highlight what happens when the Diverge block is set to Distributional model and
there is a supply scarcity that causes the upstream supply to be less than the downstream
demand:
If the constraining rate in Valve 1 is changed from 10 to 8, the Diverge block will use the 1:1
proportions that have been defined in its dialog to allocate the now limited supply between the
two downstream demanding branches. In this case, 4 units of flow per time unit will move
through both the top and bottom branches.
If the constraining rate in Valve 1 is set to 9 units of flow per unit of time, the situation is different. According to the 1:1 proportions that have been defined in its dialog, the Diverge block
should allocate 4.5 units of flow to each of the two downstream demanding branches. However,
the constraining rate for Valve 3 is 4 units of flow per time unit and that is all it can accept. The
extra 0.5 units of flow will be routed through the top branch because the downstream demand
for the bottom branch cannot keep up with the upstream supply (4.0 vs. 4.5) and the Distributional mode will always try to push as much flow as possible.

The Diverge block's Proportional mode is used to resolve discrepancies when downstream demand
is greater than upstream supply.

The Merge block's Proportional mode is used to resolve discrepancies when upstream supply is
greater than downstream demand.

Sensing mode
Similar to the Proportional mode discussed on page 375, the Sensing modes use proportions to
calculate the effective rates for the branches. However, unlike the Proportional mode where you
directly enter or control the proportions for each branch, the proportions for the Sensing modes
are derived dynamically from the model as it runs.
In the case of the Diverge block, Demand Sensing proportions for the outflow branches are calculated as a function of the potential downstream demand. For instance, the downstream
demand placed on a particular outflow branch becomes the proportion for that branch.
Similarly, the Merge block uses the potential upstream supply to define the Supply Sensing proportions for each inflow branch.

Potential demand and supply rates are advanced concepts that are discussed in Upstream supply
and downstream demand on page 440.

In the Sensing mode, the block's dialog has a table where you must define the maximum possible
rate of flow through each branch. This upper bound is used as a way to limit throughput so that
the proportions can be determined if the upstream supply or the downstream demand is infinite.
The discussion on page 441 provides reasons why the Sensing mode should be used with extreme
caution and some situations where it should be avoided altogether. Given the potential problems,

Discrete Rate

Distributional Mode Merge model


When the blocks are in Distributional mode, the difference between a Merge block and a Diverge
block (illustrated above) is that the proportions defined in the Merge blocks table impacts the
effective rates for the inflow branches only if there is a downstream scarcity of demand. The Distributional Mode Merge model illustrates the use of the Distributional mode when 1) the downstream demand exceeds upstream supply, and 2) downstream demand is less than upstream supply.

380

Merging, Diverging, and Routing Flow


Merging and diverging flow

and because similar behavior can be achieved using the Distributional mode, the Sensing mode
should be used only as a last resort.
Demand Sensing Mode Diverge model
In this example, the constraining rates in Valves
2, 3, and 4 define the
demand for flow downstream of the Diverge
block. They therefore
define the proportions
used to distribute the
flow across the Diverge
blocks outflow branches.

Discrete Rate

A maximum possible
rate of 1,000 for each
branch is entered in the
Diverge blocks table.
The blocks Results tab
Demand Sensing Mode Diverge model
(cloned onto the model
worksheet) displays each
branchs actual outflow rate and the amount of total outflow for the simulation run.
Supply Sensing Mode Merge model
In the Supply Sensing Mode Merge example, the constraining rates in Valves 1, 2, and 3 define the
supply upstream of the Merge block. They therefore define the proportions used to distribute flow
across the inflow branches.

Neutral mode
Unlike any of the modes discussed previously, the Neutral mode does not allow you to control the
effective rates for the branches. This is a passive mode where no branch has a throughput advantage; the branch that gets chosen cannot be predicted. It is used when the system does not need to
control how the flow is routed.
In the case of a Diverge block, when the upstream supply is greater than or equal to the downstream demand, the block passes as much flow through each branch as downstream demand will
allow. However, when downstream demand exceeds upstream supply, the distribution of flow
across each branch cannot be predicted.
In contrast, the Merge block passes as much flow as possible through each inflow branch when
downstream demand exceeds upstream supply. However, when upstream supply exceeds downstream demand, the distribution of flow across each branch cannot be predicted.
The Neutral mode should be used carefully but can be handy in certain cases. As a general rule of
thumb, if you don't care exactly which branch has priority, but you do want maximum flow, consider using the neutral mode. The Neutral mode can also be used to resolve conflicting decision
rules. For example, using the Neutral mode in a downstream Merge block would allow an
upstream Diverge block in Proportional mode to control the effective rates of the inflow branches
in the Merge.

Merging, Diverging, and Routing Flow


Features of the Merge and Diverge blocks

381

Merge/Diverge blocks in Neutral mode are not always compatible with Merge/Diverge blocks in
Sensing mode. Consequently, an area of the model with some blocks in Sensing mode and others
in Neutral mode are prone to error. See Cautions when using potential rates on page 441 for
more information.

Features of the Merge and Diverge blocks


Some features available in the Merge and Diverge blocks of particular interest include:
Bias order
Managing flow attributes when flow merges and diverges
Internal Throw and Catch connections
Dynamically changing parameters
These features are described in the following sections.

Bias Order resolving competing requests for flow


As models grow in complexity, it is common for the priorities or proportions defined in one
Merge/Diverge block to compete or conflict with the priorities or proportions defined in other
Merge/Diverge blocks. This problem of competing requests for flow is resolved by assigning a
bias order to the competing blocks. This is accomplished through entries in either the Model Settings tab of the individual blocks or the Discrete Rate tab of the Executive block. The following
example demonstrates one of the many ways competing requests can arise and be resolved.

to Distributional, Priority, or Sensing modes must specify a bias order to resolve conflicts between
competing preferences for flow, as discussed below. For a complete description of the bias concept
and bias order, see Biasing flow on page 418.
Competing Requests for Flow model
This model demonstrates how the priorities in two routing
blocks compete
against each other.
In this example:
The Diverge
blocks outflow
branch priorities
have been specified
in descending
order while the
Merge blocks'
inflow branch pri- Competing Requests for Flow model
orities have been
specified ascending order.
The two blocks share common flow streams.
While the Diverge block in this model will try to satisfy its top outflow branch first, the Merge
block will oppose that by trying to satisfy its bottom inflow branch. To resolve this conflict, the

Discrete Rate

Because certain modes allow flexibility in the way flow is distributed, Merge or Diverge blocks set

382

Merging, Diverging, and Routing Flow


Features of the Merge and Diverge blocks

Diverge block's priorities have been biased over the Merge block. This was accomplished by selecting Each block defines its own bias order in the Discrete Rate tab of the Executive block, then
selecting the Diverge block in the Executives table and entering a bias of 1.
Selecting the option Show bias order on icon in the Discrete Rate tab of the Executive block
causes the bias value to be displayed near block icons as <x>. In the above model, the bias order
is indicated as <1> for the Diverge block and <2> for the Merge block, indicating that the Diverge
block has precedence over the Merge blocks requests.

To see how the Bias block is used instead of Merge/Diverge blocks to resolve competing preferences
for flow, see the Prioritize With Bias Blocks model located in the folder \Examples\Discrete
Rate\Merge and Diverge and discussed on page 418.

Managing flow attributes


When flow is merged or diverged, the management of flow attributes is based on settings in the
dialogs of the Merge and Diverge blocks.
The Flow Attributes tab of the Merge and Diverge blocks has several options that determine how
attribute values are handled when flow is merged or diverged. Default behaviors for layer and
string layer attributes are specified separately.

Discrete Rate

Whichever option is selected becomes the default option for that type of flow as it passes through
the block. For exceptions to the default, the blocks provide a table for specifying custom behavior
for each attribute.

Internal throw and catch


While the Rate library has two blocks, Throw Flow and Catch Flow, specifically designed to transport flow without the use of connection lines, the Diverge and Merge blocks have been given
throw/catch abilities as well. See Throwing flow and catching flow remotely on page 383 for a
full discussion.

Changing decision rules dynamically


With the exception of the Batch/Unbatch and Neutral modes, decision rule parameters for the
Merge/Diverge modes can be changed dynamically during the run. However, this is an advanced
feature that requires some caution and extra insight into how ExtendSim works.
There are two ways to dynamically change a decision rule for a Merge/Diverge mode:
Allow the rules to be
controlled by other
blocks. To do this, check
the appropriate checkbox (such as Priorities

defined using value connectors, as shown to the

Modifying decision rules dynamically (Priority mode)

right) on the Merge or Diverge blocks Options tab. When this checkbox is selected, a set of
value input connectors appear on the blocks icon, with one connector for each branch.
Link the parameter table to an ExtendSim database table or global array. Any changes made to
the table or array while the model runs will have the same effect as using a block to dynamically
change the values.

Merging, Diverging, and Routing Flow


Throwing flow and catching flow remotely

383

Limiting the number of recalculations


While this advanced feature is useful for changing how effective rates are calculated on the fly,
there are potential pitfalls. Since computations typically happen sequentially on a computer, new
parameter values for each branch are changed one at a time. Ideally, the Merge/Diverge block will
not recalculate the new set of effective rates for each branch until after all parameters have been
updated. If this is not the case, however, the block will be forced to unnecessarily calculate an
entirely new set of effective rates every time a parameter is updated. At the very least this will cause
your runtimes to be longer than need be. At the very worst, redundant rate calculations could
introduce bugs into your model when effective rates are temporarily calculated using one or more
out-of-date parameter values.
There are three approaches that will help avoid this problem:
1) The issue can be bypassed if the inputs on one Merge/Diverge block are controlled by the outputs from one equation-based block, such as the Equation block (Value library). This is
because the equation block will update all its outputs with the new results prior to alerting the
Merge/Diverge block to the change. For an example of this, see the model Change Priorities
with Equation.

3) By checking Poll new parameters only each: x time units in the blocks Options tab. This
causes a new set of parameters to be updated at fixed intervals. In this case, changes to the
inputs are ignored until the next interval in time arrives. In the example Change Proportions
Periodically, the model picks a new set of proportions every time another 100 units of time is
reached.

The options Update only when a True value is received at the Update connector and
Poll new parameters only each: x time units can be combined together.

Throwing flow and catching flow remotely


The most common way to route flow from one block to another is by drawing a connection from
an outflow connector to an inflow connector. This is a powerful mechanism for routing flow
because it's simple to implement and it provides a very clear picture of how the flow is being
routed in a model. The use of connection lines between connectors, however, can prove to be cumbersome when many streams of flow need to be routed into or out of hierarchical blocks.
The ExtendSim throw/catch mechanism solves this issue by allowing flow to be moved without
the use of connection lines. By creating a throw/catch connection via block dialogs, flow can be
routed from a throwing block to any catching block in the model.
In the Rate library:
Flow can be sent from the Throw Flow and Diverge blocks

Discrete Rate

2) By checking Update only when a True value is received at the GO connector in the blocks
Options tab. This allows the calculation of a new set of effective rates to be controlled explicitly. In this case, changes to the parameters are ignored until a message is received at the GO
input connector. This is shown in the example model Change Proportions with Trigger
which requests a new set of proportions at the beginning of each goal. (A goal represents the
production of 1000 units of flow and is repeated over and over until the end of the simulation.) The values at the inputs change every 10 time units, but because the chosen set of
parameter values remains unchanged for the duration of the goal, effective rates are recalculated only at the beginning of each new goal.

384

Merging, Diverging, and Routing Flow


Throwing flow and catching flow remotely

Flow can be received by the Catch Flow and Merge blocks.


Any sending block can throw to any catching block regardless of location.
The rules restricting how normal flow connections can be drawn between outflow and inflow connectors also apply to throw/catch connections:
The flow can go one way only from throw to catch
One throw can be connected with one and only one catch
One catch can be connected with one and only one throw

The advantage of using a Diverge block to throw flow or a Merge block to catch flow, is that each

outflow or inflow branch can throw or catch a separate stream of flow remotely. The Throw Flow
and Catch flow blocks, on the other hand, are limited to one flow source or destination each.

Discrete Rate

Creating a throw/catch connection


The creation of a throw/catch connection can be
made from either the sending (Throw Flow or
Diverge) or the receiving (Catch Flow or Merge)
block. Connections are made by selecting the
block to catch or throw the flow in a popup menu
in a blocks dialog. Each eligible block appears in
the list with its block label and global block number. Once established, the connection information
is automatically displayed in the dialogs of the
Selecting a connection in a Catch Flow block
sending and receiving blocks. In the screenshot
above, the Catch Flow block will receive flow from
a Diverge block labeled Diverge B; the Diverge blocks global block number is 4.
Choosing the connector position for Merge and Diverge blocks
If a Diverge or Merge block is part of the throw/catch connection, after selecting the connecting
block, you must also choose a Merge or Diverge connector position for flow to come from or go
to. This is because the Merge and Diverge blocks have multiple inflow and outflow branches.
Some of their inflows or outflows may not be used for throwing/catching and some throwing/
catching blocks may get flow from or send flow to different branches on a single Merge or Diverge
block.
The number that indicates a Merge or Diverge blocks particular connector position is displayed in
the leftmost column of the table in the Merge/Diverge blocks Throw or Catch tab; the number of
the topmost inflow or outflow branch is zero (0). You select the connector position from a popup
menu to the right of the Position field in the corresponding block. The menu will list all the available connector positions for the named block. In the screenshot in the preceding section, the top
outflow connector position (0) for the Diverge block labeled Diverge B is entered in the Position
field of a Catch Flow blocks dialog.

An asterisk to the right of a connector position number in the popup menu indicates that the connector is already being used by some other throw/catch block.

Merging, Diverging, and Routing Flow


Throwing flow and catching flow remotely

385

Filter options to facilitate throw/catch connections


In large models, it is possible to have a great number
of sending and receiving blocks from which a throw/
catch connection can be made. To simplify the popup
list of blocks eligible for connection, three types of filters can be applied:
Group filter
Block type filter
Only unconnected blocks filter
These filters can be used in combination with each
other.

Filtering options

Block type filter


By default, the block types a throwing block can connect to include both Catch Flow and Merge
blocks and the block types a catching block can connect to include by Throw Flow and Diverge
blocks.
For throwing blocks, the list of blocks to select from can be
narrowed to only Catch Flow blocks or only Merge blocks.
For catching blocks, the list of blocks to select from can be
limited to only Throw Flow blocks or only Diverge blocks.
Only unconnected blocks filter
This filter narrows the selection of possible blocks to only
those blocks without an established throw/catch connection.

Block type filters for a Diverge block

Examples of throw and catch connections


The two example models that follow show how to use catching and throwing in a model. The first
model uses Throw Flow and Catch Flow blocks; the second model uses a Diverge block.

Discrete Rate

Group filter
Each block with throw or
catch capabilities can be
added to a throw/catch
group. Groups can be created or selected through
Defining a Group
the group popup menu
found in the sending and
receiving blocks. When this popup is blank, the block does not belong to a group. When a block
has been added to a group, its throw/catch options are limited to the blocks currently in that
group.

386

Merging, Diverging, and Routing Flow


Throwing flow and catching flow remotely

Catch Flow and Throw Flow model


The Catch Flow and Throw Flow
model shows two lines, one above the
other. They produce identical results
even though the flow connections have
been created differently:
The top line uses normal flow connection lines to connect Valve A to
Valve AA.
The bottom line uses a throw/catch
connection to connect Valve B to
Valve BB. In this line, the flow is
sent remotely by a Throw Flow
block and received by a Catch Flow
block.

Catch Flow and Throw Flow model

Discrete Rate

The particulars of the throw/catch connection can be


viewed from the dialogs of either the Throw Flow or
Catch Flow blocks. In the Throw Flow dialog you can
select the Catch Flow block and see the throw/catch
connection; in the Catch Flow dialog you can select the
Throw Flow block and see the throw/catch connection.

Portion of Throw Flow dialog

Catch Flow and Diverge model


Similar to the previous model, the
top and bottom lines for the
Catch Flow and Diverge model
produce identical results even
though the flow connections have
been created differently:
The top line of the model a uses
regular connections to connect
the two outflow branches of a
Diverge block to Valve AA and
Valve AAA.
The bottom line uses throw/
catch connections to connect
the outflow branches of the
Diverge block to Catch Flow
BB and Catch Flow BBB.
In the bottom line, both Catch
Catch Flow and Diverge model
Flow blocks indicate in their dialogs that the block labeled Diverge
B is remotely sending the flow. Since the flow is being sent by a Diverge block which can have
multiple outflow branches, and since each Catch Flow block must receive its flow from a separate
source, the Catch Flow blocks must also specify which of the Diverge blocks connector positions
they will receive flow from.

Merging, Diverging, and Routing Flow


Throwing flow and catching flow remotely

In the screenshot at right, the Catch tab of Catch Flow


BB indicates that it is receiving flow from the Diverge
block labeled Diverge B. It is getting that flow from the
Diverge blocks top outflow branch (outflow connector
position 0).

387

Portion of Catch Flow BB dialog

If the throw/catch connection has been properly defined

for a particular branch of a Merge or Diverge block, the Open button for that branch will appear
in the last column of the table in the blocks Throw or Catch tab.

Discrete Rate

Discrete Rate

388

Merging, Diverging, and Routing Flow


Throwing flow and catching flow remotely

Discrete Rate Modeling

Delaying Flow
For a certain period of time, either
maintaining flow at a certain speed or blocking it.

390

Delaying Flow
Blocks of interest

The Rates, Constraints, and Movement chapter discussed how to specify critical constraints
(such as a Valves maximum rate) and the factors that determine the actual speed of flow moving
through a model.
Since the concepts of flow rules and critical constraints are central to the discussion of delaying
flow, it is assumed that you have already read the Rates, Constraints, and Movement chapter.
This chapter describes how to use advanced methods to delay flow for a specified period of time
or until a specified condition has been met, either blocking the movement of flow or maintaining
it at a certain speed. It illustrates several methods for delaying flow, including how to:
Control how and when a Valve observes or ignores its maximum rate setting:
Setting a goal for a quantity of flow
Setting a goal for a duration
Using hysteresis to control when the blocks maximum rate will be observed
Use a Shift block (Item library) with a Convey Flow, Interchange, Tank, or Valve to delay flow
movement for a specified period of time

Discrete Rate

Transport flow over a defined distance at a specified speed with a Convey Flow block
Most of the models illustrated in this chapter are located in the folder \Examples\Discrete
Rate\Delaying Flow. The tutorial models mentioned are located at \Examples\Tutorials\Discrete
Rate.

Blocks of interest
The following blocks from the Rate library will be the main focus of this chapter.
Convey Flow
Delays the movement of flow from one point to another. Can accumulate flow to a
maximum density, accumulate flow to fill empty sections, or act as a non-accumulating
conveyor.
Valve
Controls and monitors the flow, limiting the rate of flow passing through. This block
can also be used to set a goal for the duration of flow movement or the amount of flow.

Controlling a Valves maximum rate


The section Defining a critical constraint on page 362 showed how to set a Valves maximum
rate. Options on the Valves Flow Control tab provide advanced control over how and when the
Valve applies its maximum rate. These settings determine when the Valves maximum rate is
observed or ignored, and for how long.
The advanced control options include:
Setting a goal for a certain quantity of flow to pass through the Valve.
Setting a goal for how long flow can move through the Valve or for how long it should be
stopped from moving.
Determining what happens when the goal ends.
Using hysteresis to delay the Valves response to system requirements.

Delaying Flow
Controlling a Valves maximum rate

391

Using the Flow Control tab


By default, the settings in a Valves Flow Control tab are disabled. Use the
tabs popup menu, shown at right, to choose either the Goal or Hysteresis
option.
If the Goal option is selected, an additional popup menu appears to the
right. Use this second menu to choose:

Flow Control options

Goal as a quantity
Goal as a duration

Observing the maximum rate for a goal


Whether you select a quantity or a duration goal, a Valves maximum rate is observed while a goal
is On. While the goal is off, you have the option to choose whether the maximum rate is observed
or not and whether the flow is stopped. Thus your purpose in using a goal could be to block flow
for a period of time and allow it to move through when the goal is off, allow flow for a period of
time and block it at other times, accept a certain quantity of flow but stop flow when the goal is
off, and so forth. In fact, you can choose to observe the maximum rate when the goal is off. This
can be useful for a quantity goal, when you just want the Valve to report when a goal is finished.
If its maximum rate is 0 (zero), the Valve will block flow while its goal is On.

If a Valves maximum rate is zero and a quantity goal is On, no flow will go through the block and
the goal will never end.
Options when goal is Off
Dialog options allow you to choose what will happen when the goal switches to Off:
Stop the flow
Ignore maximum rate (do not constrain flow)
Observe maximum rate

Setting a Valves quantity goal


Using popup menus in a Valves Control Flow tab, you can specify that the block has a goal to pass
a certain quantity of flow from its inflow to its outflow. Additional options allow you to specify
what the Valve should do once that quantity of flow has passed.
The quantity goal modulates a Valve's critical constraint (its maximum rate) by cycling between
On and Off states.
While a quantity goal is On, the value in the Valve tabs Maximum rate field, or the value at the
blocks R (maximum rate) input connector, is observed. The goal remains On until either the
amount of flow that has passed through the block reaches the target quantity, or the goal is interrupted. At that point the goal switches to the Off state.

What happens when the goal switches to the Off state depends on the Off option selected in the
blocks dialog: stop the flow, do not constrain flow, or observe maximum rate.
To interrupt a goal, send a value to the Valves stop input connector.

Discrete Rate

If its maximum rate is >0, blank, or infinite, the Valve will allow flow to pass through at that rate
while its goal is On. (If the maximum rate is blank, the Valve uses an infinite rate.)

392

Delaying Flow
Controlling a Valves maximum rate

Quantity Goal model


This model uses a Pulse block (Value library) to periodically start a new quantity goal. At the start
of the simulation run and every 60 minutes afterwards, the Pulse block sends a True value (a number 0.5) to the Production Gate valves start connector, starting a new goal.
The Valves maximum rate is 20 gallons/minute and the
simulation runs for 480 minutes. The control for the
movement of flow through the block is provided by its
Flow Control tab. The desired quantity of flow, 500 gallons, is entered in the dialog. While the goal is On, flow
passes through the Valve at a maximum rate of 20 gallons/
Quantity Goal model
minute. After 500 gallons, the goal goes Off, the flow is
stopped, and the effective rate goes to 0. As the simulation
runs, a plotter displays the Valves effective rate, the quantity of the goal and the times when it has
been reached, and the number of each new goal.
Settings in the Flow Control tab cause the Valve to Start a
new goal when start connector value = 1. The goal-

Discrete Rate

starting options (seen at right) can also be set to start a new


goal when the block receives a message at its G (goal) input
connector or when the previous goal finishes.

Options for starting a new goal

You could have avoided building the Quantity Goal model


by instead mentally calculating the effect of the goal on the flow. The rate interactions and results
determined by the next model would not be so easy to compute.
Changeover Quantity Goal model
The Changeover Quantity Goal model involves a more complex system than the Quantity Goal
model from above. This model, based on the stage of the Yogurt Production model that is discussed in Add maintenance on page 324, shows how a quantity goal in a Valve can be used to
control a sequence of production changeovers. The top part of the model is composed of Rate

Delaying Flow
Controlling a Valves maximum rate

393

library blocks and the bottom line is Item library blocks. A Decision block (Value library) transmits values from a Valve (Rate library) to a Gate (Item library).

Changeover Quantity Goal model

In the bottom portion of the model, when the item leaves the Get block it moves into the Queue,
where it is blocked from leaving by a Gate block. The Gate will remain closed until the Production
Gate valve reaches its new goal of 5000 gallons. At that time the goal switches from On to Off, the
flow stops (because that is the option set on the Control Flow tab), and the value at the GS (goal
status) output is set to 3 (indicating that the goal has ended).

As a result, the Gate opens and the item moves into the Changeover Activity block where it is
delayed for the amount of time required to perform a changeover. After the changeover has been
completed, the item cycles back and initiates the next production cycle.
By default, a Valves GS (goal status) output connector reports the following values:
0 when there is no goal
1 when a goal is starting
2 when a goal is in progress
3 when a goal has ended
4 when a goal is interrupted

Discrete Rate

Since its initial goal has been set to none, the goal status is Off and flow through the Production
Gate valve is stopped at the start of the simulation. However, when an item passes through the Get
block (Item library) labeled Start Goal, a message is sent to the Production Gate valves G (goal)
input connector. Once that happens, the valves goal switches from Off to On and the goal quantity is set to the value of the items Quantity attribute (5000 gallons).

394

Delaying Flow
Controlling a Valves maximum rate

Discrete Rate

The following screenshot shows how the Production Gates quantity goal has been configured on
its Flow Control tab:

Flow Control tab, goal is quantity

The value for the Goal quantity is received through the G input connector. (In this model, the
goal is 5000 gallons because each item has a Quantity attribute value of 5000.)
The popup menu option Start run with goal Off has been selected. (This causes the goal to be
in the Off state at the start of the simulation.)
The Valve has been instructed to Stop flow when the goal is Off.
The popup menu option Start run with goal Off has been selected. (This causes the goal to be
in the Off state at the start of the simulation.)
If a new goal is received before the previous one is finished, the new goal will be ignored. (In this
model, a new goal cannot arrive before the previous one is finished.)
An interesting aspect of this model is that the Production Gate valve has been set to have an infinite maximum constraining rate. This means that it will, in and of itself, not limit the rate of the
flow moving through it. However, the blocks effective (actual) rate will be determined by the two
upstream Valves. One of these Valves is connected to a Lookup Table block (Value library) that
changes its maximum rate depending on the time of day. The other upstream Valve is connected to
a Shutdown block (Item library) that causes the movement of flow to be stopped periodically for
specified durations. This sequence causes some interesting effects in the model, and the Production Gates effective rate ranges between 80 and 0 gallons/minute.

Delaying Flow
Controlling a Valves maximum rate

395

This examples uses the G (goal) connector to control the when and how much aspects of the
goal. Alternately, the Control Flow tab allows you to choose to start a new goal when the start
connector receives a message or when the previous goal finishes.

Setting a Valves duration goal


Like the quantity goal, the duration goal is used to modulate a Valve's maximum rate. However,
the duration goal cycles between the On and Off states as a function of time rather than the volume criteria used for the quantity goal.
A duration goal remains in the On state for some amount of simulation time before switching to
the Off state:
While a duration goal is On, the value in the Valve tabs Maximum rate field, or the value at the
blocks R (maximum rate) input connector, is observed. The goal remains On until either the
specified amount of time has passed, or the goal is interrupted. At that point the goal switches to
the Off state.

What happens when the goal switches to the Off state depends on the Off option selected in the
blocks dialog: stop the flow, do not constrain flow, or observe maximum rate.
To interrupt a goal, send a value to the Valves stop input connector.

In this model, the Valves Flow Control tab is set to


observe its maximum rate of 20 gallons/minute for 45
minutes. When the goal is On, the block passes through
whatever amount of flow it can, at the maximum rate of
Duration Goal model
20 gallons/minute. When the 45 minutes passes, the goal
is set to Off and all flow through the block stops. The Pulse block (Value library) restarts the goal
every 60 minutes. As the model runs, the blocks maximum rate cycles from 20 gallons/minute to
0, depending on whether the goal is On or Off. As a result, the blocks effective rate stays at 0 for
the period of time (15 minutes) from when the previous goal ends until when a new goal starts.
Changeover With Only Goals model
The Changeover With Only Goals model is equivalent to the Changeover Quantity Goal model
(discussed earlier) in terms of behavior. However, while the Production Gate valve still has a quan-

Discrete Rate

Duration Goal model


The Duration Goal model is similar to the Quantity Goal
model from above, except the goal allows the flow to move
through the Valve for a certain period of time.

396

Delaying Flow
Controlling a Valves maximum rate

tity goal in this model, the changeover is controlled using a second Valve with a duration goal,
rather than by an item.

Changeover With Only Goals model

Discrete Rate

Since its Flow Control tab specifies that it has an initial quantity goal of 5000 gallons, the Production Gate valve starts the simulation by observing its maximum rate setting infinity. However, as
was true for the Changeover Quantity Goal model, the blocks actual effective rate will be
impacted by the Liquid Supply and Fruit Supply valves upstream.

The Production Gate's goal state is communicated to the Changeover Gate through the connection between the first blocks GS (goal status) output connector and the second blocks start input
connector. Because of this connection and because of how the duration goal has been specified in
the Changeover Gate, the duration goal starts in the Off state and will switch to On only after the
Production Gate's quantity goal is completed. After 20 minutes, the Duration Goal is finished and
the Changeover Gate sends a message to the Production Gate to start a new quantity goal.
Unlike the Duration Goal model that allows flow to pass through for a specified amount of time,
the duration goal in this model causes flow to be blocked for a certain period. The Changeover
Gates maximum rate is set to 0 and the goals duration is set to 20 minutes. While the goal is On,
the blocks maximum rate (0) is observed and no flow passes through, allowing for the changeover.

Delaying Flow
Controlling a Valves maximum rate

397

The following screenshot shows how the Changeover Gates duration goal has been configured on
its Flow Control tab:

The goal duration is a constant 20 minutes. The duration could be made variable by instead
choosing Goal durations is: value at G connector.
The 20 minute blocking of flow allows the changeover to occur. The maximum rate on the
Changeover Gates Valve tab is 0. This would cause the flow to be blocked in the absence of any
goal being set for this block. Consequently, if the block has a duration goal and it is On, that
maximum rate of 0 will be observed and flow will be blocked from entering. When the goal
turns Off after 20 minutes, the Changeover Gate doesn't apply any constraining rate on the flow
because it is set to Off: ignore maximum rate.
A new duration goal is started only when the start input connector receives a value of 3. Consequently, a new duration goal begins only when the upstream Production Gate's quantity goal
has finished.
When the changeover has completed and the duration goal switches from On to Off, a signal is
sent from the Changeover Gate to the Production Gate. This results in a new quantity goal
starting in the Production Gate.

Setting hysteresis in a Valve


Hysteresis is a property of systems that causes them to not react instantly to a change. The purpose
of adding hysteresis in a model is to introduce a delay in the time it takes some part of the system
to switch from one state to another.
Hysteresis allows you to insert a lag or delay in a Valves response to system requirements. It is used
to avoid oscillations and to achieve better control over flow movement. This is accomplished by

Discrete Rate

Flow Control tab, goal is duration

398

Delaying Flow
Controlling a Valves maximum rate

using model conditions to explicitly control both when a Valves maximum rate is observed and
when it is ignored.
Unlike the quantity and duration goals discussed earlier, where the conditions for applying the
Valves maximum rate were entered in its dialog, hysteresis must always get its control information
from outside the block. The hysteresis option always relies on the Valves start input connector to
control when the Valves maximum rate will be observed and its stop input connector to control
when the maximum rate will be ignored. When the maximum rate is ignored, the Valves dialog
provides a popup menu for choosing if the flow stops or if the Valve does not constrain the flow.
Hysteresis model
In this model, the Filling valve opens
when the Storage tank is empty and
closes when the tank is full. Conversely,
the Emptying valve opens when the Storage tank is full and closes when the tank
is empty. As a result, the model repeatedly cycles through the following stages: Hysteresis model
Emptying valve closes and filling valve
opens
Storage tank starts accumulating flow

Discrete Rate

Storage tank reaches the full state


Emptying valve opens and filling valve closes
Storage tank starts emptying
Storage tank reaches the empty state
Based on settings in its Indicators tab, the Storage tank's I (indicator) connector outputs a value of
0 when empty and 2 when it is full. (Tank indicators are discussed on page 337.)
The Filling valves Hysteresis settings
are shown at the right. When this
valves start connector gets a 0 from
the Storage tanks I output connector,
the valve observes its maximum rate.
When the Filling valves stop input
connector gets a 2, the block shuts
down.

Hysteresis settings: Filling valve

The Emptying valves hysteresis settings are the opposite of the Filling
valve, as shown at the right. When
this valves start connector gets a 2
from the Storage tanks I output conHysteresis setting for Emptying valve
nector, the valve observes its maximum rate. When its stop input
connector gets a 0, the valve shuts down.

Delaying Flow
Delaying flow with the Shift block

399

Delaying flow with the Shift block


The Shift block (Item library) is discussed fully in The Shift block on page 224. It is used to
schedule capacity in certain blocks found in the Item and Rate libraries. Shifts come it two types:
On/Off and Numeric.
Rate library blocks do not support a Number type of shift. The following Rate library blocks can
be controlled using On/Off Shifts:
Convey Flow. When the shift is Off, the effective inflow rate is set to 0, blocking any new flow
from entering. Depending on which option has been chosen in the Convey Flows dialog, the
blocks speed will either also be set to 0 or it will remain unchanged from what is set in the dialog. If the Empty when shift is off checkbox is checked, any flow already on the conveyor at the
Off shift time will continue progress towards exiting the block.
Tank. The effective inflow and outflow rates are set to 0 when the shift is Off, effectively shutting the block down.
Interchange. Same logic as the Tank.
Valve. Same logic as the Tank.

Adding a Shift to a model

Places a Shift block on the model worksheet below the originating block
Enters the Shift name in the originating block's Use Shift field
Opens the Shifts dialog so settings can be entered
To use the Shift, enter the required information in the blocks dialog. (The Shift controls the originating block remotely; it does not need to be connected in the model.) Each Shift block starts with
a default name for its shift. If you subsequently change the name of the shift, the new name will be
reflected in the block that uses that shift.
For more information about using the Shift block, see The Shift block on page 224.

Convey Flow block


Setting an initial contents and the capacity of a Convey Flow block is discussed in the chapter
Storage and Units. The current chapter focuses on the behavior of the Convey Flow block and
how to set parameters that affect how flow is delayed through the block.
Flow entering the Convey Flow block is available to leave only after a specified delay that has been
defined as a function of length and speed. The flow that enters is required to move some distance
at a certain rate of speed before arriving at the block's exit point. The Convey Flow, then, is a residence block with flow distributed across its length at varying densities. (Density is the amount of
flow that has accumulated at any one point on the conveyor.)
This block is useful for representing a conveyor, industrial oven, refrigeration system, or other similar piece of equipment with a length component where the position of flow must be taken into
consideration.

Discrete Rate

The easiest way to add a Shift block to a discrete rate model is to click the Add Shift button found
on the Options tab of a Convey Flow, Tank, Interchange, or Valve block. This automatically does
the following:

400

Delaying Flow
Convey Flow block

A Convey Flow block is computationally intensive, so it should be used only if the system you are
modeling requires very precise tracking of flow movement and position. For instances when the
block should not be used, see page 403.

Dialog settings
Movement of flow across the Convey Flow block is influenced by the dialog settings and parameters.
Determining speed and distance
The Convey Flow block
offers two options: Speed
determines travel time or

Delay determines travel


time. Depending on
which of these is selected,
the following entries can
be made:

Discrete Rate

Speed. Specifies the


maximum potential
speed at which the conDialog parameters for Convey Flow
veyor can transport
flow. However, when
the potential supply of flow from the conveyor exceeds the downstream demand, the observed
speed of the flow can become something less than the speed parameter.
Delay. Represents the amount of time flow will spend in the block if there is no downstream
blocking. If the blocks dialog is set to Speed determines travel time, the delay is calculated by
dividing Length by Speed. If the dialog is set to Delay determines travel time, the flow will take
the entered Delay time to travel the stated Length.
Length. Represents the distance flow must travel before reaching the block's exit point. The
length of a Convey Flow block has to be greater than 0.
Maximum density. Density is the amount of flow that has accumulated at any one point on the
conveyor. The observed density of flow on a conveyor is a function of the upstream supply rate,
the conveyor's speed, the downstream demand rate, and what settings have been chosen in the
blocks dialog. The Maximum density setting limits how high the pile of flow can be at any one
point along the conveyor. For example, if the upstream supply rate is greater than or equal to the
conveyor's maximum inflow rate (speed*maximum density), then the amount of flow entering
the conveyor will be equal to the maximum density. In this case, it is the conveyor's capacity to
receive flow that limits its effective inflow rate.

The parameters for speed or delay can vary dynamically during the simulation; the length and
maximum density parameters remain fixed.
Convey Flow behavior
The Convey Flow block is divided into segments, where the boundaries of each segment are
defined by a change in the density of flow. Depending on the options chosen in the dialog, flow

Delaying Flow
Convey Flow block

401

could accumulate or pile up along the length of the block any time the amount of flow ready to
exit the block exceeds downstream demand.
The Convey Flow block has three options controlling how or if flow is allowed to accumulate:
Accumulate-maximum density. Allows flow to accumulate up to its maximum density setting. If
the conveyor's ability to deliver flow exceeds downstream demand, any flow delayed from exiting will begin piling up at the outflow end of the conveyor up to the maximum density level.
Accumulate- fill empty segments. Allows flow to fill in any empty segments along the conveyor
when the blocks ability to deliver flow exceeds downstream demand. (An empty segment is an
area along the blocks length that has a density of 0.) This differs from the first option in that
one section of flow is not allowed to pile onto another section of flow.
Non-accumulating. This option does not allow flow to accumulate. Therefore, the blocks speed
slows when its ability to deliver flow exceeds downstream demand.

The Compare Convey Flow model compares the behavior of three Convey Flow blocks, each set to
one of these behaviors, under different emptying rates.

Constraining rates

The critical constraint for the Convey Flow blocks inflow is calculated by multiplying the
blocks effective speed by its maximum density entry.

The effective speed can be less than or equal to the speed set in the dialog. If the block is non-accumulating, or if it is accumulating but cannot accumulate more, and the blocks ability to deliver
flow exceeds downstream demand, the effective speed will be lower than the entered speed.
The critical constraint for the blocks outflow is the result of the multiplication of the blocks
speed setting by the density of flow present at the outflow end of the block.

Convey Flow information


The Convey Flow block provides different types of information concerning the distribution of
flow along the length of its conveyor. Some of the information is provided by default while other
mechanisms for reporting data, like sensors and indicators, must be customized through the
block's dialog.
Distribution of flow
If you select Run > Show 2D Animation before you run the simulation, the distribution of flow in the Convey Flow block will be displayed across the top of its icon, as shown on the right.
On the Convey Flow blocks Animation tab, selecting Show block's
flow distribution in table during simulation causes a table to
Flow and accumulation point

Discrete Rate

Critical constraints define an unconditional maximum upper bound to the rate of flow. As discussed in the chapter Rates, Constraints, and Movement, the Convey Flow block calculates critical constraints for its inflow and outflow connectors separately. The critical constraints are derived
from model conditions and settings in the dialog.

402

Delaying Flow
Convey Flow block

appear. As the simulation runs, the table displays information about the current distribution of the
flow in each segment of its length:

Table showing example distribution of flow

The length of a Convey Flow block is divided into segments, where the boundaries of each segment are defined by a change in the density of flow. The table above indicates that this Convey
Flow block currently has 8 segments along its length.

Accumulation point
If the block is set to be accumulating, any accumulation will start at its outflow and go toward its
inflow. The point beyond which no more flow can accumulate is known as the accumulation
point. This point will probably move between the inflow and the outflow as the simulation runs.

Discrete Rate

The Results tab reports information about the accumulated flow: the distance from the outflow
where the accumulation point is located, the indicator, and the accumulated quantity of flow.
If the command Run > Show 2D Animation is checked while the model runs, and there is accumulation, a vertical red bar will move on the blocks icon during the simulation; this indicates the
location of the accumulation point. The Flow and accumulation point screenshot above shows
the red line of the accumulation point.

The accumulation point is located somewhere along the length of a Convey Flow block that has
been set to accumulate flow.

Sensors
The Convey Flow block has a Sensors tab for specifying the locations and trigger points of sensors
along the length of the conveyor. Each sensor reads and communicates the density of flow over
time at a particular point on the conveyor. This information is displayed in a table in the blocks
dialog and reported by the blocks S (sensor) output connectors one S output for each sensor.
You must specify in the table not
only the number of sensors desired
but also the location of each one.
(Use the +/- button in the tables
lower right corner to specify the
number of sensors.) The example
table shown here indicates that four Sensor tab table
sensors have been placed along a ten
foot section of the conveyor.

The S connectors should be used judiciously. Extra events are used to update them at the proper
time and the calculation is computationally intensive.

Delaying Flow
Convey Flow block

403

Indicators
As discussed in Accumulation point on page 402, the accumulation point indicates the point
beyond which no more flow can accumulate. You might want an indication when the accumulation point is within a particular segment of the Convey Flow block.
The Indicators tab on a Convey Flow block is used to define segments to indicate where the accumulation point is along its length. Each segment is assigned a name, a defined range, and an ID
number. The ID number is used to update the blocks I (indicator) output connector as the accumulation point moves from one segment to the next.
See Indicators on page 337 for complete information about creating and using indicators.

The I connectors should be used judiciously. Extra events are used to update them at the proper
time and the calculation is computationally intensive.

When to avoid using the Convey Flow block


A Convey Flow block should be used only if the system you are modeling requires very precise
tracking of flow movement and position. While the block is very precise, it is also very time consuming, so use it with caution. Following are some usage guidelines:
The travel time has to be long enough to justify using the Convey Flow block. If the impact on
the result of the simulation is small, it is a good strategy to ignore any travel time delays. For
instance, the amount of time required for product to traverse a pipe separating two tanks is often
insignificant and should usually be ignored.

One alternative would be to use a combination of Tank and Valve blocks to mimic a Convey Flow
block. This is far less computationally intensive than the Convey Flow block by itself. While some
configurations may not be as precise, you can use a combination of one Tank followed by one
Valve block in such a way that the behavior is identical or almost identical to the results when
using a Convey Flow block.
Another alternative is shown in the Tank and Valve to Convey model. In this example, the bottom
flow stream behaves almost identically to the upper stream without using a Convey Flow block.
Because Valves A1 and B1 vary their constraining rate, the Convey Flow block (Convey A) will get
and create a lot of messages, slowing down the simulation. But the Convey B1 tank wont create
the extra events. This will be slightly less precise but much more efficient.

Never use a Convey Flow block if the systems behavior can be modeled using a Tank and Valve.

Discrete Rate

The distribution of flow along the Convey Flow block should impact the rest of the model in
some significant way. If the effective inflow rate varies significantly during the simulation and/or
if the speed changes, the product may be unevenly distributed across the length of the conveyor.
This discontinuity impacts the rate at which flow is able to exit the block over time. The greater
this variation in availability, the greater the potential impact on the rest of the model and the
greater the block's use can be justified.

Discrete Rate

404

Delaying Flow
Convey Flow block

Discrete Rate Modeling

Mixing Flow and Items


Mingling discrete rate flows with discrete event items.

406

Mixing Flow and Items


Controlling flow with items and items with flow

It is common for systems to exhibit a mixture of behaviors, where items from the discrete event
arena intermingle with discrete rate processes. In these mixed mode cases, a proper understanding of both the Rate and Item libraries and how they can interact with each other is required.
There are two general techniques for integrating discrete event blocks from the Item library with
discrete rate blocks from the Rate library:
1) Sending signals and sharing information via value connections. Value connections can be very
useful for triggering some type of action as the system moves from one state to another. For
example:
Value connections can trigger the generation of an item when the level of flow in a Tank
reaches a certain level.
The value of an attribute on an item passing through some part of a discrete rate model
could trigger a change in the constraining rate in a Valve block.

Discrete Rate

2) Mixing items with flow using the Interchange block, as you saw in the Discrete Rate tutorial
on page 328. The Interchange block (Rate library) provides the ability for items and flow to
interface with each other. For example, an empty tanker truck (an item) might arrive at a refinery and fill with gas (flow) at a continuous rate using an Interchange block. Once full, the
truck might be routed through a series of Item library blocks until it reached its unloading destination. At that point the item would again interface with an Interchange block to discharge
its load.
This chapter focuses on the techniques used when the need for mixed mode models arises. It will
show how to:
Control flow using blocks from the Item library
Control items with blocks from the Rate library

Mix flow with items using the Interchange block


The models for this chapter are located in the folder \Examples\Discrete Rate\Flow and Items.

Controlling flow with items and items with flow


Rate library blocks can control the movement of items and Item library blocks can control the
movement of flow. In either case, value connectors communicate state changes to the controlling
blocks.

Items controlling flow


The Item Controls Flow model shows one of many ways blocks from the Item library can be used
to control the movement of flow in a model. It uses one item to open a valve, allowing a tank to
fill, then uses the same item to trigger the emptying of that tank.

Mixing Flow and Items


Controlling flow with items and items with flow

Item Controls Flow model


Unless the presence of an item in an
Activity block triggers them to open,
Valves 1 and 2 are both closed during
the simulation run. While an item is in
the Activity block (Item library) labeled
Filling Valve 1, it causes Valve 1 to open;
this allows the Reception tank to fill.
When the item moves to the Activity
block labeled Emptying Valve 2, it
causes Valve 1 to close and Valve 2 to
open. This allows the Reception tank to
empty into the Sink tank. The closing
and opening of the valves is accomplished by detecting which Activity
block has the item and for how long it is
held there.

407

Item Controls Flow model

Notice that the Reception tank can be full even while the item is still in the Filling Valve 1 activity.
Since the tank cant accept any more flow when it is full, and cant start emptying until the item
moves to the Emptying Valve 2 block, the flow stops before the Filling process has been completed.
The next model shows how the Reception tank can let the item know that it is full.

Flow controlling items


The example below illustrates one of ways blocks from the Rate library can be used to control the
movement of items in a model.

Discrete Rate

In this model, constant blocks (Value


library) provide a potential constraining
rate of 100 for the valves. Multiplying the constant value by an Activitys F (Full) output (which
will be 1 if the Activity has the item in it and 0 if it does not) gives the valves their actual constraining rate (100 or 0). This causes the valves to open and close depending on where the item is in the
model. Both Activity blocks are set to delay the item for a random amount of time, which represents how long the Reception tank can fill and empty.

408

Mixing Flow and Items


Controlling flow with items and items with flow

Flow Controls Item model


This model is extends the one above,
adding that the state of the Reception
tank alters the movement of the item
and interrupts the filling process.
As in the prior model, the Reception
tank fills and empties based on the
movement of an item and delays set in
the two Activity blocks.

Discrete Rate

In this model, whenever the Reception


tank is full, it sends an indicator signal
to the Decision block (Value library).
This block in turn notifies the Activity
block labeled Filling Valve 1, preempting the item whose presence opened
Valve 1 and allowed the tank to fill.
When the item is preempted, it moves
to the Activity block labeled Emptying
Flow Controls Item model
Valve 2. This causes Valve 1 to close,
Valve 2 to open, and the Reception tank
to empty into the Sink for the duration specified in the second Activity block.

Flow controlling items and items controlling flow


The following model combines both of the previous concepts flow controlling items and items
controlling flow into an even more complex system.

Step The Flow Process model


In this model the location of a cycling item triggers the opening and shutting of valves for the
flow, while tank states control the opening and shutting of the gates for the item. The control logic
is circular in nature: the item's location defines the current stage; the current stage controls the

Mixing Flow and Items


Controlling flow with items and items with flow

409

opening and shutting of valve blocks; valves impact the level of flow; and the level of flow controls
the item's location.

Flow controlling the item


The top section of the model is where flow controls the item. The I (Indicator) connectors on both
the Reception and Processing tanks (Rate library) control the three Gate blocks (Item library) used
in the item stream at the bottom part of the model. Gate 1 is open only while the Reception tank
is in the full state. Conversely, Gate 2 is open only while the Reception tank is in the empty state.
Finally, Gate 3 is open only while the Processing tank is empty.
Item controlling the flow
The bottom section of the model is where the item controls the flow. In this case, the three Valve
blocks (Rate library) in the top part of the model are controlled by the lengths of the three Queue
blocks (Item library) in the item stream in the bottom portion. The item stream has only one item
which cycles through the item-based blocks in a loop. Consequently, the queue lengths for each
Queue in this loop will alternate between 1 and 0. For instance, Valve 1 is open only when the
length in the Stage 1 queue equals 1. Similar logic applies to Valve 2 and Valve 3.
The activity in the model is divided into four stages: open Valve 1 and release flow into Reception;
open Valve 2 and release flow into Processing; process the flow; open Valve 3 and release flow into
Sink
Stage 1: Open Valve 1 and release flow to Reception
The I (Indicator) connector on the Reception tank is controlling Gate 1. At the start of the simulation, Gate 1 is closed because the Reception tank is not full (it's actually empty at this point),
and the cycling item is blocked from leaving the Stage 1 queue. Notice the highlighted area where
the Max & Min block (Value library) is used to translate the cycling item's location into a stage

Discrete Rate

Step The Flow Process model

410

Mixing Flow and Items


Using the Interchange block to mix items with flow

number. Since the cycling item remains in the Stage 1 queue, the model is now in a Stage 1 holding pattern. Consequently, Valve 1 is opened (so the Reception tank starts receiving flow) and
Valves 2 and 3 are closed.
Stage 2: Open Valve 2 and release flow to Processing
Once the Reception Tank reaches the full state, Gate 1 is opened and Gate 2 is closed. This allows
the item to move on to the Stage 2 queue. The result is that Valve 2 opens, Valves 1 and 3 close,
and flow starts moving from the Reception tank into Recycling and Processing. Gate 2 remains
closed while the Reception tank empties.
Stage 3: Process the flow
Once the Reception tank is completely empty, Gate 2 is opened, Gates 1 and 3 are closed, and the
item enters an Activity block labeled Stage 3. While the item remains in Stage 3, all three Valve
blocks remain closed. The Activity block, which has a delay of 2 minutes, is used to keep the flow
in the Processing tank for some period of time so it can be processed.

Discrete Rate

Stage 4: Open Valve 3 and release the flow


Once processing is completed, the item leaves Stage 3 and moves into the Stage 4 queue. Since
Gate 3 is currently closed (because the Processing tank is not empty), the model is now in a Stage 4
holding pattern and Valve 3 opens. Once the Processing tank is empty, Gate 3 opens and the item
cycles back to the State 1 queue where the whole processes starts all over again.
While this model is useful for demonstrating how mixed mode models can control item and flow
movement, the same behavior can be created without items using the Valve blocks Hysteresis
option. For more information, see Setting hysteresis in a Valve on page 397.

Using the Interchange block to mix items with flow


The Rate librarys Interchange block is unique in that it allows items and flow to interface directly
with each other. Flow can enter the Interchange block not only through its inflow connector but
also through the arrival of an item. Conversely, flow can exit the block through its outflow connector or through the exiting of an item.

The use of the Interchange block was introduced on page 328 of the Discrete Rate Tutorial, and
the blocks capacity to hold flow is discussed starting on page 348 of the Flow Sources, Storage,
and Units chapter. This chapter will describe how the Interchange block interfaces flow with items.
The Interchange block is where an item can be filled with flow or emptied of flow.
There are a number of occasions where it can be useful to provide items with the ability to store,
transport, and empty flow as they move from one section of a discrete rate model to another. For
example, the attribute capabilities used to distinguish one item from another can also be used to
distinguish one block of flow carried by one item from another block of flow carried by a different
item. This can be an especially useful modeling construct since flow units by themselves are indistinguishable from each other.

Behavioral rules
The Interchange block has two very different modes (Tank only exists while item is in it and
Tank is separate from item) that affect how the block behaves. (These modes were introduced on
page 348 and will be discussed more fully on page 412.) Even so, the Interchange block always follows a fundamental set of rules:
The item input and item output connectors on the Interchange block must both always be connected.

Mixing Flow and Items


Using the Interchange block to mix items with flow

411

At least one of the Interchange block's inflow/outflow connectors must be connected (both may
be connected as well).
The Interchange block's capacity for holding items is permanently fixed at one item.
The Interchange block loads and unloads the item and its flow instantaneously. (Flow present in
the item when it enters the block is instantaneously available to the block; flow leaving the block
with an item is instantaneously removed from the block.)

The flow connector configuration


The behavior of the Interchange
block is dramatically affected by
how the inflow and outflow connectors have been connected. As
mentioned above, only one of the
two flow connectors needs to be
connected. If only the inflow con- Arriving item is always filled (left) or is always emptied (right)
nector is connected, arriving items
can only be filled with flow, and if only the outflow connector is connected, arriving items can
only unload flow.

Item release conditions

Scheduled releases
There are 5 options for defining when the item should be
released:
When contents >= Target. This option requires the item
to be filled with a certain amount of flow prior to
release. The Target amount is entered in the dialog.
When contents <= Target. Requires the item's flow level
to empty to a certain point prior to release. The Target
amount is entered in the dialog.

Release options for Interchange block

As soon as possible. Releases the item whenever there is downstream item capacity for the item,
irrespective of the current flow level.
Only with preempt connector message. Releases the item when a true value is received at the
blocks PE (preempt) value input connector.
When level reaches indicator. Requires the flow contents to reach a certain level prior to release.
Indicators (segments that indicate the level of contents) must first be entered on the blocks Indicator tab for this option to be used.
Preemption
The scheduled release conditions can be
superseded at any time by using the

Preemption options for Interchange block

Discrete Rate

The release conditions determine when an item is scheduled to leave the Interchange block; they
are the same for both block modes. Releases can also be accomplished at any time using the Preempt connector.

412

Mixing Flow and Items


Using the Interchange block to mix items with flow

preempt connector. Whenever the preempt connector receives a value that corresponds to the preemption options selected in the Item/Flow dialog, seen above, it will trigger a preempt.

To immediately dispose of an item after it releases flow, connect an Exit block (Item library) to the
Interchange blocks item output connector. To instead have an item present all the time, connect a
Create block set to Create items infinitely to the blocks item input connector.

Interchange modes
The Interchange block has two modes:
Tank only exists while item is in it
Tank is separate from item
These are illustrated below.
Tank only exists while item is in it
In this mode, the Interchange's capacity to handle flow is completely dependent upon the presence
of an item. The arriving item can be thought of as a tank with a capacity to hold flow. This item/
tank can move through the item-based blocks just like any other item would. However, once it
enters an Interchange block, the item/tank can release flow directly into the blocks outflow connection and/or accept flow directly from its inflow connection. In the absence of the item/tank,
the Interchange block has no flow capacity.

Discrete Rate

Two very important behaviors result from an item exiting the block when it is set to this mode:
Once the conditions for item release have been met, the exiting item will always take with it any
flow currently residing in the block.
Until a successor item arrives, the Interchanges inflow and outflow will be blocked.
In this mode, the absence of an item eliminates not only the Interchange's capacity to hold flow
but also its capacity to pass flow from an upstream source to a downstream sink. (This differs from
the behavior of a Tank block, which passes flow through even if its capacity has been set to zero.)
Shipping model
A typical example
of how the Interchange block
could be used in
this mode is illustrated by the
Shipping model.
In this example,
an empty ship (an
item) arriving at a
Shipping model
loading port (an
Interchange
block) where it is filled with cargo according to a filling rate. Once full, the ship sails for a period
of time (represented by an Activity block) until reaching the new destination port (another Interchange block). At this point the ships cargo is unloaded according to the unloading rate.
To simulate the loading process, flow is piped from the Interchange block's inflow connector into
the item/ship. Once filled, the item/ship exits the block, taking the flow with it. Conversely, once

Mixing Flow and Items


Using the Interchange block to mix items with flow

413

the item/ship arrives at the second Interchange block, flow is piped from it into the second Interchange block's outflow connector.
The item/ship travels with a Quantity
attribute that has been set to a value of
1000. This attribute sets the ships capacity.
Release options for unloading
For the filling process, the Interchange
releases the ship when it is full, that is, after
1,000 units of flow have been piped in. The second Interchange block releases the ship when it is
empty, that is, after 1,000 units of flow have been piped out. At the end of the simulation run, the
ship has not yet been released from the unloading dock because it still contains 100 units of flow.
Yogurt Production model
The Yogurt Production model, located in the folder
\Examples\Turorial\Discrete Rate and discussed in the
Discrete Rate Tutorial that starts on page 318, is an example of using an Interchange block set to Tank only exists
while item is in it.

Yogurt Production palletization

Yogurt Changeover model


This model is based on the Yogurt Production
model from above. The Yogurt Changeover
model, however, provides a period of time (the
changeover) for an operator to remove each full
pallet and replace it with an empty pallet, and
there is an infinite supply of empty pallets.

In this model, each Create block (Item library)


can generate an infinite number of items so that
empty pallets are available as required. Activity
blocks (Item library) represent the two minute
changeover time. Once a pallet has been released Yogurt Changeover palletization
from an Activity, it notifies a Gate block (Item
library) to open, pulling in a pallet from the Create block. This process causes the Interchange to
not have a new pallet/item to fill until the changeover from the previous pallet is finished.
The Create blocks ability to Create items infinitely is specifically intended for this type of situation. It provides an infinite supply of items that are available on demand, creating items whenever there is a capacity for flow.
Tank is separate from item
In this mode, the Interchange block's ability to handle flow is identical to the Tank block irrespective of the presence of an item. That is, the Interchange can be set to have an initial amount of
flow, its capacity can be set through the dialog or through a connector, and maximum inflow/outflow rates can be defined.

Discrete Rate

In this model, empty item/pallets are generated randomly


by a Create block (Item library). The arrival of an item/
pallet causes the Interchange block to have flow capacity;
the maximum capacity of 24 cartons is entered in the
blocks dialog. Once the maximum capacity is reached,
the full pallet leaves the block. The Interchange block
then has no capacity until another pallet arrives.

414

Mixing Flow and Items


Using the Interchange block to mix items with flow

The only difference lies in the Interchange block's ability to pipe flow into and out of items. When
the Interchange block is set to Tank is separate from item, the block can receive and hold flow
that has been provided by its inflow connector or the arrival of an item and it can release flow
through its outflow connector or through the exiting of an item.

Discrete Rate

When the Interchange block is in this mode, an item carrying flow releases its entire load instantaneously upon arrival. However, depending on other settings in the block, the item can also take
flow with it upon exiting. If this is the case, the Interchange block's flow level is decremented
instantaneously when the item leaves. Furthermore, an item whose load of flow exceeds the blocks
capacity will be blocked from entering the Interchange.
Bucket Elevator 1 model
The Bucket Elevator 1 model
simulates a series of buckets
(items) pulling flow out of a
source (an Interchange block)
located at a low elevation, transporting the water in a series of
steps to an infinite sink located
at a higher elevation (another
Interchange block), and then
returning empty through a
series of steps to the source.
Both Interchange blocks are set
to Tank is separate from item.
With this setting, both the
source and the sink have the
capacity to hold water even in
the absence of an item.
This model is similar to a continuous loop of buckets drawing
water from a well, emptying
into a catch basin, and returning to the well. There are ten
bucket/items and each bucket
Bucket Elevator 1 model
has a capacity of 100 gallons;
this is defined in the Resource
Item block by the attribute Capacity. There are also ten slots in this pseudo-conveyor each represented by an Activity block that can hold one item/bucket. The delay at each slot is 1/10 the sum
of all the delays, as determined by the items Speed attribute.
Even if the source has less than 100 gallons, the buckets keep moving and grab as much water as
possible. As each bucket reaches the top, its contents are released instantaneously into the sink, and
the journey back down to the sink immediately starts. Running the simulation with animation on
shows the buckets as they cycle from the well, up to the catch basin, and then back down again.

Mixing Flow and Items


Using the Interchange block to mix items with flow

415

Bucket Elevator 2 model


The Bucket Elevator 2
model is similar to the
Bucket Elevator 1 model,
except there is some added
complexity. In this model,
the flow blocks at the bottom and top of the model
represent streams of water.
In the bottom stream,
some of the water is
removed by the buckets,
but the rest continues on
at a varying rate of flow.
Likewise, after the buckets have unloaded their
contents into the sink,
water flows from the top
stream at a varying rate.

Bucket Elevator 2 model

Indicators are a method of reporting what


category or range the current level of flow
falls into; the table from the Source
blocks Indicators tab is shown to the
right. An Equation block (Value library)
looks at the Interchange blocks I (indica- Indicators for the source
tor) output to determine the range the
water level in the tank falls into. The block then adjusts the Valves maximum rate depending on
that information and an equation.
The upper and lower streams in this model have different equations; the upper stream bases the
Valves maximum rate on a constant while the lower stream bases it on a random distribution. In
the lower stream for instance, if the Source tanks level is equal to or less than the Low range, the
maximum rate is a Triangular distribution that is most likely 30 units. If the level falls within or
above the High range, the most likely maximum rate for the Valve is 150; otherwise, the most
likely rate is 100.

For more information about indicators, see Setting indicators on page 338.
Converting between item and flow attributes
The Interchange blocks Flow Attributes tab provides a matrix for mapping between item and flow
attribute names. The mapping table transfers the values of an items attributes to the specified flow
attributes and vice versa. The blocks dialog provides options for how the mapping should affect

Discrete Rate

Both Interchange blocks


have a capacity of 1,000.
Based on settings in the
Interchange blocks Indicators tab, the level of water
affects the constraining
rate of the Valve that follows each of the blocks.

416

Mixing Flow and Items


Using the Interchange block to mix items with flow

Discrete Rate

entering and departing items. For an example, see the Interchange block in the Yogurt Production
With Flavors Plus model, located at Examples\Tutorials\Discrete Rate.

Discrete Rate Modeling

Miscellaneous
Concepts that dont easily fit into other chapters

418

Miscellaneous
Precision

This chapter covers:


The precision of calculations
Using bias to give preference to some component or portion of a model and how that affects
effective rates
Global and advanced options in the Executive
Value connector abbreviations and meanings
The different types of information that animation displays

Precision
An LP area is made up of one or more rate sections; it encompasses all the rate sections for which
the Executive block has been notified that effective rates might change. The LP area has a linear
program (LP) that is responsible for calculating an effective rate for each section contained within
that area. (The LP area and LP calculations are discussed fully in LP technology on page 434.)

Discrete Rate

The maximum mathematical precision for an LP area is 12 digits. Because one LP can be responsible for calculating multiple effective rates for its rate sections, and because LP precision is limited
to 12 digits, precision can become an issue not only for the individual effective rates but also for
the effective rates calculated for the entire LP area. For example, if an LP area contains two rate
sections where the first rate section's effective rate was 1,000,000 flow units per time unit (FPT),
the effective rate for the second section could be no smaller than 0.0001 FPT.
To preserve adequate precision for all rate sections, dont separate any two effective rates within an
LP area by more than 12 digits of precision.

Biasing flow
The discrete rate architecture includes a feature called bias a method for stating a preference that
flow travel one route rather than another.

Bias is only relevant when the flow is merged or diverged.


The advantages of the bias concept are that it:
1) Gives you a way to specify preferences for how flow circulates in one part of the model compared to other parts.
2) Provides flexibility in resolving conflicts for how flow should be distributed among competing
branches.
Bias is present in a model whenever you use one or more of the following blocks:
A Bias block in a model that contains Merge or Diverge blocks set to a non-fixed mode (discussed in Merge and Diverge blocks on page 420).
A Merge or Diverge block (Distributional, Priority, or Sensing modes only)

Because bias can skew the way flow is distributed, it is taken into consideration by the global LP
calculation and can thus have an effect on effective rates. (For specific information on how bias is
used in the calculation of effective rates, see the advanced topic LP technology on page 434.)
We suggest that you read the chapters Rates, Constraints, and Movement and Merging, Diverging, and Routing Flow before the Bias section.

Miscellaneous
Biasing flow

419

Bias order
If a block in a model has bias, it has a bias order that indicates its ranking compared to all the
other blocks with bias. Each biasing block is listed in order from the top (strongest) bias order to
the lowest (weakest) bias order. The block at the top of the ranking list has a bias order greater than
0. Bias orders lower than the top have numbers higher than the top number; bias numbers that are
Blank or less than or equal to 0 are ignored.
Since the bias order is used during the LP calculation of effective rates, changing the bias order
often results in a different set of effective rates. It is therefore important to understand the concept
of bias order and the influence it has on how effective rates are calculated.

The bias of a Bias block is by definition stronger than the biasing effect of any Merge or Diverge
block. So Bias blocks will always have higher bias orders than Merge and Diverge blocks.

Bias block
The Bias block allows you to specify a preference for where the flow should be directed. Wherever
the Bias block is located in the model, it pulls in as much flow as possible. If a model has multiple
Bias blocks, each has its own bias order.
If the models Merge and Diverge blocks use non-fixed rules to obtain or distribute flow, there is
some leeway in how flow can be biased and the Bias block is useful. If the models Merge and
Diverge blocks all use fixed rules, there is no possibility of biasing the flow with the Bias block.
(Fixed and non-fixed rules are discussed in Merge and Diverge blocks on page 420.)

The Bias dialog shown at the right


is for one of two Bias blocks in a
model. The block shown has the
highest preference for flow, as
indicated by the setting Bias
order: 1.

Discrete Rate

Dialog settings and bias order


The blocks bias order can be set
directly in its dialog or it can be
modified dynamically through the
B (bias) input connector or by
linking the Bias order dialog
parameter to an ExtendSim database. You can enter an initial bias
order that has effect until the
block gets a bias order value
dynamically; you can also show
the blocks bias order on its icon.

Bias dialog

The dialog table reports information about each Bias block in the model, its bias order, block label
or name, and block number. You can use the tables Bias column to change the bias order for any
of the listed blocks.
Calculation of the effective rate
The preferences for flow defined by Bias blocks has an effect on the calculation of the effective rate.
If there is more than one Bias block in the model, each blocks preference is expressed in turn based
on its bias order. As each Bias block takes its turn, it calculates the maximum effective rate which
could circulate at its location, without taking into consideration the preferences expressed by

420

Miscellaneous
Biasing flow

blocks with a lower bias order. When its maximum effective rate has been determined, that rate
will be fixed for the succeeding calculations involving blocks with lower rankings.
The bias order of Bias blocks can change dynamically during the simulation
If multiple Bias blocks have identical bias orders, the way the flow is distributed between the
effective rates cannot be predicted. The model will use one of the possible solutions.
If a Bias block has a bias order that is Blank or is less than or equal to 0, the block does not
express any preference.

Discrete Rate

Prioritize With Bias Blocks model


This model illustrates
how Bias blocks can be
used to indicate preferences for flow. It is similar to the Competing
Requests for Flow
model discussed on
page 381. However,
this model uses Bias
blocks to indicate the
preferred route for flow,
rather than bias order
settings in Merge and
Diverge blocks set to
Priority mode.
Prioritize With Bias Blocks model

In the Prioritize With


Bias Blocks model, the
Merge and Diverge blocks at set to Neutral mode and the Bias blocks indicate flow preferences.
The results are identical to the Competing Requests for Flow model.
This model is located in the folder \Examples\Discrete Rate\Merge and Diverge.

Merge and Diverge blocks


As shown in the Mode table on page 373, some Merge/Diverge modes use a fixed rule to obtain
or distribute the flow. For other Merge/Diverge modes, flow rules are only invoked in specific situations depending on model conditions.
Because it influences the way flow is distributed, the bias concept only applies to Merge or Diverge
blocks set to non-fixed rule modes: Distributional, Priority, or Sensing. To avoid confusion when
Merge or Diverge blocks have competing requests for flow, blocks with these modes must specify a
bias order.
Fixed rule modes
The Batch/Unbatch, Proportional, and Select modes all use a fixed flow rule to obtain or distribute
flow. For example, the way flow is distributed between the branches for a Merge/Diverge in Proportional mode will follow the proportions set in the blocks dialog. No matter what happens in
the rest of the model, the proportions will be respected.
The bias setting options in these blocks Model Settings tabs will be disabled.

Miscellaneous
Biasing flow

421

If the model contains Merge and Diverge blocks that are only set to the Batch/Unbatch, Proportional, or Select modes, bias has no impact on the effective rates.
Non-fixed rule modes
The Distributional, Neutral, Priority, and Sensing modes do not use a fixed rule to obtain or distribute flow. Instead, they provide a certain degree of freedom about where the flow can be
directed.
A Merge or Diverge block in Priority mode, for example, impacts the flow as follows:
Taking into consideration how much flow it can get, the block will do its best to direct as much
flow as possible to its top priority branches.

However, the block just expresses a preference for where to send the flow; model conditions
determine how well those preferences can be achieved and the top priority branches may not
actually get the most flow.
If the model contains any Merge or Diverge blocks set to the Distributional, Priority, or Sensing
modes, the bias order must be specified. (There is no bias order required for the Neutral mode.)
Setting a Merge or Diverge blocks bias order
When set to the Distributional, Priority, or Sensing modes, the Merge and Diverge blocks must
express a bias order. This is accomplished as follows:

2) You can also directly enter a bias order for a biasing Merge or Diverge block. To do this, first
change the Executives default setting from Bias order: defined by Simulation Order to Bias
order: each block defines its own. Then do one of the following:
In the blocks Model Settings tab, use the two array
buttons (<< and >>) to
change the blocks bias
order. This also changes the
blocks position in the tabs
bias order table.
Or, in the Executives Discrete Rate tab, select the
row that contains the
desired block, then use the
<< and >> arrows to change
its position in the table.
Model Settings tab
The bias order changes
when the position of the block in the table changes.

Discrete Rate

1) By default, the Executive is set to Bias order: defined by Simulation Order. With this setting,
the bias order for each Merge and Diverge block is automatically determined based on Simulation Order. Simulation Order is set in the command Run > Simulation Setup > Continuous
tab; the default is Flow order. It would be unusual to change the simulation order from the
default Flow order. (For further information on Flow order, see Simulation order on
page 88.)

422

Miscellaneous
Global and advanced options in the Executive

Bias order table


The bias order table in a Merge or Diverge blocks Model Settings tabs displays each biasing Merge
and Diverge block, its bias order, block label or name, mode, and Simulation Order.
If the blocks are set to Bias order: defined by Simulation Order, the table will be inactivated
since bias order is determined automatically.
If the blocks are set to Bias order: each block defines its own, the table is active only in Merge
or Diverge blocks in the Distributional, Priority, and Sensing modes. In blocks with those
modes, it can be used to change the blocks bias order, as discussed above.
The Model Settings tab also reports the number of Bias blocks in the model; Bias blocks always
have a higher bias order than any Merge or Diverge block.
Competing preferences
Bias Order resolving competing requests for flow on page 381 discusses how competing preferences between Merge and Diverge blocks is resolved using Merge and Diverge blocks.

Global and advanced options in the Executive

Discrete Rate

The Executive block (Item library) oversees the global discrete rate system. It is responsible for calculating a models effective rates, centralizing and coordinating the information from Rate library
blocks as discussed in the advanced topic LP technology on page 434.
The Executives Discrete Rate tab is used as a central location for setting options used throughout a
discrete rate model. These options are divided into global and advanced options, as discussed
below.

Global options
The Executives global options are:
Defining the infinite rate
Defining a zero effective rate
Setting options for how often blocks should update their flow status
Choosing that the Valve animate and report blocking and starving information
Managing flow units
The first three options are listed in a global
options frame at the top of the tab (shown
below); the fourth option is located at the bottom of the tab. They are all discussed in the following sections.
Infinite rate
Global options in Executive
The Discrete Rate tab specifies that a rate equal
to or greater than some number is considered
infinite; the default setting is that a rate 1e10 is considered infinite. This information is important when setting critical constraints and for the determination of the effective rate. It is discussed
fully in Infinite rate on page 358.

Miscellaneous
Global and advanced options in the Executive

423

Zero effective rate


The Discrete Rate tab specifies that an effective rate less than or equal to some number is considered zero, resulting in no flow. The default setting for that number is 1e-10. It is strongly suggested
that you do not change the default setting unless you have an excellent reason to do so.
Update flow status
In the Rate library, some values change continuously over time. The frequency of updating those
values can be customized by setting options for the Convey Flow, Diverge, Interchange, Merge,
Tank, and Valve blocks. They define how often the following information is updated:
The level of flow in residence blocks (Convey Flow, Interchange, and Tank)
The amount of flow passing through the Convey Flow, Diverge, Interchange, Merge, Tank, and
Valve blocks
At a minimum, the discrete rate global system
updates flow status only when it needs to. The
updating options provide two additional oppor- Valves default update setting
tunities to have calculations performed. The
option that has been selected in the Executive is displayed in each blocks Options tab (shown in
the screenshot), along with any choices associated with that option. The choices in the popup
menu are:

When a block is determined to be part of an LP area


Whenever a block creates an internal event such as reaching a new indicator
When a block receives an active message at one of it value output connectors
Each block defines how often. If this option is selected, each blocks Options tab will give you
the choice to check the option Update animation and results at each event. If that is checked,
the calculation of the flow status will occur at each step for that block.
Each block at each step. With this choice, every block will update at each step. This option has
to be used cautiously because it is computationally demanding to update the information this
frequently.
Valve animates and reports blocking and starving information
This option only affects the animation and reporting of Valve blocks. A Valve can be limiting, notlimiting, blocked, starved, or blocked and starved. By default, the Valves Results tab and S (status)
output connector only report whether the block is limiting (0) or not limiting (1). The Results tab
also reports cumulative information regarding the percentage of time the block was limiting or not
limiting.
When the global option is checked, the blocks Results tab and its S output report all status information as a value:
limiting (0)
starved (1)
blocked (2)
starved and blocked (3)

Discrete Rate

Only when necessary. This default setting is computationally the most efficient option because
flow status is updated only when needed by the system. With this setting, the information is
updated:

424

Miscellaneous
Global and advanced options in the Executive

A Valves complete status information is helpful during the early stages of model construction and
for debugging purposes. However, it can slow the simulation, so by default the option is not
checked.
The differentiations are animated on the Valves icon as discussed in Valve on page 429.
Manage flow units for discrete rate models
This section of the Discrete Rate tab provides a central location where flow units can be renamed
or added to or deleted from a model. To delete or rename a flow unit, select it in the table and click
the appropriate button. Flow units are discussed on page 349.

Advanced options
The advanced options in the
Discrete Rate tab only apply
to specific situations:
Merge or Diverge blocks
in the Distributional, Priority, or Sensing modes
Merge blocks in Proportional mode when there is
an empty loop

Discrete Rate

Merge and Diverge modes

are discussed in the chapter


Merging, Diverging, and
Routing Flow.

Advanced options in Executive


Merge or Diverge blocks
in Distributional, Priority, or
Sensing modes
This first set of options determines how bias order is set for certain Merge and Diverge blocks and
whether the bias order is displayed on the blocks icon.

Bias order determination


For a Merge and Diverge block in the Distributional, Priority, or Sensing mode, the choices are
that the blocks bias order number is defined by:
Simulation Order. This is the default; it causes the bias order to be automatically calculated by
the simulation order of the blocks in the model.
Each block. This option allows the user to customize the bias order of each Merge and Diverge
block (Distributional, Priority, or Sensing mode only) in the model.
For detailed information about the requirement for a bias order and how it is set, see Merge and
Diverge blocks on page 420.
Displaying the bias order
For Merge and Diverge blocks in the Distributional, Priority, or Sensing mode, a popup menu
provides choices for displaying their bias order:
Show bias order on icon
Dont show bias order on icon

Miscellaneous
Global and advanced options in the Executive

425

Each block decides whether to show bias order on icon


If the bias order is displayed on a blocks icon, it will be in the format <#>, where # is the bias
order number. If the third option is chosen, a checkbox will appear in each Merge or Diverge
blocks Model Settings tab. Check the Show bias order on icon checkbox if you want the block to
show the bias order number on its icon.
Merge blocks in Proportional mode
For Merge blocks in Proportional mode, a conflict can result if the block is part of an empty loop
(cant get flow). If a Merge blocks proportions are 1:2 for instance, what should happen if the top
inflow branch is part of an empty loop and cannot get any flow from that loop?
The Executive provides three options for how empty
loop situations should be resolved:
Branches need simultaneous inflows to push flow.
With this default setting, flow is stopped at all
inflow branches if one or more of them are part of
an empty loop.

Executive options for empty loops

Blocks push flow even in empty loops. This choice allows the branches with flow to send it
through. The result is that the branch that is part of the empty loop will then get some flow.

The block pushes flow even in


empty loops. This is the
default setting; it allows
branches with flow to send it
through.

Model Settings tab of Merge block

Each branch needs simultaneous inflows to push flow. With this choice, flow is stopped at
all inflow branches if one or more of them cannot get any flow.
Which of the three empty loop options you choose depends on the behavior of the system you are
simulating.
Merge Proportion Setting model
In this model the two flow streams have identical settings except for how the Merge blocks handle
empty loops. So that each block can specify its own behavior, the Executives setting for the section
Merge blocks (Proportional mode and empty loop) is Each block defines how it will push flow.

Discrete Rate

Each block defines how it will push flow. This setting causes an additional popup menu to
appear in the Model Settings tab of any Merge block in Proportional mode. The two choices in
each Merges dialog are:

426

Miscellaneous
Common connectors on discrete rate blocks

The Merge block in the top stream


(Wait for Flow) specifies that Each

branch needs simultaneous flow


while the Merge block in the bottom stream (Push Flow) is set to

Blocks push flow even in empty


loops. The flow is blocked at the
Merge block in the top stream but
flows through the Merge block in
the bottom stream.

This model is located in the folder

\Examples\Discrete Rate\Merge and


Diverge.

Common connectors on discrete rate blocks

Merge Proportion Setting model

Most Rate library blocks have inflow and outflow connectors and value input and output connectors. The Interchange block also has item input and output connectors.

Discrete Rate

Flow connectors pass information about the effective rate from one discrete rate block to another.
Item connectors pass discrete items.
For value connectors, many discrete rate blocks use abbreviations or acronyms to indicate the connectors purpose. Some of these abbreviations represent more than one purpose and are context
sensitive.
The following connector labels appear for value connectors on Rate library blocks:
Connector

In or Out?

Meaning

AL

Output

Accumulation length - for a Convey Flow block, the distance from its
end to the accumulation point.

AQ

Output

Accumulated quantity - the amount of flow that has been accumulated


along a Convey Flow blocks accumulation length.

Input

Bias order number

Input

Capacity

CO

Output

Contents

Input

Delay

DR

Output

Potential downstream demand rate

factor

Input

Conversion factor in Change Units block

Input

Quantity of flow (quantity goal) or duration of time (duration goal)


for a Valve. Can also be used to start a new goal, depending on Valves
dialog setting.

G#

Output

Goal number

GD

Output

Goal duration

Miscellaneous
Common connectors on discrete rate blocks

In or Out?

Meaning

GS

Output

Goal status:
0 - no goal
1 - starting
2 - in progress
3 - ended
4 - interrupted

GQ

Output

Goal quantity

GO

Input

Activate a status update: 0 or 1 (Sensor and Merge/Diverge)

Output

Indicator (Convey Flow, Interchange, or Tank)

IC

Input

Item capacity

ICO

Input

Item contents

ID

Input

Inflow/outflow branch ID for Merge/Diverge in Select mode

IT

Input

Target value to release item

Output

Length of item line: 0 or 1

LE

Output

Level of contents

NB

Output

Number blocked: 0 or 1

PE
PT

Input

Preempt item

Output

Process time

Output

Cumulative quantity

Input

Maximum rate (Note that the effective rate is reported by the flow
input and output connectors.)

S (on Convey
Flow)

Output

Status:
0 = empty
1 = intermediate
2 = full

S (on Interchange or
Tank)

Output

Status direction (Interchange):


-1 = down
0 = stable
1 = up

S (on Valve)

Output

Status [if Valve only reports limiting or non-limiting]:


0 = limiting
1 = non-limiting

S (on Sensor
or Valve)

Output

Status [if Valve reports full status:]


0 = limiting (Valve) or unused (Sensor)
1 = starved
2 = blocked
3 = starved and blocked

S (0-n)

Output

Sensors - numbered from 0 to n (Convey Flow)

SP

Input

Speed parameter

SP

Output

Effective speed

SR

Output

Potential upstream supply rate

Discrete Rate

Connector

427

428

Miscellaneous
Animation

Connector

In or Out?

Meaning

start

Input

Start hysteresis

stop
TL

Input

Stop hysteresis

Output

Cumulative time Valve was limiting, effective rate > 0

TU

Output

Cumulative time Valve was not limiting, effective rate > 0

TLO

Output

Cumulative time Valve was limiting, effective rate = 0

TUO

Output

Cumulative time Valve was not limiting, effective rate = 0

Animation

Rate library blocks can be animated during the simulation if Run > Show 2D Animation has been
selected before a simulation run. For blocks with animation, the following information explains
what each display means.
The models illustrated in this section are located in the folder \Examples\Discrete Rate\Miscellaneous.

Tank

Discrete Rate

Tanks animate information about their levels and information about the direction of flow within
the Tank.
Level information
The table below shows animation of the Tanks level under different conditions.
Finite Capacity

Infinite Capacity

1000

100

Full (contents 100, capacity 100)


50

Some flow (contents 50,


capacity 100)

Full
10

Some flow (10 units)

Empty (contents 0, capacity 100)

Specific Behaviors

Overfull (contents 1,000,


capacity 100)
1000

Overfull (contents 1,000, no capacity)


0

Empty

No capacity and empty

Miscellaneous
Animation

429

Direction information
An arrow is animated on the icon to indicate the direction of change in the Tanks level. When
there is no arrow, it means that the Tank has neither an inflow nor an outflow rate.

Interchange
The Interchange block displays the same animation behavior as a Tank, shown above. In addition,
a ball appears in the middle of the blocks icon when an item is present in the block. The ball is red
if the item is ready to leave the block but is blocked downstream. Otherwise, the ball is green. If
the option Tank only exist while Item is in it is chosen and there is no item in the block, the tank
icon animates as white with cross-hatching.

Item filling (contents 50,


capacity 100)

Item emptying (contents


50, capacity 100)

Item blocked downstream


(contents 99,
capacity 100)

No item present (Tank only


exists while item is in it)

A Valve reports its maximum and effective rates when animation is turned on. If the option Valve
animates and reports blocking and starving information is not selected in the Executive blocks
Discrete Rate tab (the default setting), a Valve will display only its limiting or non-limiting status.
If that option is selected, it will also report its blocking and starving status. (See Valve animates
and reports blocking and starving information on page 423 for full information.)
Displaying limiting and non-limiting status
By default, the Valve only animates information about its limiting or non-limiting status.
Non-Limiting

Limiting

Effective rate 5, maximum rate 10

Effective rate 5, maximum rate 5

No flow, maximum rate 10

No flow, maximum rate 0

Limiting is when the effective rate equals the maximum rate. In this case, the Valve is what limits
the flow. When a Valve is non-limiting, the effective rate is less than the Valves maximum rate. In
that case, the Valve has no impact on the flow.

Discrete Rate

Valve

430

Miscellaneous
Animation

When the effective rate is not the same as the constraining (maximum) rate, the two numbers
are represented as effective rate/constraining rate above the icon. If the two rates are the same,
only one number appears.
If the Valve is limiting and the effective rate is greater than 0, the interior of the icon is plain
blue. If the Valve is limiting to 0, the interior of the icon is plain red. If the Valve is not limiting,
the interior of the icon is white.
When the effective rate is greater than 0, a blue rectangle appears along the icon, and the rates
are written in blue. When there is no flow, the blue rectangle does not appear on the icon and
the rates are written in red.

Discrete Rate

Also displaying blocking and starving status


If the option Valve animates and reports blocking and starving information is selected in the
Executive blocks Discrete Rate tab, Valves will also animate their blocking and starving status
information.
Limiting only

Blocked

Starved

Blocked and Starved

Limiting

Non-limiting, with flow

Non-limiting, with flow

Non-limiting, with flow

Maximum rate 0

Non-limiting, no flow

Non-limiting, no flow

Non-limiting, no flow

Limiting, with flow

Limiting, with flow

Limiting, blocked, and


starved with flow

Limiting, no flow

Limiting, no flow

Limiting, blocked, and


starved and no flow

If a Valve is blocked, it means that there are one or more blocks downstream which are limiting the
flow through the Valve. If a Valve is starved, it means there are one or more upstream blocks that
limit the flow to the Valve.
If there is no flow, there will not be a horizontal line through the Valve. If there is flow, and the
Valve is non-limiting, the horizontal line through the Valve is a patterned blue. The horizontal
line is a plain blue color if there is flow.
If a Valve is limiting, the central, vertical part of the Valve is plain blue (if the maximum rate is
>0) or red (if the maximum rate = 0).

Miscellaneous
Animation

431

If the right side of the Valves icon is plain blue, the block is partially blocked by downstream
blocks. If there is a red line on the right side of the icon, the flow is completely blocked downstream.
If the left side of the Valves icon is plain blue, the block is partially starved by upstream blocks.
If there is a red line on the left side of the icon, the flow is completely starved upstream.
Goal and hysteresis animation
A Valve that uses a quantity goal to control its flow has a blue line below its icon. If the Valve controls its flow with a duration goal, the line is green. While the goal is On, a progression bar appears
along the top of the blue or green goal line.
A Valve that uses hysteresis has a purple line at the bottom of its icon. While hysteresis is active, the
purple line is thicker for all or part of its length.

Quantity goal, about 75% completed

Duration goal, about 75% completed

Hysteresis is active

Sensor
The shape and color of the Sensor blocks icon indicates if the flow is being blocked, starved, or
both., and if there is flow or not.
Blocked

Starved

Blocked and Starved

Yes >>>

No >>>

Convey Flow
The animation of the Convey Flow block shows what mode it is in, the distribution of flow along
its length, the position of the accumulation point, and other information.
Mode animation

Accumulate-maximum density

Accumulate-fill empty segments

Non-accumulating

For further exploration, the Compare Convey Flow model compares the behavior of three Convey
Flow blocks, each set to one of the possible modes, under different emptying rates. The model is
located in the folder \Examples\Discrete Rate\Delaying Flow.
Distribution of flow and other information
A Convey Flow block animates the distribution of flow as follows:

Discrete Rate

Flow?

432

Miscellaneous
Animation

A blue shape along the top of its icon indicates flow distribution.
A slowing of flow movement causes the blue shape to have a green border.
The complete stopping of flow movement causes the blue shape to have a red border.
If the block has reached its capacity, the shape is a solid blue rather than a dotted blue.
If the block is empty, a black line will appear at the top of its icon, as seen above.
The position of the accumulation point is indicated by a red vertical line that moves along the
length of the icon. This is shown in the first, second, and fourth screenshots below and is discussed on page 402.

Discrete Rate

Distribution of flow

Slowing movement

Stopped

Capacity reached

Discrete Rate Modeling

Advanced Topics
Some additional information
for those of you who want to know more

434

Advanced Topics
What this chapter covers

The earlier chapters in the Discrete Rate module discussed important concepts you need to know
to build discrete rate models. This chapter provides an overview of the way discrete rate calculations are made and describes the underlying functioning of the Rate library. This information is
not necessary to build discrete rate models but will be of interest to advanced users.
It is highly recommended that you read the previous discrete rate chapters before this one, particularly the chapter Rates, Constraints, and Movement.

What this chapter covers


The LP technology that has global oversight over a discrete rate model
How the LP area is determined
The sequence of events for the LP calculation
How bias affects the calculation
The types of information provided to the Executive
How a relational constraint is calculated
The potential rates upstream supply and downstream demand
Messaging in discrete rate models

Discrete Rate

LP technology
Linear programming problems involve the optimization of an objective function subject to a set of
constraints. The purpose of solving a linear programming problem is to maximize or minimize
selected variables in the objective function.

LP technology is the method ExtendSim uses to provide global oversight to maximize the movement of flow throughout a discrete rate system. The discrete rate architecture employs an integrated LP Solver DLL to solve a series of equations to optimize effective rates at each point of the
simulation run.
The purpose of the LP calculation is to determine the maximum effective flow rates in the system
given the constraints defined by block settings and the structure of the model. After all the rules
for storage capacity and movement have been declared in the model, ExtendSim uses the Executive
blocks LP calculations to cause as much flow as possible to move through the system. This calculation is handled automatically and internally.

Overview
In a discrete rate model, the Rate library blocks communicate with each other and with the Executive block. In turn, the Executive communicates with an integrated linear program (LP Solver).
The Rate library blocks are dependent on each other, have an effect on one another, and are part of
a global LP system that evaluates the entire model to calculate its effective flow rates.
A rate section is a network of connected blocks, all possessing the same effective rate. Established
at the beginning of the simulation run, rate sections do not change. (See Rates, rate sections,
and the LP area on page 357 for more information.)
An LP area is made up of one or more rate sections; the actual configuration can change during
the simulation. A change in a blocks constraints during the simulation run initiates a propagation of messages through all the rate sections whose effective rates might change. This propagation defines the LP area at that point in time.

Advanced Topics
LP technology

435

Each rate section within the LP area contributes a part of an LP equation for a recalculation.
The purpose of the recalculation is to determine the maximum effective flow rates in the system,
given the constraints defined by block settings and the structure of the model. The result is the
set of effective rates for each section in the LP area at that point in the simulation. The system is
optimized such that only the rate sections in the LP area are recalculated; all the other effective
rates in the system dont need to recalculate at that moment and wont.
Among other things, the LP calculations take into consideration each blocks:
Critical constraints, which place an upper bound on rate sections connected to that block.
Relational constraints, which define the way rate sections are related to each other.
Bias, which is a blocks preference that flow travel one route rather than another.

The LP area
The LP area is made up of one or more rate sections linked together by the fact that their effective
rates could change at that point in the simulation a change in the effective rates in one section
might impact effective rates in the other sections. The rates, constraints, and biases within the LP
area are used by the LP Solver to calculate the optimal set of effective rates for the rate sections
contained within that area.

The boundaries of the LP area are determined through the propagation of messages between Rate
library blocks. A change in a blocks constraints during the simulation run causes the block to
notify the Executive and send messages which propagate through all the rate sections whose effective rates might change as a result. Whether the block is the originator of the recalculation request
or receives a propagation message:
The block declares which of its connected rate sections are in the LP area. The propagation process then creates a global list of rate sections to include in the current LP area.
If the block provides a relational constraint connection between two or more rate sections, the
effective rates connected to that block are dependent on one another. The block then continues
the message propagation to all the dependent block(s), who propagate the message to their
dependent blocks, and so forth.
The change in the originating block will definitely cause a recalculation of the effective rates for all
directly connected rate sections, and (depending on relational constraints between the sections)
might cause a recalculation of the effective rates for other rate sections.

The boundaries of the LP area will change dynamically during the simulation depending on which

effective rates are involved in the recalculation and which relational constraint dependencies occur
between rate sections.

The sequence of events


A change in a blocks constraints during the simulation run initiates a reevaluation of all the effective rates for the LP area at that point in time. The blocks constraint change will definitely cause a
recalculation of the effective rates for all directly connected rate sections, and (depending on rela-

Discrete Rate

The effective rate of one section can affect the effective rate of another section through relational
constraints. When an event occurs that causes a rate sections effective rate to be reevaluated, blocks
propagate rate block flow messages (see Block messages on page 445) throughout the model to
determine which other rate sections might be impacted by the new event. The affected rate sections constitute the LP area and rate sections outside of the LP area are not included in the recalculation, reducing redundant computations.

436

Advanced Topics
LP technology

tional constraints between the sections) might cause a recalculation of the effective rates for other
rate sections. The sequence is:
1) A blocks constraint changes.
If a blocks status changes it can affect its effective inflow and/or outflow rates. For example, the effective inflow rate for a finite Tank block that is filling up is greater than its effective outflow rate. When the Tank becomes full, it creates an event because its effective
inflow rate can no longer exceed its effective outflow rate.
When a block reacts to new parameters, the effective inflow and/or outflow rates must be
reevaluated. For example, a Merge block in Select mode might choose its top inflow
branch at the start of the simulation. If the block subsequently receives an order to select
its bottom inflow branch, its effective rates have to be recalculated.
2) The block posts a zero-time event requesting a reevaluation of effective rates.
3) The LP area is determined based on the propagation of block messages.
Starting with the originating block. messages are propagated through the model to all the
blocks that might be affected by the change. This propagation of messages defines the
boundaries of the LP area.
The LP area encompasses all the rate sections with effective rates that might change during
the calculation.

Discrete Rate

For a complete description of the LP area and how it is determined, see page 435.
4) As the LP area is determined, the blocks update their status.
Each block that is part of the LP area updates the amount of flow which has passed
through it since the last update.
If the block is a residence block (Convey Flow, Interchange, or Tank), the amount of flow
the block is holding is also updated.
Note: The frequency of status updates outside of an LP calculation is set in the Executive.
See Update flow status on page 423 for information.
5) Blocks report to the Executive how they impact effective rates.
Each block in the LP area declares the flow rules (critical and relational constraints) that it
applies to the rate section it is connected to.
The blocks bias order is stored in a list. Each block declares its bias order (if any) and provides coefficient information to the Executive. The coefficients allow the Executive to
build an objective function that considers the effect of the bias.
See Types of information provided to the Executive on page 437.
6) The Executive determines an objective function.
The objective is to maximize the flow rate for each rate section subject to the constraints
defined by the blocks flow rules.
Each decision variable in the objective function is the effective rate of a section in the LP
area. For instance, the objective could be Maximum effective rate = 1*ER1+ 1*ER2 +
1*ER3, where ERn is the effective rate for a rate section in the LP area.

Advanced Topics
LP technology

437

If there is no bias, or all the intermediate calculations related to bias order have been completed, the coefficient of each variable will be 1. If there is bias, the coefficient could be
other than 1.
7) The Executive communicates with the LP Solver.
The Executive gives the LP Solver the objective function and the information from the
blocks and rate sections within the LP area.
Critical constraints put an upper bound on some of the effective rates (the decision variables). Relational constraints provide a link between the effective rates of different rate sections and must be taken into consideration during the calculation. For instance, if effective
rate X is less than or equal to effective rate Y, the objective function must conform to that
information.
8) The Solver performs a calculation.
The Solver calculates an optimized set of effective rates for the LP area.
The result is an intermediate LP calculation (if there is bias) or the final LP calculation (if
there is no bias).
For full details, see The LP calculation on page 440.
9) Steps 6-8 are repeated, if necessary.

For each recalculation, the list of critical and relational constraints is changed to include
the constraints caused by the particular bias order being considered.
See Bias information on page 438.
10) The rate sections are notified.
The Executive sends Executive block flow messages to the head of the rate sections to
update to the new effective rates.
The blocks receiving this information update according to their dialogs and value connectors. They then post new events if necessary.

Since the purpose of the recalculation is to maximize the entire set of effective rates, some rates will
change while others might not.

Types of information provided to the Executive


When effective rates need to be recalculated, Rate library blocks provide critical and relational constraint and bias information to the Executive.
To learn which blocks contribute which types of information, see Table summarizing constraint
and bias information on page 439.
Flow rules
Flow rules consist of critical and relational constraints.
If a rate section has a critical constraint, it places an upper limit to the effective rate within that
section. Since effective rates are decision variables in the LPs objective function calculation, critical constraints place an upper bound on some of the equations variables.

Discrete Rate

If the blocks in the LP area have bias, the Executive must determine intermediate objective
functions and the Solver must perform intermediate calculations. The number of recalculations is equal to the number of blocks with bias, plus 1.

438

Advanced Topics
LP technology

Relational constraints describe the dependencies between different rate sections. In some blocks,
relational constraints can vary depending on the state sensitivity of the block; in others they are
permanently active.
An example of a state sensitive relational constraint can be found in a Tank block. (Tanks
are always within two rate sections; the input side and the output side define the sections.)
As long as a Tank is empty, its relational constraint is defined as effective outflow rate is
less than or equal to effective inflow rate. Once the Tank becomes not empty, the relational constraint doesn't apply.
An example of a permanent relational constraint can be found in a Change Units block
where a conversion factor defines the relationship of the inflow effective rate to the outflow
effective rate. If the factor varies over time, the relational constraint may also vary. But the
dependency between the inflow and outflow effective rates is active for each calculation
which includes the two rate sections.

Discrete Rate

Bias information
When the LP area is created, the Executive ranks all Bias blocks and any Merge or Diverge blocks
with a bias order in a list. The Executive considers the top bias from that list as part of the objective
function and instructs the Solver to perform an intermediate LP calculation using that function
and the current critical and relational constraints. Then the Executive takes the next bias order into
consideration, and so forth.
Since bias affects critical and relational constraints, each succeeding bias order means a new objective function will be determined and a new set of critical and relational constraints will be added to
the previous ones. The results from the previous LP are used as inputs to the next LP. This results
in multiple intermediate LP calculations one for each bias order in the list until the final result.
Most blocks with bias order supply:
Flow rules (critical and relational constraints) which apply to all the LP calculations. (This information is not supplied by a Bias block.)
A set of coefficients that the Executive will use to build the objective function corresponding to
this bias order. Depending on the bias information received from the blocks in the LP area, the
intermediate objective function can include coefficients that are other than 1. (A coefficient of 0,
for instance, indicates that a particular effective rate does not need to be maximized; it causes
that effective rate to not be directly affected by the maximization.)
Flow rules for that bias order which use the results of the intermediate calculation. (After the
intermediate calculation, the results of the calculation are used to add new flow rules to the succeeding calculations.)
Some additional situations that enter into the calculation include:
If a Bias block has a bias order that is Blank or is less than or equal to 0, the block does not
express any preference.
If multiple Bias blocks have identical bias orders, the effective rates for these blocks cannot be
predicted. The model will use one of the possible solutions.
Merge and Diverge blocks with bias order are always lower on the bias list than any Bias block.

Advanced Topics
LP technology

439

Table summarizing constraint and bias information


The following table summarizes the types of bias and constraint information (if any) Rate library
blocks supply to the Executive for the calculation of effective rates:
Critical
Constraint

Relational:
Permanent

Relational:
State Sensitive

Bias
Order

Bias

No

Yes

No

Yes

Catch Flow

No

No

No

No

Change Units

No

Yes

No

No

Convey Flow

Yes

No

Yes

No

Block

Mode

Diverge

Neutral, Proportional,
Select, Unbatch

Depends

Yes

No

No

Diverge

Distributional, Priority,
Supply Sensing

Depends

Yes

No

Yes

Yes

No

Yes

No

Interchange
Batch, Neutral,
Proportional, Select

Depends

Yes

No

No

Merge

Distributional, Demand
Sensing, Priority

Depends

Yes

No

Yes

Sensor

No

No

No

No

Tank

Yes

No

Yes

No

Throw Flow

No

No

No

No

Valve

Yes

No

No

No

Diverge and Merge blocks can imply a critical constraint depending on the branch parameter and
the mode.

The relational constraint calculation


The table that follows describes how the relational constraint is calculated for blocks that provide
either permanent or state sensitive relational constraints.
For the purposes of this table:
Xin is the effective inflow rate of a block and Xout is its effective outflow rate.
Index i describes one of the inflow branches (for a Merge) and one of the outflow branches (for
a Diverge).
The number of branches is n.
Block

Calculation

Change Units
Convey Flow

The permanent boundary is Xin = factor*Xout


If the block is in an accumulating situation (outflow rate is blocked or partially
blocked downstream) and doesn't have any more capacity for accumulation, a state
sensitive boundary applies: Xin<=Xout

Discrete Rate

Merge

440

Advanced Topics
Upstream supply and downstream demand

Block

Calculation

Diverge

Select. A permanent relational constraint applies between the inflow effective rate
and the selected outflow effective rate: Xin=Xout selected
Proportional. A set of permanent relational constraints applies to insure the proportions: Xout_i = factor_i*Xin (i: 0=>n-1)
Batch/Unbatch. Permanent relational constraints: Xout_i = Xin (i: 0=>n-1)
Neutral, Priority, Distributional and Supply Sensing. Permanent relational constraint Xin = Xout_1+ Xout_n

Interchange
Merge
Tank

(Other calculations are beyond the scope of this document.)


As long as the tank is full, Xin<=Xout. As long as the tank is empty, Xout<=Xin
(State sensitive relational constraint)
Same as the Diverge with Xout and Xin reversed
See Interchange

The LP calculation

Discrete Rate

The Executive block maximizes an objective function composed of the set of effective rates for the
LP area. If there is no block with bias order involved in the LP area, the Executive block maximizes
the sum of all the effective rates in the LP area in this case, only one LP calculation is necessary.
If the blocks in the LP area have bias, the Executive must determine multiple intermediate objective functions and the Solver must perform multiple intermediate calculations. The number of
recalculations is equal to the number of blocks with bias plus 1.
When the LP area involves blocks with bias order, the calculations are made in cascading order. For
each bias order, an intermediate calculation is made with an objective function depending on the
type of block that is being evaluated:
Bias block. The function to maximize is the sum of the effective rates attached to the Bias blocks
with an identical bias order. When the calculation is made, the function is used as a new rule for
the succeeding intermediate calculations. The calculation is: sum effective rates within the bias
order>= result of the maximized function.
Merge/Diverge in Priority mode. The function to be maximized contains the effective rates from
the variable inflow and/or outflow branches of the block. The lower the priority of the branch,
the higher the coefficient associated with the effective rate. The calculation is: sum p*Xp (for p:
1=>n with 1 top priority and n lowest priority). When the calculation is finished, the objective
function is used as a new rule for the next intermediate calculations (sum p*Xp >= result of the
maximized function).
Merge/Diverge in Batch/Unbatch, Distributional, Neutral, Proportional, Select, or Sensing
mode. This calculation is beyond the scope of this document.
When all the intermediate LP calculations have been made, the last LP calculation maximizes the
sum of all the effective rates for the LP area.

Upstream supply and downstream demand


The effective rate is not the only result a rate-based model can provide. The potential upstream
supply rate and the potential downstream demand rate can also be useful in special situations
the rates determine the branch proportions for Merge and Diverge blocks in Sensing mode (as dis-

Advanced Topics
Upstream supply and downstream demand

441

cussed in Sensing mode on page 379) and the Sensor block can be used to report the potential
rates for making model decisions.

This is an advanced topic because the concept is complex and there is an elevated potential for

error, as discussed in the section Cautions when using potential rates, below. Careful model verification and validation, and an advanced knowledge of the ExtendSim LP technology, are required
to avoid unexpected results.

Definition
The potential upstream supply rate is the theoretical rate at which an upstream source could provide flow to the beginning of a rate section if there werent any downstream limitations on flow
movement (downstream capacity is infinite). For instance, for a not-full Tank at the beginning of a
rate section, the upstream supply rate would equal the Tanks effective inflow rate. A not-full Tank
does not limit the inflow rate it can receive. In this case, the effective inflow rate is also the potential upstream supply rate.
The potential downstream demand rate is the theoretical rate at which a downstream section of
the model could receive flow from the end of an upstream rate section if there were an unending
upstream supply of flow (upstream source is infinite). For instance, for a not-empty Tank at the
end of a rate section, the potential downstream demand rate would be equal to the Tanks effective
outflow rate. A not-empty Tank does not limit the outflow rate it can provide. In this case, the
effective outflow rate is also the potential downstream demand rate.

When flow movement is from left to right, the information to calculate the upstream supply rate is
propagated from left to right while downstream demand information is propagated from right to
left.

Requirements for the supply/demand calculation


For a models Executive block to calculate a potential supply or demand rate, at least one of the following blocks must be part of the LP area:
Sensor block. The only purpose of the Sensor block is to display the potential rates wherever it is
located in the model. The Sensor block only provides information; it has no direct impact on
the calculation of effective rates.
Diverge block in Demand Sensing mode. Proportions for the outflow branches are calculated as
a function of the potential downstream demand. For example, the downstream demand placed
on an outflow branch becomes the proportion for that outflow branch.
Merge block in Supply Sensing mode. The block uses the available upstream supply rate to
define the Supply Sensing proportions for each inflow branch.

Cautions when using potential rates


We strongly recommend exercising caution when using the Merge/Diverge blocks in Sensing
mode, or when relying on a potential rate reported by the Sensor block, because:
Getting information about these rates slows down the simulation. The Executive has to make a
lot more LP calculations to extract the potential rate information.

Discrete Rate

Upstream supply and downstream demand could potentially be infinite. For example, the
upstream supply rate right after a Tank (if the tank doesn't declare any constraint on its outflow
rate) is infinite.

442

Advanced Topics
Upstream supply and downstream demand

In some cases the potential rates as reported by the Sensor block are not accurate. Depending on
how flow is diverged and merged, the potential supply or demand rates could be aggregated even
if they should not be. This is illustrated in the Supply & Demand Warning model described
below.
Merge/Diverge blocks in Distributional, Neutral, and Priority modes are not always compatible
with Merge/Diverge blocks in Sensing mode. Consequently, models with blocks that mix Sensing mode with Distributional, Neutral, or Priority modes are prone to error.
A Merge or Diverge block in Sensing mode has a bias order. Depending on the blocks location
in the Executives list of bias orders:
The effective rates might be different.
The block might not follow the proportions specified by the Sensing mode.
For instance, the effective rates are different in the Combine Priority Sensing model and the
Combine Sensing Priority model, and neither of those models follow the Sensing rule.

Discrete Rate

Issues when relying on the Sensor to report potential rates


Based on how a model is configured, and the mode selected in a Merge or Diverge block, a Sensor
block could report erroneous information.
Supply & Demand Warning model
In this model, the Sensor blocks correctly report the upstream supply. But Sensor A reports an
invalid downstream demand of 1400 gallons/minute. The actual downstream demand is 1000 gallons/minute, reported by Sensor C. This is determined by verifying the demand results, compared
to what was expected, from right to left.

Supply & Demand Warning model

Evaluating the model from right to left (for the downstream demand rate):
Sensor C reports a demand (Demand C) of 1000 gallons/minute because Valve C limits flow to
1000 gallons/minute. The Sink at the end of the line doesn't limit the inflow rate at all.
Demand B1 is 1000 gallons/minute because the Prioritize 2 block has its top priority at branch
B1. (Verification: If a Tank with flow is present at branch B1, Prioritize 2 and Valve C would
accept 1000 gallons/minute coming from branch B1.)
Demand B2 is 400 gallons/minute because the effective rate on branch B1 is 600 and Demand
C is 1000: Demand B2=Demand C-effective rate B1. (Verification: If a Tank with flow is pres-

Advanced Topics
Upstream supply and downstream demand

443

ent at branch B2, it could provide 400 gallons/minute because the total Prioritize 2 can accept is
1000 and the block already takes 600 from the top priority branch.)
Sensor A reports a demand of 1400 gallons/minute because Demand B1 is 1000 and Demand
B2 is 400. However, this is incorrect. (Verification: If a Tank with flow is placed right before Prioritize 1, the outflow effective rate would be 1000 gallons/minute and not 1400 gallons/minutes. The erroneous result comes from the fact that the association of correct local rules
doesn't guarantee a correct global result.

By understanding flow rules and how they can affect the global result, you can avoid this problem.

The most important step is verifying this model from left to right for the supply and from right to
left for the demand. Two solutions are 1) having the Prioritize 2 block be in Neutral mode, and 2)
placing a Valve with a maximum rate of 1000 between Sensor A and Prioritize 1.
Mixing Merge/Diverge block modes
Situations where Merge or Diverge blocks in Sensing mode are mixed with Diverge or Merge
blocks in Distributional, Neutral, or Priority modes within an LP area should be avoided as they
are prone to give inaccurate results.

Unexpected effects of bias order


As discussed on page 420, the Distributional, Priority, and Sensing modes require bias order to be
defined. This affects their effective rates. However, the only mode whose proportions are influenced by the bias ranking is the Sensing mode.
When effective rates within an LP area have to be recalculated, the Executive makes a list of blocks
ranked from the top bias order to the bottom. Depending on a Merge or Diverge blocks ranking
in the Executives list, the effective rates might be different. If the block is in Sensing mode, the
proportions will also be influenced. The two models that follow illustrate these issues.
Combine Priority Sensing model
In this model, a Diverge block (Prioritize 1) is set to Priority mode and a Merge block (Sensing 2)
is set to Supply Sensing mode. The blocks Model Settings tabs are set to Each block defines its
own bias order. The table in the tabs indicates Prioritize 1 has the top bias order and Sensing 2 has
the lower bias order.

Combine Priority Sensing model

Discrete Rate

In these types of mixed-mode situations, the LP area is going to be recalculated multiple times to
provide the effective rates and the upstream supply and downstream demand rates. All the blocks
in the LP area must provide one set of constraints to the Executive so it can solve the effective rates
and a second set of constraints so the Executive can solve the supply and demand rates. This causes
repeated intermediate LP calculations, the results of which are affected by constraints which are
applied for the supply and demand rates. This may yield inaccurate results.

444

Advanced Topics
Messaging in discrete rate models

The supply in branch B1 is 1,000 while the supply in branch B2 is 400. However, the Sensing 2
block doesnt distribute flow following the expected supply proportion.
Because the Prioritize 1 block has the top bias order, the Executive gives priority to that block in
choosing how to distribute the flow between the branches B1 and B2.
At the first intermediate result of the LP calculation, branch B1 gets an effective rate of 600 gallons/minute and branch B2 gets 0 gallons/minute.
Because this decision has been made for branches B1 and B2, the Sensing 2 block with its lower
bias order cannot control the proportion of flow it will get through branches B1 and B2. For
example, if the supply from B1 is 1000 gallons/minute and the supply from B2 is 400 gallons/
minute, the proportion between the effective rates for the Sensing 2 blocks inflow is not 71%
B1 (1000/1400) and 29% B2 (400/1400) but rather 100% B1 and 0% B2.

Discrete Rate

Combine Sensing Priority model


Like the preceding model, the Diverge block (Prioritize 2) in this model is set to Priority mode and
the Merge block (Sensing 1) is set to Supply Sensing mode and the Model Settings tabs for the
blocks are set to Each block defines its own bias order. However, in this model the table indicates
that Prioritize 2 has a lower bias order than Sensing 1.

Combine Sensing Priority model

The Sensing 1 block has the top bias order, so the Executive gives priority to that block to
choose how the flow it receives should be distributed between branches B1 and B2.
At this point of the LP calculation, the Prioritize 2 block gets a supply of 1000 gallons/minute
and has not decided how to distribute the flow. With that limited information, the potential
upstream rate is calculated as 1000 gallons/minute for Supply B1 and 1000 gallons/minute for
Supply B2. Therefore, Sensing 1 decides to get 50% of the flow from inflow branch B1 and the
other 50% of the flow from branch B2.
Because the decision has been made for branches B1 and B2, Prioritize 2 with its lower bias
order can no longer control the distribution of flow between branches B1 and B2.

Messaging in discrete rate models


As discussed in How ExtendSim passes messages in models on page 591, the ExtendSim architecture allows application messages to be sent from ExtendSim to a models blocks and block messages to be passed between blocks.
Discrete rate models use the same application messages as do continuous and discrete event models. The block messages sent between Rate library blocks are discussed below.

Advanced Topics
Messaging in discrete rate models

445

Block messages
Discrete rate blocks have a sophisticated and complex messaging structure for communicating
with each other and with blocks from the Value and Item libraries. They can be categorized as:
Event
Value connector
Item connector
Flow connector
Rate block flow
Executive block flow
When a block initiates a recalculation of the set of effective rates, a succession of messages and calculations are also initiated. Understanding how block messages work can prevent redundant messages from being created. At the very least redundant messages will cause runtimes to be longer
than need be. At the very worst, redundant rate calculations could introduce bugs into a model
when effective rates are temporarily calculated using one or more out-of-date parameter values. For
instance, see Limiting the number of recalculations on page 383.

By limiting the number of times the set of rates have to be recalculated, the operational efficiency

of the model is maximized. For example, see Limiting the number of recalculations on page 383.

A future event message occurs when the simulation clock reaches a time posted by a block. For
instance, when the level in a Tank increases, it posts a future event to the Executive corresponding to the Tanks full time. Once the simulation clock has advanced to this future event, the
Executive sends an event message to the Tank, alerting it that it is full.

A current event message occurs when a block wants to be activated before the simulation clock
advances, but after it has completed its response to another message. For instance, instead of a
Valve immediately calculating a new effective rate when its constraining rate changes, it will post
a current event to the Executive letting it know that it will have to recalculate at a certain time.
This gives all the other blocks in the model the opportunity to update before the recalculation
occurs.
In discrete rate models, blocks from the Value library typically neither post events to the Executive
nor receive event messages from the Executive. This has important ramifications on the behavior
of continuous blocks in discrete rate models.
Value connector messages
Blocks in a discrete rate model send value connector messages either because a new number is
needed by an input connector or because the value of an output connector has changed. These
messages request updated information for the input connectors or notify connected blocks that the
output value has changed. For example, if a Valve blocks R value input connector is connected and
the Valve receives a new value at R, the constraining rate on the flow changes. This will cause a
recalculation of the set of parameters in the model.

Discrete Rate

Event messages
Event messages communicate between the Executive block and Rate library blocks. In a discrete
rate model, the simulation clock advances from one event to another. Each time the clock
advances, the Executive block sends event messages to the blocks that have associated themselves
with that event. There are two types of events: future and current.

446

Advanced Topics
Messaging in discrete rate models

These messages work the same in discrete rate models as in discrete event models. They are discussed fully at Value input and output connector messages on page 305.
Item connector messages
Discrete rate models often have portions that are item-based, using blocks from the Item library.
The Rate librarys Interchange block also has item connectors; it provides a mechanism for interacting with item-based blocks in a discrete rate model.
Item connector messages (primarily wants, needs, and rejects) use a conversation of messages to
propel items from one item-based block to another through the model. The item connector messages work the same in discrete rate models as in discrete event models. They are discussed fully at
Item connector messages on page 307.
Flow connector messages
Flow connectors provide the value of the effective inflow and outflow rates. Flow connector messages cause the effective inflow/outflow rate to be updated for all connected blocks each time the
LP calculation determines that the effective rates have changed.

Discrete Rate

Rate block flow messages


As soon as a block from the Rate library receives a message, if it determines that the effective inflow
and outflow rates might change, it initiates a propagation of these messages. This propagation of
messages is used to define the LP area the area of the model which could be impacted by the
originating blocks change.
Executive block flow messages
When a calculation of a set of effective rates for the LP area has been initiated, the Executive block
calculates the new set of effective rates and sends messages to the blocks in order to propagate the
results. These message update all the blocks in an affected area with a new effective rate.

3D Animation

Introduction to E3D
Some things to know before you run 3D animation

448

Introduction to E3D
What this chapter covers

For communicating a concept, a 3D representation of the spatial location of objects and their
movement over time can be an extremely powerful and effective tool. The ExtendSim Suite package includes a next generation 3D animation capability that is fully integrated with the ExtendSim
simulation environment.
Simulation is concerned with building a logical model of the behavior or performance of a system.
3D animation, on the other hand, involves a model of a physical space. In ExtendSim you can
build a logical model that is separate from the physical model. When 3D animation is desired,
ExtendSim translates the logical model into a 3D representation.
This ability to separate the logical simulation model from the 3D environment is an important
ExtendSim advantage because:
A logical model cannot be directly built in 3D space. If the physical and logical aspects were not
separated, every aspect of your system would have to be created as a physical representation of
the real system. That would be both counter-intuitive and tedious.
You may not need 3D for your purposes, so creating a 3D animation for every model would be
a waste of time.
You can ignore how the model will appear in 3D until the logical model is finished. This
increases productivity since you can concentrate on model behavior and results without being
concerned about layout.
In ExtendSim, 3D animation is available if and when you need it.

E3D

The ExtendSim 3D (E3D) environment is designed to be used both for model presentation and
for model comprehension and debugging. The E3D window provides a fully three-dimensional
representation of the world of the model. The objects modeled in the E3D window maintain
information about their positions in three dimensions as well as their other physical and behavioral
properties. The E3D window is tightly integrated with the rest of the ExtendSim simulation
engine and is open source, so you can control every motion of every object and every aspect of
what is happening in the 3D world.

E3D animation is only available in ExtendSim Suite.

What this chapter covers


This chapter discusses:
Blocks and objects for 3D animation
Overview of 3D animation in ExtendSim
Prerequisites for the E3D module

Blocks and objects for 3D animation


There are two common ways to create 3D animation in ExtendSim: change dialog settings and/or
add specialized 3D blocks to a discrete event model, or build custom blocks that use the 3D functions to perform animations. The first approach does not require any programming; the second
method uses ModL functions to create custom animations that are outside of the discrete event
arena and, if you want, dont even require a simulation to be run.

Item library blocks


The Item library blocks are 3D-enabled. This means that these blocks and the items that pass
through them can quickly segue from the 2D to the 3D world. Most of the Item library blocks
have two tabs with customizable settings that affect 3D animation:

Introduction to E3D
Overview

449

An Item Animation tab for selecting a 3D object to represent the items that leave the block and,
in some cases, for choosing customizable aspects of their appearance (known as skins).
A Block Animation tab for choosing a 3D object to represent the block in the 3D world. You
can also define its scale, rotation, and location in the 3D window, as well as other properties.
Furthermore, the Item librarys Transport block is useful for representing the movement of an item
from one point to another along a path, while the Convey Item block represents moving items
along a conveyor.
The most common way to use the E3D environment is to build a discrete event model using the
Item library blocks and run the simulation with the E3D window open. This displays the model
and its items, events, and results in the 3D world.

ExtendSim includes an extensive collection of 3D objects to represent items and blocks. You can
also add your own 3D objects.

Animation library
Blocks in the Animation library perform specific 3D functions such as enabling sunlight or placing
scenery objects or text boxes in the E3D window. The Animate 3D block provides a non-programming method to perform a 3D action in response to an items passage. For instance, you can create
or delete an object, mount one object on another, and so forth.

Custom 3D objects and blocks


Since the E3D environment is open-source, you can modify the animation capabilities of existing
blocks, create entirely new 3D objects and 3D-enabled blocks, and modify object behaviors.
ExtendSim has numerous ModL functions that allow you to define custom behavior for 3D
objects and events. And GarageGames provides the Torque Script scripting environment which
provides additional control over the animation environment and object behaviors (see Torque
Game Engine on page 451 for GarageGames information.)

Overview
The ExtendSim 3D (E3D) window is where 3D animation occurs. This is a separate window from
the worksheet where you build and run a simulation model. When you run a discrete event simulation with 3D animation on, 3D-enabled constructs from the model worksheet are represented as
graphical objects within the E3D window. The E3D window contains an editor so you can modify
the 3D representation of the model, add objects, and edit the terrain.
For instance, by default the blocks of a discrete event model are represented in the E3D window by
3D block objects, the items that move through the model are represented by 3D item objects, and
the models connections indicate the path of the 3D item objects.

Features
Since it is common to use the Item library to create discrete event models that are then run with
3D animation, the following features are described in regards to the Item library. Keep in mind,
though, that you can build custom blocks that are also 3D-enabled.

E3D

ModL functions can even be used to perform 3D animations that do not require that the model be
run. For instance, the 3D animation of the Boids model was created using custom-built blocks and
does not require the model to be run. The Boids model is located in the folder \Examples\3D Animation.

450

Introduction to E3D
Overview

Animation modes
Each model has a saved 3D animation mode: QuickView, Concurrent, or Buffered. The selected
mode controls aspects of the interaction between the ExtendSim application, the E3D window,
and the ModL block code.
Blocks appear as objects in the E3D window
In a discrete event model, the blocks occupy a 2D model worksheet. 3D-enabled blocks from that
model, such as those from the Item library, also automatically occupy a position within the E3D
window. By default some of these blocks appear as rectangular objects with the same icon as they
have in the 2D model, while others appear as specific objects. For instance, the default is that
Select Item Out blocks appear as rectangular objects in the E3D window but Activity blocks
appear as machines.
Unless you unlink their 2D and 3D positions, the location of the block objects within the E3D
window (their 3D position) depends on their current position in the 2D model.

The appearance and location of block objects in the E3D window can be changed from the
default. This will be shown in the tutorial chapters.
3D items appear as objects and travel on pathways
By default, pathways in the E3D window are initially related to the connections between Item
library blocks in the 2D model. As you will see in Tutorial III, you can modify the default pathways by unlinking a blocks 2D/3D position and moving the block in the E3D window.
In addition, entirely new pathways can be designated by using the E3D Editor to create a named
path between two arbitrary points in the model. Then when an item takes a specific route in the
model, it uses the corresponding pathway in the E3D environment.

E3D

3D objects have collision capabilities


If item objects are specified as being collidable (the default), they will not occupy the same space.
This can be useful to show production lines, traffic patterns, waiting lines, and other queueing situations.
3D objects can mount other objects
In ExtendSim, two or more 3D objects can be temporarily or permanently joined together. This is
known as mounting. For example, a person can get a document from an out-box, transport it to
another part of the model, and place it into an in-box. The document is mounted with the person
during the journey from the out-box and unmounted at the in-box. Objects can even be mounted
on other objects hierarchically; that is, a person can hold a bin that is holding some documents.

The position at which an object can be mounted on another object is called a mount point. Most
objects have only one mount point, but some objects, like people and shelves, have several mount
points that are selectable depending on what object will be mounted.
For custom object builders, the Shelf object has multiple mount point behaviors.
E3D environment is modifiable
Using the E3D Editor you can directly modify the E3D window add scenery objects, modify the
terrain, and change lighting, ceiling colors, and other environmental aspects to fit the model.
These changes to the basic 3D view are saved in environment files.

Introduction to E3D
Prerequisites

451

Torque Game Engine


The E3D environment is based on the Torque Game Engine (TGE) by GarageGames, Inc. This is
a powerful 3D rendering architecture that GarageGames retails as a source code development environment. This provides several advantages, including:
There is a large and growing community of animation enthusiasts who are familiar with the
TGE. They can offer advice and provide consulting services.
A large selection of free and inexpensive ready-made TGE components is available. If a particular component doesnt exactly suit your needs, it can be easily adapted.
Components developed using other standards can be converted to the DTS format used by the
TGE.
Information about the TGE and additional 3D resources can be found on the GarageGames web
site at www.GarageGames.com.

Controlling the E3D environment


Every motion of every object and every aspect of what appears in the E3D environment can be
controlled. Several ExtendSim features contribute to providing this capability:
1) Animation tabs in Item library block dialogs give you a choice of 3D objects to represent items
and blocks in the E3D window. In some cases you can even select particular properties of the
3D object, such as its color or scale. The animation tabs are described on page 532.
2) Specialized blocks that provide 3D features or support E3D behavior. For instance, the Transport block (Item library) discussed on page 540 is useful for representing the movement of
items from one point to another along a path. And blocks in the Animation 2D-3D library,
described on page 540, can be used to cause text and 3D objects to appear in the 3D animation area or to alter the appearance of the 3D world.

4) The environment files can also be customized using the E3D Editor to define the appearance
of the animation area any permanent pathways and 3D objects as well as specific information
about the terrain, sky, sun, and so forth without affecting the appearance of the 2D model.
5) And finally, ModL functions and message handlers allow you to develop customized 3Denabled blocks and specialized 3D functionality. ModL functions can be accessed through
equation blocks or by programming.

Prerequisites
Software and hardware
E3D animation is only available in the ExtendSim Suite product.
A graphics/video card capable of supporting 3D rendering. At a minimum, you will need at least
64 MB of memory on the card and a 3D accelerator. A faster card with more memory will
improve the performance of the E3D window.
The minimum memory required for E3D animation is twice the minimum for ExtendSim.

E3D

3) Settings in the Simulation Setup and Options dialogs affect both the contents of the E3D window and the relationship between ExtendSim, the model that controls the E3D window, and
the E3D window itself. For example, these settings can enable 3D directional sound effects or
cause the animation to run after the simulation rather than concurrent with it. These dialogs
and commands are described in E3D Editor menu commands on page 543.

452

Introduction to E3D
How the E3D module is organized

If your computer does not have QuickTime installed, the color of the 3D objects in the preview
area of Item Animation and Block Animation tabs for Item library blocks may not display correctly. QuickTime is Apple Inc.s technology for handling video, sound, animation, graphics,
and so forth. It can be downloaded for free onto a Windows or Macintosh computer from the
Apple Inc. web site.

Preparation
This module assumes that you have either read the following or have equivalent experience:
Tutorial module, Chapters 1 and 2, starting on page 13.
If you are building discrete event models, as opposed to creating custom 3D-enabled blocks, you
should complete the Discrete Event module that starts on page 91.

How the E3D module is organized


Introduction
Tutorial I exploring the E3D window
Tutorial II animating an existing model in 3D
Tutorial III advanced features such as creating a path and mounting one item on another
Environment Files and the E3D Editor
Objects creating, deleting, scaling, rotating, etc.
Movement, Paths, and Terrains
E3D tips and reference
Performance considerations
ExtendSim commands for 3D
Animation tabs in the Item library blocks

E3D

Animation 2D-3D library


E3D Editor menu commands

3D Animation

Tutorial I
Exploring the E3D window

454

Tutorial I
The E3D environment

This chapter focuses on the E3D window and the appearance of a simulation model in that window. The purpose of this chapter is for you to become familiar with the E3D terminology and
environment. This chapter covers:
Exploring the E3D window
Opening the window and learning about its options
Navigating within the window
3D animation modes
Running a simulation and animating it in 3D
The Tutorial II chapter that follows this one will show you how to add 3D features to an existing
2D discrete event model.

The E3D environment


The first part of this tutorial examines the E3D window and explores its features.

Opening the E3D window


Launch ExtendSim.
Give the command File > New Model to open a blank model worksheet.

The E3D window will not open unless a model worksheet is open. Even if a model is open, the
E3D window will not open if you are not licensed for the ExtendSim Suite product.

Give the command Window > E3D Window or use the toolbars Open E3D Window button.
Depending on the speed of your processor, it may take a little while for the window to open.

Exploring the E3D window

E3D

The E3D window opens as shown to the


right. The window has four interface controls across the top of the window, a title bar,
and a MiniMap. The rest of the window is
the viewing area that displays the animation
environment and a 3D rendering of 3Denabled blocks from the simulation model.
(Since the associated model worksheet is
blank, there are no blocks in the E3D window at the right.)

You can open the E3D window for any


model. However, if there are no 3D-enabled
blocks in the model, the default E3D environment will not contain any 3D objects.
E3D Window in QuickView mode - 2D model is empty

Interface controls
The top left control is a popup menu that
displays the name of the associated model. Only one E3D window can be open at a time, so if
multiple models are open, this popup menu allows you to choose which model will be associated
with the E3D window. The name of the selected model (in this case, Model-1) appears in the
popup and also in the title bar at the top of the window.

Tutorial I
The E3D environment

455

The next control is a popup menu for choosing the specified resolution, or size, of the window.
Clicking this popup displays a list of possible sizes for the E3D window. Selecting a different size
will cause a redraw of the 3D window at the new resolution. Lower resolutions will make the
E3D window smaller; higher resolutions will make the window larger. Resolution information is
stored with the model.

The third and fourth controls are for selecting the speed of the animation, either Slower or
Faster. The selected speed factor (0.25 to 8) is displayed in the title bar in brackets; the default is
a factor of 1. Information about the selected 3D speed setting is stored with the model.
In QuickView mode the speed buttons in the E3D window do not affect the speed of the simulation, only the speed of the 3D animation. In Concurrent and Buffered modes, there is a direct correlation between 3D animation speed and simulation speed.
Title bar
The title bar at the top of the E3D window lists the name of the model associated with the E3D
window, the 3D animation mode enclosed in chevrons (in this case, <QuickView>), the 3D
speed factor displayed in angle brackets (in this case, [1]), and the name of the models environment file (by default, new models use the Extend3D.mis environment file).
Modes are discussed in 3D animation modes on page 458, the speed conversion factor is discussed on page 536, and environment files are described starting on page 490.

The title bar also includes the ExtendSim icon. Clicking the icon (Windows only) reveals the
Move, Editor, and Close commands. The Editor command enables the E3D Editor; editors are
discussed starting on page 491.
MiniMap and camera
The cyan square in the upper right hand corner of the E3D window is the
MiniMap. This is a miniaturized display of the E3D window; it shows the
position of a virtual camera and any local objects as if seen from directly
overhead a location in the E3D window.

The camera can be manipulated programatically using ExtendSim's ModL MiniMap


functions or by the use of keyboard controls, as discussed in the next topic.
As you move the camera around in 3D space, the contents of the MiniMap will change to reflect
the location and direction of the camera, as well as the presence of any other objects in the immediate area.
The arrow in the center of the MiniMap represents the location and direction of the camera. The
X and Y labels at the right and top hand sides of the map, respectively, show the direction of positive X and Y values. The X and Y values at the bottom of the MiniMap report the location of the
camera within the E3D window.
The MiniMap is displayed by default; you can hide the display by unchecking it in the Edit >
Options > 3D tab.
Animation area
The E3D window opens with the default environment for the animation area an unbounded 3D
world with a cloudy sky, a sun, and a flat gridded floor. When the E3D window is associated with

E3D

The 3D camera is a virtual object in 3D space that represents your point


of view of the E3D window what you see in the window is as if you were
looking through the current position of the camera.

456

Tutorial I
The E3D environment

an empty model worksheet, as you have done in this chapter, the 3D world will be empty. When
the E3D window is associated with a model, it will contain 3D objects that represent the 3Denabled blocks in the model.
You can add scenery and fixtures to the E3D window and use 3D features and settings to modify
the terrain, lighting, ceiling colors, and other environmental aspects to fit the model. And you can
change the 3D objects and their location to enhance the 3D animation. This will be shown in
other chapters.
Selecting and moving
Clicking an object in the animation area of the E3D window selects it and causes it to display with
a cyan frame around it. Clicking again unselects it. If the 3D object is the representation of an
ExtendSim block, double-clicking the object will open the dialog box of the associated block.
By default, selecting and moving a block in the 2D model also moves its
object in the E3D window. For instance, if you place an Activity block
Linked positions
(Item library) in the model, you can click and drag it around the worksheet. When you release the mouse, the Activitys representative 3D object
will correspondingly change location in the E3D window. This is because the 2D position of a
block is linked by default to the 3D position of the object, as shown in the Block Animation tab
and the screenshot to the right, above.
You need to use the E3D Editor to move a 3D object directly in the E3D window. If the objects
position is linked to a block, and you move the object with the Editor, it will also move the block.
The Editor is described in The E3D Editor on page 491.

E3D

Changing the associated model


When the E3D window opens, it will be associated with the
currently active model worksheet. If you make another model
the active window, it will not change the E3D windows asso- Associated model popup menu
ciated model. To have that model window be animated in the
E3D window, you must select it from the popup menu at the top left of the E3D window. This
will associate the new model with the E3D window.
Each time you use the associated model popup menu, the 3D window will refresh and redraw with
different contents based on the new model and whichever environment file it uses. Any 3D commands or function calls from models other than the currently associated model will be ignored.

Navigating within the E3D window


The virtual 3D camera is used to navigate the E3D window. This can be done through the use of
keyboard controls to pan and zoom. (You can also navigate using ModL functions in an equation
block or block that you program.)

Click the E3D window to make it active.


To navigate within the E3D window using keyboard controls:
Use the arrow keys on your keyboard to move left, right, forward, and backward. (For lefthanded movement, use the W (forward), S (backward), A (left), and D (right) keys.)

To pan the area, change the direction of the camera by right-clicking the mouse (Windows)
while moving the mouse around the window. (On Macintosh, press the control key while
mousing around the window.)

Tutorial I
The E3D environment

457

Use the mouse to change direction and the keys to move, both simultaneously, to navigate
around the 3D world.
Note how the MiniMap changes as you navigate the 3D space.

You can also use the m key as a mouse-look toggle. Clicking the m key once allows you to use the
mouse to change the direction of the camera without having to right-click. To return the mouse to
normal use, click the m key again.

Manipulating the E3D window


Opening the window
Under the following conditions, the E3D window automatically opens whenever the associated
model opens:
If the command Run > Show 3D Animation has been checked for that model
Or, if Show 3D animation during simulation run has been checked for that model in the Run
> Simulation Setup > 3D Animation tab
If either of these have been checked, and the E3D window has been closed, it will reopen when the
simulation runs.
To manually cause the E3D window to open, do one of the following:
Give the command Window > E3D Window
Or, click the Open E3D Window tool in the toolbar

A model must be open for the E3D window to open. Also, it may take some time for the E3D
window to initialize and open.

There is also an option (Windows only) to allow the E3D window to act like an independent
application window. To do this, choose Edit > Options > 3D tab and check the box for 3D window outside application. After restart, the E3D window will float outside the ExtendSim application window. This is especially useful if you have multiple monitors and you want the model
displayed on one monitor and the E3D animation on the other. (This option is not needed for the
Macintosh since this is the E3D windows default Macintosh behavior.)
Changing the window size
The resolution menu discussed in Interface controls on
page 454 allows you to change the size of the E3D window to
make it easier to view.
Closing the window
The E3D window can be closed:
By clicking the close box in its title bar
With the esc (escape) key

Resolution popup menu

E3D

Moving the window


By default, the E3D window behaves like a child window of the ExtendSim application. With this
setting, the window can be moved within the ExtendSim application window just like any other
ExtendSim window.

458

Tutorial I
3D animation modes

By selecting Close from the menu that appears when you click the ExtendSim icon in the E3D
windows title bar (Windows only)
All three options leave the model window(s) open and the simulation running (if applicable). The
E3D window automatically closes whenever you exit ExtendSim.

The E3D window does not close when you close the associated model; it stays open so you can use
the leftmost popup menu to select another model to animate. Likewise, the model does not close,
nor does the simulation stop, when the E3D window is closed.

3D animation modes
Each model has a saved 3D animation mode which is selected in the 3D Animation tab of the
Run > Simulation Setup dialog and displayed in the E3D windows title bar. The selected mode
controls aspects of the interaction between the ExtendSim application, the E3D window, and the
ModL block code.

Mode descriptions
There are three 3D animation modes:
QuickView shows a default representation of the movement of items in the E3D window while
the simulation is running. In this mode, only one item object moves at a time.
Concurrent is a more realistic animation than QuickView and shows only the movement that
requires simulation time. The 3D animation displays the movement of multiple item objects
simultaneously and runs during the simulation run.
Buffered is similar to Concurrent except it runs the 3D animation after the simulation has
ended.
These modes are discussed in more detail on page 535.

E3D

QuickView versus Concurrent or Buffered


Each 3D animation mode has advantages and disadvantages. The QuickView mode is useful for
getting an instantaneous 3D representation of a model. And with some easy changes to dialog settings, you can quickly run a 3D animation that has a more realistic appearance than the default.
However, because of the way they handle object movement, the Concurrent and Buffered modes
are more likely what you would use for presentation.
The primary difference between the QuickView and the Concurrent or Buffered modes has to do
with time and how the display of items in the E3D window relates to the real world clock.
In the QuickView mode, the amount of real-world time it takes a 3D object to move from one
point to another is not representative of the simulation time it takes that object to move. When
the block code executes a move of an item from one block to another, the code will instruct the
E3D window to show a representation of that move. This will be done without regard to the
ratio of simulation time to real time. This means that the length of time it will take that item to
travel visually from one block to another will be just based on the models animation speed.
In the Concurrent and Buffered modes, the simulation time to real-world clock time ratio is
carefully respected, so each simulation time unit will by default take one second to display in the
E3D window.

Tutorial I
Running a model with 3D animation

459

Running a model with 3D animation


Now that youre familiar with the E3D window and terminology, the next section will show you
how to open and run a model that has been adapted for 3D animation.

Opening the model


Open the Airline Security model located in the \Examples\E3D Animation folder.

Airline Security model

About the model


The Airline Security example is a discrete event model that represents passengers moving through
security lines at an airport. The model includes:
Waiting lines
Carry-on baggage that must be associated with each passenger
A passport examination desk before the security area
Walk-through metal detectors
A special security check station where a random number of passengers are searched
In the Airline Security model, people randomly enter the security area from each of
the two doors on the left. The doors are hierarchical blocks that establish the frequency of passenger arrivals and specific information that will be used in the 3D
world.
The passengers must first undergo a passport check; those who are rejected exit the
airport. The remaining passengers continue to a conveyor where they deposit their luggage for
screening by an x-ray machine. The passengers are scanned by a metal detector, and a random sample is selected for additional search procedures. After the screening process, passengers are united
with their specific piece of luggage and exit the security area.
Accommodations for the 3D world
The model has been specifically adapted to animate in the E3D window in Concurrent animation
mode. The differences between this model and a standard discrete event model are:

E3D

Conveyors with x-ray machines for scanning the bags

460

Tutorial I
Running a model with 3D animation

3D objects have been selected in the Item Animation and Block Animation tabs of Item library
blocks. For instance, each passenger is a Random
person, as shown in the Create blocks Item Animation tab at the right. (You wont be able to see
these selections unless you have the E3D window
open.)

3D object selected in Item Animation tab

Several Transport blocks have been added to animate real-time delays in item movement. These are placed between other Item library blocks so
the E3D window will know how far the item travels from one block/object to another and how
long it will take the item to get there. So that delays in movement are realistically represented,
this information is used as part of the conversion of simulation time in the 2D model to animation time in the E3D window.
Among other tasks, Animate 3D
blocks (Animation 2D-3D library)
within hierarchical blocks are used to
create pieces of luggage that are then
mounted to each passenger.

Animate 3D dialog - mounting luggage

3D Text blocks (Animation 2D-3D


library) have been placed in the model at various locations to serve as labels in the E3D window.
For instance, a 3D Text block places the label Passport Control at the appropriate location in
the 3D window.

E3D

3D Scenery blocks (Animation 2D-3D library) add stationary figures for the various security
stations.

A custom environment file has been created to facilitate the movement of passengers along
paths.
Notice that no programming was required to adapt this model for 3D animation. The only
accommodations were the addition of some animation-specific blocks, the selection of 3D options
in block Item Animation and Block Animation tabs, and modifications to the environment file.

Running the model with 3D animation


To open the E3D window and animate the model:

Give the command Window > E3D Window or click the Open E3D Window button in the
toolbar

Verify that the E3D window is associated with the Airline Security model
Position the E3D window in a convenient location
If you have multiple models open, be sure the model associated with the E3D window is Airline Security. The associAssociated model popup menu
ated model is listed in the E3D windows popup menu,
shown at right.

Give the command Run > Run Simulation, or click the Run Simulation button in the toolbar

Tutorial I
Next step

461

As the animation runs, you will be able to


see security personnel checking passengers
travel documents and passengers placing
their bags on the x-ray conveyors, going
through metal detectors, and then picking
up their correct bags at the end of the
screening process.
This model illustrates many concepts used
in the 3D world such as material handling
and the routing of passengers. Notice that
arriving passengers are randomized (male,
female, etc.) and are of differing heights.
This indicates just some of the flexibility of
the ExtendSim 3D modeling environment.

Next step
The next step is to add animation-specific features to an existing model. You do this in the Tutorial
II chapter that comes next.

E3D

E3D

462

Tutorial I
Next step

3D Animation

Tutorial II
Adding 3D animation to a model

464

Tutorial II
Adding 3D behavior to an existing model

This chapter is an extension of, and assumes you have read, the preceding chapter. It will show you
how to adapt a model so that it generates a concurrent 3D animation. It covers:
Using Concurrent mode to have items move simultaneously
Animating items as 3D objects
Creating 3D objects to represent blocks
Adding scenery and labels to the E3D window
Using a 3D Controller block to clear items at the end of the simulation
Causing the model to automatically open the E3D window
Enabling 3D animation for this model is fairly simple just set options in block dialogs and add
some specialized blocks to the model worksheet.
The chapter that follows this one will show how to perform more advanced tasks: using the Transport block to simulate travel time, determining the length of the path using block positions,
mounting an object on an item object, and creating custom paths that are unlinked from the position of blocks in the 2D model.

The models for this tutorial are located in the folder \Examples\Tutorials\E3D Animation\Production Line. The examples assume some familiarity with discrete event simulation.

Adding 3D behavior to an existing model


In this section you will modify a discrete event model so that it animates in the E3D environment.

The goal
Before starting, look at the finished model to get an idea of what you will accomplish.

E3D

Open the Production Line Final model

Production Line Final model

The command Run > Show 3D Animation has been checked for this model, so opening the
model also opens the E3D window, and running the simulation also runs the 3D animation.
If the E3D window is already opened when this model is opened, be sure the Production Line
Final model is the one associated with the E3D window.

Run the simulation

Tutorial II
Adding 3D behavior to an existing model

465

Navigate around the E3D window

E3D window for Production Line Final model

This is a model of a process where crates full of bottles move along conveyors and are processed
by machines. A random number of crates are sent on one or another branches of the line.
Move the camera in the E3D window so you can see the entire model; zoom in and out to see
the detail.

Open the starter model


Now that you have seen what the final model will look like, you can begin the process of animating a model in 3D:

So that the E3D window is always associated with the correct model, close any open models
Open the Production Line Start model

E3D

Production Line Start model

Model particulars
This model represents a production line consisting of five conveyors and three machines. After the
first conveyor and machine, the line separates into two branches, each of which ends at an exit.
About the model
The production line processes crates full of bottles.
Crates are generated by a Create block, approximately one every 1.1 seconds
They are held in a Queue until pulled into the system
Conveyors are 8 or 10 meters in length, run at 10 meters per second, and have a capacity of 8 or
10 items (depending on the length)
The length of a crate is 1 meter
Depending on the machine, the crates are processed for 1 or 2 seconds
Attendants are posted near each machine

466

Tutorial II
Adding 3D behavior to an existing model

Crates are sent randomly to one of the two branches by a Select Item Out block
All the blocks are from the Item library
The length unit is meters, the time unit is seconds, and the simulation ends after 180 seconds
The 3D animation uses the default Extend3D.mis environment file
Accommodations for 3D modeling
If you are familiar with discrete event modeling, you may notice a difference between this model
and a typical single queue/two server model. In this model, the location argument for the exponential distribution in the Create block is 0.1. In a logical model, the location argument is often
left at zero for expediency. For this model, the location value ensures that the interarrival time can
never be zero there will always be some time between item arrivals.
Other than that, this discrete event model is the same as you would typically build without considering 3D animation.
Running the 3D animation
Use the Open E3D Window button in the toolbar or give the command Window > E3D Window to open the E3D window.

E3D window for starter model

Notice that the window opens in the default QuickView mode.

Place the E3D window in a convenient location and, if desired, change the windows resolution
E3D

using the resolution interface control at the top of the window.

Run the simulation. Since the E3D window is open, the 3D animation will also run.
As the simulation runs, you can see green balls moving in the E3D window just as they might in
a 2D animation. A difference from the 2D model is that the blocks are represented in the E3D
window by their default 3D objects the Create and Exit blocks are displayed as doors, the
Queue as a bin, the Convey Item blocks as conveyors, and the Activity blocks as machines. The
conveyor belt moves, and when a green ball enters the machine the lights go on and the machine
moves, indicating that a process is taking place.

You can have 2D animation turned on simultaneously with 3D animation, but performance will
be better if only one type of animation is on at a time.
Save a model to explore
So that you have a model to work with during the tutorial:

If it is still running, stop the simulation


Give the command File > Save Model As and save the model as 3D Production Line.

Tutorial II
Adding 3D behavior to an existing model

467

Cause objects to move simultaneously


Since QuickView mode is just a visual representation of the 2D model, only one object moves at a
time and items can stack on top of each other in waiting areas. So that the objects that represent
items can move simultaneously and wait in a queue line, the 3D animation needs to be in Concurrent mode.

If it is still running, stop the simulation


Give the command Run > Simulation Setup
In the dialogs 3D Animation tab, choose Select mode: Concurrent. Then close the Simulation Setup dialog.
If you run the simulation again, the green balls should be moving
simultaneously and should order themselves in a line if there is
more than one of them waiting to be processed.

Concurrent mode selected

Create objects to represent items


The specification for this animation is that crates are moving around rather than green balls. To
remedy this, you need to create an object to represent the models items. This involves selecting an
object from a popup menu in a blocks Item Animation tab, as shown below.
An object for the Create blocks items
In the Create blocks Item Animation tab, notice that the behavior is set to Select item animation.
This allows quick customizing of the 2D and 3D animation from popup lists of objects.

If it is closed, open the E3D window


The E3D window must be open in order to select a 3D object.

Open the Create blocks Item Animation tab


In the tabs 3D object frame (shown at right),
select the 3D object CrateBottles

Objects for the items that go to the branches


Selecting 3D object for item animation
The Select Item Out block separates the production
line into two branches. In the blocks Item Animation tab, each row of the table represents one of the two outputs.
So that each branch will show
a slightly different 3D object:

Open the Select Item Out


blocks Item Animation tab

Selecting 3D objects in Select Item Out block

In the Animation Option


column, choose Change to for both rows

Select:
3D object: Crate in the third column of the first row
Skin 1: old for the fourth column of the first row
Skin 2: base for the last column of the first row

E3D

If you run the simulation again crates of bottles,


rather than green balls, move from object to object.

468

Tutorial II
Adding 3D behavior to an existing model

The first row of the table should look like the screenshot, above.

For the second row, select 3D object: Crate, Skin 1: base, and Skin 2: base
Save the model

Save your 3D Production Line model. (The tutorial model is named Production Line 2).
Create objects to represent blocks
For this model, most of the default block/object correlations (Activity blocks as machine objects,
Convey Item blocks as conveyor objects, and so forth) are exactly what you want. Other objects
need to be changed.

This section shows how to create objects and waypoints to represent blocks. Creating an object to
represent a block is similar to creating an object to represent items, except the object is selected in
the Block Animation tab.
Objects that represent blocks are created at a size that corresponds in scale to other objects.
3D objects to represent blocks
Some of the blocks should have their default object representations changed. For instance, instead
of a door, the Create block could be represented as a supply room and the Queue block as a table.
In the Create blocks Block Animation
tab:

If it is closed, open the E3D window


Select Show block in 3D window as:
Kiosk

Enter Rotation: 90 to turn the kiosk


to the proper position

E3D

In the Block Animation tab of the


Queue block:

Selecting 3D object to represent Create block

Enter Show block in 3D window as: Table


This will place a small building at the same location as the previous door object and
replace the Queues default bin object with a table.

Queues, activities, and resources (Item library) have a dialog item so you can limit the
number of items visually represented as a stack in the E3D world. If not overridden,
the default mountStack limit is 10.
Waypoints
Blocks that are superfluous to a 3D animation, such as the Select Item Out block in
this model, should have their appearance in the E3D window minimized. Rather than
being represented by a 3D object, these blocks can be represented by a marked position
in the E3D environment. This minimization of the object is accomplished using waypoints.
In the Block Animation tab of the Select Item Out
block:

Enter Show block in 3D window as: Waypoint

Selecting Waypoint

Tutorial II
Enhancing the model

469

When you do this, the object representation of the Select Item Out block (represented as a block
shape in the E3D window) will disappear and be replaced by an invisible waypoint.
Save and run the model
Save your 3D Production Line mode. (The tutorial model is named Production Line 3.)

Run the model with the E3D window open.


You should see crates traveling from a storage area, being processed by machines that are oriented
in the correct direction.

Enhancing the model


So far you have adapted the 2D model to run in 3D. But there are some additional steps you can
take to enhance the animation.

Add scenery
The model has machines, but no workers. This is easily fixed by adding scenery. Any type of fixed
object that is not already represented by a block in the 2D model can be represented as scenery
people who dont move, furniture, equipment that doesnt perform an activity, walls, trees, and so
forth. There are two ways scenery can be added to a model:
1) Add a 3D Scenery block (Animation 2D/3D library) to the 2D model. This is the simplest
method and is shown below.
2) Use the E3D Editor to add scenery to the E3D window. This has the advantage that it does not
change the 2D model; it is discussed in Using the E3D Editor to create scenery on page 506.
Adding workers
For this tutorial, the workers dont move but are instead part of the scenery.

Place a 3D Scenery block (Animation 2D/3D library) close to each of the three
Activity blocks labeled Machine. By default, the block appears with a minimized
icon.

3D Scenery

Skin 1 and Skin 2 you want.

Enter Rotation: 225


Unselect the checkbox Show 3D footprint in 2D model. This option is sometimes helpful when placing blocks in a 2D model; you do not need it for this model.
The 3D Scenery blocks are linked to the objects. If the workers dont appear in the correct location
in the E3D window, move the 3D Scenery blocks on the model worksheet closer to the Activity
blocks. When you release the mouse, the objects in the E3D window will move accordingly. You
can also play with the rotation to orient them as you want, or change their scale relative to the size
of other objects.

Add a 3D Controller block


At this point you may notice that when you stop the simulation the crates stay wherever they are.

E3D

Be sure the E3D window is open so you can select the 3D object
In the dialog of each of the three 3D Scenery blocks:
For Show block in 3D window as. Then choose a Male or Female object and whichever

470

Tutorial II
Some things to notice

Add a 3D Controller block (Animation 2D-3D library) anywhere in the model.


In its dialog, check Clear items in 3D window when simulation ends.
When you run the simulation, all the crate/items will disappear when the run ends
but the scenery (the workers) and the objects that represent the 2D blocks (the
kiosk, conveyors, machines, and doors) remain.

3D Controller

Save your 3D Production Line model. (The tutorial model is named Production Line 4.)
Since item objects will automatically be cleared from the E3D window at the start of the next simulation run, the 3D Controller block is not really necessary for clearing items in this model. Note,
however, that the block has several uses for controlling the E3D window, such as turning on/off
the clouds and changing the color of the ceiling/sky.

Launch with the E3D window


So that you dont have to manually open the E3D window, you can choose to have the window
open automatically each time the model is opened. To do this, do one of the following:
1) Either give the command Run > Show 3D Animation
2) Or, in the Run > Simulation Setup > 3D Animation tab, check Show 3D animation during

simulation run

If the E3D window is subsequently closed, it will reopen when the simulation is run.
The final model, with the E3D window opening when the model is launches, is labeled Production Line Final.

Some things to notice


Now that you are familiar with this model, it is a good time to investigate some 3D features.

Internal animation

E3D

As you saw for the Production Line models, some 3D objects contain internal animation that
shows the status of the object during the simulation. For instance, the Machine object supports
four internal animation states (running, idle, blocked, and down) while the Conveyor animates a
running belt.
If you dont want to see this behavior, unselect Enable animation of 3D object in the Block Animation tab of the activity-type blocks (Activity, Convey Item, Transport, and Workstation).

The default object for a Transport block is a Waypoint so this option is unchecked by default.

Rotation of 3D objects
While you needed to rotate the Kiosk and scenery objects, most objects are oriented correctly for
the flow of items in this model. This is because ExtendSim will try to place objects using the correct rotation for the model.
For example, the machine objects are oriented for a left to right flow of items. Furthermore, you
did not need to change the rotation in the Convey Item blocks. When the E3D window opens, the
rotation parameter for this blocks object automatically adjusts to reflect how the block is connected in the model. For instance, Conveyors 2A and 2B are horizontal in the 2D model but are
displayed at an angle in the E3D window.

Tutorial II
Some things to notice

471

Mounting objects
You may have noticed that the item objects move in the E3D window as you would expect them to
the crates move along the conveyor and the machines process the crates as they arrive. You will
see how to explicitly mount objects in the next chapter. But for this model, there was no need to
explicitly cause one object to be mounted with another object
The movement of items in the Production Line model is due to two E3D features:
Item objects automatically use the from and
to location information in the Transport
Animation tab of the Convey Item block.
The default is that the from location is the
previous non-passing block and the to location is the next non-passing block. This causes the
item object to be displayed as moving along the path represented by the Convey Item blocks
object. (The options on the Transport Animation tab will be discussed further in the next chapter.)
By default the Item Animation tabs of
Activity blocks are set to Mount item
while activity is ongoing. This causes
the item object (the crate) to stay with
the Activitys object (the machine) until it has finished its processing. (As you will see in the next
chapter, you may not always want that behavior.)

Moving blocks linked to objects


For the Production Line models, each of the objects in the E3D window are linked to the blocks in
the 2D model. This is seen in their Block Animation tabs, where the checkbox Link 2D/3D positions is selected by default.

For example, moving Conveyor 1 between the Queue and Machine 1 will not change the location
of its conveyor object in the E3D window. However, moving either the Queue or Machine 1 will
result in a change in the conveyors position.

You will not be able to see the change in position until the simulation is run.

Conveyor
The Convey Item block (Item library) moves items along a conveyor, oven, cooling unit, moving
walkway, or any other type of moving path. The items travel from the starting point to the end
along the length of the conveyor.
The block has three options for setting the travel time:
Move time. The item is delayed for the specified time; speed and length are ignored.

E3D

If the 2D and 3D positions are linked, moving most types of blocks in the model will also directly
move their objects in the E3D window. However, the Convey Item block has more complex
behavior. If its Block Animation tab is set to Stretch 3D object to conveyors length (the default
setting), moving the block itself will have no effect on the position of its 3D object. That is because
its displayed length is based on the starting and ending points of the conveyor in the model. If the
from location is the previous non-passing block, and the to location is the next non-passing block
(the default settings), the conveyor will be stretched between those two locations regardless of the
position of the Convey Item block.

472

Tutorial II
Some things to notice

Speed and length. Speed and length are entered in the dialog.
Speed and calculated length. Speed is entered in the dialog; length is determined based on dialog
settings and block positions (the from and to locations).
These options are described fully on page 195. For this model, the conveyors speeds and lengths
are all known and have been entered in their dialogs. In the next chapter, you will see how to use
the speed and calculated length option to cause the block to automatically determine its length.

Item length
The Behavior tab of a Convey Item block has options
Item length setting
for specifying the length of
items. The items length can
be a constant, from an attribute, or based on length and capacity. In the Production Line models,
item length is set at 1 meter for all the Convey Item blocks.
Whichever item length option is selected, the 2D picture or 3D item object does not visually
change. However, the item length does affect calculations for accumulation and capacity, as well as
the timing of when items are pulled onto and released from the block.

If either speed and length or speed and calculated length has been selected as the travel time,
the items length is expressed as either feet or meters. However, if move time has been selected as
the travel time, the items length is expressed in time units. Thus for a move time of 10 time units,
a constant item length would be x time units.

Conveyor capacity

E3D

The capacity for a Convey Item block can be entered in the blocks dialog. However, regardless of
what is entered in the dialog, the blocks actual capacity is the lesser of either the entered capacity
or the length of the conveyor divided by the length of the item.

3D Animation

Tutorial III
Advanced 3D topics

474

Tutorial III
Animating a bank line

This chapter is an extension of, and assumes you have read, the preceding two chapters. It will
show how to:
Use Transport blocks to animate people walking from one location to another
Determine the distance the people need to walk based on block positions
Mount a 3D object on an object that represents an item
Use hierarchical blocks in 3D animation
Unlink an objects position from the corresponding blocks position
Create custom paths that are unlinked from the position of blocks in the 2D model

Create and save an environment file


The models for this tutorial are located in the folder \Examples\Tutorials\E3D Animation\Bank
Line. These bank line models assume some familiarity with discrete event modeling.

Animating a bank line


This chapter illustrates how to use some of the more advanced ExtendSim 3D capabilities. So that
you can focus on the features in this chapter, the example model already has some accommodations for 3D animation. Those 3D accommodations were covered in the preceding chapter and are
listed on page 476.

The goal
Before starting, look at the finished model to get an idea of what you will accomplish.

Open the 3D Bank Line Final model

E3D

This is a model of customers arriving, waiting in a line, being served by one of two tellers, and
then exiting a bank. The command Run > Show 3D Animation has been checked for this model,
so opening the model also opens the E3D window, and running the simulation also runs the 3D
animation.

Run the simulation


Navigate around the E3D window
Move the camera in the E3D window so you can see the entire model; zoom in and out to see
the detail. As the simulation runs, you will see customers entering the bank, forming a single
line, getting their paperwork ready, walking to one of the tellers, being waited on, and leaving
the bank.

Close the 3D Bank Line Final model


Open the starter model
Now that youve seen the goal, you can start adding 3D functionality to a starter model.

Tutorial III
Animating a bank line

475

Open the 3D Bank Line Start model. (Unlike the final model, this model is set to open without
opening the E3D window.)

3D Bank Line Start model

Animate the model in 2D


So that you can see some action in this model:

Select the command Run > Show 2D Animation


Run the model
Model particulars
In this model, customers enter the bank randomly, approximately one every 5 seconds. Gate
blocks restrict access to the tellers so that each teller can have only one customer in front of them at
a time; all other customers must wait in the Queue block.

Differences from typical discrete event models


If you are familiar with discrete event modeling, you may notice some differences between this
model and a typical single queue/two server model:
1) The location argument for the exponential distribution in the Create block (labeled People
Arrive) is 1. In many discrete event models the location argument is left blank for expediency.
For this model, a location value of 1 ensures that the interarrival time can never be too close to
zero there will always be at least one second between item arrivals. The real-life correlation is
that people dont walk through a door at exactly the same time.
2) The time it takes a customer to walk from the waiting area to a teller is explicitly represented
by a Transport block (labeled Walk to Teller). In many discrete event models, the travel time
would not be considered significant or would be just added to the time it takes to perform the
transaction. This model takes travel time into consideration, because for 3D animation you
want to see the customers moving from the waiting area to the teller.

E3D

When a teller becomes available, the first customer in the queue walks to that teller. The walk takes
5 seconds and Transport blocks (labeled Walk to Teller) are used to delay the customer for that
amount of time. Activity blocks (labeled Transaction) represent the time it takes for the transaction
with the teller. The transaction time is specified by a triangular distribution with a minimum of 2,
a maximum of 10, and a mostly likely time of 5. After finishing the transaction, the customer exits
the bank.

476

Tutorial III
Animating a bank line

3) There is a large gap between the Queue (Wait) and the Select Item Out (Choose a Free Teller)
blocks. This just provides space for inserting some blocks without having to move everything.

Animate the model in 3D


In the 3D Bank Line Start model:

Unselect the command Run > Show 2D Animation. (For maximum performance, you do not
want 2D animation running concurrently with 3D animation.)

Open the E3D window


Verify that the E3D window is associated with this model
Run the simulation. Since the E3D window is open, the simulation will animate in 3D.

As the model runs, you may notice some interesting behavior. This is discussed below in What
this model needs.

Accommodations for 3D animation


The Bank Line model has already been modified for 3D animation in the following ways:
3D animation has been set to run in the Concurrent mode.
Objects to represent items and blocks in the E3D window have already been selected:
Items generated by the Create block (People Arrive) appear as random people
The Queue block (Wait) is represented by a door
The two Transport blocks (Walk to Teller) are, by default, waypoints
The two Activity blocks (Transaction) appear as desks
The Create, Select Item Out, and the two Gate blocks have been set as waypoint objects

E3D

Two 3D Scenery blocks (Animation 2D-3D library) provide male and female tellers, with different skins, as scenery objects in the E3D window.
A 3D Controller block (Animation 2D-3D library) clears items in the E3D window when the
simulation ends.
Since these modifications were illustrated in the previous chapter, they are not repeated here. This
chapter will instead focus on other ways to enhance the 3D animation.
What this model needs
There are several odd things that you may have noticed about the customers in this model. For
instance, they:
Line up in the doorway, sometimes on top of each other
Didnt bring any paperwork to the bank
Stand on top of the tellers desk while completing their transactions
Jump, rather than walk, into the bank and from the teller to the exit
The following sections show how to solve these problems.
So that the tutorial models arent overwritten, you need to have your own model to work with during this tutorial.

Tutorial III
Unmount the Activity blocks

477

Save a model to explore


Give the command File > Save Model As and save the model as My 3D Bank Line

Unmount the Activity blocks


By default, Activity blocks are set to have an items 3D object mount the block object while the
activity is ongoing. While this was useful in the Production Line models of the previous chapter,
where crates were being processed by machines, you dont want customers standing on desks.
In the Item Animation tab of both Activity blocks (labeled Transaction):

Uncheck the option to Mount item while activity is ongoing


Run the simulation with the E3D window open

Mount option unchecked

Now the customers will stand in front of the desks, rather than jump onto them.

Save your model. (The equivalent example model is 3D Bank Line 2.)
Either leave the E3D window open or close it if you prefer. (If you close it, you will need to
open it to perform any 3D operation or to run the animation.)

Add Transport blocks


The Production Line model for the previous chapter used Convey Item blocks to represent a moving path from the start to the end of the conveyor. Likewise, the Transport block is useful for displaying the movement of an item from the start to the end of a path.

Animating the travel time


To show events as they occur in a model, 2D animation normally displays items moving from one
block to another without a time delay. This is the type of 2D animation that is shown when the
Run > Add Connection Line Animation command is enabled.

Until a teller is available, the people have no place to go as they wait in line. If customers arrive
at about the same time, or if the tellers cant keep pace with the arrival of customers, the Queue
block will show its contents (the customers) stacking on top of each other.
The 2D model does not move people along a path at a specific velocity. The 3D world needs
Transport blocks to not only represent how long the journey takes but to also show the people
moving along a path during that time.
To have an animation where items dont jump from one block to another or stack on top of each
other as they wait in line, you need to show them moving along a path as they are delayed. This is
accomplished by setting a travel time in a Transport block (Item library). This results in an animation delay that corresponds to the time that the item spends in transit from one location to
another.

What the model needs


For this model, you need to add:
A path for the waiting line, consisting of one Transport block between the Queue (Wait) and the
Select Item Out (Choose a Free Teller) blocks

E3D

When a model is animated in 3D, the 3D item objects will likewise move from one 3D block
object to the next without any time delay. This is seen in the Bank Line models, where customers
move instantaneously from the Queue to the Activity blocks and from the Activity blocks to the
Exit and can stack one above another. There are two reasons for this:

478

Tutorial III
Add Transport blocks

Two paths to the exit, each represented by a Transport block between the Activity blocks (Transaction) and the Exit
The tutorial also shows how to minimize the icons of the Transport blocks already in the model.

For this part of the tutorial, it is assumed that customers take 5 seconds to reach any destination.

Walking and waiting in a line


A Transport block can provide a mechanism to show
people walking into the bank and lining up instead of
stacking on top of each other.
In your My 3D Bank Line model:

Right-click the Queues item output connector

Right-click the Queue blocks item output connector.

Choose Add Transport following this block


This inserts a Transport block between the Queue and the Select Item Out blocks. By default,
the block is inserted with its icon view set to Left-to-right (small).

In the Transports Behavior tab:


Choose Travel time: move time (the default)
Enter Move time: 5 seconds
Label the block Walk in Line
Leaving the bank

E3D

In the current model, customers walk to the teller desk, finish their transactions, and then disappear. You could just leave the model like that, but it would be more fun to see customers walking
to the exit. Transport blocks between the Activity blocks and the Exit block will show customers
walking out of the bank.
When there is more than one connection line from the output of a block, you should create a
Transport block directly in the model rather than right-clicking to insert it. Otherwise, the Transport block could get inserted onto the wrong connection.
To manually place the Transport blocks:

Delete the connection between each Activity (Transaction) and the Exit.
Insert a Transport block between each Activity and the Exit.
Connect the Transport blocks between the Activity
and Exit as shown here.

In each Transport blocks Behavior tab


Choose Travel time: move time (the default)
Enter Move time: 5 seconds
Label the Transport blocks Walk To Exit 1 and
Walk To Exit 2

At the bottom of the dialog, select Left to right


(small), rather than Left to right, for the icon
view

Transport blocks for leaving the bank

Tutorial III
Block positions to determine a paths length

479

Minimizing the icons of the existing Transport blocks


Since the Transport blocks that you have added use small icons, minimize the icons of the Transport blocks that were originally in the model.

Either right-click the Transport block labeled Walk to Teller 1 or


select the icon view popup menu at the bottom of the blocks dialog.

Select Left to right (small), as shown at the right. This changes the
blocks appearance in the model so that it uses a smaller icon.

Do the same steps for the Transport block labeled Walk to Teller
2.

If necessary, move the blocks so that the connection lines are straight.
Save your My 3D Bank Line model. (The equivalent example model is 3D Bank Line 3.)
The model so far
If you have followed this tutorial, your model should look similar to the following screenshot:

Run the model again with the E3D window open.


The customers now line up after the entrance and walk, rather than jump, from the teller to the
exit. However, they walk at different speeds. This is because the time to get to the end of a path has
been set to a constant 5 seconds. But the lengths of the three paths (from the entrance to the head
of the waiting line, from the waiting line to the teller, and from the teller to the exit) are all different.
Furthermore, unlike the Convey Item blocks in the Production Line models of the previous chapter, the length of the bank lines is not known in advance. In this case, settings in the Transport
blocks can be used to determine the length of the paths. (The problem of customers walking
through the desks will be solved later using custom paths.)

Block positions to determine a paths length


As discussed on page 192, the Transport block has three options for expressing the items travel
time:
Move time. This acts just like a delay in an Activity block. As you can see in the current model,
the items speed and the length of the path are ignored.

E3D

3D Bank Line 3 model

480

Tutorial III
Block positions to determine a paths length

Speed and distance. How fast the item is moving, and how far the item must travel to reach its
destination, are entered in the blocks dialog. This is useful if you know the length of the path.
Speed and calculated distance. The items speed is entered in blocks dialog. The distance is
determined from information entered in the frame labeled Select From and To locations for
calculated distance. This is useful when you dont know the length of the path, but you know
its starting and ending points.
The third option, speed and calculated distance, will provide a more natural walking pace for customers in this model, since it considers not only their speed but how far they have to go.

Setting the speed and determining the distance


Each of the Transport blocks in this model need to be changed to calculate the length of the path
the customers will take.

Rather than the constant move time of 5 seconds in the previous section, this part of the tutorial
assumes a natural walking speed of 5 feet per second.
Walking to the front of the line
In the dialog of the leftmost Transport block
(Walk in Line):

Select Travel time:


speed and calculated
distance.

Enter Item speed: 5


feet/second.

E3D

In the frame that


appears at the bottom Frame for calculating the distance items travel
of the blocks dialog
(seen at right), do not change the default settings.
The calculated distance
Based on the frames default settings, this path starts at the Queue (the previous non-passing block)
and ends at the Select Item Out (the next non-passing block). The distance is calculated in a
straight line and the default distance ratio is used to convert the metrics of the 2D model into
coordinates in the E3D window. Since the default settings in the blocks Behavior tab are exactly
what you want, you do not need to make any changes in the frame that calculates the distance.
See How the length is calculated on page 196 for a more detailed explanation of the calculation.
Walking to the teller
In the dialog of the two middle Transport blocks (Walk to Teller):

Select Travel time: speed and calculated distance


Enter Item speed: 5 feet/second
Do not change the default settings in the frame that appears at the bottom of the dialogs.
Notice that the Transport block automatically calculates not only the length of the path but how
long (the move time) it will take the customer to reach the end. This information is reported in the
blocks Behavior tab.

Tutorial III
Mounting objects

481

Leaving the bank


In the dialog of the two Transport blocks (Walk to Exit) on the right side of the model:

Select Travel time: speed and calculated distance


Enter Item speed: 5 feet/second
Do not change the default settings in the frame that appears at the bottom of the dialogs.
Notice that, although the customers walking speed stays the same in every Transport block, each
path is determined to be a different length.
Run the animation and save the model

With the E3D window open, run the simulation


Now the customers should be walking at the same pace from one location to another.

Save your model. (The equivalent example model is 3D Bank Line 4.)

Mounting objects
You may have noticed that the customers did not bring any paperwork with them. The ExtendSim
mounting feature can be used to indicate that customers have some paperwork (for instance a
check, withdrawal slip, or loan document) as they approach the teller.
In the previous chapter you saw how item objects (crates) are mounted on Activity block objects
(machines) by default. In this chapter, the object must be mounted onto an item object in other
words, paperwork mounted onto the customers.

Steps for mounting an object


Since the paperwork is not already part of this model, you need to:
1) Create a paper object
2) Create an attribute to track the object
3) Mount the paper with the customers.
so that there is minimal disruption to the model
The Animate 3D block (Animation 2D-3D library) is an advanced method for executing an animation action in the E3D window as an item passes through the block. It is useful for creating and
mounting objects.

Create the object


If it isnt already open, open the E3D window
Delete the connection between the Transport (Walk in Line) and Select Item Out (Select a Free
Teller) blocks

Place an Animate 3D block (Animation 2D-3D library) above and to the


right of the Transport block

Connect the Transport blocks output connector to the input connector of


the Animate 3D block as shown here. (For now, do not connect the output of
the Animate 3D block.)

E3D

4) Enclose the blocks in a hierarchical block

482

Tutorial III
Mounting objects

In the Animate 3D blocks Item


Animation tab:

Select 3D action: create


object (this is the default
option)

Creating a paper object in the Animate 3D block

Choose the option Select object from list


In the popup menu that appears, select the Paper object
Select Skin 1: Random skin (the default)
Label the block Create Paper
Create an attribute
The next step is to create an attribute so that the objectID of the paper object can be stored and
used elsewhere in the model. (This is described in Adding item attributes to a model on
page 122.)
In the Item Animation tab of the Animate 3D block (Create Letter):

Select Store objectID of created object in: New value attribute

Name the new value attribute Letter


Close the blocks dialog

Creating an attribute

As discussed on page 522, every object has an objectID. This is a unique value that the E3D environment uses to identify the object.

Mount the object on the item

E3D

The next step is to mount the paper object onto the items.

Place another Animate 3D block to the right of the first one.


Connect the blocks together so that the output of the first
Animate 3D block is connected to the input of the second
Animate 3D block, and its output is connected to the input of
the Select Item In block.

In the blocks Item Animation tab:


Select 3D action: mount object
Choose Rider object: Letter
Select Mount object: _3D objectID

Label the block Mount Paper

Mounting a paper object using the Animate 3D block

For objects that represent items, the value of their ObjectID is stored in their _3D objectID property. This allows you to perform actions on item objects by referencing that property.

Save the model


Run the animation

Tutorial III
Unlinking objects from blocks

483

As customers reach the front of the line, they bring out their paperwork. However, there are two
unnecessary block objects in the E3D window.

Create a hierarchical block


The final step in this section is to enclose the Animate 3D blocks into a hierarchical block.

Frame-select the two Animate 3D blocks


Give the command Model > Make Selection Hierarchical
Name the new hierarchical block anything you want and click OK to close that dialog
In the dialog of the hierarchical block, label the block Mount Paperwork
Reposition the models connection lines as desired
Save the model. (The equivalent example model is 3D Bank Line 5.)
In the E3D window, notice that the Animate 3D blocks are no longer represented by objects.

By default, Animate 3D blocks appear in the E3D window as a block object. However, hierarchical
blocks and the blocks within them normally have no representation in the E3D window. See
Hierarchical blocks and 3D animation on page 532 for how to change this.
Your model should now look similar to this:

E3D

3D Bank Line 5 model

The next two sections involve the positioning of objects in the E3D window. It is a good idea to
not make changes to the layout of the 2D model after positioning objects using the E3D Editor.
Otherwise, you may need to reposition those objects.

Unlinking objects from blocks


Customers now enter the bank, wait in line, and walk from the front of the line to the first available teller. However, the waiting line is pretty short and the walk to a teller is rather long. To
lengthen the waiting line, you could do either of the following:
1) Move the Select Item Out block (Choose a Free Teller) closer to the Transport block (Walk to
Teller). This would make a messy model.
2) Unlink the 2D position of the Select Item Out block from its 3D object, then just move the
object. This will be shown below.

Although mentioned in this chapter, the E3D Editor is discussed in detail in the next chapter.

484

Tutorial III
Creating custom pathways

Unlinking positions
In the Block Animation tab of the Select Item Out block, unselect the
option Link 2D/3D positions, as shown at right.

Make the E3D window the active window


Enable the World Editor by pressing F11
In the animation area, select the waypoint object

Unlinking positions

labeled Select Item Out3. When the object is


selected, information about it is displayed in the
panes to the right of the animation area. The
objects label is highlighted in the Tree pane at the
top right of the window and its properties are
listed in the bottom right Inspector pane, shown
here.

In the Editor, each object in the E3D window is labeled with a name ending with a number that
corresponds to the blocks global block number. The global block number for the Select Item Out
block is 3. To see a blocks global block number, open the blocks dialog or use the command
Model > Show Block Numbers.

Drag the object to the right so that it is located closer to the teller desks. You can select the
object and drag it or use the Gizmo to move it. (The Gizmo will be discussed on
page 493.) This should put its position on the X axis at about 20 (the screenshot above
shows the position as 20.55). Be sure to only drag the object in the direction of the X axis!

Press F11 again to return to the E3D window


Save the model. (The equivalent tutorial model is 3D Bank Line 6.) Since the object represents
a block in the 2D model, saving the model also saves the position of the unlinked 3D object.

E3D

Creating custom pathways


Predefined custom paths allow you to mark each intermediate step along a predetermined route.
They provide more flexibility than just choosing to have item objects move in a straight line or
along connections and are a convenient way to have item objects move around block objects in the
E3D window.
The E3D Editor provides control over every aspect of the E3D window. In its World Editor Creator (WEC) mode, it can be used to create custom pathways.

Although it is mentioned in this chapter, the E3D Editor is discussed in detail in the next chapter.
Custom paths are described more fully in Paths and markers on page 525.

Use the correct Transport behavior


Before creating the paths, you need to change the setting in two of the Transport blocks. If Travel
time: speed and calculated distance is selected for the Transport blocks Behavior tab (as it is in
this model), the following factors are used to calculate the transportation time:
Speed
The starting and ending points in the 2D model
The distance ratio
Whether the Transport calculates distance along connection lines or in a straight line

Tutorial III
Creating custom pathways

485

If you instead select a custom path, the calculated travel time may not be appropriate. This is
because the 2D distance is unlikely to be the same as the distance for the custom path.

When using a custom path, you should first change the setting in the Transport blocks Behavior
tab to Travel time: speed and distance. (If you dont do this, ExtendSim will give you a message
and make the change for you.)
In the Behavior tab of the two Transport blocks labeled Walk to Teller 1 and Walk to Teller 2:

Select Travel time: speed and distance


Creating paths
In the next sections you will:
1) Create a new environment file
2) Create a path object
3) Create marker objects and positioning them on the path
4) Select the custom path in the Transport block

Create a new environment file


An environment file holds information that is not saved with the model, such as static objects,
paths, and terrain changes. The default environment file, Extend3D.mis, cannot be changed.
When you modify the E3D environment by creating custom paths or changing the terrain, you
must either create a new environment file or save the default environment file under a new name.

If it isnt already open, open the E3D window


Be sure your My 3D Bank Line model is the associated model (is displayed as the active
model in the popup in the upper left hand corner of the E3D window)

in the same directory or folder as your model is located.

Press F11 to leave the E3D Editor and return to the E3D window
Save your model.

My 3D Bank Line.mis will now be listed as the environment file in the Run > Simulation Setup
> 3D Animation tab.
When you create a new environment file, the model must also be saved. This ensures that the
model will be associated with the proper environment file.

Create a path object


In your My 3D Bank Line model:

If it isnt already open, open the E3D window


Press F11 to go to the E3D Editor
Press F4 to select the World Editor Creator (WEC) mode
In the WEC Creator Tree (the lower pane on the right):

E3D

Press F11 to go to the E3D Editor


Give the command File > Save Environment As
Save the environment file as My 3D Bank Line.mis (the default option). It will be saved

486

Tutorial III
Creating custom pathways

Open the Mission Objects category


Open the Mission sub-category
Click the Path object
In the dialog that appears, name the path ExitTeller1 and click OK to close the dialog
The path named ExitTeller1 will be listed at the bottom of the Tree pane (the upper pane on the
right) within the SimGroup-Mission Group category.

Create path markers


Each path will require four pathmarkers, each of which is created in exactly the same way. Pathmarkers are stored in the paths folder.
Create Point1
In the Creator Tree pane (the lower pane on the right):

Open the Mission Objects category


Open the Mission sub-category
Click the PathMarker object
In the dialog that appears, name the marker Point1 and click OK to close the dialog. A
marker named Point1 will appear in both the animation area and at the bottom of the
Tree pane.

The E3D engine does not allow spaces in the names of markers or objects. If you enter a space in
the name, ExtendSim will warn you.

Expand the Tree pane (the upper pane on the right) so that all the objects are listed
At the bottom of the Tree pane:
Click and drag the marker named Point1 until it reaches and
E3D

selects the path named ExitTeller1. The paths name will be


highlighted when it is selected. This will both create a path
folder named ExitTeller1 and store Point1 within that folder,
as shown on the right.
Create the remaining markers
Create three more markers by repeating the steps used to create
Point 1

Name the path markers Point2, Point3, and Point4


Store the new markers in the ExitTeller1 path folder
Path folders with markers

Position the markers


In the animation area of the E3D window, drag Point1 so that it is
in front of the desk for the topmost teller. This is the start of the path.

Position the other three markers in the E3D window so that they will cause customers to go

around the desk and walk up to the exit. The marker labeled Point4 is the end of the path.
For accurate placement, zoom the camera towards the desk so you can see both the front of the
desk and the exit door.

Tutorial III
Enhancing the model

487

Give the command File > Save Environment As, to save the environment file
Press F11 to exit the Editor
Leave the E3D window open
Select the path
The next step is to use the ExitTeller1 path in the model.

In the Transport Animation tab of the Transport


block (Walk to Teller 1),
select the path ExitTeller1, as shown here.

Click the button Get distance from 3D path length. This places the length of the path in the
Distance field of the blocks Behavior tab and ensures that the model behavior will be the same
whether or not the E3D window is active.

Run the animation. Now when customers get to that teller, they will walk around the desk
rather than through it.

Save your model


Repeat the process for another path
Repeat the above steps to create an ExitTeller2 path with four markers (Point1, Point2, Point3,
and Point4) positioned correctly so customers walk around the desk.

Select the path ExitTeller2 in the Transport Animation tab of the Transport block labeled Walk
to Teller 2.

Click the button Get distance from 3D path length.


Save the model.
Run the animation to make sure both paths work correctly. If customers do not move along the
route you want, go to the E3D Editor and move the markers to a better position.

Paths are discussed in more detail in Creating paths on page 525.

Enhancing the model


There are several other E3D features that could enhance this model. For instance, the 3D Bank
Line Advanced model, located at \Examples\Tutorials\E3D Animation\Bank Line, shows how the
customers at this bank could leave paperwork on the tellerss desks.

E3D

The equivalent tutorial model is 3D Bank Line Final. Notice that the distance using the custom
path is much longer than the distance that was calculated. This is because the customers now must
walk around the desks to get to the exit, rather than walking through the desks.

E3D

488

Tutorial III
Enhancing the model

3D Animation

Environment Files & E3D Editors


The appearance of the E3D window and how it can be modified

490

Environment Files & E3D Editors


Environment files

As you saw in Tutorial II on page 463, you can add blocks to a 2D model to modify aspects of
the E3D windows animation area insert scenery or text labels, turn the sun on or off, and so
forth. And you can enable environmental aspects such as vehicle trails and shadows by going to the
Edit > Options > 3D tab.
The appearance of the animation area can also be modified by using the ExtendSim E3D Editor to
alter the models environment files, without altering the 2D model.
This chapter discusses environment files and the E3D Editor. It will focus on the E3D windows
animation area and the editors that can be used to add pathways, create or manipulate objects in
the E3D window, or modify the terrain.

Additional information about the functioning of the E3D/World Editor can be found by reading
the Torque World Editor documentation at GarageGames.com.

Environment files
The environment file defines the appearance of the animation area in an E3D window. It provides
environmental information lighting, terrain, and so forth as well as the location of paths and
3D objects that are not shown in the model worksheet.

E3D

A models 3D environment is selected by


choosing an environment file in the Run >
Default environment file in 3D Animation tab
Simulation Setup > 3D Animation tab.
The default is the Extend3D.mis file that
provides the environment you see on opening a default E3D window a perfectly flat, gridded terrain with sun and clouds.
Each 3D model has two animation
files: a .mis (mission) file that contains information about the pathways and any 3D objects that exist
by default in the 3D animation
area, and a .ter (terrain) file that
supplies information about the terrain texture and so forth. The two
files will have the same name but a
different extension; they are collectively known as the environment
file. Thus when you select
Extend3D.mis as the environment file in the 3D Animation tab
of the Simulation Setup dialog,
you are also selecting the associated Extend3D.ter file.

Modifying the environment

Default E3D windows environment for an empty model worksheet

Defining a custom environment allows you to specify the placement and location of fixed objects
(such as desks, workstations, and interior walls) that you want to have appear by default in the
E3D window, as well as a custom terrain and any custom paths and waypoints the model might
use. This is accomplished by using the E3D Editor, discussed below, to cause changes to the E3D
window that do not impact the 2D model. The information about these modifications is stored in
the environment file for the model.

Environment Files & E3D Editors


The E3D Editor

491

By default, environment files are saved at the same location as the model they are associated with.
Whenever the E3D window is opened, the environment file for the associated model will be used
to populate the E3D window.
The default environment file, Extend3D.mis, can be accessed by every model. Only custom environment files need to be saved in the same location as the model they are associated with.

The E3D Editor


The E3D Editor is an interface to the E3D window that provides extensive and sophisticated control over the contents and appearance of the window. It allows you to alter aspects of the E3D animation area without affecting the appearance or structure of the 2D model. It provides greater
flexibility than using blocks from ExtendSim libraries and it allows you to perform tasks you cant
do using library blocks, such as:
Defining custom pathways that are not linked to the position of the 2D models blocks.
Placing 3D objects directly in the E3D window, without having to add them as blocks in the 2D
model.
Creating specialized terrains, such as adding contours to the floor, removing its grid, or using a
different floor pattern
To give a very advanced animator complete control over the E3D environment.

Learning about the E3D Editor


So that you can more clearly see how the E3D Editor works:

Place an Activity block (Item library) anywhere on a new model worksheet, as


shown on the right.

Save the model as EditorExploring.


Accessing the Editor

With the EditorExploring model the active window, open the E3D window.
Activate the E3D Editor using one of the following methods:
Click the F11 key on your keyboard.
Or, click the ExtendSim application icon at the left side of the E3D

window (Windows only). This causes a menu to appear so you can


select the Editor.
If the Editor does not open correctly on a Macintosh, be sure there is no
default keyboard shortcut for F11 in the System Preferences > Dashboard & Expose dialog.
Exiting and closing
To exit the E3D Editor, use the close box at the top of the window. This also closes the E3D window. To toggle between the E3D Editor and the E3D window without closing either of them, use
the Toggle E3D Editor command or the F11 key.

E3D

The appearance of this window is defined by the default environment file Extend3D.mis.

492

Environment Files & E3D Editors


The E3D Editor

Exploring the Editor


When you invoke the E3D Editor,
it causes the E3D window to
change and reveal:
Commands in a menu bar
across the top of the window.
These are described starting on
page 543.
Two panes on the right side of
the window. In the WEI mode,
the top pane is the Tree that lists
all the objects in the window
and the components of the environment (such as sky and sun);
the bottom pane is the Inspector
that will display information
about a selected object. (These
E3D Editor in WEI mode for EditorExploring model
panes are discussed in more
detail in WEI panes on page 495.)
A numbered object in the animation area. This machine is the default 3D object that represents
the Activity block in your EditorExploring model. An objects number corresponds to its listing
in the Tree pane.

E3D

The E3D Editor appears by default in its World Editor Inspector (WEI) mode. Editor modes
allow you to alter aspects of the E3D window without affecting the appearance or structure of the
2D model. They are discussed starting on page 493.
Inspecting objects
The WEI mode is useful for inspecting objects and modifying their properties. It allows you to
both see and set the position, rotation, and scale values of objects, as well as other object properties. The list of properties in the Inspector pane varies by object.

To inspect an object, click it once in the windows animation area or select it in the Tree pane.
When an object is selected, the contents of the Inspector
pane change to show the objects properties. The objects
name appears in the panes Name field; if the object is the
representation of a block, the objects name will be followed by the block number. Some properties of the Activity blocks 3D representation are shown in the screenshot
to the right.

Activity blocks 3D object properties

Environment Files & E3D Editors


E3D Editor modes

493

The Gizmo
Once you have selected an object in the window, it will appear
with a three-axis (XYZ) device drawn through it. This device
(called a Gizmo) is a tool for translation (movement), rotation,
or scaling of the selected object.
Each axis arm has a different colored line: red (X), green (Y),
and blue (Z). If you hover the mouse over one of the axis arms,
it highlights in a yellow color. The object can then be moved in
that direction.

Using the Gizmo to move and perform other tasks on objects is


described in the chapter 3D Objects that starts on page 499.

Gizmo for Activity default 3D object

The axes of the Gizmo are expressed in terms of the object, not
necessarily the E3D world. If an object is placed in the E3D window in its default orientation, the
axes will be pointing in the same direction as the compass for the E3D window. However, if you
rotate the object by 90 degrees, for example, the Gizmos axes will be 90 degrees out of sync with
the E3D windows compass.
Modifying object properties
You can change a selected objects properties by editing values the blocks dialog (if the object corresponds to a block in the model), changing property values in the Inspector pane, or by using
ModL code. If you make a change to one of the properties in the Inspector pane, you must click
the Apply button at the upper left corner of the pane to apply the change to the object. You can
also alter some properties (an objects position, rotation, or scale) by physically manipulating the
object using the Gizmo. Changing object properties is described in the chapter 3D Objects starting on page 499.

If the 2D block position is linked to the 3D object position, changing the position of the object in
the E3D window will change the position of the block in the 2D model.

E3D Editor modes

If you select a different mode in the Window menu, the panes on the
right of the E3D window change and sometimes disappear. These
changes are discussed where the respective modes are described.

E3D

The E3D Editor has several editor modes that allow you to alter different aspects of the E3D animation area. You can select a mode by
either choosing it in the Editors Window menu (shown at right) or
by pressing the equivalent function key.
Window menu: Editor modes

Mode categories
There are three categories of modes for the E3D Editor:
1) World. The three World modes (World Editor, World Editor Inspector, and World Editor Creator) are used for inspecting and manipulating objects. They are discussed in World modes
on page 494.
2) Terrain. The two Terrain modes (Terrain Editor and Terrain Texture Painter) are useful for
modifying the contours and textures of the terrain. They described in Terrain modes on
page 496.

494

Environment Files & E3D Editors


E3D Editor modes

3) Other. The Editor has some other modes (Mission Area Editor, Terrain Terraform Editor, Terrain Texture Editor, and GUI Editor) which, by default, are disabled and not shown in the
E3D Editors Window menu. These advanced modes, along with some advanced menu commands (such as Import Terraform data) can be enabled by making a change to the EditorGUI.cs file located in the folder \Creator\Editor. These modes are beyond the scope of this
documentation.
The disabled modes and menu commands should be enabled only by very advanced animators and
should be used with extreme caution.

World modes
As described in detail below, there are three World modes:
World Editor
World Editor Inspector
World Editor Creator
Each of the World modes allows you to manipulate an objects properties its position, rotation,
scale, and so forth. By default, the Editor appears in World Editor Inspector (WEI) mode, as seen
earlier. The World Editor Creator mode is most often used to create an object in the E3D window
so that it becomes a default part of a models environment.

Using the World modes to create an object or modify object properties is discussed in the 3D
Objects chapter that starts on page 499.

World Editor
This base mode is intended for moving, scaling, or rotating objects. These operations can also be
performed in the other World editor modes, but this mode gives you the maximum viewing area.

E3D

World Editor Inspector


The World Editor Inspector (WEI) is the default mode you saw earlier. It allows you to inspect any
objects in the E3D window and modify their properties.
Accessing the World Editor Inspector mode
To access the WEI:

Open the E3D window


Enable the E3D Editor (F11)
Then either give the Window > World Editor Inspector command in the E3D Editors menu or
press the F3 key

Environment Files & E3D Editors


E3D Editor modes

495

WEI panes
The WEI has two panes that appear on the right hand
side:
The top pane contains the Tree. This is an explorer-type
list of the 3D objects that are present in the E3D window, including environmental components such as the
sky and sun. The location of an objects listing in the
tree can be moved; that change will not have an effect
on the objects position in the E3D window. An
expanded Tree for a model that contains only an Activity block (Item library) is shown on the right.
The lower pane contains the Inspector. This pane shows
the values of properties of the selected object its name
and block number (if any), position, rotation, and scale,
as well as other object properties. The particular information shown depends on the object selected. In the
screenshot on the right, the Activity block has been
selected in the animation area. It is also selected in the
Trees list and its name and properties are listed in the
Inspector pane.
World Editor Creator
This mode is used for creating 3D objects in the E3D
window and establishing custom pathways, among other
tasks. (Causing an object to appear directly in the E3D
window so that it becomes part of the environment is
known as creating the object.)

World Editor Inspector panes

Open the E3D window


Enable the E3D Editor (F11)
Either give the command Window > World Editor Creator in the E3D Editors menu or press
the F4 key

E3D

Accessing the World Editor Creator mode


To access the WEC:

496

Environment Files & E3D Editors


E3D Editor modes

WEC panes
The WEC has two panes that appear on the right hand
side:
The top pane contains the Tree, as shown to the right.
This is the same as the Tree in the WEI pane, described
earlier.
The lower pane contains the Creator Tree that contains
a list of all the types of objects that are located in the
ExtendSim 3D folders. The objects are divided into
three categories:
Shapes. This category contains most of the functional objects you might want to add to the animation area: Vehicles, Scenery, Blocks,
ExtendItems, and Person. Some shape objects
have functionality (movement or behavior) and
some are static.
Mission Objects. This category includes three
sub-categories: Environment objects (clouds, skyWorld Editor Creator panes
box, sun, and so forth), Mission objects (Paths,
PathMarkers, and so forth), and System objects
(SimGroups). You will not usually need to add Environment objects since the default environment already contains the most-needed ones. Mission objects are quite important and
useful see Paths and Markers Creating paths on page 525 for additional information.
You will not need System objects unless you script the E3D window.
Interiors. These are buildings and other types of structures.

E3D

Terrain modes
As described in detail below, there are two Terrain modes:
Terrain Editor
Terrain Texture Painter

The Terrain modes are used to modify the contour and appearance (texture) of the floor or terrain of the 3D animation area.
For E3D animation, the word terrain means the floor of the 3D animation area and the word
texture means the appearance of the terrain its color, pattern, gridding, and so forth.
The default environment file (Extend3D.mis) does not make much use of the E3D terrain capabilities. In fact, if you build models using the blocks in the Item library, you should not change the
terrain from the default flat floor. This is because the ExtendSim library blocks assume that the terrain will be flat. For certain kinds of custom block models, however, the ability to manipulate the
terrain in the E3D window can be quite useful. And you can always change the terrains texture
without harmful effect.

Using the terrain modes to modify the terrain is discussed in Terrains on page 528.
Terrain Editor
This mode is used for filling and excavating the terrain to add contours such as hills and valleys.

Environment Files & E3D Editors


E3D Editor modes

497

Accessing the Terrain Editor mode


To access the Terrain Editor:

Open the E3D window


Enable the E3D Editor (F11)
Give the command Window > Terrain Editor in the E3D Editors menu or press the F6 key
The default terrain in the ExtendSim 3D environment file is at a height of 100 units. The ExtendSim library blocks assume objects will be at this height. Changing the contours of the terrain may
cause issues with the standard ExtendSim blocks.
The E3D window in Terrain Editor mode
In this mode there are no panes but two new menus:
Action. The Select and Adjust Selection options in this menu allow you to
make a semi-permanent selection of the terrain. The Add Dirt, Excavate,
Adjust Height, Flatten, Smooth, and Set Height commands determine what
will happen when you click an area and move the mouse. The Paint Material command allows you to use a texture to change a part or all of the floors
appearance; it is used when in Terrain Texture Painter mode, discussed
below.

Brush. This command is for choosing the shape, consistency, and size of the
brush when performing actions on terrains.
Action menu
See more information about these commands in E3D Editor menu commands on page 543.
If you move the cursor around in the animation viewing area you will see a selection area appearing
under the cursor. This is called the brush and is your primary tool for editing the terrain in the
E3D window with the Action commands.

Accessing the Terrain Texture Painter mode


To access the Terrain Texture Painter:

Open the E3D window


Enable the E3D Editor (F11)
Give the command Window > Terrain Editor in the E3D Editors menu

E3D

Terrain Texture Painter


This mode allows you to add terrain textures and change the E3D windows terrain so that it has a
different appearance. When the Editor is in this mode, the Action menu defaults to selecting the
Paint Material command, discussed above.

498

Environment Files & E3D Editors


Editor menus and commands

Texture pane
In addition to the Action and Brush menus discussed above, the Terrain
Texture Painter has a Texture pane on the right side that has six slots
where each slot can display a different terrain texture. Slots can be
changed to a different texture (in the case of an existing texture) and different textures can be added (if the slot is blank). Textures are stored in
the \Extend3D\data\terrains folder. They are accessed by clicking a texture slots Change or Add button.
In the screenshot, the three slots on the left show pre-loaded textures
that can be changed. Those on the right are empty slots where a texture
can be added.
No two slots can have the same texture. When changing or adding a texture, the new texture must be different from those already in any slot.
Otherwise, the new selection will not have any effect. For instance, there
will be no effect if you try to change the Grid texture to the Grass
texture, and there is already a slot with Grass as its texture.

Editor menus and commands

E3D

The menus and commands for the various modes of the E3D Editor are
described starting on page 543.

Slots in Texture pane

3D Animation

3D Objects
Creating and manipulating 3D objects

500

3D Objects
3D objects

As mentioned in the Controlling the E3D environment on page 451, there are several ways to
accomplish 3D tasks. With the exception of using an equation-type block or programming with
ModL code (described in the Developer Reference), this chapter shows how to use those methods
to:
Create objects for E3D animation
Use skins to affect the objects appearance
Change object properties such as position, rotation, scale, and visibility
Mount one object on another object
Use waypoints to mark the positions of invisible 3D objects and as movement destinations
Access other object information: collision, gravity, ObjectID
This chapter is focused on objects. Paths, which are a specialized type of object, and the terrain,
which causes the appearance of the floor of the E3D world, are discussed in the next chapter.

This chapter assumes you have read all the Tutorial chapters for the E3D module and the Envi-

ronment Files & E3D Editors chapter. Example models for this chapter are located in the folder
\ExtendSim\Examples\3D Animation.

3D objects

E3D

A 3D object is what you see (and sometimes


what you dont see but you see the effect of )
in the E3D window. ExtendSim Suite
includes a collection of pre-defined 3D
objects; you can add new objects to that collection.
An object might appear in the E3D window
as the representation of a component of the
2D model or it could exist only in the E3D
window. It can represent a block or item
from models that use the Item library; it can
represent any stationary or moving component of a custom-block model. An object
RobotArm object in E3D window
can also appear only in the E3D window,
without having a correspondence to a block
in the model. This is commonly done when the object is a piece of scenery, a marker for a path, or
an environmental effect such as sunlight.
Objects can be created, manipulated, and deleted and they can be visible or hidden. They have
properties and can have functionality (movement and behavior). Objects that represent items (or
any custom entity that has movement) can be made to follow intricate paths.
Item library blocks, as well as the 3D blocks in the Animation 2D-3D library, have popup menus
and checkboxes that allow you to create objects in the E3D window; you can also modify many of
an objects properties in those dialogs. Some environmental effects shadows, sounds, and footprints can be turned on or off in the Options dialog. The E3D Editor can be used to create
objects such as scenery and paths directly in the E3D window and to manipulate object properties.
You can also create custom blocks that have 3D object representations and custom behavior and
properties.

3D Objects
3D objects

501

Types of objects
3D objects can be divided into the following categories:
Interior objects buildings and other interior structures.
Shapes vehicles, scenery, blocks, ExtendItems, and people. Some shapes have movement and
behavior while others are static.
Mission objects environmental objects such as clouds and sun, as well as paths and markers.
A waypoint is a special type of 3D object that just marks a position, but is invisible, in the E3D
window. Waypoints are useful for keeping non-essential blocks from appearing as objects in the
E3D window or for placing text at specific positions in the window. They are discussed on
page 518.

Object properties
Each object has properties that vary depending on the type of object; all object properties can be
changed. Typical properties include:
Skins. Some objects have just one appearance in the E3D window, but many objects have multiple skin choices that affect how they look.
Position, scale, and rotation. Objects appear in the E3D window in a default X/Y/Z location
with a default size and orientation.
Collidable. With this property, objects will not occupy the same space.
Visible. Some objects, such as paths, are by default invisible and you only see their effects. Paths
can be made visible and normally visible objects can be made invisible.

Actions
The following table lists many of the object actions you might want to perform and describes
which methods can be used to accomplish those tasks.

Create an object
for a block or item

Create a non-block
object

Create an environmental effect

See
Page

502

505

507

Change skin

508

Move an items
object

542

Move a blocks
object

509

510

Move a non-block
object

X
X

E3D

3D Action

Equation
Animation
Creator
Item
Options
Inspector
Block, ModL
Tree
2D-3D
Gizmo
Command
Pane
Code, or
Library
Library
Pane
Torque Script

502

3D Objects
Creating objects

Equation
Animation
Creator
Block, ModL
Item
Options
Inspector
2D-3D
Gizmo
Tree
Code, or
Library
Command
Pane
Library
Pane
Torque Script

3D Action

Rotate a blocks
object

Rotate a non-block
object
Scale a blocks
object

X
X

Keep objects from


colliding

X
X

Mount/Unmount
Show/Hide

514

515

516

517

521

519

512

Scale a non-block
object
X
X
X

See
Page

For the table:


Non-block objects and non-item objects are those objects that do not have a corresponding
block or item in the model.
In the Item library, use the blocks Item Animation and Block Animation tabs.
The 3D-enabled blocks in the Animation 2D-3D library are:
3D Controller establishes and controls aspects of the E3D environment
3D Scenery creates scenery in the E3D window

E3D

3D Text displays text in the E3D window


Animate 3D performs a 3D action as an item passes through
You can use the Gizmo in any World mode
The Inspector pane is enabled when the E3D Editor is in WEI mode
The Creator Tree pane is enabled when the E3D Editor is in WEC mode
Equation-type blocks (the Equation block in the Value library and the Equation(I) block in the
Item library) can call ModL functions to perform 3D actions. Likewise, you can use ModL code
to program custom blocks to perform 3D actions. Torque script is the scripting environment
supported by the E3D window. ModL functions and Torque Script are described in the Developer Reference.
If a 3D object has been created by the 2D model, and/or you modify any of that objects properties, the information about the objects creation and property change is saved when the model is
saved. If the object has not been created by the 2D model, its creation and any modifications to its
properties can only be saved by creating a new environment file or making and saving changes to
an existing one. This is discussed in Saving changes on page 518.

Creating objects
Creating an object causes it to be placed in the E3D window. Objects are created:

3D Objects
Creating objects

503

To represent blocks from the 2D model


To represent moveable entities, such as items, from the 2D model
Directly in the E3D window as scenery, environmental effects, or paths for the 3D animation
Since paths are specialized, they are discussed in the next chapter starting on Creating paths on
page 525. After an object has been created, you may want to change one or more of its properties,
such as its appearance (skins), scale, or rotation. This is discussed in Changing object properties
on page 508.

Creating an object is not the same as defining an object. Creating a 3D object places a copy of the
object in the E3D window. Defining a 3D object is the process of developing a new type of 3D
object, as discussed in the Developer Reference.

Create an object that represents a block


Most 3D-enabled blocks have popup menus that provide choices for indicating which 3D object
will represent the block. Blocks that dont have these choices, such as the 3D Controller block
(Animation 2D-3D library), dont have a representation in the E3D window.
Objects that represent blocks are created in the block. As discussed below, it is most common to
use the Block Animation tab of Item library blocks or a 3D popup menu in the dialog of the 3D
Scenery, 3D Text, or Animate 3D block (Animation 2D-3D library).
Using an Item library block
The following steps show how to create a 3D object to represent a Create block:

Open a blank model worksheet.


Save the model as HowToE3D.
Open the E3D window. (Be sure the HowToE3D model is displayed as the associated model in
the E3D windows top left popup menu. If it is not the associated model, select it.)

Place a Create block (Item library) on the model worksheet. The block will automatically be
In the Create blocks Block Animation tab, use
the popup menu (shown to the right) to create
other objects to represent this block. As you make each selection, notice how the object changes
in the Block Animation tabs preview area and in the E3D window.

If you do not have QuickTime installed, the color of the object in the tabs preview area may not be
the same as the color of the object in the E3D window.

If a Skin popup menu appears to the right of the object popup menu, it can
be used to change the objects appearance. This, along with other settings in
the Block Animation tab, is discussed in Changing object properties on page 508.
So that it can be used for other sections in this chapter and for other chapters:

Select the command Run > Show 3D Animation. This will cause the E3D window to open
whenever the HowToE3D model opens.

Save the model. Since the object has been created by the 2D model, saving the model saves the
object information.
Your HowToE3D model will be used for other sections.

E3D

represented in the E3D window as its default object, a door.

504

3D Objects
Creating objects

Create an object that represents an item or other moveable entity


Items only occur in discrete event or (sometimes) discrete rate models, but you can create custom
blocks to show other types of moving entities. To create an object to represent something that
moves:
Use a block from the Item library (this only creates objects that represent items).
Use the Animate 3D block from the Animation 2D-3D. (This is an advanced method; see
page 542.)
Use an equation block or program with ModL functions to create an object that represents any
moveable entity. This is discussed in the Developer Reference.
Using an Item library block
In addition to Block Animation tabs, Item library blocks also have Item Animation tabs. This is
used for specifying which 3D object will represent the items that travel through the block.
The process for creating an object to represent items is similar to creating an object to represent a
block. (See Create an object that represents a block, above.) However, the list of objects in the
Item Animation tabs popup menu is limited to those most appropriate to represent items. (The
Animate 3D block in the Animation 2D-3D library provides a complete list of objects to represent
items.)
Furthermore, rather than just choosing an object from a popup menu as was done for block animation, there are three ways the object can be created for item animation, as discussed below.

E3D

Item animation selection methods


Item Animation tabs have three options for creating a 3D object to represent the item (the Create
block will have slightly different wording):
Do not change item animation. With this
default choice, the 3D object representation of
the item passing through the block will not be changed from what was set in the preceding
block. (The default 3D object created by a Create block is a green ball to correspond with the
default green circle seen with 2D animation.)
Change all items to. This choice provides a popup menu so you can choose an object to represent the items in the 3D world. Any item that arrives with some other object representation will
be changed to the selected choice.
Change item animation using property. The object will change depending on the value of the
selected item property (attribute, priority, and so forth). This method is most common for creating different objects for the different types of items that pass through, or if you want each 2D
animation picture to correspond to a particular 3D object.
For more details about these options, see Selecting an animation picture on page 610.

The Create (Item library) and Animate 3D (Animate 2D-3D) blocks have a 3D object choice in

their Item Animation tabs that other blocks dont offer Random person. If this is selected, the
block will randomly generate male and female people objects with random clothing, face, and
hands to populate the animation.

3D Objects
Creating objects

505

Create a 3D object as scenery


In the previous topics, 3D objects were created to indicate the purpose of a models blocks or to
represent items or other entities that move in the model. You might want to create an object as
scenery instead.

Scenery is the term used to describe any object that is displayed in the E3D window but which is
not a necessary part of the 2D model. You can select any object to be scenery, but some common
choices are bed, chair, desk, door, filing cabinet, machine, shelf, table, tree, and wall. Text, which
can be used to label objects or to stand on its own as a label or sign, is also considered scenery.
There are several ways to create objects for scenery:
With blocks from the Animation 2D-3D library
Using the E3D Editor to place scenery directly in the E3D environment
Using an equation block, or program with ModL code as described in the Developer Reference.
Using an Animation 2D-3D library block
The 3D Text and 3D Scenery blocks (Animation 2D-3D library) are used to create text and other
scenery objects in the E3D window. The following discussion concerns using these blocks to create
objects; the blocks are discussed fully in Animation 2D-3D blocks on page 540.

Using blocks from these libraries requires adding the block to the model but does not require creating a new environment file or making and saving changes to an existing one.

3D Scenery block
A 3D Scenery block in a 2D
model will cause scenery to
be created in the E3D window. The blocks dialog provides a popup menu for selecting a representative 3D object, similar to
the Create block discussed on page 503.

3D Text block
The 3D Text block works similar to the Create block discussed on page 503 in that you can select
an object to represent it in the E3D window. However, this block also allows you to cause text to
be written on the 3D object. If you select the Waypoint object, the text appears at a marked position in the E3D window like a free-standing sign.
To use this block:

Select an object in the blocks object popup menu (the Waypoint choice will cause only the text
to appear in the E3D window)

Enter the text in the text field


Select a color for the text
Click the Update button to cause the text to appear in the E3D window
For instance, this block was used to label the Passport Control sections of the Airline Security
model discussed on page 459.

E3D

When initially placed in the 2D model, this block has a minimized icon. By default, the footprint
of whichever 3D object you choose will be reflected in the model by the blocks icon. If you dont
want this effect, uncheck Show 3D footprint in 2D model in the blocks dialog.

506

3D Objects
Creating objects

Using the E3D Editor to create scenery


Creating an object using the E3D Editor causes the object to be placed directly in the E3D environment without having to place a block on the model worksheet. The object could be a visible
object (such as a piece of scenery) or an invisible object (such as a path or waypoint). Since the
object has no corresponding block in the model, it is considered scenery.
While it is simpler to create scenery by using a 3D Scenery or 3D Text block, the advantage of
using the Editor is that the scenery will be in the E3D window every time the environment file is
opened. This is especially helpful for different models that require the same scenery.
This section assumes you have read the chapter Environment Files & E3D Editors.

Using the E3D Editor to create an object requires creating a new environment file or making and
saving changes to an existing one. But it avoids having to place an extra block in the model.
Accessing the E3D Editor

Open the HowToE3D model that you created on page 503.


The E3D window for this model will automatically open.

Access the E3D Editor by pressing F11


Select the WEC mode by pressing F4. (Or choose the command Window > World Editor Creator within the E3D window.)
Creating the scenery object

In the Creator Tree (the lower pane on the right):


Open the Shapes category.
Open the ExtendItem sub-category. (You can also select objects from
other sub-categories, but most scenery is at this location.)

Click the Barrel object. Depending on the resolution, you may need
E3D

to zoom back to see the object. You can also use the Gizmo to move
the object, if it is not placed where you want.
This will create a Barrel object in the E3D windows animation area without
putting a block in the model worksheet.
When you create an object using the Editor, it will be selected by default.
Clicking elsewhere in the E3D window unselects the object.

Selecting an object

The default drop setting in the E3D window is World > Drop at Screen Center. With this setting
ExtendSim will attempt to place the new item at the center of the camera view, where the terrain is
intersected. If a ray from the center of the camera view doesnt intersect the terrain, the object will
default to being dropped right on the cameras position. Thus if the newly created object isnt
immediately visible on your screen, or if it appears too large, back the camera up with the W key or
the down arrow.
To save the environment file and the model
So that the barrel will be part of the 3D environment whenever the E3D window is opened for this
model, you must create a new environment file or save the changes to an existing one:

Save the environment file. With the E3D Editor as the active window, give the command File >
Save Environment As and save the new environment. You can name the file any name you
want, for example HowToE3ED.mis. The environment file will be saved in the same directory or folder as you saved the model.

3D Objects
Deleting objects

507

Save the model. With the HowToE3D model window as the active window, save the model.
This will also save the name of the new environment file with the model.
Now whenever you open the HowToE3D
model, the E3D window will open using
your environment file with a barrel object.
The associated environment file is listed in the Run > Simulation Setup > 3D Animation tab, as
shown here.

For more information about saving changes, see Saving changes on page 518.
Create an environmental effect
Environment objects are things like clouds, the skybox, and the sun. While these objects are not
obviously apparent in the E3D window, you can see their effects. To cause or disable an environmental effect:
Select options in the Edit > Options > 3D tab
Use a 3D Controller block from the Animation 2D-3D library
Use an equation block, program with ModL code, or use Torque script and the World Editor
Creator, as described in the Developer Reference
Options dialog
In the Edit > Options > 3D tab, some environmental
options can be turned on and off:
Shadows
Sounds
Footprints and vehicle trails

These settings are system-wide and affect the E3D windows for all models.

Environmental choices in 3D tab

E3D

3D Controller block
This block has many uses, as fully described in 3D Controller block on page 541.
It is also useful for turning off the sun or cloud effects in the
E3D window or changing the color of the ceiling/sky. These
options are shown at right.
When this block is placed in a model, unchecking the checkboxes disables the sky and/or clouds for the models environment file. If the option for the clouds object is not checked,
you can modify the color of the ceiling using the Slider controls to achieve the desired effect.

These settings are saved with any model that includes the 3D
Controller block.

Environmental choices in 3D Controller

Deleting objects
The mechanism used to delete objects from the E3D window depends on how the objects were
created.

508

3D Objects
Changing object properties

For objects that correspond to blocks in the model, delete the block from the 2D model. This
will automatically delete the object that corresponds to that block. (If you instead delete the
object using the WEC as described below, the object will reappear when the E3D window is
reloaded and you may get error messages if you then try to delete the block from the model.)
For an object that exists in the E3D environment but is not a direct representation of a 2D
block, delete it in the WEC.
To do this, select the object in the WEC animation area and either:
Press the backspace or delete key
Or choose the command World > Delete Selection
Or choose the command Edit > Cut

The objects that represent items are automatically deleted when the model is re-run or reloaded.
Changing object properties
Once you have created a 3D object, you might want to change its properties. As was discussed in
Object properties on page 501, each object has properties that vary based on the object. The following section describes the most common object properties and tells when you can change them
and how to do it. It covers changing an objects:
Skin
Position
Visibility
Rotation
Scale

E3D

A list of all the potential object properties is beyond the scope of this document. However, the following sections describe using the most important object properties; the Developer Reference has
information about others.
If a 3D object has been created by the 2D model and you modify any of that objects properties,
the information about the property change is saved when the model is saved. If the object has not
been created by the 2D model, any modifications to its properties must be saved in the environment file. This is discussed in Saving changes on page 518.

Changing skins
Skins is the 3D modelers term for the texture files that show the surface details of objects in the
3D world. Each object has a skin property that affects the objects appearance in the E3D window.
While some objects have just one appearance in the E3D window, many objects have a skin type
with multiple choices. For those objects, you can change which skin is showing by:
Selecting a skin from a popup menu in the dialog of the block that creates or changes the object.
Using the Animate 3D block from the Animation 2D-3D library. (This is an advanced method;
see page 542.)
Using an equation block or programming with ModL, as discussed in the Developer Reference.
Skin types
Many of the 3D objects have a single type of skin with multiple choices. For example, desk objects
have one skin type that can be base, oak, or old.

3D Objects
Changing object properties

509

Base skin is what is seen in the preview area of a blocks Item Animation or Block Animation tab.
The Male and Female objects have two skin types:
Skin 1 is for the clothing
Skin 2 is for the face and hands

In a blocks Item Animation tab, objects with a choice for skins

Female object with two skin types

also have a Random skin option. This causes a randomized


display of all the possible skin choices for that object. For male and female objects, both skin 1 and
skin 2 can be random.
Using an Item library block
When you create an object using a block from the Item library, it is common to select the skin for
the object at that time. For instance, the Create block you placed in the HowToE3D model on
page 503 has a door with no skin options as its default 3D object. If you had instead selected a
Crate object in the blocks Block Animation tab, you could have selected either a base skin or an
old skin. Skins for the objects that represent items are selected in the Item Animation tab of the
block that creates or changes those objects.

Move an object
While a simulation is running, the movement of objects that represent items will be taken care of
by the block code and dialog settings. However, you may want to move objects that have been created by the 2D model (such as objects that represent block) or objects that have been created using
the E3D Editor.
There are several ways a 3D object can be directly moved:
If the object represents a block and 2D and 3D positions are linked:
Move the corresponding block in the 2D model
If the object does not represent a block, or if the 2D and 3D positions are not linked:
Change X/Y/Z coordinates in the corresponding blocks Block Animation tab
Change the value of the objects position property in the World editor
Set the objects position using the Animate 3D block. (This is an advanced method; see
page 542.)
Use an equation block or program with ModL functions (discussed in the Developer Reference)
As you will see below, the method you can use depends on the circumstances.
Move a block in the 2D model
By default the Block Animation tabs of Item library blocks are set to Link
2D/3D positions. This means that when one of these blocks is moved in
the model, the position of its representative object will change in the E3D window.
The objects position in the E3D window is displayed in the 3D
position section of the Block Animation tab, shown at right. If
2D/3D linking is enabled, these coordinates are display only
and cannot be edited.

E3D

Move the object in the World editor

510

3D Objects
Changing object properties

Moving a block is an easy way to manipulate 3D objects but requires that the locations of the
blocks in the model be changed. Unlinking 2D/3D positions provides more freedom since you can
then move 3D objects around without affecting the 2D model, as shown below.
The positions of the block and the object are both saved when the model is saved.

This action only applies to objects that represent blocks with 2D/3D linking selected.
Change settings in the Block Animation tab
If Link 2D/3D positions is unchecked in a blocks Block Animation tab,
the object can be directly moved by changing the 3D position X/Y/Z coordinates.
For instance, if you change the X coordinate from 7.125 to
9.125 the object would move 2 animation meters (40 pixels) to
the right in the E3D window. (The distance is based on the
conversion ratios specified in the Run > Simulation Setup > 3D
Animation tab, discussed on page 535.)
This method has the advantage of moving the object s position in the E3D window without moving the block in the model. The position of the object in the E3D window is saved when the
model is saved.

This action only applies to objects that represent blocks with 2D/3D linking not checked.

Move the object in the World editor


Objects can also be moved to any position by dragging them using the World editor. After selecting an object, you can move it by:
Selecting and dragging one of the arms of the Gizmo. This constrains the movement to one axis
but does allow movement along the Z axis.
Dragging it freely in the X and Y directions.

E3D

To access the World editor

Open the E3D window


Access the E3D Editor by pressing F11
Select any World mode (for instance, select the WEI mode by choosing it in the Window menu
or pressing F3)

Select the object in the E3D window


Using the Gizmo
The Gizmo was introduced on page 493. Among other tasks, it
can be used to move a 3D object along one axis.

Access the World editor, as shown above.


Select and drag the Gizmos X, Y, or Z arm to move the object
along that axis.

If an arm on the Gizmo is selected, it turns yellow.


For example, in the HowToE3D model you saved on page 506,
try using the Gizmo to move the barrel or door object.
Gizmo for Barrel object

3D Objects
Changing object properties

511

Moving the object freely


Using the World editor, an object can be freely moved in the X and Y directions without using the
Gizmo.

Access the World editor, as shown above.


Without selecting any of the arms of the Gizmo, drag the object to move it where you want. (If
the object is very small, zoom in on the object.)

If the object is the representation of a block, and the blocks Block Animation tab has been set to

Link 2D/3D positions, moving the object will also move the block. Unchecking the linking option
allows the 3D object to be moved in the E3D window without affecting the blocks position in the
model.
Save the position
How the position change is saved depends on the object:

If the object has been created by the 2D model, the information about the objects position is
saved when the model is saved. (For an object that represents a block, the position information
is displayed in the blocks Block Animation tab.)

If the object has not been created by the 2D model, the environment file must be saved in order
to save the objects position. See Saving changes on page 518.
Change object property values
While it is more common that you would change an objects position by one of the previous methods, a selected objects location can also be modified by changing the value of its position property.
Access object properties
Object properties can be changed in the E3D Editor when it is
in Inspector mode. The properties of the selected object are
listed in the Inspector pane, as shown at right.
The steps to change an objects properties are:

E3D

Open the E3D window


Access the E3D Editor by pressing F11
Select the WEI mode by pressing F3 (Or choose the command Window > World Editor Inspector within the E3D
window.)

Select the object in the animation area or in the Tree


Move the object
The position property is listed in X Y Z format, for instance as
9.125 -8.875 100. Changing the first position number for
that hypothetical object from 9.125 to 11.125 would move the
object 2 animation meters (40 pixels) to the right. (The distance
is based on the conversion ratios specified in the Run > Simulation Setup > 3D Animation tab, discussed on page 535.)

In the Inspector pane:


Change the values for the position property
Click the Apply button

Properties for Create blocks object

512

3D Objects
Changing object properties

Try changing the position for the barrel or door object in the HowToE3D model from page 506.
Save the position
If the object was created by the 2D model, saving the model saves the objects position.

If the object was not created by the 2D model, save the environment file to save its position.
This is discussed in Saving changes on page 518.

Show or hide objects


By default most 3D objects are visible in the E3D window. An obvious exception are paths, which
are invisible unless you make them visible. Like other object properties, visibility is an object property that can be manipulated. For instance, you may want to show or hide a piece of scenery in an
environment file depending on the model. That would allow one environment file to be used by
multiple models with different scenery needs.
When animating in 3D you might want to:
Hide a normally visible object
Show a normally invisible object
Switch between hiding and showing an object based on some condition or situation
Hide or show all objects of a particular type

Objects that have been created by blocks should be hidden and shown using dialog options; the

model should then be saved to save those changes. Objects that are not associated with blocks can
be hidden and shown using the E3D Editor; this is a modification to the environment file and
requires that the environment file be saved.

E3D

Hiding an object
It is common that a block performs a function in the 2D model but you want its representative
object hidden in the E3D window. Scenery objects created using the E3D Editor, as well as objects
that represent items or other moveable constructs, can also be hidden.
Objects can be hidden by:
Unchecking a dialog option
Using a waypoint as a representation
Using the E3D Editor
With equation blocks or programming with ModL code, as discussed in the Developer Reference
Hide objects that represent blocks
You might want a particular block to not have a
visible object representation. If the block is from
Making an object invisible
the Item or Animation 2D-3D library, the easiest
way to do this is to uncheck the field Show block
in 3D window as. In the Item library this is located in the Block Animation tab, as shown above
right. This causes the block to have no representation in the E3D window, no matter what object
is selected in the object popup menu.
Another way to hide an object is to create a waypoint object to represent the block. A waypoint is a

Marking an invisible object

3D Objects
Changing object properties

513

special type of 3D object that is invisible and just marks a position in the E3D window; it is discussed on page 518.
Compared to making the object invisible, the advantage of using a waypoint is that the waypoints
location can be used for a particular purpose. For instance, one object could be made to move
toward a waypoint, although the waypoint would be invisible in the E3D window.
Objects that represent items
In a discrete event model, items move from one Item
Making the items invisible
library block to another. By default all items have a 3D
object representation. By unchecking an option in the
Create blocks Item Animation tab, as shown here, you can choose to not create objects in the E3D
window to represent items. Note that the model must be saved to save this change.
Scenery objects
A scenery object that has been created in the E3D window, but which does not correspond to a
block in the model, can also be hidden for a particular model or for a certain purpose.
The process for doing this is the same as for changing a scenery
objects position property, as described in Change object property
Visible property unselected
values on page 511. If the scenery objects visible property is displayed in the Inspector pane, unselecting that property will cause the
object to become invisible. Note that the environment file would need to be saved.
Hiding a group of objects
You might want an entire group of blocks to not create objects in the E3D window. This is particularly true for passing or decision blocks like the Set or Select Item Out blocks in the Item library.

The 3D Controller blocks 3D Options tab has several choices for which category of block should be represented as a waypoint. The categories are
based on divisions for the Item library blocks all blocks (residence, passing, and decision), passing blocks, decision blocks, or only Transport blocks.

Although these options apply mainly to Item library blocks, custom blocks can be designated with
those categories and the 3D Controller block will hide the representative objects.
Objects that represent 3D Scenery blocks
In the Scenery tab of the 3D Controller (Animation
2D-3D library), you can choose to hide all objects that
have been created using the 3D Scenery block (Animation 2D-3D library). This tab also has options for
hiding the icon of the 3D Scenery block in the 2D
model and/or the footprint of the 3D object.

3D Controller: hiding scenery objects

E3D

Objects that represent groups of Item library blocks


Rather than hide each individual object, as described
earlier, you can use the 3D Controller block (Animation 2D-3D library) to select a group of objects to be
represented as waypoints. This causes the objects to
not appear in the E3D window but to instead just
3D Controller: hiding objects
have their positions marked.

514

3D Objects
Changing object properties

Showing an object
Since most objects are visible by default, the process for making them visible after they have been
hidden is the reverse of hiding them (see above).
The path object is one of the few that is invisible by default. Causing the path object to be visible
in the E3D window is discussed in To modify path properties (optional) on page 527.
Conditionally showing and hiding
Some common ways of showing and hiding an object in the E3D window are:
With the 3D Text block (Animation 2D-3D library).
Using the Animate 3D block from the Animation 2D-3D. (This is an advanced method; see
page 542.)
With equation blocks or programming with ModL code, as discussed in the Developer Reference.
3D text block
The input connector on a 3D Text block (Animation 2D-3D
library) can create text in the E3D window if certain conditions
occur. To cause the input connector to appear, select 3D object Dialog option for 3D Text block
when input connector is true in the blocks dialog. Then connect to the connector to cause the sequence you want. During the simulation, the text will be
shown in the E3D window if the value of the input connector is >= 0.5; it will be hidden otherwise.

Rotate an object
Depending on the object, there are several ways a 3D object can be rotated:

E3D

If the object was created by the 2D model:


Change rotation settings in the corresponding blocks Block Animation tab or
in the Create blocks Item Animation tab.
Set the objects rotation using the Animate 3D block. (This is an advanced
method; see page 542.)

Options in Block Animation tab

If the object hasnt been created using the 2D model:


Use the World Editor Inspector mode of the E3D Editor to rotate the object with the
Gizmo or to change the value of its rotation property
Use an equation block or program with ModL functions (discussed in the Developer Reference)
Scenery and other 3D objects created in the E3D window using the E3D Editor can be rotated
using the Editor, but a 3D object created by the 2D model can only be permanently rotated by
changing block dialog settings or by using the Animate 3D block.
Use the Block Animation or Item Animation tab
If an object has been created by the 2D model, its rotation can be adjusted in the blocks dialog.
In the Create blocks Item Animation tab, or in any blocks Block Animation tab:

3D Objects
Changing object properties

515

Enter numbers in the rotation field:


Close the blocks dialog
The objects rotation value is saved when the model is saved

For example, using the How To E3D model you created on page 506, try changing the
rotation field in the Block Animation tab of the Create block. Then close the blocks
dialog to see the effect on the door object in the E3D window.

The rotation value is based on a 360 degree range; blank is the same as 0 or 360. For objects that

have a natural front, that front will by default be facing forward (towards the positive Y direction)
for the 0 or default rotation setting.
Rotate the object using the World editor
If an object has been created using the E3D Editor, it can be rotated in the E3D window. To do
this, either:
Rotate the object with the Gizmo in any World mode
Or, change the value of the objects rotation property in the World Editor Inspector
The objects rotation is saved when the environment file is saved.
To access the WEI
Open the E3D window

Access the E3D Editor by pressing F11


Select the WEI (World Editor Inspector) mode by choosing it
in the Window menu or pressing F3
Using the Gizmo
The Gizmo was introduced on page 493. Among other tasks, it
can be used to rotate objects.
Gizmo for Barrel object

(Macintosh) while using the mouse to drag one of the Gizmos X/Y/Z arms. The arm will turn
yellow when it is selected.

Save the environment file to save the changes, as discussed in Saving changes on page 518.
This rotates the object around the axis associated with the selected arm. Rotation around the Z
axis is the standard kind of rotation used in the ExtendSim libraries.
Changing rotation property values
The selected objects rotation can be changed by changing
the value of its rotation property. The rotation property is
expressed as four numbers the first three are factors and
the fourth is an angle in degrees. The three multipliers
determine the amount by which the object is rotated
around its axis based on the angle number.

Properties for the Barrel object

E3D

Access the WEI, as shown above.


Select the object in the E3D window
Press the ALT key (Windows) or the Command (Apple) key

516

3D Objects
Changing object properties

For example, a value of 0 0 1 90.0 means that the object is rotated 90 degrees around the Z axis.
A value of 1 0 1 45.0 would mean that the object is rotated 45 degrees around both the X and
the Z axes.
The most common form of rotation in the ExtendSim modeling world is around the Z axis, as this
will rotate the front of the object on the flat plane.
To rotate the object using its rotation property:

Access the WEI, as shown above


Select the object in the E3D window
In the Inspector pane:
Change the values for the rotation property
Click the Apply button
Save the environment file to save the changes, as discussed in Saving changes on page 518.
Scale an object
Depending on the object, there are several ways a 3D object can be scaled:
If the object was created by the 2D model:
Change the scale settings in the corresponding blocks Block Animation tab or, for items,
in the Create blocks Item Animation tab.
Set the objects scale using the Animate 3D block. (This is an advanced method; see
page 542.)
If the object wasnt created using the 2D model:

E3D

Use the World Editor Inspector mode of the E3D Editor to scale the object with the
Gizmo or to change the value of its scale property
Use an equation block or program with ModL functions (discussed in the Developer Reference)
Scenery and other 3D objects created in the E3D window using the E3D Editor can be scaled
using the Editor, but a 3D object created by the 2D model can only be permanently scaled by
changing block dialog settings or by using the Animate 3D block.
Using the Block Animation or Item Animation tab
If an object has been created by the 2D model, its scale can be adjusted in the blocks dialog.
In any blocks Block Animation tab, or (for items) in the Create blocks Item Animation tab:

Enter a number in the scale field:

The scale is relative to 1 and a blank is the same as 1. Thus a scale of 2 would cause the object to be
twice the default size and a scale of 0.5 would cause it to be half the default size.

Close the blocks dialog


The objects scale value is saved when the model is saved

For example, use the How To E3D model you created on page 506. Change the scale
of the Activity block, then close the blocks dialog to see the effect on the machine
object in the E3D window.

3D Objects
Changing object properties

517

Scale the object using the World editor


If an object has been created using the E3D Editor, it can be scaled in the E3D window. To do
this, either:
Scale the object with the Gizmo in any World mode
Or, change the value of the objects scale property in the World Editor Inspector
The objects scale is saved when the environment file is saved.
To access the WEI
Open the E3D window

Access the E3D Editor by pressing F11


Select the WEI (World Editor Inspector) mode by choosing it
in the Window menu or pressing F3
Using the Gizmo
The Gizmo was introduced on page 493. Among other tasks, it
can be used to scale objects.

Access the WEI, as shown above


Select the object in the E3D window
Press both the ALT key and the CTRL key (Windows) or the

Gizmo for Barrel object

Command (Apple) key and Option key (Macintosh) while using the mouse to drag one of the
arms of the Gizmo.

Save the environment file to save the changes, as discussed in Saving changes on page 518.
With this method, the scaling will be in the direction of the selected axis and will distort the
shape of the object. To scale an object in all three dimensions at the same time, change the values
of the objects scale property in the World Editor Inspector, as described below.

E3D

Changing scale property values


An objects scale can be changed by changing the scale
property. This property is displayed in the Inspector pane
as three numbers, each representing the objects relative
scale along an axis. Units of scale are relative to 1 and associated with each axis in X, Y, Z order. Thus a scale value of
1 1 1 indicates a scale of 1 for each axis.

Properties for Create blocks object

Scaling an object from 1 1 1 to 2 2 2 would make it


twice as big along each axis. (This is the same as entering a value of 2 for a blocks scale field, as discussed in Using the Block Animation or Item Animation tab on page 516.) If you scale an object
from 1 1 1 to 1 1 2 it will stretch along the Z axis but remain the same along the X and Y axis.
This would cause it to look taller but also a bit distorted. A scale value of 1.1 0.5 1.0 would indicate that the item was scaled to 110% on the X axis, 50% on the Y axis, and 100% on the Z axis.
To access object properties:

Access the WEI, as shown above


In the Inspector pane:
Change the values for the scale property
Click the Apply button

518

3D Objects
Saving changes

Save the environment file to save the changes, as discussed in Saving changes on page 518.

Saving changes
If you create objects or change their properties, you probably want to save those changes. There are
two issues you should be aware of when saving changes:
Objects that have been created by the 2D model, as well as any changes to the properties of
those objects, are saved when the model is saved. For instance, if you move an object in the E3D
window, and the object is associated with a block in the 2D model, that position change is saved
when the model is saved. Furthermore, saving the model saves the name of the associated environment file; if the environment file has been renamed, the new name will be saved with the
model.
If youve used the E3D Editor to create paths or objects in the 3D window, or you have made
changes to the properties of those objects, you will need to save the environment file to keep
your changes. Either create a new environment file or save changes to an existing one, as
described below.

To save the changes made to object properties using the E3D Editor, you must first Apply the
change, then save the environment file.

Saving an environment file


With the E3D window as the active window:
If the models current environment file is the default Extend3D.mis file, you will not be permitted to make changes to the environment file. Instead, with the E3D Editor as the active window,
give the command File > Save Environment As and save the environment file under a new
name.

E3D

For any other environment file, with the E3D Editor as the active window, use the File > Save
Environment command to save changes.
You can name the file any name you want. It will be saved in the same directory or folder as the
model is located.
If the model uses a new environment file, or a renamed environment file, you must also save the
model. This ensures that the model will be associated with the proper environment file.

You will not be able to save changes to the default Extend3D.mis file; you must use the Save Environment As command instead. Furthermore, the Save commands in the E3D window or E3D
Editor window do not affect any changes made to the 2D model.

WayPoints
A waypoint is a special type of 3D object that marks a position but is invisible in the E3D window.
Waypoints are useful for keeping non-essential blocks from being represented as visible objects in
the E3D window. They are also helpful for marking positions as destinations for object movement
in the E3D window. They can be given labels to act as signage for the animation.

Creating a waypoint
There are several ways to create waypoints:
Select Waypoint as the 3D object for any Item library block
Use the 3D Scenery block (Animation 2D-3D library)
Create a waypoint in the E3D Editor

3D Objects
Mounting objects

519

Waypoints can never be made visible in the E3D window but their labels will be visible.
Create a waypoint object in an Item library block
A waypoint object is created the same way any other object is created, as is shown for the Create
block on Using an Item library block on page 503.
In the E3D Editor
Accessing the E3D Editors World Editor Creator:

Access the WEC as was done in Accessing the E3D Editor on


page 506
Creating the waypoint object

In the Creator Tree (the lower pane on the right):


Open the Shapes category
Open the Markers sub-category
Click the WayPointMarker object
This will create a waypoint in the E3D windows animation area. The
location will be marked but no object will appear in the E3D window.

Choosing a waypoint as a destination

Selecting a waypoint

If a block is represented by a waypoint in the E3D window, that waypoint will automatically be chosen as the destination for items traveling to the block. To specifically target a waypoint as a destination for item objects that dont travel through the block, use the
Set Waypoint option in the Animate 3D block (Animation 2D-3D library).

Mounting objects
The process of attaching one 3D object (the rider) to a certain point on another 3D object (the
mount) is known as mounting.
The mounting node is the rider objects location that will be attached to the mount object. For
instance, a Suitcase objects handle is its mounting node. Custom objects have a maximum of 20
nodes.
A mount point is the location on the mount object where the rider object can be attached. In
the case of Male and Female mount objects, you would usually attach the handle of the Suitcase
to their hands (mount point 1), rather than to their heads (mount point 0).
In many cases, mounting is performed automatically by the blocks. For example, the Activity
block will, by default, mount the 3D object that represents the items being processed onto the
blocks 3D object.
Furthermore, mounting causes some automatic actions. For instance, mounting a Box object onto
a Male object automatically attaches the Box to the mount point on the Male object. The Male
object then adjusts its animation to change its hand position, so that it looks as if it is holding the
Box. If the Male is then given a destination, the Box will travel along with the Male object.
An object that represents an item can be mounted on an object that represents a block. Likewise,
any 3D object can be mounted on the objects that represent items. And while it is not a requirement, an object that has been mounted on another object can also be unmounted.

E3D

Each 3D object has one mounting node and at least one mount point.

520

3D Objects
Mounting objects

Item object on block object


An object that represents an item can be mounted on an object that represents a residence-type
block.
For Activity and Workstation blocks (Item library), the item's object is mounted by default on
the block's object for the duration of the activity. This option can be turned off in the block's
Item Animation tab. If the option is not checked, the item's object will move up to the block's
object but will not mount it.
Until they are released, objects that represent items automatically mount the object representations of Queue and Resource Item blocks (Item library). This is the blocks' default behavior and
cannot be turned off.
In QuickView mode, item objects will mount on top of each other when they reach a residencetype block's object. In Concurrent or Buffered mode, they will either mount or line up and move
along a path, depending on the block and various settings in its dialog.
An example of an item object being mounted onto a block
object is in the Airline Security model, located at \Examples\3D Animation. In the hierarchical block labeled Metal
Detector, the objects that represent passengers are mounted to the Detector object for the length
of time it takes for that part of the process. This is accomplished by choosing in the Activity block
to Mount item while activity is ongoing.

Item objects are not mounted on the Convey Item or Transport blocks. Instead, item objects use
the from and to location information set in the blocks dialog. This causes the item object to be
displayed as moving along the path represented by the blocks object.

Object on item object

E3D

You may want to mount an object on an object that represents an item. For example, to mount a
piece of paper on a customer in a bank line or to mount a suitcase on a passenger at an airport.
Mounting an object on an item object is usually accomplished using an Animate 3D or 3D Scenery block (Animation 2D-3D library) and is sometimes done within a hierarchical block to minimize the details at the top level.
An example of an object being mounted onto item objects is in the Airline Security model, located
at \Examples\3D Animation.
In the hierarchical block that
looks like a door, two Animate
3D blocks create a Suitcase
object and then mount it onto
the object that represents the
person entering the airport. The mounting
is accomplished by attaching a rider object (Suitcase) onto the mount object, as seen above. The
mount object is referenced by the _3D objectID property of the items that pass through this block;
the value of the property is the value of the objects ObjectID (discussed below). Note that at this
point the Suitcase object is not associated with an item or block in the 2D model.

3D Objects
Other object information

521

Scenery object on scenery object


An example of a scenery object being mounted onto another
scenery object is in the Airline Security model, located at
\Examples\3D Animation. The Equation block (Value library) Mounting function with arguments
just to the right of the Passport control section is used to
mount the person representing the passport inspection officer to a chair object. The officer and the
chair objects are both placed in the model through the use of 3D Scenery blocks (Animation 2D3D library). The 3D Scenery blocks output the value of the _3D objectID property of their
respective items to the input connectors on the Equation block. Since the value of the _3D objectID property references the object, this information can be used to mount the passport officer onto
the chair.

Other object information


As mentioned earlier, objects have too many properties to fully discuss in this documentation.
Some additional information is summarized below.

Collision
The collidable property defines whether an object that represents an item will respect the physical
boundaries of other objects or if it will be allowed to pass through the other objects. If an objects
collidable property is set to True, the object will stop before moving into the physical space of
other objects in the E3D window. If collidable is set to False, the object will be allowed to move
through other objects in the E3D window.
By default, the collidable property of item objects is set to true in the Item Animation tab of the Create block (Item library). The Block Animation tab in other Item
library blocks has a checkbox for selecting whether the block object is collidable. The collidable
property can also be accessed from the WEI.

Gravity, friction, and momentum

To maintain the constant speeds associated with making travel times match simulation times, the
concepts of friction and momentum are not implemented in the objects that travel from location
to location in ExtendSim.

Sound
The E3D window supports objects playing sounds. Sounds can either be associated
with objects in the E3D window or they can be played by ModL function calls.
Use the Edit > Options > 3D tab to globally disable and/or enable sounds in the E3D window;
they are disabled by default. If the object has ambient sound, and if Enable animation of 3D
object has been selected in the blocks Block Animation tab (it is enabled by default), the sound
will be played when the simulation is run.

E3D

Gravity is implemented in ExtendSim for certain types of objects and not for others. People and
vehicles (for instance, the Shapes > Vehicles and Shapes > Person objects of the WEC) will respect
gravity. If created at a height, or made to travel to a Z location higher then 100, these objects will
drop back down to the ground. Other objects, such as the ExtendItem, Blocks, and Scenery
objects in the Shapes category of the WEC, will not be effected by gravity. Instead, they will be
able to travel along at a fixed height, or even travel to a different height, by simply setting a Z location higher then 100. In the Boids example, located at \Examples\3D Animation, Boid objects fly
through the air by just setting 3D destination locations.

522

3D Objects
Other object information

The machine object is an example of an ambient sound. To see this, open any model that has an
Activity block represented in the E3D window by the machine object, such as the Production Line
Final model located at \Examples\Tutorials\E3D Animation\Production Line. Select Sounds in the
Edit > Options > 3D tab and run the simulation. While the machine is running, you will hear an
active machine sound.
Sounds played in the E3D window are represented as 3 dimensional sounds. If you move the camera in the E3D window closer or further from the machine, or turn to the left or right, the volume
and direction of the sound will change accordingly.

Object ID
An ObjectID is a unique value associated with an object that the E3D environment uses to identify the object. Every object has an Object ID, including GUI objects such as the camera, and
objects created by a models blocks, by the E3D Editor, or by programming.
The value of the ObjectID is the main identifier that the E3D window uses to identify the objects
it needs to support. For example the camera object, mentioned in MiniMap and camera on
page 455, has an objectID. Knowing this allows you to call any of the other ModL functions that
take an ObjectID value on the Camera. You could then use this information to dynamically set the
position of the camera while an object is moving, so the camera follows along with the moving
object.
For objects that represent items, the value of their ObjectID is stored in their _3D objectID property. This allows you to perform actions on item objects by referencing that property.

BlockNumber

E3D

The BlockNumber property is defined in the WEI, but is not available through the dialogs of
blocks in the Item Library. This property is used to contain the block number of the block from
the 2D model that created the 3D object. It is used internally by the Item library block code and is
not something that you will ever want to change. However, viewing it can be useful for informational or debugging purposes.

GroupTag and UserTag


Like the BlockNumber, the GroupTag and UserTag properties are used internally by the block
code of the Item library blocks. They are described in the Developer Reference.

3D Animation

Movement, Paths, and Terrains


Creating paths and modifying terrains

524

Movement, Paths, and Terrains


Traveling time

This chapter shows how to:


Use the Transport and Convey Item blocks to represent item movement and travel time
Create custom pathways for items and other moveable entities to travel
Change the terrain

This chapter assumes you have read all the Tutorial chapters for the E3D module and the Envi-

ronment Files & E3D Editors chapter. Example models for this chapter are located in the folder
\ExtendSim\Examples\3D Animation.

Traveling time
In a discrete event model, items move from block to block as dictated by the connections. These
connections indicate the direction of movement, but they dont provide any delay for the items. If
travel time is significant, it is common to either:
Increase the delay time of destination blocks to compensate for the travel time
Specify a minimum wait time in a Queue blocks Options tab to simulate travel time
In a logical model, these approaches work well for simulating behavior and result in correct item
travel times. When the model is animated in 2D or 3D, however, item/objects visually jump from
block/object to block/object. This is rarely what you would want to see.
Instead of implying a travel time, it can be explicitly set in a Convey Item or Transport block (both
from the Item library). When the model is then animated, multiple items will move simultaneously at a certain speed from one point to another, rather than jumping from object to object. The
Transport and Convey Item blocks are the primary way to show multiple 3D objects moving at the
same time in the E3D window.

The Behavior and Options tabs of the Convey Item and Transport blocks are discussed in Transportation and material handling on page 192.

E3D

Setting travel time in a Transport or Convey Flow block


Simultaneous item movement
If the Add connection line animation command is enabled in the Run menu, 2D animation
shows items moving from block to block. To show events as they occur, items do not move simultaneously and the movement is displayed without a time delay.
When a model is animated in 3D using the QuickView mode, the 2D animation is directly translated into 3D animation and 3D item objects will likewise move from one 3D block object to the
next without any time delay.
To have an animation where items dont jump from one block to another, you need to show items
moving as they are delayed. You do this by setting a travel time in either a Transport or Convey
Item block. This results in an animation delay that corresponds to the time that the item spends in
transit from one block to another.
There are two methods to add a travel time delay:
Right-click a blocks item output connector and choose Add Transport following this block. A
Transport block will be inserted between the output connector of that block and the input connector of the next downstream block.
Add a Convey Item or Transport block (Item library) to the model as you would any other
block.

Movement, Paths, and Terrains


Creating paths

525

For 2D animation, to view the simultaneous movement of items in the model:

Use a Transport or Convey Item block to represent the items travel time.
Check 2D animation
shows simultaneous
item movement in the blocks Item Animation tab.
Unselect the command Run > Add Connection Line Animation. (This command is not compatible with simultaneous item movement.)
For 3D animation, to see the simultaneous movement of items in the E3D window:

Use a Transport or Convey Item block to represent the items travel time.
Give the command Run > Simulation Setup > 3D Animating tab and select either the Concurrent or Buffered modes. These modes force the simulation model to maintain a constant ratio
between simulation time and external clock time.
In 3D animation, the movement will be either along the connections or in a straight line, as specified in the Convey Item or Transport blocks Options tab.

Creating paths
The purpose of a custom path is to set a pre-defined route for objects to travel through the 3D
world. In a 3D animation of a discrete event model, item objects move from one destination to
another, so paths are not required. They are, however, frequently created for situations that involve
intricate traffic patterns or models that use custom-built blocks.
Paths and markers
A path is a route for an item or other entity that has movement. Each path is a collective object
composed of multiple steps, or markers, laid out in a predefined order towards a destination. Paths
are created using the E3D Editor in World Editor Creator mode and become a part of the E3D
environment. They are never visible in the 2D model; by default they are also not visible in the
E3D environment.
With the E3D Editor in World Editor Creator (WEC) mode, as shown in this section.
Using an equation block or programming with ModL functions, as discussed in the Developer
Reference.
Markers
A marker is a point on a path, indicating a step towards the destination. A path can contain as
many markers as you want; it can even contain just a single marker.
Markers have their locations specified in X/Y/Z dimensions. Certain objects in the ExtendItem
category of objects (such as people and vehicles) will ignore the Z dimension by default, but other
objects do not. Because objects in the ExtendItem category are most often used to represent items,
and because objects that dont need the Z dimension will ignore it, the Z locations of markers
should always be set to the correct value.

The default height of the ground in the E3D window is 100 meters and the default height (Z
dimension) of 3D objects is 100.1.

The steps to creating a path include:


1) Create a new environment file, if necessary

E3D

There are two ways to create paths:

526

Movement, Paths, and Terrains


Creating paths

2) Create a path object in the WEC


3) Create marker objects for the path
4) Modify path properties in the WEI (optional)
5) Save the environment file
6) Store the path in the SimGroup - Paths folder (optional)
7) Set the movable object on the path
8) Save the model
If you create or modify a path, and you want that path available for the model, you must save a
new environment file as discussed in Saving changes on page 518.
To create an environment file
Paths are created using the E3D Editor. They do not have a correspondence to the 2D model and
must therefore be saved in the environment file.
If the model uses the default environment file, Extend3D.mis, you will need to create a new environment file or save the default file using the File > Save Environment File command. If instead
the model uses a custom environment file, you just need to save it each time it is modified.
Full instructions for creating and saving an environment file start on page 518.
To create a path object
Open the HowToE3D model that you modified and saved on page 506

E3D

The E3D window for this model will automatically open when the model opens.

Access the E3D Editor by pressing F11


Select the WEC mode by pressing F4
In the WEC Creator Tree (the lower pane on the right):
Open the Mission Objects category
Open the Mission sub-category
Click the Path object
In the dialog that appears, name the path Path 1 and click OK to close the dialog
To create markers

In the WEC Creator Tree:


Open the Mission Objects category
Open the Mission sub-category
Click the PathMarker object
In the dialog that appears, name the marker Marker A and click OK to close the dialog.
Marker A will appear in both the animation area and the Tree pane.

Click and drag Marker A within the Tree pane until it reaches and selects the name of the
desired path in this case, Path 1. The paths name will be highlighted when it is selected.

Movement, Paths, and Terrains


Creating paths

527

This will both create a folder named Path 1 and store Marker A
within that folder.

In the animation area, use the Gizmo to position the marker at the
appropriate X/Y/Z location

Create additional markers until you have as many as you need for
this path, storing them in the Path 1 folder

Save the environment file


To modify path properties (optional)
Like other E3D objects, paths have properties that can be modified
using the E3D Editor or through ModL functions. A paths properties
are most commonly changed to make it a looping path or to cause it Path folders with markers
to be visible in the E3D window.
To change a paths properties, use the WEI:
Select the paths folder in the Tree pane, as shown at the
right.
In the Inspector pane, find and change the property
looping or visible, as discussed below.

Path selected in Tree

Click Apply to save the property change


Save the environment file
Looping
Each path has a property that determines whether or
not it is a looping path. If the path is looping, an object
on the path will return to the first marker after it
reaches the last marker. To cause a path to be looping:

E3D

Select the path in the WEI Tree


In the WEI Inspector pane:
Check the IsLooping property checkbox
Click Apply
Save the environment file

Path properties: looping and visible

Visible and colored paths


By default, paths are not visible in the E3D window (they are never visible in the 2D model). Setting a path to visible will display the path in the E3D window. A visible path can also have a color.
To cause a path to be visible:

Select the path in the WEI Tree


In the WEI Inspector pane:
Check the visible property checkbox
Click Apply
Save the environment file

528

Movement, Paths, and Terrains


Terrains

Changing the color of a path changes how it displays in the E3D window when it is set to be visible. To cause a visible path to have a color:

Select the path in the WEI Tree


In the WEI Inspector pane:
Enter a 1 (true) or a 0 (false) for the Red, Green, and/or Blue color properties
Click Apply
Save the environment file
If you create or modify a path in the E3D Editor, and you want that path available for the model,
you must save the environment file as discussed in Saving changes on page 518.
To store the path (optional)
Notice that, by default, a path does not have a representation in the animation area, but it is listed
in the Tree pane at the top right of the window. To store all paths in one location:

In the Tree pane, click and drag the path to within the SimGroup - Paths folder.
Save the environment file.

Paths do not have to be stored in the SimGroup - Paths folder, but it is a good collection point if
you have a lot of paths.

To set the item or moveable entity on the path


There are several ways to set items on a path:
Using a Transport or Convey Item block (Item library). An example of this, using a Transport
block, is shown in Select the path on page 487.
Animate 3D block (This is an advanced method; see page 542.)

E3D

Using an equation block, or program with ModL code as described in the Developer Reference.

Terrains
By default, the Extend3D.mis environment file has only one texture painted on the entire terrain
floor the Grid texture. Furthermore, the default terrain is a flat surface. However, terrains can be
customized to have contours as well as multiple textures (color and patterns). As introduced on
page 496, terrains are created and modified using the E3D Editor in Terrain mode.

If there is no texture associate with the terrain, or if the texture cannot be located, the terrain will
appear white.

The commands in the Action menu are used in conjunction with the commands in the Brush
menu to modify or create custom terrains. As an example, if you select the Add Dirt command,
move the cursor to the center of the viewing area, and click the left mouse button, you will be
adding dirt to the terrain. This will have the effect of creating a small mound under the brushed
area. How long you hold down the mouse button effects how much dirt is piled up. Each Action
has a different behavior and between them all you have a lot of editing control over the terrain.
To do this, choose the Select command and click the terrain with the left mouse button, selecting
the terrain under the brush. The selection area is indicated by squares (nodes) that are drawn at
each point where the brush touches the terrain, turning from outlined to solid. Clicking again on
other sections of the terrain will add them to the selection. Clicking while holding down the Ctrl
key will remove the nodes under the brush from the selection. After selecting whatever portion of

Movement, Paths, and Terrains


Terrains

529

the terrain you wish, select the Adjust Selection menu command to raise and lower that selection.
When this is selected, moving the mouse forward will raise the selected terrain, and moving the
mouse backward will lower it.

The Action and Brush menu commands are described starting on page 544.
Modifying the terrain
For example, to modify the terrain or floor of the E3D window:

With the E3D window the active window, click F11 to access the E3D Editor
In the E3D window, choose the command Window > Terrain Texture Painter
On the right side of the window, the Texture pane appears with six slots for selecting textures.
(The Texture pane is shown on page 498.) Notice that, by default the Grid texture has been
selected. This is the default texture for the default (Extend3D.mis) environment file.

Click the Change button below the Grid texture pane


In the Open File window that appears, expand the Extend 3D folder by clicking the + sign.
Expand the data folder by clicking the + sign
Within the data folder, select
the terrains folder so that the
textures appear to the right, as
shown in the screenshot to the
right.

Select the GridGreen texture


and click Load. The floor will
change to a green colored grid.

Press F11 again to leave the


Editor
see Saving changes on
page 518.

As with custom paths, changing

the terrain is a modification of the


environment file. To save terrain
changes, the environment file
must be saved.
Textures for terrain
No two slots can have the same
texture. When changing or adding a texture, the new texture must be different from those already in any slot. Otherwise, the new
selection will not have any effect. For instance, there will be no effect if you try to change the
Grid texture to the Grass texture, and there is already a slot with Grass as its texture.

E3D

To save the environment file,

E3D

530

Movement, Paths, and Terrains


Terrains

3D Animation

Tips and Reference


Tips, and explanations of dialogs and commands, for 3D animation

532

Tips and Reference


Tips

This chapter is has some E3D tips and provides reference for the E3D environment. It covers:
Tips when calling 3D functions from equation blocks
Performance considerations
ExtendSim commands and options for 3D animation
The Animation tabs Animate Item and Animate Block
3D enabled blocks in the Animation 2D-3D library

Menus in the E3D Editor


The four controls located along the top of the E3D window are described in Interface controls
on page 454.

Tips
Using an Equation block to call E3D functions
E3D functions, such as E3DCreateObject or E3DPostCreateObject, can be called from an equation type block. This adds tremendous flexibility to your 3D modeling capabilities. However, the
E3D animation mode that is currently enabled (QuickView, Concurrent, or Buffered) impacts the
functions that you will want to call, especially when referencing 3D objects that represent items.
(For a description of the three animation modes, see 3D Animation tab of Simulation Setup dialog on page 535.)

E3D

Most E3D functions have a post and non-post version. The difference is that the post version
of a function includes a time argument that allows the E3D engine to synchronize the real time to
the 3D animation time. For example, the two functions E3DCreateObject and
E3DPostCreateObject differ only in that E3DPostCreateObject has a time argument. The time
argument is nearly always set to CurrentTime, the current simulation time.
3D objects that represent items
If the E3D mode is Concurrent or Buffered, then you should use the post type functions when
dealing with 3D objects.
In QuickView mode, where 3D actions happen immediately without a real-time synchronization, you should use the functions that operate on the 3D item object immediately.
3D objects that represent blocks or scenery
When the 3D objects represent blocks or scenery and the E3D mode is Concurrent or Buffered,
use the post functions if you want to change them at a specific point in time. If you are not concerned about time (for example you want to create an object, rotate, or mount an object when the
model opens), you can use the non-post functions.

In general, you should not use the post functions when the simulation is in QuickView mode.
Hierarchical blocks and 3D animation
By default, hierarchical blocks and the blocks within them have no representation in the E3D window. Through dialog settings however, some or all of the enclosed blocks can be represented by 3D
objects.
To cause a block within an H-block to have a 3D object representation, check Link to enclosing Hblock on the blocks Block Animation tab. If 3D representation is chosen for multiple blocks within
the H-block, each 3D object will appear in the E3D window in the same positional relationahsip
that the block has inside the hierarchical block.

Tips and Reference


Tips

533

To change the overall location of the 3D objects, move the home position of the hierarchical block
using the Set button and positional arrows on the Block Animation tab. The arrows cause the
home position to be moved in 0.5 meter increments; the Set button allows for exact parameters.

Items stack on top of each other


If multiple items arrive within the same simulation time unit, they will stack on top of each other.
You may not want this behavior unless this is how your system behaves.
The exponential arrival distribution can result in arrival times that are extremely short, causing
items to arrive at exactly the same time. To prevent this, enter some small number, such as 1.0, as
the Location parameter.
This changes the minimum arrival time to one item per time unit, a more realistic minimum for
item arrivals in 3D. You could experiment and make the Location parameter a little less, but if it is
too small, item objects could collide and stack when they arrive.

Performance Considerations
The E3D window is doing a complete textured rendering of a complex 3D environment. The performance of the animation is directly related to the number of objects being rendered and the
capability and sophistication of your computer.
Suggestions for improving performance
There are several things that you can do to improve performance if the E3D window is feeling
sluggish or if the 3D rendering is not able to keep up with the speed of the commands from the
ModL code.
1) The first thing to consider is the capability of your computers graphics card. It is critical to
have a modern, powerful graphics card in your machine for any 3D graphics application. The
3D rendering done by the E3D window is comparable to the rendering done by 3D gaming
software, so buying a card that is recommended for running a modern game is advised.

3) Shadows can be enabled or disabled from the Options dialogs 3D tab. They are cosmetic and
add to the visual impact of the rendering of the 3D world, but are disabled by default since
they will increase the load on the 3D graphics card and processor.
4) The 3D tab of the Options dialog also has a setting that allows you to choose the level of detail
(LOD) of the 3D objects rendered in the 3D window. If you are not having performance
issues, you should probably leave this popup menu on the Very High setting. If you are having
performance issues you can try turning it down to High or Medium. The Low setting is not
recommended unless you are running with very many objects, or on a machine that is not very
capable. On the Lo' setting many objects will not look well defined.
5) The Item Animation or Block Animation tabs show moving previews of 3D objects. Leaving
these tabs open while the animation is running will impact performance.

E3D

2) The number of objects being rendered in the E3D window at one time is one of the key factors
that determine how much work the E3D window is doing. ExtendSim will not impose a limit
on the number of objects you can try to put on the screen at one time, but displaying a large
number of objects in motion can cause the 3D animation to slow down.

534

Tips and Reference


E3D commands, options, and settings

E3D commands, options, and settings


ExtendSim has many application-level commands, settings, and options that affect the appearance
of the E3D window and the behavior of the animation.

Opening the E3D window


Since the commands to display 3D animation are linked to each other, the E3D window automatically opens whenever the associated model opens:
If the command Run > Show 3D Animation has been checked for that model
Or, if Show 3D animation during simulation run has been checked for that model in the Run
> Simulation Setup > 3D Animation tab
To manually cause the E3D window to open, do one of the following:
Give the command Window > E3D Window
Or, click the Open E3D Window tool in the toolbar
Or, click Ctrl+3 (Windows) or command+3 (Macintosh)

A model must be open for the E3D window to open. Also, it may take some time for the E3D
window to initialize and open.

3D tab in Options dialog

E3D

Selecting the command Edit > Options > 3D tab displays the dialog on the right. This tab has several settings that control aspects of the E3D window.
These settings apply to every 3D animation, not just
the one associated with the currently active model.
Shadows. Checking this option causes objects in the
E3D window to cast shadows. By default this option
is not selected since calculating shadows is computationally intensive and can slow the animation.

3D tab in Options dialog

Sounds. Enables objects with sound capability to make a sound. Some of the 3D objects have
ambient sounds and, if you program, there are ModL functions associated with playing sounds
from the E3D window.
Footprints & vehicle trails. These are cosmetic additions to the displaying of the 3D objects.
The footprints are left after the motion of people objects and the vehicle trails after the motion
of vehicles such as cars or forklifts.
MiniMap. This option toggles the displaying of the MiniMap on the E3D window; it is checked
by default. This map is quite useful for location information when building a model, but may
not be necessary for presentation.
3D window outside application (Windows only). By default, the E3D window behaves like a
child window of the ExtendSim application. In the default behavior, the window resides within
the ExtendSim application window just like any other ExtendSim window. If the option is
checked, the E3D window will act like an independent application window and, after restart,
will float outside the ExtendSim application window. (This option is not needed for the Macin-

Tips and Reference


E3D commands, options, and settings

535

tosh because the E3D window is always outside of the application window.) This option is useful if you have multiple monitors.

Level of detail. This popup controls the level of detail (LOD): Very High, High, Medium, or
Low) with which 3D objects are displayed in the E3D window. The choice determines the number of polygons that are drawn for each 3D object; it does not affect the background of the E3D
window. In most cases you should just leave this on Very High (the default). You might want to
change this option is if there are many objects on the screen and the display of models in the
E3D animation is slow.
If the LOD is set to one of the higher settings, the detail is automatically adjusted based on the
cameras distance from the object. In that case, the object will be displayed with a low LOD if
viewed from a far distance. If the LOD is set to Low, the object will be displayed at a low LOD
whether the camera is close to it or not.

3D Animation tab of Simulation Setup dialog

Selecting the command


Run > Simulation Setup
> 3D Animation tab displays the dialog on the
right. This tab has several
settings that control the
behavior of the E3D
window.
These settings apply only
to the currently active
model.

Select mode. Defines how the E3D window and the simulation interact. There are three modes:
QuickView. This default mode allows a simulation model to display its behavior in the
E3D window almost as is. Most of the models blocks will have a representation in the
E3D window; a blocks location in the 2D model will determine the location of the corresponding 3D object. Similar to the 2D animation of the simulation model, only one
object will move at a time in the E3D window. Furthermore, object movement in the E3D
window is not an accurate reflection of timed item movement in the 2D model there is
no direct correlation between simulation time, animation time, and real time.
Concurrent. This mode is most commonly used for a model that has been designed to specifically support E3D functionality. In this mode, multiple objects can be moving in the
E3D window at one time and the locations of the objects in the E3D window do not have
to correspond to the location of the models blocks. In addition, the timing of 3D object

E3D

Show 3D animation
during simulation run.
This option causes the 3D Animation tab in Simulation Setup dialog
E3D window to open
when the model opens. If the E3D window is subsequently closed, it will reopen during model
initialization when the simulation is run. If this option is not checked, you will need to open the
E3D window manually before a simulation run.

536

Tips and Reference


Dialog tabs for animation

movement is directly related to the travel time of items in the 2D model animation time
is based on the ratio of simulation time to real time.
Buffered. Buffered mode is a variation on concurrent mode where the information about
what should happen in the E3D window is stored in an internal buffer and then replayed
later. When the simulation model completes running, the buffered information will be
complete as well and the 3D representation will be stored. At this point, a start button
will appear in the E3D window. When the start button is clicked, the 3D visualization of
the simulation will begin. You have to wait for the simulation to complete before the animation will begin. But because the model is not running while the E3D window is animating, the performance of the 3D animation might be better than for Concurrent mode.
The selected mode is shown in the title bar of the E3D window.
Environment file. Selects a file that specifies the appearance and behavior of the background for
the E3D window. The default is the Extend3D.mis file an empty, unbounded 3D world
with a cloudy sky and a gridded flat floor. This file will also be used if the field is left blank. You
can also create custom environment files as described in greater detail in Saving changes on
page 518.
Define conversion ratios. These ratios specify the relationship for distance and time between the
E3D window and the simulation model. In most cases the default values will not need to be
changed.

E3D

The units of distance in the E3D environment are in meters while distance in the model
worksheet can be stated in pixels. The distance ratio defines how many pixels in the 2D
worksheet represent one meter in the E3D window. The distance ratio defaults to Distance: 20 pixels per meter. For models that use a direct relationship between the two windows, each 20 pixels of distance in the model worksheet will translate to one meter of
distance in the E3D environment.
The time ratio controls the 3D animations display speed for the Concurrent and Buffered
modes; the value of the ratio is reported in the E3D windows title bar. (Since simulation
time equals animation time for the QuickView mode, the time ratio is ignored for that
mode.) For the Concurrent and Buffered modes, animation time in the E3D window is
related to model simulation time by the time ratio. By default the ratio is defined to be
Time: 1 time units per second (one simulation time unit to one second of real time). This
means that if a simulation is set to take 60 time units and the 3D animation is being displayed in Concurrent mode, the display in the E3D window should take 1 minute. The
time ratio value, and the animation speed, changes if you click the Faster or Slower buttons
on the E3D window.

Dialog tabs for animation


The main dialog tabs that affect 3D animation are:
Item Animation
Block Animation
Transport Animation
Most of the blocks in the Item library, as well as the Tank and Interchange blocks (Rate library)
and the Animate 3D block (Animation 2D-3D library), have Item Animation and Block Anima-

Tips and Reference


Dialog tabs for animation

537

tion tabs. The Convey Item and Transport blocks (Item library) also have a Transport Animation
tab.

Item Animation tab


This tab is for choosing objects to represent items in the E3D window. If a block has an Item Animation tab, the tab has a core set of options that are the same for each block. Some blocks have
additional options that are explained below.
Core options
The item options create an object to represent the item as it leaves the block. The options are:
Do not change item animation. The 3D object is the same for the item leaving the block as
when the item entered the block.
Change all items to. Allows you to select an object to represent each item that leaves the block.
Change item animation using property. You can choose which object will represent which item
based on the items properties (attributes, priority, and so forth).
These options are discussed in Selecting an animation picture on page 610.
Create blocks
The Create block has
choices for the Item Animation tab that are not
present in other Item
library blocks:
Represent items as objects in 3D window. When this option is checked, a 3D object will be created whenever this block generates an item. If it is not checked, no object is created to represent
the item. (The list of objects to represent items is shorter than the list of all ExtendSim objects;
only objects with a group tag of items, players, and wheeled vehicles can be used to represent an
item in this block.)
Scale. Sets the scale in the X/Y/Z dimensions of the 3D item object relative to its natural size,
which has a scale of 1.
3D Position. When checked, changes the initial position of the 3D object to the specified X, Y,
and Z coordinates. Leaving a coordinate blank will use the location of the 3D block object as the
coordinate for the 3D item object.
Collidable. When enabled, the 3D objects will collide with each other and not occupy the same
3D area. This is useful for representing items waiting in a queue. If this is not checked, 3D
objects can occupy the same 3D space. This option is only relevant to the concurrent and buffered modes.
Batch blocks
Batch blocks provide two choices on their Item Animation tabs for what should happen to the 3D
object when two or more items are batched together:
Create new 3D animation object. A new 3D object will be created to represent the items that
have arrived to this block. If Do not change item animation is selected in the Item Animation
tab (the default setting), the 3D object will be determined by the _animation attribute option in

E3D

Rotation. Sets the rotation in degrees of the 3D item object around the Z axis.

538

Tips and Reference


Dialog tabs for animation

the blocks Properties tab. This can be overridden by choosing Change all items to or Change
item animation using property to change the animation object in the Item Animation tab.
Mount objects (preserve uniqueness required; not available in QuickView). The original 3D
objects coming into the batch block are mounted onto a base object. The base object corresponds to the 3D object associated with the first item to arrive at the connector that has been
selected by The base object is the item from the connector.
Activity and Workstation blocks
The Item Animation tabs of Activity and Workstation blocks have these additional 3D options:
Mount item while activity is ongoing. Mounts
the 3D item object on the 3D block object while the activity is running. For instance, this could
be used to show parts being processed by the Machine object.
Unmount [-X, +Y, -Y, +X]. If Mount item while activity is ongoing is enabled, this specifies the
direction that the mounted object will initially move to when it is unmounted.
Distance (m). If Mount item while activity is ongoing is enabled, this specifies the distance that
the mounted object will initially move when it is unmounted. The direction is determined by
the Unmount [-X, +Y, -Y, +X] option.

Block Animation tab


This tab is used to create a 3D object to represent the block in the E3D window.

E3D

Core options
The following options are
common to the Block Animation tabs of Item library
blocks.
Show block in 3D window as. When this
option is checked, a 3D
object will be created to
represent the block. If it
is not checked, no object is created. The popup menu provides a choice of objects to represent
the block. Choosing a waypoint object causes an invisible marker, instead of a visible object, to
be created in the E3D window to represent the block.
Rotation. Sets the rotation in degrees of the 3D item object around the Z axis.
Scale. Sets the scale in the X/Y/Z dimensions of the 3D item object relative to its natural size,
which has a scale of 1.
3D Position (X, Y, Z). If Link 2D/3D is enabled, displays the position in the 3D window of the
3D object for this block. If Link 2D/3D if turned off, the fields can be used to set the position of
the 3D object in the 3D window.
Collidable. Turns on the collidable flag for the 3D object representing this block. When collidable is enabled, other 3D objects will be prevented from occupying the same 3D space as this
object.

Tips and Reference


Dialog tabs for animation

539

Z is ground level. Sets the Z coordinate to whatever ground level has been set to. This is useful if
ground level has been changed from the default of 100 meters.
Link 2D/3D positions. Links the locations of the block in the 2D model worksheet with the 3D
object representing the block in the 3D window. If the block is moved on the model worksheet,
the 3D object will move correspondingly.
Link to enclosing H-block. Links the position of the 3D block to the worksheet position of the
hierarchical block containing this block. Generally, you would want to have this checked in only
one of the blocks inside of a hierarchical block.
For activity type blocks
The Block Animation tabs of Activity, Convey Item, Transport, and Workstation blocks have an
additional 3D option:
Enable animation of 3D object. Some 3D objects contain internal animation that shows the status of the object. For instance, the Machine object supports four internal animation states (running, idle, blocked, and down) while the Conveyor supports running.
The Block Animation tab of a Convey Item block has this additional 3D option:
Stretch 3D object to conveyors length. This will cause the associated 3D object to stretch to the
length specified in the blocks Behavior tab.

Transport Animation tab


In addition to their Item Animation and Block Animation tabs, the Convey Item and Transport
blocks (Item library) have some 3D options in a tab labeled Transport Animation. This tab provides several choices for how the object that represents an item should move.

If either move time or speed and distance is selected as the travel time From location options
in the blocks Behavior tab, you can choose the starting and ending
locations for item movement on the Transport Animation tab. If speed and calculated distance is
selected, the from and to locations are determined by settings on the blocks Behavior tab; the location options on the Transport Animation tab will not be available.
2) 3D animation shows simultaneous item movement. Checking the box allows simultaneous
item movement.
In Concurrent and Buffered modes, 3D animation can display multiple objects moving simultaneously. In QuickView mode, only one object moves at a time even if you choose simultaneous item
movement in the Transport Animation tab.

E3D

1) From and To locations. The choices for the from location are shown
ar the right; the choices for the to location are similar. Although in
this tab they are only used to display movement, not to calculate
distance, these options have the same meaning as those discussed in
Calculated distance on page 193.

540

Tips and Reference


Animation 2D-3D blocks

3) The popup menu to the right of the simultaneous movement checkbox allows you to choose how the movement will be displayed:
Along connections. The objects will follow a path that is equivalent to following connections in the 2D model. The from and to
locations are specified in the blocks Behavior or Transport Animation tabs, depending on the selected travel time option.
In a straight line (the default) starting at the from location and
ending at the to location.

Movement options

Along a pre-defined path. For example, the screenshot above shows four custom PassportControl paths. Paths are created in the E3D Editor, as discussed in Creating paths on
page 525, and the E3D window must be open for the names of available paths to appear in
the popup menu. (Paths are invisible by default; to view a custom path in the E3D window, access the E3D Editor.)
If either move time or speed and distance is selected as the travel time in the blocks Behavior tab,
you can choose in the Transport Animation tab how the item should move. If instead speed and
calculated distance has been selected, item movement along connections or in a straight
line is determined by the settings in the blocks Behavior tab. In this case, you can only choose in
the Transport Animation tab if simultaneous movement should be shown or if a custom path
should be used.

E3D

4) Get distance from 3D path length. Calculates the length of the currently selected path and
puts that length into the distance parameter field on the blocks Behavior tab.
5) Move 3D object immediately to start of movement position (Transport block only). Sometimes it is useful to move the 3D object to a starting point. This is common when the 3D item
object is not close to the start of the path or if there is an obstruction between the current location of the 3D object and the from location. Note that if this option is used, the object will
jump in zero time and then begin its timed movement. It will also jump if there is an obstacle
(such as another 3D object) in its path.
6) Show path. Flashes the path used for a few seconds, when 3D animation shows item movement along connections or on a custom path.
The use of the Transport and Convey Item blocks is discussed in Transportation and material
handling on page 192.

Animation 2D-3D blocks


There are four 3D-enabled blocks in the Animation 2D-3D library:
3D Controller
3D Scenery
3D Text
Animate 3D
These blocks are discussed in detail in the following sections.

Tips and Reference


Animation 2D-3D blocks

541

3D Controller block
Use this block to set behavior for
the E3D window or to select the
3D options for a range of blocks.
3D Options tab
Clear items in E3D window
when simulation ends. This
removes objects that represent
items at the end of the run, so
that the window looks as it did
before the simulation started.
Represent blocks as waypoints.
You can choose to cause all 3Denabled blocks to appear as waypoints or just a certain type of
3D-enabled block.
Sun in 3D window, clouds in 3D
window, ceiling color. Uncheck3D Controller: 3D Options dialog
ing the checkboxes causes sun
and/or clouds to disappear from
the E3D window. If the option for the clouds object is not checked, you can modify the color of
the ceiling using the Slider controls.
Scenery tab
This tab allows you to:
Hide all objects created by the 3D Scenery block
Hide the 3D footprint for all 3D Scenery blocks in the 2D model
The 3D Scenery block is discussed below.

3D Scenery block
This block represents scenery and other fixed 3D objects in the E3D window. When initially
placed in the 2D model, this block has a minimized icon. By default, the footprint of whichever
3D object you choose will be reflected in the 2D model by the blocks icon.
Except for the following additions, the options in this blocks dialog are the same as options in
Block Animation tabs of Item library blocks, discussed on page 538.
Show 3D footprint in 2D window. This causes the footprint of the 3D object to appear as an
area in the 2D model. This is useful for knowing where to place blocks in the model so that they
are well positioned for the 3D window.
Show 3D objectID. Enables an output connector so other blocks can access the 3D ObjectID.
With the ObjectID, you can manipulate the properties of the object in an equation-type block
or a block that you build.

E3D

Hide 3D Scenery blocks in the 2D model

542

Tips and Reference


Animation 2D-3D blocks

Show. The blocks input connector can be used to dynamically hide and show the 3D object, or
display the value of the input connector on the object, during the simulation. The choices are to
show:
3DObject when input connector is TRUE
Value of input connector on 3D object

3D Text block
Displays text in the E3D window. The text can be displayed on a visible object or on a waypoint
object. If it is displayed on a waypoint, only the text appears in the E3D window.
This block has many of the same choices as for the Block Animation
tabs of Item library blocks, discussed on page 538. An additional
option is provided by the popup menu shown to the right:
True connector value shows text. Causes the text to be shown or
hidden depending on whether the input connector gets a true
value.

3D Text options

Append connector value to text. Causes the value received at the blocks input connector to be
appended to the text.
Hide connector (text always visible). This is the default option and just shows the entered text.

Animate 3D block
The Animate 3D block is an advanced method for executing an animation action in the E3D window as an item passes through the block. Use this block to augment the standard 3D options built
into the Item library blocks.

E3D

In this blocks Item Animation tab, select one of the 3D actions from the popup menu and enter
the appropriate parameters. These actions correspond directly to functions that can be called from
an equation block or from a custom 3D-enabled block:
Create object
Delete object
Mount object
Set destination
Set position
Set rotation
Set scale
Set target
Set path
Set skin
Set waypoint
Unmount object
The Animate 3D block can be used for almost any 3D action, even one that does not involve the
item that passes through the block. For instance, it can be used to mount one static object onto
another or move an items object from one point to another.

Tips and Reference


E3D Editor menu commands

543

Most of the options will only be useful if the Concurrent or Buffered 3D mode is used. In Quick-

View mode, the 3D objects move without simulation time elapsing, so any action that has a simulation delay (or speed) associated with it will not be processed. Also, in the QuickView mode
mounting one moving object on another moving object will not work properly, as only one object
moves at a time and objects are deleted and re-created each time they move. Furthermore, because
QuickView mode does not have a direct relationship between simulation time and real time,
options such as Set destination and Set target will give unexpected results.

The individual actions are described in the blocks Help and many of them are illustrated in the
Animate 3D Block model located at \Examples\3D Animation\Tips. In that model, Animate 3D
blocks are used to create barrels at a fixed location, set intermediate destinations to a random X/Y/
Z position, set their final destination to a fixed location, and then delete the objects. In the model,
Activity blocks (Item library) are used to delay the items for the amount of time the 3D objects
will require to arrive at their destinations.

E3D Editor menu commands


The E3D Editor, described starting on page 491, has its own set of menus and commands.
Depending on the mode selected, the E3D Editors menus will change somewhat. The first five
menus listed below apply to either the World or Terrain modes; the World menu applies only to
the World mode and the Action and Brush menus apply only to the Terrain mode.
To access the E3D Editor and either the World or Terrain mode:

Open the E3D window


Enable the E3D Editor (F11)
To access the World editors, give the command Window > World Editor Creator (F4) in the
E3D Editors menu.

To access the Terrain editors, give the command Window > Terrain Editor (F6) in the E3D Editors menu.

File
The first four commands in the File menu are associated with creating, opening, and saving environment files. These commands work as you would expect them to.
The Toggle E3D Editor command toggles between the E3D window and the E3D Editor. It is
equivalent to pressing the F11 key.

Because the Extend3D.mis file is protected, you cannot made changes to it. Instead, use the Save
Environment As command to create a new environment file containing the changes youve made
using the E3D Editor.

Edit
This menu has Undo and Copy/Paste commands that work just as you would expect.

Camera
The Camera menu provides control over the speed of the virtual camera, described in MiniMap
and camera on page 455. These commands affect the forward, backward, left, and right motions
of the camera when pressing the W/A/S/D keys or the keyboards direction keys.

E3D

For more information about accessing and using the World modes, see World modes on
page 494; for the Terrain modes see Terrain modes on page 496.

544

Tips and Reference


E3D Editor menu commands

Window
The Window menu contains the mode commands, discussed in E3D Editor modes on
page 493.

Lighting Tools
This menu has a Light Editor and lighting commands. The Full Relight command is especially
useful if the lighting seems confused it causes lighting sources and shadows to be recalculated.

World
This menu is specific to the World editor modes. It has commands for hiding and showing the
selection in the E3D window, deleting the object, and dropping the object at specific locations in
the window.

Action
Specific to the Terrain modes, this menu allows you to add dirt, excavate, and otherwise adjust the
contour of the floor in the animation area of the E3D window. These commands are used in conjunction with the commands in the Brush menu.
The Select and Adjust Selection commands are for making a semi-permanent selection of the
terrain. They work together to allow you to choose a section of the terrain and apply the equivalent of the Adjust Height command to it.
The Add Dirt, Excavate, Adjust Height, Flatten, Smooth, and Set Height commands determine
what will happen when you left click an area and move the mouse to brush the area.
The Paint Material command allows you to change the texture or color of the floor. It is the
command used when changing the texture in the Terrain Texture editor.

Brush
Specific to the Terrain modes, this menu is for choosing the shape, consistency, and size of the
brush when performing actions (from the Action menu) on terrains.

E3D

There are three selection sections in this menu and each allows one choice.
Shape. The Box Brush is square and will affect a square grid of nodes on the terrain. The Circle
Brush shape is obviously circular. If you switch between these two shapes you should see the
shape of the brush changing as soon as you move the cursor onto the terrain.
Consistency. This can also be seen in the viewing area of the E3D window. Each of the terrain
nodes that are going to be affected by the brush action will be drawn with a square on it at the
point where the brush touches it. These squares, outlined in the case of the brush and solid in
the case of the selection mode described in the Action menu, are drawn in different colors based
on how hard the brush is. The hardness determines how much the Action will effect the terrain
that the brush touches. If you select a Hard Brush, all the nodes will be drawn in red and the
Action will affect each node equally. If you select a Soft Brush, the central nodes will be drawn in
red and the outer nodes will blend toward green. With a Soft Brush, the Action will affect the
central nodes (red) more then the outer nodes (green).

Size. The brush will affect an area the size of the selected command.
Terrains are discussed on page 528.

How To

Libraries and Blocks


A description of ExtendSim libraries and blocks
and the many ways to use them

The first thing to have in a library is a shelf.


From time to time, this can be decorated with literature.
But the shelf is the main thing.
Finley Peter Dunne

546

Libraries and Blocks


The ExtendSim libraries

Working efficiently with libraries and blocks is critical to simulation modeling. This chapter discusses:
The libraries available with ExtendSim products
How to open and use libraries
Creating and managing libraries for block developers
Working with blocks, including using variable connectors
Managing blocks in libraries
Hierarchical blocks

The ExtendSim libraries


ExtendSim libraries are repositories for the blocks that you use to build models. ExtendSim ships
with several libraries, each one containing blocks that are used for modeling specific types of systems. You can also develop your own libraries of custom blocks, or create libraries to save and organize hierarchical blocks in a way that best works for your modeling needs.
Libraries that are most often used, such as the Value and Item libraries, are stored at the top level
of the ExtendSim9\Libraries folder.
The Example Libraries folder within the Libraries folder contains libraries created for specific
purposes, such as the Tutorial library for block developers
The libraries in the Legacy folder are included for backwards compatibility, so models created
with those older libraries can run. They are no longer supported and should not be used to create new models.
The following describes the libraries that ship with ExtendSim products. (Note that some libraries
are only available in specific products.)

Animation 2D-3D library

How To

The Animation 2D-3D library lets you add custom animation to models and hierarchical block
icons. The Animate Item and Animate Value blocks in this library are used to add 2D animation
to models and hierarchical blocks, as described in Blocks for customized animation on page 611.
The 3D animation blocks are discussed at Animation 2D-3D blocks on page 540; they are used
with the 3D animation feature of the ExtendSim Suite product.

Electronics library
The blocks in the Electronics library are used to simulate system level design of analog, digital, signal processing, and control systems. Electronics blocks are used in the model Noisy FM system
on page 77.

Item library (not available in ExtendSim CP)


The blocks in the Item library are used primarily in discrete event modeling, although they can
also be included in discrete rate models. If you add a single block from this library into a continuous model, the model automatically becomes a discrete event model. Discrete event models track
individual quantities and entities that can have unique characteristics. The Appendix that starts on
Item Library Blocks on page 829 has a complete list and brief description of the blocks in this
library.

Libraries and Blocks


The ExtendSim libraries

547

Plotter library
The Plotter library holds all the common types of Plotter blocks used to graph and output data for
models. Some of these are specific to continuous or discrete event models, while others can be used
with any type of model. In addition to the simple plotters you have already seen in the tutorials,
ExtendSim plotters can show scatter plots, moving strip charts, histograms, and so on. All plotters
are described in detail in Plotters on page 663.

Rate library (not available in ExtendSim CP or ExtendSim OR)


The Rate library is used for discrete rate simulations, where you model the flow of materials
according to some rate-based calculations. Discrete rate models often use blocks from the Value
and Item libraries. A complete list and brief description of the blocks in this library starts on
page 838.

Utilities library
The Utilities library contains a collection of helpful blocks for performing various tasks such as
counting the number of blocks in a model, fitting data to a curve, synchronizing the model to real
time, timing the duration of a simulation, adding active buttons to models, and so on. A complete
list and brief description of the blocks in this library starts on page 841.

Value library
The Value library contains blocks that are primarily used for continuous modeling, although they
play a critical role in other types of models as well. You used some of these blocks when building
the Reservoir model in the tutorial at the beginning of this User Guide. Continuous models represent a smooth flow of values that are recalculated at periodic time steps. A complete list and brief
description of the blocks in this library starts on page 822.

Example Libraries folder


The following libraries are located in the ExtendSim9/Libraries/Example Libraries folder.
Custom Blocks library
These blocks have been created for very specific purposes, such as to illustrate a concept or hardcode certain behavior. For instance, the Planet block from this library is used in the model discussed at Planet Dance on page 81.

Templates library (discrete event blocks are not available in ExtendSim CP)
Contains hierarchical blocks that serve as templates for specific behaviors, such as setting the
arrival time based on the time of day.
Tutorial library
Contains blocks built in conjunction with tutorials in the Developer Reference.

Legacy folder
Several libraries are stored in the \Libraries\Legacy folder. The legacy libraries are furnished for
backwards compatibility, so that you can run models built with previous releases of the software.
Depending on which ExtendSim product you purchased, the Legacy folder will contain some or
all of the following libraries:

How To

ModL Tips library


This library contains blocks that illustrate the techniques described in the ExtendSim Developer
Reference.

548

Libraries and Blocks


Using libraries

Animation
BPR
Discrete Event
Flow
Generic
Items (DB)
Mfg (Manufacturing)
Quick Blocks
SDI Tools
The legacy libraries (listed above) have been replaced by the Animation 2D-3D, Item, Item
Templates, Rate, and Value libraries.
The legacy libraries will not be included in future ExtendSim releases. They are no longer supported and are supplied without warranty of any type or for any purpose. Legacy libraries are
included in this release so that you can run models built in previous releases; they should not be
used to create new models.

Using libraries
Opening a library
Whenever you open a model, ExtendSim automatically opens the libraries that are used in the
model.You can also manually open a library or instruct ExtendSim to automatically open some
libraries when it starts.
To open a library manually, for example when you are starting a new model, choose Library >
Open Library. You can also double-click the library file or drop-launch it. You open libraries one
at a time with these methods.

How To

To specify that a specific library, or several libraries, open when ExtendSim launches, go to the
Edit > Options > Libraries tab and enter the names of the libraries you want pre-loaded. See
Options on page 792 for more information.
When a library opens, ExtendSim adds the library name, in alphabetical order, to the bottom of
the Library menu. Select a library name to see a submenu of the different block categories for that
library, which further expand to show the list of blocks for each category.

Libraries and Blocks


Using libraries

549

To view all the blocks in a library alphabetically rather than

grouped by category, go to the Edit > Options > Libraries tab


and uncheck List blocks by category.

Closing a library
Unless you close ExtendSim, libraries stay open whether they
are used in a model or not. You can close libraries that are not
used in a model by choosing Library > Close Library and selecting the library you want to close. To close multiple libraries,
Shift select the libraries (or use the Ctrl (Windows) or Command key (Mac OS)), then click Close. It is unlikely that you
will need to close libraries often since open libraries do not take
up much memory and it is usually convenient to leave all your
commonly-used libraries open. Once you save the model, the
closed but unneeded libraries will not automatically open when
you open the model again.

Close Library dialog

ExtendSim will warn you and will not let you close a library that is being used by an open model.
Searching for libraries and blocks
When you open a model, ExtendSim automatically searches for the blocks the model uses.It first
searches for the libraries in which the blocks last resided.
Library searches
The search order ExtendSim uses to locate libraries is:
The Alternate path, if any, specified in the Options dialog
The Libraries subfolder within the ExtendSim folder
The folder containing the model
You can manually stop this search process at any time by pressing Ctrl+period (Windows) or Command+period (Mac OS). You can also force a manual search process by unchecking Automatic
search in the Edit > Options > Libraries tab.

Libraries should be kept in the Libraries folder, in the same folder as the model that uses them, or
in a folder specified as the Alternate path in Edit > Options > Libraries tab. Otherwise, ExtendSim will always ask you for the location of the library.
If ExtendSim cant find a library when the model opens, it will put up a file selection dialog that
asks Where is the library xxx?. Your choices are:
Cancel the library search operation. ExtendSim will then try to find the missing blocks, as
described in Block searches below.
Find and open the library manually. Since ExtendSim only needs to know where the blocks for
the model are, you could also use this choice to substitute a library that has a different name (but
the same named blocks) as the search library. See Substituting one library for another on
page 553 for more information.

How To

If you have renamed, deleted, or moved a library from the expected folder since the model was last
saved, manually stopped the search process, or unchecked Automatic search in the Options dialog, ExtendSim will not be able to find the library.

550

Libraries and Blocks


Using libraries

When the model file is subsequently saved, any new library name and/or location will be saved as
well, so searching will not be necessary the next time the model file is loaded. (Although if Automatic search is unchecked, ExtendSim will still ask you to locate the libraries.)
Block searches
As described above, ExtendSim searches for the blocks a model uses by first searching in the libraries that contained those blocks. However, ExtendSim may not be able to find the blocks if you
have renamed the blocks or removed them from the library. Once the library search is finished,
whether successfully or in situations where the search has been cancelled, ExtendSim prompts you
to locate any missing blocks. The dialog offers two choices:
Choose Open to locate and open another
library where the block resides. If ExtendSim
is unable to locate the block in this library, the
Substitute Block dialog will open which will
allow you to substitute an alternative block
from any open library. When the model file is
subsequently saved, any new block name and/
or location will be saved as well, so searching
will not be necessary the next time the model
file is loaded.

Any substituted block must be substantially the

Substitute Block dialog

same as the searched-for block, or ExtendSim will report error messages.

Select Cancel if the block no longer exists or if you cant


substitute another block. In this case, ExtendSim notifies you that it will put text in the place of the block.

How To

Warning message

Libraries and Blocks


Creating and maintaining libraries

551

Library windows
The first choice in the blocks list for each library listed in the
Library menu is Open Library Window. This opens a window
that shows all the blocks inside that library in alphabetical
order. You can also open a library window using the Navigator,
as discussed at Library Window mode on page 771.

If you enter libraries in the Edit > Options > Libraries tab to be
pre-loaded when ExtendSim launches, you can also choose
Open library window so that the window for the selected
library will also automatically open.

The top of the library window gives information about the


library version, size, and date last modified. The blocks in the
library are listed with pictures of their icons and, if the Show
library window dates option is selected in the Options dialog,
their last modified date.
Library windows provide an additional method for adding
blocks to models, as shown at Library Window mode on
page 771. If you program blocks, you can also use library windows to manage blocks, as discussed in Managing blocks on
page 560, and to access a block's structure as discussed in the
Developer Reference.
Note that closing the library window only closes the window,
not the library itself.

If a block has been compiled with external source code, it will

Library window for Value library

be listed in the library window with the designation CM (code


management) on the right side of its icon. If a block has been compiled with debugging code, its
name and any additional information will be listed in the library window in red and it will show in
a model window with a red border around it. Compiling options are used by block developers and
are discussed in the Developer Reference.

Creating and maintaining libraries


You do not need to start a new library unless you build your own blocks or want to save hierarchical blocks in a library.

How To

552

Libraries and Blocks


Creating and maintaining libraries

Creating a new library


To start a new library, choose Library >
New Library. A dialog appears where you
can select a location for the new library
and give it a name. Libraries should be
saved in the ExtendSim9/Libraries folder
so that ExtendSim can quickly find them.
If you build your own blocks or modify
ExtendSims blocks, you should put them
in your own library. Do not put them in
the libraries that come with ExtendSim.
Otherwise when you install a new version
of ExtendSim, you could lose the blocks
you built.

Saving and compiling libraries

New Library dialog

Every time you make a change to a library,


such as adding a new block or moving a block from one library to another, ExtendSim automatically saves the library. If you build a block and save it, both the block and the library are saved.
When you create blocks using ExtendSims ModL programming language, the blocks need to be
compiled to machine code so they can be used to build models. If you make a change to an
Include file that is used by more than one block, its usually simplest to recompile the whole library
so the blocks incorporate the Include file.
Unless you program your own blocks or move a library from one operating system to another (for
example, if you move a library from Windows to Mac OS) you do not need to compile. The libraries and blocks that are packaged with ExtendSim are already compiled.
To compile a block or a library, use the compile commands in the Develop and Library menus:

How To

The Develop > Compile Block command compiles the block to machine code without saving or
closing the block. This is useful for testing new code for syntax errors as you are building the
block. This command is only enabled when the blocks structure window is the active window.
The Library > Tools > Compile Open Library Windows command compiles all libraries whose
windows are open and saves the changes. This command is only enabled when at least one
library window is the active window.
The Library > Tools > Compile Selected Blocks command compiles all the blocks that are
selected in a library window and saves changes. This command is only enabled when a library
window is the active window and one or more blocks are selected in the library window.
Compiling a library or block with debugging information allows you to set breakpoints, watch
points, and so forth. Compiling with external source code causes ExtendSim to generate an external file that contains the source code; this is useful for version control.

Blocks with debugging code show in the library window with their names in red and show in a

model window with a red border around their icon. Blocks with external source code will show in
the library window with CM (code management) next to their icons.

For more information about saving and compiling libraries, see the Developer Reference.

Libraries and Blocks


Creating and maintaining libraries

553

Substituting one library for another


If you create your own blocks, you might want a model to use the blocks from a library with a different name. For example, if you have developed a newer version of a library and you want the
model to use those blocks. Normally ExtendSim opens the library too fast for you to stop it.
In order to bypass this process, you can choose to not have ExtendSim automatically find and open
libraries when a model opens. You do this by deselecting the Automatic search option in the
Edit > Options > Libraries tab. If you do this before opening a model, ExtendSim will stop and
request the location of each library the model uses. You can then use the dialog to find and open
the libraries you want the model to use. This will work even if the library name is different than
the one the model originally used, because what is important to the model is the block name
within the library, rather than just the library name.
Once all the required libraries are open, save the model. So that the model will again open the
libraries automatically, go to the Edit > Options > Libraries tab and select Automatic search before
reopening the model.

Arranging blocks in libraries


If you build your own blocks, you could put all of the blocks you use (up to the 200 block limit) in
one huge library. That way, you would never have to try to remember which block was where or
remember where your libraries are on your hard drive. However, this arrangement could make it
difficult to maintain your blocks.

Simulations run neither faster nor slower when you group your blocks in a single or multiple

libraries. The only performance consideration is that it initially takes more time to open multiple
libraries than it does a single library.
There are typically three classes of libraries you might want to create: general-usage, subject-specific, and model-specific.
General-usage libraries hold blocks that might be used in a wide variety of models.
Subject-specific libraries are for blocks that are only relevant to one subject, such as paper making.
Model-specific libraries hold blocks that are only used in a single model.

Protecting the code of library blocks


If you build your own blocks, you may not want others to have access to your code. As discussed in
the Developer Reference, ExtendSim blocks contain ModL code and can also reference Include
files.
You can prevent others from accessing the code in your libraries by 1) not giving them the Include
files and 2) removing the ModL code of the blocks. To remove ModL code from your blocks, use
the Library > Tools > Protect Library command. This process creates a duplicate of the library,
with all the source code removed. Keep the original library in a safe place, since there is no way to
recover the ModL source code from the protected library.

How To

Do not add blocks to the libraries that come with ExtendSim or move blocks from those libraries.
If you add blocks to an ExtendSim library, your work will be lost when you update. If you move
blocks from an ExtendSim library to a library you create, the blocks in your library will not be
updated when the ExtendSim library is updated.

554

Libraries and Blocks


Working with blocks

To protect a hierarchical block's structure and prevent a user from double-clicking the hierarchical

block to see the underlying submodel, use the Model > Lock Model command discussed at Locking the model on page 777.
A protected library can be used in the same way as any other library except that the ModL code
cannot be altered or viewed. This means that someone using the library has all the functionality of
the blocks in that library but no ability to see how the blocks work.

To keep a library from being used to build models, while still allowing it to be used to run simulations, see Convert Library to RunTime Format on page 801.

Converting libraries to RunTime format


As discussed at The ExtendSim LT version on page 778, the ExtendSim LT-RunTime version is
useful for distributing models to those who do not have a full ExtendSim license. To have your
custom libraries be available to run models in the LT-RunTime version, but not available to build
models, convert them to RunTime format. Converting libraries to RunTime format also prevents
them from being used in the full version of ExtendSim. The conversion process is described in
Convert Library to RunTime Format on page 801.

Working with blocks


ExtendSim blocks have a user interface (their icon, dialog, and help) and internal, integrated
ModL code that determines how the blocks behave.
Blocks are stored in repositories called libraries. The entire definition for a block (its program,
icon, dialog, and so on) is stored in the library. When you include a block in a model, the block
itself is not copied to the model. Instead, a reference to the block is included in and stored with the
model. Any data you enter in the blocks dialog is also stored within the model.

Customizing block icons

How To

The blocks in the libraries that come with ExtendSim (such as the Value and Plotter libraries) are
displayed on the screen as icons that depict their function. Once you place a copy of these blocks
in your model, you might want to make its icon more closely indicate its role in your particular
model. However, using programming to change a blocks icon in one model will change it in every
model using that block, since blocks and their internal descriptions reside in libraries, not in models. In addition, since some blocks are animated, it is not easy to change a blocks icon without having to modify its ModL code. For these reasons, you should not change the icon on the blocks in the
libraries that come with ExtendSim.
If you build your own blocks, you can give them any icon you want. However, there are two better
ways to customize blocks in your model without having to directly modify icons:
You can paste pictures on the worksheet to customize the model. Pictures automatically go
behind blocks and text. For example, you can place a map of a region behind your model, or
show the layout of a plant. This is described in more detail in Working with pictures on
page 621.
You can also add a picture to a block without affecting the original one in the library by making
the block hierarchical. This technique is described in more detail in Modifying hierarchical
blocks on page 606.

Icon views
As you saw in Dialogs on page 16, some blocks have multiple icon views. If a block has icon
views, the choice of view will determine how the block looks on the model worksheet.

Libraries and Blocks


Working with blocks

555

For example, an icon view could provide:

Alternate connector positions, such as an input connector on the right side of the block. This
helps avoid awkward connection line placements when building models.

Choices of icon size, such as regular and reduced size. An example is


the History block (Item library) where the Status view is smaller than
the Default view.
Different icons depending on choices that have been made in the
blocks dialog. For example, a block that represents a flow could be
pointed forward in the view labeled Forward and pointed backward
in the view labeled Backward.

History icon: Default and


Status views

Alternate icons depending on what the block represents in a model. This is often used for hierarchical blocks that represent a specific process in one part of the model but a different process,
with the same functionality, in a different part of the model. For instance, in the Markov Chain
Weather model discussed on page 50, the hierarchical block Weather Forecast uses views to
indicate the current state for a state/action model.
Blocks without icon views will not have any
choices in the Views popup menu at the bottom of the blocks dialog. If additional views
are present, they can be selected by right-clicking on a block or by using the Views popup
menu. They can also be called by functions.
ExtendSim facilitates the creation of different
icon views while developing or editing a
blocks structure. For more information see the
Developer Reference.

Connectors
Connectors are used to input and output values, items, or flow for each block.
Icon views for Holding Tank block

How To

The Model menu has commands that let you


show or hide the connectors in the model
workspace. Hiding connectors can improve
the appearance of the model, especially for
complex models with many blocks.

Reservoir model with connectors hidden

556

Libraries and Blocks


Working with blocks

Connector types
Connectors on a block are visually different, depending on how theyre used. This table describes
the different types of connectors that can be seen on or (if you program) added to blocks in
ExtendSim.
Type

Input

Output

How theyre used

Value

Continuous blocks use value connectors to pass values


from one block to another. Blocks in the Item and
Rate libraries may also use value connectors for the
same purpose.

Item

Discrete event blocks use item connectors to pass discrete items. Blocks in the Rate library may also use
item connectors for the same purpose.

Flow

Discrete rate blocks use flow connectors to pass information about the effective rate from one block to
another. You can also connect from a flow connector
(input or output) to a value input connector.

Universal

Universal connectors are usually used as inputs. Value,


Item, Flow, and User-Defined output connectors can
connect to Universal inputs.

Array

Array connectors are for passing arrays of information


from one block to another.

User Defined

User Defined connectors can be programmed to


behave in any manner the developer wants.

How To

Other than some specific instances, you cannot connect from one type of connector to another.

For example, attempting to draw a connection from an Item output connector to a Value input
will result in an error message. The two exceptions are that Value, Item, Flow, and User-Defined
outputs can be connected to Universal inputs, and Value outputs can be connected to Flow inputs.
Variable connectors
Regardless of type, each connector can be single or variable depending on how the block is constructed. Variable connectors act like a row of single connectors, where the row can be expanded or
contracted to provide a required number of connectors. Some blocks have only single connectors,
some have only variable connectors, and some have a mix. Variable connectors are usually designated by a black arrow, as shown below.

Libraries and Blocks


Working with blocks

557

The Constant block has two single input connectors and one single output connector:

A Math block in Add mode has a variable input connector and a single output connector:

The Math block's variable connector expanded to provide three inputs:

Each block's functionality determines whether or not it has variable connectors, where they are
located, and what each connector represents. For example, a variable connector could have connectors captioned minimum and maximum placed on the bottom of the block for downward expansion.
Variable connectors can be expanded or contracted; they can also be collapsed. You expand or contract a variable connector to provide the desired number of inputs or outputs. You collapse a variable connector to improve model appearance.
Expanding or contracting a variable connector
Wherever possible a block will anticipate its usage and provide the required number of connectors.
For example, the Holding Tank block (Value library) has a variable connector that can be
expanded to provide three inputs: the amount wanted from the tank, a trigger to reset the tank's
settings, and the amount of initial contents. You might use one, two, or all three of those inputs,
but the block won't allow more than three inputs.

Drag the variable connector (as discussed below) until the desired number of connectors is
achieved. An example of this is the Reservoir model in , Building a Model , where you
expanded the variable connector of the Math block (Value library) to two inputs, one each for
rainfall and stream. If instead you had six water sources you could have expanded the variable
connector to accommodate all six.
Change some setting in a dialog, causing an increase or decrease in the number of connectors.
An example of this is the Random Number block (Value library), where you select a distribution
from a popup. Depending on the distribution chosen, the variable connector will provide from
two to four inputs for specifying the distribution's arguments. Since the number of arguments
for each distribution is fixed, you will not be able to expand the number of connectors beyond

How To

For other blocks, the number of connectors you might need depends on choices you make in the
dialog or how you use the block in a model. There are two primary methods for causing a variable
connector to change the number of available connectors:

558

Libraries and Blocks


Working with blocks

the proper number. You can, however, contract the variable connector as discussed below. Note
that some blocks with variable connectors, such as the Equation blocks, do not allow you to
increase or decrease the number of connectors except through dialog settings.
To increase the number of connectors, hover the cursor over the black arrow on the variable connector until it becomes a dragging cursor (shown at left). Then click and drag in the direction of
the arrow. As you drag, more connectors appear and the number of connectors is displayed.

You will not be able to expand a variable connector beyond what is reasonable for the block, given

its usage and dialog settings. And some blocks, for example the Equation blocks, do not provide a
black arrow for expanding the number of connectors; the number of connectors in those blocks is
only controlled through the dialog.
To decrease the number of connectors, hover the cursor over the black arrow at the end of the last
connector until it becomes a dragging cursor. Then click and drag back towards the variable connector's starting point.

You will not be able to contract a variable connector below what is reasonable for the block, given

its usage and dialog settings. The number and location of connections to the variable connector
will also affect its ability to be contracted. If none of the connectors, or only the first connector, is
connected, you can contract the variable connector back to its unexpanded position by clicking
and dragging, as described above. However, if you have connected to more than one connector,
you can only contract the variable connector to the point of the outermost connection. In this
case, to reduce its size you need to collapse it, as discussed below.
Collapsing a variable connector
As discussed above, if you have made connections to a variable connector you might not be
allowed to contract it back to its unexpanded position. This is a safety mechanism, so that it is
clear what connections have been made. However, to simplify the appearance of the model, you
can collapse a variable connector to an unexpanded state even if it has many connections to it.
To collapse a variable connector, place the cursor over the black arrow until it
becomes a dragging cursor, then double-click. The connector now appears with
a red + sign in place of the black arrow, as shown on the right.

How To

To reverse the process, place the cursor over the red + sign until it becomes a
dragging cursor, then double-click.

Connecting to different connector types


As you saw in earlier chapters, you can use continuous blocks (such as those from the Value
library) in your discrete event and discrete rate models, which means you can have blocks in a single model that use different types of connectors (some blocks have multiple types of connectors on
them as well).
You can connect value connectors together, item connectors together, and flow connectors
together. You can also connect value and flow connectors to each other, but you cannot connect
value and flow connectors to item connectors. This is because value and flow connectors only pass
values while item connectors pass unique items.

Any type of connectorvalue, flow, or itemcan be connected to universal input connectors.


Also note that if you create blocks that have user defined connectors, those connectors can only be
attached to other user defined connectors and to universal connectors.

Libraries and Blocks


Working with blocks

559

Dialogs
Most block dialogs let you change or view the settings before, during, and after a simulation run.
Some of the things you can do using a dialog include:
Choose from multiple functions (e.g. the Math block)
Enter initial values
View simulation results
Add comments to help document your models
Set animation criteria
Choose notification options
To open a blocks dialog, double-click or rightclick the blocks icon. For example, if you double-click the Holding Tank icon, the dialog at
right opens.
In the dialogs title bar is the blocks global
block number, its name, and, in braces, the
library it resides in.
As each block is added to a model it is assigned
a unique and sequential global block number
from 0 to n-1. This sequence does not change.
If a block is deleted, its number becomes an
unused slot which is available when another
block or text is added to the model window.
Each block within a hierarchical block has a
second, local, block number that reflects its
relationship to the other blocks in the hierarchical submodel.

Holding Tank dialog

At the bottom of every dialog is a Help button that provides more information, such as the blocks
purpose and use, what each connector does, the meaning of each dialog item, and so on. Beside
the button is a text box where you can enter a label for the block, up to 31 characters. The View
popup box lets you change the view of the icon for the selected block, when available.
Some dialogs also calculate and display values that are generated as the model runs, so if you leave
a dialog open during the simulation, you can watch the impact on different variables. You can even
change some of the settings in a dialog as you run the simulation, such as choosing different buttons or typing new values.

When you click a button while the simulation is running, the block gets that changed value on the
next step. However, if you type text or enter numbers into a field, the model pauses while you are
typing in order to get your entire input.

How To

Left: Random number block on worksheet, global number is 13


Right: Inside hierarchical block, global number is still 13, local number is 0

560

Libraries and Blocks


Hierarchical blocks

Animating blocks
ExtendSim provides built-in animation for many blocks and you can also create custom animation
for any block. To learn more, see Animation on page 609.

Hierarchical blocks
Its not unusual for models to have thousands of blocks in them, which can make it difficult to
understand what is happening in the model. Hierarchy helps solve this problem by grouping several blocks together into one hierarchical block that represents a portion of the process being modeled. A hierarchical block can contain submodels, text, graphics and clones of dialog items and
tables. Hierarchical blocks can even contain other hierarchical blocks, so there are multiple levels
of hierarchy.

The Navigator window in Model Exploring mode is a useful tool for quickly drilling down
through the different levels of hierarchical blocks to find the one youre looking for.

Because hierarchy is mainly used to enhance or simplify model appearance, it is discussed in further detail in Hierarchy on page 598.

Managing blocks

The topics within this section are only for block developers and those who save hierarchical blocks
in libraries.

Copying blocks
To make a copy of a block in the same library, select the block in the library window and choose
Edit > Duplicate. The Duplicate command copies the block into the current library and renames
it with the block name followed by the word Copy. This is common when you want to use the
ModL code in one block as the template for a different block.
To copy a block from one library to another, open the library windows for each of the libraries.
Then drag the block from its library window to the destination library window.

Changing a blocks name

How To

To change the name of a block, select the block in the library window and choose Develop >
Rename Block. Then type in the new name. If you change the name of a block, models that use
that block will not be able to find it because they are expecting the original name. ExtendSim will
then ask you where the block is located and present a dialog box for searching, as discussed in
Block searches on page 550.

Removing blocks
It is rare that you will want to remove a block from a library but, if you do, select the block in the
library window and choose Edit > Clear or press the Delete or Backspace key. ExtendSim will not
let you remove a block that is in use in an open model window. If you remove a block that is used
by a model and later open that model, ExtendSim will present an error message and give you the
opportunity to indicate the location of the missing block; if it can't find the block, it will put a
placeholder in the model window.

Corrupted blocks
On rare occasions, you may get a message as you open a library that indicates that a block has been
corrupted or is bad. The corrupted block will appear in the library window as *BAD*Blockname.
To save the rest of the library, copy the uncorrupted blocks to a new library and discard the old
library. Then copy a backup copy of the block (if you have one) into this new library. This is a
good reason to always back up your work!

How To

Creating a Custom User Interface


Personalize the ExtendSim
modeling environment

If you can dream it, you can do it.


Walt Disney

562

Creating a Custom User Interface


Cloning

Every modelers needs are different. ExtendSim offers a variety of methods to customize the applications interface so you can work in the most convenient and effective manner. This chapter discusses several methods you can use to create a user interface, including:
Cloning dialog and plotter items to change model parameters and report results
Centralizing data in a database
Simplifying and organizing models with hierarchy
Creating a dashboard interface
Using the Notebook to document and manage your models
Adding Controls to change and monitor critical parameters on the fly
Interacting with the model user
Using external applications as an interface
Documenting models using text and graphics

Cloning
In most programs, buttons and dialog parameters are found only in dialogs. The advantage of this
is you always know where to find them. However, having all your choices in dialogs can be a disadvantage in large models. For instance, you may want easy access to parameters in blocks that are
scattered in multiple hierarchical layers throughout the model. Or you might want to provide a
more accessible interface for other users of the model. ExtendSim overcomes these problems by
giving you freedom to clone dialog and plotter items and place them in a more convenient location, effectively creating a link with the original dialog item.

How To

Cloning gives you easier access to dialog and plotter items when you want to change settings or
monitor simulation results. Dialog parameter fields, tables, text, buttons, checkboxes, and radio
buttons, as well as graphs and data tables from plotters can all be cloned. Cloned items can be
placed in the model window, Notebook, or a hierarchical blocks worksheet, and text labels can be
used to make the cloned item easy to understand. You can clone multiple items from the same dialog or plotter or clone the same item to more than one location. Every clone acts exactly like the
original: if you change the original or any clone, all instances are updated immediately.
Using cloned dialog items puts you in direct control of your models. Clone the dialog items to a
centralized location so you can easily change parameters. Label the clones so they are well-documented and use them as the simulation runs, such as clicking buttons or entering values in text
entry boxes. For example, clone a Constant blocks Constant value field to change the value
between simulations without having to open the blocks dialog, making it easier to test different
assumptions. Or have an area of the model or its Notebook that lets you monitor several numeric
values at a time, rather than just using the Plotters graph to watch the simulation results.

Clones that display changes will cause the simulation to run slower.
How to clone a dialog item

The same technique is used to clone an item onto the model or hierarchical blocks worksheet or
into a Notebook.

Open the Reservoir 1 model (located in the ExtendSim9\Examples\Tutorial folder)


Double-click the Holding Tank block to open its dialog.
Click the Clone layer button in the toolbar to select that tool.

Creating a Custom User Interface


Cloning

563

Select both the Current level text and its parameter field and drag them onto the model window below the Holding Tank block.

Hold down the Shift key to select multiple items or drag a frame around them. Clones can be
moved, resized, and aligned after they are placed.

Close the dialog.

Cloned Holding Tank dialog items

Run the simulation.


The cloned item will display the changing level in the Reservoir as the simulation runs.

Cloned item after simulation run

If the model runs too quickly to see the change, go to Run > Simulation Setup > Setup tab and
change the end time to something much larger, such as 1000, then run the simulation again.

Using cloned items


Once you have a cloned item, you can drag it almost anywhere you want. Many people prefer to
have all the items together at one side of the model window, for example, or to clone all dialog
items into the Notebook or into a hierarchical block.

To move a cloned item, choose the Clone tool from the toolbar, click on the item, and drag it. To
align two or more clones, select them and use the Model > Align command.
To resize a cloned item, choose the Clone tool and click once near
the center of the cloned item so that the resizing handles appear.
Then click and drag a handle to change the size and shape of the
clone.
To remove cloned items from a model, simply select them (using
the Clone tool) and press the Delete key or choose Edit > Clear.

Resizing cloned item

If you delete the block from which you cloned a dialog item, the cloned item is automatically
deleted.

How To

You cannot move a cloned item from one hierarchical block to another unless the target hierarchical block contains the source hierarchical block.

564

Creating a Custom User Interface


Centralizing data in a database

To find and open the dialog from which an item was cloned, choose the Clone tool and doubleclick the cloned item.

Unlinked clones
If a blocks structure is modified by deleting a dialog item or changing the tab
order of the dialog items, clones associated with that block may become
unlinked. In this case, the clone will be grayed out and ??? will appear in place
of the cloned dialog item.

Unlinked clone

Choosing the clone tool and double-clicking the unlinked clone will cause an alert message to
appear. Then the dialog of the block from which the clone originally came will open. You may
then select a replacement item to clone, or simply delete the clone if it is no longer needed.

Centralizing data in a database


Cloning is a quick and easy way to create a user interface. However, for large models it may be too
tedious to clone all the necessary items for easy access. ExtendSim databases are useful for organizing data for complex models into a central location.
You can create databases to store parameters to be used in the model, model results, or a combination of the two. Use the linking technologies to dynamically link dialog parameters or tables with
the database. Or use the Read and Write blocks to dynamically access database data. Since databases are primarily data management systems, see further discussion at ExtendSim databases for
internal data storage on page 726.

Hierarchy
Hierarchy is useful for customizing a models interface. It reduces the number of blocks visible on
the model worksheet, so models are easier to understand and navigate. It is also used to organize
the model into easily-recognized components, separating the model into process elements that are
more closely tied to reality.
For instance, you could encapsulate portions of a model into hierarchical block then clone dialog
items to the top of the hierarchical block's worksheet for easy access. Or add custom pictures as
icons for groups of hierarchical blocks that all relate to a certain part of the process youre simulating. You could also create a hierarchical Help block for the model user, as discussed at Help
block on page 572.

How To

For more information about working with hierarchy and customizing and animating hierarchical
blocks, see Hierarchy on page 598.

Creating a dashboard interface


In addition to permitting cloned items in
the Notebook or model worksheet for
creating a user interface, ExtendSim lets
you add customized buttons, popup
menus, and on/off switches.

Model window
showing a
custom button,
a custom popup
menu, and a
cloned dialog
item

Creating a Custom User Interface


Creating a dashboard interface

565

Buttons
The Buttons block (Utilities library) makes it easy
to create buttons that will
activate frequently-used commands. A
number of predefined buttons can be
selected from the popup menu in the
blocks dialog. You can also create a custom button for a specific purpose by
changing the label and/or equation.
The pre-defined buttons are:
Animation On
Animation Off
Open Notebook
Run Simulation
Pause Simulation
Save Model
Open Block

Buttons block dialog

Open H-block
Open Database Table
Open Database
Run Optimization or Scenarios
Select or create the button in the
blocks dialog, then clone the button
from the dialog to the model worksheet, Notebook, or hierarchical block.
The button will execute the command
whenever it is clicked and during the
enabled conditions on its Options tab.

Buttons block When options to calculate equation

The Animation On and Animation Off buttons in the Buttons block only control 2D animation
during the simulation run; they do not control 3D animation.

How To

Each button requires a separate Buttons block. To store the block, place it
anywhere on the model worksheet or
within a hierarchical block. A common
place is to store the Buttons block
behind its cloned button.

566

Creating a Custom User Interface


Notebooks

Popup menus
The Popups block (Utilities library) lets
you create a popup menu of customized
options that a user can select from to control model behavior. Connect the blocks
output to the input connector of any block that requires
that value. Depending on the option selected, the block
will output a value specified in its dialog table.
To create the popup menu, enter a label for each option
in the second column of the table in the blocks dialog.
Then clone the menu item to a worksheet, hierarchical
block, or Notebook and connect the Popups blocks output to the block you want to control. When the user
selects an option from the menu, the Popups block outputs the corresponding numeric value from the first column in the dialogs table. You can create a popup menu
with as many options as you want.
Popups block dialog
For an example where the Popups block is used, see the
Monte Carlo model, located in the folder \Examples\Continuous\Standard Block Models. The hierarchical block labeled Scenario in the lower
right corner contains a Popups block. That block is used to create the pop- Popups menu
ups menu for the cases.

You can link the table in the Popups dialog to an ExtendSim database table, creating a popup
menu for selecting a database record.

How To

On/Off Switch
The Switch block (Utilities library) can be used like an On/Off switch to control
some aspect of a model. The blocks input connector is used to turn the Switch on
and off; its output connector reports the status. A value of 0 (zero) indicates the
Switch is off and a value of 1 (one) indicates it is on. This block is similar to the
Switch control described in page 568, but it has some additional features: the Switch blocks dialog
has a Switch that can be cloned to the model worksheet, Notebook, and so forth; there is a dialog
item that allows the Switchs status value (1 or 0) to be linked to a database, global array, or Excel
spreadsheet; and in a discrete event model, the Switch block can send a message to a connected
block to notify it of a status change.

Additional blocks to control model execution


To give the user more customized control over model execution, the Run Model and Pause Sim
blocks (Utilities library) provide additional settings that determine what happens when the model
is run or paused. You can clone dialog items from the Run Model and Pause Sim blocks to the
model worksheet, as part of creating a user interface. For more information, see Blocks that control or monitor simulation runs on page 583.

Notebooks
As you saw in the tutorial in Chapter 1, a Notebook is a window you can customize to help you
organize and manage the data in a model. Each model has its own Notebook which can contain
clones of dialog and plotter items (see Cloning on page 562), as well as text, pictures, and draw-

Creating a Custom User Interface


Controls

567

ing objects (see Text and graphics on page 572. To see an example of cloning a plotters graph to
a Notebook, see Cloning on page 38.
A typical use for Notebooks is for collecting all of the items you might want to watch in one place.
Since you can leave a Notebook open as a simulation runs, use it as a central display for all of the
important values in all the dialogs.
Another common use is as a control panel. Clone all the dialog items that you might want to
change while the simulation is running to the Notebook so you do not need to open the dialogs
from the worksheet in order to make a change.

If a model's Notebook already has data or other contents in it, it will say (has data) beside the
Window > Notebook command.

When you save a model with the Notebook open, the Notebook will automatically open with the
same configuration the next time the file is opened. A Notebook can be many pages long. With the
Notebook as the active window, choose File > Show Page Breaks to show the number of pages and
how they would print.
You can copy the contents of a Notebook as a picture which can be pasted into other applications
such as a word processing document or a presentation. Simply select the items you want, then
choose the Edit > Copy To Picture command to copy the picture into the Clipboard.

Controls
ExtendSim has three special tools in the Model > Controls command that are used to control
blocks and show values directly as the simulation runs.
The controls are the Slider, Switch, and Meter. The Slider and the Switch are used to set values in
your models. The Meter is used to see values as the model is running. The Meter also has a dialog
that you can access by double-clicking it.
The Utilities library has Meter, Slider, and Switch blocks. Those blocks can provide even more
flexibility than the Controls discussed here.

Slider
A Slider control lets you slide an indicator along a scale to change
the value of its output. You set the maximum and minimum values by selecting the numbers at the top and bottom of the Slider
and typing in the desired value.

Maximum

Current

than the maximum, or if you set the value at the top of the Slider
to be less than the minimum, ExtendSim will warn you.
As you slide the indicator, the current value is displayed on the
indicator and is output through the middle connector. There are
also connectors next to the minimum and maximum values that
output those values.

Minimum
Slider

How To

If you enter a value at the bottom of the Slider which is higher

568

Creating a Custom User Interface


Interacting with the model user

The Slider is useful to output a number in a range when the number


does not need to be exact or to experiment with model parameters.
For example, if you have an Activity block where you want to specify
the delay as the simulation is running and a delay of 8 is slow but a
delay of 2 is fast, you might put in a Slider with 8 as the maximum
and 2 as a minimum. Then, as the simulation is running, simply drag
the Sliders bar up and down to indicate slow and fast.

Switch
The Switch control looks like a standard LED switch that glows green
when it is on. It has two inputs and one output.

Off

On
Switch showing off
and on states

Using a Slider with an


Activity block

The Switch outputs either a 0 (zero) or a 1 (one)


depending on the state of the LED. When you click on the left side, the
Switch turns off, the LED turns dark gray and the Switch outputs a 0 (zero).
Clicking on the right side (the side with the LED) causes the Switch to turn
on, the LED to glow green, and the Switch to output a 1 (one).
The Switch control is valuable in controlling blocks that have true-false
inputs. For example, you might attach a Switch to the SelectIn connector of a
Select Value Out block, as shown below.

The input connectors at the bottom of the Switch are used to change the
state of the Switch by setting their side of the Switch to true from within
your model. For example, you might want to set the Switch to off when a
model starts, then change it to on after some period of time. The next
time you run the model, the Switch would be automatically set to off
again when the model begins.
When either of the Switchs inputs gets a true value (defined as 0.5 or
greater), it selects that side of the Switch. If the other input later gets a
true value, the Switch will shift to that side.

Using a Switch (on state)


with a Select Value In
block

If an input receives a true value and that side of the Switch is already selected, no change is made.
How To

Meter
The Meter visually displays how values vary between a known
maximum and minimum. Set the maximum and minimum values through the Meters dialog or by connecting other blocks
(such as Constant blocks) to the top and bottom connectors.
This is a good control to use if you want to see values while the
simulation runs but you dont need to save them to a plotter.

Maximum
Current
Minimum
Meter

Interacting with the model user


Some ExtendSim blocks provide a convenient method for monitoring conditions in the model,
requesting input from the user, and reporting changes. In addition, if you build your own blocks
you can add customized alerts and prompts to display results and prompt for input data.

Creating a Custom User Interface


Interacting with the model user

569

Notify block
The Notify block (Value library) provides three options for sending messages to the
user: Play a sound, Prompt for output value, and Stop the simulation. For all
three options, the Notify block has an input connector that receives a True or False
value that is used to determine whether or not to play a sound, stop the simulation,
Set to play a
or issue a prompt. When the Prompt option is selected, the block also has an output
sound
connector to output the value the user enters after being prompted.
All three options define True as being 0.5.
Play a sound
This option plays a sound when its input connector gets a True value (alternately, you can choose
to have it play only when the input value is True
and animation is on). To use a sound, choose the
Play a sound option and enter the sound name
in the Notify blocks dialog. You can enter the
name (such as click or crack) for any sound
located in the ExtendSim Extensions folder. To
hear that sound, click the Play Sound button.

Sound files you create and place in the Extensions


folder must be in .wav format (Windows) or an
snd resource (Mac OS). On Windows, you can
also enter the name for any sound in Window's
Sounds Control Panel.

Sound option selected in Notify blocks dialog

Prompt for output value


This option is mainly used to prompt the user to
change the block's output value. Until the input connector gets a True value, the block outputs the value
specified in the dialog. When the input is 0.5, the
block prompts the user to enter a different value to output.
You use this block to pause a simulation, request a
value from the user, then continue the simulation using

How To

Prompt option selected in Notify block

570

Creating a Custom User Interface


Interacting with the model user

the new value. The output value can be any number, including 0. If the user clicks the Cancel button in the prompt dialog, the simulation stops.
Stop the simulation
This option is used to stop the simulation and
alert the user if the monitored parameter gets a
True value.
You can customize the block to display any warning message you want, up to 255 characters. You
can also set the message to include the block's
number and the time the event occurred.

Equation blocks
The Equation block (Value library) and Equation(I) block (Item library) provide flexibility and
control for creating user interface elements. Most
Stop option selected in Notify block
ModL functions can be called from an Equation
block, including functions specifically for interacting with the model user. The blocks provide similar functionality, but the Equation block calculates its equation when it gets a value and the Equation(I) block calculates its equation when an
item arrives. Equation blocks are useful when you want a more complex set of rules for the interaction than the Notify block provides.

How To

For example, you could use an Equation block to prompt for a value if a certain condition exists and then change the result based on input from the user, like the
Prompt block. But then add another condition, such as a delay between when the
user is prompted.

Creating a Custom User Interface


Interacting with the model user

571

The equation in the following screenshot causes a message to appear to the model user, asking for
a new processing time if the length of the queue exceeds 50 and at least 10 time units have elapsed
since the last value was requested.

Additional interactive features if you program


If you develop your own libraries of blocks or want to modify existing blocks, ExtendSim provides
even more capability for delivering messages and interacting with users. Here are some ideas from
the ExtendSim Developer Reference:
Change what is shown in a dialog depending on what occurs in the model or what the user
selects or enters in the dialog. For example, you can change the text that is displayed in a blocks
dialog depending on which button a user clicks.

DLLs (Windows) and Shared Libraries (Mac OS) are especially handy where you want to add a
feature or functionality that ExtendSims language (ModL) does not support. For example, you
could use a DLL or Shared Library to display a picture or graphic in a separate window when a
user clicks a button or to create a customized sound resource based on numerical values from the
model. DLLs and Shared Libraries are segments of code written in any language, such as Visual
Basic or C++. ExtendSims DLL and Shared Library functions allow you to call these code segment resources from within a blocks ModL code and perform operations.
Embedded objects can be used to place a document or display from another application, such as
Excel, into an ExtendSim model. Use one of the methods discussed at Embedding an object
(Windows only) on page 746 to transfer information between ExtendSim and the ActiveX
(Windows) control.

How To

Some of the available functions include displaying a message, prompting the user to input a
value, or making a sound. These functions can also be used for debugging ExtendSims ModL
code, although using the Source Code Debugger is the preferred approach.

572

Creating a Custom User Interface


External applications as an interface

COM/ActiveX Automation allows ExtendSim to communicate with other applications either as


a server or a client. As a client, ExtendSim uses the external applications COM object model to
communicate with it. As a server, ExtendSim responds to COM/ActiveX messages. For more
information, see ActiveX/COM/OLE (Windows only) on page 763.

External applications as an interface


Other applications can serve as an interface to an ExtendSim model. This is accomplished by linking to ExtendSim models or blocks directly, using technologies such as ActiveX commands, or
indirectly through text files.
Using an external application works much the same as using the ExtendSim database feature, since
the application stores the parameters to be used in the model and the results of the simulation. For
more information, see Exchanging data with external applications on page 748.

Documenting models
Creating a user interface also involves adding information or graphics to clarify what is happening
in a part of the model or to explain why a particular modeling approach was used. You do this by
putting text, pictures, or draw objects on the worksheet or by creating a hierarchical Help block,
as shown below.

Text and graphics


You can improve the organization of your model or Notebook by grouping elements together and
using text and graphics to identify or highlight different sections. To learn more about adding text
and graphics, including using colors and patterns to enhance them, see Working with text on
page 596, Graphic shapes, tools, and commands on page 619, and Patterns and colors on
page 620.

Help block
To create a Help block, choose Model > New Hierarchical Block and name the H-block Help.
Then add explanatory text, pictures and/or draw objects to the hierarchical block's worksheet,
close and save the block, and place it where you want on the model.

How To

For more information about working with hierarchy and customizing hierarchical block icons, see
Hierarchy on page 598.

How To

Model Execution
Tips for running simulations

The future is something that everyone reaches


at the rate of sixty minutes an hour.
C. S. Lewis

574

Model Execution
Simulation setup

With ExtendSim, you have several options for controlling simulation runs, including:
Using the Simulation Setup dialog to determine how models will run
Important points when running a model
Information provided in the status bar
Using blocks to control or monitor simulation runs
Saving intermediate results
Setting the timing for your runs
Determining an appropriate simulation order
Choosing time and other units that are most relevant for your models
Determining the length and number of runs
Speeding up and slowing down simulations
Working with multiple models
How ExtendSim passes messages in models

Simulation setup

How To

Before running a simulation, you need to specify how long it will run. Use the Simulation Setup
dialog to set the simulation duration, choose a time unit for the model, have the model run multiple times, or select other simulation and animation options. To access the dialog, choose Run >
Simulation Setup. The dialog has five tabs which are described in detail below.

Model Execution
Simulation setup

575

Setup tab

Description

End time

The time that the simulation will end. See also Simulation timing on
page 84 for continuous models and Moving items through the simulation
on page 290 for discrete event and discrete rate models.

Start time

The current time at the start of the simulation. By default this is set to 0, since
that is the most common starting point. Set it to a different value if the model
uses the time value for some calculations. See also Simulation timing on
page 84 for continuous models and Moving items through the simulation
on page 290 for discrete event and discrete rate models.

Runs

The number of consecutive times to run this simulation. In the status bar, discussed on page 582, the numbering of simulation runs starts at 0.

Global time units

Time unit for the entire model. Local time units can be defined within the
dialogs of blocks that contain time parameters. See Time units on page 584.

Calendar date
definitions

Allows you to specify calendar-based timing if Use Calendar dates is selected.


See Calendar dates on page 586.

Non-Calendar
date definitions

Only available if Use Calendar dates is not selected. Used by ExtendSim to


automatically convert local time units to the global time unit. See Time unit
conversions (non-Calendar dates) on page 587.

How To

Choice

576

Model Execution
Simulation setup

Continuous tab

The Continuous tab is only used for changing the time step, stepsize calculation, or simulation
order for a continuous model.
Choice

Description

How To

End time, Start time, For the convenience of continuous modelers who want to change stepsize,
Runs, Global time
these four settings from the Setup tab are repeated on the Continuous tab.
units
Changing any of these settings on one tab will change them on the other. See
their descriptions in Setup tab on page 575.
Time per step (dt)

Represents delta time (dt), or the length of time per step. This is the default
choice for determining the granularity of the simulation run. For most purposes use the default setting of 1, meaning that each step will be one time unit
long. A value for the number of steps is automatically calculated based on the
dt entered. The value is computed as: floor(((EndTime-StartTime)/DeltaTime) + 1.5). To see this, select the Number of steps option after changing
the Time per step (dt). See also Specifying dt or the number of steps on
page 85.

Number of steps

Another method for determining the granularity of time for the simulation
run. In most cases, this would be a number equal to the duration (length of
the simulation run); the model calculates values once for each step and each
step is one time unit long. A default value for delta time is automatically calculated based on the number of steps you enter. The value is computed as
(EndTime-StartTime)/(NumSteps - 1). To see this, select the Time per step
(dt) option after changing the Number of steps. See also Specifying dt or the
number of steps on page 85.

Stepsize calculations

These are only used in continuous simulations that change the DeltaTime system variable, such as electronics models. Most models should use Autostep
fast. If the blocks that you create change DeltaTime and demand more accuracy, use Autostep slow (which divides the calculated value for DeltaTime by
5). If your custom blocks change DeltaTime but you want to ignore the
changes, select Only use entered steps or dt.

Model Execution
Simulation setup

Choice

Description

Simulation order

Flow order should be used for most models. For more information, see Sim-

577

ulation order on page 88.

Random Numbers tab

For the table that follows, consecutive simulation runs means setting the number of simulation
runs in the Setup tab to something greater than 1.
Description

Random seed

The interface for the random number generator. A value of 0 or blank uses a
random seed; any other value causes repeatable sequences of pseudo-random
numbers. Note: Each block that outputs random numbers will generate its
own independent sequence. For more information see Random seeds on
page 685.

Starting seed used in


last model run

Reports the random seed from the previous run.

Reset random numbers for every run

When this option is selected from the popup menu, random numbers are initialized at the start of every simulation run. If the global random seed is blank
or 0, a new randomized seed will be generated at the start of every consecutive
simulation run. If the global random seed is a positive integer, the same seed
value will be used for every consecutive run.

Continue sequence of When this option is selected from the popup menu, the sequence of seeds for
random numbers
each consecutive simulation run is continued from the previous run.

How To

Choice

578

Model Execution
Simulation setup

Choice

Description

Use database
table__Seed for
values

When this option is selected from the popup menu, the starting seed for each
consecutive run is read from the __Seed table in the selected ExtendSim database. This option allows you to specify exactly which seeds will be used for
each simulation run. It also is a convenient method for recording a set of seed
values. To specify a set of random seeds, create a table in a database with one
field and a number of records equal to the number of simulation runs. The
model will access sequential records for each consecutive simulation run, and
that records value will be the seed value for the run. If you leave the records
blank or enter zeros, ExtendSim will fill the table with seed values on the first
run. It will then use those seed values for each subsequent set of runs.

Check blocks for


duplicate random
number seeds

At the start of the simulation, all blocks that use random numbers are checked
to make sure that no two blocks are using the same seed values. This option is
not necessary unless the use block seed option is selected in the individual
blocks.

Use recommended
When checked, ExtendSim will use the recommended Minimum Standard
random number gen- random number generator. When unchecked, ExtendSim will use the
erator (default)
optional Schrage random number generator used in previous versions (backwards compatibility). For details about the ExtendSim random number generator see Random number generators on page 684.

How To

Antithetic random
variates (off by
default)

Generates antithetic variates for possible variance reduction using multiple


runs. It can be controlled by the Optimizer block (Value library), or by custom blocks, to alternate on and off in alternate runs using the AntitheticRandomVariates global variable. See the ExtendSim Developer Reference for more
information. This setting should be off under normal use.

Model Execution
Simulation setup

579

3D Animation tab

3D animation is not available with all products. For complete information about 3D animation
and the following settings, see the E3D module that starts on page 447.
Description

Show 3D animation
during simulation
run

Opens the E3D window when the model opens. If the window is subsequently closed, it will reopen during model initialization when the model is
run. This is the same as selecting the command Run > Show 3D Animation.

Select mode

Defines how the E3D window and the simulation interact. QuickView shows
all of the movement of items in the E3D window while the simulation is running. Concurrent is a more realistic animation than QuickView and shows
only the movement of items that requires simulation time. The 3D animation
runs during the simulation run. Buffered is similar to Concurrent except it
runs the 3D animation after the simulation has ended. The selected mode is
shown at the top of the E3D window.

Environment file

Selects a file that specifies the appearance and behavior of the background for
the E3D window. The default is the Extend3D.mis file; you can also create
custom environment files.

Define conversion
ratios

Specifies the relationship for distance and time between the E3D window and
the simulation. The distance ratio defines how many pixels in the 2D
worksheet window represent one meter in the E3D window. The value
for the time ratio controls the 3D animations display speed and is displayed at
the top of the E3D window. The time ratio value, and the animation speed,
changes if you click the Faster or Slower buttons on the E3D window. In most
cases the default values for these settings will not need to be changed.

Comments tab
Use this tab to enter comments about the simulation run.

How To

Choice

580

Model Execution
Running a model

Running a model
In the ExtendSim Tutorial you learned the basic steps in running a model. Some additional points
are discussed in the following sections.

Menu commands and toolbar buttons


You can run, stop, and pause simulations using toolbar buttons or the commands under the Run
menu.
The Run menu commands are discussed at Run menu on page 813.
Buttons to activate the Run commands are shown at Toolbar buttons on page 819.

Running a model multiple times


It is common that you will build a model and run it repeatedly. Running a model multiple times
gives a range of values indicating possible outcomes and facilitates model analysis. For example,
you would do this when the model has random inputs, for Monte Carlo simulations, or when performing sensitivity analysis.
As discussed in Constant values and random variables on page 57, models with one or more
random inputs are called stochastic models. Stochastic models are run repeatedly and then analyzed statistically to determine a likely outcome.
Monte Carlo simulation is commonly defined as applying random behavior to a static or dynamic
model and evaluating the results over a number of trials or observations. Applying Monte Carlo
simulation techniques to a dynamic model is also known as stochastic modeling, which is discussed above. You can build both static and dynamic models with ExtendSim. For more information, see Monte Carlo modeling on page 47.
When you perform sensitivity analysis on a model, you select a variable for analysis and vary it to
determine how much of an impact the variable has on the model as a whole. Sensitivity analysis
is discussed in detail in Sensitivity analysis on page 628.

How To

You should plan on running a simulation at least 3-5 times to estimate the variability in output
whenever a model contains random variables. Then you can use statistical sample-size calculations
(discussed in Determining the length and number of runs on page 589) to determine how many
additional simulation runs are required to obtain an accurate estimate of the models performance.
Some tools in ExtendSim for evaluating multiple simulation runs are:
Histogram blocks (Plotter library) that show the shape and any tendencies in the range of results
Error Bar plotters (Plotter library) that show how a variable is affected by randomness through
the course of the simulation run
MultiSim plotters (Plotter library) that can retain data and show the results of up to four simulation runs
Confidence intervals (reported by the Statistics block in the Value library) that show the probability that a certain range captures the true mean for a simulation model result

Stepping through a model


Sometimes you want to pause a simulation run to observe something of special interest, or step
through the run to verify the action. There are several ways to accomplish this:

Model Execution
Running a model

581

Give the command Run > Pause, or click the Pause/Resume button in the toolbar, as the simulation runs. Then give the command Run > Resume or click the Pause/Resume button again to
continue execution. This method works well for pausing a run one time to observe something of
interest, but is not that useful for stepping through the entire model since it depends on your
dexterity.
Clone the Pause Simulation button from the Buttons block (discussed at Buttons on
page 565). Then give the command Run > Resume or click the Pause/Resume button to continue execution. To use this method, click the Pause Simulation button each time you want the
resumed simulation to pause. This works well if your intention is to pause the simulation once
or twice when you see something of special interest.
Use the Pause Sim block (Utilities library).
This block causes the simulation to pause
when certain conditions are met; the conditions are specified in the blocks dialog
(seen at right). These options give more
flexibility than either of the two previous
methods; they are particularly useful when
stepping through a model. Give the command Run > Resume or click the Pause/
Resume button to continue execution.

Pause Sim dialog

Use the Debugging menu commands discussed on Debugging on page 816. This hierarchical
menu lets you modify the way a simulation runs and facilitates finding a modeling problem.
The three Step... commands in the Debugging menu determine how the Step command in
the Run menu performs during a simulation run.
See also Slowing down simulations on page 591.

Other points when running models


You can run multiple models simultaneously. However, the Run > Run Simulation command
only activates one model at a time. See Working with multiple models on page 591 for how to
activate multiple model runs.

The ExtendSim application communicate with blocks in a model and the blocks can communicate with each other by sending and receiving messages before, during, and after a simulation
run. This unique communication method allows powerful modeling constructs and results in
models that are visually logical and easily understood. See also How ExtendSim passes messages
in models on page 591.
For more information about running models under different circumstances, see the following sections:
Animation on page 609
Sensitivity analysis on page 628

How To

Windows and dialogs, such as the Notebook, a blocks dialog, or a hierarchical blocks worksheet, can be left open when the model runs. However, you cannot run a simulation with a
blocks structure open and leaving too many windows open (especially if they have parameters
that update constantly) can slow simulation speed.

582

Model Execution
Running a model

Optimization on page 647


Dotted lines for unconnected connections on page 705
Model reporting on page 707
Confidence intervals on page 627

Status bar
Once the simulation run begins, ExtendSim shows information in a status bar at the bottom of
your model:
Status Bar

When you start the simulation run, ExtendSim displays some initial status information in the
form of messages that appear momentarily in the status bar area. Depending on the speed of your
computer, you may see the following messages: Wait, Checking Data, or Initializing Data. These
messages inform you of ExtendSims status as it checks and initializes the model prior to starting
the run. On fast computers, the messages may appear too quickly for you to read.
Other messages are displayed in the status bar while the simulation runs:
The number after the hourglass is an estimate of the actual time left in the simulation (expressed
as minutes:seconds) so you can determine how long it will run.
The clock shows the current time of the simulation in simulation time units.
Run shows the number of the simulation run when multiple consecutive simulations are running (the numbering of simulation runs starts at 0).
These values are determined by the entries in the Simulation Setup dialog described in Setup tab
on page 575.

How To

Note that the time remaining shown in the Status Bar is only an estimate. For continuous simulations, it is usually accurate. For discrete event and discrete rate simulations, however, it can be inaccurate, as discussed next.
Timer inconsistencies (event-based models only)
In discrete event and discrete rate models, the value for the timer hourglass sometimes varies from
one moment to the next, especially at the beginning of a run when it is impossible to know when
events are going to happen and thus how long it will take to run a model. The estimated time
remaining may even increase if the simulation starts to run slower because items are being delayed
more or because more events are being generated. The Status Bar will sometimes show the phrase
Initializing Data during the initial steps of a discrete event simulation if there is a great deal of
fast activity (for instance, if you use the preprocessing suggestion shown in Connections to multiple item input connectors on page 292.
Since it is only an estimate, do not be concerned about the value in the Status Bar; the model is
running correctly regardless of the value shown there. However, if the timer hourglass continues to
increase throughout the run and the simulation clock does not advance, it may indicate that there
is an infinite loop in the model. Running the model with 2D animation on may help identify the
cause of this.

Model Execution
Running a model

583

Blocks that control or monitor simulation runs


In addition to the menu commands and toolbar buttons, several blocks provide customized control over the simulation run. As is true for other blocks, you can clone dialog items from these
blocks onto the model worksheet as discussed in Cloning on page 562.
Buttons (Utilities library)
Creates buttons to activate frequently-used commands such as running a simulation,
opening a Notebook, and saving the model. Since this block is most often used to
create a user interface for a model, it is discussed in Creating a dashboard interface
on page 564.
Pause Sim (Utilities library)
Pauses the simulation when certain conditions are met. This gives more flexibility
than cloning the Buttons blocks Pause Simulation button (discussed on page 565).
Give the command Run > Resume or click Pause/Resume to continue execution. See
also Stepping through a model on page 580
RealTimer (Utilities library)
Shows the duration of a simulation in real time. It should be placed at the far right
side of the model worksheet. At the conclusion of the model run, its dialog opens to
display the hours, minutes, seconds, tenths of seconds and ticks (sixtieth of a second)
that the simulation took to run.
Run Model (Utilities library)
Runs the simulation when the Run Simulation Now button is pressed. The options
in this block give you more flexibility than cloning the Run Simulation button from
the Buttons block (discussed at Buttons on page 565.)
Time Sync (Utilities library)
Synchronizes the model to run in real time. It does this by pausing on each simulation step until the amount of simulation time that has passed equals the amount of
real time that has passed. This is only effective if the model is running faster than real
time. If the model is running slower then real time, the block will have no effect.
The timing starts at the beginning of simulation execution after all of the blocks have been initialized.
There may be occasions when you need to pause a simulation before its finished running and save
it to continue at a later time. For example:
To interrupt a long model run when you need to shut down your computer
To resume a simulation after a startup or warm-up period
For debugging: pause just before the bug occurs and continue multiple times to try to track
down the bug
To change the random numbers after the model has run for an amount of time
To pause a running model and save it for continuation later:

Bring the model window to the front, before all other windows.
While the model is running, select File > Pause and Save/Save As.

How To

Saving intermediate results

584

Model Execution
Timing

Close the model.


When you open the model later, select Run > Continue Simulation to resume.
If you are doing this for debugging, do not re-save the model after continuing. Instead, repeatedly
run the model from its original paused state.

Timing
Unless you stop them earlier, all simulations run for a specified period of time. ExtendSim determines the duration of a simulation run based on the values entered in the Run > Simulation Setup
> Setup tab; the duration is the period from the start time to the end time.

Continuous simulation timing


In continuous simulations, the duration is divided into intervals or steps of equal length, where
start time is the first step and end time is the last step. The length of time, in time units, for each
step is known as delta time or dt. The delta time determines how frequently model data is recalculated. For more information, see Simulation timing on page 84.

Discrete event simulation timing


In discrete event and discrete rate simulations, ExtendSim progresses from start time through end
time by a series of events. Time progresses from one event to the next and the time between events
is unlikely to be equal. The application calculates the time between events internally based on
when an event occurs. The number of steps in a discrete event or discrete rate model is the number
of events.

Simulation order (continuous models)


The Run > Simulation Setup > Continuous tab allows you to choose the order in which ExtendSim executes block data for continuous models. The choices are Flow order (the default), Left to
right, and Custom.
It would be unusual to change the simulation order from the default choice, Flow order.
Since this information pertains to running continuous models, it is discussed at Simulation
order on page 88.

Time units

How To

Time is the most common unit of measure in simulation. Each model has its own time unit that is
managed in the Simulation Setup dialog.

Global time unit


The global time unit is the base unit for the entire model,
defining the units for the start and end times of the simulation.
There are two ways to specify a global time unit:
Use the Generic time unit to be the default for the whole
model.
Select a specific global time unit, such as hours or seconds,
to be the default for the whole model.
Global time units are set by going to the Run > Simulation
Setup > Setup tab and selecting and defining the unit of

Global time units popup


with Seconds selected

Model Execution
Time units

585

time. Once you select a global time unit, all blocks with time-based parameters, including those
subsequently added to the model, use it by default as their local time unit.
Using the generic global time unit
By default, the non-specified Generic time is a new models global time unit. Generic is a conceptual unit of time and has whatever meaning you give it. Generic time is the same for the whole
model and for each block that has time-based parameters.
This option is used by most modelers to quickly create a model without having to select a specific
time unit. It is also commonly used when the models blocks use the same time units as the model.
With the Generic global time unit, time-based blocks do not
have a local time unit. Instead, all blocks that include a timebased parameter will specify generic time units.

Blocks time-based parameter when


Generic selected as global time unit

You must be sure to maintain all time-based parameters


throughout the model in that same unit of conceptual time.
For example, if you have a model that simulates a factory over the course of three hours and your
conceptual time unit is minutes, set the end time of the simulation to be 180 in the Simulation
Setup dialog and enter parameters based on minutes in block dialogs. The Comments tab in the
Simulation Setup dialog is a convenient place for noting what unit of time Generic represents in
your model.

Models cannot use Calendar dates or specify a local time unit if the global time unit is set to
Generic.

Using a specific global time unit


In the Run > Simulation Setup > Setup tab you can change the default global time unit to be
something specific, such as hours or seconds. Using a specific global time unit can add to the
understanding of the model, since it allows you to specify parameters based on different time units
throughout the model.
When a specific global time unit is selected, that setting
becomes the default global time unit for the model as well
as the default local time unit within time-based blocks.
There will be an asterisk (*) next to the name of the time
unit in the dialog of each block.

Asterisk indicates time unit in block is


the same as global time unit

If you change the global time unit in the Simulation Setup dialog, be sure that the new time unit is

appropriate for all blocks that use the default time unit. For example, if the global time unit was in
hours and you change it to days, a block that used two hours will now use two days if it is set to use
the default time unit.

Local time unit


You can only change the local time unit in a block if the model is using a specific global time unit,
as discussed on page 585. As long as a blocks time unit is in default mode, the local time unit will
be the same as the global time unit. For instance, if you change the global time unit in the Simulation Setup dialog, it will also change in every time-based block. However, as soon as you select a
different time unit from the popup menu in a block, the local time unit changes from the default
to that new time unit.

How To

As discussed in Local time unit on page 585, when the model uses a specific global time unit,
you can change the local time unit to be anything you want.

586

Model Execution
Time units

You can thus choose any unit of time for each time-based
parameter in each block in the model. This means you can
specify the parameters time locally as milliseconds, seconds, minutes, hours, days, weeks, months, or years,
regardless of the global time unit.

Local time unit is minutes; global time is


set to a different time unit

In continuous and discrete event models, a local time unit applies only to its associated time-based

parameter. For instance, an Item library block can have two local time units, each associated with a
different parameter. In discrete rate models however, the local time unit applies to the entire block.
There can only be one local time unit for a discrete rate block.
If a local time unit is specified, ExtendSim will automatically convert parameters based on the local
time units relationship to the global time unit. If the model is using Calendar date definitions (see
Calendar dates, below) that conversion will be based on the calendar. For example, the actual
number of days in the month selected. If the model is not using Calendar dates, the conversion
will use the non-calendar definitions entered in the Simulation Setup dialog, as discussed in Time
unit conversions (non-Calendar dates) on page 587.
Selecting a specific global time unit provides consistency when adding new blocks to the model,
since every new block will initially be using the same time unit. However, in some cases you will
not want to keep all parameters in default mode. Explicitly selecting a time unit (even the same
unit of time as the global time unit) for each local parameter in the model is a safer choice. Then,
if you subsequently decide to change the global time unit, you will not accidentally affect the simulation results.

You can select a time unit from the popup that is not the default but which has the same name as

the default global time unit. For instance, you can select hours from the popup, rather than
hours*. You would do that if you do not want the local time unit to change based on a change in
the global time unit.

Calendar dates

How To

Sometimes it is helpful have the duration of simulation expressed in terms of a calendar-based


starting and ending time. Calendar dates is a time and date format that corresponds to the calendar
and a 24-hour clock. It is an option that you can choose in the Simulation Setup dialog, along
with the Start time, End time, and Global time unit entries.
Calendar dates are not available if the global time unit is Generic, if milliseconds has been selected
as the specific global time unit, or if months or years have been selected as the specific global time
unit for a discrete rate model. If Calendar dates has been selected, individual Rate library blocks
will not be able to select Months or Years as their local time unit.
To enable Calendar dates:

Choose Run > Simulation Setup > Setup tab


Select Use Calendar dates
Click the Start: field
A calendar appears to select a date and time that represents the beginning of the simulation.
ExtendSim will use that information and the other entries you have made in the Setup tab to calculate the End date. (Of course, all dates are in simulation time, not in real time.)
There are two other options that affect Calendar date definitions. The European format option
places the day before the month. The Macintosh date option, selected by default for Mac OS, is
needed when Excel is set to use the 1904 date system (see Excel > File > Preferences > Calcula-

Model Execution
Other Units

587

tion.) If 1904 date system is not checked in Excel on the Macintosh, uncheck this option in
ExtendSim.
Selecting Use calendar dates for a model can also affect blocks that deal with time. For example, if
Calendar dates is enabled, you can use the calendar format to create a schedule in the Create block
(Item library). An example of this is the block named Schedule in the Scheduling Resources
model located in the folder \Examples\Discrete Event\Resources and Shifts. (The model is discussed in the section Scheduling resources on page 222.)
The following blocks allow you to select Calendar dates in their dialog:
Create (Item library) when it is set to Create items by schedule or Create values by schedule
History and Shift blocks (Item library)
Lookup Table (Value library) when it is set to Lookup the: time
Plotter blocks such as the Plotter, Discrete Event and Plotter I/O
Do not use Calendar dates if block dialogs are set to use values smaller than 1 second (such as
0.0005 seconds), as it may affect numerical precision.

Time unit conversions (non-Calendar dates)


If a model has not been set to use Calendar date definitions
when it runs, ExtendSim converts all time-based parameters
from their local time units to the specific global time unit
based upon constants entered in the Run > Simulation Setup >
Setup tab. You can use the default settings or set your own definitions for all the time categories. Specifying that there are 8
hours in a day is an easy way to model a standard 8 hour working day. Note that the default value for a year is 360, not 365.

Default constants in the


Simulation Setup dialog

For example, assume you are using the default constants and
the global time unit for the model is days, but you have selected a local time unit of hours for a
blocks time-based parameter. When the model runs, ExtendSim will cause that parameter to be
divided by 24, converting it into the appropriate value for one day.

Time unit conversions are only applicable if the model uses specific global time units and does not
use Calendar dates.

Other Units
Flow units (gallons of liquid, cartons of cereal, rolls of paper, tons of flour, and so forth) can be
defined in the Rate library blocks. For more information, see Units and unit groups on
page 315.

Length
The Transport and Convey Item blocks (Item library) utilize a unit of distance (feet or meters) to
calculate the delay required to move an item from one point to another. Similarly, the Convey
Flow block (Rate library) uses a user-defined unit of length to calculate a delay for moving units of
flow.

How To

Flow units

588

Model Execution
Length and number of runs

Length and number of runs


An important consideration when building a model is to determine how long and how often the
simulation should be run. Your entries for the End time and Runs in the Simulation Setup dialog
will depend on four factors:
Whether the system being modeled is terminating (has a natural end point) or non-terminating
(has no obvious end time)
The period of interest (what portion of time you are modeling)
Your modeling objectives (estimating performance, exploring alternatives, or other)
How the samples for statistical analysis are obtained (from running multiple short simulations
or by analyzing portions of one very long simulation run)
A brief discussion of terminating and non-terminating systems follows. A comprehensive discussion on this matter is beyond the scope of this manual.

Terminating systems
Some systems obviously lend themselves to a natural determination of end time. For instance,
most service operations have a point at which activities end. In these terminating systems there is
an obvious time when no more useful information will be obtained by running the simulation longer. For example, when modeling one day at a walk-in customer service center that is only open 8
hours each day, you could safely set the simulation end time for 8 hours. Since customers would
not wait overnight in line for service, the service queue would be empty or cleaned out at the end
of the day and further simulation time would be unproductive.

How To

Because terminating systems do not typically reach a continuing steady state, your purpose in
modeling them is usually to look for changes and identify trends, rather than obtain system-wide
statistical averages. For instance, in the customer service center mentioned above, it is more important to determine the peaks and valleys of activity than to calculate overall averages. Basing your
decisions on average utilization in this case could obscure transient problems caused by multiple
periods of understaffing.
Since the initial conditions in terminating systems will have an impact on results, it is important
that they be both realistic and representative of the actual system. Terminating systems are simulated using multiple runs for short periods of time using different random seeds for each run. As
discussed in Confidence intervals on page 627, the more frequently a simulation is run, the more
confidence you can have in the results.

Non-terminating systems
A non-terminating system does not have a natural or obvious end time. Models of non-terminating systems are often called steady-state systems since, if they are run long enough, the results tend to
a steady state. In these situations, simulation runs could go on indefinitely without materially
affecting the outcome. Most manufacturing flow systems and some service situations (for example,
24-hour convenience stores, emergency rooms, and telephone service centers) are non-terminating
systems.
Systems that have off-shift periods, for instance a manufacturing plant that operates only two shifts
a day, may still be considered non-terminating. If the operation does not clear out at the end of the
second shift, but instead the first shift starts up where the second shift ended, the system is considered non-terminating and the off shift period is just ignored for modeling purposes.

Model Execution
Speeding up a simulation

589

The important considerations when modeling non-terminating systems involve eliminating the
initial bias caused by the warm-up period, deciding how to obtain samples for statistical analysis,
and determining the length of the run.
The warm-up period is the period from start-up to when processes operate at their normal or
steady-state level. In simulation models, start-up conditions may be unrealistic or nonrepresentative of the actual system and may bias simulation results. To overcome this, you can either wait
until after the warm-up period to gather statistics, reset statistics as discussed in Clear Statistics
on page 626, or run the simulation for a long period of time to swamp the biasing effect of the
initial conditions.
To obtain multiple samples for statistical analysis, you could perform repeated runs after eliminating or compensating for the warm-up bias or you could do one extremely long run and calculate statistics on results occurring during various windows of time. As with terminating systems,
the greater the number of samples, the higher the confidence in the results.
The run length of a non-terminating system depends on various factors, including how you
obtain samples, your period of interest, and your modeling objectives, as discussed below.

Determining the length and number of runs


When modeling terminating systems, the length of the simulation run is usually determined by
the natural end point of the process being modeled. For instance, the 8 hours that a bank would be
open is modeled for 8 simulation hours. For statistical analysis purposes, however, you may want
to build a model that looks at a specific time period of a terminating system. For example, you
could model the banks busiest time period (say from 11 AM to 2 PM) to run multiple times to get
a better statistical picture of how the bank operates during that time period.
For non-terminating systems, the length of the run depends on how you decide to obtain your
samples (as discussed above) and on your period of interest. Theoretically, a model of a non-terminating system could be run indefinitely. In reality, it is usually simulated until the output reaches
an adequate representation of steady-state. For example, you would run a model of a manufacturing operation for a long enough period of time that you feel confident that every type of event
happens at least several times. In other situations you might want to limit the run to an artificially
short period of time. For instance, you may want to only model the time it takes the manufacturing operation to go from start-up to operating in a normal manner.

For more information on determining the length and number of simulation runs, please refer to a
simulation or statistics textbook.

Speeding up a simulation
The more complex your model, the more important it is to have it run quickly. Models become
complex as you add more detail to the workings of each part, or as you run it for longer or, for continuous models only, with smaller delta time increments. Although ExtendSim runs models at
extremely high speeds relative to other programs, it can never hurt to think about speed considerations. The following topics discuss some common reasons why a simulation might run slower
than it should and how to speed it up.

How To

The number of simulation runs is determined by statistical sample size calculations and your modeling goals. If your goal is to estimate performance, the number of runs is determined by the
required range in a confidence interval. If your goal is to compare alternatives, the number of runs
is based on acceptable levels of risk.

590

Model Execution
Speeding up a simulation

Displaying data or movement


The most important thing to remember about running speed is that anything that causes the
screen to update will inherently slow down your model. Tips to keep in mind include:
Only use animation when you need it, since animation will slow your model down more than
any other activity.
Do not keep plotters open when running your model if you are concerned about speed.
To keep a plotter closed, select the plotters dialog tool (shown at right). In the resulting
dialog, select either Show plot at end of simulation or Do not show plot.
Close dialogs and Notebooks that have parameters updating while the model is running.

Inefficient settings or block code


In some situations the simulation settings, or a blocks code or the settings in its dialog, will cause a
model to run slowly.
Delta time. For continuous models, consider using larger delta time increments so that ExtendSim does fewer computations. For example, if each step is a day in your model, consider making
each step a week. Of course, this will not work with every model because some calculations are
based on the number of steps and will thus be not accurate if you reduce the number of steps.
Model profiling. In some situations a blocks code or the settings in its dialog will cause a model
to run slowly. For example, you might have 80,000 items arriving in a Queue that is set to prioritize its inputs, or an inefficient section of code in a block you have created. Profiling generates a
text file showing the percentage of time that each block spent executing during the simulation
run.
To profile a model, select the command Run > Debugging > Profile Block Code, then run the
model. A text file is generated with the following information for each block the model uses:
Block name
Block Number
Time spent executing

How To

Percentage of total time spent executing


Display Value block. The Display Value block (Value library) may cause the simulation to run
more slowly. This is because the Display Value block pauses while it shows you information. To
speed it up, set its dialogs Wait value to 0 ticks or seconds. You can also deselect the Dialog
opens option if you dont want to see the dialog during the entire model run.
Executive block. The Executive block (Item library) stores information about each item in the
model. As the simulation is run, the Executive block allocates additional items in groups of a
fixed size when necessary. In the Control tab of the Executive blocks dialog, you can specify how
many items are allocated at the beginning of the run and the number of additional items allocated when required during the run. The procedure of allocating additional items during the
run can slow the simulation down if performed numerous times. Therefore, set the number of
items initially allocated to be the maximum number of items that are expected to be in the
model at any given time, plus 10%. Note that unnecessarily allocating too many items will take
up available memory and can slow down the simulation.

Model Execution
Slowing down simulations

591

Other factors that affect simulation speed


Increase the amount of physical memory (RAM) in your computer. If your computer runs out
of RAM, it will use virtual memory, which can slow down your model significantly.
Using a large number of Value library blocks connected together to perform a simple calculation
can slow a model down. Where possible, replace large webs of blocks with equation blocks
that perform the same calculation.
For discrete event models, you may be able to scale the number of items you generate. For example, if your model is of a factory floor, instead of generating one item for each object manufactured, you might generate one item for each set of five objects.

Slowing down simulations


You might want a model to run more slowly to debug it or critically visualize what the model is
doing. If this is the case, the best way to slow down your model is to turn on animation. If the
model is still running too fast, click the Animation Slower (turtle) button in the toolbar: this
causes animated models to run even slower. To speed up the model again, choose the Animation
Faster (rabbit) button.
Another example of when you might want to slow down a model is if you want to synchronize the
model to real-time events. This might be required if you are receiving real-world data. To accomplish this, refer to the TimeSync block (Utilities library).
If you set it to leave the dialog open while the simulation runs, the Display Value block (Value
library) is also useful for slowing down the simulation.
See also Stepping through a model on page 580.

Working with multiple models


ExtendSim can have multiple model windows open and run multiple models simultaneously. This
facilitates copying model sections or hierarchical blocks from between models and running models
that communicate with each other. You can also run one model in the background while constructing another.
The Run Simulation command only works on the active model. To run multiple models, start the
front model running. Then bring each model forward and start their runs. While some models are
running, other models can be built.
over the background models.

How ExtendSim passes messages in models


ExtendSim uses a sophisticated messaging architecture to signal blocks into action. While messages
can originate either from the ExtendSim application or from individual blocks, it is always a block
that is on the receiving end of a message. Different types of messages result in the receiving block
doing different types of things.
Since messages have the potential to affect the speed and behavior of simulations, understanding
the ExtendSim messaging architecture will help you build more accurate and efficient models and
will make debugging models easier.
Model messages can be divided into two categories:
1) Messages typically sent from the application to one or more blocks

How To

The Prioritize Front Model command causes the frontmost model to have processor preference

592

Model Execution
How ExtendSim passes messages in models

2) Messages typically sent between blocks.

All types of blocks can receive application messages. Continuous blocks neither receive nor send
block messages.

Application messages
Application messages are usually sent to blocks by the ExtendSim application. There are several
types of application messages: Simulation, Model Status, Block Status, Dialog, Connector,
Dynamic Link, OLE, and 3D Animation. They are completely discussed in the Developer Reference.
The major application messages are:
CheckData
StepSize
InitSim
Simulate
FinalCalc
EndSim
The application can send message before, during, and after the simulation run, including:
At the start of the simulation
At each step
When a parameter is changed
When a dialog is opened
If a button is clicked

How To

At the end of the simulation


At the start of the model run, all blocks receive application messages to check their dialogs and
connections for consistency and to initialize variables, import data, or allocate any arrays used during the simulation. At the end of the simulation run, blocks are triggered to collect statistics, dispose of any temporary arrays, and update the status of the model. Other application messages are
sent only when a specific event, parameter change, or dialog click occurs. The Developer Reference
has a complete list of application messages, including CheckData, InitSim, Simulate, EndSim and
FinalCalc.
Link alerts
Link alerts are a special type of application message. If a block is linked to a data source in a global
array or ExtendSim database, it will receive a message whenever the value in that data source
changes. That message may cause changes in the blocks data. The application sends link alert messages in continuous, discrete event, and discrete rate models. In a discrete event or discrete rate
model, the alerted block may, in turn, send messages out its connectors.
Managing this message is important because linking blocks to a data source that frequently
changes may slow down the simulation. If a simulation model is running slowly, and blocks have
links to data sources, consider sending or receiving link alert messages only at the start or end of
the simulation. This can be done by modifying the properties of the link so it only sends messages
at the appropriate times. (See Link dialog checkboxes on page 722).

Model Execution
How ExtendSim passes messages in models

593

Continuous model messaging


In a continuous model, the most important application message is the simulate message that
causes code in blocks to execute as simulation time advances. At each step of the simulation, the
application sends a simulate message to every block in the model in the sequence defined by the
models simulation order. (Simulation order is determined by the application at the start of the run
based on settings in the Simulation Setup dialog, as discussed in Continuous tab on page 576.)
In the simulate message handler, each block will perform its intended calculation. For example, if
Add is selected in the Math block (Value library), the block will add all its inputs when it gets a
simulate message. Likewise, a Decision block (Value library) will check its inputs and output a true
or false value based on the options selected in its dialog.

Block to block messages


Blocks can send messages to each other either through connections or through the air. This often
happens when one block has calculated a new value and wishes to alert one or more blocks to this
change. Continuous blocks, such as those in the Value library, do not typically send or receive
block messages. Discrete event (Item library) and discrete rate (Rate library) blocks often send and
receive block messages.
Discrete event block messaging
In addition to receiving application messages, discrete event blocks communicate with each other
using block messages. A variety of messages are sent between blocks during the course of the simulation. These block messages fall into the following categories:
Event. Communication between the Executive and various Item library blocks in the model.
Value connector. Notifies connected blocks that the value of a output connector has changed or
requests updated input connector information.
Item connector. Propels items through the model.
Block-to-block. Updates the status of other blocks in the model.
To avoid modeling errors and simulation speed issues in discrete event models, it is important to
understand how the discrete event messaging architecture works. See Messaging in discrete event
models on page 305 for additional information.

Event. Communication between the Executive block and various Rate library blocks.
Value connector. Notifies connected blocks that the value of a output connector has changed or
requests updated input connector information.
Flow connector. Updates the effective rate through the connected blocks.
Rate blocks flow. Defines the LP area that part of the model that could be impacted by a
change in the effective inflow and outflow rates.
Executive flow. Updates all the blocks in an LP area with a new effective rate.
The discrete rate technology has a complex and unique messaging architecture. For optimal performance, it is important to understand discrete rate messaging when building rate-based models. For
more information, see Block messages on page 445.

How To

Discrete rate block messaging


In addition to receiving application messages, discrete rate blocks intensively use messages in order
to initiate the calculation of the effective rates and to propagate information through the blocks.
These block messages fall into the following categories:

How To

594

Model Execution
How ExtendSim passes messages in models

How To

Presentation
Organize and enhance models
so they communicate your ideas

In the modern world of business,


it is useless to be a creative original thinker
unless you can also sell what you create.
Management cannot be expected to recognize a good idea
unless it is presented to them by a good salesman.
David M. Ogilvy

596

Presentation
Working with text

Simple models, like the Reservoir shown in the Tutorial, are easy to follow. But as models become
larger and more complex, worksheets can become crowded with thousands of blocks, making it
harder to communicate whats happening. ExtendSim provides several features that let you organize, explore, and enhance models, such as:
Using text and graphics to improve model appearance
Using the Navigator to quickly locate important parts of the model
Organizing the model into logical sections with hierarchy
Adding 2D animation to visually represent the models logic and behavior
Centralizing model inputs and outputs in an ExtendSim database
Changing how connection lines are displayed
Simplifying model appearance by hiding connections and connectors
For additional ideas to enhance a models appearance, see the chapter Creating a Custom User
Interface on page 561.

3D animation is covered in the module that starts on page 447.


Working with text
Text is used to document a model, create text labels for named connections, and to create text connections for hierarchical blocks.

Entering text
To add text to your model, double-click the worksheet or Notebook
where you want the text to appear and a text box will appear. You can
now type your text. You can use the handles in the corner of the text
box to resize it.
When youve finished entering text, click anywhere else in the window
and the box will disappear. To edit an existing text box, select the
Block/Text layer tool and double-click the text. (You can also use the
Clone layer or All layers tool for this, but using the Draw layer tool will
open a new text box.)

How To

Moving and copying text


To move the text while youre entering or editing it, move your cursor
over the border (away from a handle) until it changes to a hand shape,
then click and drag the text box to the desired location. If the box is
not active, simply move the cursor over the text itself until the cursor
changes to a hand, then click and drag.

Adding text to a model

When the text is highlighted, you can use the Copy and Paste commands, then move the new text
where you want it (or click on the window before pasting to position it in that spot). To copy just
portions of the text, double-click to make the text box active, then select the text you want. You
can also use the Edit > Duplicate command or Ctrl+D to copy and paste model elements slightly
offset from the original.

When you paste text onto the model worksheet or into another text box, it remains editable text.

However, if you select and copy an entire text box and paste it to the Notebook, it becomes a picture. To paste editable text into a Notebook, copy the contents of the text box, not the text box
itself.

Presentation
Navigator

597

Drag and drop text


It is often easier to drag and drop a piece of text than to copy and paste it. To do this, select a piece
of text and drag it. When you drag the selection, an insertion point appears at the end of the cursor. Drag the insertion point to the desired location and release the mouse button.
Drag and drop can be used within a text box on a worksheet, a text file, a blocks structure window,
and between any combination of the above with one exception: it will not work between two separate text boxes. For example, if you double-click on the worksheet to open a text box, enter text
into the text box, then select a portion of the text, you will not be able to move that text to another
text box using drag and drop. This is because on the model worksheet, you can have only one text
box open for editing at a time.

Formatting text
To type new text with a particular format, select the desired format before you start the text box.
ExtendSim will remember that format every time you start new text.
To format existing text, access the text box, select the text, and then choose a command from the
Text menu, such as Bold or Justify Center. You can also change the color of text using the Color
palette. To do this, select the text in the box then click one of the colored squares in the palette as
described in Patterns and colors on page 620.

If you change the format of text within an existing text box, ExtendSim wont use that format as

the default for the model. To cause a format to be the default, change it before creating a text box.
The Border command adds a border with a drop shadow to the text. This can
be a useful way to distinguish descriptive text from block labels or named connections. The text example on the left has a border.
With the Transparent command checked, text on top of
another object wont show its background color. With the command
unchecked, a white rectangle behind the text will overlap other objects. The
examples are shown at the right.

Navigator
The Navigator is an explorer-like window that can be used for multiple
purposes:

The Navigator is especially useful when presenting a model to others.


Use it to explore the model by drilling down through hierarchical layers
to show subsystems or to quickly find blocks and access their dialogs, no
matter where they are in the model. See Navigating through the Reservoir model on page 38 for an example of using the Navigator to
explore a model.

How To

Navigation through a models hierarchical structure and quick access


to block dialogs in large models
Accessing any databases used in the model
Adding blocks to the model worksheet, as an alternative to getting
them from the Library menu

Navigator with
hierarchical block
expanded

598

Presentation
Hierarchy

Since it has multiple uses, the Navigator is discussed fully in the How To: Miscellaneous chapter.
For more information, see Navigator on page 770.

Hierarchy
As you saw in Introduction to hierarchy on page 36, ExtendSims hierarchical capability lets you
combine basic modeling constructs (such as a group of connected blocks) into a single, higherlevel construct, then combine several of those new constructs into an even higher-level construct,
and so forth. This process causes portions of a model, or even the entire model, to be implemented
in layers, where you can drill down from the highest system level to the smallest detail. For example, the Santee River Basin model on page 8 was created using many layers of hierarchy; without
hierarchy the model would be overwhelmingly complex.
The mechanism for creating hierarchical layers in ExtendSim is by building a hierarchical block, a
special type of block that usually has a group of blocks nested inside it. These blocks represent a
portion of the model, a subsystem or submodel. Using hierarchical blocks you can nest subsystems
in an unlimited number of layers for top-down or bottom-up modeling.

Top-down modeling is starting with a new hierarchical block and building a model or a series of
submodels in it. Bottom-up modeling involves selecting a group of blocks within a model and
making them into a hierarchical block. You can create multiple hierarchical layers from the top
down or from the bottom up.

Uses for hierarchy


Although you do not have to use them as you build models, hierarchical blocks can help organize
models logically, make models appear more attractive, improve productivity, and enhance comprehension.
Simplify a complex model by grouping areas of the model into hierarchical blocks containing
submodels. These submodels can then be reused in other models without having to reproduce
all of the connections.
Instead of showing all the detail, present a model as a few simple but logical steps. To reveal the
subsystems within a step, just double-click the hierarchical block.

How To

To increase productivity and comprehension, create a hierarchical block that represents a process
element, then use it in several models that have that element in common. By changing the
parameters, each instance of the hierarchical block can be customized for its model.
When developing a new model, go from the simplest assumptions to more complex ones by creating more and more levels of hierarchy. This helps structure your thinking and makes models
easier to follow as they become more complex.
Although hierarchical blocks usually contain submodels of blocks, they dont have to. They can
also be useful for enhancing and documenting the model, serving as popup windows that reveal
pictures, text, and so forth when double-clicked. For an example, see Help block on page 572.

Presentation
Hierarchy

599

Hierarchical blocks
There are two ways to create a hierarchical block:
1) Select and encapsulate a group of blocks into a new hierarchical
block. This is most often used to organize the complexity of an existing model and is discussed at Making a selection into a hierarchical
block on page 600.
2) Create a new hierarchical block from scratch and build a submodel
within it. This is used for top-down modeling as discussed in Building a new hierarchical block on page 601.

Hierarchical block adds


water sources together

In a model, a hierarchical block is represented by its own icon. By default the


icon is a rounded rectangle with a border, but you can use drawing tools or paste
in a picture to replace the icon. To help identify them in a model, hierarchical
blocks can have drop shadows, as determined by a setting in the command Edit
> Options > Model tab.
Hierarchical block
default icon

You open a hierarchical block by double-clicking it.


Instead of seeing a dialog inside, you see the blocks that
make up the submodel. The blocks are laid out like a
model, with connections, labels, and so on. Depending
on how the hierarchical block was created, it might also
contain text, pictures, or cloned dialog items that control
the blocks within the hierarchical block.
The title of the hierarchical block window shows the
name of the top level model in angle brackets. The sub- Hierarchical block open
models connections with the rest of the model are shown
as connection text boxes (named connections with red
borders around them). In the example to the right, WaterOut is one of the outputs of the hierarchical block Water Sources.
Hierarchical blocks have two kinds of windows:

The structure window. This is displayed if you create a new hierarchical block by giving the command Model > New Hierarchical Block or if you select an existing hierarchical block and give
the command Model > Open Hierarchical Block Structure. The structure window contains
another view of the submodel pane and additional panes for modifying the hierarchical blocks
icon, adding Help, and so forth. It is shown on page 602.
Characteristics of hierarchical blocks
Hierarchical blocks are unique; they have some characteristics of a block and some characteristics
of a model worksheet. All hierarchical blocks have the following in common:
A hierarchical block can contain no blocks, one block, a group of blocks, and other hierarchical
blocks. It can also contain text, graphics, cloned dialog items, and pictures.

How To

The submodel window. This is what is displayed if you double-click a hierarchical block. Use this
window to add blocks to the submodel, adjust block and connection line positioning, rename
connection text boxes, or add text and graphics to the submodel.

600

Presentation
Hierarchy

Hierarchical blocks can be copied to other areas of the model or to other models and used just
like other blocks.
The settings within a hierarchical block can be changed by double-clicking the hierarchical
block, then double-clicking the desired blocks icon, or by changing the desired blocks cloned
dialog items.
Hierarchical submodel windows are similar to model windows: add blocks from a library, create
hierarchical blocks, add graphics, type labels and other text, clone dialog items onto them, and
so forth.
The components of a hierarchical block (icon, connectors, or Help text) can be changed by
accessing the hierarchical blocks structure window.
Unlike other blocks, by default hierarchical blocks are saved directly in the model as copies. This
characteristic allows them to be treated much like a copy of a portion of the model. You can
copy a hierarchical block to another part of your model and make changes to its submodel window without affecting the original hierarchical block. This is known as physical hierarchy.
You can choose to save a hierarchical block in a library, in which case it can be treated much like
a regular block. When you make changes to the hierarchical blocks structure window and you
also choose to update all instances of that block, it is known as pure hierarchy.
Important notes about hierarchical blocks

The action of creating a hierarchical block cannot be undone. If you accidentally include more

blocks than intended in the hierarchical block, remove them from the blocks submodel and put
them back into the model using the Cut and Paste commands in the Edit menu.

Named connections (discussed on page 618) only connect within one level in a hierarchical model.

How To

This means that the data will not flow between levels if you have a named connection on one level
and a corresponding named connection in a block at a lower or higher level. To connect between
hierarchical levels, use the Throw and Catch blocks in the Value, Item, or Rate libraries, or add
connectors to hierarchical blocks. To see how Throw and Catch blocks are used with hierarchy, see
Throw Item and Catch Item blocks for merging item streams on page 152. For more information on adding connectors to hierarchical blocks, see Step 4: Add connectors on page 603.

By default a hierarchical block is saved only in the model. To save it in a library, use the Save Block
As command, described later in this topic.

Although the blocks within hierarchical blocks (see Hierarchy on page 598) are automatically
updated if they are changed in a library, because hierarchical blocks themselves are submodels and
contain both blocks and data, hierarchical blocks saved in a library will not automatically update
their corresponding hierarchical blocks in a model as that might change the existing data in the
model.
Because they can contain entire submodels, hierarchical blocks can become quite large. Libraries
have a 15MB limit, so you may need to use more than one library to store all the hierarchical
blocks for a model.

Making a selection into a hierarchical block


The Tutorial on page 37 showed how to create a hierarchical block named Water Sources that
grouped three blocks from the Reservoir model. The steps are:

Presentation
Hierarchy

601

Open an existing model or place blocks on a new model.


Select some blocks and any desired draw objects by dragging over them or by holding down the
Shift key and clicking each item. (Remember, the selection tool used determines what gets
selected.)
Do not select the text labels of any named connections, otherwise communication between the
submodel and the model outside will break.

Choose the command Model > Make Selection Hierarchical.


Enter a descriptive name for the hierarchical block
and click Make H-block.
When it creates the hierarchical block, ExtendSim
makes all the connections and replaces the selected
blocks in the model with the new hierarchical block
and its default icon, a square.
Make Selection Hierarchical dialog

Double-click the new icon to see the submodel.


Hierarchical blocks can be saved in libraries or just in
the model, as discussed at Saving hierarchical blocks
on page 605. You can also alter aspects of the hierarchical block such as adding blocks, moving or renaming
connections, or adding art to the icon; see Modifying
hierarchical blocks on page 606 for more details.

Building a new hierarchical block


The steps in building a new hierarchical block are:
1) Open a structure window for the new hierarchical
block.

Open Hierarchical block

2) Build the model in the submodel pane.


3) Modify the icon (optional).
4) Add connectors to the blocks icon.
The following example creates a water sources submodel within a new hierarchical block.
Step 1: Open a structure window for the hierarchical block
Open an existing model or open a new model window.

Give the command Model > New Hierarchical Block.

How To

5) Connect the new hierarchical block to the other blocks in the model.

602

Presentation
Hierarchy

ExtendSim prompts for a name for the hierarchical block, then opens its structure window.
Icon pane

Connector pane

Help pane

Submodel pane

Hierarchical block structure window

How To

The hierarchical structure window is divided into four panes, which are work areas. The upper left
pane is the icon pane for designing the blocks icon and adding connectors. The upper right pane is
the Help pane for writing the Help text for this block. The lower left pane is the connector pane
which contains the names of the input and output connectors for the block; it can also be used to
rename the connectors. The large pane on the lower right is the submodel pane, where the submodel for this hierarchical block will be built. The submodel pane is what appears when you double-click a hierarchical blocks icon.

Presentation
Hierarchy

603

Step 2: Build the submodel


To build a submodel in a hierarchical block, add
blocks to the submodel pane using the same
methods used to build the Reservoir model in
the Tutorial on page 24. For instance, use the
Library menu to add blocks to the submodel
pane (or drag them from library windows) and
connect blocks in the normal fashion.
If you prefer, use the Copy and Paste commands
from the Edit menu to copy a portion of an
existing model into the submodel pane.
For example, the Water Sources hierarchical
block in the example at right contains three connected blocks from the Value library: a Lookup
Table block labeled Rainfall, a Random Number
block labeled Stream, and a Math block set to
add its inputs.

Hierarchical block structure window with submodel


added

Step 3: Modify the icon


The hierarchical block starts with a default icon, a white square. You can modify this icon, for
example by changing its shape or color, or you can delete it and create a new one. To do this, draw
an icon with the drawing tools in the toolbar, or paste a picture from another program. For information on using the drawing tools, see Graphic shapes, tools, and commands on page 619.
Step 4: Add connectors
Since the model within a hierarchical block needs to be connected to the outside world, you must
add the appropriate connectors. Some hierarchical blocks have both input and output connectors,
while others have just one kind. Also, as is true for other blocks, hierarchical blocks use specific
types of connectors (value, item, flow, etc.) depending on what they are connected to.
The steps for adding a connector to a hierarchical block are:
1) Decide the type of connector to add.
2) Add the connector.
3) Determine if the connector should be an input or an output connector.
Choosing a connector type
When the hierarchical blocks structure window is the active
window, the Icon Tools popup button at the right side of
the ExtendSim toolbar is available.
The first six items add connectors: Value, Item, Flow, Universal, Array, and User defined. (Connector types are discussed at Connector types on page 555.)
Adding a connector
To add a connector, select the appropriate type of connector from the Icon Tools popup menu in the toolbar.
For this example, select the Value connector.

Portion of the Icon Tools menu

How To

4) Connect the blocks in the submodel pane to the connectors text label.

604

Presentation
Hierarchy

The connector type must match the input or output connectors of the block in the submodel pane.
Click in the icon pane at the desired position near the edge of the hierarchical blocks icon. For
this example, click on the right side of the icon.
This creates the default Con1In connector on
the icon in the icon pane, lists it in the connector pane, and adds a red-bordered connector
text label (similar to a named connection) in
the submodel pane.

If you choose the wrong type of connector, just

click on that connector on the icon pane to select


it, then select the correct connector type from the
Icon Tools popup menu.The connector will
change to the new type.
Changing to an output connector
By default, when a connector is first added to an
icon it is an input connector, as indicated by the
word In at the end of its name. To cause it to be
an output connector, the connector name needs
Value connector added to hierarchical block
to end in Out. And, since Con1 isnt very
descriptive, change the connector name to something more relevant, in this case Water. To do this:

Select the connector name in the connector pane (or double-click its text label in the submodel
pane) and change its name to WaterOut, then hit Enter.

You can name a connector anything you want as


long as the name ends in In or Out and is 32
characters or less. Also, every connector must
have a unique name.

Connecting to the submodel


The next step is to connect the connector text
label to the appropriate block:

How To

In the submodel pane, move the WaterOut


text label to the right of the Math block.

Drag a line from the output of the Math


block to the WaterOut text. Once the line
thickens, release the mouse and the connection is made.

The Stomach, Absorption, and Bloodstream

blocks in the Drug Ingestion model are examples Connector changed to output connector and added
to Math block
of hierarchical blocks with connectors. The
model is located at \Examples|Continuous\Standard Block Models and is discussed on page page 75.

Presentation
Hierarchy

605

Step 5: Connect the block in the model


To connect the finished hierarchical block to the rest of the
model:

Close the structure window.


When you close the structure window of a new hierarchical
block, a dialog gives options to save the block, discard
changes, or cancel. These options are discussed in the following topic. For this example:

Hierarchical block connected to


Holding Tank

Choose Save to this block only.


Connect the connector on the hierarchical block to other connectors in the model, just as you
would any other block. In the example, the hierarchical block is connected to a Holding Tank
block.
Note that there is only one output from this hierarchical block and it represents the total amount
of water from the two sources. You could also add connectors for the individual Rainfall and
Stream outputs so this block would more closely resemble the one created in the Tutorial.

Saving hierarchical blocks


By default, hierarchical blocks are saved with the model. You can also save a hierarchical block to a
library, which makes it easier to add them to new models.
Saving hierarchical blocks in a model
When you make a selection hierarchical, the hierarchical block is automatically saved with the model
when the model is saved.
If you make a new hierarchical block, or make
changes to the submodel pane window of an existing hierarchical block and then click the Close button in the structure window, the options are to
Save to this block only, Discard changes, or Cancel. This dialog does not enable the options for saving the block to a library; if you choose save, the
block exists only in the model.

Saving hierarchical blocks to a library


You can save a hierarchical block in a library, but what is saved in the library is only a snapshot of
the hierarchical block at the time you saved it.

If you later modify that hierarchical block on the model worksheet, the changes will not be

reflected in the master block in the library unless you specifically tell ExtendSim to save those
changes.
To save a hierarchical block in a library or to cause changes made to a hierarchical block to be
reflected in its master block in a library:

How To

Saving hierarchical block to model only


You can copy such a hierarchical block to other
parts of the model or even to other models using
the Clipboard. Each instance of the block in the model can be then be made unique by modifying
it as described in Modifying hierarchical blocks on page 606. Because these hierarchical blocks
have not been saved in a library, when one of them is changed, the other blocks do not change.

606

Presentation
Hierarchy

If it is not already open, open the structure window of a hierarchical block.


Choose File > Save Block to
Library as... In that dialog,
select a new or existing library
for the hierarchical block and
click Install in Selected
Library.
Do not save hierarchical blocks
in the libraries that come with
ExtendSim.

Close the hierarchical blocks


structure window and choose
one of the save options:
Save to this block only
affects only this specific
instance of the block in
the model.

Save Block to Library as... dialog

Also save to library affects this instance of the block, the master block in the library, and
blocks placed from the library into the active model after the save.
Also update blocks in open models also saves the changes to instances of this hierarchical
block in any open models.
Discard changes

Cancel

How To

These options are also discussed in Summary of results of modifying hierarchical blocks on
page 608.
A hierarchical block that is saved in a library has its
name listed in the library preceded by the symbol >.
Like other blocks, hierarchical blocks that are saved in
libraries list the name of the library in their title bar. If
no library is listed, the hierarchical block is not saved in
a library. You can also get library information by selecting the block in the model window and choosing the
command File > Properties.

Modifying hierarchical blocks


How you modify a hierarchical block depends on
whether the block is saved in a library and the type of
modification you want to make:

Hierarchical block in Library menu

If you dont want to save the changes to the master block in the library, simply double-click the
hierarchical blocks icon and change the settings for individual blocks or modify the layout and
appearance of the submodel (e.g. add blocks, clone items onto the submodel window, add text
and drawings, etc.).

Presentation
Hierarchy

607

To save the changes to the master hierarchical block in a library, you must open the hierarchical
structure window. (You must also use the structure window to make any changes to the hierarchical blocks icon, connectors, or Help, even if you dont want to save these changes to the
library.)
The following indicates where to make changes to a hierarchical block:
Submodel
Window

Structure
Window

Add blocks and connections

Change parameters in submodel blocks

Add text, drawing objects, and pictures

Clone dialog items

Change icon, add alternate views

Rename the block

Add Help

Add animation

Changing the icon


To change the icon to better suit the purpose of the hierarchical block:

Open the hierarchical blocks structure window.


Click the icon in the icon pane.
Change the size, color or pattern of the icon, or delete it and create another icon.
To create a new icon, use any of the drawing tools or paste pictures from outside of ExtendSim
into the icon pane. See Graphic shapes, tools, and commands on page 619, for information on
how to use the drawing tools.
You need to delete the icon before creating a new one, but do not delete any connectors. If you do,
ExtendSim will warn you. If you accidentally delete a connector, undo the delete or add another
connector. Be sure to check the blocks connections in the model.
this is the Markov Chain Weather model discussed on page 50. See Icon views on page 554
for more information.
Moving connectors
The icon pane has an invisible snap grid and the upper left-hand corner of the connector will automatically snap to the grid as it is moved around the icon. To move a connector without using the
grid, hold down the Alt (Windows) or Option (Mac OS) key when moving the connector. Use the
Model > Align command to align two or more selected connectors.
Renaming the block
With the structure window of a hierarchical block open, rename it by choosing Develop > Rename
Block.

How To

Optionally add alternate views using the Views menu at the top of the icon pane. An example of

608

Presentation
Hierarchy

Adding animation
Hierarchical block icons can be animated, as discussed on page 612.
Summary of results of modifying hierarchical blocks
There are different results when a hierarchical block is modified, depending on whether its submodel window or structure window was modified and whether the block is saved just in a model
or is also saved in a library:
If you modify a hierarchical blocks submodel in the submodel pane window, those changes only
apply to that block. Changing a hierarchical blocks submodel is similar to changing parameters
in a regular blocks dialog: the changes affect only that instance of the block on the worksheet
and are saved with the model. This is true even for hierarchical blocks that were originally saved
in libraries.
If you modify the structure of a hierarchical block that is not saved in a library, those changes
only apply to that block. This has the same result as modifying a hierarchical blocks submodel
pane window. For example, you can make several copies of that hierarchical block in a model,
but when you change one of the copies, the other blocks remain unchanged.
If you modify the structure of a hierarchical block
that has been saved in a library, you can choose
how those changes should be reflected:
Only to this instance of the block on the
model worksheet (choose Save to this block
only).
Also in the master block in the library,
which only affects blocks placed in the
model from the library after the change has
been made (choose Also save to library).

How To

Saving modified hierarchical block options


Also in all instances of the block in open
models (note that this does not affect models that are not open at the time); this is also called pure hierarchy (choose Also update
blocks in open models).

Changing a hierarchical block that is saved in a library can have unintended consequences if the
block is used in multiple places. Do not make changes to the master block in the library unless you
understand the effect those changes could have on other models that use that block.
To modify the structure of a hierarchical block saved in a library, copy a fresh hierarchical
block from its library window onto the model worksheet, then work on the block directly
in the model. Do not work on a hierarchical block that is already in the model or you
might overwrite the master hierarchical block with a block that has been customized for a
specific purpose in the model.
If you change the hierarchical blocks submodel, rename the block and save it to the library
using the new name. This will prevent existing instances of that hierarchical block from
being changed.

Presentation
Animation

609

Use caution if you change a parameter in a block in a submodel, then save the hierarchical
block to the library with the Also update blocks in open models choice. In that
case, each instance of the hierarchical block will have the changed parameter value.
Changes made to the structure of a hierarchical block that is saved in a library will not be reflected
in models that were not open when the change was made. In that case, open the model and replace
its hierarchical block with a new one from the library.

The Constant block (Value library) has an option to Retain constant if updated from hierarchy. If that option is checked, the Constant will retain its value when the enclosing hierarchical

block is updated from a library and existing instantiations of the block will not be changed inside
of existing hierarchical blocks. This is useful if each hierarchical block needs a unique identifier
which does not reset if the hierarchical block is updated from a library.

Animation
When presenting models to others you can show how plotter values or cloned outputs change as
the simulation progresses. However, ExtendSims animation capabilities give a more visually
descriptive representation of what is happening in the model.

This section of the User Guide discusses ExtendSims 2D animation capabilities. The ExtendSim

Suite product allows simulations to be run with 3D animation see the E3D module of this manual for more information.
Models can be animated using:
Blocks that have built-in animation
To animate a blocks icon
To animate items traveling in discrete event models
Specialized blocks for creating customized animation
Animation functions programmed into blocks you create
To see animation in a model:

Choose Run > Show 2D Animation. The command is now checked.


Run the simulation.

Use the Animation Faster (rabbit) and Animation Slower (turtle) buttons to
change the speed of the animation.

If animation is running at its slowest speed, the Animation Slower button will
be grayed out. Likewise, if the animation is already running at the highest
speed, the Animation Faster button will not be available.

Animation buttons
Left: Faster
Right: Slower

Blocks with built-in animation


Many of the ExtendSim blocks have animation built into them. A blocks online Help says
whether it is animated and, if so, which aspects are. The two types of built-in animation are:
Animation of a blocks icon
Animation of items traveling from block to block (discrete event models only)

How To

Due to redrawing, animation tends to slow the simulation. You may want to leave animation on
while you are testing, debugging, or presenting your model and then turn it off when you are running the model for quicker results.

610

Presentation
Animation

Animation on a blocks icon


Some ExtendSim blocks show animation on their icons. The amount and type of animation is specific to the block and is described in the blocks Help. For example, the Holding Tank block (Value
library) shows its contents relative to a minimum and maximum, the Select Item Out (Item
library) shows which path items take, and the Convey Flow (Rate library) displays the distribution
of its contents as the simulation runs.

Open the Reservoir 1 model (ExtendSim9\Examples\Tutorial folder.)


Select Run > Show 2D Animation.
Run the simulation.
The icon for the Holding Tank shows the level of contents changing as the
simulation runs.
By default the option Automatically set max and min animation is selected in Holding Tank icon
the Holding Tanks Animation tab. This causes the level to go from 0 to an esti- after animation
mate of the maximum value in the first simulation run; later runs will use an
average of the preceding runs maximum as the levels maximum value. Unselect this option to set
your own maximum and minimum levels.
Animating the movement of items between blocks (discrete event modeling only)
The blocks in the Item library can track the movement of items with animation pictures that
travel along connections between blocks.
To animate the flow of items along connection lines in a discrete event model:

Select the Run > Show 2D Animation command.


Choose the command Run > Add Connection Line Animation.
Run the simulation.
The Final Car Wash model, located in the folder \Examples\Tutorials\Discrete Event, shows cars
moving between blocks and along connection lines.
To see animation pictures also move along the paths of named connections:

Select the command Run > Add Named Connection Animation when Show 2D Animation is
How To

checked.
Selecting an animation picture
When Show 2D Animation is enabled in a discrete event model, pictures representing individual
items pass from block to block. Initially, all items are represented by the default animation picture
(a green circle). You can cause a block to use any other animation picture included with ExtendSim, existing clip art, or pictures created in an external drawing package. The selection is made in
each blocks Item Animation tab.

To find out how to add your own animation pictures, see Animation pictures on page 614

Presentation
Animation

611

For example, the screenshot at right shows


the Item Animation tab from an Activity
block (Item library). There are three
options for 2D and 3D animation of
item:
Do not change item animation. In this
mode, items that leave the block would
have the same picture they had when
they entered.
Change all items to. This activates the
2D picture popup menu for selecting a
picture to represent items as they leave
the block. This is especially useful for
showing the transformation of one type
of item (e.g. cans) into another (e.g.
cases of cans).

Item Animation tab, changing item picture

Change item animation using property. With this choice, the items animation will change
depending on its property (attribute, quantity, or priority). For this option to work, the items
attribute, quantity, or priority must have been set in a preceding block. Then in this block you
create a lookup table with properties corresponding to the desired animation pictures.
To change the animation based on an attribute value:

Choose Change item animation using property in the popup.


From the popup menu to the right of
that popup, select a value attribute.

Click the green +/- resize button in the


bottom right of the table. In the dialog
that opens, enter the total number of
attribute values that you want to assign
animation pictures to. For example, if
you enter 3 and click OK, 3 rows will
appear in the table.

How To

Enter values in the Property Value column, then use the 2D popup menu to
select which picture will animate the
item when its attribute has that value.
For information about creating attributes, see Item attributes on page 119.

Item Animation tab, using value attributes

As discussed on page 612, the Animate Item block (Animation 2D-3D library) is also useful for
changing the animation picture of items that pass through it.

Blocks for customized animation


There are two ways to use blocks from the Animation 2D-3D library to add custom 2D animation
to a model without programming:
Show animation when an item enters a block or when a block gets a value.

612

Presentation
Animation

Animate the icon of a hierarchical block.


Showing animation in response to model conditions
When connected to other blocks in a model, the Animate Value and Animate Item blocks (Animation 2D-3D library) blocks show customized animation in response to model conditions.
Animate Value block
The Animate Value block can be connected to value
connectors. There are several choices for how this
block animates:
Display the value that is input to the block.
Move a level up and down between limits.
Flash a box, text, picture, or circle when the input
goes above a specified value.
For Mac OS only, play a movie when the input
goes above a specified value.
Displaying a value is similar to using the Display
Value block (Value library), except the value can be
displayed in a selected color.

Animate Value dialog

If you choose to animate with a level, it can be displayed in a specific color and pattern that will
move between the top and bottom of the blocks icon. Be sure to specify maximum and minimum
values that represent the entire range of possibilities.
To flash animation when the input is greater than or equal to a value, select a box, text, picture, or
circle. The box and circle can have a color and pattern. Text must only be a few characters long so
that it fits within the blocks icon. To show an animation picture, select its name from the popup
menu.

How To

To play a movie in Mac OS, the movie must be stored in the Extensions folder and must be a
QuickTime movie.
Animate Item block
The Animate Item block can only be connected to the item connectors of discrete event blocks.
Depending on choices in the Block tab, when an item enters the block a colored box, piece of text,
a selected picture, or a selected movie (Mac OS only) is shown on the blocks icon. The Item tab is
useful for changing the animation picture of the item traveling through the block.
Animating a hierarchical blocks icon
As shown below, the steps to animate a hierarchical block are:
1) Create an animation object on the hierarchical blocks icon.
2) Include the Animate Item or Animate Value block (Animation 2D-3D library) in the submodel.
3) Select options in the Animate Item or Animate Value blocks dialog.
The animation block in the submodel reads the values from other submodel blocks and, using the
animation object, controls the hierarchical blocks animation based on those values.

Presentation
Animation

613

Step 1: Create an animation object on the hierarchical icon


Open the hierarchical blocks structure window:

Select the block in the model.


Choose Develop > Open Block Structure or right-click and select Open Structure.
Add an animation object to the icon:
Click the Icon Tools button in the toolbar.
Select the Animation Object at the bottom of the pull-down menu.
Click and drag on the icon to draw the animation object to the size you want.
Animation objects display as rectangular shapes on the icon.
You can add more than one animation object and you can
resize them. Each animation object is assigned a number starting with 1. For example, a hierarchical blocks icon with an animation object near the output might look like the image at
Animation object 1 added to
right.
hierarchical blocks icon

Step 2: Include an animation block in the model


Attach the Animate Value or Animate Item block (whichever is appropriate) to the output of the block you want to
animate in the submodel. In the example to the right, The
Animate Value block is used to animate the sum of the
two water sources in the Water Sources hierarchical block.
The Animate Value block can be connected in parallel and its
Animate Value block added to
output does not need to be connected, as shown in the
submodel
screen shot at right. However, items must pass through the
Animate Item block. That block cannot be connected in parallel and its output must be attached to the input of another block. Otherwise an item coming into
the Animate Item block would have no way to exit.

How To

614

Presentation
Animation

Step 3: Select options in the animation blocks dialog


Choose the type of animation you
want from the Specify icon animation popup menu,

Enter the number of the animation object that the block is to control in the Animation object
number of enclosing H-block
field. For example, to animate
object number 1, enter 1 in the
field.

If the animation object number can-

not be located on the hierarchical


blocks icon, ExtendSim will search
the icon of the next highest enclosing
hierarchical block. If it still fails to
locate that animation object number,
it will give an error message.

Animate Value dialog

If you create custom blocks, including hierarchical blocks, use this same process to add animation objects to those blocks.
For an example of an animated hierarchical block, see the Markov Chain Weather model on
page 50 or the Animating Queue Contents model on page 146 (that model is not available with
ExtendSim CP.)

Animation functions
If you build your own blocks, ExtendSim offers a suite of functions to design how the block will
animate. For example, the Planet Dance model (located in the folder \Examples\Continuous\Custom Block Models) shows three planets orbiting in space. Their orbits are determined by numbers
entered in the blocks dialogs. See the Developer Reference for a description of the animation functions. Also, see Animating a hierarchical blocks icon on page 612 for an example of how to add
animation to a block. You use that same process to add animation to any blocks you create.

How To

Animation pictures
ExtendSim includes a large number of animation pictures as bitmaps (Windows) or PICT
resources (Mac OS). These pictures are used by discrete event blocks to show the flow of items, by
the Animate Value and Animate Item blocks (Animation 2D-3D library) to show custom pictures,
and in any custom block that calls the appropriate animation functions.
To add your own animation pictures to the available list, they must be of the correct file format
and they must be stored in the ExtendSim9/Extensions/Pictures folder. After placing the animation pictures in the Pictures folder, restart ExtendSim and the pictures will be available in animation picture popup menus. For information about these and other extensions, see the Developer
Reference.
Picture file formats
ExtendSim running on a Windows operating system accepts three kinds of pictures:
.WMF (Windows MetaFiles)
BMP (Bitmap)

Presentation
ExtendSim databases

615

A Mac OS PICT (picture) resource file that has been converted to Windows format using the
ExtendSim Mac/Win converter.
ExtendSim for the Mac OS accepts only picture resources.

Displaying messages on a blocks icon


The Run > Debugging > Show Block Messages command is a type of animation used by block
developers when they step through models to debug blocks. It is discussed further in Stepping
through the simulation on page 706.

ExtendSim databases
Databases are very useful when presenting models to others because a models inputs and outputs
can be stored in a centralized location and data can be organized in a logical manner. Each model
can have one or more ExtendSim databases for storing, managing, and reporting information. For
more information, see ExtendSim databases for internal data storage on page 726.

Connections
Connections are the main method blocks use to send data, items, or flow between each other.
ExtendSim has two types of connections, line connections and named connections. The following
discussion shows how to format connection lines and discusses the use of named connections. To
learn how to make and delete connections between blocks, refer to Connecting blocks on
page 27 and Smart connections on page 618.

The Value, Item, and Rate libraries each contain Throw and Catch blocks for sending data without
using connections. Use these blocks in situations where you cannot use a line or named connection, such as when you need to send data between hierarchical levels. For instance, see the example
at Throw Item and Catch Item blocks for merging item streams on page 152.

Connection lines
ExtendSim provides several formatting options to alter the appearance of connection lines. Some
default line options can be specified in the Edit > Options > Model tab. To change an existing line,
double-click to select it, then choose a connection line option.

Choose Model > Connection Lines to see the menu of options available.

How To

616

Presentation
Connections

To use the command, choose an option from the menu and draw a new connection.
right angle
straight
right arrow
left arrow
solid
dashed
black

colored
default line types
thin
medium
thick
hollow
Connection line choices

Styles
The first set of choices in the menu lets you specify the style of the connection lines, either right
angle or straight line.
Arrows
The second set of choices specifies whether or not you want arrows on your right-angle connections (arrows can only be used with right-angle connections). The direction of the top arrow head
follows the direction you draw the line when you make the connection; the bottom arrow head follows the opposite direction.

How To

Attributes
The third choice gives the ability to make the line solid or dashed. (Dashed lines are only available
for right-angle connections.)
Colors
The fourth set of choices in the Connection Lines command deals with the color of connection
lines. Like text or drawing objects, connection lines can be any color you choose. There is no limit
to the number of different colors you can use for connection lines in a single model. Selecting
Black Connections in the Connection Lines command causes all new connection lines to be drawn
black regardless of the current color selected in the color palette. Choosing Color Connections will
cause all new connections to be drawn using the color currently selected in the color palette.
To change the color of an existing connection line, select the line and click a color in the
color palette window. See Patterns and colors on page 620 for more information about
working with colors.
Line types
If you dont select the View Using Defaults option, the final connection line section lets you specify the type of line used for connections, such as thin, medium, or hollow. The View Using

Presentation
Connections

617

Defaults option will cause a connection line to be displayed using its default line type, based on the
type of connector. The default connection line types are:
Type of connector

Line type

Value
Item
Flow
For instance, most discrete event models track flows of items as well as calculate and show values.
You can visually differentiate the flow of items from the processing of values by using the default
line types. When looking at such a model, it is much clearer which flows are those of items and
which are of values. For example, the beginning Car Wash model shown on page 103 uses the
default types to specify item and value connection lines.
To specify the default connection type, choose the Model > Connection Lines > View Using
Defaults command. You can also choose whether or not to use the default connection types in the
Options dialog. When you use this command, the thickness or hollow line types are ignored. You
can leave the View Using Defaults command on while you build a model, or only turn it on when
you are viewing the model. Note that this is only a view option, not a true line type; if you turn the
option off, the line will be thick or hollow depending on the selection in this section.
How to change line formats
By double-clicking on a connection line segment you can select all
segments between two blocks. This makes it easier to change the
entire connection (e.g. line width, color, etc.) at the same time. Any
other line segments that may be connected to additional blocks will
not be selected.

This works with both regular connection lines and named connections.

Selecting entire connection


between two blocks

How To

To select all the connection line segments that connect from a single
output, double-click on a line segment while holding down the Alt
(Windows) or Option (Mac OS) key. Alternately, you can click on one
segment of the connection, then choose the Edit > Select All Segments
command.

Clicking anywhere else on the model worksheet with deselect all the
selected line segments.

Selecting all line segments

618

Presentation
Connections

Named connections
Named connections are text labels
that are used to represent one output at many locations in your
model. If you have two text labels
with the exact same text, you can
use these to have the data, items,
or flow jump from one part of the
model to another. Named connections are often used when you do
not want to clutter up your model
with many lines. You can place the
names near the blocks to which
they connect and leave much of
the area of your model free from
connection lines.

Named connections are not case

Predator Prey model using named connections

sensitive and spaces and returns are ignored, but you must use identical spelling in the text names.

By using named connections, you can eliminate a lot of connection lines in your model, making it
easier to see which blocks are connected to each other and preventing lines from crossing over
blocks or other model elements.
To learn how to create named connections, refer to Named connection on page 34.

How To

Named connections only connect within one level in a hierarchical model. This means that the
data will not flow between levels if you have a named connection on one level and a corresponding
named connection in a block at a lower or higher level. To connect between hierarchical levels, use
the Throw and Catch blocks in the Value, Item, or Rate libraries, or add connectors to hierarchical
blocks. For more information about using Throw and Catch blocks with hierarchy, see Throw
Item and Catch Item blocks for merging item streams on page 152. For more information on
adding connectors to hierarchical blocks, see Step 4: Add connectors on page 603.
Show Named Connections command
If you use many named connections in a model, you may accidentally connect a block to the
wrong named connection. The Model > Show Named Connections command draws a connection
line directly between all named connections. This helps you check that you made the connections
that you wanted.
With the Show Named Connections command selected, click on a connection line to highlight
the path between the named connections. If you click on one of the connection lines and then use
the Edit > Select All Segments command, all the connections for that particular named connection
will be highlighted.

Smart connections
The tutorial on page 27 showed how to connect blocks by drawing a connection line between one
blocks output connector and another blocks input. There are some faster methods you can also
use for blocks in the Item and Rate libraries:
When adding an Item or Rate library block to a model that already contains at least one other
block from the same library, bump the new block into the existing block as you drag it from the

Presentation
Model appearance

619

library. The two blocks will automatically and correctly connect to each other using whichever
connection line choices youve made.
To insert a new Item or Rate library block between two connected blocks from the same library,
drag the block from the library and drop the block onto the connection line such that the new
blocks input connector is on top of the line. This will both insert and connect the new block
between the two existing blocks.

Model appearance
Commands in the Model menu can change how model elements appear.

Showing and hiding connections and connectors


Choose the Model > Show/Hide Connections and Model > Show/Hide Connectors commands to
display or not display those elements of the model. This can be useful when you have a lot of connections and blocks and you want to present the model to others without so much clutter in the
workspace.

Reservoir model with hidden connection lines (L) and hidden connectors (R)

These commands work at each level of hierarchy separately and take effect in whichever level is the
active window. Thus if you want only the top level of the model to not show connectors, but the
hierarchical levels to show connectors, choose the command when no hierarchical levels are open.

Changing model styles

Graphic shapes, tools, and commands


The six tools in the Shapes menu let you add drawing objects to the model. The Shuffle Graphics
tool lets you arrange drawing objects in layers. Use these tools to make your models easier to read
or to make them more aesthetically pleasing.

How To

ExtendSim provides the capability for block icons to have alternate model styles that affect their
appearance in a model. This implementation depends on the block developer, so many libraries
have only one style - the default Classic style. If a library has multiple styles, use the Model >
Change Model Style command to choose a new style. If the library does not have multiple styles,
giving the command will have no effect on block appearance. Block developers can create libraries
with up to 8 model styles, as discussed in the Developer Reference.

620

Presentation
Patterns and colors

Drawing objects in the Shapes menu


Use the Rectangle, Rounded Rectangle, Oval, and Polygon tools to add those
shapes to your worksheet or Notebook. For example, to add a rectangle, select the
Rectangle tool, click in the model where you want one of the rectangles corners,
and drag to the diagonally opposite corner.
The Line tool will draw a line at any angle and the Draw Right Angle Line tool
restricts the lines to horizontal and vertical. You can also add colors and patterns to
the shapes and lines you draw, as described in Patterns and colors on page 620.
Shapes menu

To resize or reshape an object, click the shape then click the small rectangle in

the bottom right and drag to create the desired shape. If you hold down the Shift
key as you reshape a rectangle, rounded rectangle, or oval, the shape will become a square or a circle. If you resize a square or circle while holding down the Shift key, it will maintain its proportional measurements.

Shuffling graphics
By default, new objects are created in front of existing ones. The Shuffle Graphics tool lets
you arrange drawing objects (not text) that are on top of each other. Click this tool, then
click on the object. If the object is in front, it will be sent behind. If it is not in front, it
will be brought to the front. Blocks, text, and cloned dialog items are always in front of
any drawing item and therefore cannot be shuffled.

You can also right-click an object with the Draw layer or All layers tool and choose Bring To Front
or Send To Back to change the order of the objects.

Modifying objects
When an object is selected, the Model menu has additional commands available:
Align left, right, top, or bottom (2 or more objects must be selected)
Rotate shape
Flip horizontally/vertically
Border thickness

How To

Shape Fill/Border (Depending on the selection in this commands hierarchical menu, the
selected color fills the shape or colors the shapes border.)

One or more objects must be selected for these commands to be enabled.


Patterns and colors
Every draw object has both a pattern and a color, chosen from tools in the toolbar. The default is
solid pattern and black color. Text can have color but not a pattern.

Click the Color and Pattern toolbar buttons to open their respective palette windows.
Change the color of a piece of text or the fill color of a drawing object by selecting the
drawing object on the model worksheet or the text in the text box and choosing a color
from the palette. To change the color of the drawing objects border, select the command
Model > Shape Fill/Border > Border Color before choosing the color from the palette. If you
change the color palette before you create the drawing object or start a text box, all new drawing
objects and text will be in that color.

Presentation
Working with pictures

621

When you select a color the hue, saturation, and value (brightness), or HSV, settings for the color
are listed at the bottom of the color palette window. This is helpful when you need to assign a
color using its HSV definition (in block code for example, as discussed in the Developer Reference.)
In the pattern palette, black gives a solid pattern, white gives an opaque white pattern, and
the N signifies no pattern, meaning transparent. Change a drawing objects pattern by
selecting the object and choosing a pattern from the palette. If you change the pattern palette before you create the drawing object, all new drawing objects will be in that pattern.

Working with pictures


To add a picture to ExtendSim, create or open the picture in a painting or drawing program and
copy it to the Clipboard. With the ExtendSim window open (model worksheet, Notebook, or icon
pane) choose Edit > Paste Picture. ExtendSim pastes the picture into the window. For more information, see Copy/Paste and Duplicate commands on page 774.

It doesnt matter what the original file format for the graphic was (JPEG, TIFF, GIF, etc.) Once it
has been copied into the Clipboard, ExtendSim treats it as a drawing object.

The screenshots that start on page 8 illustrate a use of pictures in ExtendSim models.

How To

How To

622

Presentation
Working with pictures

How To

Analysis
Making sense of your models

Prediction is very difficult, especially if its about the future.


Niels Bohr

624

Analysis
Blocks that calculate statistics

Although simulation is a quantified subject, there is still room for analysis and judgmental procedures. This is especially true when your purpose in building a model is to spot trends or identify
patterns of behavior, or when you must make an immediate go, no-go decision. How statistically
precise your models should be depends on several factors, including the nature of the problem, the
importance of the decision, the level of risk you are willing to accept, and the sensitivity of the system to the input data.
One of the main benefits of ExtendSim is that it provides several methods for analyzing the results
of simulation runs. This chapter covers those techniques, including:
Blocks for statistically analyzing data
Confidence intervals for predicting the true mean value
Sensitivity analysis to investigate the impact of making changes
Optimization to determine the best values for a set of parameters
Using Stat::Fit to determine the appropriate distribution for a set of data
How to change parameters dynamically
Plotters for displaying results
Reporting model details and results

Remember that when you use statistical methods to analyze simulation output, you are performing
the analysis only on model results, not on the actual system. It is important to ensure that the
numbers entered accurately represent the details of the actual system. The significance and relevance of your analysis will depend on how closely the models inputs correspond with real-world
data (garbage in = garbage out).

Blocks that calculate statistics


Many ExtendSim blocks automatically calculate relevant statistics and display them on their
Results tab. For example, the Activity block (Item library) reports utilization, average wait, maximum length, and so forth.
You can also use blocks in the Value library, such as the Equation and Math blocks, to perform calculations on model outputs.

How To

As described below, other ExtendSim blocks are specially designed to report statistical information
for particular types of blocks or for items that pass through the block, or to refine statistical data
collection.

Statistics
The Statistics block (Value library) accumulates data and calculates statistics using a
specified statistical method. Place a Statistics block anywhere in the model and,
depending on selections made in its dialog, it will report statistics for the following
blocks and types of blocks:
Activities (Activity, Convey Item, and Transport blocks in the Item library)
Mean & Variance block (Value library)
Queues (Queue, Queue Equation, and Queue Matching blocks in the Item library)
Resource Item block (Item library)
Resource Pool block (Item library)
Mixed blocks (clone drop)

Analysis
Blocks that calculate statistics

625

Workstation block (Item library)


Convey Flow block (Rate library)
Tanks (Tank and Interchange blocks in the Rate library)
For the Mixed type (clone drop)
type, drag cloned output fields (utilization, length, etc.) from the dialogs
of any of the supported types of
blocks onto the Statistics block icon.
This causes the cloned output information to be displayed in the table.
For instance, in the screenshot to the
right, the length and utilization from
an Activity block, as well as the utilization of a Queue block, have been
cloned into the Statistics block and
are reported in the table.

Statistics block dialog, discrete event model

Accumulating data
When a simulation is run, one row of information is recorded in the blocks table for each block of
the specified type each time an observation is made. Observations can be recorded continuously,
which significantly slows simulation time, or at the end of the simulation. They are also made in
response to an item or value arriving at the Go universal input connector. For instance, attach a
Pulse block (Value library) to the Go connector to force a periodic or scheduled update of statistical information.

The first column of the table in the Statistics blocks dialog lists the blocks label. For a block without a label, the first column gives the blocks name.
To immediately see the current statistics, click the Update Now button; this is also useful if you
want to see which blocks will have their statistical information collected during the simulation run.
Statistical methods
The Statistics blocks Options tab allows you to select one of three statistical methods:
Multirun analysis
Batch means
Choosing one of the first two methods causes specific settings to be selected in the blocks Options
tab. For the custom option, manually select which settings you want.

How To

Custom

626

Analysis
Blocks that calculate statistics

Queue Statistics model


The Queue Statistics model uses the Statistics block to gather information about queues. This discrete event model is located in the folder \Examples\Discrete Event\Statistics.

Queue Statistics model

Clear Statistics
As discussed in Non-terminating systems on page 588, when you start a simulation run there is no data in the model. After the model has been running for a while,
it gets to the point where it is functioning more like the real system. The interval
from when the model starts to when it is functioning in a steady or normal state is
called the warm-up period.
The Clear Statistics block (Value library) clears the statistics for selected blocks, eliminating the
statistical bias of a warm-up period. The type of blocks include:
Activities (Activity, Convey Item, Transport, Workstation)
Exit block
Mean & Variance block
Queues (Queue, Queue Equation, Queue Matching)
Resources (Resource Item, Resource Pool)
Information block

How To

Rate library blocks


The block can reset statistical accumulators at periodic intervals or in response to a system event.
The block can be placed anywhere in the model. Choose in its dialog which types of blocks will
have their statistics cleared. The Clearing Statistics example, a discrete event model shown on
page 283, uses the Clear Statistics block to restart model statistics after 40 seconds.

Mean & Variance


The Mean & Variance block (Value library) calculates the mean, variance, and standard deviation of the values that it receives during a simulation run, based on a specified confidence interval. Settings in the blocks dialog allow you to use time
weighted statistics, calculate a moving average for a selected interval, calculate the
statistics over multiple runs, and more.

Analysis
Confidence intervals

627

The dialog provides four methods of capturing statistics:


Entire run
Moving average
Interval
Multiple runs
There are also two options for how the variance is calculated:
Use number of inputs to calculate variance. The variance is computed as the sum of (valid inputs - mean)^2
(number of inputs).
Use number of inputs-1 to calculate variance. The
variance is computed as the sum of (valid inputs mean)^2 (number of inputs - 1).

Mean & Variance dialog

A Quantiles option on the Results tab allows you to see


what proportion of the observations fall within an interval.
The Mean & Variance block uses 1/(N-1) as an averaging factor. If an input is a NoValue, it is
ignored and does not affect the statistics.
To use this block, connect a value output from of the block of interest to the Mean & Variance
blocks input.
The Monte Carlo model, located in the folder \Examples\Continuous\Standard Block Models and
discussed on page 47, is an example of using the Mean & Variance block.

Information
The Information block (Item library) reports statistics about the items that pass
through it. It is useful for counting the number of items and for determining cycle
time statistics and the time between item arrivals (TBI). The block reports the average and the current statistics, as well as the minimum and maximum.

Cost Stats
The Cost Stats block (Item library) records in a table the input costs and total cost
generated by each costing block in a model. This block reports cost information for
item-based blocks, such as for a discrete event model. Information can be exported
to a spreadsheet. The block can be placed anywhere in the model.

Confidence intervals
Confidence interval estimation tells you, with a given level of probability or confidence, how close
the average simulation results are to the models true average or mean. The confidence interval is
the range within which it is predicted the true mean is located. This is expressed as the probability
that the true mean lies within interval x y, where x is the average obtained by multiple observations and y defines the outer limits of the intervals range. The confidence level is the probability

How To

The Information block can only be used in models that use item-based blocks, and it must be connected to a blocks item output. This block is used to calculate cycle time in the section Cycle timing on page 298.

628

Analysis
Sensitivity analysis

that the true mean will be located within the range. Typical confidence levels are 90%, 95%, and
99%. Notice that, at higher levels of probability, the interval gets wider.
The Statistics and Mean & Variance blocks (Value library) and the Cost Stats block (Item library)
provide the option to specify a confidence level in their dialogs. For example, the Statistics block
not only summarizes and reports statistical information, but also calculates confidence intervals for
the information given various levels of confidence.
To generate a confidence interval where each sample is the result from a single simulation run, in
the Run > Simulation Setup > Random Numbers tab do one of the following:
Randomize the seed by entering a blank or zero random seed.
Or, select Continue random number sequence in the popup.
Or, select Use Database table __Seed for values in the popup.
To obtain sufficient sample data to determine the confidence interval, multiple observations of
each statistic must be made and appended to the table of data. This is shown in the Run for CI
model located in the \Examples\Tips\Modeling Tips folder. The model runs repeatedly based on
the Mean & Variances Options tab settings Calculate for multiple simulations and Replicate until relative error is <= 0.01.

Sensitivity analysis
Sensitivity analysis allows you to conduct controlled experiments to explore how much of an
impact a particular parameter has on model results. ExtendSims sensitivity analysis features make
it easy and convenient to specify a parameter to investigate and settings to use for the analysis.

Overview

How To

You use sensitivity analysis to investigate the effect of changing one or more parameters upon an
area of interest. Sensitivity analysis works with all numeric parameter fields. It also works with
clones of those numeric items. You can add sensitivity to as many dialog values as you like. However, it is recommended that you only vary one or two dialog values at a time so as not to confuse
the analysis. Once a parameter has been sensitized, specify a multiple number of runs and run the
simulation.
The resulting values for the area of interest are usually plotted. Although you can use any of the
standard plotters from the Plotter library (such as the Plotter I/O or the Plotter Discrete Event), it
is more common to use a MultiSim plotter (to show up to four runs at a time in one plot window)
or an Error Bars plotter (to show the mean and standard deviation of the parameters over the
count of runs). The results of varying the parameter value over the selected settings will be displayed as the simulation is run multiple times.
Parameters are sensitized by right-clicking or by using the Edit > Sensitize Parameter command.
The Edit > Open Sensitized Blocks command shows all the dialogs for blocks that have sensitivity
settings, even if sensitivity analysis is not enabled. This is convenient if you have entered sensitivity
settings for many parameters in a large model.

To utilize sensitized parameters, the number of simulation runs must be greater than one.
Steps for using sensitivity analysis
For this example, use the Reservoir 1 model discussed in the Tutorial module.

Open the Reservoir 1 model (located in the \Examples\Tutorials folder)


So that you dont overwrite the original model, give the command File > Save Model As and
save the model as Sensitivity.

Analysis
Sensitivity analysis

629

Open the dialog for the Random Number block labeled


Stream.

Open the Sensitivity Setup dialog by doing one of the


following to the Maximum entry field:
Click the entry field and choose the command
Edit > Sensitize Parameter.
Or right-click the entry field and choose Sensitize
Parameter.
Or click the entry field while holding down the
Control (Windows) or Command (Mac OS) key.
Sensitize Parameter menu

The Sensitivity Setup dialog appears with the


Enable sensitivity checkbox selected by default.

Enter Set Simulation Setup to: 4 runs.

The number of runs can be set in either the Sensitivity Setup dialog or the Simulation Setup dialog.
Each controls the other so that the last value
selected in either of them controls the number of
runs.

Enter Starting at 1 and change by 0.5.


This will cause the streams flow to increase by 0.5
for each subsequent run.

Parameter values can be sensitized using values from

a file, a specified range of values, a random distribution, or values from a database.The choices are
described in Specifying the sensitivity method on
page 630.

Sensitivity Setup dialog

Close the Sensitivity Setup dialog.

Sensitized parameter

Add a Plotter, MultiSim block (Plotter library) to the


right side of the model and add a Contents named
connection to its input.
This plotter displays up to four runs of data on a single
graph, so you can see what impact changing the stream
flow has on the contents of the reservoir.

Model with Plotter, MultiSim

Ensure that the Run > Use Sensitivity Analysis command is checked (it is checked by default).

Run the simulation. ExtendSim runs the simulation four times, from run 0 to run 3.

How To

In the Random Number blocks dialog, the parameter field


now has a green border around it, indicating that it has a
sensitivity setting and sensitivity analysis is active for the
parameter.

630

Analysis
Sensitivity analysis

In the MultiSim Plotter, click the AutoScale Y tool to


rescale the vertical axis.
You can see the variation between the runs in the four
plotted lines. As expected, increasing the streams flow
increased the amount of water in the reservoir. In more
complex models, the effect of making a change would
not be so obvious.

Specifying the sensitivity method


The Sensitivity Setup dialog lets you specify that a sensitized parameter will change from a list in a file, incrementally, randomly, or from based on the value of a
database field. The choices are:
Option

Description

Read from column x of file

Assigns the values from a text file. This is the option you will most likely use when
performing ad-hoc experiments. If the file has more than one column separated by
tab characters, specify the desired column. Starting with the first row of the specified column for the first run, this option uses the value of each successive row in
that column for subsequent runs.

Starting at...

Specifies the starting value and the amount of change. By default, the starting value
is the same as the parameters value in the dialog. Increase the variable with a positive number or decrease it with a negative number.

change by...

How To

Multisim Plotter results

Random distribution

Uses a random distribution to set the parameter. This is an easy way to make a single value in a model change randomly over many simulation runs while keeping the
value constant within a single run. Choose from one of the five types of distribution and enter the distribution parameters in the options to the right of the distribution. The seed is the number to use for the random number generator. As in the
Simulation Setup dialog, BLANK or 0 for the seed is random.

Database field

Assigns values from the fields in an ExtendSim database. Starting with the first
record of the specified field for the first run, this option uses the value of each successive record for subsequent runs.

If you are a developer, you can use the CurrentSense variable to control the order of use for the values set for specific runs from within a block. For example, you can cause the first simulation run to
use row 4 of a file, rather than the default use of row 1.

Turning sensitivity on and off


You can control sensitivity globally (for the model as a whole) or locally (at the dialog parameter
level for a specific block):
Use the Run > Use Sensitivity Analysis command to turn sensitivity analysis on and off for the
model as a whole.
Enable, disable, and delete sensitivity settings for a particular parameter using the Sensitivity
Setup dialog.
When you enter sensitivity settings for a value, sensitivity analysis is enabled as long as the Enable
sensitivity box is checked in the Sensitivity Setup dialog. If you uncheck the box, a dialog values

Analysis
Sensitivity analysis

631

sensitivity is temporarily disabled so that you dont have to re-enter the number for subsequent
analysis.
To remove sensitivity settings from a parameter (as compared to simply temporarily disabling the
settings by turning off the parameters Enable sensitivity box), open the Sensitivity Setup dialog
using any of the methods discussed on page 629, then click Delete.

Editing a sensitized parameter in a blocks dialog disables the sensitivity settings for that block.

When this happens, ExtendSim automatically unchecks the Enable sensitivity choice. ExtendSim assumes that if the value is edited, you want to use that new value, not the one that was
entered in the Sensitivity Setup dialog. If you want to turn off sensitivity analysis for a parameter
for the foreseeable future, open that items Sensitivity Setup dialog and click the Delete button.
This will help prevent accidentally changing the value in a future run of the simulation.
A parameter that has sensitivity settings has a frame inside of it. If sensitivity analysis is active for
the parameter (that is, if the Enable sensitivity choice is checked), the frame is green. If the sensitivity analysis is inactive for the parameter or if it is turned off for the model as a whole, the frame
is red.
The Edit > Open Sensitized Blocks command shows the dialogs of all blocks with sensitized
parameters, regardless of whether or not sensitivity is enabled.

Reporting the results


In addition to MultiSim and Error Bar plotters, ExtendSims reporting and tracing features are useful when analyzing output after using sensitivity analysis. The Reporting features show final values
and the Trace feature shows values at each step or event. For more information, refer to Reports
on page 671 and Model tracing on page 707.

Multi-dimensional scenarios
Sensitivity can be enabled on more than one item at a time. For instance, you may want to vary the
values of two Constant blocks and see the interaction between the two items. If you set the sensitivity for the parameters with the Starting at option, both values will increment at the same rate.
For instance, if you have one parameter start at 5 and increment by 1, and the second parameter
start at 100 and increment by 50, and the simulation is run seven times the value pairings will be:
Variable 1

Variable 2

100

150

200

250

300

10

350

11

400

How To

Run #

632

Analysis
Scenario analysis

Often, however, you want to look at all the possible pairings of the two (or more) variables. In this
example, you would want to run the model 36 times, with the following pairings:
Run #

Variable 1

Variable 2

100

150

200

250

...

...

...

100

150

...

...

...

35

11

400

In order to perform this kind of multi-dimensional analysis, you need to get the values from a file.
The most convenient way to do this is to create a file that has two columns separated by a tab character with all the desired pairings. For instance, the file for this example would start with:

5 100
5 150
5 200
...

How To

In the Sensitivity Setup dialogs for the two parameters, choose Read from file and enter the file
name. For the first variable, enter 1 for the column number; for the second variable, enter 2 for the
column number.
When you run a multi-dimensional analysis, you usually use a Write block (Value library) to write
out the values to examine. In the Write block, select a data destination on the Send Data tab and
check Row (or record) index is equal to run number on the Options tab. If the data takes a long
time to transmit, you should check Only write to (data destination) at the end of the run on the
Send Data tab.

Scenario analysis
Scenario analysis is a method for systemically and strategically examining the outcome of different
model configurations. The purpose is to support the exploration and analysis of alternatives, gaining insight into why your system behaves the way it does and how it can be improved and managed. ExtendSim facilitates scenario analysis through the Scenario Manager block (Value library)
which can be added to any model to control all aspects of the analysis. The Scenario Manager
essentially keeps track of multiple what-if models, all based on the same model. It offers a highly
flexible framework for experimentation and analysis.
The Scenario Manager is an advanced tool that is only available in the ExtendSim AT and ExtendSim Suite packages.

Analysis
Scenario analysis

633

The ExtendSim Scenario Manager is a data storage and analysis system that supports analysts as
they input, view, manage, and analyze various scenarios. It allows them to use a single model to
explore and evaluate an unlimited number of options while providing precise control over model
changes as well as easy access to the results. And it provides automated methods for quickly changing variable information and for generating scenario reports. It does this by assigning a named scenario to each combination of variables you choose to examine. For example, you can create best-,
worst-, and typical-case assumptions for input values. Then recall each of these scenarios to see
how the model behaves under different conditions. You can also recall scenarios in combination,
such as best-case sales and worst-case costs.
The ExtendSim database is a central part of the Scenario Manager's data storage and organization.
A database named Scenario DB is automatically created when a Scenario Manager block is added
to the model. This database is used to store the inputs and results for the scenarios. The Scenario
Manager also facilitates using a design of experiments (DOE) methodology for more efficient performance.
The Scenario Manager is one of three ExtendSim analysis tools; see Comparison with other analysis methods on page 646 for differentiators. While the Scenario Manager will meet the needs of
most ExtendSim modelers, like most ExtendSim blocks it is open source. Thus a programmer can
modify and enhance it should the need arise.

How the Scenario Manager works


For scenario management you evaluate and compare a number of model configurations or scenarios, where each scenario is one set of model inputs or factors. These factors are typically specific dialog parameters (such as the maximum number of items in an Activity) but can also be complete
databases, tables, fields, or records. A scenario can have any number of factors and each factor can
have any number, or levels, of different values that it can take on. (For example, setting the maximum number of items in the Activity to 2, 6, or 10 would be 3 levels.)
At the beginning of each set of simulation runs, or replications, the Scenario Manager copies the
model factors for the current scenario into the appropriate locations in the model. Typically each
scenario is run multiple times to capture any stochastic behavior. At the end of each of these replications, the results of interest (responses) are generated, recorded, and summarized. After all replications have completed, the scenario results are stored in tables in the Scenario DB database. You can
also generate a report and export the data to a different ExtendSim database, an Excel workbook,
JMP, Minitab, or a text file.
ity it may take minutes to hours to complete the entire set of runs. You should also be careful not
to create too many scenarios. This is particularly easy to do if you create a full factorial design.

Tutorial I (dialog parameters)

Most analysts would only use dialog parameters in their scenarios, so this tutorial focuses on those.
For advanced analysis, you can also use databases, tables, and so forth, as discussed on page 640.

The following example uses the Final Car Wash model from the User Guides Discrete Event tutorial to investigate how changes in a number of factors affect the average wait time and throughput.
The table below shows the model factors and how they will be varied:
Factor

Values

Number of attendants

1, 2, 3

How To

It is best to set aside some time for all of the scenarios to run. Depending on the size and complex-

634

Analysis
Scenario analysis

Factor

Values

Wash only time

5, 6, 7

Wash and wax time

6, 7, 8

Car interarrival rate

3, 3.5, 4, 4.5, 5

Each scenario will be run 5 times to capture the variation in the results between one run and the
next. To evaluate all of the possible combinations requires 675 replications (135 scenarios ((3 x 3 x
3 x 5 levels)) at 5 runs each).

Fortunately, this model runs very quickly so this number of replications is not a problem. However,
if the model took significantly longer to run or if there were more factors, a design of experiments
(DOE) should be used to reduce the number of scenarios.
Steps
The steps for performing scenario analysis are:
1) Add a Scenario Manager block (Value library, ExtendSim AT and ExtendSim Suite only) to a
model
2) Identify and add the factors (model inputs) you want included in the analysis
3) Identify and add the responses (model results) you want to analyze
4) Determine what you want in the report
5) Determine the DOE, then generate and run the scenarios
6) Analyze the results
7) Optional. Export the scenarios to Excel, JMP, Minitab, a text file, or an ExtendSim database
for further analysis
Add the Scenario Manager block
Open the model named Final Car Wash (\Examples\Tutorials\Discrete Event)

Save the model as Final Car Wash Scenarios so you dont overwrite the original model
Place a Scenario Manager block (Value library, ExtendSim AT and ExtendSim Suite only) in the
How To

model. The block can be placed anywhere but the top of the model will provide easiest access.

Since all the other blocks are labeled, label the block Scenario Manager

As shown at the bottom of the Database menu, adding a Scenario Manager block to a model automatically creates a database named Scenario DB. This is where the results of each individual scenario, as well as model factors, are stored. See Analyze results on page 639 for more information.

Analysis
Scenario analysis

635

Your model should now look similar to the following screen shot:

Model with Scenario Manager block

Open the dialog of the Scenario Manager block

Dialog of Scenario Manager block

As seen above, the Scenario Manager has tabs for Factors, Responses, Scenarios, and Export. These
represent the steps in using the Scenario Manager.

Block Name (Label)

Parameter

Factor Name

Values

Resource Pool (Attendant Resource)

Initial number

Attendants

1, 2, 3

Activity (Wash Bay)

Delay (D)

Wash Time

5, 6, 7

Activity (Wash/Wax Bay)

Delay (D)

Wash&Wax Time

6, 7, 8

Create (Dirty Cars)

Mean

Car Interarrival Time

3, 3.5, 4, 4.5, 5

Methods for referencing dialog variables as factors


There are 3 ways to add a dialog variable as a factor to the Dialog Factors table:

How To

Identify and add factors and values


The next step is to determine and add to the Dialog Factors table any dialog factors (model parameters) you want to include in the analysis. The information is in the following table.

636

Analysis
Scenario analysis

Shift-click. Shift-click the target parameter in the target blocks dialog and select where it should
go.
Clone drop. Drag a clone of the target parameter from the target blocks dialog and drop it onto
the Scenario Managers icon.
Manual. Manually enter the dialog variable name into the factors table.
Attendants factor

This section uses Shift-click to associate the parameters with the Scenario Manager. The response
section that follows uses clone-drop.
In the Resource Pool dialog:

While holding down the Shift key, click the Initial number dialog variable.
In the popup menu that appears, select Scenario Manager: Add Factor

In the dialog
that appears (shown on the left), name the factor
Attendants and click OK

Dialog for naming the factor

Notice that the Dialog Factors table now contains all the information about Attendants the
block it came from, the number it is currently set at, and so forth.

How To

Other factors
Repeat the steps used for the Attendants factor, above, to place the remaining three factors in
the Scenario Managers Dialog Factors table
The Dialog Factors table should now look like this:

Portion of Dialog Factors table

Entering values
Now that the factors have been entered, it is time to enter their proposed values. There are two
methods for entering values:
Directly in the columns of the Scenarios table. To do this, enter a value for each factor and every
scenario in the Scenarios table of the Scenarios tab.

Analysis
Scenario analysis

637

Automatically using a DOE method. To use the Scenario Manager's DOE features, you need to
choose the minimum, maximum, and step (the increment between the minimum and maximum values) for each dialog variable factor.
Since this example uses the Full Factorial DOE method:

Go to the Factors tab of the Scenario Manager block


Enter the minimum, maximum, and step values for each of the factors as shown below
Factor Name

Minimum

Maximum

Step

Attendants

Wash Time

Wash&Wax Time

Car Interarrival Time

0.5

Identify and add targeted responses


The next step is to add responses to the Scenario Manager.

While you could use any of the 3 options from page 635, this section uses the clone drop method
to associate the parameters with the Scenario Manager.

The responses (results of interest) are in the following table:


Block Name (Label)

Tab

Parameter

Response Name

Queue (Wait for Attendant)

Results

Length: Average

Average Length

Queue (Wait for Attendant)

Results

Wait: Average

Average Wait

Notice that the Dialog Responses table in the Scenario Managers Responses tab now contains all
the information about the Average Length variable.

Use either the Shift-click or the clone-drop method to add the Average Wait response to the
Scenario Manager
The Dialog Responses table in the Responses tab should look like the following:

Portion of responses table

How To

In the Queue blocks Results tab, click the dialog variable field for Length: Average
Right-click the variable field and select Clone Tool
While holding the cursor on the parameter field, drag the field to the Scenario Managers icon.
When the icon becomes selected, release the cursor
In the dialog that appears, select Response
Name the response Average Length

638

Analysis
Scenario analysis

Determine what will be in the report


The fourth step is to determine what type of report you want and what you want in the report.
The Dialog Responses table in the Responses tab is where you specify what level of statistics you
want the report to calculate and which responses you want included in the report. In most cases,
you would leave them set to the defaults. However:
If you are using JMP, the Min/Max column provides additional information for analyzing the
results in JMP.
The Report Set column determines which report is run for the specific response. The default is to
only show the mean or average value of the response for each scenario, but more detailed statistics can be added by selecting a different report set.
The Include in Report column is for choosing which responses will be included in the report.
For this example:

Keep the default settings


Select the DOE and run scenarios
The Scenarios tab of the Scenario Manager block is for choosing a method for the DOE as well as
for creating and running the scenarios. As described more on page 646, there are several DOE
methods you can choose:
Manual design
Full factorial design
JMP custom design which has two options (Windows only)
Minitab optimal design which has two options (Windows only)
The options for JMP and Minitab allow you to either create then run the scenarios (and later
export the report to JMP or Minitab), or create and immediately run the scenarios, automatically
exporting the report to JMP or Minitab and storing it in ExtendSim. These options require either
JMP from SAS Corporation or Minitab from Minitab Inc. to generate the design and analyze the
results.

How To

In the Run Control section, choose DOE method: Full factorial design
Click the Create Scenarios button
This generates all of the combinations of the factor values. There will be a total of 135 rows (3 x 3
x 3 x 5 levels) in the Scenarios table. By default all of the scenarios are selected; to not run a specific
scenario, uncheck its Select check box.

Since you want all of the scenarios to run, leave all of the Select check boxes selected
Enter Runs per scenario: 5
Click the Run Scenarios button.
This process may take some time as 675 replications are required to complete the scenario analysis!

Suggestions:
The scenarios will run a LOT faster if the command Run > Show 2D Animation is not selected.
Uncheck Play Sound at End of Run in the Edit > Options > Model tab before the run.

Analysis
Scenario analysis

639

When the scenarios have completed running, you should see the following in the Scenarios table:

Portion of scenarios table

Analyze results
The Scenario DB database, listed in the Database menu, automatically stores all the responses of
each scenario in a series of tables. The tables correspond to the rows of the Scenario Name column
in the Scenarios table. The All Scenarios table of the Scenario DB contains information about all
the model factors and responses. You can use the Scenario DB to perform analysis, or export
selected information to a different database, to Excel, or to JMP or Minitab, as discussed on
page 639.
Some additional things to notice for your analysis are:
Uncheck Include in Report in the Responses tab to not include a responses in the Report
Each response will have the type of report indicated in the Report Set column of the Responses
tab. The default is to display the mean value for each response variable but you can also display
the confidence interval, standard deviation, and so forth.

Changing a Report Set after the scenarios have been run causes the Scenario Manager to recalculate
the results with the new set. This is useful if you change your mind about the report you want.

Depending on what has been selected as the Response tabs Report Set, each response will have
one or more columns in the Scenarios table of the Scenarios tab. These columns summarize the
results of each set of replications for each scenario. The type of report, for example CI for confidence interval, is indicated in parentheses in the header of the column.
On the Scenarios tab, the Details column in the Scenarios table opens a database table containing the original data that was used to calculate all the statistics. The table is from the Scenario
DB database that was created when the Scenario Manager block was first placed in the model.

Export the results (optional)


The form of the Scenario DB database tables may not be exactly what you want. To do additional
analysis using a different format, export a report on the Export tab. For example, you could export
complete results, including the values from every scenario, to JMP. Then use JMP's analysis capabilities to compare the different scenarios. To export the results:

Choose the type of report.


Complete Results exports the contents of the Scenario DB database the factors and
responses for every run in every scenario
Displayed Statistics exports the statistics for each scenario as shown in the Scenarios table.
What gets displayed depends on what is selected in the Response tabs Report Set column.

How To

By default all of the scenarios are selected in the Scenarios table; to not run a specific scenario,
uncheck its Select box

640

Analysis
Scenario analysis

Complete Statistics exports all of the available statistics for each scenario. This is every possible statistic allowed by the Report Set column of the Responses tab.

Select the destination for the report: an ExtendSim database, Excel, Minitab, or JMP.

So that you dont accidentally overwrite the data, it is suggested that you do not export to the Scenario DB database.

Set the destination parameters for the exported data. This varies based on the selected export
destination.

Click Export Report


Once you have exported the results, analyze the scenarios by sorting, plotting, or generating comparison statistics.

Tutorial II (database variables)


This section assumes you understand how to create ExtendSim databases, including how to link to
them and how to enter parent/child relationships. Databases are described in the User Guide.
So far you have controlled only dialog variables with the Scenario Manager. While most analysts
would use only dialog parameters as factors and responses, a select few of you will want to do more
advanced analysis. With the Scenario Manager you can use entire databases or a subset of a database (database tables, fields, or records), as factors and/or responses. These database variables can
be used in addition to, or instead of, dialog variables.

Using database variables is more complicated than using dialog parameters. However, it is very useful when you have sets of data, rather than single variables, that you want to swap in and out for
each scenario. For example, several production schedules for a manufacturing model.

To use the Scenario Manager with a database variable, you must create an ExtendSim database and
any necessary tables, fields, and records (this tutorial assumes you already know how to do that).
You also need to specify targets and sources, as discussed below.

How To

Targets and sources


The concept of targets and sources is specific to the Scenario Manager and allows more sophisticated analysis.
Definitions
A database variable is a variable that references an entire database or a subset of a database, such
as a database table or field.
A source is a database variable that gets copied to a target
Factor sources are the set of values that a database variable can take for all the different scenarios. They contain all of the information for all of the scenarios.
A response source is the value of a database output variable for a particular replication. Each
response source only has the information for the current set of replications.
A target is a database variable whose value is defined by a source
A factor target is a database input variable whose value has been defined by a particular factor source. Each factor target only has the information for the current set of scenario replications.

Analysis
Scenario analysis

641

Response targets are a collection of output database variables where each variables value is
defined by a particular response source. They contain all of the results for all of the scenarios.
Overview
The architectures of the targets and the sources must match. For example, if the source is a database table, the target must also be a database table with the same number of fields.
A minimum number of sources and targets must be created for the model:
For database factors, at least two sources and at least one target. (Each set of data is a source
so having one source does not make any sense when there are sets of data.)
For database responses, one source and a number of targets. The number of targets depends
on whether ExtendSim creates the source and targets or you do it manually. If Auto-Create
Target is selected in the Database Responses table, ExtendSim will create a new database
target for every simulation run. If manually, create one source and one target per scenario.
If you run the model for testing purposes without using the Scenario Manager, the identified
variables can be used in the model. However, these variables are just placeholders and their contents will change when you use the Scenario Manager.
Factor target. When testing the model, use the target database factor in your blocks. (Either
link a parameter or data table to the target variable or use a Read or Write block to reference the target variable.)
Response source. Similarly to the above, build the model as if you will be using a placeholder
database response variable. However, use the source rather than the target.
Sources are always copied to targets. When and how this happens depends on whether the database variable is a factor or a response.
Factor. At the start of each set of scenario replications, the Scenario Manager copies the
contents of the source database factor variable into the target database factor variable. This
is done automatically by the Scenario Manager.
Response. At the end of each simulation run the database variables used in the model are
copied from the source to the target database variables for that scenario.

The contents of the table, rather than the table itself, is copied. Thus the index of the target dataHow To

base variable does not change.

642

Analysis
Scenario analysis

Diagram of sources and targets


The following diagram shows how sources and targets are related to factors and responses.

Sourcesfor
Sourcesfor
Sourcesfor
DBFactors
DBFactors
DBFactors

DBvariablesusedbymodel

Targetfor
DB Factors

Targetsfor
Targetsfor
Targetsfor
DBResponses
DBResponses
DBResponses

Sourcefor
DBResponses

Database factors are copied from the sources to the target at the start of each scenario run. Database responses are copied from the source to the targets at the end of each run.
Steps for scenario analysis
The steps for performing scenario analysis using database variables are:
1) Open a model
2) Create the required database, tables, fields, and records for the model
3) Optional. If you plan to perform DOE, create an additional table for each database variable,
where each table has a list of the possible values for that variable.
4) Create links between the model and the database variables
5) Enter information in the Database Factors table
6) Enter information in the Database Responses table (this example does not do this step)
7) Generate and run the scenarios
8) Optional. Export the report.

The above steps assume database tables are used for factors and responses. You can also use fields or

How To

records, or even entire databases, as targets and/or responses.

Open the model


In the previous tutorial you built a model using dialog variables as factors and responses. This tutorial starts where the previous tutorial ended.

Instead of starting with your previous model, this tutorial uses a similar model that already has the
required database structure in it.

Open the Scenario Manager Final Car Wash model (\Examples\Tutorials\Discrete Event)
Like the model you built in the previous tutorial, the Scenario Manager block in this model has:
Four factors in its Dialog Factors table: Attendants, Wash Time, Wash&Wax Time, and Car
Interarrival Time
Two responses in its Dialog Responses table: average wait time and throughput
This tutorial will keep these dialog factors and responses but will add a fifth factor (the percentage
of cars wanting Wash or Wash/Wax) and put it in the Database Factors table.

Analysis
Scenario analysis

643

In the model, the proportion of cars wanting either wash only or


wash and wax is set in the empirical table of the Random Number
block (labeled Preference Percentage). The table is shown at right.
For this tutorial the Wash or Wash/Wax factor will have three combinations of percentages, which represent 3 levels:
1) 75% wash and 25% wash & wax the base case
2) 90% wash and 10% wash & wax the more wash case
3) 50% wash and 50% wash & wax the less wash case
As in the earlier tutorial, each scenario will be run 5 times to capture the variation in the results
between one run and the next. To evaluate all of the possible combinations now requires 2,025
replications (405 scenarios ((3 x 3 x 3 x 5 x 3 levels)) at 5 runs each).
Create a database structure for the model
As shown at the bottom of the Database menu, the Scenario Manager Final Car Wash model
already has two databases:
The Scenario DB database. This was automatically created when the Scenario Manager block
was added to the model; it is discussed on page 639.
A Model Data database. So that you can focus on the tutorial, the required database has already
been created for this model. The Model Data database stores the different options and probabilities for the wash or wash/wax factor in 6 tables:
A Parent table, Wash Type, that lists the options for the two wash
types: wash only and wash & wax. Its contents are shown on the right.
Three factor source tables, each of which has one of the probability
combinations: Base Case (75% wash/25% wash&wax), Less Wash
(50%/50%), and More Wash (90%/10%). These are Child tables that get their wash type
information from the Wash Type table.
A factor target table named Wash Preference. Each record in the factor target table has a
wash type field and a probability field associated with that wash type. This table is used as
a placeholder for model data. Thus before the scenario runs begin, the table is identical to
the Base Case source table.

Because they would commonly be used, the Model Data database has two tables that werent

strictly required for the example: the Parent table (Wash Type) and the list of source tables (Preference Sources).

How To

A factor sources list table, named Preference Sources, that is a list


of the three factor source tables. The contents of this table is
shown at right. This table is used when performing DOE, so
that you will know which tables to select from when creating the
design. See Create a source list (optional), below, for more information.

644

Analysis
Scenario analysis

The structure of the Model Data database is shown below.

Factor
Target

Factor
Sources
ListofFactorSources

Create a source list (optional)


If you plan to perform DOE, create an additional table for each database factor variable, where
each table has a list of the possible values for that variable. This is a table of tables, or a factor
source list.
Using a factor source list allows you to choose from a subset of database variables rather than from
all of the database variables in the model. This makes it easier to create the scenarios manually and
to use DOE. Without this list of factor sources, any table in the database would be listed in the
Database Factors table as a possible factor source table.
As discussed earlier, a factor source list, named Preference Sources, has already been created for this
example. As you will see later, checking Use Source List in the Database Factors table limits the possible entries to those in the source list (in this case, to the Preference Sources database table).

How To

Link to the target table


To control the models wash preference probabilities, the Random Number blocks empirical probability table must be linked to the target table Wash Preference:

Click the Link button in the Random Number blocks Preference/Probability table
In the Link dialog popup menu, select Link To: Database Table
Select the database named Model Data
Choose the table named Wash Preference, then click Link
Close the Random Number dialog
Enter database factors
You cannot Shift-click or clone drop a database variable. However, you can enter the information
manually. The Database Factors table also has popups for selecting the appropriate information.

Check the Database Factors check box to enable the Database Factors table
Use the +/- resize button to add one row to the table

Analysis
Scenario analysis

645

Enter the following information in the Database Factors table:


Column Header

Enter or Select This Information

Target Name

Wash or Wash/Wax

Target Type

Table

Target Database

Model Data

Target Table

Wash Preference

Target Field

(leave this cell blank)

Target Record

(leave this cell blank)

Use Source List

X (check the box; see page page 644


for more about source lists)

Source Database

Model Data

Source Table

Preference Sources

Source Field

Wash Preference Table Name

Generate and run the scenarios


Generate and run the scenarios as you did in Select the DOE and run scenarios on page 638. If
you use the Full Factorial method and have 5 runs per scenario, 405 scenarios should be created
and it will take 2,025 replications.

How To

646

Analysis
Scenario analysis

DOE methods
As introduced on page 638, the Scenarios tab of the Scenario Manager block allows you to choose
the DOE method. These are described more fully below.
DOE Method

Description

Manual

Enter factors for each scenario manually

Full factorial

Create Scenarios creates one scenario for each combination of factor values.
Since every possible combination of factors is generated, this takes the longest
to run.

JMP custom
(Windows only)

Create Scenarios opens JMP and causes it to create a custom or D-optimal


design, then displays the factors and responses in both ExtendSim and JMP.

JMP custom
create and run
(Windows only)

Create and Run Scenarios opens JMP, causes it to create a Custom or D-optimal
design, displays the factors and responses in both ExtendSim and JMP, then
immediately runs the scenarios.

Minitab optimal
(Windows only)

Create Scenarios opens Minitab and causes it to create an Optimal or D-optimal


design, then displays the factors and responses in both ExtendSim and Minitab.

Minitab optimal
- create and run
(Windows only)

Create and Run Scenarios opens Minitab, causes it to create an Optimal or Doptimal design, displays the factors and responses in both ExtendSim and
Minitab, and then immediately runs the scenarios.

The JMP custom and Minitab optimal methods result in far fewer scenarios than full factorial.
Comparison with other analysis methods

How To

The Scenario Manager is just one of the ExtendSim analysis tools. As described in the table below,
each tool has a different purpose.
Technique

Sensitivity Analysis

Scenario Manager

Optimization

Purpose

Study the behavior of the


model in response to
changes in a single input
parameter

Study and compare the


behavior of the model in
response to changes in
multiple input parameters. Learn how the system
behaves under different
conditions.

Determine the best configuration of model parameters, given a specific goal


(usually to minimize cost
or maximize profit)

Question

If a parameter had this


value, how would it effect
model outputs?

If several parameters had


What configuration allows
these values, how would
a model to behave optithat effect model outputs? mally?

Analysis
Optimization

Technique

Sensitivity Analysis

Advantages

Easiest to specify

Scenario Manager

Gives the most complete


understanding of how the
Included in all ExtendSim model reacts to different
products
factors

647

Optimization
Determines the optimum
model configuration
Constraints can be added
to filter out infeasible
model configurations

Factors can be from databases as well as dialog variIncluded in all ExtendSim


ables
products
Automatically records each
response for every simulation run
Design of experiments can
reduce the number of scenarios required to study
factor interactions
Disadvantages Evaluating more than one
factor is cumbersome
Additional modeling is
required to record model
results

A set of scenarios must be


created by the modeler

An objective function is
required

May require many simula- Does not record the results


tion runs to evaluate all of of each individual run
the scenarios
There is a practical limit
Only available in Extend- on the number of factors,
and their possible values,
Sim AT and ExtendSim
that can be examined
Suite
May require many simulation runs to determine the
optimal configuration

Refer to

Sensitivity analysis on
page 628.

Scenario analysis on
page 632.

Optimization on
page 647.

Optimization

ExtendSim facilitates optimization by making the optimization algorithm available within a block
that can be added to any model to control all aspects of the optimization. Furthermore, having a
block do the optimization increases flexibility and opens up the method and source code to users
who might want to modify or create their own customized optimization blocks. The Optimizer
block (Value library) uses an evolutionary algorithm to reduce the number of times the model has
to run before a solution is found.

How optimization works


Optimization, sometimes known as goal seeking, is a useful technique to automatically find the
best answer to a problem. The problem is stated as an objective function or cost equation that

How To

Optimization is a powerful feature that can automatically determine ideal values for parameters in
a model. It does this by running the model many times using different values for selected parameters, searching the solution space until it is satisfied that it has found an acceptable solution. It then
populates the model with the optimized parameter values.

648

Analysis
Optimization

ExtendSim tries to minimize or maximize to save you going through the tedious process of manually trying different values with each model run.
Like most optimization algorithms, the ExtendSim Optimizer solves models using an initial population of possible solutions. Each solution is explored by running the model several times using different values for some selected parameters, averaging the samples (for stochastic, random models),
and sorting the solutions. The best solution sets of parameters are then used to derive slightly different but possibly better solutions. Each new derived solution is called a generation. This process
continues for enough generations until the Optimizer determines that there are probably no better
solutions in sight. The Optimizer then terminates the simulation runs and populates the model
with the best solutions it has found.
The downside to optimization is that the model needs to run repeatedly and this can take a long
time with large models. Also, optimization algorithms have an inability to tell when the best solution has been found, or even if the best solution has been attempted. A good approach is to allow
the optimization to run for a sufficient number of cases and to then see if the population of solutions has converged. Then try the optimization procedure several additional times to make sure
that the answers agree (or are close) and that the first answer is not a false or sub-optimal one.
There are no optimization algorithms that are guaranteed to converge to the best answer in a finite
time. The more time that you can give optimization to run, the better chance that it will provide
the optimum answer.

Steps for using optimization


The steps needed to optimize a model are listed below. The tutorial that follows illustrates these
steps.
1) Add an Optimizer block (Value library) to a model.
2) Define the form of the objective function.
3) Determine which variables the equation needs and clone-drop them onto the Optimizer.
4) Set the limits for those variables in the Optimizers Variables table.
5) Derive the equations for the objective function.

How To

6) If variables need to constrained to certain values, add constraint equations.


7) Set the Optimizers Run Parameters for a random or non-random model, then run the optimization.

The following tutorial assumes that you know how to clone parameters (see Cloning on

page 562) and that you are comfortable deriving equations (if not, see Equation-based blocks on
page 677).

Optimization tutorial
The model for this tutorial represents a drink stand at a county fair; it has these assumptions:
Drinks are dispensed from beverage tanks that can range in size from 1000-8000 drinks. (In the
example model, 1000 is used for the initial tank size setting.)
A truck delivers the beverage tank at the start of the day and exchanges it periodically throughout the day. (The model is initially set to get a second tank after 240 minutes.)

Analysis
Optimization

649

The truck exchanges the beverage tank for a new one of the same size. There is a $1 per drink
beverage charge plus a delivery charge of $1,000 per tank.
So that the beverage company will know when to deliver tanks and what size tank you will use
for the day, arrangements regarding tank size and delivery frequency must be made at the beginning of the day.
People purchase drinks according to a random distribution; the cost per drink is $2.50.
If the beverage tank becomes empty, you lose an estimated $100 per minute in sales because customers already in line go to another stand and new customers are discouraged from getting in
line.
If you exchange the tank too often, you lose money because the beverage inside the old tank gets
taken away along with the tank.
This model ignores other expenses, such as labor.
The model runs for a simulation time period of 480 minutes (8 hours).
The goal of this tutorial is to optimize both how big of a tank you should order and how often the
tanks are exchanged. It is a simple continuous model, but a good example to show some of the
optimization techniques you will use in any type of large model.

For comparison purposes, the final model for this example, Optimize 2, is located in the \Examples\How To\Optimization folder.
Adding an Optimizer block

Open the Optimize 1 model from the \Examples\How To\Optimization folder.


To provide a starting point for the optimization, this model has been populated with initial
assumptions for the decision variables: deliveries are repeated every 240 minutes and the tank
size is 1,000 drinks.

So that the example file isnt overwritten, give the command File > Save Model As and save the
model as MyOptimizer.

How To

650

Analysis
Optimization

Place an Optimizer block (Value library) in a convenient place in the model.

Optimizer block added at lower left of MyOptimizer model

You will be adding most variables to the Optimizer block by doing a clone-drop.

To get an idea of what it looks like without


any entries, open the Optimizers dialog.
As seen to the right, the Optimize blocks
Objectives tab has two sections:
A Variables table for entering variables and
specifying their limits
An Equation pane for entering the objective
function.

How To

Close the Optimizers dialog.


Determining the form of the function
The Optimizer block will try to reach a goal by
Objectives tab in Optimizer block
changing the values of model variables based on
an equation that measures how close the goal is.
The first step is to lay out the form of the objective function. This helps clarify what will be optimized and which factors affect that goal. In most cases, you want to minimize a cost or maximize a
profit.
This model tries to maximize the beverage stands profit. The factors that affect profit are:
Beverage costs ($1 per drink plus $1,000 per tank)
The revenue for each drink sold ($2.50 per drink)
A penalty or reduction in profit if you run out of drinks to sell ($100 per minute)
Using this information, the form for the objective function is:

MaxProfit = $2.50*#sold - #deliveries*($1000 + #drinks*$1.00) - time empty * $100


Adding variables to the Optimizer
The form for the objective function is the basis for the cost equation that you will enter in the
Optimizers dialog. Before you do that, you need to obtain the necessary model variables (called

Analysis
Optimization

651

decision variables) so the equation can reference them. In some cases the required variable will be
a dialog parameter and in others it will need to be calculated based on a dialog parameter.
An Optimizer blocks access to model variables is accomplished by either using the Clone Layer
tool to drag clones of the desired dialog variables onto the blocks icon (clone dropping), or shiftclicking the variable and selecting Add to Optimizer.
Either operation adds information about the variable to the Variables table. It also enables the
Optimizer block to remotely read and change the value of that variable in the model, so that it can
explore possible solutions.
Using the variables nomenclature from the form for the equation (MaxProfit = $2.50*#sold #deliveries*($1000 + #drinks*$1.00) - time empty * $100), the steps are:
# sold
The total number of sales for the day is an output variable calculated by the model; it is directly
available in a blocks dialog.

Open the Holding Tank block labeled Total sales.


Using the Clone Layer tool, drag the Current level parameter value (but not its label) onto the
closed Optimizer block.

When the Optimizer blocks icon is highlighted, release the mouse.


This puts the variable into the first row of the Optimizers Variables table.

Close the Holding Tanks dialog.

The Optimizer block will highlight when a cloned variable can be dropped onto it. Starting with
the first row, each cloned item is automatically placed into successive rows of the Variables table.

# deliveries
Unlike the other required variables for this example, the number of deliveries is not directly available as a dialog item. However, that value can be calculated using the frequency of deliveries, as
you will see on page 652.

To get the repeat delivery time, open the Lookup Table block labeled Filler truck.
From the Table tab, use the Clone Layer tool to drag the parameter value (but not its label or
checkbox) for the Repeat table every field onto the closed Optimizer block.

Clone the data table from the Lookup Table blocks Table tab and drag it to the closed Optimizer block.

Close the Lookup Tables dialog


time empty
The model calculates the amount of time that the drink tank is empty; this is an output variable.

Open the Holding Tank block labeled Empty time.


Clone the parameter value for Current level onto the closed Optimizer block.
Close its dialog.

How To

#drinks
The decision variable for the number of drinks per tank is also located in the Lookup Table block
labeled Filler truck.

652

Analysis
Optimization

Setting limits for the variables


Now that the Optimizer has the necessary variables, you need to enter limits for some of the variables so the Optimizer will know that it should try to change them. (Variables without limits are
considered outputs from the simulation and the Optimizer will not try to change them.) For data
tables, you also need to specify which cell is to be used in the equation.

Open the Optimizers dialog so that the Variables table in the Objectives tab is visible.
On the first row of the Variables table (Total sales) do not enter any limits. This value is not
an input to be changed but rather an output value from the Holding Tank. So that it will be
more easily understood in the equation, in the Equation Variable column change the variables
name from Var0 to numSold.

On the second row (Filler truck Repeat_prm), which is the time between deliveries, enter a
Minimum Limit of 30 minutes (an estimated minimum) and a Maximum Limit of 480 minutes (the simulation end time). Also, in the Equation Variable column change the variables
name from Var1 to deliveryTimes.

On the third row (Filler truck Data_tbl), you need to tell the Optimizer which cell of the data
table to use and what its limits are:

Click on the Filler truck cell to open the Lookup Table blocks dialog. Notice that the cell
that holds the number of drinks per tank is at row 0 and column 1 of the data table (data
table rows and columns start at 0). For the Row, Col value in the Optimizer, enter 0,1.

For this variables limits, enter a Minimum Limit of 1000 and a Maximum Limit of 8000
drinks.

Do not enter a decimal point. The absence of a decimal point tells the Optimizer that the value for
the number of drinks has to be an integer.

Change the variables name from Var2 to delTankSize.

How To

On the fourth row (Tot empty time) do not enter any limits because this value is a model output. Change the variables name from Var3 to emptyTime.
The columns of the
Objectives table
should now look
similar to the table
on the right.
Entering the objective function
Now that the limits have been entered, substitute each variables name for the row that holds the
value of interest. The result is:
MaxProfit = 2.50*numSold emptyTime*100;

#deliveries*(1000.0+delTankSize*1.00) -

The only variable from this equation that has not yet been specified is the #deliveries factor, which
can be calculated using the deliveryTimes variable.
The form for an equation to convert the deliveryTimes variable to the #deliveries factor is:
#deliveries = int((endTime-1)/deliveryTimes + 1)

The explanation for how this equation is structured is as follows:

Analysis
Optimization

653

EndTime is a global variable representing the end time of the run, in this case 480 minutes. DeliveryTimes is how frequently the deliveries are repeated, or every 240 minutes. If you were to divide
the endTime value of 480 by the deliveryTimes value of 240, it would result in 2 deliveries a day,
which appears correct. However, if you instead divide by 250, you get only 1.92 deliveries, even
though you still have 2 deliveries, one at the beginning of the day and one at 250 minutes. There
will always be a delivery at the beginning of the day, so you need to add 1 to deliveryTimes and
truncate any fractional result with the int() function. This results in 2.92, which when truncated
gives 2, the correct answer.
If you had a delivery every 480 minutes, there would be 2 deliveries, but the last one would happen at the same time as the stand closes. To remedy this, reduce the endTime by 1, preventing the
480 minute case (the maximum limit) from causing 2 deliveries.
The entire objective function can now be entered in the Optimizer blocks Objectives tab:

Delete the default equation from the Equation pane.


Define a new variable for the number of deliveries by entering it in the Equation pane (dont
forget the semicolons that are needed to end the statement):
Integer numDeliveries;

Below that variable definition, enter the equation that converts deliveryTimes into numDeliveries:
numDeliveries = int((endTime-1)/deliveryTimes + 1);

Below the conversion equation, enter the cost equation:


MaxProfit = 2.50*numSold - numDeliveries*(1000.0+delTankSize*1.00)
- emptyTime*100;

The variable definition and the two equations are the objective function for the Optimizer.

How To

654

Analysis
Optimization

The finished Objectives tab for the Optimizer block looks like:

Optimizer dialog, Objectives tab

Running the optimization


Open the Optimizer blocks dialog.

Select the Run Parameters tab. Since this model has random elements, click the Quicker
Defaults button in the Random model section. This quickly sets up all the parameters for a stochastic (random) model needing multiple samples, but limits the number of samples by default
so you can get results more quickly.

Run the optimization by clicking New Run in the Optimizers dialog, clicking the Run OptimiHow To

zation or Sceanrios tool on the toolbar, or by giving the command Run > Run Optimization or
Scenarios.
While the optimization run is progressing, notice how the MaxProfit value is increasing in the top
rows of the table in the Results tab. Notice also how the plotter shows the MaxProfit and convergence values increasing.

The optimization will complete faster if you close the Optimizer block. You can leave the Optimization Value plotter open to watch the values converge without slowing the run down.

Analysis
Optimization

655

When the run is finished, the Optimizer opens and displays the Results tab.

Optimizer dialog, Results tab

The best values for the selected parameters (drink size and delivery times) will have already been
placed into the model, the drink tank is never empty, and the profit will be maximized. The results
of the run as seen on the Objectives and Results tabs are:
NumSold (total sales) is blank because it has not been changed; it is an output from the model.
DeliveryTimes (Filler truck repeat prm) = around 250 minutes between deliveries (2 deliveries).
DelTankSize (Filler truck data_tbl) = around 5200 drinks per tank delivered.
EmptyTime (Empty time contents) is blank because it is an output value from the model.
MaxProfit (on the Results tab) = around $12,000.

As mentioned earlier, it is a good idea to run the model with optimization additional times to make
sure that the answers agree or are at least close. This provides assurance that the first answer is not
a false or sub-optimal.

Adding constraints
The optimization results indicate that the profit would be maximized if you ordered tanks that
hold approximately 5200 drinks and if the second tank were delivered about mid-day. But what
would happen if the drink distributor only had specific size tanks and delivery times? By constraining a parameter, values that fall outside the constrained boundaries are not considered as part of
the possible solution space. You can constrain parameter values in almost an infinite number of
ways by entering constraint equations in the Optimizers Constraints tab.

How To

Your results will vary a little from those shown in this guide because of the randomness of the
model and because you have set the convergence and samples for a quick result.

656

Analysis
Optimization

There are two types of constraints:


Individual constraints are applied only to the specific variable and cause it to be changed in
some manner. For example, an individual constraint could cause all tank sizes to be in increments of 1000.
Global constraints can cause an entire set of parameters to be rejected so that the Optimizer will
try a different set. For instance, a global constraint could reject a solution set if the sum of all the
variables was greater than a certain value.
For this model the constraints to consider are:
Delivery tanks only come in sizes that hold 1000, 2000, 3000, 4000, 6000, or 8000 drinks.
Tanks can be exchanged every 30 minutes except...
Tanks with 6000 drinks or greater cant be exchanged more often than every 60 minutes.

For comparison purposes, a model with constraints titled Optimize 3 is located in the \Examples\Tutorial\Optimization folder.

The constrained tank size


The individual constraint equation to granularize the drink tank sizes recalculates delTankSize as
follows:
// round to delivery amounts (e.g. 1k, 2k, 3k, 4k, 6k, 8k)
if (DelTankSize<=4000) DelTankSize = int(DelTankSize/1000.0 +
0.5)*1000.0;
else DelTankSize = int(DelTankSize/2000.0 + 0.5)*2000.0;

Comments are preceded by // and are omitted from the calculation.

This equation puts the tank sizes of 4000 or less into multiples of 1000, and tanks sizes greater
than 4000 into multiples of 2000, using an individual constraint. For example, if the Optimizer
suggests a size of 3300, the equation would convert it to a potential tank size of 3000. If the suggested size were 5200, the ELSE part of the IF statement would round it up to 6000.
The constrained delivery time
The individual constraint equation to granularize the delivery times is:

How To

// round fillup time to listed delivery times (e.g. 30 minutes)


DeliveryTimes = int(DeliveryTimes/30.0 + 0.5)*30.0;

The delivery time is converted to multiples of 30 minute intervals using an individual constraint,
similar to how the delivery tank size was converted, above.
Global constraints for 6000 and 8000 drink tanks
Although the preceding equation constrains the delivery times for most cases, you also need to
reject cases where the drink tank is 6000 drinks or more and the delivery time is less than 60 minutes.
Rather than the individual constraints used in the previous two equations, for this equation you
need a global constraint. Delivery times for tanks of 6000 and 8000 drinks are not limited to multiples of a specific number as was true for the tank size; they can be any value as long as it is greater
than or equal to 60. So the solution space is somewhat unlimited. In addition, it would not be
valid to just round up a delivery time that is less than 60. If the equation rounded up all the poten-

Analysis
Optimization

657

tial delivery times below 60 to exactly 60, as the preceding delivery time equation does, it would
cause a severe bias toward getting deliveries every 60 minutes. Instead the equation needs to reject
the entire solution set if the delivery time is below 60. This will cause the Optimizer to use a new
random delivery time to generate a different set of solutions that will be less biased.

If you use too many global constraints, or constraints that are too restrictive, the equation would

unnecessarily reject almost all cases and the Optimizer could take too long to run or might fail to
reach an acceptable solution.
The global constrained equation for deliveries of 6000 or more drinks is:
// can't deliver 6000 or more drinks sooner than 60 minutes apart
if (DelTankSize >= 6000 && DeliveryTimes < 60)
Reject = TRUE;

The Optimizer pre-defines Reject as a special variable to be used only with global constraints.
The Reject variable, if set to TRUE, will reject that case and cause the block to calculate another
possible case that could be acceptable. If Reject is not set to TRUE, the current case will be used
for the next series of runs.
Enter the constraint equations
In summary, the equations to enter on the Constraints tab of the Optimizer block are:
// round to delivery amounts (e.g. 1k, 2k, 3k, 4k, 6k, 8k)
if (DelTankSize<=4000) DelTankSize = int(DelTankSize/1000.0 +
0.5)*1000.0;
else DelTankSize = int(DelTankSize/2000.0 + 0.5)*2000.0;
// round fill up time to listed delivery times (e.g. 30 minutes)
DeliveryTimes = int(DeliveryTimes/30.0 + 0.5)*30.0;
// can't deliver 6000 or more drinks sooner than 60 minutes apart
if (DelTankSize >= 6000 && DeliveryTimes < 60)
Reject = TRUE;

How To

658

Analysis
Optimization

After entering the equations in the Optimizer block, the Constraints tab should look like:

Optimizer dialog, Constraints tab

Running the optimization


Click the New Run button in the Optimizer dialog or give the command Run > Run Optimization or Scenarios. It is a good idea to run the optimization with the new constraints multiple times
to make sure that the first answer is not a false or sub-optimal.
Because there are random elements in the model, the results will differ from, but should be close
to, the following:
NumSold (total sales) is blank because it has not been changed; it is an output value from the
model.

How To

DeliveryTimes (Filler truck repeat time) = 270 minutes between deliveries (2 deliveries a day).
DelTankSize (Filler truck data_tbl) = 6000 drinks per tank delivered.
EmptyTime (empty time) is blank because it is an output value from the model.
MaxProfit = around $10,500.
Note that the profit may have decreased slightly from the previous optimum results. This is due to
the constraints put on the model parameters.

Using the Optimizer block


This section examines, in detail, how to get the most out of the Optimizer block.
Variables table
When a dialogs variable is dragged using the Clone Layer tool onto a closed Optimizer block, the
Optimizer block places that variable into its Variables table. This table holds the variables needed
in the Optimizers cost or profit equation. These variables can be of two types:

Analysis
Optimization

659

Decision variables to be optimized. These need their lower and upper limits entered.
Output variables from the model. These should have no limits entered.
Both lower and upper limits for a decision variable need to be entered directly in the Variables
table. Variables that are outputs from the model, such as Exited from an Exit block (Item library),
should not have any limits entered or the Optimizer will attempt to incorrectly change them.

If the variable is an integer type, such as a number of machines, do not enter a decimal point in

the limits. Conversely, variables that need to have real values, such as a delay time that could vary
from 1.0 to 2.2, need both limits entered with decimal points.
Specifying data table cells in the Variables table
If a cloned data table is dragged to the closed Optimizer block, the Row,Col indexes need to be
entered, separated by a comma. Since data tables are zero-based and start at row 0 and column 0,
the first cell would start at 0,0.
For example, to use the first row and second column cell of a data table, enter the Row,Col value
0,1 where 0 is the first row and 1 is the second column.

The Variables tables Row,Col column is only used to access a cell within a data table.

Objective functions
Optimizations can maximize profit, minimize a cost, or approach a constant, depending on the
form of the equation. Just like the equation field of the Equation block (Value library), optimization equations can be multi-lined, define variables, have control constructs (i.e. IF-ELSE, FOR...),
and call ModL functions. To see more information on equations, see Equation-based blocks on
page 677.
Maximizing profit or minimizing cost
For example, you may want to optimize the number of machines used to maximize the profit. In
that case, you can set up an equation:
MaxProfit = thruput*dollarsPerUnit - numMachines*dollarsPerMachine;

Or, you might want to write the equation as a cost, and minimize that cost:
MinCost = numMachines*dollarsPerMachine - thruput*dollarsPerUnit;

Approaching a constant
A special case for an objective function would be that the result needs to approach a constant K as
close as possible. In this case, you can write a profit equation.
For the case where the equation should approach a nonzero constant K, the form would be:
// maximizes when equation equals constant
MaxProfit = 1.0 - RealAbs(1.0 - equation/K);
Note that the RealAbs(x) function returns the positive absolute
value of x.

For the case where the equation should approach zero, the form would be:

How To

The variable names used in the MaxProfit or MinCost equations come from the Equation Variable column of the Optimizers Variables table. Depending on how you write the equation, the
Optimizer will either maximize or minimize the equation value by changing the values of the decision variables until the correct condition converges.

660

Analysis
Optimization

// this becomes maximum when equation equals zero


MaxProfit = ConstantValue - RealAbs(equation);

In this case, ConstantValue should be small, but large enough so that most of the population MaxProfit results are initially positive. If ConstantValue is too small, the convergence calculation will
fail because there will be both negative and positive values in the final population results. If ConstantValue is correct, all of the values will tend to become positive as the system converges, and the
convergence calculation will then be valid. If ConstantValue is too large, the convergence calculation will tend to be insensitive and high all of the time, causing a premature end of the optimization run.
These techniques can be adapted to solve any approaching a constant type of problem.
Run Parameters tab
In most cases, clicking the default buttons for the type of model you are optimizing (random or
non-random) will quickly set all of the parameters in this tab to useful values.
Two of the parameters are especially important to convergence of the optimization:
Maximum Samples per Case: The maximum number of runs averaged to get a member result.
For non-random models, this should be 1. For random models, this needs to be high enough to
get a useful mean value at the expense of run time. The Optimizer block starts the number of
samples at 1 and increases them with each generation until it reaches the maximum. Sometimes
it is useful to reduce the maximum number of samples (possibly to 5), to get a rough idea of the
best solution without spending too much time running samples. Most of the time, a useful
result will occur and, even if it is not the optimum one, it will be close.
Terminate if best and worst within (percent): This value is used to examine the current population of results to see if they are within a specified percentage of each other. The default of 0.99
might not be high enough for a precise answer in a noisy model. Increasing this value (i.e.
0.9999) will cause the optimization to continue until the population converges more closely,
increasing the likelihood of a more optimum answer at the expense of run time.

How To

Constraints
When building a model, there are almost always some parameter constraints that have to be satisfied. The two types of constraints are individual constraints and global constraints. The Optimizer block makes it easy to apply virtually any kind of constraint to a models parameters.
Individual constraints
Individual constraints are used to change a decision variables value if the value has to be limited or
if it depends on the values of other decision variables. These constraints are entered as equations,
usually with IF or IF-ELSE statements. For example:
if (NumQueueSlots > 7)
NumSlots = NumActivities+3; // change it

Sometimes you might need the IF-ELSE form:


if (Var2 >= 3)
Var2 = Var3-Var4;
else// var2 was less than 3
Var2 = Var5/2;

Analysis
Stat::Fit (Windows only)

661

In some cases you just need to modify the value of a variable. For example, if you need to constrain
its values to multiples of 0.5 (i.e. 1.0, 1.5, 2.0). You do this by multiplying the variable by 2, adding 0.5 before the Int() function truncates it so that it rounds it to the nearest integer, and then
dividing by 2.0, forcing the result to floating point values that are granular to 0.5:
Var2 = Int(var2*2.0+0.5)/2.0; // 0.5 Granularity

In any case the newly calculated Var2 value will replace the old Var2 value.
Global constraints
Global constraints are useful to reject an entire case if any or all of the decision variables dont meet
a specific criteria. Global constraints are entered as equations, usually with IF statements, to assign
the value TRUE to the variable REJECT if the variables are not within the constraint. They are
entered like this example:
if (Var4+Var5 > 7)
Reject = TRUE; // only reject if the sum is too large

Reject is a special optimization variable for use with global constraints. If set to TRUE, it will reject

that case and cause the block to calculate another possible case that could be acceptable. If Reject is
not set to TRUE, the current case will be used for the next series of runs.
Sometimes you might need a more complex form:
if (Var4+Var5 > 7 || Var4 < 2) // the || means OR, && means AND
Reject = TRUE;

In any case, any global constraint will abort that particular case and the Optimizer block will keep
attempting to create cases until the global constraint doesnt set REJECT to TRUE. It will try to
create 500 new cases before it gives up and prompts the user with an error message. If this occurs,
the global constraint is probably faulty.
Interpreting results
The Results tab shows the entire population of solutions, sorted with the best one on top (row 0).
As the optimization progresses, new and better solutions will replace inferior solutions in the population table.
If the optimization terminates for any reason, either via normal convergence or running for the
maximum number of generations, the best solution set found so far is automatically placed in the
model.
In simulation models, it is often useful to characterize a random input (for example, inter-arrival
times and demand rates) using a probability distribution. Typically, this involves obtaining historical data that documents the systems behavior, then analyzing the data to determine an appropriate
distribution to represent it. There are two advantages to using statistical distributions rather than
raw historical data as inputs to a model:
Values for input random variables are not limited to what has happened historically.
For continuous distributions, an infinite pool of data exists. With historical data, there is seldom
enough collected data to support multiple simulation runs.
Stat::Fit is a software package from Geer Mountain Software (www.geerms.com) that helps the
analyst determine which distributions, if any, offer a good fit for the underlying data. ExtendSim
has an interface so you can easily access the power of Stat::Fit.

How To

Stat::Fit (Windows only)

662

Analysis
Stat::Fit (Windows only)

Stat::Fit is a Windows application included with the ExtendSim AT and ExtendSim Suite products. It can be purchased separately for use with other ExtendSim products.

Tutorial
The StatFit Example, shown on the right, is a discrete event
model. It has Stat::Fit choose a distribution for a Random
Number block (Value library) using a pre-built text file of data.
By default, the Random Number block is set to the Uniform
Real distribution with a Minimum of 0 and a Maximum of 1.
The 32 historical data points in this project will be used by
Stat::Fit to define which distribution and associated parameters
might be more appropriate.

StatFit Example model

Open the StatFit Example model located in the folder


\Examples\Tips\Modeling Tips.

In the Distribution Fitting tab of the Random Number block, click Open Stat::Fit.

How To

The Stat::Fit application should appear on your screen with a new blank document.

Stat::Fit application window

In Stat::Fit, select File > Open.


Find and select the file StatFtEx.sfp. It should be in the same folder (\Examples\Tips\Modeling
Tips) as the StatFit Example model.

In Stat::Fit, choose Fit > Auto::Fit or click the Auto::Fit button in the toolbar.
In the Auto::Fit window, click OK to use the default settings.
After Stat::Fit does some computation, a window appears displaying a list of parameterized distributions that have been ranked according to goodness of fit.

In Stat::Fit, choose File > Export > Export Fit or click the Export button in the Stat::Fit toolbar.

Analysis
Plotters

663

Select Extend under the application window (it should be the default), then choose the
desired distribution (there should only be one).

Click OK and return to ExtendSim. (You may exit Stat::Fit if you wish.)
The Random Number blocks dialog should reflect the Triangular distribution and parameters
Stat::Fit selected.
Additional Stat::Fit documentation is available in Stat::Fits Help menu and in the SF Manual
V2.pdf file located within the ExtendSim9\Documentation folder.

Plotters
Most of the ExtendSim plotters have many features in common. The Reservoir model in the Tutorial module shows some basics of how to use plotters. This section describes the ExtendSim plotters in more detail and shows how to make plots appear the way you want. All plotters are located
in the Plotter library.
Depending on their type, plotters allow you to plot from 1 to 6 traces (plotted lines) at a time. If
you build your own plotter using ExtendSims ModL language, you can plot up to 100 traces on a
single plotter. Your choice of plotter type depends on the type of model you build (continuous,
discrete event, or discrete rate) and how you want information plotted (such as batch runs, histogram, and so on). Plotter types are described later in this chapter.
You can have more than one plotter in a model and you can place plotters at any location in the
model. Usually plotters open automatically when the simulation is run. If the plotter is set to not
open (as discussed in Plotter dialogs on page 667), you can open it by double-clicking its icon.

Plot and data panes


When you open most ExtendSim plotters, instead of
the typical dialog there is a plotter window with two
panes. The upper pane shows the plot (one or more
traces) and the lower pane shows the data for that plot
in a table. The two panes are separated by a split bar.
Initially, about two thirds of the window is devoted to
the plot and one third to the data. You can change this
by moving the cursor over the split bar until it changes
to
, and dragging up or down.

If the plotter was not opened during the simulation run,

Plotter I/O panes

only the current plot image is saved in the plot pane. In that case, use the Push Plot tool (described
on page 667) to save additional images.
Click on the number at the lower left of the plot pane to see each page. If the Key On/Off tool
(described on page 666) was on when the simulation ran, the key will be shown on the pages.
To see the exact numbers that generated a point, scroll through the numbers in the data pane. Or
simply put the cursor over the data item you want; the top row in the data pane displays the values
that match that point. (In scatter plots, this shows the X and Y values of that point.)
Change the plot axis labels and limits directly in the plot pane, as follows:

How To

Plot pane
The plot pane has four pages. If the plotter was open
during the simulation run, the four most recent runs
will automatically be saved on those pages.

664

Analysis
Plotters

Select the item to be changed and type the new text.


For example, to change the maximum Y-axis value,
click that number and enter a new number.

To finish, press Enter or click somewhere else in the


window.

To change many of the labels and limits, press Tab after


entering each new value. If you use the Tab method to
change items, the plot will redraw only after you press
Enter or click in the window.

Data pane
Resize the columns in the data pane by placing the cursor directly over the column divide, and dragging the
Changing maximum Y-axis value
divide to the desired location while holding down the
mouse. You can also tab through the data or use the
arrow keys. If you select a section of data, tabbing will move you just through the selection. Notice
that only the data for page 1 of the plot is displayed in the table.
If you change the data in the data pane, those changes are reflected in the plot. You can change
numbers, paste in rows, and so on. Use this capability to view how various data would be plotted,
or to plot a reference line.
The label headers for the columns are changed using the Trace properties tool, described on page
665. The color, pattern, and symbol for each trace is displayed to the left of its label.

Plotter tools

Tr
ac
e

How To

pr

op
er
tie
s

O
pe Lo
g
n
di
G
rid alo
de g
K ns
ey it
o y
A
ut nos of
f
A cal
ut
e
X
os
A
ut cal
e
os
ca Y
le
Zo XY
om
Zo
o in
R
ed m
ra ou
w
t
t
Pu r a c
sh e
pl
ot

Note the tools at the top of the plot pane. These are used to change the traces and views for the
plots, change the labels and formatting for the data being plotted, and to control how and when
the data is displayed. Tools with arrows beneath them are popup menus with multiple choices. The
toolbar in plotter windows looks like:

Plotter toolbar

Analysis
Plotters

665

ol
W or
id
Pa th
tte
r
S n
Sy tyl
m e
b
Fo ol
rm
a
Sh Y t
o w 1 /Y
Tr 2
ac
e

Tr
ac
e

am

Trace properties tool


This tool lets you change many aspects of the traces and data. It brings up a small window that
looks like:

Trace window

If you check the Delay changes until close checkbox, changes you make will occur in the plot only
after the Trace properties tool is closed. This is useful when you are making a lot of changes and
dont want the traces to be redrawn after each change.
Below the checkbox are nine columns of choices.
The Trace Name text at the left describes the traces and is used to label the columns in the data
pane. In a discrete event plotter, each trace has two sets of labels: the name of the trace and Time.
In a continuous plotter, each trace will only have one label, as shown above. To change a label,
click on the text in the Trace Name area and type the text you want.
The Color, Width, and Pattern choices describe how the trace looks. To change one of these items,
click on the box and choose from the list. You can select from seven standard colors or choose a
custom color. There are also five line widths and four patterns available.
The Style choice affects the manner in which the trace is drawn.
The top style indicates that the data points are connected by diagonal lines
(interpolated)
The middle style (the default) indicates that points are connected by horizontal
and vertical lines (stepped).

Trace style
choices

There are also many Symbol types, such as dots, squares, and circles, as well as a trace numbering
choice (marked #). If you choose a non-numeric symbol, it will be drawn at each point on the
trace. If you choose the # symbol, the number for that trace will be spaced evenly along the trace.
Except for numbers, each symbol is drawn using the trace color, width, and thickness settings;
numbers are drawn in black.
The Format option sets the number format that is used for the data in the data pane, including
Time for discrete event plotters. The four choices are General, x.xx (decimal), xxx (integer), and
x.xex (scientific notation).
The Y1/Y2 choice tells which axis to plot the numbers against. The default choice,
on the Y1 (left) axis. Clicking this changes it to , the Y2 (right) axis.

, plots values

How To

The bottom style indicates that you want the points plotted with no lines
between them.

666

Analysis
Plotters

The Show Trace choice tells whether to display the trace at all. If you click on this choice, it turns to
a closed eye and the trace is not drawn. This is useful if you have many traces and you temporarily
want to hide one to make the chart clearer or if one trace is on top of another.
Log tool
The Log tool lets you choose whether to make one or both axes use a
logarithmic scale. Click the tool to display the popup menu.
Open Dialog tool
Click the Open Dialog tool to show the plotters dialog. You use this
tool to make changes to the way the plotter operates. For example,
to not have the plot show during simulation runs or to plot every
nth point. The Plotter, Discrete Event block, for instance, has one
tab that controls how and when data is displayed and another tab
that allows you to specify the granularity of the plotted data. The
choices in the plotter dialogs are described in their Help and in
Plotter dialogs on page 667.

Log choices

Display and Data Storage tabs of Plotter, Discrete Event block

How To

Grid density tool


The Grid Density tool lets you specify the type of grid behind the plot. Click the
mouse on the tool to display the menu. The top choice indicates no grid, the middle choice a light grid, and the bottom choice a dense grid.
Key on-off tool
Grid choices
Clicking this tool turns on and off the key at the bottom of the plot pane. The
labels, colors, patterns, and symbols that the key shows come from the entries in
the Trace properties tools window. The key is handy if you are not viewing the data table at the
bottom of the plotter window or if you copy the plot to another document. If the key is on when
you run each simulation, the key will show on each plot page.
Autoscale tools
The three autoscale tools are used to manually scale the axes to fit the data after the simulation has
run. The first tool scales the X axis to fit all values that were measured in the simulation without
changing the Y axis. The second tool scales the Y axes to fit all values that were measured in the
simulation without changing the X axis. The third tool scales both axes at once. This is especially
useful if a run of the simulation goes off one side of the plot. You can manually autoscale the axes
while the simulation runs.

Analysis
Plotters

667

Note that you can also choose to have the data automatically scaled at the end of the simulation
run, during the run, or not at all. You do this using the autoscale popup menu in the Display tab
of the Dialog Open tool. By default, most plotters autoscale at the end of the simulation run.
Zoom in and Zoom out tools
There are many times you want to see a particular part of your plot in more detail, or want to
zoom out and look at a larger area of the plot. The Zoom in tool magnifies an area of the plot.
After you click this icon, the cursor becomes . Drag the cross-hairs over an area of the plot and
release the mouse to zoom in to match the described rectangle. The Zoom out tool zooms out by
changing the axes by a factor of 2 in each direction. After using the Zoom in or Zoom out tools,
you can use the Autoscale tool or the Edit > Undo command to reset your axes.
Redraw trace tool
The Redraw trace tool lets you change your data on the plot and see the results in the plotters data
table. Click and hold down the mouse on the tool to display the menu. Choose one of the four
traces that you want to change. The cursor becomes a pencil, . You use the pencil to redraw the
data that was plotted. After you are done drawing this, you can see the values for the drawn data by
looking in the data table. The Redraw trace tool is only available in continuous, non-scatter plotters, like the Plotter I/O.
Push plot tool
Each time you run a simulation with the plotter open, the previous run is automatically saved onto
page 2 of the plot. Changes made to the plot after the simulation run (such as autoscale, magnify,
and turning the key on) are not automatically saved. Also, if the plot was closed during the simulation run, the plot image from the last run will not be saved to page 2. After you change the view of
a plot or run a simulation with the plotter closed, you may want to save a copy of that plot in one
of the plotters plot pages. To do that, click the Push Plot tool.
For example, assume that you are looking at a magnified portion of the plot and you want to save
that magnified view before running the simulation again. Use the Zoom In tool, then click the
Push Plot tool to keep a record of that view. Then choose Edit > Undo Zoom in to restore your
original axis values, and run the simulation again.
When you use this tool, the current plot image is saved onto page 2. The previously saved images
are each pushed up one page so that the image that was on page 4 is discarded.
ExtendSim comes with many types of plotters, as seen in Types of plotters on page 668. Plotters
have a dialog that you can access by clicking on the Open dialog tool at the top of the plotter.
Choices that some of the plotters have in common are:
Choice

Description

Show plot during


simulation

Determines if the plotter window is automatically opened during the simulation. For example, you probably do not want the plotter to open if you are running the model with animation on.

Show plot at end of


simulation

Display plotter window only when simulation has been completed.

Do not show plot

Plotter window remains hidden until the plot icon is double-clicked.

How To

Plotter dialogs

668

Analysis
Plotters

Choice

Description

Show instantaneous For discrete event plotters, plots additional data to show when a queue changes
queue length
length in zero time. For example, when an item enters and leaves the queue
during one event.
Dont continue line
to Endsim

For discrete event plotters, stops drawing the plot trace at the last event, not at
the End Time of the model run.

Show plot

Brings the plot window to the front if it is already open, and opens it if it is
closed.

Autoscaling

Automatically resizes the Y-axis of the plot based on the maximum and minimum values observed. The plot can automatically scale during the simulation,
at the end of the run, or not at all.

Insert plotter background

When checked, enables a popup for selecting a background for the plot pane.
You can copy custom plotter backgrounds into the Extensions\Pictures folder.
They must be windows metafiles (.wmf ) or bitmaps (.bmp) for Windows or
PICT resources in a Macintosh resource file for Mac OS.

x axis shows Calendar dates with

If Use Calendar dates is checked in the Run > Simulation Setup > Setup tab,
this option expresses time units on the plot pane in Calendar date format, displaying full date and time, no time, or time only. For more information, see
Calendar dates on page 586.

Plot every nth point In continuous plotters, lets you specify that the plotter should only draw the
nth point of the data it receives. This is useful if there are many data points and
the points are all very close together, or to make the plot draw faster.
Data storage tab

The choices on this tab are to plot all data, all important data, or reduced data.
This is useful if you have plotters that store too much data, as some of it may be
redundant. The Reduced data choice samples from the incoming stream, conserving memory.

Types of plotters

How To

Plotters are located in the Plotter library. As indicated in the following table, each plotter has a distinct purpose. Some can only be used in continuous models (C), some only in discrete event or
discrete rate models (DE/DR), others in both (Both).

Discrete Event plotters are used in discrete event models. However, since they plot values not

items, you must connect a value output (as opposed to an item output) to the Discrete Event plotter. This tells the plotter what information about the items or about the status of the model you
want to plot.
The MultiSim and Error Bar plotters are specifically designed to be used when you run multiple
simulations for Monte Carlo or sensitivity analysis. You choose the number of times you want the
simulation to run in the Run > Simulation Setup dialog.

Analysis
Plotters

Plotter
Bar Chart

Description

Model

Windows only. Displays a bar graph of up to six input values. The

Both

669

bars can change instantaneously or at regular intervals. Unlike other


plotters, the bar chart does not record any data. It uses the IOComp
ActiveX control to display the graph.
Gantt Chart

Windows only. Plots up to six Gantt chart bars. Each bar displays

Both

one of the following types of information:


The binary status of a variable (on or off )
The level of a variable (the height of the bar varies with the
level)
The status of an Activity or Workstation block (Item library)
It uses the IOComp ActiveX control to display the graph.
Histogram

Creates a histogram of all the values it receives. Each bin counts the Both
number of data values that fall within its range, or the amount of
time that the incoming value was in that bin (if the Time Weighted
option is used). The number of bins and the overall minimum and
maximum range values are specified in the plotters dialog. The maximum and minimum can be the entire range received or specified
numbers. You can specify in the dialog whether to plot the data from
each step or, if you run multiple simulations, to plot the final values
of each run. The dialog also displays the number of points that fall
within the specified range.
DE/DR
Shows the mean and standard deviation of a value. This plotter is
used when running multiple discrete event or discrete rate simulations, such as for Monte Carlo modeling or for sensitivity analysis.
The time line is divided into a number of equal intervals specified in
the dialog. You can also choose to use time-weighted statistics. The
plotter calculates the average mean of the value over each interval
and from this determines the mean and standard deviation over all
of the runs.

Plotter,
DE MultiSim

DE/DR
Accumulates the values from up to four runs of a discrete event or
discrete rate simulation on a single plot pane and table. In the dialog, you can choose to only plot values when they change or to plot
all values. You can also specify by number which trace to show the
current run on and whether to automatically increment the trace
number.

Plotter, Discrete
Event

Gives plots and tables of data for up to four value inputs in discrete DE/DR
event and discrete rate models. Both the value and the time the value
was recorded are shown in the data table for each input. In the dialog you can specify whether to plot values only when they change or
to plot all values. Use the Show instantaneous length option if you
attach an input to the L connector of a queue-type block and you
want it to report on items that arrive and depart on the same time
step (these are items that stay in the queue for zero time).

How To

Plotter,
DE Error Bars

670

Analysis
Plotters

Plotter

Description

Model

Plotter, Error Bars

Similar to the Plotter DE Error Bars except it is only used in contin- C


uous models. As opposed to the Plotter DE Error Bars, this plotter
calculates the mean and standard deviations for the value at the exact
point or step in time rather than its average over the time interval.

Plotter, FFT

A specialized plotter used by electronic engineers, it plots both the C


data that is input and the FFT (Fast Fourier Transform) of the data.
When you double-click the FFT icon, it shows a dialog where you
can specify the number of FFT points and choose an FFT window.

Plotter, I/O

Gives plots and tables of data for up to four time-associated inputs. C


In the dialog, you can specify that only every nth point is plotted
and you can choose whether or not to autoscale the plot during the
simulation. The output connectors allow the data generated in one
simulation to be used as an input to another simulation. To do this,
run the simulation, then copy the plotter into the new model and
connect from its output connectors.

Plotter, MultiSim

Accumulates the results of up to four runs of a continuous simulation on a single plot pane and table. You can specify by number
which trace to show the current run on and whether to automatically increment the trace number.

Plotter, Scatter

Shows two sets of data plotted as x,y value pairs. You must connect
both the x and y inputs of at least one pair in order to plot data.

Both

The same as the Plotter, Scatter except that you can plot up to four Both
sets of data. You must connect both the x and y inputs of at least one
pair in order to plot data.

How To

Plotter, Scatter (4)

Plotter, Strip

C
Shows a moving strip chart of a specified number of data points
plotted over time. The strip chart moves left as the data appears on
the right side of the plotter. In the dialog, you can specify the numbers of points to show on the chart. Because it uses less memory than
the Plotter, I/O, this is especially useful if you are running a long
simulation and only need to monitor the current conditions.

Analysis
Reports

Plotter
Plotter, Worm

Description

671

Model

Shows two sets of data plotted as x, y value pairs for a specific num- Both
ber of points. You can specify how many points to show at a time
(the worm width) in the dialog. This is like the Plotter Scatter except
that points are deleted. Use this if you are generating a great deal of
data but do not need to see all of it. You must connect both the x
and y inputs of at least one pair in order to plot data.

Copying plotted information


You can copy the information from the plotter to the Clipboard. If the plotter is the front-most
window, simply choose Edit > Copy Plot to copy the picture of the plot into the Clipboard. To
copy the data, you must select it, then choose the Copy command.

Clearing plotted information


When the plotter is the active window, clear all the data associated with the current plotter by
selecting the Edit > Clear All Plots command. This is useful to reduce the size of a model for distribution or archiving.

Reports
The report commands in the Run
menu are for generating custom reports
of model data. The commands let you
choose just the blocks you want in the
report, or you can choose to report on
all the blocks in a model.
For example, if you have a discrete
event model with queues, you might
Report options
want to check each queue to see what
the maximum queue length was. You
could simply look in the report for those queues.

If you build your own blocks and want to use the Report features for debugging, add special code
to the blocks as described in the Developer Reference.

Types of reports
The Statistics (DB) report contains the final values for the output parameters. The statistical
data from each simulation run is stored in an ExtendSim database, organized by block type so
that there is one table per type of block.
The Dialogs (Text File) report includes the final values for the input and output parameters of
every chosen block, as well as the information in each blocks comments field. Since this report
includes the values and settings for all of the parameters in each of the selected blocks, it is a
good tool for documenting a model.
The Statistics (Text File) report contains the final values for the output parameters, stored in a
text file. This report arranges the statistics in tabular form, allowing for easy comparison of block
results and exporting to spreadsheets.

How To

There are three types of reports that can be generated:

672

Analysis
Reports

Only one type of report can be generated for a given run.


As shown above, the currently selected type of report is displayed as part of the Report Type command in the Run menu. All the report types organize the data first by block category, then by
block number, allowing you to easily locate the results for a particular block. The text file reports
are saved as text files and open automatically when the simulation is finished. If you perform a
multi-sim run by setting the Runs parameter in the Simulation Setup dialog to a number greater
than 1, each report is appended to the current report file so that you can compare reports from earlier runs. However, if you perform two consecutive single runs, the reports will be written to separate files or, if you specify the same file name, written over.
Note that model reporting only tells you the final values of the blocks in the simulation. If you
want to see the values of the blocks during the simulation, use the tracing commands described in
Model tracing on page 707.

Generating reports
Before generating a report, you need to choose which blocks to report on. To include some blocks
in a report, select the blocks and choose Run > Add Selected to Report. To have all the blocks in a
model be included, choose Run > Add All To Report. To report on fewer blocks in the next simulation run, select the blocks you want out of the report and select Run > Remove Selected from
Report; to start over on your selection of blocks, choose Run > Remove All from Report.
Its highly recommended that you do not include a Plotter block in a report. Plotters write out all
report data to a very large file.
You can see which blocks are being reporting on by choosing Run > Show
Reporting Blocks; each block in the report displays the word Report on its icon.
Reports are opened, closed, and edited just like any other text file in ExtendSim.

Steps for reporting


Choose the blocks you want to report, as discussed above.
Icon for block in
report
Select a report type using the Run > Report Type command.
Choose the command Run > Generate Report.
Run the simulation to generate the report. ExtendSim prompts you for a name for the report
How To

file.

Reporting example
For example, the following (edited) reports were generated for Reservoir 1 models Random Number block for the first two simulation runs.
Dialogs report
ExtendSim Dialog Report - 9/27/2012 2:24:51 PM Run #0
Block Name: Random Number Block Number: 13 Block Label: Stream
DistType = Uniform Real
Argument1_prm = 0
Argument2_prm = 1
UseBlockSeed_chk = UnChecked
RandomSeed_prm = 14
RandomResult_prm = 0.396125656921534
GenerateOnce_chk = UnChecked

Analysis
Reports

673

***************************************************************
ExtendSim Dialog Report - 9/27/2012 2:24:51 PM Run #1
Block Name: Random Number Block Number: 13 Block Label: Stream
DistType = Uniform Real
Argument1_prm = 0
Argument2_prm = 1
UseBlockSeed_chk = UnChecked
RandomSeed_prm = 14
RandomResult_prm = 0.371057238775359
GenerateOnce_chk = UnChecked

Statistics (Text File) report


ExtendSim Statistics (Text File) Report - 9/27/2012 2:26:01 PM Run #0
INPUTS_________
Block Label
Number Name
Result
----------------------------- ------ ------------ ------- ------Stream
13
Random Number0.22989
***************************************************************
ExtendSim Statistics Report - 9/27/2012 2:26:01 PM Run #1
INPUTS_________
Block Label
Number Name
Result
----------------------------- ------ ------------ ------- ------Stream
13
Random Number0.70181

How To

674

Analysis
Reports

Statistics (DB) report

For the Statistics report, Inputs is the blocks category in the Library menu.

How To

You can edit the text file reports just as you would any text file in ExtendSim; this is described in
Text files on page 761. If you program custom blocks, you can specify what data gets written in
the report as discussed in the Developer Reference.
When printing the Statistics report onto a standard 8.5" by 11" sheet, to ensure that the entire
page width is printed, use the Text command to change the font from the default size 12 to size 9.
The default size is set for easy on-screen viewing, but will exceed the page margins.

Reports can also be used as a debugging tool, but you can get more detailed information for debugging by performing model tracing. See Model tracing on page 707.

How To

Math and Statistical Distributions


Working with equations and distributions

I know that two and two make four - & should be glad to prove it too if I could
though I must say if by any sort of process I could convert 2 and 2 into 5
it would give me much greater pleasure.
George Gordon Noel Byron

676

Math and Statistical Distributions


Blocks that represent functions

ExtendSim provides an extensive palette of tools for integrating mathematical equations and randomness in a model. You can even control the exact moment that calculations will take place. This
chapter discusses:
Blocks that provide mathematical functionality
Using Equation blocks to create custom equations
Incorporating randomness in models
Selecting a probability distribution
Determining when inputs should be integrated or summed

See also the How To chapter titled Analysis on page 623.


Blocks that represent functions
ExtendSim libraries are toolkits of blocks for quickly building a graphical representation of model
logic. As shown below, some blocks have specific mathematical functionality and perform calculations automatically based on settings in their dialogs. Other blocks provide even more flexibility
and perform calculations based on equations you enter in their dialogs; they are discussed on
Equation-based blocks on page 677.

For information about blocks that perform statistical analysis, see Blocks that calculate statistics
on page 624.

The following blocks may be used in any type of model to provide mathematical functionality
based on dialog selections:
Decision (Value library)
Compares the value at one input to the value at another input and reports a result.
For example, use this block to determine if one model value is greater than, less than,
or equal to another value during the simulation run.

How To

Integrate (Value library)


Provides different integration methods to integrate the input value over time. You
can also set an initial value in the dialog.
Math (Value library)
Calculates a mathematical, financial, logical or trigonometry function depending on
the option selected in its dialog. Set the block to add a number to its input value and
output the result. Or have it calculate the exponent of the input value. Provides over
30 functions from a popup list.
Mean & Variance (Value library)
Calculates the mean, variance, and standard deviation of the input. You can set an
initial value in the dialog and select options to calculate a moving average, use a specified confidence interval, collect interval statistics for a specified time period, and use
time weighted statistics.

Math and Statistical Distributions


Equation-based blocks

677

Random Number (Value library)


Generates random numbers for the distribution selected in the dialog. Select from
over 30 distributions or use an empirical table to create a custom distribution. This
block is discussed more in Random numbers on page 684.
Data Fitter (Utilities library)
Uses matrix techniques to obtain a least mean square curve fit to a set of data. Enter
or import the data into the dialogs data table and select a fitting function to solve
for.

In addition to the blocks listed above, most blocks automatically calculate and report statistical

information during or at the end of a simulation run. For example, the Math block (Value library)
reports the results of the selected mathematical calculation in its Options tab and the Queue block
(Item library) displays statistics about the queue length, average wait time, utilization and so forth
in its Results tab.

Other options
There may not be an ExtendSim block that provides the specific function or equation that you
want. Or, you may want to combine the functionality of several blocks into one. Some possible
solutions are:
Select several blocks and make them into a hierarchical block, as discussed in Hierarchy on
page 598.
Add features to an ExtendSim block by modifying the structure of a block (its dialog and code)
as discussed in the ExtendSim Developer Reference.
Use the Equation block (Value library) or the Equation(I) or Queue Equation blocks (Item
library) to directly combine functions or to obtain behavior not available in other blocks. These
blocks are discussed in the next topic.

Equation-based blocks
The equation-based blocks calculate values for models based on formulas and ModL code entered
in their dialogs. There are five mathematical equation-based blocks:
Library

Purpose

Equation

Value

Computes user-defined equations and outputs the results

Equation(I)

Item

Computes user-defined equations when an item arrives,


then outputs the results

Queue Equation

Item

Stores items and releases them based on the results of


user-entered equations. See Sorting items using the
Queue Equation block on page 137.

Query Equation

Value (AT & Suite) A user-defined equation selects one record from an
ExtendSim database table

Query Equation(I)

Item (AT & Suite)

A user-defined equation selects one record from an


ExtendSim database table when an item arrives

How To

Block

678

Math and Statistical Distributions


Equation-based blocks

These blocks provide access to over 1,000 internal functions; you can also use operators to enter
logical statements, write compound conditions, and specify loops. The equation can be as simple
as performing a mathematical operation on the value from an input connector or it could be as
complex as a full programming segment. You can use include files (See Include Files in the Developer Reference) within your equation to reuse your own functions among many equation blocks,
and you can use the source code debugger (See Debugging equations on page 702) to check the
equation if you have a problem. The equation is automatically compiled when you click OK in the
blocks dialog.
The Equation(I), Queue Equation, and Query Equation(I) blocks can only be used in non-continuous (discrete event and discrete rate) models. They typically perform calculations when items
arrive or depart. Although it is a continuous block, you can use the Equation or Query Equation
block in non-continuous models. This is common when you want the equation to calculate independent of item status.

Overview
An equation-based block takes input variables, uses those values in an equation, and outputs the
results of the calculation. Equation-based blocks are similar to the formula bar of a spreadsheet.
Most of the usual components (operators, values, functions, and so on) are the same. There are
two differences - instead of a cell reference, these blocks have input and output variables that are
identified by name in the equation, and the results of the equation can be output to different destinations.

Equation components
The components of an equation are the input variables, the equation, and the output variables.
All of the equation-based blocks have a scrollable area for entering the equation. Most equationbased blocks also have a separate Equation Editor for viewing and editing the equation; it is discussed on page 683.
You can define local (temporary) input and output variables in the equation area or the Equation
Editor as well as static (permanent) input and output variables using include files.
As described below, most equation-based blocks also have two tables, Input Variables and Output
Variables, with predefined static variables you can use in equations.

How To

Input variables
Input variables are the model values used in an equation. With the exception of the Buttons and Optimizer
blocks, the equation-based blocks have a table for creating the input variables. Each row in the Input Variables
table (shown on right) has a popup menu for selecting
a pre-defined type of input variable and a field for its
name and value. Variables created here are static (permanent).
To modify the number of rows used in the variable
tables:

Input Variables table

Change the number of rows in the table by clicking the green +/- resize button in the tables bottom right corner and entering the number of rows desired.

Math and Statistical Distributions


Equation-based blocks

679

Delete rows by first selecting the rows you wish to delete, clicking the green +/- resize button,
and then selecting the option to "delete selected rows."
Duplicate any rows by first selecting the row you wish to duplicate, clicking the green +/- resize
button, and then selecting the option to "copy selected row."

Input Variable Type

Equation

Equation(I)

Queue Equation

Query Equation

Query Equation(I)

The Variable Type popup provides many options for input variables, as shown below. For more
information about each option, see the blocks Help.

Connector value input connector

DB read value reads a value from a fixed location in a database table.


Specify location in the Variable Value column.

DB read value using attrib reads a value from a variable database


location specified by a DB address attribute
DB read PRI reads the Parent Record Index (PRI) from a cell in a
Child field. Read location is fixed and is specified in the Variable Value
column. See note below.

DB read PRI using attrib reads the PRI from a variable database
location specified by a DB address attribute. See note below.

X
X

DB database index a database index chosen in Variable Value column

DB table index a database table chosen in the Variable Value column

DB field index a database field chosen in the Variable Value column

DB record index a database record chosen in Variable Value column

Static first run init a static variable that gets initialized to its starting
value only at the beginning of the first run. Specify starting value in the
Variable Value column.

Static mult run init a static variable that gets initialized to its starting
value at the beginning of each run. Specify starting value in the Variable
Value column.

Static open model init a static variable that gets initialized to its starting value when the model is opened. Specify starting value in the Variable Value column.

Next calc event time Used to get this block's next event time. (Only
enabled if the Use calc event time output variable option is chosen.)

How To

DB address a database address chosen in the Variable Value column

Attribute the value of the attribute named in Variable Name

Item quantity the items quantity value

Item priority the items priority value

Item index the items index value from the Executives item array

3D object ID the index of the items 3D object

Equation

Input Variable Type

Query Equation

Queue Equation

Query Equation(I)

Math and Statistical Distributions


Equation-based blocks

Equation(I)

680

For the Variable Name column, use the default names, assign names that have more relevance to
the model, or select a name from a popup, depending on the type of variable selected. The type of
input variable selected also determines the options for the Variable Value field: enter a value
directly, select the value from a database location, and so forth.

The notation PRI (Parent Record Index) is used in blocks that interface with the ExtendSim database. It describes the type of value that is being read or written when dealing with a Child field.

The Queue Equation, Query Equation, and Query Equation(I) blocks have additional specific

input variable types. See Sorting items using the Queue Equation block on page 137 or Query
Equation and Query Equation(I) blocks on page 752.

How To

Output variables
Output variables are where the results are recorded
when the equation is calculated. With the exception of
the Buttons and Optimizer blocks, the equation-based
blocks have a table for creating the output variables.
Each row in the Output Variables table (shown at
right) has a popup menu for selecting a pre-defined
type of output variable and a field for its name and
value. Variables created here are static (permanent).
To modify the number of rows used in the variable
tables:

Output Variables table

Change the number of rows in the table by clicking the green +/- resize button in the tables bottom right corner and entering the number of rows desired.
Delete rows by first selecting the rows you wish to delete, clicking the green +/- resize button,
and then selecting the option to "delete selected rows."
Duplicate any rows by first selecting the row you wish to duplicate, clicking the green +/- resize
button, and then selecting the option to "copy selected row."
The Variable Type popup provides many options for output variables, as shown below. For more
information about each option, see the blocks Help.

Output Variable Type

Equation

Equation(I)

Queue Equation

Query Equation

Query Equation(I)

Math and Statistical Distributions


Equation-based blocks

Connector value output connector

DB write value writes a value to a fixed location in a database table.


Specify location in the Variable Value column.

DB write value using attrib writes a value to a non-fixed database


location specified by a DB address attribute
DB write PRI writes a Parent Record Index (PRI) to a fixed location
in a database table. Specify location in the Variable Value column. PRI
is the index of the parent cell that is being written to the child.

DB write PRI using attrib writes the PRI (see above) to a non-fixed
database location specified by a DB address attribute. See note below.
Calc event time Used to set this block's next event. (Only enabled if
the Use calc event time output variable option is chosen.)

681

X
X

X
X

Attribute the value of the attribute named in Variable Name

Item quantity the items quantity value

Item priority the items priority value

3D object ID the index of the items 3D object

For the Variable Name column, use the default name, assign a name that has more relevance to the
model, or select a name from a popup, depending on the type of variable selected. The Variable
Value field reports the results for the selected output variable. In the Equation(I) block there is also
a column to specify what should happen to the result if an output is needed but there is no item to
trigger the equations recalculation.
base. It describes the type of value that is being read or written when dealing with a Child field.

The Queue Equation, Query Equation, and Query Equation(I) blocks have additional specific

output variable types. See Sorting items using the Queue Equation block on page 137 or Query
Equation and Query Equation(I) blocks on page 752.

Equation
An equation is a list of commands to be executed on one or more input variables, resulting in one
or more output variables. In the equation pane, enter an equation that uses the names of the input
and output variables and any of ExtendSims built-in functions and operators. The equation must
be of the general form output = equation; (the semicolon at the end is required).
For example, an equation that uses the values from input connectors named Input1 and Input2
and outputs the result to an output connector named OutputA would be:

How To

The notation PRI (Parent Record Index) is used in blocks that interface with the ExtendSim data-

682

Math and Statistical Distributions


Equation-based blocks

if(Input1 > Input2)


OutputA = 2;
else
OutputA = 5;

To find out how to debug your equations, see Debugging equations on page 702.
The equation does not have to use all the names assigned to the input and output variables. However, if an input connector is connected, ExtendSim assumes that you will want to use it in the
equation. If you dont use it, ExtendSim will give a warning when the simulation runs. ExtendSim
will also warn if the equation uses a connector that is not named or is not connected.

Equation-based blocks can calculate separate results and output them using any number of output
variables.

The timing and control of equation calculations


The equation-based blocks evaluate their equations:
Equation, Equation Query. In a continuous model, at every step. In a discrete event or discrete
rate model, when a message is sent to its value input or output connectors. The frequency of calculations can also be customized in the blocks Options tab.
Equation(I), Equation Query(I). Each time the block gets an item at its item input connector.
Queue Equation. Each time an item arrives or leaves and when a message is sent to one of the
value input connectors.
The timing of equation calculations can have significant consequence in a simulation, affecting
model behavior. To control when the equation is evaluated so that extraneous messages arent generated, see the Step Message block (Utilities library) or the Pulse block (Value library).

How To

Equation block example


The topic Simplifying the model on page 68 demonstrates how one Equation block can replace
four blocks that calculate and remove overflow from a Holding Tank block.

Original Reservoir model with overflow calculations (left) and using Equation block (right)

Math and Statistical Distributions


Equation-based blocks

683

Equation Editor
As discussed earlier, all of the equation-based blocks have a scrollable area for entering equations.
Other than the Optimizer (Value library) and Buttons (Utilities library) blocks, the equation-based
blocks also have a separate Equation Editor window for viewing and editing the equation.
Although the equation could be edited within the blocks dialog, there are advantages to editing
the equation in the Equation Editor window:
The Equation Editor window can be resized to fit larger equations
Tabs can be used for indenting
Code colorization is allowed, so code is more understandable
Other editing commands, such as matching braces, are supported

Code completion is enabled in both the equation area and the Equation Editor window (which
also has a Code Completion button). Code completion (F8) makes it easier to recall function
names and their arguments
To see the Equation Editor:

Open the Reservoir 3 model located at \Examples\Tutorials\Continuous


In the model, open the dialog of the Equation block; it is labeled Calculate Overflow
In the blocks dialog,
click Open Equation
Editor. The window
that opens is shown in
the screenshot to the
right.
Equation Editor window showing overflow equation
As you can see, the contents of the window automatically uses the indenting and code colorization features. The Code Completion button at the
bottom of the window is useful when searching for a function or to get the correct argument list.
To use code completion, type the first part of the function name in the code pane, then click the
Code Completion button or press F8. If the function that appears isnt the one you want, click F8
again until the correct function appears.

It is common that several blocks would use the same or similar variable definitions and functions.
Include files simplify programming tasks that are repeated in multiple blocks. They are especially
helpful when you define your own functions for one block and want other blocks to have access to
those functions.
For those who are building complex equations, most of the equation-based blocks have an interface for adding include files. This feature is implemented in the Equation and Query Equation
blocks (Value library), Equation(I), and the Queue Equation, and Query Equation(I) blocks (Item
library).
Include files in equations are similar to the standard ModL include header files used when creating
a block and discussed in the Developer Reference. They can contain ModL symbol definitions
such as #define, conditional compilation statements such as #ifdef, and function definitions.
The main differences between the two methods of using include files are:

How To

Include files for equations

684

Math and Statistical Distributions


Random numbers

Include files used with equations are normally saved in the same location as the model using
them; this makes it easy to move both the model and the includes it uses to a different location.
Include files used in block code should be saved in the Extensions/Includes folder.
Include files are added to block code via the #include syntax in the code, such as #include filename.h. However, include files in equations are added via an interface (Use include files) in the
equation blocks dialog. You cannot use the #include syntax in an equation block.
To create a new include file for an equation-based block:

Check Use include files in the blocks Equation tab


Click the Create New button
Give the new include file a name
In the window that appears, enter the procedure or function. For instance:
//**********************************
//START: Equation Include Prototypes
procedure myproc();//this will be displayed in the prototype list
//END: Equation Include Prototypes
//**********************************
procedure myproc()
{
userError("Hello World");
}

Use the procedure in the equation. In this case, when the equation is called the block will display a user error that says Hello World.

If you have ExtendSim OR, ExtendSim AT, or ExtendSim Suite, see also the Equation Include File
model; it is located at \Examples\Discrete Event\Tips.

How To

Random numbers
The ability to include randomness and show dynamic aspects through time is one of the most
valuable characteristics of a simulation experiment. Introducing randomness into a model mimics
the patterns and unpredictability of the real world, increasing model accuracy. Since most models
have randomness, it is important to understand random numbers.
ExtendSim has blocks, features, and functions that provide randomness in models. For example,
the Random Number block (Value library) and the Create and Shutdown blocks (Item library) calculate random numbers using random distributions accessed through ModL functions. You can
also specify random settings when using Sensitivity Analysis and for values in the ExtendSim database, and developers can directly access several random number functions.

Random number generators


The random functions produce random numbers based on a repeatable algorithm known as a
pseudo random number generator. This generates the uniform random numbers used in the distribution functions. These 32-bit functions are seed-based and update their seed after being called.
ExtendSim supports two types of random number generators:
The recommended, default generator known as the minimal standard random number generator initially by Lewis, Goodman, and Miller, using new coefficients by Gerald P. Dwyer, Jr. (See

Math and Statistical Distributions


Random numbers

685

Numerical Recipes in C, 2nd edition, pp.279 A portable and reasonably fast minimum standard random number generator that uses Schrage's algorithm and L'Ecuyer - Comm. of the
ACM, Oct. 1990, vol. 33 and L'Ecuyer and Cote, ACM Transactions on Mathematical Software, March 1991.)
An optional generator based on Schrage, A More Portable Fortran Random Number Generator, ACM Transactions on Mathematical Software, Vol 5, No. 2, June 1979, pages 132-138.
The first type of generator is specified by default in the Run > Simulation Setup >Random Numbers tab and is highly recommended for building models. The second generator is used mainly for
backwards compatibility, so that models developed before ExtendSim 4.0 will retain results that
are consistent with those older versions of ExtendSim.

Random seeds
A random number stream is a sequence of random numbers; the numbers in the stream are
derived based on seed values. The pseudo random number generator is the internal mechanism in
ExtendSim which calculates the numbers in the stream.
ExtendSim provides independent random number streams with the ability to specify a seed so that
sequences of random numbers can be repeated. A random number is generated based on a seed.
You can specify a seed for the model as a whole in the Run > Simulation Setup > Random Numbers tab. A seed value of 0 or blank uses a random seed; any other value causes repeatable sequences
of pseudo-random numbers. This gives repeatable results, allowing you to determine exactly how
changes affect the model.
ExtendSim automatically assigns a separate seed to each block in the model that generates random
numbers. To specify your own seed, enter a value in the Use block seed field in the dialog of those
blocks. Any number entered as a seed in a block dialog will result in an independent random number stream that will not change across runs. Since each stream of random numbers is based on a
seed, and you can have a separate seed for each block that generates random numbers, random
number generation in ExtendSim is independent. The blocks that generate random arrivals or
numbers are the Create and Shutdown blocks (Item library) and the Random Number block
(Value library).

Resetting random numbers for consecutive runs


The Run > Simulation Setup > Random Numbers tab has three options for when a model is run
repeatedly:
Reset random numbers for every run
Continue random number sequence
Use Database table __Seed for values
These options are described in Random Numbers tab on page 577.

How To

Each cell in an ExtendSim database can have an independent seed for the selected distribution.
The database seed is dependent on what is set in the Run > Simulation Setup > Random Numbers
tab. The seed field in the Sensitivity Setup dialog is independent of the seed that is set in the Random Numbers tab.

686

Math and Statistical Distributions


Probability distributions

Probability distributions
In real life you cannot know exactly when an event is going to occur until it happens. For example,
you do not know when the next customer will enter your store. However, by using the correct statistical distribution you can approximate what happens in the real world.
A distribution (also known as a probability distribution or a random distribution) is a set of random
values that specifies the relative frequency with which an event occurs or is likely to occur. ExtendSims random number distributions express both a probability that something will occur and a
range of values that specify the maximum and minimum value of occurrence.
Distributions represent the data observed in real-world situations. When you gather data for a simulation model, it is seldom in a useful form. By filling in the gaps, distributions help to compensate for information which was overlooked during data collection. For example, distributions
account for extreme or outlying values which may have been missed during typically short datagathering intervals. Stochastic models use distributions as a handy method for converting data into
useful form and inputting it into models.

Characteristics of distributions
The functions that produce a distribution have one or more parameter arguments which define
and control its characteristics. The most important characteristics are a distributions shape, its
spread, and its location or central tendency. Shape is often used to identify distributions; for example, the bell-shaped curve of a normal distribution is widely recognized. Shape can be characterized
according to skewness (leaning to one side or another) and kurtosis (whether it is peaked or flat).
You specify the characteristics for the selected distribution by the values you enter for these arguments.

Choosing a distribution

How To

Using random numbers means either choosing the theoretical distribution that best describes the
variability of the raw data, describing the data using a user-defined or empirical distribution (such
as the empirical distribution in the Create block), or fitting known data to a distribution. As seen
below, there are many distributions in ExtendSim and it also has the ability to interface with external distribution-fitting software, as discussed in the next topic.
The choice of one distribution over another is not an exact science, but rather is dependent on the
type and extent of the data which is gathered, the detail required for the process being modeled,
and (in the case where little data is available), informed guesswork. If the data does not fit any of
the distributions described below as typical for your process, but fits a distribution which is not
typical, go with what your data tells you. It is usually better to use an approximate distribution
than it is to keep a value constant.

Distribution fitting
There are also software applications which fit data to distributions. Use these tools in situations
where there is empirical data you want to model using random distributions, but the ExtendSim
distributions do not exactly fit. These products can help find the statistical distribution that best
emulates the real-world data.
Some ExtendSim packages come with the Stat::Fit distribution fitting application (see Stat::Fit
(Windows only) on page 661.) The Random Number block has a Distribution Fitting tab from
which to launch a distribution fitting package, analyze empirical data, and determine the appropriate statistical distribution for a given data set.

Math and Statistical Distributions


Probability distributions

687

ExtendSim distributions
When there is sparse or no data, this guide of common uses may help you select a plausible distribution in the Create, Shutdown, or Random Number blocks, within the Sensitivity Setup dialog,
or when formatting a cell in the ExtendSim database:
Definition

Beta

Distribution of random proportion, such as the proportion of defective items in


a shipment, or time to complete a task.

Binomial

The number of outcomes in a given number of trials. Most often used to


express success/failure rates or the results of experiments, such as the number of
defective items in a batch or the number of customers who will arrive who are
of a particular type.

Cauchy

Used to represent the ratio of two equally distributed parameters in certain cases
or wildly divergent data as long as the data has a central tendency. It has a sharp
central peak but broad tails that are much heavier than the tails of the Normal
distribution.

Chi Squared

Used in statistical tests but, since it does not have a scaling parameter, its utilization is somewhat limited. It is a subset of the Gamma distribution with beta = 2
and alpha = nu/2.

Constant

This does not produce a random number, but a constant value which does not
change. Used when there is exactly the same amount of time between arrivals or
as a method to reduce the effects of randomness in the early stages of model
building.

Empirical

Used to generate a customized or user-defined distribution with a special shape


when the probability of occurrence is known. The options are: discrete (the
block will output the exact values given in the table); stepped (values in the
table will be used as probabilities of ranges of data); and interpolated (the probability distribution will be interpolated between the data points).

Erlang

Frequently used for queueing theory to represent service times for various activities or when modeling telephone traffic.

Exponential

Primarily used to define intervals between occurrences such as the time between
arrivals of customers or orders and the time between failures (TBF) or time to
repair (TTR) for electrical equipment. Also used for activity times such as repair
times or the duration of telephone conversations.

Extreme Value Type describes the limiting distribution of the greatest values of many types of sam1A
ples. Used to represent parameters in growth models, astronomy, human lifetimes, radioactive emissions, strength of materials, flood analysis, seismic
analysis, and rainfall analysis. Its peaked shape is always the same but it may be
shifted or scaled.
Extreme Value Type Describes the limiting distribution of the least values of many types of samples.
1B
Represents parameters in growth models, astronomy, human lifetimes, radioactive emissions, strength of materials, flood analysis, seismic analysis, and rainfall
analysis.

How To

Distribution

How To

688

Math and Statistical Distributions


Probability distributions

Distribution

Definition

Gamma

Typically used to represent the time required to complete some task. The distribution is shaped like a decaying exponential for shape (2) values between 0 and
1. For shape values greater than 1, the distribution is shaped like a bell curve
skewed towards the low end.

Geometric

Outputs the number of failures before the first success in a sequence of independent Bernoulli trials with the probability of success on each trial. Typically
used for the number of items inspected before encountering the first defective
item, the number of items in a batch of random size, or the number of items
demanded from an inventory.

HyperExponential

Usually used in telephone traffic and queueing theory.

Hypergeometric

Describes the number of defects, x, in a sample of size s from a population of


size N which has m total defects. It is used to describe sampling from a population where an estimate of the total number of defects is desired. It has also been
used to estimate the total population of species from a tagged subset.

Inverse Gaussian

Originally used to model Brownian motion and diffusion processes with


boundary conditions. It has also been used to model the distribution of particle
size in aggregates, reliability and lifetimes, and repair time.

Inverse Weibull

Describes several failure processes as a distribution of lifetime. It can also be


used to fit data with abnormal large outliers on the positive side of the peak.

Johnson SB

Used in quality control to describe non-normal processes, which can then be


transformed to the Normal distribution for use with standard tests. It is a continuous distribution that has both upper and lower finite bounds.

Johnson SU

Used in quality control to describe non-normal processes, which can then be


transformed to the Normal distribution for use with standard tests. It is an
unbounded continuous distribution.

Laplace

Used in error analysis and to describe the difference of two independent, and
equally distributed, exponentials.

Logarithmic

Describes the diversity of a sample, that is, how many of a given type of thing
are contained in a sample of things. For instance, this distribution has been
used to describe the number of individuals of a given species in a sampling of
mosquitoes, or the number of parts of a given type in a sampling of inventory.

Logistic

Most often used a growth model: for populations, for weight gain, for business
failure, etc. Can also be used to test for the suitability of such a model, with
transformation to get back to the minimum and maximum values for the Logistic function. Occasionally used in place of the Normal function where exceptional cases play a larger role.

Log-Logistic

For Shape = 1, it resembles the Exponential distribution. For Shape < 1, it tends
to infinity at Location, and decreases with increasing X. For Shape > 1, it is zero
at Location, and then peaks and decreases.

LogNormal

Often used to represent the time to perform an activity (especially when there
are multiple sub-activities), the time between failures, or the duration of manual activities. This distribution is widely used in business for security or property valuation, such as the rate of return on stock or real estate returns.

Math and Statistical Distributions


Probability distributions

Definition

Negative Binomial

Number of failures before Sth success. P specifies the probability of success.

Normal

The well-known Gaussian or bell curve. Most often used when events are due
to natural rather than man-made causes, to represent quantities that are the sum
of a large number of other quantities, or to represent the distribution of errors.

Pareto

Represents the income distribution of a society. It is also used to model many


empirical phenomena with very long right tails, such as city population sizes,
occurrence of natural resources, stock price fluctuations, size of firms, brightness of comets, and error clustering in communication circuits.

Pearson Type V

A distribution typically used to represent the time required to complete some


task. The density takes on shapes similar to lognormal, but can have a larger
spike close to x = 0.

Pearson Type VI

A distribution typically used to represent the time required to complete some


task. A continuous distribution bounded by zero on the left and unbounded on
the right.

Poisson

Models the rate of occurrence, such as the number of telephone calls per minute, the number of errors per page, or the number of arrivals to the system
within a given time period. Note that in queueing theory, arrival rates are often
specified as poisson arrivals per time unit. This corresponds to an exponential
interarrival time.

Power Function

A continuous distribution with both upper and lower finite bounds. It is a special case of the Beta distribution with q = 1. The Uniform distribution is a special case of the Power Function distribution with p = 1.

Rayleigh

Frequently used to represent lifetimes because its hazard rate increases linearly
with time, e.g. the lifetime of vacuum tubes. This distribution also finds application in noise problems in communications.

Triangular

Usually more appropriate for business processes than the uniform distribution
since it provides a good first approximation of the true values. Used for activity
times where only three pieces of information (the minimum, the maximum,
and the most likely values) are known.

Uniform Integer

Describes a integer value that is likely to fall anywhere within a specified range.
Used to represent the duration of an activity if there is minimal information
known about the task.

Uniform Real

Describes a real value that is likely to fall anywhere within a specified range.
Used to represent the duration of an activity if there is minimal information
known about the task.

Weibull

Commonly used to represent product life cycles and reliability issues for items
that wear out, such as the time between failures (TBF) or time to repair (TTR)
for mechanical equipment.

These distributions and their arguments are described more fully in the Help of blocks that use
them.

How To

Distribution

689

690

Math and Statistical Distributions


Integration vs. summation in the Holding Tank block

Integration vs. summation in the Holding Tank block


As discussed on page 87, the Holding Tank block (Value library) has integration capabilities. The
blocks dialog gives the option to either sum or integrate its input. In general, a good rule of thumb
is:
Integrate when the value going into the Holding Tank is based on simulation time units, such as
a rate. For example, you would integrate when the Holding Tank blocks input represents dollars
per year or gallons per hour.
Sum when the value is to be added to the block at each step or dt calculation. For example, you
would sum when the Holding Tank blocks input is orders or people.
Summing adds the given input to the total at each step, regardless of the time units. Integration
considers the input to be spread evenly over each time unit; at each step integration adds a portion
of the input to the total. For example, the following table shows the effect of inputting $2000 to
the Holding Tank block when the time units are in years and dt (delta time) is set to 0.25 (for 1/4
of the year).
As seen in the table, if the Holding Tank is set to sum its inputs, it would be the equivalent of adding $2000 to the account every quarter. If the Holding Tank is set to integrate, it would be the
equivalent of adding $500 per quarter.
Time

Step

Summed

Integrated (delay)

Integrated (no delay)

2000

500

0.25

4000

500

1000

0.50

6000

1000

1500

0.75

8000

1500

2000

10000

2000

2500

How To

Summation occurs at each step so there is an amount calculated at time 0. Since summation
treats its input as an amount, the entire 2000 is added at each step.
The integrated (delay) choice treats its input as a rate and calculates a new result at the next
step. Because this backward Euler integration occurs during the interval between steps, there is
no amount at time 0.
The integrated (no delay) choice also treats its input as a rate. However, it calculates a new
result at the current step. Because its integration occurs at each step, there is an amount at time
0.
It is also important to note that if you subsequently change the delta time to something other than
0.25, the total amount in the summed Holding Tank would be different from the amounts shown
above, but the total amount in the integrated Holding Tank would remain the same.
Your choice of integration methods depends on the model:
You would generally use the integrated (delay) choice when there is only one integrating block
in the model, when the integrating blocks are not interdependent or cross-coupled, or when
there is no feedback.

Math and Statistical Distributions


Integration vs. summation in the Holding Tank block

691

In models with more than one integrating block, where the integrating blocks are interdependent or cross-coupled, the feedback between the blocks is usually a correction factor. If this feedback is delayed, the system may correct too late or overcorrect, causing the model results to
become unstable. This is often observed as a graph where the traces oscillate with increasing
magnitude as time progresses. The integrated (no delay) choice compensates for the feedback
delays by outputting results one step earlier. For example, the Predator_Prey model discussed on
page 74 is an example of interdependent Holding Tank blocks.

How To

How To

692

Math and Statistical Distributions


Integration vs. summation in the Holding Tank block

How To

Debugging Tools
Learn how ExtendSim can
help find errors in your models

If debugging is the process of removing bugs,


then programming must be the process of putting them in.
Unknown author

694

Debugging Tools
Debugging hints

Creating a model is not so fool-proof that your work is finished once the model has been built.
Two important steps in any simulation project are verification of simulation results (compare the
results to what was intended or expected) and validation of results (compare the model to the real
system).
ExtendSim provides several methods for detecting problems in models and for debugging models
that are not working as expected, including:
Hints for debugging models
Debugging item flow using item Contents tab of queues and activities
Debugging equations in equation based blocks
Verifying results at each step of the model-building process
Specific blocks used for debugging
Getting the information you need to debug a model
Using the Find command to easily locate blocks or dialogs that require attention
Dotted lines to show unconnected connection lines
Running with animation to see if a model is behaving as expected
Using the Notebook to keep track of critical parameters in one location
Stepping through the model as it progresses
Show Simulation Order command
Model tracing for comparison with the real system

This chapter is concerned with debugging a model, not with debugging custom blocks. The

ExtendSim Developer Reference discusses in detail how use the ExtendSim Debugger to find bugs
in blocks you create.

Debugging hints
Efficient debugging of a simulation requires an organized, logical approach. Following the following steps will shorten the process:

How To

Duplicate the bug. Fix the random number stream so that the problem occurs the same way and
at the same time whenever the model is run.
Describe the bug. Defining the difference between the correct behavior and the observed behavior can lead to insight into the source of the problem. This also helps in formulating a strategy
for locating the source of the bug.
Assume the bug is yours. The vast majority of modeling errors are caused by the modelers themselves. It makes sense to start with the most likely source of the bug.
Divide and conquer. Determine the source of the bug. And, determine where the bug is not.
Build the simplest model that duplicates the error. This will make the model run faster and there
will be fewer variables to consider in the debugging process.
Think creatively. Bugs don't always come from the expected locations. If the source of the problem is not immediately evident, you may be looking at only a symptom. Look at other places in
the model that could be the actual source of the error.

Debugging Tools
Verifying results as you build a model

695

Leverage tools. ExtendSim comes with a variety of tools for debugging a simulation model. For
discrete event models, adding a History block (Item library) or Record Message (Utilities
library) block can provide insight into the operation of the model. In continuous models, writing a sequence of values to the ExtendSim Database or to a global array is an easy way to record
the values at a specific point in the model. Trace files are also useful at this point.
Start heavy debugging. Focus on the problem at hand and on how it can be fixed
Learn and share. This may be a problem that could occur in someone elses models. Share your
experiences with other modelers through the ExtendSim E-Xchange or the ExtendSim Academic E-Xchange as discussed in Additional resources on page 7.

Verifying results as you build a model


One of the most efficient methods for debugging models is to verify that the model is working correctly at each step during the model building process. It is a lot easier to find problems as you create each section of the model than to try to debug a finished model. You can use almost any of the
debugging features discussed in this chapter, but the two most common methods to debug at each
step are by examining connector information and cloning dialog items.

Connector information
Connectors provide helpful information when you are debugging models. Run the model at any
point in the model building process. As the model runs, or at the end of a run, hover the cursor
over a connector to see its name and current value. You may also see additional information
depending on how the block is programmed.

Cloning dialog items


To focus on a particular parameter, clone it to the model worksheet and watch it change as the simulation runs. You can also turn animation on to compare the cloned parameter to the behavior of
the surrounding blocks. Cloning dialog items is discussed at Cloning on page 562.

Blocks for debugging


ExtendSim libraries have many blocks that are useful for debugging models either during or after a
simulation run, including:
Block

Library

Use

Display Value Value

Inputs/
Outputs

Displays the value of its input connector at each simulation step on the blocks icon and in the dialog. In the dialog, set the time between displays.

Notify

Value

Inputs/
Outputs

Plays a sound or stops the simulation when its input is


0.5. Optionally displays a message set in its dialog.

Statistics

Value

Statistics

Displays information about all blocks of a certain type,


such as all queues or all activity blocks.

History

Item

Information

Displays statistics and history (arrival time, priority, and


attributes) of items that pass through it.

Information

Item

Information

Counts items that pass through it and reports the time


between item arrivals and cycle time statistics.

How To

Category

696

Debugging Tools
Measuring performance to debug models

Block

Library

Category

Use

Event Monitor

Utilities

Discrete
Event Tools

Reports the contents of the ExtendSim discrete event calendar.

Find and
Replace

Utilities

Information

Finds specified dialog items and replaces their values.


Drag a clone of a dialog item onto this blocks icon to
search for similar dialog items.

Item Messages Utilities

Discrete
Event Tools

Records the messages sent over item connectors.

Link Alert

Utilities

Discrete
Event Tools

Sends a message when the data in the linked database


location changes. Use with the Record Message block.

Memory
Usage

Utilities

Information

Reports the size of each block, array, or database table in


the model in bytes.

Pause Sim

Utilities

Model
Control

Causes the simulation to pause when certain conditions


are met. Click Resume to continue execution

Record Message

Utilities

Discrete
Event Tools

Records messages sent over value connectors in a discrete


event or discrete rate model.

any plotter

Plotter

Add a plotter block any place in a model and connect it to


the values you want to track.

Measuring performance to debug models


ExtendSim provides several methods for obtaining model information when debugging models:
Dialog boxes display data pertinent to the specific block and in some cases automatically perform statistical calculations. For instance, the dialog of the Queue block (Item library) reports
utilization and maximum queue length as well as the number of arrivals and departures.

How To

You can clone dialog parameters to the model window or to the Notebook to create customized
reports and control panels, as shown in How to clone a dialog item on page 562.
Many of the blocks in the libraries have value output connectors that give direct access to specific information. For example, the U output connector on the Activity block outputs utilization
values. You can attach any value output to a plotter to display information about model performance. You can also attach value outputs to value inputs on diagnostic-type blocks, such as to
the Display Value block (Value library) to display information about that output.
Plotter blocks, from the Plotter library, conveniently display graphs and tables of data over time.
Plotters are useful not only for showing results but for identifying trends and anomalies. You can
choose what you want plotted and how you want it displayed, and you can use as many plotters
in a model as you want. See Plotters on page 663 for more information.
Animation shows the flow of items in a model, levels of values, etc. ExtendSim blocks have
built-in customizable animation; you can also add custom animation using the Animate tabs in
block dialogs or by using blocks from the Animation 2D-3D library. Animation is especially
useful for verifying a model since it can show if portions of the model are operating as expected.
Since animation can slow model performance considerably, it is common that you would use

Debugging Tools
Find command

697

animation in the early stages of model-building or for presentations. See Animation features for
debugging on page 705 for more information.
There are numerous blocks that can be used for debugging models and verifying results. For
instance, the Notify block (Value library) can stop the simulation and notify you when its input
goes above or below a specified level. The Information block (Item library) provides information
about the output of the block it is connected to (the interval between arrival times, how many
items are currently present at the output, and so forth).
Sensitivity analysis allows you to vary a parameter incrementally, randomly, or in an ad hoc
manner to determine how sensitive model results are to changes in one variable. See Sensitivity
analysis on page 628 for more information.
Running simulations multiple times, such as for Monte Carlo simulations, gives ranges of values
indicating the possible outcomes for the model. See Running a model multiple times on
page 580 for more information.
The Run > Generate Report command, discussed in Model reporting on page 707, instructs
ExtendSim to generate a text file of the final model results. You can report on all the blocks in a
model, or use menu commands to specify which blocks are included in the report. Reports are
especially useful for outputting to other applications, such as statistics packages, for further analysis.
The Statistics block (Value library) reports and statistically evaluates results. For example, it can
display information about every queue-type block in the model and calculates the confidence
intervals based on the results. As discussed in Clear Statistics on page 626, the Clear Statistics
block resets statistical accumulators at random intervals or in response to a system event; this is
used to eliminate statistical bias during the warm-up period.

Find command
If a model is large, it might be difficult to find all the blocks
by sight. For example, you may see in the Trace file that a
particular block didnt get the expected input. The Edit >
Find command lets you locate a block by its global block
number, name, label, or category, or find a text block by its
global block number or by the text within it.

Global block numbers are unique, permanent identifiers


for blocks and text blocks. Name means the name of the
block in the library menu (e.g. Equation). Block labels are
Find dialog

How To

The Utilities library contains two blocks that are useful for debugging discrete event models.
The Record Message block, when connected between two value connectors, shows all of the
messages, the values transferred, and whether the message came in the input or output connector. The Item Messages block records the message communication between two item connectors. See Messaging in discrete event models on page 305 for a detailed discussion of the itembased messaging system.

698

Debugging Tools
Item Contents of queues and activities

defined by the user in the block dialog and are especially useful to find types of blocks. Category
refers to how the block is classified in the Library menu (e.g. Inputs).
The debugging blocks described above list the global block number in case you have many copies
of a block in the model. Use global block number and the Edit > Find command to quickly scroll
to a block and select it.

You can also use the Find and Replace block, listed in the table of debugging blocks above, to find
blocks. It is even more useful for finding specific dialog items in the located blocks, so you can
replace their parameter values.

How To

Item Contents of queues and activities


The Contents tab found in
the Queue, Queue Equation, Resource Item, and
Activity blocks allows you to
record and view either what
items currently reside in the
block or what items have
historically traveled through
the block. While this feature
can be quite useful, turning
it on can slow model execution speeds and unnecessarily grow the size of your
models. And since this feature will most often be used
for debugging purposes, an
"Item Contents" tab has also
been added to the Executive,
where from one location you
can remotely control the
Contents tabs in all the
Contents tab of Queue
blocks in your model. This
will make it easier for you to
selectively turn contents tracking on during the debugging phase of your model development and
then turn it off once debugging has been completed. That said we fully expect customers to find
uses for contents tracking beyond debugging. For example, linking a block's contents table to a
database table would make that block's current item content easily accessible to other blocks in the
model.
Enable current contents: Checking this box turns contents tracking on.
Table displays: This popup allows you to choose between the "current contents" and "historical
log" modes:
Current Contents Mode: When the current contents mode is selected, the table only displays those items currently residing in the block. That is to say, as soon as an item enters,
it will show up as a new row in the contents table, and as soon as an item leaves, its row in
the contents table will be removed.

Debugging Tools
Item Contents of queues and activities

699

Historical Log Mode: Conversely, when the historical log mode has been selected, the table
displays all items that entered and exited the block during the simulation run. That is to
say a unique row will be "permanently" dedicated to each entering item.
Display contents: This popup is displayed only when the current contents mode has been chosen.
It contains three options including:
During run: The default, will update the contents table dynamically during the run.
Only on snapshot: Lets you click the snapshot button while the model is running in order
to display contents at the time the button was clicked. Note there is a field that will record
what time the snapshot was taken.
End of run: Will display any items that are present in the block at the end of the run.
Control log time: This checkbox is displayed only when the historical log mode has been chosen.
If this box is checked, start time and end time fields appear allowing you to control the window
of time during which log information will be collected.

Queue blocks
Contents
"Queue Type" blocks refer to the Queue, Queue Equation and Resource Item blocks. When they
are in current contents mode, the first 2 columns of the contents table are fixed. However, clicking
the green "+/-" resize button allows you to add more columns in order to track any number of
additional attributes.
Entry Time: records when an item entered the block.
Item Quantity: shows how many items the current item represents.
Items with a quantity greater than 1 are represented in one row of the contents table. When the
next item to leave the queue is a clone of the parent item, you will see the item quantity for original
item decrement by 1. Not only does this save on the memory allocated to the contents table, but
it also is a true representation of how items with quantities greater than 1 are handled inside the
queue.

Entry Time :records when an item entered the block and


Exit Time: records when an item has exited. When the contents table is in historical log mode,
items entering with quantities greater than 1 are represented in multiple rows because exit times
for each exiting item must be recorded.
Exit Point: describes how the item left the block; "Normal" means the item left via the itemOut
connector, "Renege" means the item left via the renege connector.

How To

Historical Log
In historical log mode, the first two columns of the Queue Equation and Resource Item blocks are
fixed while the Queue block's first three columns are fixed. Clicking the green "+/-" resize button
allows you to add more columns in order to track any number of additional attributes.

700

Debugging Tools
Item Contents of queues and activities

Activity blocks
Contents
When the Activity is in current contents mode, the first 5 columns of the table are fixed. However,
clicking the green "+/-" resize button allows you to add more columns in order to track any number of additional attributes.
Entry Time: records when the item entered the block.
Shutdown Status: will show an item's shutdown status; a 0 when an item is not shutdown and a
1 when it is.
Shift Status: will show whether the item's shift status; a 1 for on-shift and a 0 for off-shift.
Time Down: will record how much time the item spent in a down state from both shutdowns
and off-shifting.
Finish Time: is the time the item finished processing. If an item does not have a value in the Finish Time column, then the item is still in processing. In current contents mode, since items are
removed from the table when they leave, if a finish time appears for an item that means it has
been blocked from leaving due to a downstream bottleneck. Otherwise, the item that has finished its processing time simply would not show up in the current contents table.

How To

Historical Log
When the Activity is in historical log mode, the first 5 columns of the table are also fixed, but two
of the columns differ from those found in the current contents table. The Entry Time, Time
Down, and Finish Time columns hold the same type of information that the current contents
table holds. The Exit Time column displays what time an item left the block. If a particular item
has a value in the Finish Time field but no Exit Time has been logged, then the item is currently
blocked from leaving. The Exit Point column describes how the item left the block; "Normal"
means the item left via the itemOut connector, "Preempt" means the item left via the prememption connector.

Debugging Tools
Item Contents of queues and activities

701

Executive Block's Item Contents Tab


As mentioned above, the Item
Contents tab in the Executive
block provides one central location
from which the contents behavior
of all other blocks in the model
may be controlled. This is particularly useful during the debugging
phase of a model when users want
to track item behavior through a
number of different blocks.
Enable item contents navigation:
Checking this box turns on the
Executive's contents navigation
capabilities.
Table Filters: The three table filters checkboxes allow the users
to narrow down the number of
blocks showing up the navigator
table.
Block type: Checking this box
Contents tab of Executive
allows you to limit what type of
block shows up in the navigator table. The associated popup allows you to choose from Activity,
Queue, Queue Equation and Resource Item.
Block label: Checking this box allows you to limit the blocks showing up in the navigator table
to only those blocks whose block label matches the label you've typed in the associated field.
H-Block label: Checking this box allows you to limit the blocks showing up in the navigator
table to only those blocks found in H-blocks whose H-block label matches the label you've
typed in the associated field.

Close Selected Blocks: Much like the Open Selected Blocks button, clicking this button will close
the block dialogs of the blocks that have been selected in the navigator table.
Navigator Table: Each row appearing in this table represents a block currently residing in the
model. The number of blocks appearing in this table may be filtered using the filtering conditions that have been described above. Select column 1 of the table is a checkbox column allowing you to select certain blocks appearing in this table. This column's header has a popup which
allows you to select all, select none, or toggle the current selections. Selecting a particular block
in this column allows you to do other things to that block like open and close the selected
block's dialog or switch its contents tracking mode. Block Label column 2 will display the

How To

Open Selected Blocks: Clicking this button will open the block dialogs of the blocks that have
been selected in the navigator table. To select a block in the navigator table, check the associated
checkbox found in the first column of the navigator table.

702

Debugging Tools
The Source Code Debugger

block's label (or the block's name if the block does not have a label) as well as the block's global
number. On/Off column 3 has a popup in its header allowing you to either "turn all selected
on" or "turn all selected off". Choosing the former will turn content tracking on for all blocks
that have been checked in this column of the navigator table. Choosing the later will turn content tracking off for all selected blocks. Mode column 4 allows you to specify whether a given
block will do current contents tracking or historical logging. This column's head has a popup
which allows you to "Set all selected to Current Contents" or "Set all selected to Historical Log".
If either option is selected, it will be applied to any blocks that have been selected in the column
1.
Apply properties to selected blocks: Clicking this button will add the properties specified in the
properties table to the blocks that have been selected in the navigator table.

The Source Code Debugger


The ExtendSim Source Code Debugger is the ultimate model debugging tool. With the debugger
you can step through every statement, inspect the value of every variable, and view the sequences
of messages sent from one block to another. Using the debugger requires that you understand the
ModL language and how blocks interact with each other. For more information, see the Developer
Reference.

Debugging equations
The equation-based blocks allow you to enter equations that are simple logic statements (if x, then
y) or complex calculations that control the model using ModL functions. While in many cases you
wont need to debug the equation, ExtendSim provides an equation debugger so you can determine if equations are performing as expected. This works like the Source Code Debugger ExtendSim developers use, but it is specific to the equation-based blocks used by many modelers.
The equation debugger allows you to:
Set breakpoints for equations. A breakpoint is where the debugger initially stops execution of the
equation so you can step through the code.
Set breakpoint conditions for equations. Setting a breakpoint condition causes the breakpoint to
stop execution only under certain circumstances.

How To

Step through lines of code and examine the variables. Step commands allow you to trace the execution of the equation and examine the effects on the variables defined in the code.

Starting the tutorial


Open the Reservoir 3 model located at \Examples\Tutorials\Continuous
So that you dont overwrite the original model, save the model as Equation Debugging
In the model, open the dialog of the Equation block; it is labeled Calculate Overflow

Although the following tutorial uses a continuous model, the equation debugger can be used with

any of the equation-based blocks. For a list of equation-based blocks, see Equation-based blocks
on page 677.

Setting breakpoints
To step through each line of code, it is first necessary to stop the code execution. In this example, it
requires placing a breakpoint before the if statement at the beginning of the equation:

Debugging Tools
Debugging equations

703

In the dialog of the Equation block, check the Enable Debugger check box
Click the Set Breakpoints button
This recompiles the equation in debugging mode and opens two windows:
The Set Breakpoints window is where you set the breakpoints
The Breakpoints window lists the breakpoints that have been set. It is used later in this tutorial,
for Setting a conditional breakpoint on page 704.

Code in the Set Breakpoints window cannot be edited.


The gray breakpoint
lines in the left margin of the Set Breakpoints window
indicate the only
places where breakpoints can be set.

In the left margin


of the Set BreakSet Breakpoints window showing breakpoint at if
points window,
click the breakpoint line that is at the left of the if statement. This turns the gray dash into a red circle.

If you click at the wrong line of code, just click it again to remove the breakpoint.
Close the Set Breakpoints window.
Run the simulation. The simulation will run until the breakpoint is reached.
Stepping through the code
When the breakpoint is reached, the Debugger
window opens.
In the Source pane at the bottom of the window,
a green arrow is placed at the left of the breakpoint. This indicates that the code before the
green arrow has been executed.

How To

The green arrow indicates which line of code will


be executed next, once the run is continued.

The Variables pane at the top right shows the


variables used in the equation and the value of
each variable at the point before the line of code
at the breakpoint is executed.
Along the top of the window are five buttons.
These are used to continue the run, to step over,
into, or out of functions, and to stop the run.
(These buttons are explained fully in the Developer Reference.)

Debugger window showing breakpoint and variable

704

Debugging Tools
Debugging equations

The Call Chain pane at the upper left tells where control is in the chain of command. It is not
used for debugging equations unless there are blocks in the model that have debugging code.
The if statement has not yet executed. To watch the statement execute:

Repeatedly click the Step Over button at the top of the Debugger window; the button is
shown on the right. Alternatively, use the right arrow to step over the function.
The green arrow in the Source pane indicates the flow of the code; the Variables pane shows the
change in value for the variables.

Hovering the cursor over a variable in the Source pane will also show its current value.
Getting to the overflow calculation
The next step is to set a breakpoint to find out
when the overflow value first gets calculated.
In the Debugger window:

Remove the first breakpoint by clicking its red


circle

Add a new breakpoint at the overflow = contents... line

Click the Continue button

at the top of
the Debugger window. or use Shift+right arrow.

Although the breakpoint is set at the overflow calculation line, the green arrow indicates that the calculation has not yet been performed. Thus the
overflow value will not be current.
In order to see the current overflow value:

Click the Step Over button to execute that line

Debugger window breaking at first overflow

of code. The calculated overflow value is shown


in the Variables pane.

How To

Setting a conditional breakpoint


Conditional breakpoints cause a calculation to break
only when the overflow value is calculated and within a
specified range or specific value. The Breakpoints window is for setting breakpoint conditions. It allows you
to:
See which breakpoints have been set and where they
have been set

Breakpoint window

Add conditions to a breakpoint


Click a breakpoints red circle to disable or enable any breakpoint, without deleting it. (In place
of the red circle, disabled breakpoints have an open circle.)
Delete a breakpoint by selecting its name and clicking the Delete or Backspace key
To set a condition on the breakpoint so it will break only if the overflow is greater than 0.0:

In the Debugger window:

Debugging Tools
Dotted lines for unconnected connections

705

Remove the existing breakpoint by clicking its red circle in the Debugger window.
Add a new breakpoint to the Debugger window after the entire if and else statement;
in this case at the ending brace that is below the overflow = 0.0 statement.
The next step is to write a comparison statement that will compare the overflow value to zero.

In the Breakpoints window:


Double-click the area to the right of the breakpoint. This opens the Conditional Breakpoint window, shown below.

In the Variable A column of the Conditional


Breakpoint window, select the overflow variable as A.

Since you want the condition to determine


when the overflow is greater than zero, choose
A>B as the comparison.

Check the Use constant for B check box and


enter 0.0 as the constant.

Click OK
Notice that the breakpoints red circle in the Debugger window has changed to a half circle, indicating
there is a condition on the breakpoint.
The finished Conditional Breakpoint window
Since you have set conditions, and you want to find
the first time the condition is met, the calculation
must start again from the beginning. To start the run over:

Click the red Stop Executing button on the Debugger window. This closes the window and
stops the model run.
Run the simulation. The first overflow value will be displayed in the Variables pane.
As an additional exercise, try using different values for the overflow condition, such as 2.0, to see
when that value first appears.

Advanced modelers might benefit from reading about the Source Code Debugger in the Developer
Reference.

How To

Dotted lines for unconnected connections


If a block is not getting an input or is not generating an output when you
think it should, it may not be connected properly in the model. This can
happen when connections run underneath blocks when you thought
that they were connected to the blocks. ExtendSim shows incomplete
connections as a red dotted line. To fix these, delete the incomplete connections by double-clicking them and reattach them to where they are
supposed to be. Clicking one segment selects that segment; double-clicking a segment selects the entire connection line.

Incomplete connection

Animation features for debugging


Running the model with 2D animation on is useful for debugging. If the animation goes by too
quickly for debugging, slow down the process with the Animation Slower (turtle) button in the
toolbar. To resume speed, use the Animation Faster (rabbit) button.

706

Debugging Tools
Notebook

To learn more about how models, blocks, and connection lines are animated see Animation on
page 609.

Animating the model


If you know how a block is animated (see the blocks Help), you can watch its icon to determine if
something is not acting as expected. For example, if a block indicates the status of its contents, you
can use that information to debug the model.
Discrete event models have additional animation capabilities and can show the flow of items along
connection lines and between named connections. This gives a visual representation of what is
happening in the model.

Animating item properties (discrete event models only)


Changing an items animation depending on a property (attribute, quantity, priority) is helpful
when debugging models. For example, in a blocks Item Animation tab you can visually differentiate between types of items by setting separate animation objects for each attribute value. Then
observe the individual items as they flow through the model.

Notebook
The Notebook is a convenient way to see the final values for several dialog items in a model or to
compare inputs to outputs. This is useful in debugging because you can group the dialog items by
what their final values are expected to be.
For more information, see Notebooks on page 566.

Stepping through the simulation


The toolbar in the application window has buttons that help if
you are debugging a model. When the simulation is running,
the Stop, Pause, Animation Off/On, Animation Faster, and Animation Slower buttons are available.
When you click the Pause button, the simulation pauses, the
Pause button changes to the Resume button, and the Step button becomes available.

How To

Instead of using the Pause command, you can use the Pause Sim

Debugging buttons while running

Debugging buttons when paused

block (Utilities library). It has additional options for triggering


when to pause the simulation.

The Step Entire Model, Step Next Animation, and Step Each Block commands in the Run >
Debugging menu tell ExtendSim how far to go when the Step button is clicked after pausing.
The Step Entire Model command starts at the selected block and runs until that block would be
executed again. This is a good way to examine what happens in the intervals between when a
block is called.
If you have animation turned on, the Step Next Animation command tells ExtendSim to step
until the next animation change. In models where there are many steps between animation
changes, this option makes going from visible change to visible change much faster.
The Step Each Block command causes the Step button to simply go to the next block. It is usually used in conjunction with the Show Block Messages command, otherwise what is happening
in the model will not be apparent.

Debugging Tools
Show Simulation Order command

707

If you select Run > Debugging > Show Block Messages when you are stepping through a simulation run, the block that is active will be highlighted with the current message name written on it. If
that block is not currently visible, the window will automatically scroll to the block if Scroll To
Messages is checked. You can also choose to only show the On Simulate messages.
The Run > Debugging > Pause at Beginning command automatically pauses the simulation after
the initial model processing (initialization, error checking, etc.) but before the first step. This gives
you a chance to step from the very beginning without having to guess when to click the Pause button.

Show Simulation Order command


ExtendSim normally determines the order that
blocks in a continuous model are executed by
following the path of connections. If a continuous model is behaving in an unexpected manner, you may want to see explicitly the order
ExtendSim is using to execute calculations in a
model. Selecting the Model > Show Simulation
Order command puts a small number on each
block indicating its order of execution.

Although also accurate for groupings of contin-

Section of Reservoir model showing simulation order


uous blocks in non-continuous models, this
display will be inaccurate for discrete event
(Item library) and discrete rate (Rate library) blocks in those models. This is because discrete
blocks can generate block-to-block messages and override the systems simulation order.

Slow simulation speed


There are many reasons why a simulation would not run as quickly as you might expect. Some
common causes, and the methods to detect and avoid them, are discussed in Speeding up a simulation on page 589.

Model reporting
The report commands in the Run menu are for generating customized reports of data to help
debug models. However, model tracing (discussed in the next topic) can offer more detailed information so you will probably use that option more for debugging, and the reports option for analysis.

Model tracing
Model tracing is useful for finding anomalies that occur as the simulation runs. The model tracing
commands act like the reporting commands, but the output is much more extensive. A trace text
file shows the details of block values at every step or event in the simulation.
Because of the large amount of information generated by the model tracing commands, most people dont use model tracing often. However, tracing is a highly effective method for following a single block or a few blocks to watch for values that do not match expectations.
The trace is saved as a text file and opens automatically at the end of the run. If the Runs field in
the Simulation Setup dialog is greater than 1, each consecutive trace is added to the end of the file
so that you can compare traces from earlier runs.

How To

To learn more about how to generate reports in ExtendSim, see Reports on page 671.

708

Debugging Tools
Model tracing

Generating traces
The tracing commands are located in the Run >
Debugging menu. To generate a trace:

Select the blocks you want included in the trace:


To specify individual blocks for tracing, select
them and choose the Add Selected To Trace
command.

To get a trace on every block, choose Add All


To Trace.

Tracing commands

Choose the Run > Debugging > Generate Trace command to create a trace the next time you
run the model.

Run the simulation to see the trace results. ExtendSim prompts you for a name and location for
the trace file. Trace reports are opened, closed, and edited just like any other text file in ExtendSim.

To trace fewer blocks in the next simulation run, select the blocks you want out of the trace
report and select Remove Selected from Trace. To start over on the selection of blocks, choose
Remove All from Trace.
You can see which blocks are included in the trace by choosing Show Tracing Blocks; each traced
block in the model displays the word Trace on its icon.

Tracing example
For the Math block from the Reservoir 1 model, the top of the tracing report is:
ExtendSim Trace - 9/16/2012 3:48:57 PM
Run #0
### calculation at Math number 2. CurrentTime:0.
ValuesIn = 2.6
ResultOut = 3.1550072961999
----------------------

Step #1

-----------------------

How To

### calculation at Math number 2.

CurrentTime:1.

ValuesIn = 4.4
ResultOut = 5.3917648062033
----------------------

Step #2

-----------------------

### calculation at Math number 2.

CurrentTime:2.

ValuesIn = 6.7
ResultOut = 7.1088551154443
----------------------

Step #3

-----------------------

### calculation at Math number 2.


ValuesIn = 3.4
ResultOut = 3.8298759283776

CurrentTime:3.

Debugging Tools
Model tracing

709

If you build your own blocks and want to use the Trace features for debugging, add special code to
the blocks, as described in the Developer Reference.

How To

How To

710

Debugging Tools
Model tracing

How To

Data Management and Exchange


Managing and transferring data within ExtendSim
and between ExtendSim and other applications

It is a capital mistake to theorize before one has data.


Sir Arthur Conan Doyle

712

Data Management and Exchange


User interfaces for data exchange

ExtendSim provides a variety of standards-based options for managing and sharing data internally
and with other applications. This chapter covers:
User interfaces for exchanging data within ExtendSim and between ExtendSim and external
data structures:
Copy/Paste
Importing and exporting
Read, Write, and Query Equation blocks
DDL to dynamically link to internal data structures
DDE links to external data structures
Internal structures for storing and managing data
ExtendSim databases
Global arrays
Dynamic arrays
Embedded objects
Linked lists
Exchanging data with external applications
Blocks for accessing and managing data
How data source types are indexed and organized
Transferring data between ExtendSim and devices
Standard communication technologies:
Text files
ADO
DDE
ActiveX/COM/OLE
ODBC

How To

DLLs and Shared Libraries


FTP
Mail Slots
This chapter is concerned with the communication of data. For information about working with
2D graphic objects or pictures, see Graphic shapes, tools, and commands on page 619 or Copy/
Paste and Duplicate commands on page 774.

User interfaces for data exchange


The following sections discuss methods for exchanging data within ExtendSim and between
ExtendSim and external applications and devices. Some of these methods (such as Dynamic Data
Linking) are specific to ExtendSim, and some (such as ADO) are industry standards for interapplication communication. As discussed below and shown in the table that follows, each method
has its own specifications and properties:

Data Management and Exchange


User interfaces for data exchange

713

The flow of data can be one-directional or two-directional. With two-directional data flow, a
data change at the source affects data at the target and a change at the target affects data at the
source. One-directional data changes at the target do not affect the source.
Some methods require that two windows be open at the same time. Copy/Paste requires only
one window; you do not need to leave the ExtendSim dialog or application file open once the
data has been copied. On the other hand, DDE linking requires that windows in both ExtendSim and the other application be open to complete the process.
A communication method that has live links sends a data update message along with the data.
This means that as soon as the data at the source changes, the target is dynamically notified and
can take the appropriate actions to react to the new value.
Dynamic data linking is only used to access ExtendSim internal data structures, such as ExtendSim databases and global arrays. Other methods can be used either internally or externally (for
instance, copy/paste from one ExtendSim dialog to another or copy/paste from ExtendSim to
Excel).
The information is summarized in the following table.

Interface

See Page

Data
Direction

Open
Window(s)
Required

Live
Link

ExtendSim or
External
Application

Copy/Paste

713

One way

No

Both

Import/Export

714

One way

No

Both

Read/Write blocks

716

Two way

Possible

Both

Dynamic Data Link (DDL)

717

One way

Yes

Internal

Dynamic Data Exchange (DDE) Link

724

Two way

Yes

External

Most of the above methods are supported by an underlying industry-standard technology, as discussed in Data source indexing and organization on page 760.

Copy/Paste

When copying/pasting data tables or database tables:


To copy all the data in a specific column of a data table or database table, click in the columns title field so that the entire column is selected. Then give the command Edit > Copy
Data.
To copy all the data from all the columns in a data table or database table, click in the
upper left corner of the table so that the entire table is selected, then give the command
Edit > Copy Data.

How To

The Clipboard is useful for passing information within ExtendSim and between ExtendSim and
other applications on the same computer. The copy/paste action can occur before a simulation
run, after the run, or when the simulation is paused. While the Edit menus Copy, Paste, and
Duplicate commands work the same as in most applications, there are a few items you should
note:

714

Data Management and Exchange


User interfaces for data exchange

To paste data into a data table or database table, click in the upper left corner, in the upper
left cell, or in a desired starting cell and give the command Edit > Paste Data. The table
cells will be populated downward to the extent of the data in the Clipboard or the number
of rows in the data table.
When an ExtendSim database or database tables are selected, the Copy Database/Paste Database
commands provide a convenient method to copy an ExtendSim database or tables from one
model or one database to another. The command Edit > Duplicate Database is useful for duplicating an ExtendSim database within a model, so you dont have to create a new database structure.
Regarding Allow data table titles copying in the Edit > Options dialog:
This option is off by default, because you typically would not want to also copy table titles
when copying data from a data table.
To also copy row and column titles when copying tables from Plotter blocks, select the
option Allow data table titles copying in the Edit > Options dialog. ExtendSim will
prompt for the titles to be copied. This is helpful when you are copying into a word processing program for presentation.

Importing and exporting data


Importing and exporting is similar to copying/pasting in that both methods involve copying data
from one location to another. However, importing/exporting provides additional capabilities:
Some types of importing/exporting can be automated; copy/paste always requires user interaction.
You can import/export while the simulation is running.
It might be faster than reading and writing data because you only import data once at the beginning of the simulation or export once at the end, rather than reading and writing frequently.

How To

The information can be accessed even if it originated on a different computer or an external


device.
All the data that is imported/exported gets copied as one piece (a local copy). This means that,
whether the exchange happens before, during, or after a simulation run, all the data is made available to the target at the same time. This differs from, and is usually faster than, the Reading/Writing method (discussed later in this chapter) where the data is transferred piece by piece during a
simulation run.
Data can be imported from or exported to external applications such as spreadsheets and database
programs. Internally, you can import data to or export data from dialog or plotter data tables,
ExtendSim database tables, and global arrays.
In some cases the data is imported/exported directly within ExtendSim or directly between
ExtendSim and the other application. In other cases it is imported/exported in the form of text
files, a standard communication technology discussed in Text files on page 761.
Importing/exporting is one-directional; changing data at the target does not affect data at the
source and vice versa. The data can reside locally, be remotely accessed over a network, or accessed
via the internet using FTP protocols.
ExtendSim provides the following methods to import or export data:

Data Management and Exchange


User interfaces for data exchange

715

1) The File menu has Import Data and Export Data commands for exchanging data using text
files, as shown in the example that follows.
2) The Data Import Export block (Value library) enables ExtendSim databases or global arrays to
directly import data from or export data to spreadsheets, external databases, or an FTP site.
Use of this block is described in detail on page 759.
3) Read and Write blocks (Value library) can import or export text files, ExtendSim database
tables, global arrays, or Excel worksheets as a local copy. See Read and Write blocks on
page 751.
4) You can use Database menu commands to:
Create a new, or replace an existing ExtendSim database from an imported database text
file. The text file can be generated by a different ExtendSim database or by an SDI Industry database.
Export an entire ExtendSim database as a text file. The file can be imported into a different
ExtendSim database in the same model or in a different model
Import tables from an ExtendSim or SDI Industry database as text files to an ExtendSim
database.
Export tables as text files from an ExtendSim database to a different ExtendSim database.
5) Among other capabilities, the ExtendSim DB Add-In for Excel works with database text files
to transfer data between an ExtendSim database and Microsoft Excel. It is described fully starting on page 740.
How to import data using the File menu
The example that follows uses a menu command to import a text file of data into the Reservoir
model that was discussed in the Tutorial module. The imported data will be used as the monthly
rainfall values. The steps are:

(inches); this selects that entire column.

You must select the table column(s) to enable the Import Data or Export Data menu commands.
Give the command File > Import Data.
For Windows, choose Files of type: Text File as the type of file to open.
Find and open the Rainfall.txt file, located in the folder \Examples\How To.

How To

Open the model and save it under a different name:


Open the Reservoir 1 model located in the folder \Examples\Tutorials.
So that you dont overwrite the original file, save the model as Reservoir Import.
To import data into the data table:
In the Lookup Table block, click in the title field of the data table column labeled Rain

716

Data Management and Exchange


User interfaces for data exchange

Since you are only importing one column of data, in the delimiter dialog (shown on the right) click OK to select the default
settings and import the data. (Delimiter settings are discussed
later in this section.)
This action replaces the data that had been in the Rain (inches) column with a local copy of the source data. This exchange is one-directional and not live; if the data in the originating text file is
subsequently changed, the text file must be re-imported to affect the
change in the block.
Use this same process to import data into any data table, ExtendSim
database table, or global array that is linked to a data table.

Delimiter dialog

How to export data using the File menu


Exporting data using a menu command is similar to importing data, except in reverse. For example, to export results from the Reservoir Import model:

Select the data to export:


In the Reservoir Import model from above, open the Plotter I/O block.
Click in the upper left corner of the plotters data table so that all columns are selected.
Export the data to a text file:
Give the command File > Export Data.
In the dialog that appears, name the file Export Text, then click Save.
In the delimiter dialog that appears, click OK to select the default settings and export the
data. (Delimiter settings are discussed later in this section.)

To see the exported file:


Give the command File > Open
For Windows, choose Text File or All Files as the type of file to open
Locate and open the file named Export Text. It will contain the three columns of data from
the plotter.

How To

To also copy row and column titles from Plotter blocks, select the option Allow data table titles
copying in the Edit > Options > Miscellaneous tab. ExtendSim will prompt for the titles to be
copied. This is useful when exporting to a word processing program, but including titles could
cause data errors if the text file is imported into a spreadsheet or an ExtendSim table.
Where to get more information
For more information about:
Creating, saving, and using text files, see Text files on page 761.
How to import and export data using the Data Import Export block, go to page 759.
Read and Write blocks, see Read and Write blocks on page 751.

Read, Write, and Query Equation


ExtendSim blocks can read data from internal and external sources, write data to internal and
external sources, and query the ExtendSim database during a simulation run. The blocks for read-

Data Management and Exchange


User interfaces for data exchange

717

ing and writing are the Read and Write blocks in the Value library and the Read(I) and Write(I)
blocks in the Item library. The Read and Write blocks read data from or write data to ExtendSim
databases, global arrays, Excel workbooks, and text files. The Read(I) and Write(I) blocks read data
from or write data to ExtendSim databases.
The Query Equation and Query Equation(I) can use an equation to search an ExtendSim database
table for the highest ranking record available during the run.
These blocks are powerful tools for reading data from internal and external sources and writing
data into internal or external data destinations.
In contrast to the importing/exporting described above, the Read and Write blocks are usually
used to exchange data piece-by-piece as required during the run, rather than by one exchange of
the entire data set. Even though it may slow simulation speed, models may need to write and
read data while a model is running if the data that is written is in turn read and used in another
part of the model.
The Read and Write blocks can create a one-way live link between the target and the source. If
you write to a location in an ExtendSim database or global array, ExtendSim will send update
messages to all the Read blocks in the model linked to that location. When the Read block
receives the alert message, it will act on the fact that the data value changed, making the link
'live'. Writing to a cell in an Excel spreadsheet, or to a text file, will not have the same effect.
A potential disadvantage of using the Read and Write blocks is that reading and writing the data
each time the block is calculated can have an impact on simulation speed. If the data to be read or
written will not change over the course of the simulation, you should import/export the data as a
local copy in the block before or after the run. If the data is not going to change at all, consider
using another method, like a one-time copy/paste or import/export.
For more information, see Read and Write blocks on page 751 and Query Equation and Query
Equation(I) blocks on page 752.

Dynamic linking to internal data structures


ExtendSim supports a comprehensive proprietary internal data linking method called dynamic
data linking (DDL). This application-level protocol tracks which dialog items (parameters and
data tables) are linked to which internal data structures. The internal structures that dialog items
can be dynamically linked to are:
Global arrays
Dynamic arrays
The DDL technology has a user interface so you can easily link data tables and parameters in any
part of a model to ExtendSim database tables or global arrays. Dynamic arrays can only be linked
to dialog items through ModL code.

Dynamic data links are live and bidirectional, so the value of a linked dialog item can change
immediately when the value of the data source changes, and vice versa.

You can use menu commands to dynamically link a dialog parameter or data table to an ExtendSim database or global array. The clone of a parameter or data table can also be dynamically linked.
Linking a clone has the same effect as linking the original dialog item - both the original and the
clone will be linked to the data structure.

How To

ExtendSim database tables

718

Data Management and Exchange


User interfaces for data exchange

The sections that follow show how to create a dynamic link between dialog items (parameters and
data tables) and internal data structures (ExtendSim database tables and global arrays) through the
user interface. To learn how to use ModL code to dynamically link dialog items to internal structures, see the Developer Reference.
There is overhead associated with the process of accurately updating a linked dialog item with a
data structure. If you overload a model with links that frequently change, the models performance
can suffer. Consider the following suggestions: 1) Just link the data that is important to a model
and not link every piece of data to every possible source. 2) Import values into a Read block (Value
library) for use in the model, so they dont have to be continuously updated. 3) Send or receive link
alert messages only at the start or end of the simulation as discussed in Link dialog checkboxes
on page 722.
Linking a parameter to an internal data structure
Unless it is already linked for sensitivity analysis (see Sensitivity analysis on page 628) or through
the DDE link feature (see DDE links (Windows only) on page 724), a dialog parameter can be
dynamically linked to a specific cell of an internal data structure.
Parameter fields that are dynamically linked to an internal data structure are outlined in light blue.
(Parameter fields are outlined in green for active sensitivity analysis, red for inactive sensitivity
analysis, and yellow for DDE linking (Windows only) to an external application.)
How to link a parameter to an ExtendSim database
The following example uses the Reservoir 1 model from the Tutorial module. It describes how to
dynamically link the Holding Tanks Initial Content parameter to a cell in a database.

Open an existing model and save it under a different name:


Open the Reservoir 1 model located in the folder \Examples\Tutorials.
So that you dont overwrite the original file, save the model as ReservoirDBLink.
In the ReservoirDBLink model, open the Holding Tank dialog.
Open the Link dialog by doing one of the following:
Click in the Holding Tanks Initial contents parameter field and give the command Edit >
Create/Edit Dynamic Link

How To

Or, right click the Initial contents parameter field and choose Create/Edit Dynamic Link.
In the Link dialogs top popup menu (shown at
right with its default setting of No User-Defined
Link) choose Link to: Database Table.

Link dialog popup menu, default option

Data Management and Exchange


User interfaces for data exchange

719

In the popup menu that appears below the


Link popup, select the database named Example Database. (The Reservoir 1 model
already had a database, so you can concentrate
on learning how to create a dynamic link. For
information on creating a database, see How
to create an ExtendSim database on
page 728.)

Select the table named Example Data 1.


The field Initial Values is selected by default
in the Field Name popup menu, because there
is only one field in this database table.
Notice that the table viewer in the lower section of the Link dialog displays two records
containing initial values.

Do one of the following:


Enter Record #: 2.
Or, select the initial value of 25.00 by

Link dialog for Database Table

clicking on that cell in the table viewer;


the setting is in the second row of the table viewer.

Click the Link button to close the dialog and establish the link.
Save the model.
In the Holding Tanks dialog there is now a light blue frame around the Initial contents parameter, indicating that the field is dynamically linked. Mousing over the parameter field displays the
source and location of the linked cell. To open the Link dialog for viewing or changing the linked
settings, click in the parameter field and give the command Edit > Create/Edit Dynamic Link.
When the simulation is run the Reservoir will start with an initial contents of 25 inches; it gets
that value from a live link with the database.

Since the link is a live link, changing the value of the Initial contents parameter in the Holding

How to link a parameter to a global array


The following example uses the Reservoir 1 model from the Tutorial module. It describes how to
dynamically link the Holding Tanks Initial Contents parameter to a cell in a global array.

Open an existing model and save it under a different name:


Open the Reservoir 1 model located in the folder \Examples\Tutorials.
So that you dont overwrite the original file, save the model as ReservoirGALink.
In the ReservoirGALink model, open the Holding Tank dialog.
Open the Link dialog by doing one of the following:
Click in the Holding Tanks Initial contents parameter field and give the command Edit
> Create/Edit Dynamic Link

How To

Tank will change its record in the database table, and vice versa. If you do not want that behavior,
select the Read Only option in the Link dialog.

720

Data Management and Exchange


User interfaces for data exchange

Or, right click the Initial contents parameter field and choose Create/Edit Dynamic
Link.

In the Link dialogs top popup menu choose Link to: Global Array.
In the popup menu that appears, select Array
name: Example Array 1. (The Reservoir 1 model
already had a global array, so you can concentrate
on learning how to create a dynamic link. For
information on creating a global array, see How
to create and use a global array on page 744.)

Since global arrays are zero-based, enter Column


#: 0 and Row #: 1. This selects the cell that contains the initial value of 25.00.

Click the Link button to close the dialog and


establish the link.

Save the model.


In the Holding Tanks dialog there is now a light
blue frame around the Initial contents parameter,
indicating that the field is dynamically linked.
Mousing over the parameter field displays the source
Link dialog for Global Array
and location of the linked cell. To open the Link
dialog for viewing or changing the linked settings,
click in the parameter field and give the command Edit > Create/Edit Dynamic Link.
When the simulation is run the Reservoir will start with an initial contents of 25 inches; it gets
that value from a live link with the global array.

Since this is a two-way live link, changing the Initial contents parameter in the Holding Tank

will dynamically change the value of its record in the database table. To disable that behavior, select
the Read Only Link checkbox in the Link dialog when you create the link.

How To

Linking a data table to an internal structure


Many ExtendSim data tables have a Link button in their lower left corner. If the Link button is
not present for a table, the table does not support dynamic linking.
A data table linked to an internal data structure will have its upper left corner in light blue rather
than the grey of the table header.
If the source is a database (DB) or global array (GA), those initials will be displayed in the corner
If the link is to a dynamic array there will be no initials.
If a data table is linked to a database, double-clicking the DB initials in the upper left corner will
open the linked database tables viewer.
Because ExtendSim data tables and global arrays are zero-based, but databases are one-based, a data
tables cell at row 0, column 0 (the top, leftmost cell) is linked to the database table cell at field 1,
record 1 (the top, leftmost cell) or the global array cell at row 0, column 0 (also the top leftmost
cell). For detailed information, see Indexing and organization on page 760.

Data Management and Exchange


User interfaces for data exchange

721

How to dynamically link a data table to a database table


The following example uses the ReservoirDBLink model from the previous section that showed
how to dynamically link a parameter to a database. This example shows how to link a data table to
a database table. (So you can concentrate on learning how to do this, the model already has a database table with the necessary data. For information on creating a database, see How to create an
ExtendSim database on page 728.)

In the ReservoirDBLink model you created on page 720, open the Lookup Table blocks dialog.
Open the Link dialog either by clicking the Link button in the lower left corner of the data
table or by selecting the data table and giving the command Edit > Create/Edit Dynamic Link.

In the Link dialog (shown at right):


Select Link to: Database Table.
In the popup menu that appears choose
Database name: Example Database.

Select the table named Example Data 2


from the list of tables.
Notice that the data for the selected table is displayed in the viewer pane at the bottom of the
Link dialog. This is the information that will
populate the Lookup Table blocks data table.

Click the Link button to close the Link dialog


and establish the link.

Save the model.


In the Lookup Table dialog notice that the upper
left corner of the data table now displays the initials DB, indicating that the data table is linked
to a database table. Mousing over that corner dis- Link dialog for Database Table
plays information about which database and
table it is linked to.
When the simulation is run, the model will get rainfall data from a live link with a database.
will change the values in the database table. To disable that behavior, select the Read Only Link
checkbox in the Link dialog when you create the link.

How to link a data table to a global array


The example that follows uses the ReservoirGALink model from the earlier section that showed
how to dynamically link a parameter to a global array. This example shows how to link a data table
to a global array. (So you can focus on learning how to do this, the model already has a global array
with the necessary data. For information on creating a global array, see How to create and use a
global array on page 744.)

In the ReservoirGALink model, open the Lookup Table blocks dialog.


Open the Link dialog either by clicking the Link button in the lower left corner of the data
table or by selecting the data table and giving the command Edit > Create/Edit Dynamic Link.

How To

Since this is a two-way live link, changing the value of one or more cells in the blocks data table

722

Data Management and Exchange


User interfaces for data exchange

In the Link dialog:


Select Link to: Global Array (as shown
on the right).

In the popup menu that appears select


Array name: Example Array 2.

Click Link to close the dialog and establish the link.

Save the model.


As signified by the initials GA in its upper left
corner, the data table in the Lookup Table block
is now dynamically linked to the global array.
Mousing over the GA initials displays the name
of the linked global array.
When the simulation is run, the model will get
rainfall data from a live link with the global array.
(To make the difference more obvious, the global
array has 6.6 inches of rainfall for the first
month, rather than the 2.6 inches in the original
Reservoir 1 model.)

Link dialog for Global Array

Since the link is a two-way live link, changing the value of one or more cells in the blocks data

table will change the values in the global array, and vice versa. If you do not want that behavior,
select the Read Only option in the Link dialog.

The Link dialog


When you dynamically link a dialog item, the Link dialog opens
and displays the Link To popup
menu listing potential data
sources.

When the Link dialog is first opened, the Link To popup menu displays the current linked data
How To

structure (if the parameter or data table is already linked), or the term No User-Defined Link (if
it is not linked).
The Link To popup menu has three options: No User-Defined Link, Global Array, and Database
Table. The No User-Defined Link setting is informational only. The Database Table and Global
Array options are active options for changing, or adding, a dynamic link to the parameter or data
table. If you select either of those options, the dialog displays additional popup menus and fields to
further define the data source.
A parameter or data table can only have one data source; if you change the option in the Link To
popup menu, the previously linked data source will be unlinked.
Link dialog checkboxes
Outside of a simulation run, blocks receive messages whenever dynamically linked data changes at
the source. To maximize simulation speed you may not want these update messages sent during
certain phases of a run. As shown on page 719 and page 720, when the Database Table or Global
Array option is selected in the Link dialog, the dialog displays four checkboxes:

Data Management and Exchange


User interfaces for data exchange

723

Init messages
Sim messages
Final messages
Read-Only link
These allow you to control the links data update behavior, as discussed below.
The first three link options (Init messages, Sim messages, and Final messages) control whether or
not blocks receive update messages when linked values change during specific points in a simulation run. For example, the Init messages option determines whether a block receives a message if
a linked value changes during the InitSim message.
These three options default to on. Turning an option off prevents ExtendSim from sending data
update messages to the linked blocks if the data source is updated during that phase of the simulation. For example, if you know the dynamic link only updates during the FinalCalc message, it will
reduce the messaging and speed up the simulation to turn off the Init messages and Sim messages
options.
When the Init messages and Final messages options are turned on, linked blocks will receive an
additional message during InitSim and/or FinalCalc, causing an update of the linked dialog items
during those phases.
The fourth checkbox is the Read-Only link option, which is off by default. If checked, the linked
data can only be changed from the data structure side. In that case, you will not be allowed to edit
the parameter or the data table directly and the live link is only one-way (from the internal structure to the data table or parameter.
Use these options carefully, since they can dramatically change linking behavior. You would probably only want to uncheck a message option (Init messages, Sim messages, or Final messages) if you
are sure that the source data wont change during that message.
Finding linked dialog items
The command Edit > Open Dynamic
Linked Blocks opens the Find Links dialog, shown on the right. This is useful for
examining and locating linked dialog
items.

When the Find Links button is clicked, ExtendSim opens the dialog boxes of all the blocks with
the specified types of links.

How To

The options in the dialog allow you to


selectively choose which types of links
you want to open. Choosing Database
links, Global Array links, or Dynamic
Array links will specify whether or not
those types of links are located. The
Link dialog for Global Array
User-Defined links checkbox determines
whether to locate the links defined by the user through the user interface or (if the checkbox is
unchecked) only the links that were defined by block developers through ModL code. The DB
selectors and the GA popup menu on the right of the dialog specify which database or global array
structure will be searched for. (Leaving the DB name or GA name popup menus to the default
choices seen above will find any linked database or global array.)

724

Data Management and Exchange


User interfaces for data exchange

If the model is large and you specify all types of links this command can open many block dialogs.

It is usually advisable to search for specific types of links, so as not to have more dialogs open than
needed.

DDE links (Windows only)


One method of sharing data between ExtendSim and another application is by creating a DDE

link between the two applications. ExtendSim supports two types of DDE links:
1) As a client application, importing data into ExtendSim by linking an external applications file
to an ExtendSim model.
2) As a server application, exporting data from an ExtendSim model to an external file.
The external application and ExtendSim communicate with each other in a type of data conversation, with one application (the server) sending the data and the other application (the client)
responding. A DDE link is a special registered Clipboard format that identifies the piece of data in
the conversation. These are hot links, causing the server to simultaneously notify the client of the
change and send the changed data to the client whenever the value of the specified data item has
changed.

This communication is unidirectional; data changes made in the server file affect the client file, but
not vice versa.

The underlying technology that supports DDE linking is Dynamic Data Exchange (DDE), a
Windows operating system protocol through which applications can exchange data. It is described
fully at DDE (Windows only) on page 765. Microsoft Excel is an example of an external application that support DDE links.

For data to be exchanged, DDE linking requires that the windows of both the server and the client
files be open.

Creating a DDE link


DDE links from external applications are created and managed using DDE Link commands in
ExtendSims Edit menu. Use those commands to link a value or values from the external application to parameters and data table cells in ExtendSim.

How To

To create an outgoing link from ExtendSim, use the Edit > Copy command in ExtendSim and
the external applications linking commands, such as Paste Special.
To create an incoming link to ExtendSim, use the Edit > Paste DDE Link command. This command will only be active if all of the following is true:
The external application supports DDE links.
Both the external file and the ExtendSim model have been named and saved.
Both the external file and the ExtendSim model are open.
The Clipboard contains data that has been copied from the external application.
You have selected a location in the ExtendSim model to paste to.
Parameters or cells that have been linked with this command are outlined in yellow. ExtendSims
DDE links are saved with the model. When the model is opened, ExtendSim will attempt to reestablish the associated links.

An Excel worksheet embedded in an ExtendSim model can also be linked to ExtendSim data via
the Paste DDE Link command.

Data Management and Exchange


User interfaces for data exchange

725

How to create a DDE link to ExtendSim


The following example uses a Microsoft Excel workbook and the Reservoir 1 model from the
Tutorial module. It shows how to link a value from Excel to the Holding Tanks Initial contents
parameter.

In Excel:
Open a new workbook.
Enter the value 10 at row 1, column 1.
Save the workbook as My Workbook.

The workbook must be named and saved before the data is copied.
Copy the value (10) from cell; this places a 10 in the Clipboard.
Leave the Excel workbook open!
In ExtendSim:
Open the Reservoir 1 model located at \ExtendSim9\Examples\Tutorials.
So that you dont overwrite the original file, save the model as ReservoirHotLink.
In the Holding Tank block, click in the Initial contents parameter field.
Give the command Edit > Paste DDE Link. A yellow outline appears around the parameter
field, indicating that the link has been created.

In the Holding Tanks dialog, click OK to save changes and close the dialog.
When you open the Holding Tanks dialog, the number 10 is in its Initial contents field. Mousing
over the field shows the location of the originating data.
How to create a DDE link from ExtendSim
To export data from an ExtendSim model to another application:

cally, you would choose Paste Special or Paste Link from the client applications Edit menu.
Any changes made to the parameter in ExtendSim will now be reflected in the other application.
To remove the link, refer to the other applications documentation.
Managing DDE links
To change a linked value, change the value in the Excel workbook, then save the workbook. For
instance, the Holding Tanks Initial contents value in the previous example will change once the
value in My Workbook has been changed and the file has been saved. To remove linking from a
parameter, use the Edit > Delete DDE Link command.
The Show DDE Links command opens all the dialogs that are linked using that technology in a
model. If linked applications are open and the links dont appear to be working correctly, or if the

How To

In ExtendSim:
Open a model.
Select the dialog parameter or data table values you want linked.
Select Edit > Copy.
Refer to the other applications documentation to determine how to create a DDE link. Typi-

726

Data Management and Exchange


Internal data storage and management methods

server application has been closed, the Refresh DDE Links command attempts to reestablish existing links between ExtendSim and the external application.
If you directly change the value of an ExtendSim parameter or cell that has been linked, the field
will still be outlined in yellow but the model will use the value you entered instead of the link
value. The model will automatically refresh the link if the DDE value is changed and the external
file is saved.
Updating remote references
Creating a DDE link works in a fairly straightforward manner with the following exception: Excel
doesnt support reconnecting links in embedded objects when they are reopened by default. There
is an option called Update Remote References in Excels Options dialog that will enable this behavior. The following Excel VBA macro will turn this flag on:
Private Sub Workbook_Open()
With ThisWorkbook
.UpdateRemoteReferences = True
End With
End Sub

Unfortunately the value of this option does not seem to be saved in embedded Excel worksheet
objects. This means that the macro above should be used in worksheets that are embedded into
ExtendSim models if they use DDE link connections to share data with ExtendSim.

Internal data storage and management methods


This portion of the chapter provides information about ExtendSim internal data structures. Other
parts of this chapter discuss methods (such as dynamic data linking or ExtendSim blocks) for
exchanging data with the internal data structures. For information about using ModL programming to interface with internal data structures, see the Developer Reference.
As discussed in the following sections, ExtendSim provides several internal structures for storing
data for use in a model. See:
ExtendSim databases that start on this page
Global arrays starting on page 743

How To

Dynamic arrays on page 745


Embedding an object that starts on page 746
Linked lists as discussed on page 748
Access to internal data sources is accomplished through a user interface feature called dynamic data
linking (DDL), by the use of data access blocks, or by programming in ModL. Databases and
global arrays are accessible by the modeler and by block developers; dynamic arrays and linked lists
are only accessible by block developers coding in ModL.

ExtendSim databases for internal data storage


A database is a centralized repository for data. The ExtendSim graphical simulation database
(GSDB) feature allows you to create internal relational databases for storing, managing, and
reporting model data. ExtendSim databases also provide a convenient interface between models
and external applications, such as spreadsheets and external databases.

Data Management and Exchange


ExtendSim databases for internal data storage

727

Each model can have multiple databases associated with it and each database can contain multiple
tables of data. Each table has fields that represent columns of data, records that represent rows, and
cells that are the intersection of a field and a record.
Following the standard convention for databases, ExtendSim databases are organized by field and
record (similar to being organized by column and row.) However, data tables, arrays, and external
spreadsheets are organized by row and column. This is important to remember if you transfer data
between ExtendSim databases and other data structures such as global arrays.
ExtendSim databases are stored with the model. They automatically open when the model opens
and are automatically saved or closed when the model is saved or closed.
Using ExtendSims data access blocks or the dynamic data linking interface you can link model
parameters to a database without writing any code. In this manner, parameter-based models can be
easily changed to database-driven models.

How this section is organized


Because the ExtendSim database feature is such an extensive system, this section of the manual is
divided into several topics:
Advantages of using an internal database.
Ways to create an ExtendSim database and methods for exchanging data with it.
How to create an ExtendSim database.
Establishing a parent/child relationship between two database table fields.
Managing databases, tables, and fields.
Database dialogs and popup menus.
Using an Excel Add-In for ExtendSim databases.
For additional information, also see these sections of the chapter:
Dynamic linking to internal data structures on page 717.
Blocks for data management and exchange on page 750.

Advantages of using internal databases


There are many advantages to using an internal database. For instance, you can:
Organize information in a logical fashion, either within one database or across several databases.
Create, view and manipulate data by product type, location, components, or any other common
characteristic.
Provide a centralized location for information that is used in several parts of a model.
Get easier access to different sets of data depending on model needs.
Use database tables to provide outputs and reports throughout the model.
Reuse common sets of data from one model to the next.
Import model inputs from, or export results to, external applications.
While using a database to manage data is indispensable for large models, the user interface makes it
convenient to use an ExtendSim database even for small models.

How To

Separate the data from the model for better project and experiment management.

728

Data Management and Exchange


ExtendSim databases for internal data storage

Creating and interacting with internal databases


There are three ways you can create an ExtendSim database:
1) Through the user interface, using menu commands to create a new database, as illustrated
starting on page 728, or by importing a database text file from an ExtendSim or SDI database.
2) Use database functions in an equation-based block from the Value or Item library. These
blocks are discussed in Equation-based blocks on page 677.
3) Program with ModL code. For more information, see the Developer Reference.
ExtendSim provides the following methods for models to interact with databases;
1) Through the user interface, using dynamic data linking to establish live links between dialog
items and databases. This is demonstrated in Dynamic linking to internal data structures on
page 717.
2) Using Read and Write blocks (Value library) or Read(I) and Write(I) blocks (Item library) to
exchange data between a model and a database. This is illustrated in Read and Write blocks
for accessing a database on page 734.
3) Using database functions in an equation-based block from the Value or Item library to manage
data. These blocks are discussed in Equation-based blocks on page 677.
4) Programming using ModL code. See the Developer Reference for more information.

How to create an ExtendSim database


The following example shows how to use menu commands to create a database for the Reservoir
model that was shown in the Tutorial module. While a database is obviously unnecessary for the
Reservoir model, the purpose of the example is to show how to create an internal database.
As illustrated in the example that follows, the steps are:
1) Open a new or existing model
2) Create a new database for the model.

How To

3) Add tables and fields to the database.


4) Add database records.
5) If the database will be used to input values to the model: enter, paste, or import values for the
database cells.
Opening an existing model
Open the model Reservoir 1 from the \Examples\Tutorials folder.

So that you dont overwrite the original file, save the model as ReservoirDB.

Data Management and Exchange


ExtendSim databases for internal data storage

729

Starting a new database


With the model window active, choose the command Database >
New Database.
The Create Database dialog opens with a field for naming the database. (Note that an existing database is already listed in the scrollable
field at the top of the dialog. That Example Database is used for
illustrating features in other sections of this chapter.)

ExtendSim assigns each database a unique index number, starting with


1. As seen for the Example Database, that number is appended to the
database name and enclosed in brackets. Index numbers are used for
referring to databases in equations or ModL code.

Name the new database My Database.

Create Database dialog

The name can be anything you want as long as it does not start with
an underscore (_), is not used by another database, and does not exceed 63 characters. Database
names are not case sensitive; they can contain spaces.
The underscore character as the first character of a database name designates that database as a
Reserved database. Reserved databases are used by developers and are hidden from the user. See the
Developer Reference to find more information about Reserved databases.

Click Save to close the dialog and save the new database.
The database window opens in structure mode, as
shown at right. The
header for the window displays the
name of the database and its associated model. The
structure window is Database window
where you create
database tables, add fields to the tables, and create relationships between fields.

How To

Adding tables and fields

With the database window active, create a new table using one of these methods:
Give the command Database > New Table.
Or, right click on the database window.
Or, click the New Table button in the databases toolbar.
In the dialog that opens, name the table My Table and click Save.

730

Data Management and Exchange


ExtendSim databases for internal data storage

The new table is


placed in the All
Tables tab. The name
of the table is listed
in the table list pane
at the left of the tab
and the database
structure is shown in
the tables pane on
Adding new database table
the right of the tab.
As is true for databases, after its name each table is assigned an index number enclosed in brackets.

Create a new field using one of the following methods:


Select the table named My Table and give the command Database > Append New Field.
Or, right click the table and choose Append New Field.
Or, select the table and click the Append New Field button in the databases toolbar.
In the Field Properties dialog
(shown at right):

Name the field My Field.


Choose the default choices:
Field type: Number, General
Format and Decimals: 2.

Click Save Field.


Creating records
To access the table so you can create
records, do one of the following:

Double-click the table in the


database window to open the
viewer for that table.

How To

Or, double-click the table name


in a tabs list of tables to open
the viewer.

Or, select the table and change


the popup menu in the database windows upper left corner
from Structure mode to Viewer
mode. This opens a viewer pane
for that table within the database window.

Field Properties dialog

Click the Append New Records tool


in the database toolbar, or give the
command Database > Append New Records.

Data Management and Exchange


ExtendSim databases for internal data storage

731

In the dialog that opens, enter 2 for


the number of records and click Add
Records.
Entering values for the cells

In the viewer, enter 10 as record #1


and 20 as record #2.

If the table viewer window is open,


close it.

Close the database window and Save


the model. Databases are saved with
the model when the model is saved.
Table Viewer showing two records
Notice that My Database is listed at
the bottom of the Database menu. If
the Navigator is opened to Database List mode, the database will also be listed there. Making a
copy of the ReservoirDB model causes the copy to also have a database named My Database.

Establishing Parent/Child relationships


To illustrate another powerful database feature, the following example adds a new table to the database created in the previous section and makes the tables field the parent for the field in the original table. This will establish a parent/child relationship, causing My Table to get its values from the
new table.
Establishing a parent/child relationship between fields is optional but powerful. It is useful for
many situations, such as providing a components list for a specific product, a selection of custom
colors for a particular model of car, or the properties of a material. Having a parent/child relationship limits a fields set of data to what is present in the parent. Instead of entering data directly into
the child field, you select the data from a popup data selector that shows all the possible values
from the parent field.
Parent fields have a red background and tables that have parent fields are listed in the database windows tabs in red; child fields have green backgrounds and tables that have child fields are listed in
green.

Open the ReservoirDB model you created earlier.


Open the window for My Database by selecting My Database at the bottom of the Database
menu. Or use one of the methods discussed in Opening a database window on page 735.

Create a new table and name it Parent.


Select the Parent table and:
Append a new field and name it Contents.
Leave the other settings in the Field Properties dialog at their default settings and click Save
Field.

Double-click the Parent table to open the viewer window.

How To

How to create a parent/child relationship


The following example builds on the ReservoirDB model created in the example How to create
an ExtendSim database on page 728. It assumes you know how to add tables, fields, and records
to a database.

732

Data Management and Exchange


ExtendSim databases for internal data storage

Add 4 records to the Parent table.


Enter the values 5, 8, 10, and 15, one value for each record.
Close the viewer window so that the database window is active.
Notice that each field in a table has connector points on its left and right sides. These are used for
establishing parent/child relationships.

Draw a line from a connector point for My Field to a connector point for Contents.

Draw the line so the arrow points to the parent, the source of the data.

Since the child field has existing data, the Parent/Child Relationship dialog opens with options
for how the data in the child field should be handled.

In the Parent/Child Relationship dialog, select the default (top) choice and click Set Relationship. (The dialog is discussed later in this section.)
This establishes the Contents field as a parent to
the field named My Field. Parent fields have a
red background and are listed in red; child fields
have green backgrounds and are listed in green.

Switch the database window to Viewer mode

Parent Child relation between fields

so you can select values for the records in My


Field.

Select My Table in the table list pane at the left of the All Tables tab.
Click the arrow in record #1.
In the popup selector that appears, select the value 15.

How To

The child cell for field 1, record 1 is now set to 15; it gets that value from the parent field. If the
parent value changes, the child value will change (but not vice versa.)
The Child popup selector
In Viewer mode, when you click the
down arrow in a child cell it displays a
popup menu with 3 types of options.
The choices are to select a value
(whichever number is listed), add a
new value, or choose no value yet.
Choosing new value allows you to
place a new value in the cell; the value
is appended to the parent field. The
no value yet option leaves the cell
blank.
Child popup selector

Data Management and Exchange


ExtendSim databases for internal data storage

733

The Relationship dialog


If there is existing data in a child
field, this dialog opens and allows
you to arbitrate what happens when
the relationship is made. If there is
no existing data, the dialog does not
open. The options are:
Link and match existing data in
Child field to a record in the Parent field. If existing data in the
child matches data in the parent,
the data is left unchanged. Otherwise, it is cleared and the record is
left blank so the value can be
manually selected.

Parent Child relationship dialog

Clear all current Child data. This


option clears all the existing data in the child.

Linking a database to data


Databases are used to store data for use in the model or to store model outputs. A model can access
a databases information by dynamically linking to it, by using data access and equation-based
blocks, and through ModL programming.
The following section discusses how to dynamically link a dialog item to a database. Using Read
and Write blocks to access database data is described below.
Dynamic data linking
The steps for dynamically linking a blocks dialog item to an ExtendSim database table are:
1) Create an ExtendSim database (see ExtendSim databases for internal data storage on
page 726.)
2) Link a parameter or data table, as illustrated in Dynamic linking to internal data structures
on page 717.

How To

734

Data Management and Exchange


ExtendSim databases for internal data storage

3) In the Link dialog, select Link To: Database


Table.
4) Choose a database from the popup menu of available databases.
5) Select a table from the list of Table Names.
6) For parameters only, choose a field from the Field
Name popup, then enter a number in the Record
# field. Or, select the field and record by clicking
on a cell in the table viewer at the bottom of the
Link dialog.

The table viewer displays the contents of the database


table you are linking to. It is also useful for selecting
the database field and record for a parameter.

Dynamic linking should be used judiciously. Avoid


overloading models with dynamic links to data sources
that get frequently updated; it could slow simulation
performance as messages are sent to linked blocks
every time their linked data source is modified.

Link dialog for Database Table

Read and Write blocks for accessing a database


Instead of dynamically linking a dialogs parameter or data table to a database cell or table, the
Read and Write blocks (Value library) and Read(I) and Write(I) blocks (Item library) can access a
database cell, row, or column for use in a model. These data access blocks are useful when you
dont want to, cant, or shouldnt dynamically link a dialog item. The advantages of using these
blocks rather than dynamic linking is:
Using data access blocks gives more control over which database values get used, and where and
when they are used.

How To

Database usage is clarified visually. For example, instead of a blue outline around a parameter
field inside a blocks dialog, it is more obvious when the database value is coming from a Read
block.
Dynamic linking is fixed point-to-point. While you can change the value at the data source, you
cant dynamically control which database or table is accessed during a simulation run or in a
series of runs.
In some blocks there is no dialog parameter or data table you can directly link to,
It is easier to perform mathematical calculations on the database values.
The data can be more easily accessed at several places in the model.
It is more convenient for hierarchical blocks, allowing access to a different record for each
instance of the hierarchical block in a model.
The Monte Carlo model, located at \Examples\Continuous\Standard Block Models and described
on page 47 is an example of using Read and Write blocks to exchange data with an ExtendSim
database. For more information about these blocks, see Read and Write blocks on page 751.

Data Management and Exchange


ExtendSim databases for internal data storage

735

Database management
This section provides additional information about using and managing ExtendSim databases,
database tables, fields, records, and data.
Opening a database window
To open a databases window so that you can change its structure or data, do one of the following:

Select the database from the databases listed at the bottom of the Database menu.
Or, open the Navigator, select its Database List mode, and double-click the name of the database in the list.

Or, select Window > Database List to open the Navigator in Database List mode, then doubleclick the name of the database in the list.
Opening a database list
To access the Database List, give the command Window > Database
List. The database list is used to open a database or when copying,
renaming, or deleting a database.
Copying, renaming, or deleting a database
To copy or duplicate a database, select it in the database list and give
the command Edit > Copy (or Duplicate) Database. Give the Paste
command in the database list or on the model worksheet; you can
paste into the current model or a different model. Pasting or duplicatDatabase list
ing places a copy of the database in the database list with a different
index number and a modified name (if the database is copied into the
same models Database List) or with the same name (if the database is copied into a different
model).

Giving the Paste command on the model worksheet places a copied ExtendSim database in the

Database List and makes it available to the model. It does not put a visual representation of the
database on the worksheet.
To move a database from one model to another, select the database in the Database List and use
the Edit > Cut Databases command, then paste the database into the other model.

Importing or exporting a database


The command Database > Import New Database creates a new ExtendSim database by importing
an entire database from an exported ExtendSim or SDI Industry database. In the dialog, select the
database text file to import. This command imports all the tables, fields, records and so forth from
the exported file and creates a new database. If you choose the name of an existing database, it will
be replaced. To import tables to an existing database, such that the database tables are appended at
the end of the database, see the Import Tables command. See also Excel Add-In for ExtendSim
databases on page 740.

How To

To rename a database, select it in the Database List and give the command Database > Rename
Database. To delete a database, select it in the Database List and give the command Edit > Clear
Database.

736

Data Management and Exchange


ExtendSim databases for internal data storage

Overwriting an existing database


When one database is imported into a
database with the same name, buttons
allow you to choose how the import
should be handled. If the original
database had more tables than the
imported one, a new button (Overwrite and Delete), removes the extra
tables.
The command Database > Export
Database is only active when an
ExtendSim database window is active.
This command exports the entire
ExtendSim database into a text file.
You do this so you can import the
Overwriting an existing database
database into another model, send the
database to another user, or to prepare
a database text file for use by the ExtendSim DB Add-In for Excel (discussed on page 740). To
export only specific tables from a database, see the Export Selected Tables command, discussed
below. To enable this command, bring a database window to the front, as described under Database menu, above.

How To

Exported databases can only be imported to ExtendSim or to the ExtendSim DB Add-In for Excel.
Managing database tables and using tabs
Tabs are useful for organizing tables by category.
The All Tables tab will always contain a list of
all of a databases tables in its table list pane. You
can also list some of those tables in other tabs.
The database window must be in structure
mode to add a tab. To create the tab, either double-click the blank area of the tab bar (that is, to
the right of the All Tables tab) or give the command Database > New Database Tab. Clone a
table to the new tab by selecting the table in the
tables pane and giving the command Database >
Clone Selected Tables to Tab. In the dialog that
appears, select a tab to clone the table to.

Database window showing new tab with cloned table

Import and append tables into the current database by giving the command Database > Import Tables when a databases window is open. This
imports a database text file of tables from an ExtendSim or SDI Industry database.
Export selected tables by using the Database > Export Selected Tables command. The tables can be
exported as text files from one ExtendSim database to a different ExtendSim database.
To show/hide tables in the tables pane, unselect the table in the list of tables in any tab in the database window.

Use the Hide All Tables

and Show All Tables


hide and show all tables with one click.

tools in the Database Window toolbar to

Data Management and Exchange


ExtendSim databases for internal data storage

737

To copy a table from one database to another, select the table in the database window, give the
command Edit > Copy Tables, and paste the table into the same or a different databases window.
To move tables from one database to another, use the Edit > Cut Tables command instead of the
Copy Tables command.
Managing fields
Fields are formatted using the Field Properties and Field Type dialogs, discussed in Database dialogs and popup menus on page 737.
To reorder fields in a table, with the database window in Structure mode, click and drag the fields.
To edit a fields properties, with the database window in Structure mode, double-click that field.
To resize a fields column width, put the database window in Viewer mode. Then hover the cursor
over the column divider until it turns into a resize cursor, then click and drag to resize.
Use the Sort Table tool in the Viewer toolbar to sort a tables records by up to three fields; each
field can be sorted in either ascending or descending order. For example, use this to sort a tables
records first by last name, then by first name, and then by city.

To create a field with mixed formats (for instance, with both strings and numbers), set the field as a
string type in the Field Properties dialog. Enter numbers or strings into the cells.
Editing data
To access data for editing, in the database window do one of the following:

Double-click a table in the database


window to open its Viewer window.

Or, select the table in the tables pane


and change the database windows mode
from Structure to Viewer.
The records and fields for the selected table
will be displayed.
By default, all cells are constant. To make a
cell random, select the cell and choose the
Make Cell Random tool in the Viewer
toolbar.

Database dialogs and popup menus


Most of the database dialogs are self-explanatory. The following are more unusual or complex and
require some explanation.

How To

Database table viewer window

Finding data
To find a string or number within a database, with the database structure window open, give the command Edit > Find. This command
opens the Find dialog. To only search a single table, select the table before giving the Edit > Find
command.

738

Data Management and Exchange


ExtendSim databases for internal data storage

The Table Properties dialog


ExtendSim database tables have a Table Properties
dialog that allows you to:
Edit the tables name. This works the same as
the command Database > Rename Table.
Delete all the records. If selected, the initialization is done at the beginning of each run or
at the beginning of a multi-run simulation.
Enter a Tooltip. This is the same as entering
text in the field at the right side of the Database windows header. The text will be displayed in the Table Viewer or when a cursor is hovered over the table.
The Table Properties dialog can be accessed through the new menu command Database > Edit
Table Properties or by right-clicking a database table and selecting Edit Table Properties.

How To

The Field Properties dialog


When you add a field to a database table, the Field Properties dialog presents formatting and other
options for the field, as described in the following table. You can open the Field Properties dialog
for an existing field by using the Database menu command or double-clicking a field in the database table.
Option

Description

Field name

Enter any unique name, up to 63 characters. Spaces and special characters


are allowed.

Field type

Format for the field. See the following table.

Decimals

For general format or scientific numbers, the number of digits to display.


For currency and percent, the number of digits to the right of the decimal
point.

Use separators

Inserts commas and periods to separate digits.

Record ID field

The field used as an index when searching for a record in this table.

Each value unique

When checked, the number or string for each record in this field must be
unique.

Read only

When checked, prevents the data from being changed after it has been
entered.

Initialize every record in If checked, initializes the data for all the records in the selected field to the
this field to:
entered parameter value. If the parameter is left blank, initializes the fields
records to a blank.
First run...Every run

Specifies when the record initialization takes place.

Data Management and Exchange


ExtendSim databases for internal data storage

739

Field type popup menu


The following table describes the options for the Field type popup menu in the Field Properties
dialog.
Field type

Description

Number

An integer or double-precision floating point number. Choose general, scientific, percent, currency or integer.

String

An alphanumeric string up to 255 characters

Date/Time

Calendar date and time

Data address

Describes the coordinates of a cell in a database table

Boolean checkbox

Places a checkbox to indicate yes or no, true or false, on or off, etc.

List of tables

Provides a popup menu of all the tables in the database, so you can select a
table.

Save and Next Field button


This button, located in the Field Properties dialog, allows you
to start a new field immediately after you save the properties of
the field you have been working on. This is faster than saving a
field and returning to the Database window to append a new field.
Database Random Distribution dialog
By default all database cells are constant, but they can be formatted as
random numbers. To make one or
more cells random, select the cells in
the Viewer and choose the Make Cell
Random tool in the toolbar. Or rightclick the cell and choose Make Random. This opens the Database Random Distribution dialog, shown at
right.

A special feature of this dialog is that

you can assign a name to a distribution in a database, allowing the distri- Database Random Distribution dialog
bution to be selected by custom name
in that database. For example, enter typical values for an empirical table and name it Machine
Time Distribution. Or give a custom name to an exponential distribution with specific arguments.

How To

The random distributions in this dialog are the same as for the Random
Number block (Value library). For a
complete list and short description, see
Choosing a distribution on
page 686.

740

Data Management and Exchange


ExtendSim databases for internal data storage

Excel Add-In for ExtendSim databases


The ExtendSim DB Add-In allows an exported ExtendSim database text file to be imported into Excel. The data
and structure of an ExtendSim database can thus be edited
in Excel, outside of the ExtendSim application. After editing, the database can be exported from Excel as an ExtendSim database text file and imported into ExtendSim.

The DB Add-In for Excel is included only in ExtendSim


AT and ExtendSim Suite; it can also be purchased separately.

At the time of this printing, the DB Add-In only works on


Windows and requires Office 2007 or better.
To install the add-in into Excel:

Follow Excels instructions for installing an Add-In.


These will differ depending on the version of Excel and
the platform youre installing on.

In the Add-Ins dialog, click the Browse button and nav-

Excel Add-Ins dialog

igate to the ExtendSim DB Add-In.xla file; it is located


in the ExtendSim\Extensions folder.

Select the ExtendSim DB Add-In.xla file and click OK. This returns you to the Excel Add-Ins
dialog and puts ExtendSim DB Add-In in the list of available Add-Ins. (Make sure the checkbox
next to ExtendSim DB Add-In is checked.)

Click OK to close the Excel Add-Ins dialog. This action installs a new Add-In menu command
called ExtendSim DB.
To export an ExtendSim database file from ExtendSim so that Excel can import it, see Importing
or exporting a database on page 735. The exported file will be in text file format.

How To

To import the exported ExtendSim database file into Excel, give the command ExtendSim DB >
Import Database in Excel. After importing the file, you can modify data in the tables, change the
number of records (rows) or fields (columns), change the field types, modify named and empirical
distributions. Although it is done infrequently and is much easier to do in ExtendSim, you can
even add or change relationships in the database.

Data Management and Exchange


ExtendSim databases for internal data storage

741

To modify field characteristics, click the Ungroup (+) button at


the left of a table. This expands the field properties so you can
change them as desired.
To add rows or columns to a table that already has one or more
rows and columns, copy an existing row or column in the table
and paste rows at the bottom of the table or paste columns at the
right side of the table. This will enlarge the table. Then enter any
needed data into the new rows or columns. If the table doesnt
have any rows, enter row numbers below the Field identifier. The
screenshot to the right has two rows (numbered 1 and 2) below
the Field identifier.
To change relationships, enter the correct table and field names
into the Indexed Fields table at the bottom of the All Tables tab.

When changing the number of rows in empirical distributions, be


sure to also change the value for the Number of Empirical Rows.
When you are finished making changes, export the database file
using the Excel command ExtendSim DB > Export Database.

You cannot export a database from a workbook until the database

Grouped and ungrouped tables

structure and content have been successfully validated, below.

Then import that file into ExtendSim using the command Databases > Import New Database as
discussed in Importing or exporting a database on page 735.
Check Database Consistency
One of the DB Add-In menu options is Check Database Consistency. This command performs
validations of the database and its parent/child relations. This ensures that the database structure
and data content are internally consistent and valid.
If errors are found they are recorded in an Errors Summary worksheet and a message is displayed at
the completion of the check. The Errors Summary worksheet has hyperlinks to the errors so you
can fix them.
The four validations
The Check Database Consistency command performs the following checks.
For each child field, the contents are checked to ensure that corresponding values exist in the
parent fields of the parent tables. Each instance of a child field value without a corresponding
parent field value is recorded in the Errors Summary worksheet.
2) Parent/child relations
The user-defined parent/child relations in the Indexed Fields table are validated. This check
ensures that each child and parent table and each parent and child field referenced in the
Indexed Fields table actually exists in the database workbook.
3) Table and field name uniqueness
This ensures that each table name in the workbook is unique and each field name is unique
for the given table. Each instance of a non-unique table and field name is recorded in the
Errors Summary worksheet.

How To

1) Parent/child data content

742

Data Management and Exchange


ExtendSim databases for internal data storage

The DB Add-In only operates on one database at a time. It is therefore possible that other databases could have a table with the same name as a table in the workbooks database.
4) Each value unique
This looks at the record contents for each field that has Each value unique checked in its Field
Properties dialog. The validation ensures that all values in the corresponding tables are
unique. Non-unique values are reported in the Errors Summary worksheet.
Exporting the file
The DB Add-In will not allow you to export a database from a workbook until the database structure and content have been successfully validated.
Find Database Table
This command allows users to quickly find and go
to a database table in their workbook. Selecting
the command opens the Find Database Table
form which displays a list of all the tables in the
selected worksheet.

Each worksheet is equivalent to one of the tabs in


the imported database.

To select one of the database tabs, click the Worksheet popup list, which displays all of the tables on
the selected worksheet. To view a list of all tables
in the database, select the <All worksheets>
option.
When you select a table name in the list of tables, the active cell of the workbook will be set to the
location where the database table is defined.

How To

Parent/child fields
Parent and child fields are color-coded in the workbook. This matches the parent/child color
coding in ExtendSim red for parent fields and green for child fields.
When the database is imported and/or database consistency is checked, child field names are
hyperlinked to their parent fields. For example, clicking on a child fields green header takes you
to the linked field in the parent table. This allows users to quickly find parent tables and view
the list of valid child values.
Status bar
During importing, the Status bar at the bottom of the workbook reports the current table as well
as the number of the record being imported and the total number of records that will be imported.
Validation and performance while importing
The imported database is checked for unique fields. If some fields are not marked as unique, and
there are parent/child relationships, the DB Add-In displays a warning message during import.
When the file is exported back to ExtendSim, the Add-In will resolve any parent/child conflicts
by linking the child to the first appropriate parent field it locates.
The VBA code that manages the DB Add-In has been rewritten for faster performance when
importing files.

Data Management and Exchange


Other internal data storage and management methods

743

Monte Carlo model


The Monte Carlo model (located in the folder \Examples\Continuous\Standard Block Models)
uses an ExtendSim database named Scenarios to store the inputs and results of the model. Using
a database allows the model to experiment with different scenarios. Rather than dynamically linking model parameters and data tables to a database, the model uses Read and Write blocks (Value
library) to provide the interface to the database. The Read blocks get random values from a database and use them to represent model parameters where the actual values are not known with certainty.

Other internal data storage and management methods


While ExtendSim databases will probably be your primary method of storing and managing data,
ExtendSim provides several other methods. These are:
Global arrays discussed starting on this page
Dynamic arrays on page 745
Embedded objects starting on page 746
Linked lists discussed on page 748

Global arrays
A global array is a two-dimensional (row and column) array of data that is accessible by any block
in a model. Like ExtendSim databases, global arrays are user-accessible structures for internally
storing and managing data. Use global arrays to share information between blocks when a direct
connection is either inconvenient or impossible, to store information that can be accessed by a row
and column index, or to exchange data with external sources.
Global arrays provide many of the same modeling advantages that ExtendSim databases do; see
Advantages of using internal databases on page 727, but they differ from databases in some
important aspects. Compared to databases, global arrays have a simpler data structure and take less
time to access data. However, global arrays arent as flexible as databases, which allow mixed data
types, randomness, and parent/child relationships. It is also easier to add or remove fields in a database than columns in a global array, and creating a global array requires adding a block to the
model.

Unless you are using custom blocks that create global arrays, a Data Source Create block must be in
the model to initially create the global array. Since the global array is saved with the model, the
block can be removed after the array has been created.

You just want a simple array structure of a single data type. For instance, to create an integer
array with 10 columns and 20 rows of data for use in a model.
You program blocks that can use a more simple data structure than a database requires, and you
dont need or want the data storage to be visible to the block user.
Creating a global array
There are three ways to create a global array:
1) Use the Data Source Create block (Value library) as illustrated later in this chapter.

How To

While it is common to use a database for managing and exchanging data, global arrays are handy
in situations where:

744

Data Management and Exchange


Other internal data storage and management methods

2) Through global array functions in an equation-based block from the Value or Item library.
These blocks are discussed in Equation-based blocks on page 677.
3) Programing with ModL code. For more information, see the Developer Reference.
You can name a global array anything you want as long as the name is fewer than 32 characters and
it does not begin with the underscore character (_). Global array names are not case sensitive;
spaces between characters are allowed.
A global array can only be of one data type - either integer or real (if the data type is selected
through the user interface), or integer, real, or string (if the data type is selected through ModL
code.) Each model can have one or more global arrays associated with it and each global array can
have multiple rows and columns. Global arrays are stored and saved with the model, even if the
Data Source Create block that created the array is deleted.
Following the standard conventions, ExtendSim databases are organized by field and record (similar to being organized by column and row.) However, arrays are organized by row and column.
This is important to consider when transferring data between databases and global arrays.
How to create and use a global array
The example that follows uses the Data Source Create block to create a global array for the Reservoir 1 model. As illustrated below, the steps are:
1) Place a Data Source Create block in a model.
2) Build the global array in the Data Source Create block.
3) Populate the array with data.
4) Determine how the model exchanges data with the array.
Using an example model

Open the model Reservoir 1 from the \Examples\Tutorials folder.


So that you dont overwrite the original file, give the command File > Save Model As and save
the model as ReservoirGA.

How To

Place a Data Source Create block (Value


library) at any convenient location on
the model worksheet.
Creating the global array

In the dialog of the Data Source Create


block:

Choose Type: Global array.


In the Create a new array frame,
click the Integer Array button, indicating that you want the values to be
integer.

ReservoirGA model

In the three dialogs that appear, name the array My Array, give it 12 rows, and give it 2
columns. Click OK after each dialog entry.

Data Management and Exchange


Other internal data storage and management methods

745

Notice that Viewer for the selected


array in the Data Source Create block
now displays 12 rows and 2 columns.
The tables upper left corner is light
blue, indicating that it is a data source,
and it has the initials GA, indicating
that the data source is a global array.
Populating the array with data
Global arrays can be used as inputs to a
model or to store model results.

A common method of populating an


array with data for use in a model is to
enter values or copy data directly into
the Data Source Create blocks Viewer
table when the array is created. You
can also use the Data Import Export
block (Value library) to import data to
the array from a spreadsheet or external database, the web, or a text file.
To store model results, it is most com- Data Source Create after creating myArray
mon to use a Write block (Value
library) to send data to a global array.
The Data Init block (Value library) can be used to initialize a global array table, column, row, or
cell; it is described on page 759. The Data Specs block (Value library) gathers information about
the global array and puts it into a report; it is discussed in page 759.
Exchanging data with a global array
ExtendSim provides the following methods for models to interact with global arrays:
1) Through the user interface, using dynamic linking to establish live links between dialog items
and global arrays. See the examples How to link a parameter to a global array on page 719 or
How to link a data table to a global array on page 721.

3) Using global array functions in an equation-based block from the Value or Item library to
manage data. These blocks are discussed in Equation-based blocks on page 677.
4) Programming using ModL code. See the Developer Reference for more information.

Dynamic arrays
A dynamic array is multi-dimensional internal data structure that is only accessible through programming. A model user can resize a data table that is linked to a dynamic array and can link the
data in the table to an ExtendSim database or global array. However, the dynamic array itself cannot be accessed outside of ModL code.
A data table linked to an internal data source will have its upper left corner in light blue rather
than the grey of the table header. If the source is a database (DB) or global array (GA), those ini-

How To

2) With data access blocks, such as the Read and Write blocks (Value library), to exchange data
between a model and a global array. Data access blocks are discussed on page 750.

746

Data Management and Exchange


Other internal data storage and management methods

tials will be displayed in the corner. If the source is a dynamic array, the upper left corner will not
have any initials.
Since dynamic arrays are created and managed through ModL code, see the Developer Reference
for more information.

Embedding an object (Windows only)


Embedded objects allow applications to have new behaviors and functionality without needing to
custom program the behavior. An embedded object is an external software component created
with one application and embedded into a document created by another application. The component could be an embeddable part of an existing application (such as a Worksheet object from
Excel), or a component specifically created for embedding (such as a Graphics Server ActiveX control). Embedding the object ensures that the object retains its original format and that it can be
modified with the original program. The underlying technology for embedded objects is OLE (see
ActiveX/COM/OLE (Windows only) on page 763.
ExtendSims support of this functionality allows model authors and block developers to incorporate objects and ActiveX controls that can do things that might otherwise be difficult or impossible
in ExtendSim.

For purposes of this manual, the word objects will mean both component objects and ActiveX
controls.

As illustrated below, an object can be embedded into:


A model worksheet
A blocks dialog (if you program the block in ModL)
When an object is embedded into a model worksheet, ExtendSim creates a container object, a
worksheet object similar to a block or a hierarchical block. Each container object has a block number so that ExtendSim functions can reference it. A container object can be selected, moved around
the screen, and deleted in the same manner as a block.

If clicking a container object causes any response other than selection, you need to select the command Edit > Design Mode to move it, as discussed on page 791.

How To

Double-clicking an embedded object activates features of the originating program. For instance,
double-clicking an embedded Excel Chart provides access to Excel tools for selecting a chart type
and configuring its display.
A typical use of embedded objects would be to insert an Excel worksheet into an ExtendSim
model, then use DDE Linking (discussed on page 724) or the Value librarys Read and Write
blocks (discussed on page 751) to exchange data between the model and the embedded object.
This gives ExtendSim the added capabilities of Excel, without opening the Excel application.
How to embed an object into a worksheet
The example that follows embeds an Excel worksheet into an existing model and uses the Write
block to send results to the worksheet.

Open the Reservoir 1 model located in the folder \Examples\Tutorials.


So that you dont overwrite the original file, save the model as ReservoirEmbed.
Select Edit > Insert Object. The Insert Object dialog appears. It lists the embeddable objects
that are available on your machine. The dialog is shown on page 748.

Data Management and Exchange


Other internal data storage and management methods

747

In the dialog, select the button Create New (the default choice) and choose Object Type:
Microsoft Office Excel Worksheet. Then click OK to close the dialog and place the embedded
object in the model.
If the Excel worksheet object is in an inconvenient location, click elsewhere on the model window to deselect it, then click back on the worksheet to select and move it.

Delete the Plotter I/O block on the right side of the model.
Add a Write block (Value library) to the model where the Plotter block was. Then open its dialog:

In the Select destination type frame, choose Send data to: Excel workbook, check Use
embedded workbook, and select Embedded workbook list: Worksheet in ReservoirEmbed.

In the Specify Excel coordinates frame, select Sheet: Sheet 1, Write: one row, and Col
end: 4.

Leave the other settings at their defaults and close the Write blocks dialog.
To the left of the Write block, add a Simulation Variable block (Value library) to the model.
In its dialog, select Current time.
Connect the output of the Simulation Variable block to the top input of the Write block.
In the finished model, this block will output current simulation time to the Excel worksheet.

Draw a connection line from the remaining inputs of the Write block to the Contents, Rainfall,
and Stream named connections. (Be sure to make a complete connection; if a line segment is
dotted, it is not connected.)

Add a second Simulation Variable block (Value library) to the model. In its dialog, select Current step and specify that it adds 1 to the result.
Adding 1 is necessary because ExtendSim is zero-based and Excel is one-based, as discussed in
The mailslots feature allows communication between two ExtendSim applications running on
different computers on the same local area network (LAN). Since mail slots involve programming, they are described in the Developer Reference. on page 767.

Extend the variable connector at the bottom of the Write block so that the R (row) input is disThis causes the Write block to write the data to a new row at each step.

Run the model.


The Excel worksheet should show 4 columns of data. Simulation time is the first column and the
reservoir contents, rainfall amount, and stream contributions are the other three columns.
To access Excels formatting tools, double-click the embedded Excel object. This places Excel commands and tools within the ExtendSim application window. Use these tools and commands to format the objects data, chart the data, and so forth.
How to embed an object into a dialog
Block developers can embed objects into the blocks they create. They do this by selecting the
Embedded Object type of dialog item when creating the block. This places a rectangle in the
dialog editor for embedding an ActiveX control or other kind of object. The embedded object is

How To

played. Then connect the output of the second Simulation Variable block to the R input.

748

Data Management and Exchange


Exchanging data with external applications

referenced in the blocks code via a combination of its dialog item name and container object block
number, using ModL functions as described in the Developer Reference.
The Bar Chart and Gantt Chart blocks (Plotter library) are examples of Graphics Server ActiveX
controls embedded in ExtendSim block dialogs. For more information on ModL programming to
control embedded objects or how to use ExtendSim as an Automation Client or Server, see the
Developer Reference.
The Insert Object dialog
The Insert Object dialog appears when the command Edit > Insert Object is given; it is used for
selecting an object for embedding. A scrollable lists
displays the insertable objects that are available for
your machine.
If Create New is selected in the dialog, ExtendSim
will create a new object of the indicated type with no
data associated with itbasically an empty document of the specified type. Selecting Create from
File creates an embedded object with the data from Insert Object dialog
that file as the starting point. If the Display As
Icon box is checked, the new object will only display in ExtendSim as an icon, rather than as the controls interface.
The use of the Insert Object dialog will have different meanings depending on which ExtendSim
window is open. If a model or hierarchical worksheet window is open, issuing this command will
insert a Container Object on the model. If a dialog with an Embedded Object dialog item is open,
it will insert the embedded object into that dialog item.

Linked lists
A linked list is an internal data structure that allows the construction and manipulation of complex
lists of data. It can be accessed only through programming. Linked lists are queue-like structures of
multiple types that maintain internal pointers between different elements. This enhances the sorting for complex structures by speeding the movement of the elements within the list.
ExtendSim implements linked lists:

How To

In the queue blocks (Item library)


Extensively in the Rate library
With the Linked List functions described in the Developer Reference.
Since this involves programming, linked lists are described in the Developer Reference.

Exchanging data with external applications


The means by which two or more applications communicate with each other and share data are
collectively known as interprocess communications (IPC). Some communication methods have
previously been discussed in this chapter. For example, the Clipboard provides convenient data
sharing between applications running on the same operating system. The following section focuses
on more extensive communication methods which allow ExtendSim to directly communicate with
other applications and with ExtendSim models running on other computers, while the simulation
is running. This allows ExtendSim to work on a wide variety of tasks jointly with external applications such as:

Data Management and Exchange


Exchanging data with external applications

749

Spreadsheets
External databases
Other applications, such as word processors and statistics packages
There are several ways you can incorporate IPC into models, including:
With ExtendSim blocks, as discussed starting on page 750.
Using the DDE Link feature (Windows only) described on page 724.
Embedding objects (Windows only) as seen on page 746.
If you program, using the OLE and IPC functions discussed in the Developer Reference.
An application that communicates with another application can be categorized as either client or a
server. A client application requests a service from some other application and a server application
responds to the clients request. Many applications, such as ExtendSim, can act as either a client or
a server depending on the circumstances.

Spreadsheets
You may want to use spreadsheet data as the input for an ExtendSim model. Likewise, you may
want to send output data to a spreadsheet for further analysis or presentation. For instance, if you
have a spreadsheet that performs calculations on large amounts of data, you may want that spreadsheet to respond dynamically as you model real world conditions in ExtendSim.
ExtendSim facilitates communication with spreadsheets by:
The Command, Data Import Export, Read, and Write blocks (Value library). These blocks can
send data to and from spreadsheet applications, send one value to a specified cell in a spreadsheet
and request the recalculated value from another cell, or send commands or a macro to a spreadsheet. See Blocks for data management and exchange on page 750.
DDE Link commands in the Edit menu. For more information, see DDE links (Windows
only) on page 724.
The ExtendSim DB Add-in, which allows an exported ExtendSim database text file to be
imported into Excel. The data can then be stored in Excel, edited and exported to an external
database, or edited and exported back to ExtendSim as a database text file.

OLE and IPC functions to facilitate DDE or ActiveX/COM/OLE communication with spreadsheets. For more information, see the Developer Reference.

External databases
In many situations, the historical data for a a model is stored in an external database. ExtendSim
models can share information with external database applications:
With the Data Import Export block (Value library) to send data to or from ADO-compliant
database applications. This block can import a block of data to, or export a block of data from,
an ExtendSim database or global array. See Data access blocks on page 759.

How To

Import Data and Export Data commands in the File menu to create text files that can be
imported into a spreadsheet or to import a text file that has been exported from a spreadsheet.
For more information, see Importing and exporting data on page 714.

750

Data Management and Exchange


Blocks for data management and exchange

By using Excel as an intermediary application between an ExtendSim database and an external


database. In this case, the data is imported from the external database to Excel, where it is
manipulated. The data is then exported from Excel to ExtendSim as a database text file using the
ExtendSim DB Add-in.
Using ADO functions to initiate an SQL query or perform other functions. For more information, see the Developer Reference.

Blocks for data management and exchange


Several ExtendSim blocks facilitate data storage and management. Some are used to establish and
control dynamic links between ExtendSim and internal or external sources. Others are useful for
importing or exporting data between ExtendSim and external applications.
In general there are several uses for data management and access blocks:
Sharing information between blocks when a direct connection between them is inconvenient.
Storing information which can be accessed by a row and column index.
Accessing existing spreadsheets, either embedded in the model or imported as a file.
Accessing existing databases using ADO or ODBC/SQL.
Accessing internet-based data.

How To

Most of the following blocks allow block-level access to data structures without having to program
with the ModL functions. An additional group of blocks are designed to help block developers,
serving as templates for custom-built data management blocks.

Block

See Page

Library

Read/Write

751

Value

Read(I)/Write(I)

751

Item

Query Equation/QueryEquation(I)

752

Value/Item

Data Source Create

759

Value

Data Import Export

759

Value

Data Init

759

Value

Data Specs

759

Value

Command

759

Value

Object Mapper

759

Utilities

Since Microsoft constantly updates and replaces these protocols, it is best practice to use the
ExtendSim blocks for inter-application communication.

Data Management and Exchange


Blocks for data management and exchange

751

Read and Write blocks


The Read and Write blocks (Value library) and the Read(I) and
Write(I) blocks (Item library) are designed for exchanging
model data with a data structure. These data access blocks make
it easy to get data into or send data out of models.
Both of the Read blocks lookup information found in a specified data source; they can report the information found on their
value output connectors. The Read(I) block can also store the
information as an attribute on items passing through.
Both of the Write blocks send information to a specified data
destination; the information to be sent can come from their
value input connectors. The Write(I) block can also send the
attribute information that has been found on items passing
through.

Top: Read(I) and Write(I) blocks


Middle: Read and Write blocks

The Query Equation and Query Equation(I) can use an equation to search an ExtendSim database
table for the highest ranking record available during the run. See page 752 for more information.

Communicating with data structures


Depending on which library (Value or Item) the Read/Write blocks are from, they communicate
with different types of data structures.
Read and Write blocks (Value library)
As determined by selections in popup menus in their dialogs, the Read and Write blocks in the
Value library exchange data with:

ExtendSim database
Global array
Excel workbook
Text file
Local table (information that is entered the blocks data table)

Read(I) and Write(I) blocks (Item library)


The Read(I) and Write(I) blocks in the Item library exchange data with an ExtendSim database;
data is updated only when an item arrives at the block.
ples\Discrete Event\Routing.

Addressing the data structure


By definition Read and Write blocks are required to be interfaced to some type of data structure.
The pieces of information that are required to fully and properly specify where the information is

How To

For an example of how the Read(I) block is used, see the DB Job Shop model located at Exam-

752

Data Management and Exchange


Blocks for data management and exchange

to be read from or written to (the address) depends on the type of data structure chosen, as
shown in the following table.
ExtendSim Database

Global Array

File name

Microsoft Excel

Text File

Database name

Table, array, or sheet

Field or column

Record or row

For instance, the fully specified address for accessing an Excel file would include the file name,
sheet, column, and row.
Interface methods
Once you have specified a data structure type to communicate with and determined what the fully
qualified address is, the next step is to determine where the data structure address is entered:
In the blocks dialog or through value input connector for the Read and Write blocks (Value
library)
In the blocks dialog, through value input connector, or by using attributes on items that pass
through the Read(I) and Write(I) blocks (Item library)
Triggers
The following table indicates the mechanism that will trigger when the data is sent or received.
Read

Write

Connector message

Beginning of run only

End of run only

Read(I)

Write(I)

Item arrival at block

How To

Query Equation and Query Equation(I) blocks


The Query Equation blocks are used to rank the records in an
ExtendSim database table and intelligently select one record,
based on a ranking rule. A user-defined equation in the blocks
dialog is calculated once for each record in the table; the results
are used to assign a ranking for each record. The record with the
best ranking is the one that gets selected.

Query Equation blocks

The query blocks are used when a database holds information


that is required for making decisions in a model. While the querying and ranking behavior could
be accomplished using the Equation blocks, the equations would be long and complicated. Furthermore, the query blocks provide critical pieces of information that support writing more powerful queries.
There are two query blocks:
Query Equation (Value library of ExtendSim AT and ExtendSim Suite)

Data Management and Exchange


Blocks for data management and exchange

753

Query Equation(I) (Item library of ExtendSim AT and ExtendSim Suite)


The major differences between these two blocks is presented in the table on page 756.
The Query Equation blocks are advanced modeling tools. They only available in the ExtendSim
AT and ExtendSim Suite packages.

How the blocks work


A query cycle is the point in time when a query block executes its equation to pick the next winning record.
In the case of the Query Equation(I), this occurs every time an item passes through.
For the Query Equation block, its Options tab has choices for controlling the initiation of the
query cycle.
Importantly, only the results of the equation for the winning record are used for that particular
query cycle. For example, if the query table has 10 records, the equation will be calculated 10
times, and 10 individual sets of equation results will be collected. However, only the equation
results from the record with the best ranking are used and the results from the other 9 records are
discarded.
The blocks input and output variable types are specifically designed to help modelers write equations that will properly rank the records and select the winning record. So that each record will
have a ranking, the user-defined equation is calculated once for each record.
The records are ranked according to the ranking rule selected in the blocks Options tab; the rules
are listed on page 756. The block's internal data structure keeps track of the ranking and any other
results of the equation for each record.

At least one DBQ record rank output variable is required so that each record can have a ranking.
Spawned items
A feature unique to the Query Equation(I) block is the ability to optionally create additional
items. These spawned items can then be used for special purposes in the model. This is an independent and parallel system to how the items that pass through the block got created.

To use this feature, enable spawning on the Options tab. This causes a new item output connector
to appear on the top edge of the block's icon. It also causes some additional equation variable
types, with the prefix DBQS (for database query spawn), to be available. Those variables are shown
in the table on page 755.

The equation results for pass-through items are calculated independently from those for spawns.
Pass-through results are associated with the pass-through item and spawn results are associated
with the spawned item. For example, results for the pass-through item might get taken from record
6 (because 6 possessed the best pass-through record rank), while the spawn might use results from
record 2 (because 2 possessed the best spawn record rank).
When a spawned item is created, it represents a record from the query table. Consequently, you
can think of this newly created item as a spawned record.

How To

Typically items are created outside of the block and pass through the block. These items are called
pass-through items. In some instances, you might want to create additional action items, called
spawned items, based on equation logic and what has been found in the query table. If a spawn is
created for a particular record, an equation can be defined in such a way that results particular to
the spawned record may be saved as attributes on the spawned item.

754

Data Management and Exchange


Blocks for data management and exchange

Variables
The Query Equation blocks have several types of input and output variables.While the tables that
start on Input variables on page 678 and Output variables on page 680 describe the set of variables shared by all equation-based blocks, the following variables are unique to the query blocks.
To modify the number of rows used in the variable tables:
Change the number of rows in the table by clicking the green +/- resize button in the tables bottom right corner and entering the number of rows desired.
Delete rows by first selecting the rows you wish to delete, clicking the green +/- resize button,
and then selecting the option to "delete selected rows."
Duplicate any rows by first selecting the row you wish to duplicate, clicking the green +/- resize
button, and then selecting the option to "copy selected row."
Input variables

Input Variable

Query Equation

Query Equation(I)

How To

DBQ read value

Requires the user to choose a field in the query table. As


the query block starts to loop through each record, this
variable automatically takes on the value found in that
field for the current record. (This is easier than calling
DBDataGetAsNumber() to reference information residing in the query table for the current record.)

DBQ read PRI

The Parent Record Index value from the specified field


for the current record. See note below.

DBQ start record

The record to start the query cycle. (The default behavior


is to start at record 1.)

DBQ num records

The number of records in the query table.

DBQ current record index

The index of the record currently being evaluated in the


query cycle.

DBQ static query init

A static input variable that gets initialized at the beginning of every query cycle.

DBQ current best rank result

Current best record rank result in the current query cycle.

DBQ current best record

The record index with the best rank at this point in the
current query cycle. If the value of this input is < 1, then
no record has yet to be given a ranking.

DBQ num non-blank ranks

Number of non-blank ranked records at this point in the


current query cycle.

Uses

Query Equation(I)

Input Variable

Query Equation

Data Management and Exchange


Blocks for data management and exchange

755

Uses

DBQS current best rank result

Current best spawn rank result in the current query cycle.


(Only enabled if spawning is enabled.)

DBQS current best record

The record index with the best spawn rank at this point
in the current query cycle. If the value of this input is < 1,
then no record has yet to be given a ranking. (Only
enabled if spawning is enabled.)

DBQS num non-blank ranks

Number of non-blank spawn ranked records at this point


in the current query cycle. (Only enabled if spawning is
enabled.)

The notation PRI (Parent Record Index) is used in blocks that interface with the ExtendSim database. It describes the type of value that is being read or written when dealing with a Child field.

Query Equation(I)

Uses

DBQ record rank

Rank result for the current record

DBQ halt query

A True value halts the current query cycle

DBQ next record

Tells block which record to query next

DBQS record rank

Spawn rank for the current record

DBQS attribute

For assigning attribute values to a spawned item. If the


record's spawn rank is good enough to merit a spawning,
then results from that record can be attached to the
spawned item in the form of DBQS attributes. See
Spawned items on page 753.

DBQS item quantity

Item quantity to be placed on spawned item. Also see


DBQS attribute, above.

DBQS item priority

Item priority to be placed on spawned item. Also see


DBQS attribute, above.

DBQS 3D object ID

3D object ID to be placed on spawned item. Also see


DBQS attribute, above.

How To

Output Variable

Query Equation

Output variables

756

Data Management and Exchange


Blocks for data management and exchange

As mentioned earlier, while you can specify other equation results, at least one of the output variables has to be of the type DBQ record rank. Furthermore:
Only the results for the record ranked best will be output.
You can use more than one DBQ record rank variable; the secondary ranking variable will be
used to arbitrate in the case of tied ranking. This is useful if you are concerned with tie breaking
for two or more records having the same primary. What constitutes a tie can also be defined on
the Options tab with the parameter Records ranked within +/- X are equal.
If the Spawning option is enabled, at least two output variables are required one variable of
DBQ record rank type plus one variable of DBQS record rank type.

Ranking rules
The rules that determine which record is selected are given on the blocks Options tab:
For a pass-through item
Highest pass-through record rank. Each records rank value is calculated by the equation. The
one with the highest rank is chosen.
Lowest pass-through record rank.Each records rank value is calculated by the equation. The
one with the lowest rank is chosen.
First True record rank. The equation will be calculated once for each record until either:
A record receives a True ranking
Or, there are no records left to evaluate
For a spawned item
Highest spawn record rank. Each records rank value is calculated by the equation. The one
with the highest rank is chosen.
Lowest spawn record rank.Each records rank value is calculated by the equation. The one with
the lowest rank is chosen.
First True spawn record rank. The equation will be calculated once for each record until either:
A record receives a True ranking
True spawn record ranks. Any record receiving a spawn rank 0.5 will be spawned. This
makes it possible to create any number of spawned action items for one pass-through item.

Description

Query cycle initiated only when an item arrives (similar to the Equation(I) block).

Query Equation(I)

Differences between the query blocks


Query Equation

How To

Or, there are no records left to evaluate

Query cycle initiation is controlled using options on the Options tab (similar to the
Equation block).

757

Query Equation(I)

Description

Query Equation

Data Management and Exchange


Blocks for data management and exchange

Supports Spawning

Works in continuous models

Works in discrete event models

Works in discrete rate models

DB Job Shop Query model


The DB Job Shop Query model is located at \Examples\Discrete Event\Routing.

DB Job Shop Query model

How To

The model simulates three parts, each with their own process sequence, being routed through five
potential processes. Depending on the part, a process sequence is made up of some combination of
milling, drilling, lathing, cutting, and exiting. For example, the process sequence for part 100-3 is
cut, mill, lathe, drill and then exit, while the sequence for part 100-1 only contains a milling step
before exiting. Each step in the process has a random delay that is unique to each part type.

758

Data Management and Exchange


Blocks for data management and exchange

All the information needed to drive this model is located in the ExtendSim database named Database 1. The table structure of that database is shown here.

Table structure of Database 1

The Products table contains the names of the three parts that are modeled.
The Production Schedule table is used by the Create block (through linking) to create parts by
schedule.
The Operations table contains a list of the five different potential operations mill, drill, lathe,
cut, and exit.
Each of the three part types has an associated Production Specs table. This is used to define the
steps in a part's production sequence and the delays associated with each step. The From and To
fields are used to define the appropriate destination given a particular origin: If you come from
here, go to there next.
In the model, one Query Equation(I) block is used to find the current part's next process step and
its associated delay. Both pieces of information are then stored as attributes on the pass-through
item. When the next item/part arrives, the query block starts looping through the Production
Specs table associated with that part.

How To

In this example, the query block is looking for the record whose From value matches the currStep
attribute found on the item. Once that is found, the block then finds the associated To and Process
Time values for that record and stores them as attributes on the item.
The equation in the query block is:
if(currStep == fromField)
{
rank = True;
currStep = toField;
activityDelay = delayField;
}
else
{
rank = False;
}

Given the complexity of what the query block is doing, the code is very simple.

Data Management and Exchange


Blocks for data management and exchange

759

Data access blocks


The following blocks are useful for creating global arrays and text files and for accessing data from
internal or external sources.
Data Source Create
The Data Source Create block (Value library) provides an easy method to create or
modify global arrays or text files. You can also use this block to resize or delete a global
array. For an example of how this block is used, see How to create and use a global
array on page 744.
Data Import Export
The Data Import Export block (Value library) is used for importing data from an
external data source to an ExtendSim database or global array or for exporting data
from an ExtendSim database or global array to an external data source. The supported
external data sources are:
Microsoft Excel
ADO compliant databases (Windows only)
ODBC databases (Windows only)
FTP site (Windows only)
Text files
Data Init
The Data Init block (Value library) uses a data source to initialize a target with values.
A popup menu in the blocks dialog allows you to choose as a target a databases table,
field, record, or cell or a global arrays column, row, or cell. The data source can be a
value, a databases table, field, record, or cell, or a global arrays column, row, or cell.
Each row of the block table defines one initialization record for one target. Each initialization record can be set up to initialize the data it refers to at every run, the first run only, or to
not initialize. Each cell in a given row of the table contains interface items that allow customization
of that particular initialization record.

Other blocks for modelers

Command
When triggered by a value at its send input, the Command block (Value library)
sends a command, such as an Excel macro or DDE command, to a spreadsheet. You
can select a command to send and choose when the command is sent.

Blocks for developers


The Utilities and ModL Tips libraries contain several blocks to assist block developers, such as the
Object Mapper block in the Utilities library.

How To

Data Specs
The Data Specs block (Value library) reports information about a selected ExtendSim
database or global array. You can assign a name to the specification report, select its
components through popup menus, initialize the outputs, and display the specifications name and/or values on output connectors.

760

Data Management and Exchange


Data source indexing and organization

Data source indexing and organization


Communicating between various types of data sources has been greatly assisted by standardized
technologies, such as the ability of diverse applications to exchange data through a standard text
file format. However, it is important to keep in mind that each standard has its own conventions.
This can cause data-confusion when transferring data from one type of source to another.

Transferring data between a data table and a spreadsheet


ExtendSim data tables have zero-based indexes and are organized by row and column data starts
at row 0, column 0. Spreadsheets are also organized by row and column, but they are one-based
data starts at row 1, column 1. When transferring data from an ExtendSim data table to an Excel
worksheet, the row and column numbers for Excel must both be increased by 1 compared to their
location in the ExtendSim data table.

Transferring data between a spreadsheet and a database


Databases are one-based like spreadsheets, but are organized by fields and records (equivalent to
columns and rows) rather than being organized by the spreadsheet convention of rows and columns.
Indexing and organization
The following table lists indexing and organization conventions for different data source types.
Data Source Type

Indexing

How organized

Data Tables

0-based

Row/Column

Spreadsheets

1-based

Row/Column

Internal Databases

1-based

Column/Row
(Field/Record)

External Databases

1-based

Column/Row
(Field/Record)

Arrays

0-based

Row/Column

N/A

Row/Column

How To

Text Files

Communicating with external devices


In some situations, you may want to obtain data for a model directly from an external piece of
equipment. For instance, when modeling a chemical process you might want to read the temperature of the actual process and compare it to simulated results.
If you create your own blocks with ModL code, there are two methods you can use to communicate with external devices such as scientific equipment and other hardware:
Dynamic Link Libraries (DLLs) on Windows or Shared Libraries for Mac OS. DLLs and Shared
Libraries are segments of code written in a language other than ExtendSim's ModL, such as
Visual Basic or C++. Their standardized interface provides a method for linking between other
languages and ModL. They can also be used to perform complex calculations utilizing specialized hardware. For more information, see DLLs and Shared Libraries on page 767 and the
Developer Reference.

Data Management and Exchange


Technologies for communication

761

Serial port functions on Windows. To pass data through serial devices, use the serial port functions. These functions can read and write any data (including real-time data) to and from the
computers serial ports. This is useful for transmitting and receiving data on a modem, for example. For more information, see the Developer Reference.

Technologies for communication


Many technologies have been developed as industry standards to allow applications to share and
access data both internally and with each other independent of programming language, operating
system, and file type. ExtendSim supports most of the standard types of communication technologies including:
Technology

ExtendSim Use or Implementation

Text Files

Import and export of raw data or ExtendSim


databases, Report and Trace files.

ADO

Import from, or export to, ADO compliant


databases using a Data Import Export block
(Value library).

ActiveX/COM/OLE
DDE
ODBC

DLLs (Windows)
Shared Libraries (Macintosh)
FTP

DDE Link menu commands.


Import from, or export to, ODBC compliant
databases using a Data Import Export block
(Value library). Note: this is an older Microsoft
technology. It is suggested that you use ADO
instead.
LPSolve used with the Rate library
Import from, or export to, files located on a
server or on the web using a Data Import
Export block (Value library).
Functions for inter-computer communication

In addition to the uses listed above, these technologies are supported for block development. This
is described in the Developer Reference.

Text files
A text file (also known as an ASCII file) is a file of unformatted information. Text files contain
written text with the styles removed and/or numerical data separated by some delimiter or separator (such as tabs or spaces).
You can create text files in another application such as a spreadsheet, database, or word processing
program, then read those text files into ExtendSim. Or create text files in ExtendSim, then read
them into the other programs.
Text files contain text, data, or both data and text. There are many uses for text files. For example:

How To

Mail Slots

Embedding controls and objects. The Gantt


Chart (Plotter library) has an embedded
ActiveX control.

762

Data Management and Exchange


Technologies for communication

To supply internal data as the basis for analysis when using Sensitivity Analysis.
To share data with an external database or spreadsheet program such as Microsoft Access or
Excel.
To output model results to external applications, such as spreadsheets or word processing programs, for presentation or analysis.
Text files of information are generated for model Reports or Traces.
Most files transmitted from minicomputers and mainframes are text files.
Text files can reside locally, be remotely accessed over a network, or accessed via the internet using
FTP.
Creating and opening text files
Some ExtendSim blocks automatically create text files. For example, selected blocks automatically
output information in the form of a text file when the Generate Report command is chosen for a
run. If you program custom blocks, you can include ModL functions to have the blocks create or
read text files. In addition, there are two methods to directly open or create a text file in ExtendSim:
1) Use the File menu commands to create or open text files. This allows you to look at report files,
modify data input files, and so on, without having to open another application.
2) Use the Create or Open button in the dialogs of the Read and Write blocks (Value library)
when Text File is selected as the data type. This is useful if you want to create a file of data for
use in a model. The Read and Write blocks are discussed on page 751

How To

Working with text files


The File > Import Data and File > Export Data commands are useful to exchange text file data
from internal or external sources with dialog and plotter data tables or ExtendSim databases or
global arrays. To see how these commands are used, see Importing and exporting data on
page 714.
The Read and Write blocks (Value library) provide an easy method for working with text files in
a model. With these blocks text files can reside locally in the model or be remotely accessed over
a network. These blocks also give added capability with text files in that they allow you to select
which column and row of data to access. They are discussed in Read and Write blocks on
page 751.
When building custom blocks, use the file I/O functions described in the Developer Reference
to read and write text files.
How to create a text file
This example shows how to use menu commands to create a file with text and data:

Give the command File > New Text File.

Data Management and Exchange


Technologies for communication

763

In the Text File window, enter the information shown on the right into
two tab-delimited columns. For example,

Type January
Click the tab key
Type 2.6
Click the enter or return key to start a new row
Continue entering the information, clicking the tab key after each
month to separate the information into two columns and clicking
the enter key after each value to start a new row of information.

Give the command File > Save Text File As and name the text file My
Text.

Because it is unformatted, the information in the text file will not be lined up as shown in the

screen shot above. It is important that you do not try to line up the data by adding extra tabs as
that will affect how the data is interpreted. There must be one, and only one, tab character separating the columns.
Delimiting text file data
Columns in text files can be separated by a tab, a space, or a comma. Carriage return characters are
always used to separate rows. When creating text files for use as inputs to ExtendSim blocks or
other applications, consider how the blocks or programs want the data presented. For example,
some ExtendSim blocks can take data columns separated a tab character, a space, or with another
character such as a comma. On the other hand, Sensitivity Analysis and many external applications
will only read files where the columns are delimited by tab characters. In general, it is best to use
tab characters.
Also, remember that programs expect only one delimiter (one tab, one space, or one comma)
between columns. For example, dont put in extra tab characters in order to make columns line up
visually; if you do, the program is sure to get confused.

Changing text file font and size


Use the commands in the Text menu to temporarily improve the readability of a text file, for
example, by increasing the size of the text. However, Text menu changes are discarded when you
close the text file.

ActiveX/COM/OLE (Windows only)


ActiveX is Microsofts set of object-oriented programming technologies and tools. There are two
main uses of the ActiveX technology in ExtendSim:
ActiveX/OLE automation
ActiveX/controls and embedded objects (COM)
ActiveX/OLE automation
ActiveX automation is the process of using ExtendSims OLE functions, or the scripting environment of another application, to communicate with, exchange data with, or control another appli-

How To

To permanently change the font or font size used when viewing text files, give the command
Edit > Options > Model tab and use the Text file font option.

764

Data Management and Exchange


Technologies for communication

cation. This is, for example, the technology used by the Read and Write blocks to communicate
with Excel.
When you use the OLE functions inside ExtendSim to communicate with another application,
ExtendSim is the Client in the automation communication and the other application is the server.
When the other application is using its scripting environment to communicate with ExtendSim,
ExtendSim is the Server.
When you develop custom blocks, automation is probably the most powerful tool that you can use
for interapplication communication. It does, however, come with a cost. Developing code to use
automation to control another application requires expertise with OLE/COM as well as knowledge of the object model of the target application.
An object model is essentially a list of the methods and objects that an application supports with
regard to ActiveX automation. ExtendSim has a simple yet powerful object model that is described
in some detail in the Developer Reference. Other applications have more or less complex object
models. Excel, one of the more common target applications, has a quite complex object model; it
is quite complex to deal with. The Object Mapper block (Custom Blocks library) is a tool that can
be useful in learning more about the object model of an application or ActiveX control.
Automation is also the most common tool used to communicate with embedded objects or
ActiveX controls when they are added to the ExtendSim application. The Bar Chart and Gantt
Chart plotters (Plotter library) use ActiveX automation through ExtendSim OLE function calls to
communicate and exchange data with the embedded objects.
ActiveX controls and embedded objects
The main ActiveX technology is COM (Component Object Model). COM is the framework for
developing and supporting ActiveX controls and component objects.

While the terms component objects and ActiveX controls are sometimes used interchangeably,

How To

an object is often considered to have a source application that it derives from and a control is usually defined as a stand-alone object that doesnt necessarily have an application behind it. For purposes of this manual, the words object or embedded object applies to either a component
object or an ActiveX control.
A component object is an identifiable part of a larger program that provides a particular function
or group of related functions; it is roughly equivalent to a Java applet. ActiveX controls can be created using one of several languages or development tools, or with scripting tools. In implementation, an ActiveX control is a dynamic link library (DLL) module. It runs in what is known as a
container, an application program that uses COM program interfaces.

OLE (Object Linking and Embedding) is Microsofts framework for a compound document technology for combining text, sound, animations, controls and so forth into a document. Each object
is an independent program component that can interact with the user and communicate with
other objects.
Whereas OLE provides services for the compound document that users see on their display; COM
provides the underlying services of interface negotiation, life cycle management (determining
when an object can be removed from the system), licensing, and event services (putting an object
into service as the result of an event that has happened to another object.)
ExtendSim supports embedding of COM/OLE objects and ActiveX controls in two places in the
application:

Data Management and Exchange


Technologies for communication

765

At the worksheet/model level, where they can be included as a container object and be manipulated much like blocks and other types of worksheet objects.
At the block dialog level, where they can be inserted into a special type of dialog item called an
embedded object.
The Gantt Chart (Plotter library) uses an embedded ActiveX control. The Read and Write blocks
(Value library) uses OLE/COM to communicate with other applications. ExtendSim also has
many OLE/COM functions to facilitate ActiveX controls and COM objects.

ExtendSim can be a container for objects embedded using the Insert Object menu command or

through ModL programming. It also has ModL functions to support its use as either an OLE automation client or server.

ADO (Windows only)


ActiveX Data Objects (ADO) is a method for exchanging information with various databases on
Windows-based computers. ADO sends an entire table of information at one time, providing
high-speed data interchange. The ExtendSim ADO interface allows you to communicate with
Access, SQL Server, and MySQL.
The interface is implemented as a Component Object Mode (COM) DLL. A set of ModL functions for accessing the DLL can be found in the ADO DBFunctions include file. These functions
bundle a set of COM calls that perform specific ADO actions such as creating a table or transferring data. The Structured Query Language (SQL) is used to manipulate and select the data in the
ADO database. SQL commands can be sent to the external database through the ADO interface.
The easiest way to communicate using ADO is to use the Data Import Export block (Value
library) shown here. Otherwise, use the ADO functions from the ADO_DBFunctions include file.

Options in Data Import Export block

ble column formats and the same number of columns.

DDE (Windows only)


Dynamic Data Exchange (DDE) is a Windows operating system protocol through which applications can exchange data. DDE allows applications to form DDE links from one application (DDE
server) to another (DDE client) and obtain data in real time. As data changes at the server, the
server sends the new data to the client for processing. Once the link is established, the applications
exchange data without further user involvement.
Two applications linked by DDE are said to be engaged in a conversation. The server is the application that initiates the conversation; the client is the application that responds to the server.
Unlike embedded objects, this conversation takes place between two windows.

How To

When using ADO, make sure that the ExtendSim table and external database table have compati-

766

Data Management and Exchange


Technologies for communication

DDE linking can be used for one-time data transfers and for continuous exchanges in which applications send updates to one another as new data becomes available. It is most appropriate for data
exchanges that do not require ongoing user interaction. Some areas where it is useful are:
Performing data queries, such as an ExtendSim model requesting information from an
Excel worksheet.
Linking to real-time data, such as scientific instruments, process control, or stock market
updates
Creating compound documents, such as an ExtendSim model that includes an Excel chart.
In ExtendSim, DDE technology is implemented through:
Menu commands that establish a connection between two pieces of data. (See DDE links
(Windows only) on page 724.)
The Command block (Value library) for sending instructions to a spreadsheet, causing it
to execute a macro. (See Command on page 759.)
IPC functions that provide more flexibility than using just menu commands to create
DDE links, such as the ability to set a value in Excel without establishing a link. (See the
Developer Reference.)

Since Microsoft constantly updates and replaces these protocols, it is best practice to use the

ExtendSim blocks for DDE communication. See the ExtendSim blocks starting on page 750.

ODBC/SQL
Open DataBase Connectivity (ODBC) provides a standard application programming interface
(API) method for accessing database data independent of programming language, operating system, and database system. The goal is to enable access to data from any application, regardless of
which database management system (DBMS) is handling the data. It does this by inserting a middle layer between an application and the DBMS that translates data queries into commands understandable by the DBMS.
The ODBC API allows applications to access data in DBMS using SAG SQL (SAG = SQL Access
Group; SQL - Structured Query Language) as the standard for requesting information from a
database. SQL allows a single application to access different database management systems.

How To

ODBC offers connectivity to a wide variety of data sources, including relational databases and
non-relational data sources such as spreadsheets and text files.

Since Microsoft constantly updates and replaces these protocols, it is best practice to use the

ExtendSim blocks for ODBC communication. See the ExtendSim blocks starting on page 750.

FTP
File Transfer Protocol (FTP) is used to connect two computers over the Internet or an intranet for
the purpose of transferring data and commands. In an FTP environment, one computer acts as a
server and the other acts as a client.
As a client, ExtendSim initiates a connection to the server. Once connected, ExtendSim accesses a
specified file on the server and either imports data from it or exports data to it.
ExtendSim implements FTP by:
The Data Import Export block (Value library) can open a file on a remote computer and access
the data for use in an ExtendSim model.

Data Management and Exchange


Technologies for communication

767

Internet Access functions provide more flexibility than using the Data Import Export block. See
the Developer Reference.

DLLs and Shared Libraries


Dynamic-Link Libraries (DLLs on Windows) and Shared Libraries (Mac OS) are segments of code
written in a language other than ExtendSim's ModL. This standardized interface provides a
method for linking between ModL and other languages. When and if a DLL or Shared Library file
is needed, it is loaded into memory and run by ExtendSim.
DLLs and Shared Libraries can contain code, data, and resources. They are used to provide access
to functions that are already written in another language or to solve problems that might be difficult or impossible to solve in ModL. Use a DLL or Shared Library to calculate some function, perform a task, access application programming interface (API) calls, or even control external
hardware devices.
ExtendSim implements DLLs and Shared Libraries by:
The Rate library uses the LPSolve DLL or Shared Library.
ExtendSim functions allow you to call the external code segments from within a block's ModL
code and perform operations. For example, a block can pass data to the DLL or Shared Library,
cause the DLL or Shared Library to calculate using that data, and get the results back from the
DLL or Shared Library. For more information, see the Developer Reference.

Mailslots (Windows only)


The mailslots feature allows communication between two ExtendSim applications running on different computers on the same local area network (LAN). Since mail slots involve programming,
they are described in the Developer Reference.

How To

How To

768

Data Management and Exchange


Technologies for communication

How To

Miscellaneous
Other important features
that didnt fit somewhere else

All truths are easy to understand once they are discovered;


the point is to discover them.
Galileo Galilei

770

Miscellaneous
Navigator

This chapter covers some additional ExtendSim features and topics, including:
Using the Navigator to explore models and to access library or database windows
Printing the model worksheet, Notebook, and block dialogs
Copying model elements within ExtendSim and between ExtendSim and other applications
Tool Tips
Changing parameters dynamically
Model sharing using the Lock Model command and the LT-RunTime version of ExtendSim

Navigator
The Navigator is an explorer-like window that provides easy access to different aspects of ExtendSim. As discussed later in this section, it has three modes:
Model Navigator mode. Lists the blocks in the active model, showing block icons, names,
labels, global block numbers, and any hierarchical levels. In this mode the word Model is displayed in the Navigator windows leftmost popup menu.
Database List mode. Provides a list of the databases the active model uses, if any. In this mode
the word Database List is displayed in the Navigator windows leftmost popup menu.
Library Window mode. Lists the blocks, including their icons and names, for a selected library.
In this mode all open libraries are listed alphabetically below the line in the Navigator windows
leftmost popup menu.

Opening the Navigator


To open the Navigator:

Select Window > Navigator or click the Open Navigator

How To

tool in the Toolbar.


By default, the Navigator opens in Model Navigator mode,
with the word Model selected in the windows leftmost
popup menu. The name of the active model is listed at the
top of the window and below the Navigators leftmost
popup menu. Each blocks icon is shown, and its information (global block number, name, and label) is displayed to
the right of the icon. If no model is open, the Navigator
opens in default Unknown doc mode.
A Navigators window has two popup menus:
The popup menu on the left is for switching between
modes - Model Navigator (the default mode), Database
List, or Library Window. For instance, the Navigator window for the Reservoir 1 model is shown above, set to Model
Navigator mode.

Navigator for Reservoir 1 model

The popup menu on the right (Model Navigator mode only) is for changing the order for how
the models blocks are listed in the window. You can sort by Block Label, Block Name, Block
Number, hierarchical Depth, or Simulation Order (the default order).

Miscellaneous
Navigator

771

To switch from one mode to the other, select the mode in the popup menu on the top left of the
Navigator window.

You can have multiple Navigator windows open at the same time, all set to the same or different

modes. To open a new Navigator window, Navigator windows that are already open cannot be in
Model Navigator mode.

Model Navigator mode


The Model Navigator mode is especially useful for large models with many blocks or when a
model has several hierarchical layers. You use this mode to directly locate a block and open its dialog or to access submodels by drilling down through the hierarchical layers. For an example of
using the Navigator in Model Navigator mode, see Navigating through the Reservoir model on
page 38.

Database List mode


The Navigator displays the list of databases for a model (if any) and is one of the methods for
opening a database window, as well as copying, duplicating, and pasting databases between models.

All the ExtendSim databases used in a model are automatically opened when the model opens. The
Navigator is used to open a databases window, not the database.
To open a database window using the Navigator:

Open a model that uses a database, such as the Reservoir 1 model located at \Examples\Tutorials.

Open a Navigator.
In the Navigators leftmost popup menu, select Database List.
Any ExtendSim databases used in the model are listed below the model name.

To open a databases window, double-click a database from the list.


Choosing Window > Database List is equivalent to choosing the Database List mode in the Navigator. For more information about creating and using ExtendSim databases, see ExtendSim databases for internal data storage on page 726.

Library Window mode

To open a library window and add blocks to a model:

Open a model, if one is not already open.


Open the models Navigator.
In the Navigators leftmost popup menu, select a library from the open libraries listed below the
line.
This action opens the library window for the selected library, showing block icons and names in
alphabetical order.

Select a blocks icon in the library window. (To select multiple blocks at once use the Shift key.)
Drag and drop the block onto the model worksheet.

How To

If a library is selected in the Navigators leftmost popup menu, the Navigator displays an alphabetical list of blocks for that library. You can add blocks to a model from this list; this is often quicker
than using the Library menu.

772

Miscellaneous
Printing

Opening a library window directly (by choosing Library > Open Library, then selecting the Open
Library Window command at the top of the selected librarys submenu) is equivalent to choosing
the Library Window mode in the Navigator.

If a block has been compiled with external source code, it will be listed in the library window with

the designation CM (code management) on the right side of its icon. If a block has been compiled
with debugging code, its name and any additional information will be listed in the library window
in red and the block will display in the model with a red border around its icon. Compiling
options are used by block developers and are discussed in the Developer Reference.

Printing
Selecting what to print
ExtendSim gives you control over what appears on the printed page. The following table lists what
can be printed, depending on which window is active:
Active Window

Printed

Model worksheet

A picture of the worksheet as it appears on the screen. You can choose how many
hierarchical layers to print and to optionally print the contents of the dialogs and
plotters.

Dialog

A picture of the dialog. If the dialog has a data table, you can select whether or
not to print all of the data in the table. You can choose to print just the top tab or
all tabs.

Plotter

The plot and, optionally, the data table.

Navigator

The contents of the Navigator as it appears on the screen.

Notebook

The contents of the Notebook as it appears on the screen.

How To

Hierarchical block A picture of the worksheet as it appears on the screen. If you print more than one
worksheet
layer, it will also print the model worksheet.
Help text

The text from the current Help choice.

Text file

The text in the file.

Library window

A picture of the library window.

Structure
window

All the panes from the structure window and the dialog editor window of a block
(see the Developer Reference for more information).

The Print command


ExtendSim decides which type of item to print based on what type of window is active when you
choose the Print command. For instance, if a plotter is active, the command becomes File > Print
Plotter.
When you select the Print command, if a Notebook or a Navigator window is active, the systems
standard Print dialog appears. If another window (such as the model worksheet) is active, two dialogs open in sequence: an ExtendSim Print dialog and then the standard Print dialog.
ExtendSims Print dialog is where you select what will be printed.

Miscellaneous
Printing

773

After you have selected what to print, the systems standard Print dialog allows you to specify
particulars about the print job. For example, you can set the number of copies to be printed and
(for model worksheets and Notebooks) the range of pages.
Worksheet, dialog, or plotter active
When you give the Print command with the worksheet, dialog, or plotter active, an ExtendSim
Print dialog opens.

ExtendSim Print dialog

The available options are:


Description

Print model
worksheet

Prints the contents of the worksheet.

Top hierarchical level


only

Only shows the worksheets top level (not the contents of hierarchical
blocks).

Levels

Specifies how many levels of hierarchical blocks to print (each level will
print on a separate page).

Add frame

Puts a border around the printed worksheet.

Print Notebook

Prints the contents of the Notebook.

Print dialog boxes

Prints the contents of the dialogs.

Selected blocks

Specifies that only the dialogs of selected blocks will be printed.

All blocks

Specifies that the dialogs of all blocks in the model will be printed.

Top tab

Prints only the top tab of the dialogs.

All tabs

Prints all tabs in the dialogs.

Top plot only

Prints only the visible plot.

All plot pages

Prints all four of the plot pages.

Include plot data tables Also prints the data tables in the plotters.
Include dialog data
tables

Also prints the complete data tables in the dialogs.

How To

Option

774

Miscellaneous
Copy/Paste and Duplicate commands

Structure or dialog window active


When a blocks structure or dialog window is the active window,
choosing the Print command gives you a special ExtendSim Print
dialog before the standard Print dialog. This special dialog is shown
on the right. The structure and dialog windows are only open if you
are working on the structure of a block - its code, dialog, icon or
help.

Printing and Print Setup hints


If you print the model worksheet, a hierarchical blocks structure
window, or the Notebook, the standard Print dialog allows you to print all or only some of the
pages. The File > Show Page Breaks command displays page breaks in an active worksheet or Notebook window. It also shows the page numbers in the upper left corner of the displayed pages to
help you choose which pages to print. If the Show Page Breaks command is selected for a model,
that setting is saved with the model but is not saved for the models Notebook.
The Model > Show Block Numbers command causes block numbers to appear on their icons.
Block numbers are unique identifiers for each block and appear in the title bar of the blocks dialog. Choosing this command before you print the model worksheet and dialog boxes will help to
match dialogs of blocks with their icons in the model.
ExtendSim will automatically print default headers and footers on each page. The Options dialogs
Misc tab contains a preference to enable or disable the printing of headers and footers (see
Options on page 792).

Copy/Paste and Duplicate commands


The Clipboard is useful for passing information within ExtendSim or between ExtendSim and
other applications. The information that is passed will be either in the form of ASCII text or
graphics (Windows: a Windows metafile; Mac OS: PICT graphics). ExtendSim uses the Cut,
Copy, Paste, and Duplicate commands in the Edit menu just like other programs. You can see the
contents of the Clipboard with the Edit > Show Clipboard command.

Before you choose the Edit or Duplicate command, it is important to select the tool from the tool-

How To

bar which will allow you to copy the desired items. For example, choosing the All Layers tool and
frame-selecting a section of a model causes all items in the frame (blocks, drawing objects, clones,
etc.) to be selected and available for copying. However, if you use the Block/Text Layer tool, only
blocks and text will be selected.

Copying within ExtendSim


Blocks
If you copy and paste or duplicate blocks within ExtendSim, the Clipboard also holds block
parameters and connections. This allows you to duplicate portions of models, including the variables in the dialogs of the blocks, to another section of a model or to other ExtendSim models.
Drawing objects and text
Copy or duplicate drawing objects and stylized text from one section of a model to another section
or from one model to another. To copy text, select the text as a block, rather than selecting the text
within the text box.

Miscellaneous
Copy/Paste and Duplicate commands

775

Data
Data can be copied from parameter entry fields and data tables and pasted into other entry fields
or data tables.

When copying data tables within ExtendSim, Allow data table titles copying should not be

selected on the Misc tab of the Options dialog. If it is, the titles will be added to the data and will
cause the original data to be displaced.

Copying from ExtendSim to other applications


Data
Data from parameter fields and data tables can be copied from ExtendSim and pasted into other
applications such as word processors and spreadsheets. When you copy data, ExtendSim puts the
data into the Clipboard as unformatted text.
For more information, see Copy/Paste on page 713.
Pictures
Plot panes, Notebooks, parts of models, and dialogs are available as pictures to be copied from
ExtendSim into other programs:
Copy an ExtendSim plot pane to other programs for use in reports or presentations. To do this,
simply click in the plot pane, then choose Edit > Copy Plot.
Notebooks and models contain various types of items such as drawing objects, cloned dialog
items, and so forth. Before choosing the Copy command, it is important to select the tool from
the toolbar that will allow you to copy the desired items. For instance, to copy an entire Notebook, choose the All Layers tool from the toolbar. Then frame-select the entire Notebook (or
choose Edit > Select All) and choose Copy.
To copy all or parts of a blocks dialog, choose the Clone Selection tool from the toolbar and
select the dialog items you want to copy using any conventional method (frame-select, shiftselect, etc.). Then choose Edit > Copy to Picture. To paste the contents of the Clipboard into
Microsoft Word, for example, choose Edit > Paste Special.

Copying an ExtendSim picture into the Clipboard changes it into a drawing object. To paste the

contents of the Clipboard into the receiving document, it is common to use the Edit > Paste Special command.

Windows: Use the Ctrl + Prnt Scrn key combination to save the entire screen as a bitmap. Or
use a capture program to capture specific parts of the screen.
Mac OS: Use the Command + Shift + 3 key combination to save the selection as a picture. Or
use a capture program to capture specific parts of the screen.

Copying from other applications to ExtendSim


Data
You can copy data from other applications into an ExtendSim parameter field, data table, text file
or database. However, if there is a lot of data it is usually better to import the data into a data table

How To

When it is not possible to copy parts of a model directly using the Copy command (such as for the
entire plotter window), do the following:

776

Miscellaneous
Tool tips

or into an ExtendSim database. For more information, see Exchanging data with external applications on page 748.
Pictures and text
Pictures and text can be copied into ExtendSim in color or black-and-white to use on model windows, Notebooks, hierarchical windows, or in the icon pane of a blocks structure window. Create
a picture with a painting or drawing program and copy the picture to the Clipboard. Then paste
the copied picture into an ExtendSim window with the Edit > Paste Picture command.

It doesnt matter what the original file format for the text or graphic was (JPEG, TIFF, GIF, etc.)
Once it has been copied into the Clipboard, ExtendSim treats it as a drawing object.

In the model and Notebook windows, ExtendSim will paste the text or graphic object wherever
you last clicked on the window. Pictures and text pasted from another program into ExtendSim
become a drawing object which can be resized and repositioned using the Draw Layer tool.
Pictures are treated like other drawing elements. For example, use the Draw Layer tool to drag a
picture around the window and resize it however you want. Or use the Model menu commands to
rotate or flip the picture, To delete a picture, select it with the Draw Layer tool and choose Edit >
Clear or press the Backspace or Delete key. Pictures that are copied, like objects created with
ExtendSims drawing tools, always go behind ExtendSim blocks and text.

Pictures can be proportionately resized. To do this, hold down the Shift key as you reshape the picture. It will resize with all dimensions proportional to the original.

Tool tips
Tool tips can be turned on or off in the Edit > Options dialog. They help to quickly identify block
information without having to open the blocks dialog.
Resting the cursor above a block causes a small window to appear containing the blocks name,
its local and global numbers, and (if Include additional block information is selected) the first
sentence of the blocks online help.
Placing the cursor over an input or output connector gives information about it, such as its
name and the number of items that have exited or the blocks constraining rate.

How To

Tool tips also exist to identify the variable name for block dialog items. This can be helpful when
programming custom blocks and is discussed further in the Developer Reference.

Changing parameters dynamically


Another name for the variable or constant number you input in a models blocks is parameter.
Parameters that do not change during the entire simulation run are static. It is more likely that you
would want to have a model parameter change dynamically.
One of the most powerful features in ExtendSim is the ease with which you can dynamically
change the parameters of a block during the course of the simulation. This is usually done to represent the value of the parameter as a function of something else in the simulation model. You may
also want to change a parameter to allow someone else to game (modify a value manually) to see
how a change impacts the simulation.

Methods
There are a number of means for changing parameters dynamically:
The most common method is to use the connector that corresponds to the dialog parameter
field. Connect this to a block that calculates the desired value, such as a Random Number or

Miscellaneous
Sharing model files

777

Lookup Table block (Value library). This approach visually shows the connection between the
parameter value and where the value comes from. In general, this is also computationally efficient since only the blocks connected to the parameter are recalculated.
A second approach is to link the parameter field with a record in an ExtendSim database. To do
this, right-click the parameter and select create/edit dynamic link. (You can also create this link
programmatically by creating a custom block that links the parameters of other blocks with an
ExtendSim database or global array.) Whenever the linked value in the database changes, the
parameter will change as well. This method hides the relationship between the parameter and
where it is calculated, however it is very useful for centralizing the location of certain parameters
in the database or for broadcasting the same value at the same time to a number of blocks
throughout the model.
In a discrete event model, some blocks (such as the Activity or Equation (I) block) allow you to
specify a property value for a parameter. Using an items property is an easy way to make the
parameter value a function of the item in the block.
Sensitivity analysis allows you to change a parameter from one simulation run to the next. Sensitized parameters change values at the start of each new run. They can change randomly, based
on a value in a file, or by a fixed increment. Changing parameters is useful for sensitivity analysis
and Monte Carlo simulation. To utilize sensitized parameters, the number of simulation runs
must be greater than one. For a complete discussion, see Sensitivity analysis on page 628.
Some blocks allow you to specify that a parameter is random. While this is not directly changing
the parameter dynamically, this feature allows you to simulate a parameter that changes randomly each time the block is recalculated.
There are other methods, such as calling the SetDialogVariable function in an equation block or
custom block, but these are generally just used for specific situations.

Sharing model files


You may want to provide access to models you have built, without giving users the ability to
change the models. ExtendSim provides two methods for preventing changes being made to models:

Locking the model


Locking a model is especially useful when giving the model to others who may accidentally move
or delete blocks or anytime you want to prevent changes to a models layout. The Model > Lock
Model command prevents any modification of a model other than changing dialog values. Since
this command hides many of the tools in the toolbar, the user also cannot add or change connection lines, drawing elements, and so forth.
This command does allow the user to save the model and any dialog value changes. If they give the
command File > Save Model As, the new model will also be locked.
When this command is selected, a dialog opens for entering an optional password to further protect the model. To lock a model without using a password, leave the password fields blank and
click OK. (Note that, if a password is not used, any user can unlock the model.) To unlock a
model, simply choose the Lock Model command again and enter the password, if any.

How To

Locking a model to prevent anything other than parameter changes when the model is run in
the full version of ExtendSim.
Using the LT-RunTime version of ExtendSim to open and run models.

778

Miscellaneous
Sharing model files

The Lock Model dialog also has a Lock H-Blocks checkbox. Select this to prevent a user from double-clicking a hierarchical block to see the underlying submodel.
Once you have locked a model with a password, you must have that password to unlock the
model. Always make unlocked copies of models before you lock them.

The ExtendSim LT version


If you develop models for others, the intended user may not have a need for the full version of
ExtendSim. For instance, you might want to distribute a model as part of the response to a
Request for Proposal or to showcase your consulting capabilities to potential clients. Or you may
want to provide models to your companys sales staff so they can show customers the outcomes of
various equipment or service options. The ExtendSim LT version provides a low-cost, convenient
method for distributing the models you build (and your libraries, if you program).
The LT version allows users who do not have the full version of ExtendSim to:
Run models of any size
Enter or import parameter values into a model
See and export results
See animation in the model, if the model includes that feature
Build small models for a limited time (up to 75 blocks for up to 180 days)
Save changes (except to models that are locked)
Print models, dialogs, and so forth

To prevent end users from using the LT version to make changes to your models, use the Lock
Model command discussed on page 777.
The limitations of the LT version are:

How To

The model-building capability is limited to models of 75 blocks and expires after 180 days.
While a model larger than 75 blocks is running, or after the expiration period, the application
changes to RunTime mode. At that point, end users can only run models. They will no longer
be able to build a model, add or remove blocks from models, or alter connections between the
blocks.
Libraries converted to RunTime format cannot be used for model building. So that the end user
can run models you give them, but not use your libraries to build models, convert your libraries
to RunTime format using the full version of ExtendSim (see Convert Library to RunTime Format on page 801).
The scripting functions and ActiveX automation commands that place or create blocks are not
enabled.
As with any other application, distribution and usage rights are limited.
The ExtendSim LT version is licensed to a single user for the users personal use on a single computer. For information about any other use, such as distributing an LT version on a CD or from
your web site (right to distribute), or distributing ExtendSims functionality or use to others on
an intranet or through the internet (ASP license), contact Imagine That Inc.

Miscellaneous
Referencing dialog variables

779

Referencing dialog variables


Sometimes a modeler must use a source blocks dialog variable as a parameter in a target block. For
instance, this is how modelers set model factors and get model responses with the Scenario Manager block, discussed in How the Scenario Manager works on page 633.

Blocks that use the interface


The following blocks reference dialog variables from other blocks:
Find and Replace (Utilities)
Optimizer (Value)
Scenario Manager (Value library of ExtendSim AT and Suite)
Statistics(Value library)
Custom built blocks, if they use specific functions
All of the Value, Item, and Rate blocks have code that supports these interfaces; the feature is also
available to block developers, as discussed in Remote access to dialog variables in the Developer
Reference.

Methods for referencing dialog variables as factors


There are 3 ways to add a dialog variable to target blocks:
Shift-click. Shift-click the source parameter in the source blocks dialog. In the window that
appears, select which target block should get the parameter.
Clone drop. Drag a clone of the source parameter from the source blocks dialog and drop it
onto the target blocks icon. This method is especially helpful when one or more of the blocks is
within a hierarchical block.
Manual. Manually enter the dialog variable name into a field or table in the target blocks dialog.

These methods only work if one of the target blocks is in the model.

How To

How To

780

Miscellaneous
Referencing dialog variables

Appendix

Menu Commands and Toolbars


A reference section describing
each menu item and tool

I wish it, I command it. Let my will


take the place of a reason.
Juvenal

782

Menu Commands and Toolbars


ExtendSim menu (Mac OS only)

This chapter explains all the commands that appear in the menus and the circumstances in which
you might use them. At the end of this chapter is a description of the tools in the application toolbar and ExtendSim database.

ExtendSim menu (Mac OS only)


The ExtendSim menu is used to Quit ExtendSim or to Hide its windows. An additional choice,
About ExtendSim, opens a window that lists the ExtendSim product, version and serial number
and the registered user of the license. If you open the About ExtendSim window, click on the window to close it.

File menu
The File menu lets you open, save, close, and print
model and text files. Most of the commands in this
menu act just like they do in other applications.

Library files are opened from the Library menu, shown

on page 799. Databases open when the model opens, as


described at Database menu on page 804.

New Model
Opens an untitled model window.

New Text File


Opens an untitled text file window. You can use this to
create text files for the Read and Write blocks, as input
to sensitized blocks, or for any other ExtendSim feature
that uses a text file as input. See Text files on
page 761 for more information.

Open
Opens an existing model or text file. (Any libraries and
databases that the model uses open when the model
opens. To open a library file, use the Open Library
command described on page 799.) You can also open a
model by double-clicking the model file; this action
will launch ExtendSim before opening the model.
You can have any number of models open at the same
time; open models are listed at the bottom of the Window command. When ExtendSim opens the
model, it also opens any libraries that are used by the model.

Appendix

If ExtendSim cant find a library used by a model, the message Searching for library... will appear

as described in Searching for libraries and blocks on page 549. If ExtendSim cannot find all of
the blocks used in the model, the missing ones will be replaced with text blocks. When this occurs,
ExtendSim will open the model as Model-x to prevent accidentally saving over the old model.

Close
Closes the active window. For example, closes a model if the model worksheet is the active window
or closes the models Notebook, if the Notebook is the active window.

Menu Commands and Toolbars


File menu

783

Revert Model/Revert Text File


Depending on whether a model or a text file is the active window, reverts the model or text file to
the version saved on disk, discarding any changes since the last save. ExtendSim warns you before
it completes this command.

Save Model and Save Model As


Saves the model in the active window to disk. Choose Save to save the file under the current name
or Save As to give a new model a name or to save a model under a new name.

If a crash occurs during the save process, your original file could get corrupted. To protect against

file corruption, prior to saving any new changes ExtendSim makes a copy of the previously saved
version of the model and saves it as ModelName.BAK. To recover a model from a backup file,
add a .MOX extension after the .BAK, then open the backup file from the File menu. You may
choose to have ExtendSim automatically save backup files or delete them when a save is successful
(see Options on page 792).

Save Text File and Save Text File As


Saves the text file in the active window to disk. Choose Save to save the file under the current name
or Save As to give a new text file a name or to save a text file under a new name.

Update Launch Control (Windows only)


Select this command to cause the currently active Extend or ExtendSim application to open when
a model (.mox) or library (.lix) file is double-clicked. This is only applicable if you have more than
one instance of the Extend or ExtendSim application on your computer and you want to cause a
specific instance of the application to open when you double-click files. For example, you would
use this command if you have both ExtendSim 9 and ExtendSim 8 installed, and you want model
files to automatically launch ExtendSim 8 when they are double-clicked.
The application in which this command was last given will control the launching of the model and
library files. To switch applications that will launch those files, just give the command in the Edit
menu of whichever application you want to be in control of launching.

Import Data Table


Copies data from a text file into the selected table. After choosing the
file to be imported, the Column Separator dialog appears.
You must specify how the columns in the text file are delimited
(separated); rows are automatically separated by returns. Most text
files that are exported from other applications have columns delimited by tabs; check the format of the text file before choosing
Import Data. For more information, refer to Importing and
exporting data on page 714.
this command can be used.

Export Data Table

Column Separator dialog

Copies data from a selected table to a text file. It works the opposite of the Import Data command.
After you give the file name, ExtendSim puts up the column separator dialog (as shown in the previous section), so you can specify what type of separator to use in the text file. You can read the text
file in ExtendSim or in a word processing or spreadsheet application. For more information, refer
to Importing and exporting data on page 714.

Appendix

A table from a database, dialog or plotter must be selected before

784

Menu Commands and Toolbars


File menu

A table from a database, dialog or plotter must be selected before this command can be used.
Import DXF File (Windows only)
Imports CAD drawings in standard DXF format from AutoCAD v13 or earlier or other CAD programs. The drawing becomes a graphic image which can be used as a background picture in the
model, the notebook, or on an icon.
Show Page Breaks
Causes ExtendSim to draw a set of page boundaries on the active window and place page numbers
in the upper left hand corner of each page. These page boundaries show where page breaks will
occur if you print the window. Since the size of a page is dependent upon the settings in the Print
Setup (Windows) or Page Setup (Mac OS) command, it is recommended that you make your
Print or Page Setup choices before showing page breaks.
When you choose Show Page Breaks, this menu item has a check mark next to it. To hide page
breaks, select this command again.

This command works independently for each active window (each model worksheet, Notebook,

dialog window, and so forth). If the command is selected for a model, that setting is saved with the
model but is not saved for the models Notebook.

Print Setup (Windows) and Page Setup (Mac OS)


Sets the printing parameters (paper orientation, reduction or enlargement, etc.) for the printer you
are using. Choose this command after changing printers or whenever you want to change the
printing parameters. Printing parameters are saved with a model.

Print

Appendix

Prints various ExtendSim


documents. If the worksheet, dialog, or plotter is
the active window, ExtendSim first displays the Print
Options dialog.
As discussed in Printing
on page 772, you can
choose to print the model
itself, its Notebook, and/or
the dialogs of the blocks in
Print Options dialog
the model. For models with
hierarchical blocks you can
print just the top level or any number of hierarchical levels. Selecting Add frame causes ExtendSim
to print a border around the worksheet.
With block dialogs, you can specify to print them for just the selected blocks or for all of the
blocks in the model. You can also choose to print just the top tab or all the tabs in block dialogs.
Since some dialogs have long data tables, you can specify whether or not to print the entire data
table. If you choose Show Block Numbers or Show Simulation Order from the Model menu
before you choose Print, the blocks will print with that information on them.
For plotters, you can print just the top plot page or all pages, and you can also print the (usually
lengthy) data tables from the plotters.

Menu Commands and Toolbars


File menu

785

If you program, the structure and dialog windows have their own print dialog that lets you choose
to print the ModL code, the dialog window, the connector names, the icon, or the help text.
The Print command also lets you print individual windows, such as the Notebook, the dialog, or
the plotter window. When one of these windows is the active window, the Print command will
print the contents of that window.

Network License (Windows only; network license only)

This command is only enabled if the ExtendSim application is a concurrent-user network license.

Network licenses require that the ExtendSim Network License Manager software be installed on a server as a Service. The ExtendSim
application and files are then either installed on the server (such that Network License menu
client computers use ExtendSim in memory) or on the hard drives of
individual client computers (such that the client computers use a local installation of ExtendSim).
License Info
The License Info window, shown at right, provides information about network license, such
as the maximum number of concurrent users
allowed, the number of current users, the utilization, and the name of the Server that has the
license management file. The window also has
several buttons:
Create Users List. Creates and opens a list of
licenses where ExtendSim is open and the
licenses are connected to the Server (that is,
not checked out).
Open Users List. Only needed when opening a Users list that was created at an earlier time
Create Checkout List. Creates and opens a list of the licenses currently checked out from the
Server.
Open Checkout List. Only needed when opening a Checkout list that was created at an earlier
time.

The WanUsers and WanExportList text files are stored in each Clients Documents folder. Creating
these files automatically replaces any existing files of the same name. To preserve the files, use the
Save As command to rename the file or copy the file to a new location.

WANUtilLog.txt contains a record of all actions taken by the networked Clients. This includes
when each connection was made to the Server and who made it, as well as when licenses were
checked in or checked out and who did it.
WANExportLog.txt contains just the information about the checking in and checking out of
licenses.

Appendix

Log files
Two log files are automatically created on the Server and stored in the Servers ExtendSimServer
folder:

786

Menu Commands and Toolbars


File menu

These files can get quite large. They can be deleted or archived if necessary ExtendSim will create
a new file if the old one is not found.
Check Out License (Network license only)
Allows you to temporarily check out a license on a client computer, such as for a laptop that is to
be used offsite. Checking out a license reduces the maximum number of concurrent users the
server will allow. That number will be restored when the license is properly checked back in.
To permanently remove a client computer from the license network, see the Remove License command, below.
Check In License (Network license only)
After reconnecting the client computer to the license network, use this command to return a
license that had been temporarily checked out from the network. This also restores the number of
concurrent users the server allows.
Remove License (Network license only)
Use this command to permanently remove a client computer from the license network. This action
deletes the information that would enable the client installation of ExtendSim to connect to the
servers license management application. You can then uninstall ExtendSim from that client. (If
you dont uninstall ExtendSim from the client computer, the next time ExtendSim is launched it
will not be able to run unless you supply the connection information.)

To temporarily remove a client computer from the license network, see the Check Out License
command above.

Properties
Shows information about the selected block or blocks, including Controls, hierarchical blocks,
size, X-Y pixel location, creation and modified dates, and which library (if any) the selection came
from.

Five most recent models or text files


The five model or text files with which you have most recently worked are listed near the bottom
of the File menu. To open, select one of the files.

Exit/Quit

Appendix

Leaves ExtendSim. If there are any model files with unsaved changes, you are first prompted
whether you want to save them.

Menu Commands and Toolbars


Edit menu

787

Edit menu
The Edit menu contains the standard Cut, Copy, and
Paste commands as well as commands for directly linking
with internal data sources and external applications, performing sensitivity analysis, and specifying global options.

Undo
Reverses the most recent action. You can undo commands, moving blocks, and so on.

Cut
Removes the selected item (such as a block, some text, or
numeric data from a data table) and places it on the Clipboard. You can see the current contents of the Clipboard
by choosing Edit > Show Clipboard.

Copy
Copies the selected item to the Clipboard. You can see the
current contents of the Clipboard by choosing Edit >
Show Clipboard. Copying is useful for duplicating parts
of a model as well as for exporting to other applications.
You can copy a single block, a piece of text, a group of
blocks and text, graphical objects, or numeric values from
a data table. You can also copy sections of the Notebook
or dialog box as a picture.

The items copied (blocks and text, drawing objects, etc.)


depend on the selection tool used to make the selection.

Copying data and pictures is discussed in Copy/Paste on


page 713.

Paste
Copies the contents of the Clipboard to the model. If the
Clipboard contains text, a block, or a graphic item, the copied item is placed at the insertion point.
For example, if you copy a block, click on the model worksheet, and then use the Paste command,
the block will be pasted where you clicked the mouse. If there is no insertion point, the item is
placed in the upper left corner of the window.

Clear
Removes the selected item. The menu changes to indicate what is selected, such as Clear Data or
Clear Blocks.
Removes the selected records from the currently active ExtendSim database table.

Select All
Selects all the items, such as all the blocks in a model or all the text in a field. The items selected
(blocks and text, drawing items, and so on) depend on the selection tool chosen in the tool bar.

Appendix

Delete Selected Records

788

Menu Commands and Toolbars


Edit menu

Duplicate
Makes a copy of the selected item and puts it near the original item. This is faster and often more
convenient than copying and pasting an item.

Find
This command displays a different dialog
depending on whether or not text (such as
text within a text box or within the code
pane of a blocks structure window) is
selected.
If text is not selected, the dialog to the
right appears. This dialog finds a block by
its global block number, name, label, or
category, or locates a text block by its
global block number or by the text contained within the text block. Global block
numbers are unique, permanent identifiers
for blocks and text blocks. Name means
the name of the block in the library menu
(e.g. Equation). Block labels are defined
Find block dialog
by the user in the block dialog and are
especially useful to find types of blocks.
Category refers to how the block is classified in the Library menu (e.g. Inputs).
You can also choose to open the dialog of the block once it is located. This command is useful for
large models when you are looking for specific blocks.
If text is selected (such as within a text box or within the code pane of a blocks structure window),
this command presents the following dialog.

Appendix

Find Text dialog

In this dialog, enter the text you want to search for in the Search for: edit box. The Match
Words option tells ExtendSim to match whole words only. In that situation, for example, boxer
would not be found by a search specifying box as the Search for: string. The Wrap Around
choice tells the command to begin searching from the top of the ModL code if it did not find the
text before the end.
The Replace with: edit box is used for finding and replacing at the same time (see Replace).
ExtendSim searches for text starting at the current selection and going to the end of the text. If the
specified string is found, the string is selected. If it is not found, the insertion point is not moved.

See the Find and Replace block (Utilities library) for additional block search capabilities, including
the ability to find a dialog value and replace it with another value.

Menu Commands and Toolbars


Edit menu

789

Find Again
Repeats the most recent find operation using the same search string.

Replace
Replaces the currently selected text with the text in the Replace with: edit box from the Find dialog. (Note that you can select text directly, in which case the text contained in the Search for: box
in the Find dialog may not be the same as the text you have selected and are replacing.) If there is
no text in the Replace with: edit box, the selected text is deleted.

Replace, Find Again


Replaces the currently selected text with the contents of the Replace with: box in the Find dialog,
then performs another Find command. Note that, if there is no text in the Replace with: edit box,
the selected text is deleted.

Replace All
Replaces every instance of the text in the Search for: box with the text in the Replace with: edit
box in the Find dialog.
You cannot undo a Replace All command, so use it with caution.

Enter Selection
Chooses the selected text to be the search string. This puts the text in the Search for: edit box of
the Find dialog and also determines the search string to be used for the Find Again command. This
is useful if you want to find the next instance of some text that is already in the code.

Create/Edit Dynamic Link


Links a blocks parameter field or data table to an internal data structure (ExtendSim database or
global array). This action creates a two-way dynamic link between the data structure and the dialog
item. Dialog parameters can be linked to a cell in a global array or database table; dialog and plotter data tables can be linked to a global array or database table. Although you can link data tables
to a database table, you cannot link an individual cell in a data table to a cell in a database.

The Create/Edit Dynamic Link command is only used for linking parameters and tables to internal data structures. Use the DDE link commands, discussed at Paste DDE Link (Windows
only) on page 791, to link parameters and cells to external applications

When you give the Create/Edit Dynamic Link command, a dialog appears with a popup menu to
select the data structure. Depending on the structure selected, other options are presented. To
delete a dynamic link, click the linked parameter or select the linked data table and give the Create/Edit Dynamic Link command. In the dialog, choose Delete Link.

. Another type of internal data source is a dynamic array, which is implemented through a blocks
code. You cannot use the Create/Edit Dynamic Link command to link to a dynamic array. However, if a data table is already linked to a dynamic array, its upper left corner will be blue.

Appendix

The command is equivalent to right-clicking the dialog item and choosing Create/Edit Dynamic
Link, or (for a data table) clicking the Link button. Dynamically linked parameters are outlined in
light blue. Dynamically linked data tables display the words DB (database) or GA (global array) in
their upper left corner. For more information, see Dynamic linking to internal data structures on
page 717.

790

Menu Commands and Toolbars


Edit menu

Open Dynamic Linked Blocks


The command Edit > Open
Dynamic Linked Blocks
opens the Find Links dialog,
shown on the right.

This dialog also finds regis-

tered blocks. Since they are


mainly for developers, registered blocks are discussed in
the Developer Reference.
The Find Links dialog is
useful for locating and
examining linked dialog
items or registered blocks.

Link dialog for Global Array

The options in the dialog allow you to choose where you want to search (the contents of databases,
global arrays, and/or dynamic arrays) and what you want to find (code-defined links, user-defined
links, or registered blocks). User-defined links were created by the modeler through the user interface; code-defined links were defined by block developers through ModL code. Registered blocks do
not have any specific dialog items associated with a link. Instead, the block just requests that it be
informed when the linked data source changes.
The DB selectors and the GA popup menu on the right of the dialog specify which database or
global array structure will be searched for. (Leaving the DB name or GA name popup menus to the
default choices seen above will find any linked database or global array.)
When the Find Links button is clicked, ExtendSim opens the dialogs of all the blocks with the
specified types of links or registration.
For more information, see Finding linked dialog items on page 723

Sensitize Parameter
If a dialog parameter is selected, this command opens the Sensitivity Setup dialog, which lets you
set values for sensitivity analysis. An alternate method of opening the Sensitivity dialog is to click
on the dialog parameter once while holding down the Control (Windows) or Command (Mac
OS) key.
A parameter that has sensitivity settings has a frame inside of it. If sensitivity analysis is active for a
parameter (that is, if the Enable sensitivity choice is checked in the Sensitivity Setup dialog), the
frame is green. If the sensitivity analysis is inactive for the parameter or if it is turned off for the
model as a whole, the frame is red.

Appendix

Sensitivity analysis is discussed in Sensitivity analysis on page 628.

Open Sensitized Blocks


Opens the dialogs of all blocks that have sensitized parameters. This is useful for finding which
blocks are used in the scenario. The command opens dialogs with sensitized parameters even if
sensitivity has been disabled for a parameter or is not active for the entire model. For more information, see Sensitivity analysis on page 628.

Menu Commands and Toolbars


Edit menu

791

Paste DDE Link (Windows only)


Copies the contents of the Clipboard to the selected parameter fields or data table cells. This
action creates a DDE link so that data from an external application is live-linked to ExtendSim.
This command will only be active if all of the following is true:
The external application supports linking through DDE
The external file has been named and saved, but is open
There is data in the Clipboard that has been copied from the external application
You have selected a dialog parameter or group of data table cells in ExtendSim to paste to
Parameters or data table cells that have been linked with this command are outlined in yellow. For
more information, see DDE links (Windows only) on page 724.

The DDE Link commands only relate to ExtendSims interaction with external applications. See
the command Create/Edit Dynamic Link on page 789 for linking parameters and tables to
ExtendSims internal data structures.

Delete DDE Link (Windows only)


Unlinks the selected parameter field or cell from the external application. This action does not
change the value in the field or cell, but the field or cell will no longer be linked to the other application.

Show DDE Links (Windows only)


Opens any block dialogs that have DDE links to external applications.

Refresh DDE Links (Windows only)


If linked applications are open and links appear to be working incorrectly, this command will
attempt to reestablish existing links between ExtendSim and the external application.

Insert Object (Windows only)


Brings up a list of registered embeddable objects - OLE component objects or ActiveX controls
from an external application that can be inserted into an ExtendSim worksheet or blocks dialog.
For information about the options in this dialog or about embedded objects in general, see
Embedding an object (Windows only) on page 746. For information about OLE or ActiveX, see
ActiveX/COM/OLE (Windows only) on page 763.

Design Mode (Windows only)

For example, clicking a Graphics Server control object when you are not in Design Mode will have
the effect of in-place-activating it. In Design Mode, double-clicking the object opens a Property
Pages Graphics Server dialog for customizing its settings.

Object (Windows only)


Some embedded objects from external applications have options that can be supported in ExtendSim. Selecting an object enables this menu command. The contents of it submenu depend upon
the type of embedded object; many objects do not have options.

Appendix

The way embedded objects behave in and out of Design Mode is dependent on the type of object.
In general, this command causes the external source application to open when an embedded object
is double-clicked. For an embedded object that is activated by a single click, Design Mode changes
the single-click behavior from activation to selection, allowing the embedded object to be selected
and moved without activating it.

792

Menu Commands and Toolbars


Edit menu

Show Clipboard
Shows the contents of the Clipboard in its own window.

Options
Lets you specify how you want ExtendSim to behave. Note that this is different from the Simulation Setup command which only affects the running of a specific model. The Options command
controls actions for all models and has six tabs: Model, Libraries, Programming, Model Style, 3D,
and Misc.
Model tab

Model tab of Options dialog

Option

Description

Use default connection Specifies whether or not ExtendSim uses the default connection line types
line types
when creating new connections (see Connection lines on page 615).
Default connection line Sets the default for the Connection Lines command from the Model menu
style is right angle
to be right-angle connections instead of straight line connections.

Appendix

Hierarchical blocks
have drop shadows

Determines whether there is a shadow around hierarchical blocks.

Tool Tips on worksheet Causes the block name, number, and library to be displayed when the cursor is hovered over a block on the model worksheet. If you hover the cursor
over a connector, the connector name and value are displayed. Note that
Help captions for the tool bar stay on even if this choice isnt selected.
Include additional
block information

In addition to the block name, number and library, when a cursor is hovered over a block this command will cause additional information, such as a
description of the block, to be displayed.

Play sound at end of


run

Causes ExtendSim to play the default system sound at the end of every simulation run.

Menu Commands and Toolbars


Edit menu

Option

Description

Metric distance units

Specifies that default distance or length units in the Convey Item and
Transport blocks (Item library) is meters instead of feet. In the Convey Flow
block (Rate library), distance and length units are specified directly in the
blocks dialog and this setting is ignored.

Smart Connections

If enabled, intelligent connection line control will try to anticipate how you
want connection lines to behave when blocks are moved around. Turning
this off allows you to exercise more precise control over the lines.

Text file font

Lets you specify the font and size of the characters for viewing and printing
text files.

Default model path

If a model pathname is entered here, that model will open when ExtendSim
is launched (when ExtendSim is installed, Getting Started.mox is the
default model.) If no path is specified, ExtendSim will look for the model in
the application directory or folder.

793

Libraries tab

Libraries tab of Options dialog

Description

Automatic search

Causes ExtendSim to automatically find and open the libraries used in a


model. If this is not selected, ExtendSim prompts you for the location of
each library that a model uses. See also Substituting one library for
another on page 553.

Alternate path

By default, ExtendSim searches for libraries in the Libraries folder. This


choice specifies an alternate path for library searches. See also Library
searches on page 549.

Show library window


dates

Displays the modified and compiled dates for each block in the library windows.

Appendix

Option

794

Menu Commands and Toolbars


Edit menu

Option

Description

List blocks by category


in menu

Causes blocks in each library to be listed in hierarchical menus by category.


Deselect this choice if you want all of the blocks listed alphabetically.

Show legacy/prior version warnings

You can turn the legacy library version warnings on and off by selecting or
deselecting this. This option is selected by default and protects you from
using obsolete libraries in new models and from unintentionally overwriting
existing models with new file formats.
NOTE: Legacy libraries are included so that models created using those
obsolete libraries can still run. They should not be used to create new models. This option causes a warning message to display if a legacy library is
opened using the Library > Open Library command; the warning is not displayed if the library is automatically opened because a model is opened.
Legacy

Preload libraries

Enter names of libraries you want automatically opened when ExtendSim


starts. Type in the name or use the Browse button to locate a library and
cause its name to be entered in the selected field. Note that ExtendSim will
still ask for the location of any libraries located outside of the active applications Libraries folder. To cause a library to not preload, erase its name from
the field.
NOTE: Depending on the particular product, the major libraries (Animation 2D-3D, Item, Plotter, Rate, Utilities, and Value) preload by default.
For example, launching ExtendSim CP causes the Animation 2D-3D, Plotter, Utilities, and Value libraries to also open. The libraries that will open on
application launch are listed in fields on the Libraries tab.

Appendix

Open library window

Opens the window of the library listed directly to the left of the checkbox
when ExtendSim is started.

Menu Commands and Toolbars


Edit menu

795

Programming tab

Programming tab of Options dialog (Windows)

Option

Description

Tool Tips on block dia- Displays the variable/message dialog names when the cursor is hovered over
logs
dialog items in a blocks dialog.
Tool Tips on dialog edi- Displays the variable/message dialog names when the cursor is hovered over
tor
dialog items in a blocks dialog editor window.
Structure window
opens in front

Opens the structure window in front of its dialog editor window. Deselect
this choice to cause the dialog window to open in front.

ModL font

Specifies the font and size of the characters for viewing and printing the text
in the code pane of the structure window.

Appendix

796

Menu Commands and Toolbars


Edit menu

Model Style tab

Model Style tab of Options dialog (Windows)

Appendix

If a block developer provides for this feature, blocks can have alternate styles that affect their
appearance in a model. Model styles are saved as indexes so the developer can rename the style and
it will still work on a different computer. The radio button selects the style that will be used as a
default when a new model is created. This does not affect models that are open or already built.

Menu Commands and Toolbars


Edit menu

797

3D tab

3D tab of Options dialog

Option

Description

Shadows

Displays shadows on objects in the E3D window. Can cause animation to


slow down, since calculating shadows for many objects can be computationally intensive.

Sounds

Turns on the sounds for 3D objects, such ambient sounds, footfalls, vehicle
tire squeals, and sounds produced by calling the E3DPlaySound function.

Foot prints & vehicle


trails

Displays foot prints following the movement of people objects and vehicle
trails that follow vehicle movement.

MiniMap

Displays a reduced map of the entire E3D window, including location


information. Especially useful when building a model.

3D window outside
application (after
restart)

Windows only. Specifies whether or not the E3D window is a child win-

Level of detail

Controls the level of detail with which 3D objects are displayed in the window. You would only need to change from the default setting of Very High
if there are many objects on the screen and the display is slow.

dow of the ExtendSim application. If checked, the E3D window will be a


separate window that can be behind or in front of the ExtendSim application window. Otherwise, the E3D window is contained within the application window, like the model worksheet. Note: This option only becomes
active after ExtendSim is restarted.

Appendix

The 3D options only apply to ExtendSim products that include 3D animation. For more information about the 3D animation, see the E3D module that starts on page 448.

798

Menu Commands and Toolbars


Edit menu

Miscellaneous tab

Misc tab of Options dialog

Option

Description

Save Print Setup settings

Windows only. Causes models to retain the settings specified in the Print
Setup dialog. Caution, this may not transfer successfully from one computer to another because of differences in printer drivers.

Print header/footer

Prints the header and footer information for all files.

Allow data table titles


copying

Specifies whether or not the Copy command copies row and column titles
when copying from a data table. Select this option if you want to copy the
titles, such as when you are copying to another program. Do not select this
if you are copying into another table within ExtendSim.

Plotter traces default to Draws plotter traces with a pattern, allowing traces to be visible on a black
patterns
and white monitor.
Save backup model files When a Save command is given, renames the existing model to ModelName.BAK, then saves the model. This is a precautionary measure, so the
original model file wont be overwritten when it is saved. See also Save
Model and Save Model As on page 783.

Appendix

MDI Interface (after


restart)

The MDI (Multiple Document Interface) is off by default.

Version check on appli- Allows ExtendSim to search for new versions when it launches, determining
cation launch
if the installed version is the most current version. The search occurs each
time ExtendSim is launched. If the installed version is current, nothing happens. If the installed version is not current, or if ExtendSim is unable to
connect to the internet, a warning is placed on the About ExtendSim
startup screen.

Menu Commands and Toolbars


Text menu

799

Text menu
The Text menu is used to set the style of text in the model and to
temporarily set the style of text in text files. The choices are the
same as in most applications. The Border command draws a shadowed border around the text box. The Transparent command
causes the background of the text to be transparent. If the Transparent command is not selected, the background of the text is white.
For more information about using text, see Working with text on
page 596.

If you make changes to the settings in the Text menu before you

enter text, those changes will apply to all text entered after the
changes. To change only an existing piece of text, select the text
within its text box, then change the Text menu settings. In that case, Text menu changes will apply
only to that existing piece of text, and not to text you subsequently enter.

Library menu
ExtendSim opens libraries automatically when you open models. To
open or close a library manually, use the Library menu. For more
information about libraries and their usage, see Using libraries on
page 548.

Open Library
Opens a library file. This causes the librarys name to appear in the
Library menu in alphabetical order. To view the blocks in the library,
click the Library menu and drag down to the name of the library.
When the library name is selected, blocks will be listed to the right of
the menu either alphabetically or by category, depending on the
option selected in Edit > Options >Libraries tab. The first choice in each list is Open Library
Window to open a window listing the blocks in the library, as discussed at Library windows on
page 551.

Close Library
Closes an open library. This command displays a dialog of the open libraries; select the library or
libraries to be closed from the list and click Close. Libraries that are in use cannot be closed. To
close multiple libraries, Shift select the libraries (or use the Ctrl (Windows) or Command key
(Mac OS)), then click Close.

New Library
Creates a new library. When you select this command, you will be presented with a dialog to specify the name of the new library.
Allows you to protect the code of blocks, set library versions, convert libraries to RunTime format,
and edit the Startup Screen for the LT-RunTime version.

Appendix

Tools

800

Menu Commands and Toolbars


Library menu

Other than the two RunTime commands, the following commands are of interest only to block
developers.

Library Tools choices

Open All Library Windows


Opens all the library windows for libraries currently open in ExtendSim.
Compile Open Library Windows
Causes all libraries whose library windows are open to be recompiled. To activate the command,
open the library window for the desired library.
Compile Selected Blocks
Causes the selected blocks in the library to be recompiled. To activate the command, open the
library window for the desired library and select the desired blocks.
Add Debug Code to Open Library Windows
Causes all libraries whose library windows are open to be recompiled with Debugging code. To
activate the command, open the library window for the desired library and select the desired
blocks.
Remove Debug Code in Open Library Windows
Causes all libraries whose library windows are open to be recompiled without Debugging code. To
activate the command, open the library window for the desired library.

Appendix

Add External Code in Open Library Windows


For each library whose library window is open, moves the source code for each block in the library
into a separate text file. This is useful for source code control. For more information, see the
Developer Reference.
Remove External Code in Open Library Windows
Moves the external source code back into each librarys blocks, for all libraries whose library windows are open. For more information, see the Developer Reference.
Protect Library
Removes the ModL source code from all the blocks in a library so users cannot access block code.
This is discussed in the ExtendSim Developer Reference.

Menu Commands and Toolbars


Library menu

801

You would only use this command to protect libraries of blocks you build yourself. Do not use this
command with the libraries that are included with ExtendSim.
Set Library Version
Allows you to set the long and short version strings for the library. This is useful if you are programming your own libraries and are concerned about version control.
Convert Library to RunTime Format
Changes a copy of a selected library to RunTime format. This removes the ModL code, as discussed in the Protect Library command, above. It also limits the use of the library:
A RunTime formatted library can be read by an ExtendSim LT/RunTime or Demo/Player version to run models but not to build models. (The ExtendSim LT-RunTime version is discussed
on page 778.)
The full version of ExtendSim cannot read libraries that are in RunTime format. Thus RunTime
formatted libraries cannot be used to run or build models in the full version.
Converting to RunTime format provides an easy method for providing libraries to others for evaluation or model running, while preventing those libraries from being used to build models.

If creating RunTime libraries on a different computer platform, you must convert and compile the
library on the desired platform before convertin that library to a RunTime library.

RunTime Startup Screen Editor


Allows you to customize the startup screen of an LT-RunTime version of ExtendSim so that users
know who to contact if they have questions. To use this command, you must have an ExtendSim
LT-RunTime application installed on your hard drive. Note that you cannot personalize the
startup screen of the Demo-Player version.
MacWin Conversion (Mac OS only)
The libraries and extensions that come with ExtendSim are already formatted correctly for your
operating system. However, if you build your own libraries or create your own extensions, and
want to transfer them to a computer running a different operating system, you must convert the
files to the appropriate operating system format. Use this command on a Macintosh computer to
convert libraries and extensions to the specified operating system format, either Windows or Mac
OS.

List of libraries
As libraries are opened, they will be listed at the bottom of the Library menu in alphabetical order.

Appendix

802

Menu Commands and Toolbars


Model menu

Model menu
The commands in this window affect the parts of the
model window and the way that the window is viewed.

Make Selection Hierarchical


Encapsulates selected blocks into a single hierarchical
block and replaces those blocks on the model worksheet with the hierarchical block. This is described in
Hierarchy on page 598.

New Hierarchical Block


Starts a new hierarchical block. This prompts you for
the name of the new hierarchical block, then opens a
blank hierarchical block structure window for building
the model. This is described in Building a new hierarchical block on page 601.

Open Hierarchical Block Structure


Opens the structure of a hierarchical block so you can
edit its icon or Help. Note that the hierarchical block
must be selected on the model worksheet. This command is equivalent to holding down the Alt (Windows) or Option (Mac OS) key while double clicking a
hierarchical block on the model worksheet. See Modifying hierarchical blocks on page 606.

Connection Lines
Sets the format of the connection lines. These are described in detail in Connection lines on
page 615.

Show Named Connections


Shows the connections between named connections. This is useful to show data flow in complex
models with many named connections. Named connections are discussed at Named connections
on page 618.

Hide Connections
Hides the connecting lines between blocks. This is a cosmetic change that is mostly used to
enhance presentations. Select the command again to show the connecting lines.

Appendix

This command works at each level of hierarchy separately and takes effect in whichever level is the

active window. Thus if you want only the top level of the model to not show connections, but the
hierarchical levels to show connections, choose the command when no hierarchical levels are open.

Hide Connectors
Hides the connectors visible on blocks. This is a cosmetic change that is mostly used to enhance
presentations. Select the command again to show the connectors.

This command works at each level of hierarchy separately and takes effect in whichever level is the
active window. Thus if you want only the top level of the model to not show connectors, but the
hierarchical levels to show connectors, choose the command when no hierarchical levels are open.

Menu Commands and Toolbars


Model menu

803

Controls
Allows you to add a control to the model. You can add a Slider, a Switch, or a
Meter. These are described in Controls on page 567.

Align
If two or more graphic objects, pieces of text, clones or blocks are selected,
allows you to align the objects on the left, right, top, or bottom.

Controls

Rotate Shape
Rotates the selected shape or picture by 90 degrees clockwise. Especially useful when creating
rotated views for icons.

Flip Horizontally/Flip Vertically


These commands flip (reverse) the shape or picture either horizontally or vertically.

Border Thickness
Puts a border of specified thickness, or of no thickness, around shapes. The default is a black border; change border color using the Shape Fill/Border command, below.

Shape Fill/Border
Determines whether the color selected from the Color Palette is used to fill the shape or to color its
border. See also Border Thickness, above

Change Model Style


If a library developer has implemented this feature and blocks have more than one style, this command changes the visual style of blocks in the entire model. The command can also be accessed by
right-clicking the model. To set a default model style for new models, go to Edit > Options and
select the Model Style tab.

If the developer has not implemented this feature in the libraries, changing model styles will have
no effect on the model. Most ExtendSim libraries do not use this feature.

Lock Model
Prevents any modification to a model other than changing dialog values. Can also be used to lock
a hierarchical block. Locking models and hierarchical blocks is useful if you are giving the model to
others who are unfamiliar with ExtendSims features and may accidentally move or delete blocks.
For more information, see Locking the model on page 777.
Once you have locked a model with a password, you must have that password to unlock the model.
Always make unlocked copies of models before you lock them. When in RunTime mode, you cannot unlock a model.
Creates an invisible snap grid on the model worksheet, Notebook, or icon pane to help you draw,
move, and resize objects and blocks. The grid spacing is 4 pixels. While the grid is enabled, you
can snap the upper left hand corner of an item to the grid. To override the grid, hold down the Alt
(Windows) or Option (Mac OS) key as you move the object.

Show Block Labels


Shows the block labels below the blocks in the model. For more information, see Working with
block dialogs on page 29.

Appendix

Use Grid

804

Menu Commands and Toolbars


Database menu

Show Block Numbers


Puts the block numbers in square brackets on the blocks in the model. Block numbers are unique,
permanent identifiers. Each block and text block in ExtendSim has a global block number. The
blocks inside a hierarchical block show two numbers - the first is the blocks global block number
and the second is the blocks local number within the hierarchical block.

Show Simulation Order


Puts the number of the blocks order of execution on the blocks in the model. Hierarchical block
internals have their own simulation order relative to the parent block. Simulation order is discussed at Simulation order on page 88.
Because blocks can override the systems simulation order, this display may be inaccurate for discrete event (Item library) and discrete rate (Rate library) blocks that send block-to-block messages.

Set Simulation Order...


Sets the number of the blocks order of execution in the model. See Simulation order on page 88.

Database menu
You can create relational databases in ExtendSim to store
data for use in a model and to store model outputs. Databases are especially useful for managing data in complex
models.

Databases are stored with the model. Databases automatically open when the model opens and are automatically
saved or closed when the model is saved or closed.

To bring a database window to the front, do one of the following:

Click its name at the bottom of the Database menu.


Select the Navigator tool and choose its Database List
mode. Then double-click the database you want to
access.
Go to Window > Database List and double-click a database in the list.
The tools for the database window are shown on page 819.
For more information about creating and using ExtendSim
databases, see ExtendSim databases for internal data storage on page 726.

Appendix

New Database
Opens a dialog for naming and creating a new ExtendSim Database for the model. The dialog also
shows a list of the models current databases so you can avoid using a duplicate name (ExtendSim
will warn you if you try to use a duplicate name.) After naming the database, select OK to go to
the database window.

Import New Database


Creates a new ExtendSim Database by importing an entire database from an exported ExtendSim
or SDI Industry database. In the dialog, select the database text file to import. This command
imports all the tables, fields, records and so forth from the exported file and creates a new database.

Menu Commands and Toolbars


Database menu

805

If you choose the name of an existing database, it will be replaced. To import tables to an existing
database, such that the database tables are appended at the end of the database, see the Import
Tables command, below.

Export Database
Exports the entire ExtendSim Database into a text file. You do this so you can import the database
into another model, to send the database to another user, or to prepare a database text file for use
by the ExtendSim Excel Add-In. To export only specific tables from a database, see the Export
Selected Tables command, below. Exported databases can only be imported to ExtendSim or to
the ExtendSim Add-In for Excel. To enable this command, bring a database window to the front,
as described under Database menu, above.

Rename Database
Renames an existing ExtendSim database. The database renaming dialog shows a list of the models
current databases, so you can avoid duplicating a name (ExtendSim will warn you if you try to
duplicate a name.) To enable this command, open an existing database by clicking its name at the
bottom of the Database menu when the model window is active or select a database in the list
when you go to Window > Database List.

New Table
Creates a new table for an ExtendSim Database and adds it to the list of tables in the databases All
Tables tab. The dialog that appears displays a list of the databases existing tables. After naming the
table, click OK. To enable the New Table command, bring a database window to the front, as
described under Database menu, above.

To delete a table from a database, select the table and use the Delete or Backspace key or go to Edit
> Clear Table. A dialog displays the delete options and, if there is data dynamically linked to the
table, warns you before deleting it.

Import Tables
Imports tables from an exported ExtendSim or SDI Industry database and appends the tables to an
existing database. To create an entirely new database using imported files, see the Import New
Database command, above. Give the Import Tables command after opening an existing database.
In the dialog, select a file to import. This command imports all the tables from the exported file
and places them below the existing tables. If you end up with unneeded tables, you can delete
them; see also the Export Selected Tables command, below. To enable this command, bring a database window to the front, as described under Database menu, above.

To import data into a specific table from a tab delimited text file, such as from Excel, go to File >
Import Data.

Export Selected Tables

Rename Table
Renames the selected table in an ExtendSim Database. A dialog opens with a list of the databases
existing tables and a field for entering the new name. To enable this command, bring a database
window to the front, as described under Database menu, above. Then select a table in the database
window.

Appendix

Creates and exports a ExtendSim Database text file containing only the selected tables. Use this
command instead of the Export Database command, when you want a file that contains only a
portion of the database. To enable the command, select one or more tables in a database window.

806

Menu Commands and Toolbars


Database menu

Edit Table Properties


Opens a dialog to edit table properties such as the
table name, whether it should be initialzed, and its
tooltips. This command works the same as rightclicking a database table and selecting Edit Table Properties.

New Tab
Places a tab in the database window, to the right of
any previous tabs. This is equivalent to double-clicking the blank area to the right of existing tabs. To
enable this command, bring a database window to the
front, as described under Database menu, above.

Rename or Delete Database Tab


Allows you to rename or delete the tab that is in the active database window. This is equivalent to
double-clicking the tab to rename or delete it. To enable this command, bring a database window
to the front, as described under Database menu, above. Then select a tab to bring it to the front.

Clone Selected Tables to Tab


Clones the table or tables to another tab. Select one or more tables, then give the command. In the
dialog, select the tab to copy the table to. (Or right-click a selected table and choose clone table to
tab.) To enable this command, bring a database window to the front, as described under Database
menu, above. Then bring a tab to the front and select the tables to clone using the Block/Text layer
tool.

A cloned table will behave exactly like the original table and will change when the original table

Appendix

changes. Likewise, changes made to the cloned table will be reflected in the original table. Cloning
is different than copying and pasting a table using the Edit menu. Tables that are copied and
pasted are neither linked to each other nor to the original table.

Menu Commands and Toolbars


Database menu

807

Append New Field


Creates a new field for the selected table and puts the field below any other fields in the list.

Field Properties dialog

The dialog gives options for setting the fields properties, such as its name, type, and initialization.
To enable this dialog, bring a database window to the front, as described under Database menu,
above. Then select a table and give the command.

To delete a field, use the Delete or Backspace key or go to Edit > Clear Fields. A dialog displays the
delete options and, if there is data dynamically linked to the field, warns you before deleting it.

Insert New Field


Works like the Append New Field command, except inserts the new field above the selected field
in the table.
Opens a dialog, discussed in The Table Properties dialog on page 738, for editing table properties. This command works the same as right-clicking a database table and selecting Edit Table Properties.

Append New Records


Creates new records for the selected field and puts the records below any other records in the field.
A dialog appears requesting the number of records to add. To enable the command, select the table

Appendix

Edit Table Properties

808

Menu Commands and Toolbars


Develop menu

when the database window is in structure mode or select the table from the list when the database
window is in viewer mode.

To delete a record, use the Delete or Backspace key or go to Edit > Clear Record. A dialog displays
the delete options and, if there is data dynamically linked to the record, warns you before deleting
it.

Insert New Records


Works like the Append New Records command, except inserts the new record above the selected
record.

Read/Write Index Checking


For database read/write functions, this command enables error messages if a read/write function
call has illegal indexes. This is a good tool to find illegal indexes and enabling this option does not
impact the speed of a simulation run. Leave it off if it is preventing a legacy model from running.
New models have this checked by default.

Develop menu
The Develop menu is used when creating or modifying
blocks in libraries. See the ExtendSim Developer Reference to learn how to create your own libraries of blocks
and for additional information on using these commands.

New Block

Appendix

Creates a new block. In the initial dialog, you specify


the blocks name and the library in which you want to
save the block. Use the Open Library or New Library
buttons in the dialog to open or create a library for the
new block.

New Block dialog

After naming the block and selecting the library, you


are presented with the default dialog and structure windows. For a quick overview on building a new block,
see the Developer Reference.

Menu Commands and Toolbars


Develop menu

809

Open Block Structure


Opens the structure of the selected blocks. This command is equivalent to holding down the Alt
(Windows) or Option (Mac OS) key while double clicking a block in the library window or on the
model worksheet.

Rename Block
Changes the name of the block, including a hierarchical block. The block must be either selected
in the library window or its structure window must be the active window.

Set Block Category...


Sets a blocks category. This serves two functions:
To organize blocks within the Library menu by functionality.
To organize blocks within statistical reports by functionality.
This command is only available when the blocks structure window is the active window. If Show
category in Library menu is not checked in the Set Block Category dialog, the block name will
be listed in alphabetical order directly under the librarys name in the Library menu. Note that you
cannot change the categories of ExtendSim blocks.

Compile Block
Compiles the ModL code for the block. This is useful for checking the syntax of the code that you
are working on without having to close the structure or dialog editor windows. The Compile command is only available when the structure window of a block is the active window. You can also
choose to compile the block with debugging information and with external source code, as discussed below.
Generate Debugging Info
When the block is compiled, generates debugging information for the block. This allows you to
debug block source code using breakpoints, watch points, and so forth. Blocks with debugging
code run slower. Their names and any additional information will be listed in the library window
in red and they will show in a model window with a red border around them.
To remove debugging code from a block, open the blocks structure window and uncheck the Generate Debugging Info command, or right click the block on a model worksheet and select Remove
Breakpoints. To remove debugging code for an entire library, see Remove Debug Code in Open
Library Windows on page 800.
External Source Code
When the block is compiled, generates a text file containing the blocks source code. This is used
for version control. If a block has been compiled with external source code, it will be listed in the
library window with the designation CM (code management) on the right side of its icon.

Appendix

810

Menu Commands and Toolbars


Develop menu

New Dialog Item


Adds a dialog item (such as a button, some text, and so on) to the blocks dialog window. This
command is only enabled when a blocks dialog window is the active window. Dialog items, and
the use of this command, are covered in detail in the ExtendSim Developer Reference.

New Dialog Item dialog

New Tab
Adds a new tab to the blocks dialog window. This is equivalent to double-clicking the blank area
to the right of existing tabs. This command is only enabled when a blocks dialog window is the
active window.

Rename or Delete Tab


Allows you to rename or delete a tab. This is equivalent to double-clicking the tab or rename or
delete it. This command is only enabled when a blocks dialog window is the active window.

Appendix

Move Selected Items to Tab


Allows you to move the selected dialog item to a specific tab in the blocks dialog. This command
is only enabled when a blocks dialog window is the active window and a dialog item is selected in
that window.

New Include File


Creates a new Include file window. This command is only enabled when a blocks structure or dialog window is the active window.

Open Include File


Opens an existing Include file window. This command is only enabled when a blocks structure or
dialog window is the active window.

Menu Commands and Toolbars


Develop menu

811

Delete Include File


Deletes an Include file. This command is only enabled when a blocks structure or dialog window
is the active window.

Shift Selected Code Left


Moves the selected lines of the ModL code one tab stop to the left. This command is only enabled
when a blocks structure window is the active window.

Shift Selected Code Right


Moves the selected lines of the ModL code one tab stop to the right. This command is only
enabled when a blocks structure window is the active window.

Go To Line
Allows you to quickly move to a specific line in the block code. This command is only enabled
when a blocks structure window is the active window.

Go To Function/Message Handler
Jumps to where the function or message handler is defined in the code. Select the function or message handler name where it is used in the code, then give the command. This is equivalent to holding down the Alt (Windows) or Option (Mac OS) key while double clicking the function or
message handler name, or right-clicking on the function or message handler name. This command
is only enabled when a blocks structure window is the active window and the function or message
handler name is selected in the code.

Match Braces
Highlights the area between the start and end of braces or parentheses in block code. Click after
the opening brace or parenthesis, then give the command. This is equivalent to right-clicking after
the brace or parenthesis. This command is only enabled when a blocks structure window is the
active window.

Match IFDEF/ENDIF
Highlights the area between a #IFDEF or #IFNDEF and its corresponding #ENDIF in block
code. Click after the #IFDEF, then give the command. This is equivalent to right-clicking after the
#IFDEF. This command is only enabled when a blocks structure window is the active window.

Set Breakpoints
Opens the Set Breakpoints window for the selected block or brings it forward into view if it is
already open. This window shows the source code for the block, along with a breakpoint margin
on the left of the window. If needed, the block is automatically recompiled in debugging mode.
This command is only enabled when a block is selected on the model worksheet.
Opens the global breakpoints window, showing all breakpoints from all blocks in the model. This
command is only enabled when a model window is the active window.

Open Debugger Window


Opens the source debugger window or brings it forward if it is already open. This command is
only enabled when you are debugging the source code of a block.

Appendix

Open Breakpoints Window

812

Menu Commands and Toolbars


Develop menu

Continue
Continues execution from a breakpoint. This command is only enabled when you are debugging
the source code of a block and you are stepping through the code.

Step Over
Steps over a function call when stepping after a breakpoint. This command is only enabled when
you are debugging the source code of a block and you are stepping through the code.

Step Into
Steps into a function call when stepping after a breakpoint. This command is only enabled when
you are debugging the source code of a block and you are stepping through the code.

Step Out
Steps out of a called function to return to the caller when stepping after a breakpoint. This command is only enabled when you are debugging the source code of a block and you are stepping
through the code.

Show Reserved Databases

Appendix

Causes the models reserved databases, if any, to be listed at the bottom of the Database menu and
in the Database List. Reserved databases allow programmers to use database capabilities without
the model-user being aware of the database. Since reserved databases can only be created and modified through the ExtendSim database API, they are discussed in the ExtendSim Developer Reference.

Menu Commands and Toolbars


Run menu

813

Run menu
The Run menu lets you modify the way your simulation runs, show 2D and 3D animation, and generate model reports. A hierarchical menu at the end
provides commands for debugging models. For more
information about running models, see Model Execution on page 573.

Run Simulation
Starts a simulation. The command first checks every
block in the model to see that it has been compiled.
You can run multiple models at the same time; processor speed will be divided equally between the simulations. See also Prioritize Front Model, below.

Continue Simulation
This continues a simulation run in an opened model
that was previously paused and saved during a simulation run. See Saving intermediate results on
page 583.

Run Optimization or Scenarios


Runs an optimization or scenarios. Alerts the user if
there is no Optimizer or Scenario block (Value
library) on the model. See Optimization on
page 647, or see Scenario analysis on page 632.
Note that you cannot run optimization and scenarios at the same time. ExtendSim will warn if you give
this command, or use the Run Optimization or Scenarios tool, with both an Optimizer and a Scenario Manager block in the model.

Simulation Setup
Modifies the start time, end time, and other settings for a simulation run, and provides options for
setting random number seeds and showing 3D animation. The dialog is described in detail in
Simulation setup on page 574.

Prioritize Front Model


If running multiple models simultaneously, choose this to cause the frontmost model to have processor preference over the background models. Running multiple models is discussed at Working
with multiple models on page 591.
Causes ExtendSim to use sensitivity analysis settings when you run the simulation. Only enabled if
a dialog parameter value has sensitivity settings. For more information, see Sensitivity analysis on
page 628.

Show 2D Animation
Causes blocks in the model that have animation to animate when the simulation is run. This is discussed inAnimation on page 609. Note that some blocks can show some animation, such as text

Appendix

Use Sensitivity Analysis

814

Menu Commands and Toolbars


Run menu

on the icon reporting final values, even if Show Animation is not selected. You can also choose to
animate along connection lines or between named connections, as discussed below.
Add Connection Line Animation
This option controls whether or not 2D animation will be displayed along connection lines in discrete event models. If this is on, blocks from discrete event libraries, such as the Item library, will
display their item animations as discussed in Animating the movement of items between blocks
(discrete event modeling only) on page 610. If its off, only animations on block icons will be displayed. This command requires that Show 2D animation be checked and is only available for discrete event models.
Add Named Connection Animation
For named connections (text labels indicate the path and connection line does not appear on the
worksheet), this option will cause the animation picture to travel in a straight line between the two
text labels. If this option is turned off, the animation picture will disappear when it has reached a
text label and reappear at the matching text label. This command requires that Show 2D animation be checked and is only available for discrete event models.

Show 3D Animation
Opens the E3D window for showing 3D animation. If the window is subsequently closed, it will
reopen when the simulation run begins. This is the same as choosing Run > Simulation Setup >
3D Animation tab and selecting Show 3D animation during simulation run. Note that only
models using libraries that support 3D animation, such as the Item library, will animate in this
window. For more information, see the E3D module that starts on page 447.

Show Movies (Mac OS only)


Causes blocks that have QuickTime movies to show their movies when you run the simulation. In
addition, the Animate Value block (Animation 2D-3D library) has a dialog option to play a movie
when it gets a value at its input. Movies must be stored in the Extensions folder and be QuickTime
movie files. This command requires that you have QuickTime installed.
Launch Proof (Windows only)
Opens the Proof Animation application. This command is only enabled if Proof Animation is
installed. Proof Animation is only available with certain ExtendSim products.
Launch StatFit (Windows only)

Appendix

Opens the Stat::Fit application. This command is only enabled if Stat::Fit is installed. Stat::Fit is
included with the Windows version of the ExtendSim AT and ExtendSim Suite products; it can be
purchased separately for use with other ExtendSim products. For more information about
Stat::Fit, see Stat::Fit (Windows only) on page 661.

Generate Report
Causes ExtendSim to generate a report file when the simulation is run. ExtendSim will prompt for
a name for the new report file when the model is run. Report files show final results of the simulation for selected blocks. They are described in Reports on page 671. Use the commands that follow to specify which type of report to generate and which blocks to include in the report.

Menu Commands and Toolbars


Run menu

815

Report Type
Allows you to choose which report type, Dialogs (Text File), Statistics (Text File), or Statistics
(DB), to generate when Generate Report is checked and the model is run. The current selection is
shown in parenthesis following the command.

Add Selected To Report


Causes blocks selected in the active model window to be included in the report when Generate
Report is checked and the model is run.

Add All To Report


Causes all blocks in the active model window to be included in the report when Generate Report is
checked and the model is run.

Remove Selected From Report


Causes blocks that have been selected in the active model window to be removed from the report.

Remove All From Report


Causes all blocks in the active model window to be removed from the report.

Show Reporting Blocks


Causes blocks that have been included in a report to show the word Report on them in the model
window.

Stop
Stops the simulation. This is the same as the Stop button in the toolbar. As an alternative, you can
hold down the Control (Windows) or Command (Mac OS) key while pressing the period (.) key.

Pause
Halts the simulation temporarily. This is the same as the Pause/Resume button in the toolbar.
When you give this command, the word Paused appears in the models status bar until the simulation is resumed. To restart the simulation, give the Resume command, below, or click Pause/
Resume.

Step
Steps the simulation depending on which mode (Step Each Block, Step to Next Animation, or
Step Entire Model) is selected in the Debugging menu as discussed at Debugging on page 816.
This is the same as the Step button in the toolbar.

Resume
Restarts a paused simulation. This is the same as clicking the Pause/Resume button in the toolbar.

Appendix

816

Menu Commands and Toolbars


Run menu

Debugging
This hierarchical menu lets you modify the way your simulation runs and facilitates finding a modeling problem. The
three Step... commands in this menu determine how the
Step command in the Run menu performs during a simulation run. The Trace commands are used to generate a Trace
file of the values for each selected block in the active model
at each step of the simulation. For debugging hints, see
Animation features for debugging on page 705.
Pause At Beginning
If this is enabled, pauses the simulation after it starts so that
the user can step through the run from step zero. When the
simulation is paused, the word Paused appears in the
models status bar.
Step Each Block
Controls the behavior of the Step command or button so
that you can step through a simulation block by block. This
command is only active when the Pause command or Pause
button have been activated.

Debugging menu

Step Next Animation


Controls the behavior of the Step command or button so that you can step through a simulation,
pausing only at animation changes. In models where there are many steps between animation
changes, this option makes going from visible change to visible change much faster. This command is only active when the Pause command or Pause button have been activated.

Appendix

Step Entire Model


Controls the behavior of the Step command or button so that you can step through an entire cycle
of all blocks in the model. Each Step command starts at the selected block and continues the simulation run until the execution order returns to the original block. This command is only active
when the Pause command or Pause button have been activated.
Show Block Messages
Used in conjunction with the preceding Step Each Block, Step Next Animation, or Step Entire
Model commands to show system messages on the blocks. When you are stepping through a simulation and choose Run, the simulation automatically pauses between step cycles (defined by the
three preceding commands.) This command causes the block that is active to be highlighted with
the current message name written on it. If that block is not currently visible, the window will automatically scroll to the block if Scroll To Messages (see below) is checked. Block messages are discussed Block to block messages on page 593.
Only Simulate Messages
When the Show Block Messages command is active, causes only the messages that occur during
the Simulate stage of the run to be shown. This saves time by not showing all the initial and final
messages.
Scroll To Messages
When the Show Block Messages command is active, causes the window to scroll automatically, following the path of messages so that the user can quickly step through the model.

Menu Commands and Toolbars


Window menu

817

Generate Trace
Causes ExtendSim to generate a trace file during the simulation. ExtendSim will prompt for a
name for the new trace file when the model starts running. The content of the trace file depends
on which blocks have been selected to be included. For more information, see the following commands and Model tracing on page 707.
Add Selected To Trace
Causes blocks that have been selected in the active model window to be included in the trace file.
Trace files are generated if Generate Trace is checked when the model is run.
Add All To Trace
Causes all blocks in the active model window to be included in the trace file. Trace files are generated if Generate Trace is checked when the model is run.
Remove Selected From Trace
Causes blocks that have been selected in the active model window to be removed from the trace
file.
Remove All From Trace
Causes all blocks in the active model window to be removed from the trace file. Use this before
starting a new type of trace.
Show Tracing Blocks
Causes blocks that have been included in a trace to show the word Trace on them in the model
window.
Profile Block Code
Generates a text file showing the percentage of time that each block spent executing during the
simulation run. See Inefficient settings or block code on page 590 for more information about
profiling a model.
Show Debug Messages
Allows the user to turn on and off the messages created using the debugMsg() function.

Window menu
In addition to the standard (Windows only) commands for arranging
the windows in ExtendSim, the Window menu lists ExtendSim windows such as the Notebook and Navigator. The window also lists all
open models, dialogs, and library windows at the bottom. To bring a
window to the top of your workspace, select it from the menu.

Notebook

Navigator
Opens or brings forward a Navigator window for a model. This is the same as choosing the Open
Navigator tool. The Navigator has three modes: an explorer-type interface for the model; a list of

Appendix

Opens or brings forward the Notebook for a model. This is the same
as choosing the Open Notebook tool. Notebooks are used for controlling model parameters,
reporting simulation results, and documenting the model. The words (has data) after the Notebook command indicates it has content. For more information, see Notebooks on page 566.

818

Menu Commands and Toolbars


Help menu

databases used in the model, and a library window for open libraries. For more information about
the Navigator, see Navigator on page 770.

Database List
Opens or brings forward a window showing the databases (if any) used in the model. This is the
same as choosing the Open Navigator tool and selecting Database List in the Navigators popup
menu. Databases and their usage are discussed at ExtendSim databases for internal data storage
on page 726.

Calendar
Opens or brings forward a Calendar. If you run a model and are using Calendar dates in the
model, the calendar will automatically scroll from the beginning simulation date until the end.
This window is only available if Use Calendar Dates is selected in the Setup tab of the Run > Simulation Setup command.

E3D Window
Opens or brings forward the E3D window for showing 3D animation. This is the same as selecting
the Open E3D Window tool. The command is only enabled if your ExtendSim product has 3D
animation capabilities. For more information, see The E3D environment on page 454.

Help menu
This menu has commands for accessing ExtendSim Help and useful web sites.

ExtendSim Help
Shows a list of available Help topics. Select a topic from the list
and click Help for more information. You can search for key
words within any Help topic.

Support Resource Center


Uses your current browser to open an ExtendSim web page with
many types of support resources, including example models,
FAQs, and downloadable manuals.

Downloads and Updates


Uses your current browser to open the ExtendSim product updates web page.

User Forum
Uses your current browser to open the ExtendSim user group home page.

Appendix

Whats New
Uses your current browser to open the ExtendSim web page describing the features in the newest
ExtendSim release.

ExtendSim Product Line


Uses your current browser to open the ExtendSim web page that describes the ExtendSim products
and versions.

Imagine That Inc. Online


Uses your current browser to open the Imagine That, Inc. home page at www.extendsim.com.

Menu Commands and Toolbars


Toolbar buttons

819

About ExtendSim (Windows only)


Opens a banner window that lists the ExtendSim product, version and serial number and the registered user of the license. Click on the window to close it.

Toolbar buttons
Hide/Show connectors
Navigator
Notebook

New model

3D Window
Run
Run Optimization or Scenarios

Open model
Save model

All layers
Colors

Stop

Print

Patterns

Pause/Continue

Cut

Shapes popup menu

Step

Copy

Shuffle graphics

Animation on/off

Paste

Cursor position

Animation faster

Undo

Icon tools popup menu

Animation slower

Zoom

Block/text tool
Graphics layer
Clone layer
Rectangle
Round rectangle
Oval
Polygon
Line
Rt angle line

ExtendSim database tool bars


Append records

Structure/viewer mode popup

Insert records

New table
Append new field
Insert new field
Show all tables
Hide all tables

Make cells random


Make cells constant
Sort records

Database Viewer toolbar

Appendix

Database window toolbar

Delete records

Appendix

820

Menu Commands and Toolbars


ExtendSim database tool bars

Appendix

Value Library Blocks


A detailed description of the
building blocks in the Value library

822

Value Library Blocks


Submenus

This chapter provides tables of the blocks in the Value library, separated by category. Each Value
library block has an icon that represents its function, predefined input and output connectors for
quick model building, and a dialog for entering parameters and viewing results.
The tables have brief descriptions and are useful to get an idea of a blocks functionality in your
model. For more details about the usage of a block:
Click the Help button in the lower left of the blocks dialog
Look in the index of ExtendSims online Help for the blocks name

Submenus
The blocks are listed by the block categories displayed in hierarchical submenus of the Value
library menu:
Data Access: Accessing global data
Holding: Accumulating or storing values
Inputs: Generating values
Math: Calculating values
Model Analysis: Finding the best solution
Outputs: Writing data to files or display
Routing: Routing or deciding which value to use
Statistics: Calculating mean, variance

Data Access
The blocks in this category are used to access and store data in your models.
Block

Function

Data Import Export

Imports and exports data from and to external data sources such as Microsoft Excel, ADO and ODBC compatible databases, text files, and files
from the internet via FTP.

Appendix

The data can reside in ExtendSim database tables and global arrays.
Data Init

Defines any values needed to initialize multiple database tables and global
arrays before a simulation run starts.

Data Source Create

Creates, resizes, deletes, and views global arrays and text files. Global arrays
are general purpose arrays available anywhere in the model. Text files are
ascii files containing text data, used as a data source, that can be saved on
the computer's local hard drive or on the network.
Note: If you are interested in creating, editing, or viewing database tables,
use the commands in the database menu.

Value Library Blocks


Holding

Block

823

Function
Data Specs

Outputs selected specifications on data sources. Data sources can be either


ExtendSim databases or global arrays.
Each row in the table defines a specification whose value will be output on
the corresponding variable output connector on the block.

Read

Reads data from a data source to be used in a model. The data sources supported are the ExtendSim database, global arrays, Excel workbooks, Text
Files, and local tables.
You can specify whether you want to read a single number or a row or column of data and you can specify when the data should be read.

Write

Writes data from a model to a data destination. The data destinations supported are: ExtendSim databases, global arrays, Excel Workbooks, Text
Files, and Local Tables.
You can specify whether you want to write a single number or a row or column of data, and when the data should be written.

Holding
The blocks in this category are used to accumulate or store contents.
Block

Function

Holding Tank

Accumulates the total of the input values, and allows you to request an
amount to be removed if it is available. You can also choose to allow a
request that would make the contents go negative (such as an overdraft).
You can specify that the inputs are summed or integrated.

Wait Time

Holds its inputs for a specified amount of simulation time (the delay)
before passing them to the output. This block works like a conveyor with
slots: values come into a slot, advance position based on an advance in simulation time, then exit when their slot reaches the end of the conveyor.
Note: This block should not be used in a discrete event model.

Appendix

824

Value Library Blocks


Inputs

Inputs
The blocks in this category generate values to be used as inputs for other blocks.
Block

Function
Constant

Generates a constant value at each step. You specify a constant value in the
dialog (the default constant is 1.0). This block is typically used for setting
the value for inputs to other blocks. For example, you can use it for a
steady flow of fluid, cash, or a delay time value.
If the ValueIn input on the left is connected, the input value is added to
the constant in the dialog and the sum of those two numbers is output.

Pulse

Outputs a true value (1) at specified times, and a false value (0) at all other
times. In the dialog, you specify the time between outputting true values
(the delay or time out); the dialog value is overridden by the D connector.
The R connector resets the block back to the beginning of the delay
period.

Random Number

Generates random integers or real numbers based on the selected distribution. You can use the dialog or the three inputs, 1, 2, and 3 to specify arguments for the distributions. You can select the type of distribution or use
an Empirical Table. The Empirical distribution uses a table to generate a
discrete, stepped, or interpolated distribution.

Simulation
Variable

Outputs the value of a simulation variable. It is usually used in conjunction


with a decision-type block, for example, to halt a process after current time
reaches a certain value. The variables you can use are: current run number,
current step, current time, end time, number of runs, number of steps,
start time, time step, and random seed.

Math
The blocks in this category are used to perform mathematical calculations and functions.

Appendix

Block

Function
Decision

Makes a decision and outputs TRUE or FALSE values based on the inputs
and defined logic. The dialog lets you perform the following tests comparing A to B: greater than, greater than or equal to, equal to, less than, less
than or equal to, and not equal. You can also test for A being an invalid
number (noValue). The block can be set to use hysteresis.

Equation

Outputs the results of the equations entered in the dialog. You can use
ExtendSim's built-in operators, functions, and some or all of the input values as part of the equation. The equations can have any number of inputs
and any number of outputs.

Value Library Blocks


Model Analysis

Block

825

Function
Integrate

Integrates the input values over time using either Euler or Trapezoidal integration methods. If present, an initial value is added to the outputs.

Lookup Table

Acts as a lookup table (x in and y out) that are used to calculate what the
output value would be for the given input. Input values can come from an
input connector (the default) or can be simulation time. The output can
be discrete, interpolated or stepped.

Math

Performs a selected mathematical operation on its inputs and outputs a


result.

Max & Min

Determines the maximum and minimum values from among the values
input. The dialog shows the maximum and minimum values and the input
connectors they came from. The block outputs the maximum or minimum values and the respective connector number.

Query Equation

Intelligently searches a database and reports the best-ranked record and its
field values. Outputs to database or connectors.

Time Unit

Converts the value at the input connector from one time unit to another.

Model Analysis
The blocks in this category are used to find optimum parameter and input values for your simulation.
Block

Function
Searches for the best set of model parameters that maximizes profit or minimizes cost, given parameter limits and any entered constraints. Uses evolutionary strategies that are similar to genetic algorithms.

Appendix

Optimizer

826

Value Library Blocks


Outputs

Block

Function

Scenario Manager

(AT and Suite versions only) Evaluate and compare different model configurations with results.

Outputs
The blocks in this category output data to files or to display.
Block

Function
Command

Sends Excel macro or general DDE commands to a spreadsheet application


when triggered by the Send connector.

Display Value

Displays the value at the input connector on each simulation step. This is
useful for debugging models and scripts because you can display the value
of a block's value output connector at any time.

Notify

Notifies the user when an event occurs. The notification can take the form
of playing a sound, stopping the simulation, or querying the user for a new
input value.

Routing
The blocks in this category route values or decide which values to use.
Block

Function
Outputs values thrown from a Throw Value block. You specify in the dialog of the block which throw block(s) this block is connected to. This
block is typically used for passing a value from one point in a model to
another without using connectors, in conjunction with Throw Value
blocks.

Select Value In

Selects its output value to be one of its inputs according to the value of the
select connector. Up to 253 inputs can be used.

Appendix

Catch Value

Select Value Out

Sends its input value to one of its outputs according to the value of the
select connector. Up to 253 outputs can be used.

Value Library Blocks


Statistics

Block

827

Function

Throw Value

Throws a value to one or more catch blocks in the model. You specify in
the dialog of the block which catch block(s) this block is connected to.
This block is typically used for passing a value from one point in a model
to another without using connectors, in conjunction with Catch Value
blocks.

Statistics
The blocks in this category report and clear statistics on various blocks.
Block

Function

DB Statistics

Calculates statistics for all of the records in a database field.

Clear Statistics

Clears the statistics in various blocks in a model at a specific time or event.


Useful in reducing the effects of warm-up in a model.

Mean & Variance

Calculates the mean, variance, and standard deviation of the values input
during the simulation.

Statistics

Collects common statistics from blocks in a model into a single table. You
can select which types of blocks will have their information collected. The
choices are Activity, Mean & Variance, queue, Resource Item, Resource
pool, or mixed.

Appendix

Appendix

828

Value Library Blocks


Statistics

Appendix

Item Library Blocks


A detailed description of the
building blocks in the Item library

830

Item Library Blocks


Submenus

This chapter provides tables of the blocks in the Item library, separated by category. Each Item
library block has an icon that represents its function, predefined input and output connectors for
quick model building, and a dialog for entering parameters and viewing results.
The tables have brief descriptions and are useful to get an idea of a blocks functionality in your
model. For more details about the usage of a block:
Click the Help button in the lower left of the blocks dialog
Look in the index of ExtendSims online Help for the blocks name

Submenus
The blocks are listed by the block categories displayed in hierarchical submenus of the Item library
menu:
Activities: Processing items
Batching: Joining and dividing items
Data Access: Accessing global data
Information: Getting information about items
Properties: Assigns and displays properties for items
Queues: Holding, sorting, and ranking items
Resources: Representing items as resources
Routing: Moving items to the correct place
Executive: Needed in every discrete event and discrete rate model to handle events

Activity
The blocks in this category are used to process items in the model.

Appendix

Block

Function
Activity

Holds one or more items and passes them out based on the process time
and arrival time for each item.

Convey Item

Behaves as a conveyor (accumulating or non-accumulating) that moves


items from one location to another.

Transport

Transports item from one point to another based on distance and speed
information. Useful in creating models with 3D animation as this block is
the primary way to model multiple 3D objects moving at the same.

Item Library Blocks


Batching

Block

831

Function
Workstation

Behaves as a workstation that has both processing and queueing aspects.

Batching
The blocks in this category are used to join and divide items.
Block

Function
Batch

Allows items from several sources to be joined as a single item. Useful for
synchronizing resources and combining various parts of a job (kitting).

Unbatch

Produces multiple items from a single input item. This block can be used
to disassemble a kit, break a message packet into component messages,
route the same message to several places, or distribute copies of invoices.

Data access
The blocks in this category are used to access and store data in your models.
Block

Function
Read(I)

Reads data from a database when an item arrives. You can define an indefinite number of reads to be made by the block when an item passes
through.

Write(I)

Writes data to a database when an item arrives. You can define an indefinite number of writes to be made by the block when an item passes
through.

Appendix

832

Item Library Blocks


Information

Information
The blocks in this category provide information about the blocks in your model.
Block

Function

Cost By Item

Views and displays the cost of the cost accumulators that pass through it.
By using a sorting attribute or the row connector, the throughput, average
cost, and total cost can be calculated for different item types.

Cost Stats

Reports Statistics for costing blocks in a model. Place this block anywhere
in the model and it will report the following statistics for all costing blocks
in the model: Block Number (or label, if a label is entered in the block),
Block Name, Cost Per Item, Cost Per Time Unit, and Total Cost.

History

Views and displays information about the items that pass through it. You
specify which properties will be displayed. Properties can be attributes on
the item, priority values, or other more obscure values that are available on
the item.

Information

Reports statistics about the items that pass through it, such as cycle time
and TBI (Time Between Items).

Item Log Manager

(AT and Suite versions only) Creates a log of item information from the
data found in selected History blocks and blocks with Contents tabs.
Stores the data in an ExtendSim database. Reports can be customized.

Properties
The blocks in this category assign and display item properties.

Appendix

Block

Function
Equation(I)

Calculates equations when an item passes through. The equations can use
multiple inputs and properties of the item as variables, and the result(s) of
the equations can be assigned to multiple outputs and properties of the
item.

Get

Displays and outputs properties from items that are passing through. The
property value is shown in the dialog and output at the value output connector. You can specify multiple properties and multiple output connectors.

Item Library Blocks


Queues

Block

833

Function

Query Equation(I)

(AT and Suite versions only) Intelligently searches a database and reports
the best-ranked record and its field values when an item arrives. Outputs to
database, properties, or connectors.

Set

Sets the properties of items passing through the block from input connectors, values in the dialog, or databases.

Queues
The blocks in this category hold, sort, and rank items.
Block

Function
Queue

Queues items and releases them based on a user selected queuing algorithm, such as Resource pool queue, Attribute value, First in first out, Last
in first out, and Priority. Options include reneging and setting wait time.
If you need more advanced control over the queueing algorithm, consider
using the Queue Equation block, below.

Queue Equation

Queues items and releases them based on the results of user entered equations. The result(s) of the equations can optionally be assigned to properties of the item

Queue Matching

This block is useful for matching one type of item with another, such as in
reassembling parts in the correct order or to insure that subassemblies are
correctly matched with each other. Has a specified number of internal
queues for holding items in separate groups. Releases a group when there is
downstream capacity and the group requirements have been met.

Resources
Block
Resource Item

Function
This block holds and provides items (cars, workers, orders, and so forth) to
be used in a simulation. It can be used as part of an open or closed system.

Appendix

The blocks in this category represent resources.

834

Item Library Blocks


Routing

Block

Function

Resource Manager

(AT and Suite versions only) Develop sophisticated resource structures and
requirements.

Resource Pool

This block holds resource pool units to be used in a simulation. These


units limit the capacity of a section of a model. For example, this could be
used to represent a limited number of tables at a restaurant. The Resource
Pool block works with the Queue block in Resource Pool mode and the
Resource Pool Release blocks.

Resource Pool Release

Shift

Shutdown

Releases a resource back to its resource pool as an item passes through.

Generates a schedule over time which can be used to change the capacity of
other blocks in the model. Multiple Shift blocks can be connected together
to create complex shift patterns. For example the typical 40 hour work
week can be built with two connected Shift blocks, the first containing the
work days, the second contains the work hours.
Generates shutdown information for activities in the Item library and
valves in the Rate library according to inputs or distributions specifying
time between failures and time to repair.

Routing
The blocks in this category move items to the correct place.

Appendix

Block

Function
Catch Item

This block catches items sent by Throw Item blocks without using connection lines. Any number of Throw Item blocks can send items to a Catch
Item block.

Create

Provides items or values for a discrete event simulation at specified interarrival times. Choose either a distribution or a schedule for the arrival of
items or values into the model.

Item Library Blocks


Executive

Block

835

Function
Exit

Passes items out of the simulation. The total number of items absorbed by
this block is reported in its dialog and at the value output connectors.

Gate

Limits the passing of items through a portion of the model, either by


demand or by using a sensor connector to monitor how many items are in
a section of the model.

Select Item In

Select Item Out

Throw Item

Selects items from one input to be output based on a decision.

Selects which output gets items from the input, based on a decision

This block throws items to a Catch block without using connection lines.
Any number of Throw blocks can send items to a single Catch block. You
could use the Throw and Catch blocks instead of using Combine blocks,
even from inside one hierarchical block to inside another one.

Executive
The block in this category is needed in every discrete event and discrete rate model to handle
events.
Block

Function
Executive

This block must be placed to the left of all other blocks in discrete event
and discrete rate models. It does event scheduling and provides for simulation control, item allocation, attribute management, and other discrete
event and discrete rate model settings.

Appendix

Appendix

836

Item Library Blocks


Executive

Appendix

Rate Library Blocks


A detailed description of the
building blocks in the Rate library

838

Rate Library Blocks


Block descriptions

This chapter provides a brief description of the blocks in the Rate library. There are no block categories used in this library. For more details about the usage of a block:
Click the Help button in the lower left of the blocks dialog
Look in the index of ExtendSims online Help for the blocks name

Block descriptions
The following table is useful to get an idea of a blocks functionality in your model. More details
about usage of a block can be obtained in two ways:
Look in the index of ExtendSims online Help for the blocks name
Click the Help button in the lower left of the blocks dialog

Appendix

Block

Function
Bias

Prioritizes the flow going through it, and thereby allows you to specify a
preference for where the models flow should be directed. The bias from a
Bias block is by definition stronger than the bias from any Merge or
Diverge block.

Catch Flow

Receives flow from non-connected Throw blocks. The Throw Flow and
Catch Flow blocks (and the Merge and Diverge blocks in certain modes as
well) can be used to move flow without the use of connection lines.

Change Units

Changes the flow unit of measurement. Blocks that are connected together
through flow connections and share the same flow unit are called a unit
group. The Change Units block uses the conversion factor to create a new
unit group. This causes the blocks downstream of the Change Units block
to be in a unit group different from its upstream blocks.

Convey Flow

Add a delay to the flow available at the output of the block. The Convey
Flow is FIFO and can be accumulating or non-accumulating.

Diverge

Distributes the input flow to two or more outputs. Systems modeled using
discrete rate technology frequently have one flow stream that needs to be
split (or diverged) into multiple streams (referred to as branches). It has
seven different rule-based options that define how the inflow will be distributed across the outputs.

Interchange

Acts as a Tank interfacing between Flow and Items. The Tank acts as
source, intermediate storage, or sink.

Rate Library Blocks


Block descriptions

Block

839

Function
Merge

Merges flows from multiple inputs into one output. Systems modeled
using discrete rate technology frequently have multiple flow streams
(referred to as branches) that need to be merged into one stream. It has
seven different rule-based options that define how the inflow will be
merged from all inputs.

Sensor

Displays potential upstream supply and potential downstream demand in a


Flow branch.

Tank

Acts as source, intermediate storage, or sink. As a residence type block the


Tank has the capacity to hold defined amounts of flow as time advances. If
a Tank has no outflow connection, by definition it is being used as a sink.
Conversely, if a tank has no inflow connection, by definition it is being
used as a source.

Throw Flow

Sends flow to non-connected Catch blocks. The Throw Flow and Catch
Flow blocks (and the Merge and Diverge blocks in certain modes as well)
can be used to move flow without the use of connection lines.

Valve

Controls, monitors, and transfers flow. This block places an upper bound
on the rate at which flow is allowed to pass through. Goals can be set up to
control flow.

Appendix

Appendix

840

Rate Library Blocks


Block descriptions

Appendix

Utilities Library Blocks


A detailed description of the
building blocks in the Utilities library

842

Utilities Library Blocks


Submenus

This chapter provides tables of the blocks in the Utilities library, separated by category. Each Utilities library block has an icon that represents its function, predefined input and output connectors
for quick model building, and a dialog for entering parameters and viewing results.
The tables have brief descriptions and are useful to get an idea of a blocks functionality in your
model. For more details about the usage of a block:
Click the Help button in the lower left of the blocks dialog
Look in the index of ExtendSims online Help for the blocks name

Submenus
The blocks are listed by the block categories displayed in hierarchical submenus of the Utilities
library menu:
Developer Tools: Provides information about OLE objects
Discrete Event Tools: Managing and reporting on discrete event models
Information: Getting information about the model
Math: Performing mathematical calculations
Model Control: Controlling how the model runs
Time: Working with time functions

Developer Tools
The block in this category provides information about OLE objects.
Block
Object Mapper

Function
Gets information about IDispatch properties and methods exported by
activeX controls or objects that have been embedded or automated. It is
useful for those needing to navigate the object model of an outside application or an embedded object via Extend's OLE programming capabilities.

Discrete Event Tools


The blocks in this category are used to manage and report on discrete event models.

Appendix

Block

Function

Event Monitor

Displays the event calendar in discrete event models, revealing the event
times for all event posting blocks.

Item Messages

Displays detailed information about the messages used to pass items. This
block is invisible to the items and messages and passes each message it
gets on to the next block. Also see the Record Message block, below.

Utilities Library Blocks


Information

Block

843

Function
Link Alert

Registers a section of a database so that the block receives a message when


data in the linked database changes.

Queue Tools

Views and optionally initializes the contents of a queue via tables. Connect
the input connector to the length (L) connector on a queue (this is the
only type of connector that can be connected to this block).

Record Message

Records all the messages that pass between two value connections in a discrete event model. Also see the Item message block, above.

Stop Message

Transfers the value from the input to the output without relaying any discrete event messages. The output connector is set equal to the input connector, but the message is not sent out through the output connector.

Information
The block in this category provides general model information to the user.
Block

Function
Block Info

Count Blocks

Find and Replace

Calculates the number of blocks of each type in the model.

Drag a clone of a dialog item onto this icon to search for similar dialog
items. You can also manually enter search criteria into the dialog.

Calculates the amount of memory required for each block, global array, or
database table in the model. It is helpful in locating where memory is being
used in large models.

Appendix

Memory Usage

Reports information (name, number, position, etc.) about the block connected to its input connector.

844

Utilities Library Blocks


Math

Math
The blocks in this category perform mathematical functions.
Block

Function
Data Fitter

Uses matrix techniques to obtain a least mean square curve fit to a set of
data. Both the data and the fitted curve are output during a simulation
through the output connectors (D and F, respectively).

Model Control
The blocks in this category provide various means of controlling the simulation run.
Block

Function
Buttons

Creates a pushbutton interface for a model. An equation is executed whenever the button is pushed. The button itself can be cloned to the model
worksheet, notebook, or hierarchical block to create a user interface for the
model.

Feedback

Helps resolve feedback calculation order issues in continuous models. This


is only for advanced use and only to be used in situations where you know
that you have a calculation problem that is based on the simulation order
of a feedback loop.

Meter

Displays the input relative to minimum and maximum values set in its dialog.The color and pattern can change when the current value reaches specified values. Useful as a progress bar or to animate hierarchical blocks.

Model Interface

Appendix

Pause Sim

Creates an interface for controlling a model.

Causes the simulation to pause when certain conditions are met.

Popups

Allows you to define a custom popup menu that you can clone to the
worksheet and also use as a numeric input to your model. Outputs the
value of the popup defined in the dialog, which is usually cloned to the
worksheet.

Run Model

Primarily used to clone out the Run Simulation Now button onto the
worksheet or notebook. This can also be done with the Buttons block.
Runs the simulation when the Run Simulation Now button is pressed.

Utilities Library Blocks


Time

Block

845

Function
Slider

Provides a flexible slider for models. It can be cloned to the worksheet or


Notebook, be linked to a database, and more.

Switch

Defines a switch for use on a model worksheet. Differs from the use of the
switch control defined in the model menu in that it sends out a message if
it is in a discrete event model.This will have the effect of making the other
blocks in the model react immediately to the switch click.

Time
The blocks in this category work with time functions in the model.
Block

Function
RealTimer

Shows the duration of a simulation in real time. It should be placed at the


far right side of the model worksheet.

TimeSync

Synchronizes the model to run in real time. It does this by pausing on each
simulation step until the amount of simulation time that has passed equals
the amount of real time that has passed. This is only effective if the model
is running faster than real time.

Appendix

Appendix

846

Utilities Library Blocks


Time

Appendix

Upper Limits
A list of the maximum numbers of things
that you can do at one time

848

Upper Limits

Like every program, ExtendSim has its limits. It is unlikely that you will find them in your normal
work, but it is good to know what they are. Note: Some limits depend on available memory.
Steps in a simulation run

2 billion

Number of simulations in a multiple run

2 billion

Block name or label length, characters

31

Blocks in a model

2 billion

Blocks in a library

200

Libraries open at one time

40

Text files open at one time

200

Databases per model

2 billion

Tables per database/fields per table/records per table

2 billion/1,000/2 billion

Output connectors in a model (nodes)

2 billion

Connectors per block

255

Length of a blocks ModL code (characters)

4 megabytes

Dialog items in a block

1024

2D animation objects per block

255

Dynamic arrays (each array)

2 gigabytes

Number of array dimensions

Maximum index for array dimensions

2 billion elements total

Dynamic arrays per block

255

Columns in a table

255 (data table); 255 (text table)

Total table size (cells) per block for static data tables

3260 (data table); 2030 (text table)

Total table size (cells) each, for dynamic data tables

2 billion

Appendix

Variable name length: dialog item msgs, connector names 63


Variable name length: ModL local, static variables

127

Maximum popup menu length

5100 characters or 20 strings

User defined function arguments

127

Nested loops

32

Maximum, minimum of real numbers

1E308

Maximum, minimum of integer numbers

2,147,483,647

Significant figures in real calculations

16 (double)

Number of attributes for discrete event item

500

Appendix

Cross-Platform Considerations
File conversion, file name comparisons, and keyboard shortcuts
for the Windows and Macintosh operating systems

There never were, since the creation of the world,


two cases exactly parallel.
Lord Chesterfield

850

Cross-Platform Considerations
Libraries

Libraries
Libraries are located in the ExtendSim9\Libraries folder, but can be in subfolders within that
folder. Libraries needed by a model can also be at the model file location.
Windows: ExtendSim supports library file names up to 64 characters. Library names must end in
the .LIX extension.
Mac OS: Library names can be up to 31 characters long and usually end in Lib, although this is
not required.

Models
For Windows, ExtendSim supports long file names. All Windows models must end in the
.MOX extension. Mac OS model names can be up to 31 characters.

Menu and keyboard equivalents

Appendix

The following table lists some common actions and keyboard shortcuts under the Windows and
Mac OS systems. Appendix A: Menu Command Reference starting on page 782 contains pictures of the ExtendSim menus, including the keyboard equivalents for the menu commands.
Action

Command

Windows keyboard

Mac OS keyboard

Open a model

File > Open

CTRL+O

CMND+O

Open a library

Library > Open Library

CTRL+L

CMND+L

Save a model

File > Save Model

CTRL+S

CMND+S

Close the active


window

File > Close

CTRL+W

CMND+W

Run a simulation

Run > Run

CTRL+R

CMND+R

Stop a simulation

Run > Stop

CTRL+period (.)

CMND+period (.)

Stop a library search

CTRL+period (.)

CMND+period (.)

Select a parameter
Edit > Sensitize
for sensitivity analy- Parameter
sis
(Select parameter first)

Hold down the CTRL Hold down the CMND


key and click once on key and click once on the
the parameter
parameter

Open a hierarchical Develop > Open Block


blocks structure to Structure
edit the icon, etc.
(Select block icon first)

Hold down the Alt key Hold down the Option


while double-clicking key while double-clicking
on the blocks icon
on the blocks icon

Open a library
blocks structure to
edit the Modl code
or icon

Hold down the Alt key Hold down the Option


while double-clicking key while double-clicking
on the blocks icon
on the blocks icon

Remove the grid


when aligning drawing objects, connectors, etc.

Develop > Open Block


Structure
(Select block icon first)

Hold down the Alt key Hold down the Option


while moving the
key while moving the
object
object

Cross-Platform Considerations
Transferring files between operating systems

Action

Command

Proportionately
scale drawing object

Windows keyboard

Mac OS keyboard

Hold down the Shift


key while resizing the
object

Hold down the Shift key


while resizing the object

851

Transferring files between operating systems


The Windows and Mac OS versions of ExtendSim are cross-platform compatible. For example, if
you build a model or a library on your Windows computer, you can move it to a Mac OS computer and ExtendSim will read it, and vice versa.
There are three considerations when transferring ExtendSim files between Windows and Mac OS
systems: file name adjustments, physical transfer, and file conversion.

Models and libraries developed in an older version and different platform may not transfer successfully. It is strongly recommended that you upgrade to the latest version on the source platform, resave the structure of any hierarchical blocks stored in libraries (see Saving hierarchical blocks to a
library on page 605) and recompile any libraries that you have created. Then re-save your models
before transferring your files.

File name adjustments


Windows to Mac OS: If you are transferring files from a Windows computer to a Mac OS, you
do not need to change the file name or delete the extension; the Mac OS system can read names
up to 31 characters long.

It is important that you do not delete the MOX extension from a Windows model file name before

transferring the model to your Mac OS system. The MOX extension is required so ExtendSim can
identify the file as a Windows model. After ExtendSim has converted the Windows model to Mac
OS format, save the model under the same name or a new name.
Mac OS to Windows: If you transfer files from a Mac OS to a Windows computer, you may
need to change the name of your file before you transfer it. ExtendSim supports file names of up
to 64 characters for Windows. File names must end in a three-character extension (the extensions are .MOX for ExtendSim model names, .LIX for library names, and .TXT for text
file names). To change your file names to Windows format, change the name of the file on the
Mac OS computer using ExtendSims Save As command (if the file is open) or using the Finder
(if the file is not open).

Physically transferring files

Libraries and extensions created on a Mac OS computer need to be converted before being physically transferred to the Windows system, as discussed below.

File conversion
Depending on the type of file, file conversion may be handled automatically by ExtendSim or may
involve using a conversion application. As discussed below, ExtendSim automatically converts
model files when they are opened on a different platform. If you program your own blocks, the

Appendix

Once you have made any necessary file name adjustments, physically transfer the files between
Windows and Mac OS computers. This process depends on your system resources and is independent of ExtendSim. For example, you might copy the file onto a memory stick. Or you could send
the files directly from one computer to the other if the computers are networked.

852

Cross-Platform Considerations
Transferring files between operating systems

ExtendSim for Mac OS package includes a file conversion utility which you can use to convert
libraries and picture resource extensions from one operating system format to another. Other
extensions that you build, such as QuickTime movies, DLLs, and Shared Libraries require more
extensive conversion. Include files are, of course, already cross-platform compatible.
Model files
The Windows version of ExtendSim can read ExtendSim model files created on the Mac OS as
long as the name format is correct, as discussed above. The Mac OS version of ExtendSim can read
ExtendSim model files created under Windows without file name modification (in fact, as discussed in the Note above, the MOX extension should not be removed.) When you open a model
file that was created on another operating system, ExtendSim will notify you that it is converting
the file from that system to the current one. Once you save the model file, it will be in the format
of your current operating system.
If your models (including hierarchical blocks) use libraries that you have created yourself, and you
have changed the name of those libraries, ExtendSim will not be able to locate the library. In this
case, ExtendSim will ask you to find and select the correct library as described in Searching for
libraries and blocks on page 549. Keeping all your libraries in the Libraries folder will make this
search process easier. Saving the model will cause the new libraries to be used from then on.
For model files that have blocks that access text files (such as the Read block from the Value
library), you may need to change the name of the text file that is being read to conform to platform
requirements, as discussed above. Be sure to also change the name of the file in the Read blocks
dialog to correspond to the new file name.

The first time you run a model that has been transferred from one operating system to another, any
Equation blocks in the model will recompile to the format of the new system at the beginning of
the simulation run. Messages that report this process may appear too quickly for you to read.

Hierarchical blocks in libraries


If you have a hierarchical block saved in a library and you have renamed any of the libraries of the
blocks inside the hierarchical block (for example, to comply with Windows format), you need to
update the hierarchical blocks information so that it can locate the renamed libraries. The easiest
way to do this is to drag hierarchical blocks from their libraries, place them on a worksheet, and
update their structure, as discussed below.

This is only required for hierarchical blocks saved in libraries; hierarchical blocks saved only in a
model get updated with the model.

Appendix

When you add a hierarchical block from a library to a model worksheet, the hierarchical block
causes ExtendSim to open the libraries of the blocks inside it. Since you have renamed those libraries, ExtendSim will not be able to locate them. In this case, ExtendSim will ask you to find and
open the correct libraries. Note: keeping all your libraries in the Libraries folder will make this
search process easier.
If you save the model worksheet that contains the hierarchical block, the location of the renamed
libraries is saved for the model only. Before you close the model worksheet, you also need to
update the hierarchical blocks library information. To do this, open the hierarchical blocks structure window and then close it, causing the hierarchical blocks Save dialog to appear. In the dialog,
choose Also save to library. This process is described in Summary of results of modifying hierarchical blocks on page 608.

Cross-Platform Considerations
Transferring files between operating systems

853

Libraries
The libraries that come with your ExtendSim package are already formatted correctly for your
operating system. However, if you build your own libraries, and want to transfer them to a computer running a different operating system, you must convert them to the appropriate operating
system format. You do this on the Mac OS computer using the Libraries > Tools > MacWin Conversion command (See MacWin Conversion (Mac OS only) on page 801). This converts libraries to the specified operating system format, ensures that the file names are properly formatted,
and so forth.
After the libraries have been converted to Windows or Mac OS format, physically transfer them to
the target computer (that is, keep them on the Mac OS or transfer them to a Windows computer).
Then recompile the libraries under the target computers operating system using the Library >
Tools > Compile Open Library Windows command.
The MacWin Conversion converts libraries to either Windows or Mac OS format. After conversion, you must recompile the library on the target computer. When you do this, the library will
compile to native code for the target system. For example, if you compile on a Windows computer,
the library will be in native Windows mode. If you compile on a Power Mac OS computer, the
library will be in native Power Mac OS mode.
Blocks that use the equation functions
If you build blocks that use the equation functions, your code needs to detect if the model is being
opened on a different platform. See the ExtendSim Developer Reference for more information.
Extensions
Extensions are files (such as pictures and DLLs) that can be accessed by ExtendSim to fulfill specialized tasks. Like libraries, the extensions that come with your ExtendSim package are formatted
correctly for your operating system. However, if you build your own extensions, and you want to
transfer your extensions or blocks to a computer running a different operating system, you will
need to do some conversion:
Pictures: As discussed in the Developer Reference, ExtendSim for Windows accepts three kinds
of pictures: WMF (Windows MetaFiles), BMP (Bitmap), and a Mac OS picture resource file
that has been converted to Windows format. ExtendSim for the Mac OS accepts only picture
resources. To convert Mac OS picture resource files to Windows format, use ExtendSims MacWin Converter utility on the Mac OS. To convert Windows pictures to Mac OS format, use a
graphics conversion application.
Sounds: Shareware utilities are available to convert Mac OS sound resources (SNDs) to Windows sound files (.WAV) and vice versa.

For more information, see the Developer Reference.

The following ModL constants return TRUE or FALSE depending on the platform: PLAT-

FORMMAC; PLATFORMWINDOWS; PLATFORMPOWERPC. You can use these constants


in an if statement to make your code be cross-platform capable. For
example:

Appendix

DLLs and Shared Libraries: On Windows the DLL functions will search the ExtendSim
Extensions folder for a DLL file. For the Mac OS those same calls will search for a Shared
Library file.

854

Cross-Platform Considerations
Transferring files between operating systems

if (PLATFORMWINDOWS)
windows specific code
else if (PLATFORMMAC)

Appendix

macintosh specific code

Index
Symbols
_3D objectID property
ObjectID 522
_Animation property 206
_cost attribute 271, 275
_Item priority property 126
_Item quantity property 129, 206
_rate attribute 271, 275
+/- button 30

Numerics
3D Animation tab (Simulation Setup) 535, 579
3D Bank Line Advanced model 488
3D Bank Line Final model 474
3D Bank Line Start model 475
3D camera 455
3D Controller block 470, 507, 541
3D objectID property 130
3D Options tab of 3D Controller block 541
3D Position (X, Y, Z) option 538
3D Scenery block 505, 541
3D tab (Options command) 507, 534, 797
3D Text block 505, 542
3D window outside application option 457, 534, 797

A
ABC (activity based costing) 268
About ExtendSim command 819
Access 765
accumulate data 285, 625
with Holding Tank block 286
accumulating conveyor
Convey Flow block 400
Convey Item block 195
accumulation point 402
Action menu (E3D Editor) 528, 544
ActiveX 763
automation 763
COM (Component Object Model) 764

ActiveX Data Objects 765


activities
definition 93

scheduling 179
activity based costing 268280
Activity block 830
contents 698
Item Animation tab 538
multitasking 190
Preempt tab 184
preemption options 184
processing items 170
processing options 173
Shutdown tab 185
tutorial 104
ad hoc experiments 630
Add All To Report command 672, 815
Add All To Trace command 708, 817
Add Connection Line Animation command 814
Add Debug Code to Open Library 800
Add External Code in Open Library 800
Add Named Connection Animation command 814
Add Selected To Report 672, 815
Add Selected To Trace command 708, 817
Add-In for ExtendSim database
Check Database Consistency 741
Find Database Table 742
address (of a data structure) 752
ADO 765
Advanced Resource Management (ARM) 229
blocks in the system 260
definitions of terms 230
how it works 229
policies 251
pools of resources 241
release rules 250
resource orders 247
Resource Pool blocks in 232
resource requirements 252
statistical information 241
tutorial 230
advanced resources 230, 231
Advanced Resources database 260, 261
agent-based modeling 51
Air Freight with Item Log model 285
Airline Security model 459
Align command 620, 803
allocate item availability 299

856

Index

Allow data table titles copying option 798


Alt key 802, 811
Alternate path option 549, 793
analysis methods
scenario analysis 632
anchor point 33
Animate 3D block 542
Animate Item block 612
Animate Value block 612
Animating Queue Contents model 146
animation
2D 609615
3D 448544
Block Animation tab 468, 538
Change all items to option 611
Change item animation using property option 611
debugging with 615, 696, 705
Do not change item animation option 611
functions 614
Item Animation tab 537, 610
pictures (adding) 614
animation (2D) 609615
Animate Item block 612
Animate Value block 612
animating item movement 610
faster button 609
for Item library blocks 610
for Rate library blocks 428
hierarchical blocks icon 612
Item Animation tab 610
object 613
pictures (selecting) 610
Show 2D Animation command 813
slower button 609
animation (3D) 448544
3D Animation tab (Simulation Setup command) 579
and hierarchical blocks 532
Block Animation tab 538
Buffered mode 536
changing the resolution of the window 455
collidable objects 537
Concurrent mode 467, 535
controlling 541
conversion ratios 579
custom paths 525
displaying text 542
environmental effects 507
executing actions 542
features 449

internal animation 470


introduction 448
Item Animation tab 537, 610
linking objects to block positions 471
mode selection 579
modes 458
mounting objects 471
objects (creating and using) 500522
objects to represent blocks 468
objects to represent items 467
opening the E3D window 454
performance considerations 533
prerequisites for 451
QuickView mode 535
QuickView mode vs Concurrent/Buffered mode 458
rotation of objects 470
running a model with 460
saving changes after modifying objects 518
scenery 469, 505, 541
Show 3D Animation command 814
speed controls 455
Terrain modes 496
Torque Game Engine 451
Transport Animation tab 539
tutorial 464
using an equation-type block 532
World modes 494
Animation 2D-3D library 546, 612
Animation Faster button 591, 609

Animation library (legacy) 548


animation object for 2D animation 613
Animation Slower button 591, 609, 705
Antithetic random variates option 578
Append New Field command 730, 807
Append New Records command 807
application areas
continuous modeling 61, 74
discrete event modeling 98
discrete rate modeling 310
application messages 592
link alerts 592
AR (advanced resources) 230
arguments for distributions 686
ARM method
215
ARM system 229
Array connector 556, 603
arrays
dynamic 745

857

Autoscale tools 666


autoscaling 35
Autostep options 576
axis (changing) 35

B
backup files 783, 798
BAK files 783, 798
balking 135
Balking model 135
Bar Chart block 669
Batch and Unbatch Variable model 209
Batch block 201, 831
batching items 200
Item Animation tab 537
Mount objects option 538
options for 3D animation 537
batch into one item 201
Batch means 625
Batch Mode Merge model 375
Batch on Demand model 205
batch size 209
batch/unbatch mode 375
batched value 210
batching 200207
_Animation property 206
_Item quantity property 206
attribute options 206
batch size 201
Batch tab 201
delay kit at... 207
item properties 205
matching items 203
on demand 205
Options tab 201
priority options 206
Properties tab 206
resources with items 219
simple 203
using item attributes 203
variable number of items 204, 209
Batching and Unbatching model 208
Batching Variable model 204
beta distribution 687
Bias block 419, 838
bias order 381, 419
displaying 424
effective rate calculations 419

Index

global 743745
arrival times 115119
Arrivals and Activity model 228
Arrows option (connection lines) 616
ASCII files
text files 761
assumptions, changing 19
attributes
system 275
attributes (flow)
definition 339
displaying 342
Get(R) block 342
layers 341
merging and diverging 382
mixing with item attributes 343, 415
names 339
string 339
string layer 300, 339
types 339
values 339
attributes (item) 119126
_cost 271, 275
_rate 271, 275
arrays 125
costing 275
DB address 120, 123
deleting 299
example of use 108
for setting processing time 176
introduction to 96
managing 299
mixing with flow attributes 343, 415
removing 220
renaming 299
resource blocks 220
string 120, 123, 299
string, creating a 108
stripping 220
to hold cumulative values 285
types 120
using 121
value 120, 123
Attributes for Routing model 161
attribute-sorted queue 133
Auto Club Emergency Service model 238
AutoCAD files 784
Automatic search option 549, 553, 793
automation (ActiveX) 763

858

in Merge and Diverge blocks 420


setting 421

Index

biasing flow 418


binomial distribution 687
bitmap pictures 853
Black Connections command 616
block 554559
adding to a model 20, 26
adding to a model using the Library Window 771
arranging in libraries 553
bad 560
categories (Value library) 822
category 794
category (finding) 697, 788
code management (CM) 772
compiling 552, 800, 809
connecting blocks 28
connection methods 33
connectors 15
continuous 60
copying to another library 560
corrupted 560
custom block models 81
custom continuous blocks 60
customizing 554
debugging code 772
decision type 300
deleting 20
dialog items (new) 810
dialogs 16
duplicating 39
duplicating in libraries 560
equation-based 677682
for data management and exchange 750
Help block (creating) 572
Help button 16
help text 554
icons 15, 554
information about 786
labels 15, 848
labels (finding) 697, 788
labels (showing) 803
linked to 3D object 471
messages 305, 445, 593
modifying 809
moving 27
MYO (make your own) 94
names 15, 697, 848
names (finding) 788
new 808

number (global) 788


numbers (finding) 697, 788
numbers (showing) 804
passing type 300
profiling code 817
programming 60
property aware 115
random number generator 684
red border around icon 772
removing block from model 20
removing from libraries 560
renaming 560, 809
residence type 300
searches 550
Sensor 431
statistics 624
storing in libraries 26
structure 809
structure window opens in front 795
submenus for Item library 830
submenus for Value library 822
substituting one for another 550
templates for item blocks 300
types 300, 301
types (mixing) 89

Block Animation tab 538


selecting an object to represent the block 468
waypoints to represent blocks 468

Block Info block 843


block messages
in discrete event models 305
in discrete rate models 445

block number
global 697
local 559
showing 804
block type table 301
block units 350
defining 351
introduction 315
blocking 159, 172, 189
definition 135
due to shutdown 190
in a Valve 423
in the Select Item Out block 155
using buffers to prevent 167

blocking of items 172


BlockNumber property of 3D objects 522
blue frame around parameter field 720

859

BMP (Bitmap) 614


Boids model 54
Boolean checkbox option 739
Border command 799
Border Thickness command 620
BPR library (legacy) 548
Breakout model 54
breakpoints 702
conditional 704
Breakpoints window 703, 704
Brush menu (E3D Editor) 528, 544
Bucket Elevator 1 model 414
Bucket Elevator 2 model 415
Buffered mode 536, 579
Buffering Operations model 164
building a model 25
buttons
Database (ExtendSim) 819
Open Notebook command 19
Pause/Resume 20
Run Simulation 18, 33
Buttons block 565, 844

Index

CAD files (importing) 784


Calendar command 818
Calendar date definition option 575
calendar dates 223
defining non-calendar date 575
enabling 586
calendar format example 223
calendar of events 303
camera 455
Camera menu (E3D Editor) 543
capacity
full and not-full 347
in a Tank block 347
in Convey Flow block 348
maximized in Convey Flow block 349
Rate library blocks 347
Car Wash model 102
Catch Flow and Diverge model 386
Catch Flow and Throw Flow model 386
Catch Flow block 384, 838
Catch Item block 152, 161, 834
groups 153
routing items 148

Catch Value block 826


categories of blocks 794
Item library 830
Utilities library 842
Value library 822
Cauchy distribution 687
central tendency of distribution 686
Change all items to option 537, 611
Change item animation using property option 537,
611
Change Model Style command 619, 803
Change Rate model 276
Change Units block 325, 327, 838
changing flow units 352
relational constraints 361
Changeover Quantity Goal model 392
Changeover With Only Goals model 395
changing
assumptions 19
libraries 793
parameters 20
text 789
changing number of rows 138, 678, 680, 754
Check blocks for duplicate random number seeds option 578
Check Database Consistency option 741
Check In License command 786
Check Out License command 786
Chi Square distribution 687
Child popup selector (for database) 732
City Planning model 79
Clear command 776, 787
Clear Database command 735
Clear Statistics block 283, 626, 827
clearing data from plotters 671
Clearing Statistics model 283
client application 749, 764
for DDE link 724
Clipboard 774, 787, 792
Clone layer tool 39
Clone Selected Tables to Tab command 736, 806
clones 562564
deleting 563
finding original dialog item 563
introduction 38
moving 563
resizing 563
unlinked 564

Index

860

cloning dialog items 38, 562


Close command 782
Close Library command 799
closed systems 97, 222
partially closed 98
CM (code management) 772, 809
code management (CM) 772, 809
code-defined links 790
Collidable option 537, 538
collision of 3D objects 521
color (HSV) 621
Color Connections command 616
Color popup menu 620
column index 760
column separators 783
COM (Component Object Model) 764
Combine Priority Sensing model 443
Combine Sensing Priority model 444
Combined Rule model 142
combining resources with cost accumulators 278
Command block 759, 826
Competing Requests for Flow model 381
Compile Block command 552, 809
Compile Open Library Windows command 552, 800
Compile Selected Blocks command 552, 800
compiling
blocks 552, 809
libraries 800
component failures 188
Concurrent mode 467, 535, 579
concurrent users 785
conditional breakpoints 704
conditional routing 162
Conditional Routing model 163
confidence interval 627
confidence level 627
connection lines 615617
changing formats 617
connection line control 793
Flow connection line types 617
Item line types 617
making a multi-segment connection 33
making a right angle connection 28
making a straight connection 33
selecting 617
Smart connections 618
types of 28, 616

Value line types 617


View Using Defaults option 616
Connection Lines command 615, 802
connections 615618
anchor points 33
arrows option 616
checking 705
color options 616
connection lines 615617
daisy-chaining 89
dashed option 616
default types of lines 792
definition 15
deleting 770
flow type 314
hiding 619, 802
incomplete 705
line types 616
lines 16
multi-segment 33
named 34, 618
right angle as default style 792
right angle option 616
showing 619
Smart connections 618
straight 33
styles 616
to multiple item inputs 292
to multiple value inputs 89
types 28

connector
Array 556
arrays of connectors 556
common for Rate library blocks 426
common Item library connectors 301
compatible 558
connecting 28
definition 15
description 28
diamond 603
Flow 314, 556
hiding 802
Item 97, 556
item index 97
messages of item connectors 305, 307
messages of value connectors 305
names 604
showing 619
text object 604
tool tips 792

861

types 555, 603


Universal 556
User Defined 556, 603
Value 89, 556
variable 556
connectors 555558
BatchQuantityIn 201
D input 179
demand 163, 180, 182, 202, 205, 291
down 189
F 190
G 395
GS 393
ICO 336
PE 184
preempt 412
PT 286
R 363
S (sensor) 402
S (status) 423
SD input 186
SD output 187
select 294
sensor 291
start 182
start (on Valve) 398
StatusIn 225
StatusOut 225
TR 222

connectos
hiding 619
conserving resources 207
Constant block 824
constant distribution 687
constant values
definition 57
constraining resources 216
constraints (discrete rate)
critical 361
impact on effective rates 369
relational 361
varying over time 322

Index

constraints (optimization) 660


adding 655
equations for 657
global 656, 661
individual 656, 660
contents
empty and not-empty 335
Rate library blocks 334

Continue command 812


Continue sequence of random numbers option 577
Continue Simulation command 813
continuous
application areas 61
blocks 60
libraries 60
models 60
programming 60
tab for setting steps 576
continuous blocks
in discrete event models 294
continuous modeling 60
definition 44
feedback 87
messaging 593
step size 85
timing 84, 584
Continuous tab 576
control panel 566
Controlling Shifts model 228
controls 567
Meter 568
Meter block 844
Slider 567
Slider block 845
Switch 568
Switch block 845
Controls command 567, 803
conversion ratios (3D Animation tab) 536
Convert Library to RunTime Format command 801
Convey Flow block 399403, 838
accumulate-fill empty segments 401
accumulate-maximum density 401
accumulation point 402
animation 431
attributes 341
behavior 399
capacity 348
critical constraints 365
dialog settings 400
Indicators tab 403
initial contents 337
Initialize tab 337
length units 350
modeling with 326
non-accumulating 401
Sensors tab 402
when to avoid using 403

862

Convey Item block 195, 830


3D animation 539
accumulating 195
capacity 472
distance ratio 194
from and to locations 194, 539
item length 472
move time 193
non-accumulating 195
processing items 170
speed and calculated distance 193
speed and distance 193

Index

Stretch 3D object to conveyors length option 539


using for 3D animation 471

Copy (or Duplicate) Database command 735


Copy command 775, 787
for DDE linking 724
Copy Plot command 671
Copy Tables command 737
copy/paste 713
copying 774776
data 713
dialogs 775
from ExtendSim to other applications 775
notebooks 775
plotter data 671
plotters 775
text to Notebooks 596
within ExtendSim 774
cost accumulator 269
cost array 278
Cost attribute 130
Cost By Item block 277, 832
cost equation 659
cost rates 270
Cost Stats block 278, 627, 832
costs 268280
assigning 272
calculating 279
direct materials 271
drivers 268
fixed 268, 278
per time unit 272
per use 272
storage 271
variable 268
variable cost 278
waiting 271
Count Blocks block 843

Create block 103, 129, 834


arguments of the distributions 295
generating items 114
Item Animation tab 537
options for 3D animation 537
setting processing time 170

Create Checkout List for network licenses 785


Create Database dialog 729
Create new 3D animation object option 537
Create Users List for network licenses 785
Create/Edit Dynamic Link command 721, 789
creating flow 334
Creator Tree pane of WEC 496
critical constraints 361, 437
Convey Flow block 365
defining 362
determining 369
Diverge block 365
meeting requirements 366
Merge block 365
cross-platform compatibility 851
Cumulative Time model 178
cursor (drawing pen) 29
Custom Blocks library 547
Custom order 88
custom resource properties 249
Custom statistical method 625
Custom Time model 176
Cut command 787
Cut Databases command 735
Cut Tables command 737
cycle time 298
tracking from other than origin 299
tracking item from origin 298
Cycle Time 1 model 298
Cycle Time 2 model 299
cycling
fixed number of items 181
fixed period of time 183

D
D input connector 179
daisy-chaining 89
dashboard 564
data
blocks for data access 759
clearing from plotters 671

863

copying/pasting 713
databases for storing 726
editing in database 737
exchanging (ActiveX) 763
exchanging with external applications 748
global arrays for storing 744
import/export methods 714
importing/exporting 714
management 712767
management and exchange using blocks 750
managing 726
raw historical 661
reading 716
repository 726
sharing with external applications 724
source (organizing) 760
source indexing 760
structures (addressing) 751
structures (communicating with) 751
writing 716

data accumulation 285


Data address option 739
data exchange
copy/paste 713
user interfaces for 712
Data Fitter block 844
data fitting 686
Data Import Export block 759, 822
Data Init block 745, 759, 822
data organization 19
Data Source Create block 744, 759, 822
Data Specs block 745, 759, 823
data structures 751
addressing 751
internal (linking to) 789
data tables
linking to an ExtendSim database table 721
linking to internal structures 720
printing 773, 784
resizing button 30
row and column titles (printing) 798

database

Database Factors table


entering values 644
database list
accessing 735
mode in Navigator 771
Database List command 735, 818
Database List mode 771
Database menu 804
Database Random Distribution dialog 739
Database table
linking to 718
database window
opening 735, 804
opening with Navigator 771
structure mode 729
viewer mode 730
Date/Time option 739

Index

Access 765
external (exchanging data with) 749
external (opening links to) 791
Industry 735
internal (ExtendSim) 789
SQL 765
Database (ExtendSim) 726743

accessing with Read and Write blocks 734


Advanced Resources 260, 261
advantages of using internal databases 727
commands 804
copying, renaming, or deleting 735
creating a new database 729
creation methods (overview) 728
database management 735
Database Random Distribution dialog 739
database window 804
DB address attribute 120
DB Job Shop Query model 757
editing data 737
exporting 735
ExtendSim DB Add-In 740
Field Properties dialog 738
field type popup menu 739
formatting options 738
importing 735
importing an Industry database 735
index number 729
linking to 789
names 729
new database 729
number of databases per model 848
opening linked blocks 790
parent/child relationships 731
random number seed 578
random numbers for cells 739
Read/Write Index Checking 808
Scenario DB 634
Table Properties dialog 738
toolbar buttons 819

Index

864

Day Shift Capacity Change model 226


DB address attribute 120
defining 122
DB Job Shop Query model 757
DB Statistics 827
DBQS (database query spawn) 753
DDE (Dynamic Data Exchange) 724726
DDE (dynamic data exchange) 791
updating Excels remote references 726
DDE linking 766
DDL (dynamic data linking) 717724
debugger
Add Debug Code... 800
Continue 812
Generate Debugging Info 809
open breakpoints window 811
open debugger window 811
set breakpoints 811
Step Into 812
Step Out 812
Step Over 812
debugging 694
blocks for 695
equations 702
hints for debugging 694
Read/Write Index Checking 808
red border around block icon 772
source code debugger 702
using animation 615
Debugging command 581, 816
Decimals option 738
Decision block 163, 824
controlling the flow of items 148
decision type blocks 300
Default connection line style is right angle option 792
Default model path option 793
default view 16
default view reverse 16
Define conversion ratios option 536, 579
delay kit... 207
Delete DDE Link command 791
Delete Include File command 811
delete rows 138, 679, 680, 754
Delete Selected Records command 787
delimiters 783
delta connector 179
delta time 85
definition 84

determining 85
other than 1 85
setting 85, 576

DeltaTime variable 576


demand connector 163, 180, 182, 291
demand scarcity 378
Demand Sensing Mode Diverge model 380
density (maximum) 400
Design Mode command 791
design of experiments
maximum, minimum, step 637
methods 638
deterministic models 58
Develop menu 808
Dialog Factors table 635
dialog items
cloning 562
finding clones 563
dialog window
printing 774
dialogs 558559
copying 775
open when running 559
opening 16, 559
printing 772, 773
title bar 559
Dialogs (Text File) report 671
Dialogs report 815
discrete event
processes 93
systems 93
Discrete Event library (legacy) 548
discrete event modeling 96, 268
activity-based costing 268280
animation (2D) 610
application areas 98
architecture 95
attributes of items 119
batching items 200
blocks for 94
closed and open systems 97
continuous blocks in 89, 294
cycle time 298
definition 44
event scheduling 302
events 96
Executive block 299
item generation 115119
Item library 94

865

item movement 290


items 95
layout 95
messaging 305, 593
overview 95
posting events 304
preprocessing 293
processing items 170
queueing 132
resources 107, 214
restricting items 293
routing items 148
running 102
statistics 282
templates 300
terminology 95
time-based parameters 295
timing 584
tips 290
travel time 292
tutorial 102
values 96
zero time events 303

discrete rate modeling 350

distance
metric 793
Distance (m) option 538
distance ratio (3D animation) 579
distribute properties option 210
distribution
arguments 295
central tendency 686
list of distributions 687689
location argument 686
shape argument 686
shape of exponential 116
skewness 686
spread 686
theoretical 686
varying the arguments 295
distributional mode 378
bias order determination 424
Distributional Mode Diverge model 378
Distributional Mode Merge model 379
distributions
beta 687
binomial 687
Cauchy 687
Chi Square 687
constant 687
empirical 686, 687
Erlang 687
exponential 116, 687
Extreme Value Type 1A 687
Extreme Value Type 1B 687
gamma 688
geometric 688

Index

2D animation of blocks 428


application areas 310
attributes of flow 339
bias order 381, 419
bias order when merging/diverging 420
biasing flow 418
building a model 318
capacity 347
compared to other methods 311
competing requests for flow 381
contents 335
declaring flow units 321
defining bias order 382
definition 45
downstream demand 376, 441
dynamic constraint 322
event messages 445
Executive block flow messages 446
fixed flow rules 373
flow connector messages 446
flow rules 360
heterogeneous flows 311
homogeneous flows 311
hysteresis 397
indictors of flow 337
inflow branches 373

introduction 310
item connector messages 446
LP area 360, 435
LP technology 434
messages 445
messaging 444
outflow branches 373
overview 312
Rate block flow messages 446
rate sections 359
rates (introduction) 316
throw and catch 383
time units 350
units and unit groups 315
upstream supply 376, 441
value connector messages 445
Display Value block 590, 695, 826

866

hyperexponential 688
Hypergeometric 688
inverse gaussian 688
Inverse Weibull 688
Johnson SB 688
Johnson SU 688
Laplace 688
Logarithmic 688
Logistic 688
loglogistic 688
lognormal 688
negative binomial 689
normal 689
Pareto 689
Pearson type V 689
Pearson type VI 689
Poisson 689
Power Function 689
Rayleigh 689
triangular 689
uniform integer 689
uniform real 689
user-defined 686
Weibull 689

Diverge block 838


bias order 381, 420
bias order table 422
critical constraints 365
displaying bias order 424
features 381
fixed rule modes 420
Flow Attributes tab 382
modes (mixed in model) 443
modes (summarized) 373
non-fixed rule modes 421

Index

requirements for critical constraint 367


setting bias order 421
throwing flow 383
DLLs 571, 767, 853

Do not change item animation option 537, 611


DOE
maximum, minimum, step 637
methods 638
down connector 189
Downloads and Updates command 818
downstream demand 376
cautions when determining 441
definition 441
discrepancy with upstream supply 378
scarcity of demand 378

drag and drop editing 597


Draw Right Angle Line tool 620
drawing pen cursor 29
drawing tools 619
colors 620
patterns 620
drivers (cross-platform) 853
drop shadows in hierarchical blocks 792
Drug Ingestion model 75
dt (delta time) 84, 584
stepsize 85
Duplicate command 35, 39, 788
duplicating rows 138, 679, 680, 754
duration goal 395
Duration Goal model 395
duration of simulation 84, 584
DXF files 784
dynamic arrays 745
linking to 789
number per block 848
Dynamic Data Exchange (DDE) 724726, 765, 791
Show DDE Links command 725
dynamic data linking (DDL) 717724
dialog item to database table 733
finding linked dialogs 723, 790
finding registered blocks 790
link dialog 718
link dialog (description) 722
linking a parameter to a global array 719
linking parameter to an ExtendSim database 718
linking to a database table 721
linking to a global array 721
to a global array 721
Dynamic Link Libraries (DLLs) 571, 760, 767, 853
dynamic links to internal data structures 789
dynamic values 776
dynamically changing parameters 776

E
E3D Editor 491498
creating scenery with 506
Gizmo 493
menu commands 543
mode categories 493
Terrain modes 496
World Editor Inspector (WEI) mode 492
World modes 494

E3D environment

867

controlling 451
opening the E3D window 454
overview 449
selecting the environment file 579

E3D window
3D Animation tab 535
3D window outside application 797
associated model 456
camera for E3D window 455
closing 457
conversion ratios 536
creating paths 525
definition 449
E3D Editor 491
environment file 490, 536, 579
exploring 454458
ExtendSim icon 455
foot prints 797
interface controls 454
level of detail 797
MiniMap 455
MiniMap option 797
mouse-look toggle 457
navigation within the window 456
opening 454, 457, 470, 534
outside the application window 457
scenery 469
shadows 797
sounds in 521, 797
title bar 455
vehicle trails 797
E3D Window command 457, 534, 818

manually controlling 299


End time option 575
ENDIF 811
Enter Selection command 789
environment file 490491
Extend3Dl.mis 490
mis (mission) file 490
saving 518
selecting 579
ter (terrain) file 490
Environment file option 536, 579
Environment objects 496
Equation block 570, 824, 852
example of use 68
input variables 678
output variables 680
equation debugger 702
equation editor 69, 683
Equation(I) block 286, 570, 832
example of use 297
input variables 678
output variables 680
properties of items 114
equation-based blocks 677682
code colorization 683
code completion 683
components 678
equation debugger 702
equation editor 683
header files 683
include files 683
input variable types 678
output variable types 680
Variable Type popup for inputs 679
Variable Type popup for outputs 680
equations
blocks for 676
equation editor 683
in 3D animation 532
local (temporary) variables 678
static (permanent) variables 678
Erlang distribution 687
Euler integration 87, 690
event calendar 303
Event Monitor block 696, 842
event scheduling 302
Event Scheduling model 304
events 16, 93, 96, 302, 445

Index

Each block defines its own bias order 382


Each value unique option 738
Edit menu 787
Edit menu (E3D Editor) 543
Edit or Delete Tab command 810
Edit Table Properties command 806, 807
Editor command 455
effective rate 357
defining a zero effective rate 423
impacted by constraints 369
Electronics library 546
embedded objects
behavior 791
commands 791
empirical distribution 687
empty and not-empty 335
Enable animation of 3D object option 470, 539

End time 25, 588

868

calendar 303
current 305
future 305
generating 303
messages in discrete event models 305
posting 304
zero time 303

ExtendSim
architecture 5
capabilities for modeling 4
databases 726743
Excel Add-In 805
Help 818
icon in E3D window 455
launching an alternate Extend application 783
legacy libraries 546, 547
levels of use 5
libraries 546
LT-RunTime version 778
messaging in models 591
network licenses 785
Options command 792
source code debugger 702
support 818
updates 818
upper limits 848
whats new 818

Excel 762
and DDE linking with ExtendSim 725
exchanging data with 749
ExtendSim DB Add-In 740
ExtendSim DB command in 740
updating remote references for DDE linking 726

Excel Add-In 805


exchanging data
dynamic data linking (DDL) 717724
piece-by-piece 717

Executive block 835

Index

advanced options 424


bias information for calculation 438
bias order definitions 421
bias order determination 424
description 299
Discrete Rate tab 422
flow messages in discrete rate models 446
global options 422
in discrete rate model 314
infinite rate 422
infinite rate setting 358
introduction 95
Item Attributes tab 108
properties of items 114
update flow status 423
Valve options 423
zero effective rate 423
Exit block 104, 835
removing items 114

Exit command 786


Explicit Ordering model 160
explicit shutdown 189
Explicit Shutdown model 190
exponential distribution 116, 687
Export Data command 716, 762
Export Data Table command 783
Export Database command 736, 805
Export Selected Tables command 736, 805
exporting data 714716
methods 714
Extend3D.mis file 490, 536

ExtendSim DB Add-In 740


ExtendSim Help command 818
ExtendSim menu 782
ExtendSim Product Line command 818
extensions (converting) 853
External Source Code command 809
Extreme Value Type 1A distribution 687
Extreme Value Type 1B distribution 687

F
F connector 190
factors 633
FC
name of pool or group 258
feedback 87
delays 87
loops 87
Feedback block 844
Field name option 738
Field Name popup menu 719
Field Properties dialog 738
Field type option of Field Properties dialog 738
Field type popup menu (for database) 739
fields (database) 720
adding to a table 730
field types 730
for DB address attribute 120
in database table 727

869

managing 737
parent/child 731

fields (parameter)
blue frame 720
linking to a database or global array 718
outlined in green 718
outlined in red 718
outlined in yellow 718

FIFO queue 133


file conversion 851
file format
of original graphic 621
pictures 614, 853

File menu 782


File menu (E3D Editor) 543
file names 850
File Open command 15
files
backup 783, 798
exporting data 783
importing CAD 784
importing data 783
importing DXF 784
opening most recent 786
sharing 777
transferring 851
filter options
block type filter 385
group filter 385
only connected blocks filter 385

filtering condition
creating 243, 253
definition 230
for a group 256
name of pool or group 258
types 253

Index

Final Car Wash RM model 231


Final Car Wash Scenarios model 634
Final messages, in Link dialog 723
Find Again command 789
Find and Replace block 696, 779, 843
Find command 697, 788
Find Database Table option 742
Find Links dialog 790
finding 697
First run...Every run option 738
Fish Pond model 82
fixed costs 268, 278

fixed flow rule 373, 376


Fixed Items model 182
fixed rule modes 420
Fixed Time model 183
Flip Horizontally command 620, 803
Flip Vertically command 620, 803
flow
accumulation point 402
attributes 339
biasing 418
catching 383
competing requests for 381
connectors 314
controlled by items 406
controlling flow 390
controlling items 407
creating 334
definition 312
delaying 390
indicators 337
Interchange block 410
levels 337
LP technology 434
managing units 424
maximized 312
options when goal is off 391
preference 419
ranges 337
rate 312
rules 360
status 423
streams (merging and diverging) 372
throwing 383
units 315, 349
flow attributes 339
displaying 342
with item attributes 343
flow connector messages
in discrete rate models 446
Flow connectors 556, 603
Flow Control tab 390
goals 391
hysteresis 397
Flow Controls Item model 408
flow layers 341
Flow library (legacy) 548
Flow order 88
flow rates
effective 357

870

infinite 358
maximum 357
overview 357
types 357

flow rules
critical constraints 361
fixed 373, 376
information to Executive 437
relational constraints 361

flow units 315


changing 352
declaring 321, 351
group selector button 351
managing 351, 424

fonts for ModL code 795


Foot prints & vehicle trails option 507, 534, 797
footers 774
formats
data sources 760
for database fields 730, 738
of embedded objects 746
of scaled objects 517
From and To locations options 539
FTP (File Transfer Protocol) 766
full and not-full 347
Full factorial design 646
full factorial design 638
functions (calling from blocks) 676

Index

G (goal) connector 395


Game of Life model 52
gamma distribution 688
Gantt Chart block 669
Gate block 180, 293, 835
controlling the flow of items 148
Generate Debugging Info command 809
Generate Report command 762, 814
Generate Trace command 708, 817
generating events 303
generating items 115119
Generic library (legacy) 548
Generic time unit 584
geometric distribution 688
Get block 124, 832
properties of items 114
Get distance from 3D path length button 487

Get Info command 786


Get(R) block 342
Gizmo 493, 510
global arrays 743745
advantages of using 743
creating and using 744
data types 744
interacting with 745
linking a parameter to a global array 719
linking to 789
linking to a data table 721
methods for creating 743
populating with data 745

global block numbers 697


global time units
converting from local time units 575
definition 584
setting 25

Global time units option 575


Go To Function/Message Handler command 811
Go To Line command 811
goal
duration 395
options when off 391
quantity 391
starting 393
status 393
goal seeking 647
graphics 619
file formats 621
graphs 18
green +/- resize button 30, 138
green arrow for equation debugger 703
green background on database fields 731
green parameter fields 718
grid
icon 803
model worksheet 803
notebooks 803
Grid density
tool for plotters 666
group filtering condition 253
groups
definition 230
filtering conditions in ARM 253
for Catch Item block 153
properties 250
using in ARM 246

871

pure 600
uses 598

GS connector 393

H
header files 683
headers 774
help 818
getting technical support 7
printing the text 772

Help block 572


Help button 16
Help menu 818
Hide Connections command 802
Hide Connectors command 802
hierarchical blocks 598609
animation of icon 612
cautions when using 608
changing 606
characteristics 599
commands for 802
connecting 605
connectors 603
creating 598
creating a new 601
drop shadows 792
icon, modifying 603
introduction 36
item templates 300
library (converting) 852
library (saving in) 605
locking 778

I
icon
changing the appearance (hierarchical block) 607
custom 554
grid 803
views 16, 554

IFDEF 811
IFNDEF 811
Imagine That Home Page command 818
Imagine That, Inc. 7
Import Data command 715, 762
Import Data Table command 783
Import DXF File command 784
Import New Database command 735, 804
Import Tables command 736, 805
importing data 714716
methods 714
Include additional block information option 792
include files 810
include files for equation-based blocks 683
indexing
table by data source type 760
indexing (data source) 760
indicators 337, 403
in Bucket Elevator 2 model 415
Indicators tab 338, 403
Industry database 735

Index

Make Selection Hierarchical command 601


making a selection into a 600
modifying 606
New Hierarchical Block command 601
password protecting 778
pictures, adding 554
printing 772
printing by level 773
Rename Block command 607
renaming 809
Save Block to Library As command 606
saving 605
structure window 599, 606
submodel window 599
submodels 603
hierarchy 598609
commands 802
introduction 36
physical 600

Histogram block 669


historical log
item contents 698
History block 283, 695, 832
History model 284
holding items 291
Holding Tank block 21, 823
accumulating values 296
integration in 690
summation in 690
HSV 621
hyperexponential distribution 688
Hypergeometric distribution 688
hysteresis 182
in discrete event models 181
in discrete rate models 397
Hysteresis model 398

Index

872

infinite checkbox in Tank block 321


infinite rate 358, 422
inflow branch 373
Information block 298, 627, 695, 832
Init messages, in Link dialog 723
initial bias 589
initial conditions 588
initial contents
Rate library blocks 334
initial maximum rate 363
Initialize every record in this field to option 738
Initializing and Viewing model 145
Input Line Balancing model 152
input variables
in equation-based blocks 678
variable types 679
Insert New Field command 807
Insert New Records command 808
Insert Object command 791
Inspector pane of the WEI 495
Integrate block 825
integration
definition 87
in the Holding Tank block 690
intelligent connections option 793
interactive simulation 16, 559, 567, 568
importing/exporting data 714
interarrival time 115
Interchange block 328, 410, 838
animation 429
attribute conversion 415
attributes 341
behavioral rules 410
block units 350
critical constraints 364
initial contents 336
maximum rate 357
mode options 336
modes 412
preemption 412
release options 411
Tank is separate... 336, 337, 413
Tank only exists... 336, 412
interface 564
buttons 565
On/Off Switch block 566
interface controls (in E3D window) 454
Interiors category of WEC 496

internet access 751


Interprocess communication (IPC)
definition 748
Inventory Management model 78
Inverse Gaussian distribution 688
Inverse Weibull distribution 688
Item Animation tab 537, 610
item attributes 119
item connector messages
in discrete event models 307
in discrete rate models 446
Item connectors 556, 603
item contents 698
Item Controls Flow model 407
item index 97, 130
Item library 546, 830835
3D animation in 448
and continuous models 558
connectors 301
description 94
moving items 290
pitfalls to avoid 291
Item Log Manager block 832
Item Messages block 696, 697, 842
item properties 96
items
allocate availability 299
as cost accumulators 269
attributes 119126
attributes (overview) 96
attributes example 108
balking 135
batching 149, 200
batching properties when unbatching 210
blocking 135, 159, 172
connector 97
contents of blocks 698
controlled by flow 407
controlling flow 406
cost accumulators 269
costing 269
definition 95
delay time 173
distribute properties when unbatching 210
generating 115119
holding 291
index 97, 130
Interchange block 410
jockeying 136

873

joining 149, 200


matching 203
merging streams 149
moving 290
parallel processing 153
predicting the path of 155
preempting 184
preserving properties when unbatching 210
priority (overview) 96
processing 170197
processing by type 166
processing time 173
properties 96, 119130
properties in ARM 250
properties when batched 205
properties when unbatched 210
pulling 291, 307
pushing 291, 307
quantities (overview) 96
quantity, using 129
reneging 135
resource constraints 216
resource vs cost accumulators 269
routing 154
scaling a large number 293
selecting 149
status in ARM 247
travel time 292
unbatching 154
values (informational) 96
viewing 291

Items (DB) library (legacy) 548

J
JIT 191
JMP custom design 638, 646
Min/Max column of Scenario Manager block 638

job shop 757


Jockey model 137
jockeying 136
Johnson SB distribution 688
Johnson SU distribution 688
just-in-time system 191

labels for blocks 15


Laplace distribution 688
Launch Proof command 814
Launch StatFit command 814
layers of flow 341
layout
of a discrete event model 95
of a discrete rate model 314
least dynamic slack 139
Least Dynamic Slack model 140
Left to right order 88
legacy libraries 546, 547
Animation 548
BPR 548
Discrete Event 548
Flow 548
Generic 548
Items (DB) 548
Mfg 548
Quick Blocks 548
SDI Tools 548
Legacy library warning option 794
length units 315, 350
Level of detail option 535, 797
levels for factors 633
levels of use 5
Lib extension 850
libraries 546554
automatic search for 549
block categories 794
block storage 26
changing 793
closing 549, 799
compiling 800
compiling with debugging code 800
conversion to Run Time format 801
converting 853
copying blocks between 560
corrupted blocks 560
discontinued 547
example libraries 547
ExtendSim 546
file name size 850
legacy 546, 547
MacWin conversion 801
maintaining 799
new 551, 799

Index

Kanban model 192


kanban system 191
keyboard shortcuts 850

874

Index

number of blocks per 848


open when ExtendSim launches 794
opening 26, 548, 799
preload 794
protecting block code 553, 800
removing blocks from 560
RunTime format 554
saving blocks in 552
saving hierarchical blocks in 605
searching for 549, 793
size 848
substituting 549, 553
transferring between platforms 801, 853
types 546
uses 26
version strings 801
window 551, 771

Libraries tab of Options command 793


library
Animation 2D-3D 546
Custom Blocks library 547
Electronics 546
Item library 94, 546, 830835
ModL Tips library 547
Plotter library 547
Rate library 313, 547, 838
Templates library 547
third-party libraries 61
Tutorial library 547
Utilities library 547, 842
Value library 60, 547, 822827
Library menu 799
library window 551
blocks in categories 809
dates option 793
mode in Navigator 771
opening 771, 800
opening at startup 794
printing 772
to copy blocks 560
Library Window mode 771
License Info command 785
LIFO queue 133
Lighting Tools menu (E3D Editor) 544
limiters 763
limits of ExtendSim 848
Line Balance with Activities model 165
line balancing 151, 163
Line tool 620

linear programming 434


Link 2D/3D positions 471, 484, 509, 539
Link Alert block 696, 843
link alerts 592
Link button 719, 720, 721
Link dialog 718
checkboxes 722
Find Link command 723
finding links 790
Link To popup menu 722
No User-Defined Link setting 722
popup menu 718
Link to enclosing H-block option 539
linking 724726
List blocks by category in menu option 794
List of tables option 739
LIX extension 850
local block number 559
local time unit 585
location of distribution 686
Lock H-Blocks checkbox 778
Lock Model command 777, 803
locking a model 777
LOD (level of detail) 535
log
item contents 698
Log files for network licenses 785
Logarithmic distribution 688
Logistic distribution 688
loglogistic distribution 688
lognormal distribution 688
Lookup Table block 20, 296, 825
time units 175
time-based parameters 295
Lookup Table model 296
loop, empty 425
LP area 360, 435
flow rules 360
precision 418
LP calculation 440
bias information 438
flow rules 437
sequence of events 435
table summarizing information 439
LP Solver 434
LP technology 434
introduction 314
LP area 360

875

LP Solver 434

M
M/M/1 queue 134
Macintosh
file conversion 851

Merge Proportion Setting model 425


Merging Inputs model 151
messages 307
application 592
block 305, 593
block-to-block 308
during simulation run 591
in discrete rate models 444, 445
item connector 307
link alerts 592
needs 307
rejects 307
value connector 305
Meter block 844
Meter control 568
Metric distance units option 793
Mfg library (legacy) 548
minicomputers 762
MiniMap 455
MiniMap option 534, 797
Minimize Setup model 140
minimizing setup 140
Minimum Value model 368
Minitab optimal design 638, 646
Miscellaneous tab of Options command 798
Mission objects 496
Mission Objects category of WEC 496
Environment objects 496
Mission objects 496
System objects 496
Mixed type (clone drop) statistical method 625
MM1 model 134
model 172
adding blocks 26
agent-based 51
analysis 632
associated with E3D window 456
backup files 783, 798
balking of items 135

Index

keyboard shortcuts 850


Macintosh to Windows 851
MacWin Conversion command 801, 853
mailslots 767
mainframes 762
maintenance 188
Make Selection Hierarchical command 601, 802
Make Your Own block 94
Manual design of experiements 646
Manual design of experiments 638
Manufacturing library (legacy) 548
markers in the E3D window 525
Markov chain 50
Markov Chain Weather model 50
Match Braces command 811
Match IFDEF/ENDIF command 811
match into one item 201, 203
Matching Item model 203
material handling 192
Math block 21, 825
controlling the flow of items 149
Max & Min block 152, 165, 825
controlling the flow of items 149
Maximize Service Level model 141
maximized capacity in Convey Flow block 349
maximizing service levels 141
maximum density 400
maximum rate 357
dynamically changing 363
Interchange block 364
Tank block 364
MDI interface option 798
Mean & Variance block 286, 626, 827
Memory Usage block 696
Memory Useage block 843
menu command shortcuts 850
Merge block 323, 839
bias order 381, 420
bias order table 422
catching flow 383
critical constraints 365

displaying bias order 424


features 381
fixed rule modes 420
Flow Attributes tab 382
modes (mixed in model) 443
modes (summarized) 373
non-fixed rule modes 421
proportional mode and empty loop 425
requirements for critical constraint 367
setting bias order 421

Index

876

basics 15
before you start 55
block definition 15
blocking of items 135
blocks that represent functions 676
building 25
closing 782
comparison of types 44
connection lines 16
connectors 15
continuous 60
continuous (definition) 44
converting for cross platform use 852
copying 775
cross-platform 850
debugging hints 694
definition 42
design of experiments 638
deterministic 58
differential equation 85
discrete event (definition) 44
discrete rate (definition) 45
distributions 686689
factors for scenario analysis 633
file names 850
goals 54
grid 803
icons 15
initial conditions 588
inputs for scenario analysis 633
integration methods 87, 690
item quantities 129
jockeying of items 136
layout for discrete event 95
locking 777, 803
logical models 43
Macintosh file name 850
measuring model performance 696
messages 591
Monte Carlo 47, 580
multiple runs 580, 589
multiple windows 591
names 850
non-terminating systems 588
notebook 566
number of runs 588
open a new model 25
opening 15, 782
order of calculation for blocks 88
parts of a model 15

password protection 777


path options 793
pictures in 621
preemption 184
printing 773
process of creating models 54
profiling 590
random number generator 684
random number seed 577
refining 56
reneging of items 135
reporting 671674
resources 215
responses for scenario analysis 633
reverting 783
run length 588
running 18
running multiple models simultaneously 591
saving 27, 783
scenario management 632
sharing models 777
size 848
sound at end of run 792
starting 782
state chart 49
State/Action 49
statistical analysis 624
status bar 582
stochastic 58
styles 796, 803
systems 42
table of different types 45
terminating systems 588
Tool Tips 792
tracing 707709
uncluttering 90
validation 57
verification 56, 695
warm-up period 589
Windows file name 850

Model Data database 643


Model Interface block 844
Model menu 802
Model Navigator mode 38, 771
Model Style tab for Options command 796
Model tab of Options command 792
model worksheet
printing 772
modeling
continuous 60

877

discrete event 92
discrete rate 310

modes (3D animation) 458, 579


Buffered 536
Concurrent 535
QuickView 535
modes (for database)
structure 729
viewer 730
modes (Merge/Diverge) 373
mixed mode situations 443
sensing 441
modes (Navigator)
Database List mode 771
Library Window mode 771
Model Navigator mode 38, 771
ModL
Develop menu 808
protecting block code 553
saving code as text file 800
ModL font option 795
ModL Tips library 547
Monte Carlo model 47, 743
Monte Carlo simulation 47, 580
most recent files 786
Mount item while activity is ongoing option 477, 538
Mount objects option (Batch block) 538
mounting 3D objects 519
mount object (definition) 519
mount point 519
mounting node 519
rider object 519
steps 481
mouse-look toggle 457
Move Selected Items to Tab command 810
moving blocks 27
MOX extension 850
multi-dimensional analysis 631
Multiple Cost Accumulators model 280
Multiple Document Interface option 798
Multiple Pools model 217
Multiple Resources model 274
multiple scenarios 580
Multirun analysis 625
multitasking 190
MySQL 765

N
named connections 34, 618
Show Named Connections command 618

names of blocks 15
length of name 848
Navigator 770772
Database List mode 771
introduction to 37
Library Window mode 771
Model Navigator mode 38, 771
printing 772

Index

Navigator command 817


negative binomial distribution 689
Network License command 785
neutral mode 380
New Block command 808
New Database command 729, 804
New Database Tab command 736, 806
New Dialog Item command 810
New Hierarchical Block command 601, 802
New Include File command 810
New Library command 552, 799
New Model command 25, 782
New Tab command 810
New Table command 805
New Text File command 762, 782
Noisy FM model 77
non-accumulating conveyor
Convey Flow block 401
Convey Item block 195
Non-Calendar date definitions 575
non-fixed rule modes 421
Non-Processing model 285
non-terminating system 588
normal distribution 689
Notebook command 817
has data (after command) 817
notebooks 19
as control panel 566
copying 775
copying text to 596
grid 803
printing 772
Notify block 569, 695, 826
Number of steps option 576
Number option for field type 739
Number shift 224

878

O
Object command 791
Object Mapper block 764, 842
object model 764
ObjectID 130, 482, 522
objective function 659
objects (3D) 500522
actions table 501
changing property values 511
collision 521
creating 502507
deleting 507
gravity, friction, and momentum 521
inspecting, using the E3D Editor 492
mounting 471, 519
moving 509
properties 501
rotation 470, 514
scaling 516
scenery 505
showing and hiding 512
skins 508
unlinking 2D/3D positions 484
waypoints 468, 518

objects (embedded)
using COM/OLE 764

objects (graphic)
aligning 803
colors 620
copying 774
drawing 619

Index

drawing tools 620


patterns 621
rotating 803

observed statistic 286


ODBC (Open DataBase Connectivity) 766
OLE (Object Linking and Embedding) 764
On/Off shift 224
Only Simulate Messages command 816
Open All Library Windows command 800
Open Block Structure command 809
Open Breakpoints Window command 811
Open Checkout List for network licenses 785
Open command 782
Open Debugger Window command 811
Open Dialog tool 666
Open Dynamic Linked Blocks command 723, 790
Open E3D Window button 460

Open E3D Window tool 534


Open Hierarchical Block Structure command 802
Open Include File command 810
Open Library command 26, 799
Open Library Window command 551, 799
Open library window option (Libraries tab) 794
Open Navigator tool 770
Open Sensitized Blocks command 790
open systems 97, 222
Open Users List for network licenses 785
opening a model 15
opening libraries 26, 548
optimization 647661
adding variables 650
algorithms 648
clone-drop 650
constraint equations 657
constraints 655, 660
cost equation 659
determining the form of the function 650
entering the objective function 652
maximum samples 660
objective function 659
overview 647
profit equation 659
setting limits for the variables 652
steps for using 648
terminate if best and worst 660
tutorial 648
variables table 658
Optimize 1 model 649
Optimizer block 650, 658, 779, 825
Results tab 661
Run Parameters tab 660
Option key 802, 811
Options command 792
3D tab 797
Libraries tab 793
Miscellaneous tab 798
Model Style tab 796
Model tab 792
Programming tab 795
order
bias 381
of simulation 88
outflow branch 373
Output Line Balancing model 164
output variables
in equation-based blocks 680

879

variable types 680

Oval tool 620

P
page breaks 784
page numbers 784
Page Setup command 784
parallel processing 153, 172
buffering 163
examples 105
explicit ordering 159
line balancing 163
simple parallel connections 172
successive ordering 158
using one Activity block 172

parameters
arguments 686
blue frame 720
changing 20
changing dynamically (methods for) 776
definition 57
green 718
linking to a global array 719
linking to an ExtendSim database 718
red 718
yellow 718
Parent Record Index 680, 681, 755

Dont continue line to Endsim option 668


for debugging 696
Grid Density tool 666
Insert plotter background option 668
Key on-off tool 666
lines as reference 90
log tool 666
multiple axes 35
name 665
number format 665
Open Dialog tool 666
open during simulation 666
options in dialog of 667
Plot every nth point option 668
plot pane 663
point style 665
printing 772, 773, 784

Index

parent/child relationships (for database) 731


green background on field 731
red background on field 731
relationship dialog 733
Pareto distribution 689
passing blocks 300
pass-through items 753
ranking rules 756
password protection 777
Paste command 787
Paste DDE Link command 724, 791
Paste Picture command 621
paths for 3D animation 525
creating a custom path 484
creating markers 486
looping paths 527
selecting the path in the Transport block 487
visible or colored paths 527
Pattern popup menu 621
Pause at Beginning command 707, 816
Pause command 20, 581, 583, 815

Pause Sim block 581, 583, 696, 844


Pause Simulation button 581
Pause/Resume button 20
PE input connector 184
Pearson type V distribution 689
Pearson type VI distribution 689
PICT (picture) resource 615
pictures 853
bitmap 853
copying 775
file formats 614, 621
from other applications 776
Windows MetaFiles 853
working with 621
Planet Dance model 81
Play a sound 569
Play sound at end of run option 792
plot tools 664
plotter 663671
autoscale (manual) 666
Autoscaling option 668
axis (Y1/Y2) 665
clearing data 671
closed during simulation 666
color, pattern, and width 665
copying 775
copying data 671
data pane 664
Data storage tab 668
dialogs 667
displaying results 18
Do not show plot option 667

880

Index

printing top plot 773


Push Plot tool 667
Redraw trace tool 667
saving plots 667
scaling axes 666
second plotter 39
Show instantaneous queue length option 668
Show plot at end of simulation option 667
Show plot button option 668
Show plot during simulation option 667
Show Trace tool 666
split bar 663
symbols 665
tools 35, 664
Trace properties tool 665
traces default to patterns 798
types of 668
X axis shows calendar dates option 668
Zoom in tool 667
Zoom out tool 667

Plotter library 547


Plotter traces default to patterns option 798
Plotter, DE Error Bars block 669
Plotter, DE MultiSim block 669
Plotter, Discrete Event block 104, 669
Plotter, Error Bars block 670
Plotter, FFT block 670
Plotter, I/O block 90, 670
Plotter, MultiSim block 90, 629, 670
Plotter, Scatter (4) block 670
Plotter, Scatter block 670
Plotter, Strip block 670
Plotter, Worm block 671
Poisson distribution 689
policies in ARM 251
Poll constraint every... 363
Polygon tool 620
pools
Advanced Resource Management method 215
properties in ARM 249
resource pool definition 230
Resource Pool method 215
using Resource Pool block 232
using the Resource Manager block 241
Popups block 844
post versions of E3D functions 532
Power Function distribution 689
precision in LP area 418

Predator/Prey model 74
Predict the path of the item 155
preempt connector 412
Preempt tab 184
Preempting model 185
preemption 184
definition 183
options in Activity block 184
preferences for ExtendSim 792
Preload libraries option 794
preprocessing 293
preserve uniqueness 210
in both Batch and Unbatch 210
in either Batch or Unbatch 211
preserved value 210
PRI 680, 681, 755
Print and Page Setup hints 774, 784
Print command 772, 784
print dialog 773, 784
Print header/footer option 798
Print Setup command 784
printing 772774, 784
add frame 773
header and footer options 798
headers and footers 774
hierarchical blocks 773
page breaks 784
page numbers 784
Print and Page Setup hints 774
Print Setup settings (saving) 798
selecting what to print 772
priorities 126128
overview 96
used for routing 160
Prioritize Front Model command 591, 813
Prioritize With Bias Blocks model 420
priority mode 376
bias order determination 424
Priority Mode Diverge model 377
Priority Mode Merge model 378
Priority model 134
priority-sorted queue 133, 134
probability distributions 686689
processes
costs 273
discrete event 170
examples 170
interrupted 183

881

parallel 172
serial 171

Properties command 786


Properties tab of Batch/Unbatch blocks 206
propeties
Cost attribute 130
proportional mode 375
Proportional Mode Diverge model 376
Proportional Mode Merge model 376
Protect Library command 553, 800
protect model 803
PT connector 286
pulling items 291, 307
Pulse block 824
pushing items 291, 307

Q
QE
1 from name of pool or group 258

quantity expression
1 from name of pool or group 258
creating 244, 254, 256
definition 230
Order By clause 256
Quantity clause 255

quantity goal 391


Quantity Goal model 392
quantity of items 129, 206
overview 96
query cycle 753
Query Equation block 752, 825
differences from Query Equation(I) block 756
input variables 678, 754
output variables 680, 755
ranking rules 756

Query Equation(I) 833


Query Equation(I) block
DB Job Shop Query model 757

Index

Processing by Type model 166


processing items 170197
fixed number of items 181
for a fixed period of time 183
hysteresis 181
interrupting 183
just-in-time (JIT) 191
Kanban system 191
multitasking 190
scheduling 179
setting the time 173
shutting down the process 185
time sharing 177
processing time
custom 176
fixed 174
implied 177
random 175
scheduled 174
setup time 178
Production Line Final model 470
Production Line Start model 465
Profile Block Code command 817
profiling 590, 817
profit equation 659
programming
profiling 817
protecting block code 800
Programming tab of Options command 795
Prompt for output value 569
Proof Animation 814
properties 119130
_3D objectID 130
_Animation 206
_Cost 130
_item index 130
_Item quantity 129, 206
_Rate 130
3D objectID 130
batched value when unbatching 210
custom resource in ARM 249
distribute when batching 210
editing for resources 242
group in ARM 250
item attributes 119126
item index 130
of items 96

of items in ARM 250


of items when batched 205
of items when unbatched 210
of resources in ARM 248
options when batching 206
pool in ARM 249
preserved value when unbatching 210
priority 126128
Properties tab in Batch/Unbatch blocks 206
quantity 128
Rate attribute 130
Resource Order ID 130

882

DBQS 753
differences from Query Equation block 756
input variables 678, 754
output variables 680, 755
pass-through items 753
query cycle 753
ranking rules 756
spawned items 753

queue

Index

animating contents 145


attribute-sorted 133
contents 143
FIFO (first in, first out) 133
initializing contents 144
jockeying 136
least dynamic slack 139
LIFO (last in, first out) 133
M/M/1 queue 134
manipulating contents 143
matching by Item attributes 142
maximizing service levels 141
minimize setup 140
priority-sorted 133, 134
reneging 135
resource pool queue 218
server systems 133
sorting mechanisms 132
user-defined sorting 133
viewing contents 143
Queue block 103, 833
contents 698
in resource pool queue mode 214
queuing 132
resource pool queue mode 216
used in Advanced Resource Management 233
Queue Equation block 137, 833
input variables 138, 678
output variables 139, 680
queuing 132
Release popup 139
tie breaking capabilities 142
Queue Matching block 142, 833
queuing 132

Queue Matching model 143


Queue Statistics model 48, 626
Queue Tools block 143, 843
queuing 132
queue/server systems 133
queueing disciplines 132
Quick Blocks library (legacy) 548

QuickView mode 467, 535, 579


Quit command 786

R
R connector 363
Random Activity model 175
random distributions 686689
Random Intervals model 116
Random Number block 21, 824
setting time-based parameters 295
random number generator 577, 684
optional 685
recommended 578, 684
random number stream 685
random numbers 684685
for database cells 739
resetting 685
Random Numbers tab 577
and confidence intervals 628
random seed 577, 685
Random seed option 577
Random Shutdown model 189
random variables (definition) 57
randomness 58
ranking rules 139
least dynamic slack 139
maximizing service levels 141
minimize setup 140
tie-breaking 142
Rate attribute 130
Rate block flow messages
in discrete rate models 446
Rate library 547, 838
animation 428
common connectors 426
overview 313
rate sections 359
boundaries 359
determining 369
rates
effective 357, 423
flow 312
goal 391
in discrete rate models 316
infinite 358
maximum 357
precision 360
sections 359

883

types in discrete rate model 357


rates of flow 357
Rayleigh distribution 689
Read block 716, 751, 762, 823
addressing the data structure 751
communicating with data structures 751
for accessing a database 734

Read only option 738


Read(I) block 716, 751, 831
addressing the data structure 751
communicating with data structures 751

Index

Read/Write Index Checking 808


Read-Only link, in Link dialog 723
RealTimer block 583, 845
Receive Inventory model 273
Record ID field option 738
Record Message block 696, 697, 843
records
creating (for database) 730
Rectangle tool 620
red background on database fields 731
red circle in equation debugger 703
red parameter fields 718
Redraw trace tool 667
reductio-ad-absurdum 56
reference line 90, 664
Referencing dialog variables 778
Refresh DDE Links command 791
registered blocks
finding 790
relational constraints
definition 361
determining 369
permanent 438
state sensitive 438
release rules in ARM 250
Remove All From Report 815
Remove All From Trace command 708, 817
Remove Debug Code in Open Lib 800
Remove External Code in Open Lib 800
Remove License command 786
Remove Selected From Report 672, 815
Remove Selected From Trace command 708, 817
Rename Block command 560, 809
Rename Database command 735, 805
Rename or Delete Database Tab command 806
Rename Table command 805

reneging 135
Reneging model 136
Replace All command 789
Replace command 789
replace with 788
Replace, Find Again command 789
replications 633
Report Type command 672, 815
reporting 671674
commands 814
Dialogs (Text File) report 671
report types 815
Statistics (DB) report 671
Statistics (Text File) report 671
steps 672
Reservoir 1 model 14
Reservoir 2 model 68
Reservoir 3 model 71
Reset random numbers for every run option 577
residence blocks 300
resize button 30
resolution popup menu (in E3D window) 455
resource allocation policy in ARM 251
resource filtering condition 253
Resource Item block 219, 272, 833
advantages and disadvantages 219, 259
creating resources as items 215
Resource Item method 215
Resource Manager 834
Resource Manager block 214
advantages and disadvantages 259
creating pools 241
creating resources 242
filtering conditions 243, 253
groups of resources 246
policies 251
Policies tab 235
quantity expressions 244, 254
release rules 250
Release Rules tab 234
Requirements tab 233
resource requirements 243, 245, 252, 257
Resources tab 232
used in a model 231
Resource Order ID
assigned to item 262
associating an item with a resource 247
definition 230

884

item property 250


Resource Order ID property 130
resource orders in ARM 247
Resource Pool block 216, 834
advantages and disadvantages 216
creating resources 214
in Advanced Resource Management 232

Resource Pool method 215


advantages and disadvantages 259
Resource Pool Release block 216, 834
in Advanced Resource Management 234
releasing resources 215

resource release rule


definition 230
resource requirement

Index

name of pool or group 258


resource requirement rank 251, 257
overriding 252
resource requirements
creating 252
creating manually 243, 257
creating new 245
default in ARM 258
definition 230
resources 93
advanced 230, 231
allocation policy in ARM 251
attributes for tracking information 220
batching method 219
combining with cost accumulators 278
conceptual 221
conserving 207
constraining flow of items 216
costing 269
definition 97
filtering conditions in ARM 253
for costing 273
from different resource pools 217
groups in ARM 246
implicit 221
implicit modeling of 216
limited 216, 219
modeling methods 215
number available 216, 219
pools from the Resource Manager block 241
pools of 232
properties in ARM 248
requirements in ARM 243
Resource Pool method 216
resource requirement rank in ARM 251

scheduling 222
scheduling using other methods 223
scheduling using Shift block 224
scheduling using TR connector 222
status (in ARM) 247
used in multiple places 218
using the Resource Manager block 242

Resources model 227


responses 633
restraints on resources 216
results (displaying on plotters) 18
Resume command 20, 815
Revert Model command 783
rider object 519
Rotate Shape command 620, 803
rotating a 3D object 514
Rotation option 538
Rounded Rectangle tool 620
routing
based on priority 160
conditional 162
explicit 106, 159
implicit 156
implied 106
remotely 161
sequential 158
using Throw Item and Catch Item blocks 152, 161

row index 760


RR
name of pool or group 258

run length 588


determining 589
Run menu 580, 813
Run Model block 583, 844
Run Optimization command 813
Run Optimization or Scenarios command 654
Run Optimization or Scenarios tool 654
run parameters 25, 574
Run Parameters tab 660
Run Scenarios command 813
Run Simulation button 18, 33
Run Simulation command 18, 813
running a model 18, 580584
runs
multiple (resetting random numbers) 685
setting the number of 575
Runs option 575
RunTime format 778, 799, 801

885

RunTime Startup Screen Editor command 801

S
S (sensor) output connector 402
S (status) connector 423
Save and Next Field button 739
Save backup model files option 798
Save Block to Library As command 606
Save Model As command 783
Save Model command 783
Save Print Setup settings option 798
Save Text File As command 783
Save Text File command 783
saving
a hierarchical block 605
a library 552
a model 27, 783
an environment file 518
Scale option 538
scaling
number of items 293
scaling a 3D object 516
format of scale property 517
scattergram 670
scenario analysis 632
database varaibles 640
design of experiments 638
Dialog Factors table 635
Dialog Responses table 637
dialog variables 633
factors (defined) 633
levels 633
Model Data database 643
replications (defined) 633
responses (defined) 633
source list 644
sources 640
targets 640
tutorial I 633
tutorial II 640
Scenario DB database 634, 639
Scenario Manager 826
Scenario Manager block 632, 779
Dialog Factors table 635

Scenario Manager Final Car Wash model 642


scenarios 580
scenery for 3D animation 469, 505
Scenery tab of 3D Controller block 541
Scheduled Intervals model 118
Scheduled Shutdown model 187
Scheduled Time model 175
scheduling
activities 179
events 302
labor 224
resources 224
shutdown 187
Scheduling Activities 1 model 180
Scheduling Activities 2 model 181
scheduling algorithms 132
Scheduling Resources model 223
scrap generation 158
Scrap Generation model 158
Scroll To Messages command 816
SD input connector 186
SD output connector 187
SDI Tools library (legacy) 548
search for 788
seed 577, 685
Select All command 787
select connector 294
Select Item In block 149, 835
routing items 148
selection options 150
starving conditions 150
Select Item Out block 835
blocking conditions 155
routing items 148
selection options 154
Select mode (in Merge/Diverge block) 373
Select Mode Diverge model 374
Select Mode Merge model 374
Select mode option (3D Animation tab) 535, 579
Select Value In block 826
Select Value Out block 826
selection options for Select Item Out block 154
selection options in Select Item In block 150
sensing mode 379, 441
bias order determination 424

Index

Dialog Responses tableDialog Responses table 637


Export tab 639
Include in Report column 638
Min/Max column 638

Report Set column 638


Scenarios tab 638, 646

886

sensitivity analysis 628632


disabling 630
enabling 630
multiple dimensions 631

Index

opening sensitivity blocks 790


overview 628
Sensitize Parameter command 629, 790
settings 630
steps 628

Sensitivity Setup dialog 630


Sensitize Parameter command 790
Sensor block 441, 839
animation 431
sensor connector 291
Sensors tab 402
sequential routing 158
serial port 761
serial processing 171
Serial Processing model 171
server application 749, 764
server application for DDE link 724
Set block 122, 833
properties of items 114
Set Block Category command 809
Set Breakpoints command 811
Set Breakpoints window 703
Set Library Version command 801
Set Simulation Order command 804
Set(R) block 340
Setup tab 25, 575
setup time 178
Setup Time 2 model 179
Shadows option (3D tab) 507, 534, 797
Shape Fill/Border command 620
shape of distribution 686
Shapes category of WEC 496
Shared Libraries 571, 760, 767
sharing files
model locking 777
Sheep and Wolves model 54
Shift block 181, 224, 834
adding to a model 399
in discrete rate model 399
managing resources 215
Number shift 224
On/Off shift 224
shift types 224
status connectors 225

Shift On and Off model 226


Shift Selected Code Left command 811
Shift Selected Code Right command 811
Shipping model 412
Show 2D Animation command 609, 813
Show 3D Animation command 814
Show 3D animation during simulation option 579
Show block in 3D window as option 538
Show Block Labels command 803
Show Block Messages command 816
Show Block Numbers command 774, 804
Show Clipboard command 774, 792
Show DDE Links command 725, 791
Show Debug Messages command 817
Show legacy library warnings option 794
Show library window dates option 793
Show Movies command 814
Show Named Connections command 35, 618, 802
Show Page Breaks command 774, 784
Show Reporting Blocks command 672, 815
Show Reserved Databases command 812
Show Simulation Order command 707, 804
Show Tracing Blocks command 708, 817
Show/Hide Connections command 619
Show/Hide Connectors command 619
Shuffle Graphics tool 620
shutdown 185
definition 184
explicit 189
options for items 186
options in Activity block 186
scheduled 187
Shutdown block 834
controlling item processing 170
time between failures (TBF) 188
time to repair (TTR) 188
Shutdown tab 185
Sim messages, in Link dialog 723
Simple Batching model 203
Simple Connections model 156, 172
Simple Resource Pool model 217
Simple Routing model 156
Simple Routing One Queue model 157
Simulate Multitasking Activity model 191
simulation
agent-based 51
beep at end of run 792

887

3D Animation tab 535, 579


Continuous tab 576
Random Numbers tab 577
Setup tab 575

Simulation Variable block 824


skewness of distribution 686
skins of 3D objects 467, 508
skin types 508
Slider block 845
Slider control 567
Smart connections 618
Smart Connections option 793
Sort By Type model 277
sounds 521, 569, 792, 853
Sounds option (3D tab) 507, 534, 797
source code
control 800
external 809
protection 800
source list for scenario analysis 644
sources 640
spawned items 753
ranking rules 756
speed and calculated distance 193
speed and distance
in a Convey Flow block 400
spread of distribution 686
spreadsheets 749
SQL (Structured Query Language) 766
SQL Server 765
standard line 90
start connector 118, 182
start connector (on Valve) 398
start time
absolute vs. relative 118
Start time option 575
Starting seed used in last model run option 577
starving
in a Valve block 423
in Select Item In block 150
State Action model 49
state chart modeling 49
State/Action modeling 49
StatFit 661663, 814
tutorial 662
StatFit Example model 662
static values 776

Index

benefits 4
continuous modeling 60
controlling the run 583
Custom order 88
definition 43
deterministic 58
discrete event modeling 95
discrete rate modeling 310
duration 84, 584, 589
events 16
Flow order 88
importance 4
integration methods 87
interactive 16
Left to right order 88
messages 591
monitoring the run 583
Monte Carlo 47
multiple 580, 589
number of runs 575
number of runs (maximum) 848
order 88
order of execution 707
parameters 25
pausing 580, 583, 815
process 55
prompt for user input 569
replications 633
results 18
running 18, 33, 580584
running multiple models simultaneously 591
running with Equation/Equation(I) block 852
runs 25
runs (determining) 589
saving intermediate results 583
slowing down a 591
sound 569
speeding up a 589
state chart 49
State/Action 49
status bar 582
stepping through 580
steps 16
stochastic 58
stopping 569, 815
time 84
timer inconsistencies in discrete event models 582
timing 584
simulation order 88, 804
Simulation Setup command 25, 84, 574, 813

888

statistical analysis 624


statistical bias 283, 626
statistical data fitting 686
statistical method 625
Statistics 815
statistics 624627
Batch means method 625
bias 283

Index

blocks for discrete event models 282


clearing 283
custom method 625
cycle time 298
multirun analysis 625
observed 286
sensitivity analysis 628632
time weighted 286
warm-up period 283
Statistics (DB) report 671, 815

Statistics (Text File) report 671


Statistics block 283, 624, 695, 779, 827
Statistics report 815
status bar 582
steady-state systems 588
Step command 815
Step Each Block command 706, 816
Step Entire Model command 706, 816
Step Into command 812
Step Next Animation command 706, 816
Step Out command 812
Step Over command 812
Step The Flow Process model 408
steps 16
number of 85, 576
number of (maximum) 848
size 85
Stepsize calculations option 576
stepwise refinement 4
stochastic models 58
Stop command 815
Stop Message block 298, 843
Stop the simulation 569
storage costs 271, 279
string attributes
declaring for items 299
for Advanced Resource Management 238
string attributes for items 108, 120
string item attributes
defining 122

string layer attributes


declaring 300
String option 739
structure mode (in database) 729
structure window 795
hierarchical blocks 606
printing 772, 774
structure window of hierarchical blocks 599
Structure window opens in front option 795
Styles option (connection lines) 616
submodels 36, 603
Supply & Demand Warning model 442
supply scarcity 377
Supply Sensing Mode Merge model 380
Support Resource Center command 818
Switch block 566, 845
Switch control 568
system attributes 275
System objects (E3D animation) 496
systems
continuous 61
definition 42
discrete event 170
discrete rate 311

T
tab delimited files 763, 783
Table Properties dialog 738
tables
changing number of rows 138, 678, 680, 754
deleting rows 138, 679, 680, 754
duplicating rows 138, 679, 680, 754

tabs
deleting dialog 810
moving dialog items to 810
new database 806
new dialog 810
renaming dialog 810
Tank block 320, 839
animation 428
attributes 341
block units 350
capacity 347
critical constraints 364
direction animation 429
infinite checkbox 321
initial contents 335
level animation 428

889

popup list of Catch Item blocks 153


routing items 148

Throw Value block 827


throw/catch
filters in discrete rate models 385
in discrete event models 152
in discrete rate models 383

throw/catch connection 384


time
between arrivals 115
between failures (TBF) 188
to repair (TTR) 188
Time per step option 576
time ratio (3D animation) 579
time sharing 177
Time Sync block 583
Time Unit block 825
time units 350, 584587
generic 584
global 25, 575
in discrete rate model 352
local 585
Time Weighted Statistic model 287
time weighted statistics 286
time-based parameters 295
timer 582
TimeSync block 845
Tool Tips
additional block information 792
on block dialogs option 795
on dialog editor 795
setting the option 792
uses 776
toolbar
buttons (list) 819
database tools 819
plotter 664
tools
autoscale plotter manually 666
color 620
drawing 619
Grid density (plotter) 666
Key on-off (plotter) 666
log (plotter) 666
open dialog (plotter) 666
patterns 620
plotter 664
Push Plot tool (plotter) 667
Redraw trace (plotter) 667

Index

maximum rate 357


Tank Constraint model 365, 369
Tank Flow Unit model 352
targets 640
technical support 818
information to provide 7
resources 7
templates for discrete event models 300
Templates library 547
terminating systems 588
Terrain Editor mode 496
terrain height in E3D window 497
Terrain modes of the E3D Editor 496
Terrain Texture Painter mode 497
terrains for the E3D window 528529
text 596597
as a connector in hierarchical blocks 604
as a named connection 34
border 597, 799
box 596
copied as picture to Notebook 596
copying 596
drag and drop 597
duplicating 35
entering 596
finding 788
formatting 597, 799
in E3D window 542
labels 34
transparent 597, 799
Text file font option 763, 793
text files
changing the font 763
closing 782
creating 762, 782
exporting 783
font option 793
importing 783
internet access 751
opening 762, 782
printing 772
reverting 783
saving 783
text label 34
Text menu 799
Texture pane of Terrain Texture Painter mode 498
Throw & Catch model 152
Throw Flow block 383, 839
Throw Item block 152, 161, 835

890

shuffling graphics 620


Trace properties (plotter) 665
Zoom in (plotter) 667
Zoom out (plotter) 667

Tools command 799


Torque Game Engine (TGE) 451
total cost 279
TR connector 222
tracing 707709
steps 708
Transparent command 799
Transport Animation tab 539
Transport block 830
3D animation 539
adding to a model 477
distance ratio 194
from and to locations 194, 539
Get distance from 3D path length 487
move time 193
processing items 170
selecting a path 487
speed and calculated distance 193
speed and distance 193

transportation 192
Transportation 1 model 197
Transportation 2 model 197
travel time 292, 477
move time setting 478
options 193, 480
speed and calculated distance setting 480
speed and distance setting 485

Tree pane of the WEI 495


Tree pane of WEC 496
triangular distribution 689
Tutorial library 547

Index

U
Unbatch block 207, 831
unbatching items 200
Unbatch Mode Diverge model 375
unbatch/batch mode 375
unbatching 154, 207210
batch size 209
batched value 210
create multiple items 208
distribute properties 210
item properties 210
preserve uniqueness 210

preserved value 210


release cost resources 208
variable number of items 209

Undo command 787


Uniform Integer distribution 689
Uniform Real distribution 689
unit groups 315, 350
units
block 315, 350
group 315, 350
length 315, 350
managing flow units 424
metric 793
time 350, 352
Universal connector 556, 603
Unmount option in Activity and Workstation blocks
538
unmounting 477
Update check option 798
update flow status 423
Update Launch Control command 783
updates to ExtendSim 818
upper limits 848
upstream supply 376
cautions when determining 441
definition 441
discrepancy with downstream demand 378
supply scarcity 377
Use database table _Seed...option 578
Use default connection line types option 792
Use Grid command 803
Use recommended random number...option 578
Use Sensitivity Analysis command 813
Use separators option 738
User Defined connector 556, 603
User Forum command 818
user forums 818
user interface 562572
for data exchange 712
user-defined links 790
user-defined queue 133
Utilities library 547, 842

V
validation 57, 66
value attributes 120
value connector messages 294, 305

891

in discrete rate models 445


Value connectors 89, 556, 603
value item attributes
defining 122
Value library 60, 547, 822827
blocks in non-continuous models 558

values
definition 57
dynamic 776
informational 96
static 776
Valve block 320, 839
animating blocking/starving status 430
animating goal 431
animating hysteresis 431
animating limiting status 429
animation 429
critical constraints 363
duration goal 395
Flow Control tab 390
goal for rate 391
GS (goal status) connector 393
hysteresis 397
maximum rate 357
maximum rate initialization 363
polling constraints 363
quantity goal 391
status options 423

variable branches 373


variable connectors 556
collapsing 558
contracting 557
expanding 557
variable cost rate 278
variable costs 268
Variable Name column 680
output variables 681
Variable Type popup
input variables 679
output variables 680
Variable Value field 680
variables
input, in equation-based blocks 678
local 678
output, in equation-based blocks 680
static 678

W
Wait Time block 823
waiting costs 271, 279
wants 307
warm-up bias 589
warm-up period 283, 589, 626
waypoints 468
WEC (World Editor Creator) mode 495
Weekly and Daily Shifts model 227
WEI (World Editor Inspector) mode 492, 494
Weibull distribution 689
Whats New command 818
window
database 804
E3D Window 457
library 799
Navigator 770
Window menu 817
Window menu (E3D Editor) 544
Windows
file conversion 851
keyboard shortcuts 850
Windows MetaFiles 853
Windows to Macintosh 851
WMF (Windows MetaFiles) 614
worksheet
grid 803
Workstation block 831
Item Animation tab 538
processing items 170
World Editor Creator (WEC)
mode 495
panes 496
World Editor Inspector (WEI)
mode 492, 494
moving objects with 510
panes 495
World Editor mode of the E3D Editor 494
World menu (E3D Editor) 544
World modes of the E3D Editor 494

Index

variables (definition) 57
variables table 658
verification 56, 695

Verifying Information model 284


Version check option 798
View Using Defaults option 616
viewer mode (in database) 730
viewing items 291
views (icon) 554

892

Write block 716, 751, 762, 823


addressing the data structure 751
communicating with data structures 751
for accessing a database 734
Write(I) block 716, 751, 831
addressing the data structure 751
communicating with data structures 751

Y
yellow outline around field 725
yellow parameter fields 718
Yogurt Changeover model 413
Yogurt Production model 318, 413
Yogurt Production with Flavors model 343
Yogurt Production with Flavors Plus model 343

Index

Z is ground level option 539


zero effective rate 423
zero time events 303
Zoom in tool 667
Zoom out tool 667

You might also like