ProModel User Guide-3
ProModel User Guide-3
ProModel User Guide-3
Cost
Per With this pull-down menu, you can set the cost applies to the resource only when it returns
time units for the Operation Rate. Time units may to the entity.
be in seconds, minutes, hours, or days as shown
here.
Entities
Resources
disables costing and sets all defaults to zero. See both entities. If the preempting entity
“Enable or Disable Costing” on page 187. obtains a resource, the preempted entity
will not record the resource costs during
the preemption period.
•If an entity is at a location when a preemp-
tive downtime occurs, the entity records
the downtime as part of its operational
costs. This applies to all types of location
downtimes, including shifts. The location
records the cost of the preempted entity
while it remains at the location.
•If an entity’s resource has a downtime which
requires the use of another resource, the
entity will not record the second
resource’s cost. However, the location will
record the extra resource’s cost.
Join/Load
•Joined entities add their costs to their base
entities, but not their time statistics.
•Loaded entities do not add their costs or time
statistics to their base entities.
Please note •When an UNLOAD occurs, ProModel
divides all costs accrued by a loaded entity
The following scenarios assume you defined costs among the unloaded entities. ProModel
for all model components. adds all other entity statistics calculated
during the loaded period to each of the
unloaded entities.
•Entities leaving the system loaded onto other
entities do NOT report their individual
Preemption/Downtime costs, but do report all other statistics. To
•If you preempt an entity’s resource, an addi- get the cost of each entity, you must
tional cost per use will apply once you re- unload the entities before they exit.
acquire the resource. While waiting for the
resource to return, the entity does not
record operation or resource costs. Combine/Group
•If an entity preempts another entity, the pre- •Combined entities add their costs to the
empted entity continues to record opera- resultant entity, but not their time statis-
tion time during the entire preemption tics. The resultant entity begins with fresh
period. While the preempting and pre- time statistics.
empted entities are simultaneously at a •Grouped entities do not add their costs or
location, the location records the cost for statistics to the group shell (a temporary
186 Chapter 5:
Cost
•% Usage Cost refers to the resource’s per- default time units specified in the General Infor-
centage of the sum of all resource usage mation dialog.
costs
In the above calculations, the rate defined (per
•Total Cost = Usage Cost + NonUse Cost
day, hour, minute, and second) converts to the
•% Total Cost refers to the resource’s per- default time units specified in the General Infor-
centage of the sum of all resource costs mation dialog.
Entities
Please note
• Explicit Exits The number of entities that
have explicitly exited. Whenever an entity
exits the system, it is an explicit exit ProModel does not allow you to generate a Cost-
except in the following cases: ing Graph. However, if you set a variable equal
- When an entity JOINS or COMBINES to GetCost (e.g., Var1=GetCost), you can gener-
with another entity, it implicitly exits the ate a time series graph to track changing entity
system, and is reported as an exit in the costs. See “GetCost()” on page 488 for more
Entity Acitvity report. However, for information.
costing purposes, the entity did not
explicitly exit, but its costing informa-
tion was added to the entity it was
JOINED or COMBINED with. Enable or Disable Costing
- When an entity LOADS or GROUPS
To enable the costing feature, be sure that the
with another entity, and the entire
Disable Cost option in the Simulation Options
LOADED or GROUPED entity exits the
dialog is not checked.
system, the original entity implicitly
exits the system, and is reported as an
exit in the Entity Acitvity report. How-
ever, for costing purposes, the original
entity did not explicitly exit, but its cost-
ing information was added to the entire
load or group.
• Total Cost Dollars Total Cost = cumula-
tive entity cost, or the sum of costs
incurred on all locations the entity passed
through + the sum of all costs incurred by
use of resource + initial cost + any IncEnt-
Cost
• % Total Cost % Total Cost refers to the
entity’s percentage of sum of all entity
costs
In the above calculations, the rate defined (per
day, hour, minute, and second) converts to the
188 Chapter 5:
Tanks
Please note
How to change between a tank the Subroutine module. To call these subroutines
and a gauge and operate them independently in the model, use
the ACTIVATE statement. For examples of how
to use these subroutines, see the discussion at the
• Double click on the tank or gauge and
check or uncheck the tank option. end of this section. To model tanks effectively,
you must understand the following concepts.
Basic Concepts
Since tanks do not process discrete entities, you
may not define routings to or from tanks. To con-
trol a tank level, ProModel provides predefined
subroutines that fill, empty, and transfer tank
contents. To monitor tank levels and initiate
flows, you must define control subroutines using
190 Chapter 5:
Tanks
The Flow Time Step flow. The units of flow, however, may change
when you move material from one tank to
To model continuous flow, ProModel uses a another (e.g., pounds of dry material may transfer
Tank_TimeStep macro. This macro is the time into a tank containing gallons of liquid).
step used when filling/emptying tanks and is an
RTI (run-time interface) parameter. Initially, Pro- To specify a variable rate of flow that changes
Model sets this value to .2 minutes. If you wish to dynamically with each time step, pass a value of
use a different value for the time step, you may 0. This signals the subroutine to call the
change it temporarily (for a particular model) Tank_Rate subroutine with each time step. To
through the Simulation/Parameters menu option, return the desired rate value for each time step
or permanently by changing the macro itself. The when you use a variable rate, you must modify
larger the time step, the longer the interval the Tank_Rate subroutine appropriately.
between filling and emptying (which speeds up
the simulation). For example, suppose you set the Tank States
time step to .1 minutes. If a tank empties at a rate
of 60 gpm, the simulation would actually empty Like other model elements, tanks use states to
the tank by a discrete amount of 6 gallons every test and track statistics. ProModel automatically
.1 minutes. When filling or emptying a tank, if sets these states when you use the predefined tank
the remaining quantity doesn't require the full subroutines to control the tank. The following are
time step, ProModel reduces the time step using a defined states:
linear interpolation. Tank_Idle The tank is empty and not in use. Set
automatically when a tank empties and at the end
Please note of a Tank_DoPrep or Tank_GoDown subroutine.
Tank_Operation The tank is active (e.g., mix-
The only adverse effect of using a large time step ing, reacting, heating). Set automatically when
is that any WAIT UNTIL statement or other test the model calls the Tank_DoOperation subrou-
based on the Tank_Level array may be off by as tine.
much as the flow amount for the time step. For
example, if the time step is .5 minutes and the rate Tank_Setup The tank is cleaning or preparing
of flow is 60 gpm, the level will change in 30 gal- for future use. Set automatically whenever you
lon increments. This means that the tank will not call the Tank_Prep subroutine.
satisfy the statement “WAIT UNTIL Tank_Filling The tank is filling. Set automati-
Tank_Level[TankA]>=31” until the level cally whenever you fill the tank.
reaches 60.
Tank_Emptying The tank is emptying. Set auto-
matically whenever you empty the tank.
Tank_Blocked The tank is full and ready to
Rate of Flow transfer. Set automatically when the tank fills to
To use flow rates properly, you must define all capacity.
rates in terms of units (i.e., gallons, pounds) per Tank_Down The tank is down. Set automati-
time unit defined in the General Information dia- cally whenever you call Tank_GoDown.
log. Whenever you call one of the empty, fill, or
transfer subroutines, you must specify the rate of
ProModel 191
User Guide
Tank Downtimes
For Tanks, you must define downtimes and shifts
in a special way. First, you may define only clock
downtimes for tanks. Second, when defining a
clock downtime for a tank, use the
Tank_GoDown subroutine (page 201) in the
Downtime Logic field instead of just a WAIT
statement. This sets the state of the tank to
Tank_Down and gathers the appropriate statis-
tics. Third, when defining a shift for a tank, you
should call the Tank_GoDownSched subroutine
in the off-shift logic using the DTLeft() function
as the time parameter. A SKIP statement should
follow this function as shown next.
192 Chapter 5:
Tanks
Please note
tines
Tank_Cap .............................................. page 200 Description
Tank_Dec............................................... page 198 Fills a tank using a specific quantity and rate. The
Tank_DoOperation ............................... page 201 default tank state sets to Tank_Filling, then to
Tank_Blocked if the tank becomes full.
Tank_DoPrep ......................................... page 203
Use Tank_Fill when the source of the material is
Tank_Empty ........................................... page 194 not another tank, but an arriving entity or a
Tank_FallTrigger .................................... page 200 source that is not part of the model.
Syntax samples
Example
TANK_FILL (<Tank ID>, <Fill Quantity>, <Fill
Rate>, <Resume Level>)
194 Chapter 5:
Pre-defined Tank Subroutines
A tanker arrives and fills a storage tank by the The tank name or location index number.
quantity stored in the tanker’s attribute,
<Empty Quantity>
Load_Qty. The rate of fill is 80 gpm and, if the
tank fills to capacity before the tanker dis- The number of units (gallons, pounds) to empty. To
charges the entire quantity, the level of the empty a tank completely of its current contents, enter
storage tank must drop to 12,000 gallons Tank_Level [<Tank ID>].
before it resumes filling. To represent this, <Empty Rate>
enter the following statement in the opera-
tion logic for the tanker at the unloading sta- The rate in units (gallons, pounds) per time unit
tion. defined in the General Information dialog. To instantly
decrease the level of a tank, use the Tank_Dec subrou-
Tank_Fill(StorageTank, Load_Qty, 80, 12000) tine. To specify a dynamically calculated rate using the
Tank_Rate subroutine, enter 0.
<Resume level>
See Also If the tank level drops to 0 before you empty the speci-
fied quantity, the tank must rise to the resume level
“Filling from an Entity” on page 210 and “Initial-
before continuing to empty. To terminate emptying if
izing and Replenishing Supply Tanks” on the level ever drops to 0, enter Tank_Stop. A value of 0
page 210. causes an error to occur if the tank becomes empty
before removing the specified quantity.
Tank_Empty
Example
Syntax samples When a chemical tank, ChemTank, is full
(state is Tank_Blocked), workers pump its con-
TANK_EMPTY (<Tank ID>, <Empty Quantity>, tents into a rail car at a rate of 60 gpm for
<Empty Rate>, <Resume Level>) transportation to another facility. Since rail
TANK_EMPTY (TankB, 2000, 40, 0) cars are always available and the delivery
activity is not of interest, it is not necessary to
model the rail cars explicitly. Instead, activate
a subroutine in the initialization logic with the
following statement:
Description
Tank_Loop //logic repeats continuously
Empties a tank by a specified quantity and rate.
The state is set to Tank_Emptying, then to {
Tank_Idle if the tank becomes empty. WAIT UNTIL
Tank_State[ChemTank]=Tank_Blocked
Use Tank_Empty when the destination is not
another tank, but an arriving entity or a source Tank_Fill(ChemTank, Tank_Level[ChemTank],
that is not part of the model. 60, 0)
}
Components
<Tank ID>
ProModel 195
User Guide
See Also The rate in units (gallons, pounds) per time unit
defined out of the FROM tank. To use a dynamically
“Emptying to an Entity” on page 211. calculated rate in the Tank_Rate subroutine, enter 0.
<TO Rate>
Tank_Transfer The rate in units (gallons, pounds) per time unit
defined in the General Information dialog into the TO
Syntax samples tank. Use 0 if same as the FROM rate. (The TO rate is
automatically the same as the FROM rate if you add 0
as the FROM rate.)
TANK_TRANSFER (<FROM Tank ID>, <TO Tank
ID>, <Transfer Quantity>, <FROM Rate>, <TO <Resume level>
Rate>, <Resume Level>) If the TO tank reaches capacity before the specified
TANK_TRANSFER (Tank1, Tank2, 2000, 100, 0, quantity transfers, the TO tank must drop to the resume
0) level before continuing with the transfer. To terminate
transferring when the TO tank reaches capacity, enter
Tank_Stop. A value of 0 causes an error to occur if the
tank becomes empty before transferring the specified
Description quantity.
Components
See Also
<FROM Tank ID>
“Tank Transfers” on page 212.
The name or location index number of the FROM tank.
<TO Tank ID>
The name or location index number of the TO tank.
Tank_TransferUpTo
<Transfer Quantity>
Syntax samples
The number of units (gallons, pounds) to transfer. To
transfer the entire contents of a tank, enter Tank_Level
[<FROM Tank ID>]. TANK_TRANSFERUPTO (<FROM Tank ID>, <TO
Tank ID>, <TO Level >, <FROM Rate>, <TO
<FROM Rate> Rate>)
196 Chapter 5:
Pre-defined Tank Subroutines
you are not certain how much to empty in order Tank_TransferDownTo(TankA, TankB, 200, 50,
to drop to that level (e.g., the tank may fill at the 0)
same time it empties). }
Components
An in-process tank, TankA, supplies TankB at a Use Tank_SetLevel when you want to initialize a
rate of 50 gpm. TankA must maintain a mini- tank to a specific level.
mum level of 200 gallons to insure against
pump cavitation. When TankA’s level drops Components
to 200 gallons, the tank stops pumping to
TankB until the level of TankA rises above 200
<Tank ID>
gallons. To model this scenario, enter the fol-
lowing logic in the subroutine controlling the The tank name or location index number.
flow from TankA to TankB:
<Quantity>
Tank_Loop //logic repeats continuously
The level at which to set the tank (number of gallons,
{ pounds). To completely fill the tank, enter
Tank_Cap(<Tank Name>).
WAIT UNTIL Tank_Level[TankA]>200
198 Chapter 5:
Pre-defined Tank Subroutines
Tank_Inc
Tank_Dec
Syntax samples
Syntax samples
TANK_INC (<Tank ID>, <Quantity>)
TANK_INC (StorageTank, 5000) TANK_DEC (<Tank ID>, <Quantity>)
TANK_DEC (SupplyTankB, 1000)
Description
Instantly increases the level of a tank by a speci- Description
fied quantity. If the tank has insufficient capacity, Instantly decreases the level of a tank by a speci-
the level increases as capacity becomes available. fied quantity. If the tank has insufficient quantity,
ProModel sets the tank state to Tank_Blocked if it empties as material becomes available. Pro-
the level increases to the tank capacity, otherwise Model sets the tank state to Tank_Idle if you
the state remains unchanged. decrease the level to 0. Otherwise the state
Use Tank_Inc to instantly add a specific quantity remains unchanged.
to a tank. Use Tank_Dec to instantly remove a specific
quantity from a tank.
Components
Components
<Tank ID>
The tank name or location index number. <Tank ID>
<Quantity> The tank name or location index number.
ProModel 199
User Guide
<Quantity> Components
The number of units by which to decrement the con-
tents of the tank (gallons, pounds). <Tank ID>
The tank name or location index number.
Example <Level>
A fill tank fills one 10-gallon container every 15 When the tank level rises to this value, ProModel exe-
seconds. After filling, each container moves cutes any subsequent logic.
to a location called FillStation. To model this
activity, define the following activated sub-
routine (this subroutine creates a filled con- Example
tainer every 15 seconds):
Tank_Loop //logic repeats continuously A tanker waits at a dispatch station until the
level of a finished goods tank rises to 2,000
{
gallons. Once the tank level reaches this
WAIT 15 SEC point, a signal dispatches the tanker to the
Tank_Dec(FillTank, 10) finished goods tank for loading. Meanwhile,
the finished goods tank continues filling. To
ORDER 1 Container TO FillStation model this situation, define the following pro-
} cess logic for the tanker at the dispatch sta-
tion:
Tank_RiseTrigger (FGTank, 2000)
See Also
“Emptying to an Entity” on page 211.
Please note
See Also
Description
“Defining Trigger Levels” on page 215.
Waits until tank contents falls to a specified level.
Use Tank_FallTrigger to initiate an action when a
tank level falls to a specific level.
Tank_Cap
<Level>
When the tank level falls to this value, any subsequent
logic executes. Description
Returns the capacity defined for the specified
tank.
Example
Use Tank_Cap when you need to know the
defined capacity for a tank.
When an in-process tank, TankX, falls to 1000
gallons, it triggers a mixing tank to begin pro-
ducing more product. To model this, define Components
the following activated subroutine to control
the mixing tank: <Tank ID>
Tank_Loop //logic repeats continuously The tank name or location index number.
{
Tank_FallTrigger(TankX, 1000)
[Insert logic to mix new batch here] Tank_FreeCap
}
Syntax samples
Description
Returns the available capacity of the specified Example
tank.
Use Tank_FreeCap when you need to know the After technicians add all the necessary ingre-
available capacity of a tank. dients to the mixing tank, the tank requires a
20 minute mixing time. To define this opera-
tion, enter the following statement in the sub-
Components routine for the mixing activity:
Tank_DoOperation(MixingTank, 20)
<Tank ID>
The tank name or location index number.
See Also
Tank_DoOperation “Mixing and Reactor Tanks” on page 211.
Description
Sets the state of the tank to Tank_Operation and Description
waits for the specified operation time. ProModel
Sets the state of the tank to Tank_Down, waits
sets the state to Tank_Blocked after the opera-
for the specified downtime, then sets the state
tion.
back to the previous setting. If you defined a
Use Tank_DoOperation when some activity or downtime using the location downtime dialog,
treatment time is necessary for the material in a call the Tank_GoDown subroutine in the down-
tank. time logic rather than use a WAIT statement. If
the downtime is for cleaning, use the
Components Tank_DoPrep subroutine.
Use Tank_GoDown to shut down a tank due to
<Tank ID> equipment failure (e.g., pump failure). If the
The tank name or location index number. downtime occurs periodically, you can define a
202 Chapter 5:
Pre-defined Tank Subroutines
Components Description
Sets the state of the tank to Tank_Setup, waits for
<Tank ID> the specified time, then sets the state to
The tank name or location index number. Tank_Idle. Use Tank_DoPrep for cleaning activi-
<Down time> ties after you empty a tank.
The duration (in time units defined in the General Use Tank_DoPrep to take a tank off line for
Information dialog) of the scheduled downtime. cleaning or other preparation time.
Components
Example
<Tank ID>
Every 4 hours, a technician must check the fill line The tank name or location index number.
from a dry supply bin. The time required to check
the line is normally distributed with a mean of 10 <Prep time>
minutes and a standard deviation of 3 minutes. The duration (in time units defined in the General
To define this behavior, define a clock-based, Information dialog) of preparation time.
scheduled downtime for the bin to occur with a
frequency of 4 hours. In the logic defined for the
downtime, enter the following:
Example
Tank_DoPrep
See Also
Syntax samples “Mixing and Reactor Tanks” on page 211.
Tank_SetState Description
Selects an output tank from among several tanks
Syntax samples based on a selection rule and optional product
type. To use this function, list all tanks included
TANK_SETSTATE (<Tank ID>, <State>) in the selection decision together in the Location
module.
TANK_SETSTATE (TankA, Tank_Idle)
Components
No
Is the specified Max
level > 0?
Yes
Is
there a tank Is
No No Wait for first tank to
No there an idle
with level > 0 but Is the specified Max become idle.
less than Max level and tank that satisfies
level > 0?
same product selection rule?
type?
Yes Yes
Yes
Yes
Return Tank ID
Components
See Also
<First Tank> “Selecting from Multiple Input or Output Tanks”
on page 213.
The name or location index number of the starting tank
in the range.
<Number of Tanks> Tank_UpdateStats
The number of tanks in the selection range (limit 10).
<Selection Rule> Syntax samples
The rule for making the selection may be one of the
TANK_UPDATESTATS (<Tank ID>)
following:
TANK_UPDATESTATS (TankA)
Tank_InOrder (selects the first blocked
tank encountered)
Tank_LongestBlocked (selects the tank
blocked the longest) Description
<Minimum Level>
ProModel calls this subroutine automatically
The minimum level of the input tank before consider- whenever you call any of the predefined subrou-
ing it for selection. If the tank must be full before con- tines that affect the tank level. If you change the
sidering it for an input source, enter 0. value of the Tank_Level directly, call the
<Product Type> Tank_UpdateStats subroutine afterward. This
subroutine updates the current statistics on the
tank and sets the state to Tank_Filling (if filling),
ProModel 207
User Guide
Tank_Emptying (if emptying), Tank_Blocked (if The name or location index number of the TO tank
full), or Tank_Idle (if empty). (this value should be 0 if there is no TO tank).
Description
ProModel calls this subroutine automatically if See Also
you pass a 0 value as the From Rate when using “Varying the Transfer Rate” on page 214.
the Tank_Empty or Tank_Transfer subroutine.
To return the desired rate value, enter the neces-
sary logic in the subroutine—ProModel calls the Pre-defined Data Elements
subroutine with each time step. A return value of
The ProModel tank submodel provides the fol-
0 terminates the flow and returns the remaining
lowing data elements for modeling tanks. Unless
amount in the Tank_QtyLeft variable.
otherwise specified, all arrays are single-dimen-
sional and of type integer. Initially, these arrays
Components are 100 elements in size to allow for up to 100
locations. If you define more than 100 locations,
<FROM Tank> you will need to enlarge the array or place tanks
The name or location index number of the FROM tank toward the beginning of the location list (within
(this value should be 0 if there is no FROM tank). the first 100 locations).
<TO Tank> Tank_Level array Stores the level of each tank.
Since the values in this array directly control the
208 Chapter 5:
Pre-defined Tank Subroutines
tank gauge and tank statistics, the array MUST be Location States by Percentage. When reporting
present in every tank model. Location statistics for tanks, note the following:
Tank_State array Tracks the state of the tank. •Total Entries The number of units (e.g.,
gallons, pounds) to enter the tank.
Tank_Product array An optional array used to
•Avg Minutes Per Entry Left blank since
record or test the product currently at a tank.
there is no individual entry for a tank.
Tank_Statistics array A two-dimensional array
Tank_Fills array An optional array used to track
of type real used to record tank level statistics
the number of transfers to a tank. This is espe-
whenever the level changes. Generally, you will
cially useful when you activate multiple
never need to reference this array since values
Tank_Fill or Tank_Transfer subroutines for a
automatically update when you use the pre-
tank and you wish to know when the fills are
defined Tank subroutines. All times are in time
complete. The user sets the value of Tank_Fills to
units defined in the General Information dialog.
zero before activating the subroutines, then
ProModel always gathers these statistics but
defines a WAIT UNTIL statement after the
reports them only if you check Basic or Time
ACTIVATE statement. The Tank_Fills array
Series statistics for the tank location.
increments automatically when a Tank_Fill or a
Column Description Reset After Warm-up Tank_Transfer subroutine executes. See “Mix-
1 Last level NC ing and Reactor Tanks” on page 211 for addi-
2 Last change time Current time in time tional information.
units defined in the
General Information
dialog Statistics
3 Cum time-weighted 0
level
4 Entries Value of column 1
Please note
5 Max contents Value of column 1
6 Last State Change Current time in time
TS = Tank_Statistics array
units defined in the n = Location index number of tank
General Information
dialog
7 Cum time Idle 0
8 Cum time Operation 0
Calculating Location Statistics for
9 Cum time Setup 0
Tanks
10 Cum time Filling 0
11 Cum time Emptying 0
Entries = TS [n, 4]
12 Cum time Blocked 0
13 Cum time Down 0 Avg. Time per Entry = (not applicable)
14 Current downtime NC Avg. Contents = TS[n,3] / Scheduled Time
count
Max Contents = TS [n,5]
As shown in the previous table, the statistics col- Current Contents = TS [n,1]
lected in the Tank_Statistics array automatically Utilization=100 x TS[n,3] / (Capacity x Sched-
reset after any warm-up period. ProModel reports uled Time)
output statistics under Location statistics and
ProModel 209
User Guide
priate resume level. For example, the following Tank_Transfer (Tank2,MixingTank, 300, 20, 4, 0)
statement will continue pumping up to 999999 Tank_DoOperation (MixingTank,15) //Mix time
units into TankA at a rate of 200 units per minute.
Wait Until Tank_State [StorageTank]=
Whenever the tank becomes full, it must drop to
Tank_Idle /* Waits for storage tank availability
400 units before filling resumes.
*/
Tank_Transfer (MixingTank, StorageTank,
Resume fill with trigger level Tank_Level[MixingTank],40, 0, 0)
Tank_Prep (MixingTank, 50) // Clean mixing
Tank_Fill (TankA, 999999, 200, 400)
tank for 50 minutes.
END
can draw from the delivery tank using the Tank Transfers
Tank_Empty subroutine if outflow is gradual and
defined by a flow rate, or the Tank_Dec subrou-
tine if the output occurs in discrete intervals
based on a bottling or packaging time.
To output material from a tank without modeling
the entity to which it outputs, call the
Tank_Empty or Tank_Dec subroutine. To trans-
fer material from a tank to entities arriving at a
filling station (remember, the filling station itself
is NOT a tank), route the entities to the filling sta-
tion using a SEND or other routing rule, then call
the Tank_Empty or Tank_Dec subroutine.
If using the Tank_Dec subroutine, the entity When transferring from one tank to another, you
should wait for the fill time before decreasing the must determine whether the source tank makes
tank level since Tank_Dec happens instantly. For the decision to transfer to the destination tank (a
example, if a bottling operation fills a 2 gallon push approach) or whether the destination tank
container every 6 seconds, define the following makes the decision to draw material from a
processing logic for the container at the fill sta- source tank (a pull approach). You should define
tion: a control subroutine from the perspective of the
tank that makes the decision. If the model
Wait to fill from tank, then con- requires no tank selection, specify a WAIT
tinue UNTIL statement to wait until the FROM or TO
tank satisfies the condition required for transfer.
For example, if a source tank makes the decision
Wait 6 sec
to transfer to a destination tank whenever the des-
Tank_Dec (Filler, 2) tination tank becomes idle, enter the following
statement in the subroutine:
If the delivery tank has insufficient contents to Transfer contents when idle
decrease the level by the specified amount, the
processing will automatically pause until enough Wait Until Tank_State [<destination tank ID>] =
material is available. Once the specified quantity Tank_Idle
empties, the entity can continue processing. To
create an entity as the result of an emptying oper-
ation, define an activated subroutine that empties
If the destination tank makes the decision to
the desired quantity, then execute an ORDER
transfer (a pull approach), you should base the
statement. This will create a new entity at the fill-
WAIT UNTIL statement on a required condition
ing station.
for the source tank as follows:
ProModel 213
User Guide
For output tanks, you would define similar logic The subroutines TransferToB and TransferToC
but include Tank_SelectOutput instead of would each execute a Tank_TransferDownTo
Tank_SelectInput. command followed by a statement incrementing
the value of TransferDone. For example, the
logic for TransferToB would be as follows:
Dynamically Suspending Flow associated action should execute when the tank
level rises or falls to a certain level.
To momentarily interrupt flow into or out of a
tank, use the Tank_GoDown subroutine or set the
state of the tank to down (Tank_SetState =
Tank_Down). This typically happens if a pump
fails but may occur in other situations.
actual tank where sensors report the tank level, Showing Pipes
you directly control how much to pump into a
tank. For instance, an alternative way to model To show pipes connecting the tanks, use paths or
the previous example without using a triggering background graphics. If you desire to show the
subroutine would be to call the material in the pipe, use a long, skinny tank with
Tank_TransferToLevel subroutine to first fill the a capacity of 1 to represent the pipe. You can set
tank to the 2000 unit level, order the Truck entity the level of this tank to 0 or 1 to show product
and then transfer the rest. flow. For example, suppose we define a tank
location called Pipe used to represent the connec-
tion between Tank1 and Tank2. Whenever trans-
Processing Multiple Products ferring from Tank1 to Tank2, you would enter
Where you must track several different products the following:
through one or more tanks, it may be useful to
define macros for naming each product type. For Define pipes
example, setting ProductA equal to 1 and Pro-
ductB equal to 2 will improve the readability of Tank_SetLevel (Pipe,1)
the model. To track which product a particular
Tank_Transfer (Tank1, Tank2, ….)
tank is processing, ProModel uses a pre-defined
integer array called Tank_Product—the user is Tank_SetLevel (Pipe, 0)
responsible for maintaining the array values. If,
for example, ProductA begins pumping into
Tank1, enter the following after you assign an
integer value to ProductA in the Macros module High-Rate Entity Processing
to distinguish it from other products: For systems that process entities at rates higher
than one hundred units per minute, using discrete
Tracking products entities could make the simulation extremely
slow. For this reason, ProModel uses tanks. To
Tank_Product [Tank1] = ProductA use a tank to model high-rate processing, think of
the tank as a buffer where the tank level repre-
sents the number of items in the buffer. For
example, suppose that bottles feed through a fill-
ing station at a rate of 110 per minute. The input
buffer, FillerInput, has a capacity of 1200 bottles
and the output buffer, FillerOutput, has a capacity
of 2000 bottles. If FillerOutput is full, processing
stops until the quantity in the output buffer drops
to 1500 bottles. An arriving container feeds quan-
tities of 200 bottles to the FillerInput location and
it takes 1 minute to unload the container. When
the filling station fills 50 bottles, workers put the
bottles into a box (represented by an entity) and
ship them. Since workers load the boxes as soon
ProModel 217
User Guide
as the bottles complete the filling process, there is Order 1 Box to Shipping
no delay time involved. }
The operation logic for the container at the arriv-
ing location would be as follows:
Please note
High-rate processing
The Tank_Dec statement automatically removes
WAIT 1 min
50 bottles from FillerOutput whenever there are
Tank_Inc (FillerInput, 200) at least 50 bottles available.
tools for editing those objects including flip, The first four functions apply to the currently
rotate, and cut. selected object. To select multiple objects, hold
the shift key while selecting an object. Alterna-
Selector tively you can drag a rectangle encompassing the
objects you want selected. To deselect one of
several selected objects, click on the selected
object while holding the shift key.
Drawing Tools
Use the Edit menu for selecting and duplicating Paste WMF Pastes a Windows metafile (WMF)
the graphic objects in the current Background from the Windows clipboard into the Layout win-
Graphics mode. You may also use it to exchange dow. You must have previously copied a Win-
graphics with other applications. To use the Edit dows metafile to the Windows clipboard.
menu functions, select the object you wish to edit Paste BMP Pastes a bitmap file (BMP) from the
by clicking on it in the Layout window. Windows clipboard into the Layout window. You
ProModel 221
User Guide
must have previously copied a bitmap file to the How to move an imported back-
Windows clipboard. ground graphic:
Import Graphic Imports a WMF, BMP, PCX,
or GIF file into the Layout window. • Place the cursor on the imported back-
ground graphic and drag it to the desired
Export Graphic Exports all graphic objects in location in the layout.
the current mode to a WMF or BMP file.
Importing a Graphic
How to size an imported back-
Importing a background graphic can bring reality
into the model. For example, if a layout is created
ground graphic:
in a graphic package, it may be desirable to
import the entire layout rather than create it in 1. Place the cursor on one of the four corners
of the imported background graphic. The
ProModel. This is done by saving the file in a
cursor becomes a cross-hair at this point.
graphic package, such as AutoCAD, as a WMF,
BMP, PCX, or GIF file and importing the graphic 2. Drag the cursor to size the background
into ProModel. This can save you an extensive graphic as desired.
amount of time.
Please note
Routing Table
Blk Output Destination Rule Move Logic
1 EntA Loc2 JOIN 1 MOVE FOR 1
1 EntB Loc3 FIRST 1 MOVE FOR 1
... ... ... ... ...
This logic checks the type of the pot and then In the above example, EntB would have an
joins a lid according to that type. attribute value, Att1, equal to 2 after EntA joined
to EntB.
their original attribute values. The following dia- Attributes and the LOAD/
gram graphically shows the concept of grouping.
UNLOAD Statements
EntA
Batch
EntA The LOAD statement loads a specified quantity
Group Ungroup of entities to the current entity. The loaded enti-
EntA
EntB Loc4 Loc5
ties retain their identity for future unloading
EntB
EntBEntC through an UNLOAD statement (see “Load” on
page 509 and “Unload” on page 571 for more
EntC EntC information). When the entities are loaded onto
Three entities are grouped the current entity, the resulting entity retains the
together to form a batch
which is later ungrouped. attribute value of the current entity.
For example, entities called Box are loaded onto
The logic for the diagram is as follows: another entity, Pallet. The Boxes are assigned an
attribute value, Att1=1. Pallets are also assigned
Process Table an attribute value, Att1=2. Once the Boxes are
Entity Location Operation (min) loaded onto the Pallet, the loaded pallet is
EntA Loc1 Att1 = 1 renamed Shipment. The Shipment then has an
EntB Loc2 Att1 = 2 attribute, Att1=2, because it inherits the attribute
EntC Loc3 Att1 = 3 value of the Pallet. However, we then assign an
ALL Loc4 GROUP 3 AS Batch attribute value to Shipment, Att1=3. After the
Batch Loc4 WAIT 30 Boxes are unloaded from the Pallet, the Boxes
Batch Loc5 UNGROUP retain their original attribute value, Att1=1. Now
ALL Loc5 ... the Pallet has a different attribute value, Att1=3,
which was assigned to the renamed entity, Ship-
Routing Table ment. Consider the following diagram and logic
in which two Boxes are loaded onto a Pallet and
Blk Output Destination Rule Move Logic renamed Shipment for the output entity:
1 EntA Loc4 FIRST 1 MOVE FOR 1
1 EntB Loc4 FIRST 1 MOVE FOR 1 Box Box
You can assign an attribute value to a grouped The logic for the diagram is as follows:
entity. However, once the entities are ungrouped,
they retain the attribute values they possessed
before they were grouped.
230 Chapter 6:
Attributes
Variable Layout
An icon to show a variable’s value during a simu-
lation may be placed anywhere on the layout. The
Variable Observation window below shows the icons for the variables
Record Value Time in Hours Current and Total at the right side of the screen.
Observation 1 6 1 Each icon has been labeled with a background
Observation 2 5 2 graphic.
Observation 3 6 3
Observation 4 5 4
Total 22 10
Example
A plant manufactures valves of 10 different sizes,
How to edit a variable’s icon: such as 10'', 20'', .... All valves are inspected at a
common inspection station and then move to a
dock where they are loaded onto pallets. The pal-
1. Double click on the icon.
lets are designed to hold only a certain size valve.
2. Click on the Digit Color, Frame, or Font but- Therefore, a pallet designed to hold 10'' valves
tons to adjust the respective setting. can only hold 10'' valves, not 20'' valves.
3. Click on OK.
Suppose a Pallet enters a multi-capacity location,
4. All other variable icons that you create Dock. Each Pallet has a different entity attribute,
from now on will retain these modifications. p_type, describing the type of valve it can hold.
Valves are loaded onto the Pallet. The 10” valves
must be loaded onto the pallet designed to hold
the 10” valves. Therefore, the attribute value of
the Valve, v_type, must match the attribute value
of the Pallet, p_type. We can use local variables
234 Chapter 6:
Variables
to accomplish this modeling task. The logic is as enced in the LOAD statement. The pallet
follows where X is a local variable: attribute cannot be directly referenced in the
LOAD statement.
Process Table
If Dock was a single capacity location, using a
Entity Location Operation (min) global variable would work the same as using a
Valve Inspect WAIT 5 local variable. However, because Dock is a
Pallet Dock INT X multi-capacity location, it can load valves onto
X = p_type multiple pallets at the same time. If a global vari-
LOAD 10 IFF able was used instead of a local variable, the glo-
X = v_type
WAIT 10 bal variable would change each time a pallet
entered Dock. If there were two different types
Routing Table of pallets at Dock, there would be only one type
of valve loaded on the pallet because the global
Blk Output Destination Rule Move Logic variable refers to both pallets.
1 Valve Dock LOAD 1 MOVE FOR 2
1 Pallet Delivery FIRST 1 MOVE FOR 8
Suppose, for example, a global variable, type,
signifies the pallet attribute, p_type. We assign
If we had not used local variables, we would need type=p_type at the beginning of the operation
to use the following operation logic for Pallet at logic for location Dock. The first pallet arrives
Dock: and type=3. Therefore, only valves with
v_type=3 are loaded onto the pallet. Another pal-
let enters Dock and type=5. Now only valves
with valve_type=5 are loaded onto both pallets.
Please note
Initializing Arrays tion Logic” on page 180 for a list of logic ele-
ments used to define model parameters.
By default, all cells in an array are initialized to
zero. Initializing cells to some other value should
be done in the initialization logic. A
WHILE...DO loop is useful for initializing array Import Data into Arrays
cell values. The logic below fills a 3 x 5 array (3
rows and 5 columns) with values from an exter- When you import data, from either an external
nal, general read file. Excel spreadsheet or SQL database, into an array,
ProModel loads the data from left to right, top to
bottom. Although there is no limit to the quantity
of values you may use, ProModel supports only
two-dimensional arrays.
into the array—you do not have to define any cell 6. Enter the Import Start Cell location. The
information unless you wish to limit the contents value in this cell will occupy the first position in
of the array to a portion of the data set. the array.
7. Enter the Import End Cell location. The
Array import requires Microsoft Excel 97 or value in this cell will occupy the last position in
later. the array.
8. Click OK.
4. Click on the Database radio button. If you export multiple times to the same spread-
sheet, ProModel will overwrite the spreadsheet
with new data. If you wish to prevent your data
from being overwritten, you can make a backup
of the spreadsheet between each running of the
simulation.
If you are running multiple scenarios and/or rep-
lications, see step 5 below for a description of
how the spreadsheet handles the multiple scenar-
ios/replications.
4. Click OK.
5. When the simulation is run, the array data
will be saved to the spreadsheet file. If you
ran multiple scenarios and/or replications,
data from each one will be saved to a sepa-
rate sheet in the spreadsheet file, as seen
below.
Notes on Arrays
1. If a warm-up time is specified, array values
are not reset.
2. Arrays can be nested. For example, if
Arr1[2,3] is equal to three, then the state-
ment Arr2[5,Arr1[2,3]] works exactly like
the statement Arr2[5,3].
3. You can examine the value of a cell in an
array during a simulation by choosing Infor-
ProModel 241
User Guide
of a location’s capacity) to complex text (e.g., a combinations to find the combination that works
line of logic). You may create RTI parameters best with your model.
using the dialog box below, accessed through the
Numeric Range This specifies the lower and
macros dialog.
upper limits for the parameter if the type is
numeric.
Run-Time Interface Example You are now able to change the operation time at
Lathe_1 using the Model Parameters option in
Suppose you build a factory model and determine the Simulation menu. For more information on
the first lathe, Lathe_1, is a bottleneck. The changing model parameters and defining scenar-
model results indicate the throughput is lower
ios, see “Model Parameters & Scenarios” on
than expected. You decide to perform several
page 352.
what-if scenarios with the model by changing the
operation time of Lathe_1. Instead of changing
the operation time at Lathe_1 within the Process Please note
edit table, it is easier to define a macro with an
RTI. This technique allows the model user to For more information concerning the differences
easily see the effect of installing a faster lathe between macros and subroutines, see “Macros”
without ever editing the model itself. The fol- on page 241 and “Subroutines” on page 246.
lowing example represents the dialog used to
define the RTI for the macro where the operation
time is a numeric value between 12 and 20:
Resource Grouping
Resource grouping allows you to define specific
groups of resources rather than define each unit
separately. For example, suppose you need a spe-
cific technician to perform an operation. If the
technician is not available, you may use either
another technician or one of two qualified opera-
tors to perform the operation. Rather than define
each qualified operator as a separate resource,
you may define a macro that includes them.
Please note
Subroutine Editor
The Subroutines edit table consists of several
fields which identify the components of a subrou-
tine. Each of these fields is described below.
termination logic. Subroutines of type Interactive fore, independent subroutines can run in parallel
are identical to subroutines of type None, except with the logic that called them.
that interactive subroutines are also accessible for
4. Independent subroutines called with the ACTI-
activation by the user through the run-time menu.
VATE statement cannot contain entity-specific or
Interactive subroutines are displayed in the Inter-
location-specific system functions.
act menu during runtime. For more information
on Interactive subroutines, see the discussion
later in this section.
Parameters Arguments passed to the subrou- Subroutine Format
tine get assigned to local variables called parame-
ters. Items passed to a subroutine as arguments A subroutine may be named any unique, valid
can have different names than the parameters that name. The general format for calling a subrou-
receive them. Parameters can be real or integer. tine is as follows:
The first parameter receives the first argument, SubroutineName(arg1, arg2,....,argn)
the second parameter receives the second argu-
ment, and so on.
Subroutine call
Logic One or more statements to be executed
whenever the subroutine is called. Statements in GetOpTime(3,7)
subroutines must be valid in the logic that calls
DoInitialization()
the subroutine. Subroutine logic may contain a
RETURN statement with a value to be returned
from the subroutine. (See “Return” on page 549
for the correct syntax and an example of this Please note
statement.)
Subroutine format notes:
Please note
1. If no arguments are specified, open and closed
Subroutine editor notes: parentheses are still required.
1. If the subroutine is of type Integer and the 2. Statements in subroutines must be valid in the
return value is a real number, the return value logic that called the subroutine. For example, if a
will be truncated unless the ROUND() function is subroutine is called from the operation logic, the
used (e.g., RETURN ROUND(<numeric expres- subroutine may contain only those statements
sion>)). valid in the operation logic. Subroutines called
2. If you do not want a stand-alone subroutine from an ACTIVATE statement or from the Inter-
referenced in operation logic to be treated as an act Menu at run-time can have any general logic
implicit wait statement, define the subroutine as statements, including WAIT.
type None.
3. A subroutine may be used in any logic field. In
3. When using the ACTIVATE statement to call a addition, a subroutine may be used in any expres-
subroutine, the calling logic continues without sion field, provided that the RETURN statement
waiting for the called subroutine to finish. There- is used to return a value to the expression field.
248 Chapter 6:
Subroutines
Expression fields include the Qty Each column of routing are shown below. The subroutine itself is
the Arrivals edit table and the routing rule for shown later in this section.
processing.
Subroutine Example
Suppose that you build a Copy Center model and
it is necessary to define the processing time at the
operator assisted machines as a function of two
parameters: Order Quantity and Quality Level. In
addition, you would also like to write the pro-
cessing times at each copy machine to a file
called Report.Dat. Subroutines Edit Table
Because the operation logic is identical at both The Subroutine edit table lists the name of the
machines, a subroutine may be used to execute subroutine, the return type, the parameters to be
the group of statements required. Notice in the passed to the subroutine, and the logic. Notice
Process Logic pictured next that Subroutine that the subroutine ID corresponds to the subrou-
OrderTime is called, and each order's Quantity, tine name called in the processing logic above
Quality, and Ticket attributes are passed as argu- and that the subroutine has four parameters (P1,
ments. The third argument is simply a constant P2, P3 and P4) corresponding to the four argu-
value, 1 or 2, which represents the location from ments passed to the subroutine. Also note that
which the subroutine was called (i.e., 1 if called the subroutine is of type real since the return
from OpAsist1 or 2 if called from OpAsist2). The value will be a real valued processing time.
operation logic, which calls the subroutine, and
Subroutine Parameters
The subroutine parameters, M (for mean) and SD
(for standard deviation), are defined by clicking
on the Parameters heading button. These values
are unique to each inspection location, and are
ProModel 249
User Guide
passed to the subroutine as parameters of the nor- upon the quality level desired. Operation time is
mally distributed inspection time. determined by simply multiplying the process
time by the scale factor.
Once the order time has been determined, this
value is written to the file Report.Dat. Included
with the operation time is the job number and the
location at which the job was processed.
The last line of the logic returns the order time
value to the processing logic.
subroutine of type Interactive and enter the fol- knowledge of your external programming lan-
lowing logic: guage (C, C++, Pascal) to use external subrou-
tines. In addition, you must also have a good
Windows platform knowledge, specifically with
respect to creating DLLs in your language.
Because it is a 32-bit program, ProModel can
load and call only 32-bit DLLs, and requires that
you use a 32-bit Windows compiler.
For more information about this feature, you can
load, study and run XSUB.MOD in the reference
model directory (also see “Xsub()” on page 583).
This model uses XSUB.DLL, found in the MOD-
ELS directory. The source code and make files
for XSUB.DLL (XSUB.CPP, XSUB.MAK,
During run-time, you can then change the arrival XSUB.IDE) are also included in the MODELS
frequency for the customers by choosing the Cus- directory. Some general explanation is contained
tomer Arrivals from the Interact menu (see “Run- in the comments of this source code.
Time Interact Menu” on page 368).
Due to the complexities of Windows program-
ming and the variety of uses for this advanced
Please note feature, PROMODEL Corporation can only pro-
vide minimal support for this feature. Many ques-
Interactive subroutines may also be called from tions regarding Windows programming and other
any logic or expression where no return value is programming languages cannot be handled
required. See “Statements and Functions” on through our customer support department. Please
page 439 for more information. consult your language programming manuals,
language customer service centers, Microsoft,
and other resources to resolve these types of
problems.
External Subroutines
There may be some cases where you need to per- Subroutines vs. Macros
form actions ProModel is not capable of doing.
You may need extended capabilities with more Although subroutines and macros work similarly,
sophisticated commands. ProModel allows you they have subtle differences. Any logic may use
to interface with external subroutines located in both macros and subroutines. The main differ-
thirty-two bit Windows DLL files you have cre- ence is in the way they are used. Only subrou-
ated. This feature could be useful for doing tines can be used when you need to pass
sophisticated file I/O, performing statistical anal- arguments, get a return value, or activate the
ysis, making your simulation interactive, or help- independent execution of logic. Only macros can
ing with other simulation needs. be used when defining run-time interface param-
eters.
Because of the intricacies of the Windows devel-
opment environment, you must have a sound
ProModel 251
User Guide
expressed in terms of percentages, we select Per- record for the bank example appears below. (See
cent as the basis for the cycle. Also, the percent- “Arrivals” on page 163 for more information.)
age values are not cumulative so we specify No
in the Cumulative field.
Cumulative Cycle Tables the number of arrivals to arrive within each time
interval.
In the previous example, percentages were
expressed non cumulatively. This same data Example 1
could have been expressed cumulatively as fol-
Suppose that in the bank example we knew that
lows:
for each cycle period, the number of customers to
Before Percent arrive during each time interval within the cycle
period is as follows:
9:00 am 0
10:30 am 10 From Before Number
11:30 am 25
9:00 AM 10:30 AM 100
1:00 pm 55
10:30 AM 11:30 AM 150
4:00 pm 70
11:30 AM 1:00 PM 300
5:00 pm 100
1:00 PM 4:00 PM 150
The data is now expressed cumulatively and 4:00 PM 5:00 PM 300
could be entered in the cycle table as follows.
With the data in this format, we specify the
Arrival cycle by choosing Qty in the “Qty/Per-
cent” field and complete the cycle table as fol-
lows:
Example 2
Suppose we wish to see the effect on the Bank
example if the number of arrivals is increased by
50%. The relative quantities per time interval
remain the same but now 50% more customers
arrive each day. Using the data from the previous
example, we enter the same values in the Arrival
cycle quantity fields, but specify a value of 1.5 in
the quantity field of the Arrival edit table.
Processing
time (min)
How to access the function table 1
editor:
0
0 100 200 300
1. Select More Elements from the Build menu.
Order size
2. Select Table Functions.
Example 2
In this example the relationship between the inde-
Table Functions Editor pendent value and the dependent value is nonlin-
ear and inversely proportional. In addition,
Table functions are defined by the user and return interpolation is required to determine the depen-
a dependent (or look-up) value based on the inde- dent value if the independent value passed to the
pendent (or reference) value passed as the func- function lies between the independent values
tion argument. Independent values must be
entered in ascending order. If the independent
value passed to a table function falls between two
independent values, a dependent value for the
unspecified reference value is calculated by lin-
ProModel 257
User Guide
given explicitly in the table function. The tables for the two example functions are
given below.
Function: QualFactor()
3.0
2.0
Processing
Time Factor
1.4
1.1
1.0
1 2 3 4 5
Quality Level
Table... Click on this heading button to open a If the function were called with the command
table for defining the independent and dependent “Operation_Time(5),” the independent value
values of the function. passed to the table function Operation_Time
would be five. But five is beyond the limits of the
table, so the dependent value returned will be
zero. Likewise, if the independent value is 1, the
dependent value returned will be zero. However,
if 2.7 is entered as the independent value, Pro-
258 Chapter 6:
Table Functions
User Defined Distributions section). The data is entered into the User Distri-
bution edit table. The User Distribution edit
Occasionally, none of ProModel’s built-in distri- table’s fields are described below.
butions can adequately represent a data set. In
these cases, the user may define a User Distribu-
tion to represent the data set. User Distributions
specify the parameters of user-defined (empiri-
cal), discrete, or continuous probability distribu-
tions.
ID The name of the distribution. When referenc-
ing distribution tables (in the operation logic, for
example) the open and closed parentheses after
the distribution name must be used, such as
Dist1(), OpTime().
Type... Discrete or Continuous depending on the
number of possible outcomes.
Cumulative... Yes or No depending on whether
the distribution is to be specified in cumulative or
non-cumulative format.
Table... Click on this button (or double click in
the field) to open an edit table for defining the
parameters of the distribution. Once a distribu-
tion has been defined, the field changes from
“Undefined” to “Defined.”
The combination of Discrete and Continuous dis-
How to create and edit user distri- tributions, along with the ability to express either
butions: in cumulative or non-cumulative terms, creates
four possible formats for specifying distributions.
1. Choose More Elements from the Build
The remainder of this section gives examples and
menu. procedures for specifying each of these distribu-
tion types.
2. Choose User Distributions.
Discrete Distributions
User Distribution Edit Table Discrete distributions are characterized by a finite
set of outcomes, together with the probability of
A user-defined distribution is a table of empiri- obtaining each outcome. In the following exam-
cally gathered data. User distributions may be ple, there are three possible outcomes for the
either continuous or discrete, and may be cumu- group size: 30% of the time the group size will be
lative or non-cumulative (more information con-
cerning these options is found later in this
260 Chapter 6:
User Defined Distributions
10, 60% of the time the group size will be 20, and Process Table
10% of the time the group size will be 30.
Entity Location Operation (min)
Discrete Distribution EntA Loc1 GROUP Dist() AS Batch
Batch Loc1 WAIT 10 min
P 1.00
r .90
Routing Table
o .80
b .70
Blk Output Destination Rule Move Logic
a .60
b .50
i .40 1 Batch Loc2 FIRST 1 MOVE FOR
l .30 5
i .20
t .10 ProModel provides the flexibility to specify dis-
y 0 crete distributions according to a probability
10 20 30
mass function or a cumulative distribution func-
Group size tion. Select Yes or No in the Cumulative field of
the Distribution edit table and fill in the table
One way to represent a discrete distribution is by according to the probability mass function or the
its probability mass function, listing the possible cumulative distribution function. The following
outcomes together with the probability of observ- tables show the discrete distribution example
ing each outcome. A probability mass function defined in both formats.
for the example above could be expressed as fol-
lows (with G representing the group size). Discrete (probability mass
G 10 20 30 function)
P(G) .30 .60 .10
An alternate way to represent a distribution is
through a cumulative distribution function, list-
ing each possible outcome together with the
probability that the observed outcome will be less
than or equal to the specified outcome. A cumu-
lative distribution function for the example above
could be expressed as follows.
Discrete (cumulative distribution
G 10 20 30 function)
P(G) .30 .90 1.0
In the next example, the number of parts are
grouped into a batch according to a user distribu-
tion.
ProModel 261
User Guide
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
File Types
External Files Editor
External files may be defined as one of several
The External Files Editor consists of an edit table types depending upon the purpose of the file.
with fields specifying the external files to be used
General Read File
A General Read file contains numeric values read
into a model using a READ statement. Values
must be separated by a space, comma, or end of
ProModel 263
User Guide
line. Any non-numeric data will be automatically entered in the cell where the names intersect. An
skipped when obtaining the next numeric value example of a spreadsheet file is shown next.
(See “Read” on page 537 for correct syntax and
examples). For example, if you specify a normal
distribution such as N(5,1) in the General Read
file, ProModel will not return a numeric value
following the distribution. Instead, it will read in
the first value, 5, and the next value, 1.
A General Read file must be an ASCII file. Data
created in a spreadsheet must be saved as a text
file.
B Location name
C Quantity per arrival
Please note
D Time of first arrival
E Number of arrivals If the time of the first arrival is zero and there is
only one arrival of some quantity, you do not
F Frequency of arrivals
need to complete additional cells. Likewise, if
G through... Attribute assignments there is only one arrival at a time other than zero,
you do not need to fill in additional cells after the
Columns A through F may have any heading
Time entry.
desired as long as the data is of the proper type.
If attributes are to be assigned, columns G and
higher should have headings that match the
names of the attributes being assigned. The fol-
lowing example illustrates these points.
Please note
Shift File
A shift file record is automatically created in the
External Files Editor when you assign a shift to a
The values in the spreadsheet cells must be a location or resource. If shifts have been assigned,
numeric expression as opposed to a formula the name(s) of the shift file(s) will be automati-
commonly used in spreadsheets. For exam- cally created in the External Files Editor. If no
ple, if cell E4 in the spreadsheet above was path is listed for the shift file, ProModel will
actually a formula generating the value 100,
search in the default models directory.
the value ProModel generates is zero. Pro-
Model only recognizes expressions for the
ProModel 265
User Guide
When you include a distribution (e.g., Normal, activities will not affect the sample values gener-
Beta, and Gamma) in your model, ProModel uses ated from the arrival distribution).
a random number generator to produce a set
sequence or stream of numbers between 0 and 1 Please note
(0 <= x < 1) to use in the distribution. Before it
can select any numbers, however, ProModel
The random number generator is a prime modu-
requires an initial seed value to identify the point
lus multiplicative linear congruential generator.
in the stream at which to begin. Once you specify
The C code implementation for most of the ran-
a seed value, ProModel “shifts” the random num-
dom variates was written by Stephen Vincent and
ber selection (in increments of 100,000 numbers)
based on the algorithms described by Law and
by that number of positions and starts sampling
Kelton (see the “Bibliography” on page 606).
values. Since there is only one random number
stream, this will ensure that the selected values
do not overlap. ProModel includes 100 seed val-
ues, and each seed produces a unique set of ran-
dom numbers. If you do not specify an initial Stream Example
seed value, ProModel will use the stream number The following example shows one reason why
as the seed value (i.e., stream 3 uses seed 3). multiple streams are useful.
Random Number Stream Two machines, Mach1 and Mach2, are to go
100,000 random numbers down approximately every 4 hours for servicing.
To model this, the frequency or time between
}
ferent numbers. Using two streams (in the Note that if a third machine were to use one of the
example below numbered ten and eleven) with streams, for example if Mach3 were to use stream
the same initial seed will ensure that the eleven, the two machines would no longer go
machines receive the same random number every down together. Mach1 would use the first value
time. The two streams have the same starting from stream ten; Mach2 would use the first value
seed value so they will produce exactly the same from stream eleven; and Mach3 would use the
sequence of random numbers. The first number second value from stream eleven. The first time
of stream ten will be exactly the same as the first Mach1 and Mach2 went down, they would go
number of stream eleven; the second numbers down at the same time because the first number
will be the same; indeed, every number will be in streams ten and eleven is the same. But there-
the same. after they would not. The second time they
would go down at different times because Mach1
The Streams window below shows streams ten
would receive the second value from stream ten,
and eleven with the same seed values.
Mach2 would receive the third value from stream
eleven, and Mach3 would receive the fourth
value from stream eleven.
Please note
By assigning stream ten to Mach1 and eleven to Stream notes:
Mach2, both machines will go down at exactly
the same time. 1. If a stream value is not specified for a distribu-
tion, the stream is assumed to be stream one.
Stream #1 does not automatically reset after each
replication.
Material Handling Systems if bridge B tries to move to a node N that lies very
close to the left end of the envelope, and bridge A
The following section provides advanced tech- is to the left of bridge B, a run-time error will
niques to model Material Handling Systems. occur if the space remaining between node N and
bridge A is less than the bridge separation dis-
tance. To avoid such problems, define the crane
Crane Systems envelope wide enough to allow sufficient space
To implement cranes in ProModel, the Path Net- beyond any serviceable nodes.
work module allows three types of networks:
non-passing, passing, and cranes. From this mod- Crane Priorities, Preemption &
ule, you can lay down and orient a crane enve- Bridge Bump-Away
lope, define the bridge separation distance, and
define the graphics for rails and bridges in the ProModel associates two types of priorities with
bay. Additionally, the Resources module allows the operation of crane resources: (1) resource
you to define bridge and hoist speeds, and hoist request priority, and (2) crane move priority.
graphics for one or more cranes operating in the Resource Request Priorities Used to
same bay. resolve any conflicts that arise between multiple
tasks requesting the same resource at the same
time. This priority scale follows the rules that
Creating Multi-Bridge Crane
regular dynamic resource priorities do (i.e., 10
Systems levels of 100). Use this priority to preempt crane
Modeling multiple cranes operating in the same resources from lower priority tasks to serve
bay has never been so easy! higher priority tasks.
User defined bridge separation distances, exten- Crane Move Priorities Used for multiple
sions to regular dynamic resource usage state- bridges operating in the same envelope, to decide
ments, and a set of new priority rules have been which crane bridge has priority over another
introduced in order to let you manage conflicting while moving. This priority scale is also in the
movements in the same envelope zone. range [0...999], but does not have any preemption
Crane Envelope The parallelogram-shaped levels. Any higher value has overriding priority
area represented by a crane type path network, over a lower value. You can assign priorities to
bounded by two rails and the lines connecting the crane resources temporarily, on a task-by-task
endpoints of those rails. The lines connecting the basis via extra parameters in the GET, JOINTLY
endpoints of rails are effectively the two extreme GET, USE, and MOVE WITH statements.
positions of the center-lines of any bridges oper- Therefore, you can only use priorities for cranes
ating within the envelope. ProModel uses the end that are either moving to respond to a resource
of one of the rails as the envelope origin to serve request or moving to deliver a part. Moving to
as a reference point for all logical distance calcu- downtime, off-shift or break nodes has the
lations within the envelope. default (0) move priority. Moving to park has the
Bridge Separation The minimum distance lowest move priority (the same as an idle crane).
you want to maintain between center-lines of two You can further sub-divide crane move priorities
neighboring bridges. This distance is not related into three categories:
to how close a bridge center-line can get to one of •Task Move Priority Assigned by the
the extreme endpoints of the envelope. Caution: modeler via parameters passed to resource
270 Chapter 6:
Material Handling Systems
usage statements (GET, MOVE WITH, etc.). •Crane Graphics In the Resources module,
Used as the base move priority for travel to the selected graphic represents the hoist. You
pick up and travel to deposit. may define, edit, and size multiple graphics
•Claim Priority If crane A’s bridge is for the same hoist the same way you create
headed towards its ultimate (task) destina- multiple graphics for other resources.
tion, the claim priority is equal to the task •Units & Multiple Cranes Crane resources
move priority of crane A. Otherwise (if crane limit you to one unit. When you define mul-
A’s bridge is moving under the influence of tiple cranes operating in the same envelope,
crane B), claim priority is equal to the claim define them as separate resources—each
priority of the claim inducer bridge (bridge assigned to the same crane network.
B). •Downtimes In addition to the clock and
•Effective Claim Priority Applies only usage downtimes you may define for cranes,
to envelopes with three or more cranes. If you can assign cranes to shifts in the same
multiple crane bridges are moving in the way you assign other resources. When a
same direction with overlapping claims, the crane goes down, it moves to the downtime
effective claim priority of any bridge in the node specified in the DTs dialog. If you do
overlapping region is the maximum of all the not associate a node with the crane down-
claim priorities of those bridges. time, the crane goes down at its current posi-
tion.
Crane Operations •Specifications Cranes require separate val-
ues for bridge and hoist speed and accelera-
The operation of cranes in ProModel has been
tion. You must enter Speed (Empty), Speed
designed to closely resemble the real-life opera-
(Full), and Accelerate and Decelerate values
tion of cranes. Under most circumstances, you
for bridge movement along the rails and
need not be concerned with how ProModel han-
hoist movement across the bridge. In each
dles crane movements. The following operational
field, the format is Bridge Value, Hoist
specifications are intended as a reference only
Value (e.g., if you enter “150, 20” in the
and are not essential in order to model cranes
speed field, the bridge moves at 150 and the
using ProModel.
hoist at 20 feet per minute). Although you
must enter speed values, acceleration and
Crane Animation deceleration values are optional (if you leave
During a simulation run, entities picked up by a them blank, ProModel assumes the crane to
crane appear graphically on the entity spot for the have an infinite acceleration and deceleration
hoist. The hoist graphic appears above the entity capability. (Hint: this provides better run-
graphic and the bridge of the crane appears on top time computational efficiency).
of the entity and hoist graphics. •Crane Searches Define Work and Park
searches in the same way you define
searches for other resources.
Crane Specifications
•Node Logic Define entry and exit logic for
When you define cranes for your model, consider cranes at nodes in the same way you define
the following: node logic for other resources.
ProModel 271
User Guide
will push away bridge B, and crane B will not direction with a higher move priority than both of
respond to the request while passing over [B']). the other bridges. ProModel interrupts bridges A
and B and lays a new course for both bridge B
Case 3 [B'' = C' - bridge separation] and bridge A [A'' =
B'' - bridge separation]. In this case, B may queue
up behind A, and C behind B.
Case 5
distance. The hoist, on the other hand, moves are compared with the a, s, and d of the leading
directly to its relative destination on the bridge, bridge (L). If all of the following conditions are
independent of the bridge zone claim results. In true, bridge F moves independent of bridge L.
case of bridge interruption, the hoist does not
stop moving. Therefore, for any particular crane Conditions for No Queue-Up
move, the combined trajectory of hoist and 1. aF <= aL The following bridge cannot accel-
bridge may change depending on zone availabil- erate faster than the leading bridge.
ity at the time of the claim. 2. sF <= sL The following bridge’s maximum
If crane A accepts the claim attempt, all cranes speed cannot be greater than the leading
inside the claimed extended zone bump away at bridge.
the time of the claim. This claim also prevents 3. dF >= dL The following bridge can deceler-
any other cranes with move priority less than or
ate equally or faster than the leading bridge.
equal to the move priority of A from entering the
claimed zone in conflicting directions. If any one of the above conditions fail, bridge F
moves at the same speed as bridge L, maintaining
the distance that existed between them at the time
Zone Claim Notes F started moving.
Bridge Motion after Queue-Up another). Independent of its current position and
movement direction, the crane still has the capa-
distance
traveled bility to respond to resource requests coming
by bridges from anywhere in the envelope. If allocated to a
task with high enough travel-to-pickup move pri-
Bridge
Separation ority, the crane may reverse direction or termi-
nate its move early, bumping other crane bridges
B on its way.
Qup
Whenever a crane bridge changes its claim, it
distance checks to see if there are any bridges behind it
A
that are going in the same direction with overlap-
time
B accel. B max. B decel. ping claims. If there are any, the newly claiming
A mimics B A goes with B’s crane triggers a chain queue-up re-evaluation
(former) average speed
towards the following cranes. The following
If bridge A is queued up behind bridge B, bridge example demonstrates this case.
A goes through up to two stages of movement.
The first stage occurs throughout the movement B''2 B''1
of bridge B. Bridge A mimics bridge B’s motion,
maintaining its original distance from bridge B.
The second stage occurs after bridge B stops.
Bridge A continues traveling with the former
average speed of bridge B until it reaches its des-
tination.
A B A' B'
If bridge B is moving to accomplish its own task
(as opposed to just moving out of A’s zone), then At time t0, crane A is called for a task and starts
bridge A might stop earlier, without going moving to [A'] with move priority mpA, pushing
through the second stage. In this case, the total idle bridge B to [B' = A' + bridge separation]. At
traveling time for bridge A is calculated as if time t1 (bridge A and B are still moving), a
bridge A were traveling with bridge B’s average request for crane B comes from [B" (1 or 2)] with
speed. move priority mpB. Bridge B is allocated to the
When a bridge arrives at its destination, it trig- task immediately since it is available at the time.
gers a chain queue-up re-evaluation that pene- If the new destination of bridge B is [B"1], the
trates the crane envelope in the opposite direction new claim of bridge B does not conflict with the
that the stopped bridge was moving. This chain existing claim of bridge A, so the move priorities
re-evaluation handles cases in which there were are not significant. ProModel re-evaluates all
multiple bridges queued up behind the stopped motion values for crane B (acceleration, deceler-
bridge. ation, empty and full speeds for both the hoist
and the bridge) and crane B starts moving to its
Moving Idle Cranes can Respond to new destination. If the bridge motion expressions
Resource Requests for crane B have changed their values between t0
and t1, the queue-up status between bridges B
A crane can be idle and moving at the same time and A (and any others behind A) may change, so
(moving to park or being pushed away by
ProModel 275
User Guide
ProModel performs a chain queue-up re-evalua- In the first six cases, a crane changes state from
tion. “immovable” to a finite move priority. The sev-
If the new destination of bridge B is [B"2], the enth case may change the “effective move priori-
new claim of bridge B conflicts with the existing ties” of other cranes. ProModel requires the
claim of bridge A, so ProModel considers the eighth case for envelopes with three or more
move priorities: bridges with overlapping operation zones: It
•If mpB <= mpA, then B does not have ensures that two or more unsatisfied, opposing
enough priority to stop A before A gets to its claims with the same move priority will resolve
destination. Bridge B will have to go on their conflict based on earlier task assignment
moving until [B'] and wait until it can claim time instead of locking up the crane system.
the region [B"2 ~ B'] in the → direction. Hence, all of the above cases create a potential to
realize previously unsuccessful claims.
•If mpB > mpA, then B does have overriding
priority over A. Bridge B stops bridge A at The reclaim trigger events for each envelope
[B"2 - bridge separation], starting a chain echo in the trace together with the triggering rea-
move termination which tells bridge A to son for model debugging purposes. The results of
stop any other followers with the appropriate reclaim attempts for each crane resource and its
bridge separation distances between each. In effects on other crane resources in the same enve-
this case, bridge A (and other possible fol- lope are also displayed.
lowers) will have to wait until the next
reclaim trigger event to attempt reaching Other Crane Operation Rules
their original destinations. 1. If an entity currently possesses a crane, all
move logic for the entity must use a MOVE
Reclaim Trigger Events WITH statement (until you free the crane)—
Unsuccessful claims of all crane bridges in an the entity cannot move without the crane.
envelope are re-attempted when a reclaim trigger 2. Although an entity cannot possess more than
event occurs in that envelope. The following one crane at a time, the entity may possess a
events are considered to be triggers for claim re- crane and a resource of another type.
evaluations in the related envelope: 3. If a crane is in one of the following states,
another crane cannot push it away.
•The duration of a USE <crane> statement
a) Picking up or depositing an entity.
expires.
b) Being used at a location.
•You free a crane using the FREE statement.
•A crane completes a deposit (unless you
c) Experiencing a downtime, off-shift
time, or break time.
specify the KEEP option).
4. The hoist moves to its relative destination on
•A crane completes a pickup and the crane is
the bridge independent of the bridge zone
about to start moving to deliver.
claim attempt outcomes. The hoist does not
•A crane downtime ends.
stop for bridge interruption so, for any par-
•You preempt a crane resource.
ticular crane move, the combined trajectory
•A bridge arrives at its task destination of hoist and bridge may change depending
(before elapsing pickup/deposit time). on zone availability at the time of the claim.
•There are no moving task bridges left (for 5. When a crane pushes away an idle crane, the
envelopes with 3 or more cranes only). idle crane comes under the control of the
276 Chapter 6:
Material Handling Systems
work and park search lists defined for the minimum distance to the hoist and then the
node closest to its bridge. order of appearance in the nodes edit table.
If the hoist is still moving at the time the
Crane Operations Notes bridge stops, the registry procedure executes
by considering the destination of the hoist.
ProModel allows definition of resource points for
crane resources on envelope nodes to achieve the
three dimensional look for “lowering the hoist” Please note
upon arriving at a node. Since cranes can only
have one unit, only the first resource point for Only users can instruct cranes to park on nodes.
any crane at any node is meaningful. Also, Pro- However, as a result of bump-aways, a crane can
Model only uses the resource points if the crane end up standing still at positions that do not nec-
resource arrives at the node to perform a task. In essarily correspond to nodes. In any case, Pro-
other words, the hoist does not lower if the crane Model registers an idle stationary crane to a
arrives at a node to park or just ends up there after node and places it under the control of work and
a bump. park searches of that node.
In general, once ProModel makes a match
between a resource request and a resource of the
requested type, the resource is allocated for that
job and the simulation engine does not go on Cranes follow the same rules as regular dynamic
looking for other matches that can actually reach resources while searching for assignments
to the requester sooner. Since cranes blocking (returning to preempted jobs, exclusive & non-
other crane resources is a common phenomenon exclusive work searches, requests coming from
in multi-bridge envelopes, extra care should be nodes not included in the work search, etc.).
used while designing the active operation zones There are some additional steps to handle interac-
and resource request logic in such models. tions with other cranes operating in the same
envelope. Upon completion of its task, a crane
goes through these extra steps:
Nodes, Work, and Park Searches
1. Lets other cranes in the same envelope re-
ProModel “registers” all cranes to their home attempt their claims, possibly generating an
nodes at the beginning of a simulation run. When induced claim on its bridge.
a crane starts to move, ProModel erases registra- 2. Even though other cranes might bump away
tion, and re-establishes it when the crane stops, its bridge, the crane executes the work search
according to the following rules: defined for it at its current node. (If requests
1. Cranes assigned to a task (pick up, drop off, are waiting at different locations of the same
down) remain unregistered throughout inter- work search record, ProModel takes the
mediate stops and register to the task desti- resource request priorities into consider-
nation node upon arrival. ation.)
2. Idle cranes that are bumped away, or cranes 3. If it was not allocated to a task or bumped
that were unsuccessful in claiming the entire away, the crane executes the park search
bridge region to go parking register them- defined for it at its current node, or attempts
selves to the node closest to their bridge going home if return home is checked.
when they stop. If there are multiple nodes
closest to the bridge, ties are broken by the
ProModel 277
User Guide
Please note time a crane would have taken to get to its desti-
nation if it were the only bridge in its envelope.
A crane bridge moving to park cannot bump
other idle bridges out of its way. In such a case, Please note
the bridge goes as far as it can towards its desti-
nation and registers itself to the closest node The first component of gross travel time (moving
upon stopping (using the rules discussed above). towards the actual destination) may be greater
than the net travel time, since it may include
going back towards the destination after another
crane bumps it away. It may also involve devia-
Crane Resource Statistics tions from the bridge’s original motion values
The statistics reported for cranes are very similar when queued-up behind slower bridges.
to regular dynamic resource statistics. The fol-
lowing definitions highlight the differences in the
interpretations.
In Use Includes the following states: Special Case—Blocked Time
•Stationary use at a location via GET, Accrual for Moving to Park
JOINTLY GET, and USE statements. Remember that an idle crane registers itself to the
•Gross move time while delivering — actu- closest node whenever its bridge stops. If the
ally carrying an entity from one location to hoist is still moving, ProModel uses the destina-
another. tion of the hoist to break any ties between nodes
•Pickup and deposit times before and after the that are equidistant to the bridge position.
move to deliver. In case of an unsuccessful claim attempt to move
Travel To Use Is the gross move time to start to park, the crane bridge needs to stop before
being used — traveling to respond to a request reaching the instructed park node, and ProModel
for either stationary use or use to pickup and ignores the hoist travel for statistics purposes.
deliver an entity to another location. The “travel to park” statistic terminates at the
Gross Move Time May include the follow- time the bridge stops, not when bridge or hoist
ing times: stop time reaches its maximum value. In this
case, the net moving time to park computes as the
•Moving towards the actual destination.
bridge move time from current position to the
•Possibly moving away from the destination,
endpoint of the claim, using original bridge
when bumped away by a higher priority
motion values for the crane resource. Blocked
bridge in the same envelope.
time can accrue if this bridge queues up after a
•Stationary blockage times during which the slower bridge that is already moving (remember
bridge is waiting for a higher move priority that a crane moving to park cannot bump another
bridge in the same envelope to lower its crane).
move priority.
Blocked Time Tally blocked time by sub-
tracting the internally computed, hypothetical net Conveyors
traveling time from the actual incurred gross A conveyor is any moving track, belt, chain, or
move time. ProModel defines the net time as the roller which transports parts from one location to
278 Chapter 6:
Material Handling Systems
another. This section will help you better under- Conveyor Types
stand conveyors and how to model them using You may represent conveyors as one continuous
ProModel. span of randomly spaced parts (e.g., belt con-
ProModel determines the capacity of a conveyor veyor) or as intermittent spaces or carriers
by its speed and load spacing rather than a stated located at fixed intervals (i.e., trolley conveyor).
capacity. Specifically, capacity is a function of
the minimum allowable interload spacing on a
conveyor (which is the length of a queue position
Accumulating & Non-Accumulating
in the case of accumulation conveyors) and its In addition to continuous or intermittent convey-
length. It may be desirable, however, to impose a ors, some conveyors permit loads to accumulate
limit to the number of loads permitted on the con- or queue if conditions impede forward motion
veyor at any one time. progress. ProModel refers to these conveyors as
Conveyors usually do not pick up and drop off accumulating conveyors. Other conveyors pro-
loads as in the case of lift trucks, AGVS, and vide no queuing and halt all activity if forward
cranes. You must place loads onto and remove progress of the leading part or load stops. Pro-
them from conveyors. Model refers to these types of conveyors as non-
accumulating conveyors.
Depending on the nature of the conveyor and its
operation, modeling a conveyor can be straight- The following figure illustrates how entities can
forward or complex. For single conveyor sec- continue to accumulate after the leading load
tions, modeling is very simple. Conveyor stops on an accumulating conveyor. How a non-
networks, on the other hand, give rise to several accumulating conveyor can accept one additional
complexities (recirculating, merging, etc.) that entity if the leading entity stops, however it is
become more difficult to model. unable to advance any further since the entire
conveyor stopped.
Conveyor Simulation Benefits
Simulating your conveyor system will help you
address design and operational issues, answering
the following questions:
•What is the minimum conveyor speed that
still meets rate requirements?
•What is the load rate capacity of the con-
veyor?
•What is the load delivery time for different
activity levels?
•How much queuing do accumulation con-
veyors need?
•How many carriers do trolley or power-and- The different combination of continuous or inter-
free conveyors need? mittent conveyors and transport or accumulation
•What is the optimum number of pallets to conveyors result in the following four different
maximize productivity in a recirculating kinds of conveyors that ProModel is capable of
environment? modeling.
ProModel 279
User Guide
accumulate or back up. This generally occurs at Some users prefer to display the grid and select
a transfer point or process location. the Snap to Grid option in the View menu. Others
will leave Snap to Grid off. You may find that the
Modeling Conveyors precise positioning of a conveyor is easier when
you turn Snap to Grid off and set the Zoom suffi-
While not essential, it is visually more effective
ciently high. When you need to change the type
to draw conveyors to scale on the layout. You
of conveyor to accumulating, double-click on the
should also size entities traveling on a conveyor
conveyor icon in the layout, select the Conveyor
to scale when you create them. Setting the length
Options button, and select Accumulating from
of a conveyor different from the scale length or
the Conveyor Options dialog.
conveying entities that have a length or width that
The following six examples show various ways
is not to scale will result in the appearance of load
of modeling conveyors:
overlapping or excessive load spacing. The
underlying logic and simulation is still valid, Example A Routes one or more parts from
regardless of whether the graphics are to scale. one or more non-conveyor locations to any con-
Loads may appear to jump when transferring veyor location.
from the end of one conveyor to another con-
veyor. This is a result of ProModel not allowing
a load to transfer onto a conveyor until there is
room for the load. Including a transfer time in
the Move Logic column of the Routing edit table
can result in smooth movement between con-
veyor sections. Defining a variable called
Transfer_Time and using that variable rather than E l A
Example B Routes one or more parts from
entering the actual time allows for experimenta-
any conveyor location to one or more non-con-
tion with various conveyor speeds with minimal
veyor locations.
modeling changes.
Clock precision is also important. Note that
movement of one foot at 40 feet per minute will
take .025 minutes. If clock precision is set at .1
minutes, truncation will result in zero time. Make
sure you check your model for the correct clock Example C Routes single parts from any con-
precision. For most conveyors, a clock precision veyor location to one or more other conveyor
of .001 is adequate. ProModel may require locations.
greater precision for high-speed conveyors where
speeds are greater than 200 fpm.
Modeling conveyors in ProModel is quite easy.
Select the conveyor icon in the Locations Graph-
ics window and place the beginning and ending
points of the conveyor using the mouse. Clicking
the right mouse button will end the conveyor.
Left-click to add or delete a joint and allow the
conveyor to bend.
ProModel 281
User Guide
Example D Joins one or more parts from one Automated Guided Vehicle
or more non-conveyor locations to another trans-
porting entity (e.g., a pallet or carrier) at any con- Systems
veyor location. An automated guided vehicle system (AGVS) is
a path network along which computer-controlled,
driverless vehicles transport loads. One of the
modeling requirements of AGVS is to accurately
describe the method for controlling traffic. You
can usually accomplish this in one of two ways:
•Zone blocking
•On-board vehicle sensing
Zone Blocking The most common method of
traffic control, it involves placing control points
along the guide path. Each point usually allows
Example E Accumulates multiple parts com-
only one vehicle to access it any one time, thus
ing from one or more non-conveyor locations
blocking any other vehicle from entering any seg-
onto a conveyor location.
ment of the path connected to that point. Once the
vehicle leaves a control point to travel to the next
point on the path, any vehicle waiting for access
to the freed control point can resume travel.
On-Board Vehicle Sensing Works by hav-
ing a sensor on-board the vehicle that detects the
presence of a vehicle ahead of it and stops until it
Example F Splits parts at a conveyor location detects that the vehicle ahead of it has moved.
sending one or more parts to a non-conveyor
location and a single part (e.g., a pallet or carrier) Modeling AGVS
onto the conveyor. Modeling an AGVS is very similar to modeling
an industrial vehicle, such as a lift truck, (which it
is in a sense) except you control the operation
more and there exists less freedom of movement.
Paths are generally unidirectional and do not
allow vehicle passing.
One of the challenges in modeling an AGVS is
finding the shortest routes between any two stops
in a system. ProModel provides built-in capabil-
ity to automatically determine the shortest routes
between points in a complex network.
282 Chapter 6:
Material Handling Systems
Since people generally operate industrial vehi- means that movement along one axis is complete
cles, they take breaks and may be available only before movement along the other axis begins.
during certain shifts. So in addition to modeling From a modeling standpoint, it is usually only
the vehicle, you may need to model an operator necessary to calculate and model the longest
that takes breaks and works on shifts or you may move time.
just want to assign shifts and breaks to the vehicle
In modeling AS/RS, the storage capacity is usu-
resource itself, in effect, modeling the vehicle
ally not a consideration and the actual inventory
and the operator as one resource.
of the system is not modeled. It would require
lots of overhead to model the complete inventory
Industrial Vehicle Simulation in a rack with 60,000 pallet locations. Since it is
Benefits primarily only the activity that is of interest in the
Simulating your industrial vehicles will help you simulation, actual inventory is ignored. In fact, it
address design and operational issues, answering is usually not even necessary to model specific
the following questions: stock keeping units (SKUs) being stored or
retrieved, but only distinguish between load type
•What is the required number of vehicles to
insofar as it affects routing and subsequent opera-
handle the required activity?
tions.
•What is the best deployment of vehicles to
maximize utilization?
•What is the best deployment of vehicles to Modeling an AS/RS as a Vertical
minimize response time? Bridge Crane
One way to model an AS/RS with greater accu-
racy is to use the bridge crane construct. An AS/
Automated Storage/Retrieval RS is really just a vertical crane with the same
Systems characteristics as a bridge crane.
An automated storage/retrieval system (AS/RS)
is “a combination of equipment and controls AS/RS Simulation Benefits
which handles, stores, and retrieves materials Simulating your AS/RS will help you address
with precision, accuracy, and speed under a design and operational issues, answering the fol-
defined degree of automation” (The Material lowing questions:
Handling Institute 1977). The goal of an AS/RS
•How many aisles do you need to handle the
is to provide random, high density storage with
required activity?
quick load access, all under computer control.
•What is the best sequence of stores and
retrievals to maximize throughput?
Modeling AS/RSs •What is the best stationing of empty S/R
At a simple level, an AS/RS move time may be machines to minimize response time?
modeled by taking a time from a probability dis-
tribution that approximates the time to store or
retrieve a load. More precise modeling incorpo-
rates the actual crane (horizontal) and lift (verti-
cal) speeds. Each movement usually has a
different speed and distance to travel which
284 Chapter 6:
Modeling Tips