Simio Compatibility Notes
Simio Compatibility Notes
Simio Compatibility Notes
We prepared this list to help you avoid or work around known problem areas. If you encounter problems that are
not on this list, please email them to [email protected] so we may fix them.
Known Issues
Issue Work-around
If you use the features to auto create elements in tables, If you export the table and then import it that will
and you add new properties after already populating force all rows (elements) to be auto-created and the
elements, those new property values may not correctly properties will be correctly handled.
reflect in the elements previously created.
When used on a non-English OS, default values might You will have to manually correct them.
come in with commas and periods (decimal points)
switched.
Exceptions
An “exception” happens when Simio encounters an unusual combination of actions that it does not know how to
handle. In general, when an exception occurs you will be presented with a dialog asking you to report the
situation. In most cases you can continue modeling with little inconvenience.
It is our intention that you should never encounter any exception, and in particular you should never encounter an
unhandled exception where you risk loss of data. Please help us find and fix exceptions by reporting the first
occurrence of any exception that you might encounter using the exception dialog, or by copying the exception
details to an email and send to [email protected]. Including the model, when possible, is very helpful.
Please do not report the same exception multiple times.
Compatibility Notes
In general each release will load all models from the previous releases. Unfortunately, in order to add important
features or to fix issues, it is occasionally necessary to make changes that require changes to previous models. We
try to minimize and automate such changes.
When manual changes are required, the changes are usually required only for rarely used features or modeling
situations. We apologize for requiring such changes and we will try to make such situations less likely in the future.
But for now, please review the compatibility notes below carefully, especially if you have a model that no longer
runs as it did.
If you encounter problems updating a model from an older sprint, we suggest that you start by looking at the
compatibility notes below for all sprints since the one in which your model was last working correctly.
In Run Setup -> Advanced Compatibility Settings, an On This setting is True by default for models saved in Sprint
Released Process Compatibility Mode compatibility 190 version or older, which was the implicit setting up
setting was added. to that point. The setting is False for new models. No
action is necessary if older model behavior was
This setting indicates whether to execute the On satisfactory.
Released Process of a Release step using token
associated object and token context object references
that are compatible with Simio version Sprint 190 or
earlier. If this setting is True, then the token associated
object reference will be the released resource and the
token context object reference will be the resource’s
owner. Otherwise, the token’s references will be the
opposite.
Simio Version 10
Sprint 187 Issues Solution
In Run Setup -> Advanced Compatibility Settings, an This setting is True by default for models saved in Sprint
Automatically Adjust Timer's Target Triggering Event 186 version or older, which was the implicit setting up
Count If Zero To One compatibility setting was added. to that point. The setting is False for new models. No
action is necessary if older model behavior was
If this setting is True, and an event count-based timer's satisfactory.
Triggering Event Count expression property has
returned the value zero, then the target triggering
event count for that timer will be automatically
adjusted to one. The recommended value for this
setting is False.
Sprint 186 Issues Solution
In Run Setup -> Advanced Compatibility Settings, an This setting is False by default for models saved in
Always Use Seize Selection Goal When Checking Sprint 185 version or older, which was the implicit
Resource Allocation Queue compatibility setting was setting up to that point. The setting is True for new
added. models. No action is necessary if older model behavior
was satisfactory.
This setting indicates whether a Seize step's selection
goal should be used not only at the initial seize attempt
but also whenever any resource allocation queue
checks occur - if waiting for resources is necessary -
regardless of the Must Simultaneous Seize option
setting. The recommended value for this setting is True.
In Run Setup -> Advanced Compatibility Settings, the This setting is False by default for models saved in
default value for new models of the Schedule Late Sprint 185 version or older. The setting is True for new
Current Event To Try Allocating When Resource models. No action is necessary if older model behavior
Capacity Increased compatibility setting was changed was satisfactory.
from ‘False’ to ‘True’.
In Run Setup -> Advanced Compatibility Settings, an This setting is True by default for models saved in Sprint
Allow Material Allocation Queue Bypassing 174 version or older, which was the implicit setting up
compatibility setting was added. to that point. The setting is False for new models. No
action is necessary if older model behavior was
This setting Indicates whether an object executing a satisfactory.
Consume step is allowed to immediately consume
material bypassing the material allocation queue. The
recommended value for this setting is False.
Sprint 170 Issues Solution
In Run Setup -> Advanced Compatibility Settings, an This setting is False by default for models saved in
Exclude Unrelated Rows In Timer Arrival Tables Sprint 169 version or older, which was the implicit
compatibility setting was added. setting up to that point. The setting is True for new
models. No action is necessary if older model behavior
This setting indicates whether to exclude unrelated was satisfactory.
rows if an arrival table used to schedule timer events
has primary key/foreign key relationships. The
recommended value for this setting is True.
Simio Version 9
Sprint 164 Issues Solution
Standard Library Server, Combiner, and Separator When opening a model using an older library object
objects. Flow Library Filler and Emptier objects. version, if updating the Server, Combiner, Separator,
Renamed the SecondaryResourceSeizesRequestVisit Filler, & Emptier objects, then the values entered in the
properties to SecondaryResourceSeizesRequestMove. old property names will be automatically loaded as the
Renamed the SecondaryResourceSeizesNodeName values of the new property names. So no action is
properties to required if simply opening and updating an old model
SecondaryResourceSeizesDestinationNode. with no sub-classed objects.
Renamed the SecondaryResourceSeizesVisitPriority
properties to SecondaryResourceSeizesMovePriority. However, if you have sub-classed the Server, Combiner,
Separator, Filler, & Emptier and overridden one or more
overridden processes in the sub-class, and manually
choose to update the base class to the new object
version, then you may see messages in the Error
window indicating that the old property name is no
longer found. To fix these errors, go to each of the error
locations and change the old property name to the new
property name.
Flow Library Filler object. If you have any decision logic in an existing model that
is using a Filler’s current ResourceState value for a
The resource state is now set to ‘Starved’ only if there decision, and updating to the new Filler object design
are no container entities waiting at or being processed affects that logic, then you may need to either defer the
at the filler. That state value no longer also includes Filler object update or adjust the decision logic
flow input starvation occurrences. Note that a future accordingly.
enhancement goal is to provide separate flow status
reporting for an individual flow regulator to help track
flow starvation.
Flow Library Emptier object. If you have any decision logic in an existing model that
is using a Emptier’s current ResourceState value for a
The resource state is now set to ‘Blocked’ only if the decision, and updating to the new Emptier object
current container entity has finished processing and is design affects that logic, then you may need to either
attempting to exit the emptier. That state value no defer the Emptier object update or adjust the decision
longer also includes flow output blockage occurrences. logic accordingly.
Note that a future enhancement goal is to provide
separate flow status reporting for an individual flow
regulator to help track flow blocking.
To support suspending and resuming execution of None. However, if your model has multi-capacity
individual process tokens using the Suspend and servers using work schedules where the processing time
Resume steps, as well add new process functions to of multiple entities is scheduled to end at the same
provide improved user access to the collection of time, it is possible that when resuming processing at a
tokens currently in process, each process executed by server because of coming back on-shift then the order
the simulation engine now holds a list of the tokens of entities finishing processing at the same time may
that are currently executing it. The list order is always have changed (from a random order to now always
token creation order. being in the order of entity entry into the server).
In Run Setup -> Advanced Compatibility Settings, a Run This setting is False by default for models saved in
Resource OnCapacityAllocated Process After Seize previous sprint versions. But set to True for new
Step On Seized Process compatibility setting was models. No action is necessary if older model behavior
added. When a resource is seized, indicates whether was satisfactory.
the resource’s OnCapacityAllocated process is executed
after the On Seized Process optionally specified by the
Seize step.
In Run Setup -> Advanced Compatibility Settings, a Run This setting is False by default for models saved in
Resource OnCapacityReleased Process After Seize Step previous sprint versions. But set to True for new
On Released Process compatibility setting was added. models. No action is necessary if older model behavior
When a resource is released, indicates whether the was satisfactory.
resource’s OnCapacityReleased process is executed
after the On Released Process optionally specified by
the Seize step.
Sprint 147 Issues Solution
We made a minor change to the statistics produced by Update the datasource in each report or dashboard to
the Sink object. Statistics that used to have a data use the new name.
source of [DestroyedObjects] now have a datasource of
[DestroyedEntities]. This may impact reports and
dashboards.
Simio Version 8
Sprint 146 Issues Solution
We made a minor adjustment to the random number Models may now return slightly different results,
generator – 1 out of 4 billion samples of the base particularly short-run models with a single replication.
random uniform sampling could have returned a value No discernable impact should be seen in statistically
of 1, even though the definition specifically excludes significant results.
that possibility. We corrected that issue.
There is an issue that was changed related to the Write If user has analysis that is being done with Excel file on
step. Originally we added a space between items to DateTime values (which were written out as strings
make it easier to read in Notepad. However, this originally), no extra conversion will be necessary to
changed those values to string values when opened in change a string into DateTime value.
Excel if they were DateTime values. However, the first
column would remain as a DateTime value because
there was no space before it. Now we have removed
the extra space, so all DateTime values will appear as
DateTime in Excel not string.
In Run Setup -> Advanced Compatibility Settings, an This setting is False by default for models saved in
Always Allocate Resource Capacity To First Eligible previous sprint versions. But set to True for new
Seize Requests compatibility setting was added. This models. If you see in the Trace that a resource is unable
setting indicates whether to always allocate a to continue further checking of its allocation queue due
resource's available capacity to the first eligible seize to this advanced compatibility setting being False, then
request(s) waiting in its allocation queue. If this setting that may indicate an issue with the model’s behavior. It
is False and no dynamic selection rule is being used, is recommended to go to Run Setup -> Advanced
then a resource will be unable to continue further Compatibility Settings and change this setting to True.
checking of seize requests waiting in its allocation
queue if the seize request at the front of the queue is
ineligible. The recommended value for this setting is
True so that further checking is allowed.
Sprint 144 Issues Solution
Models built prior to this sprint containing Server / Highlight the animated symbol for Server / Combiner /
Combiner / Separator will NOT have animated graphics Separator and within the Symbols ribbon, click on Add
for newly added resource states including Setup (7) and Additional Symbol to include active symbols Setup (7)
OffShiftSetup (8). and OffShiftSetup (8). Change symbol colors as desired.
Sprint 141 Issues Solution
Models built prior to this sprint containing Server / Highlight the animated symbol for Server / Combiner /
Combiner / Separator will NOT have animated graphics Separator and within the Symbols ribbon, click on Add
for newly added resource state OffShiftProcessing (6). Additional Symbol to include active symbol
OffShiftProcessing (6). Change symbol colors as
desired.
Sprint 133 Issues Solution
A model that has extra process logic executing Transfer Set the Initial Travel Mode property on the entity
to ‘FreeSpace’ steps for an entity that has an assigned instance to ‘Network If Possible’.
network value, rather than relying on the Standard
Library object behaviors where assumption is that
Entity.CurrentNetwork==’Nothing’ to transfer an entity
into free space, may have issues with the new Initial
Travel Mode property set to ‘Network Only’.
Simio Version 7
Sprint 113 Issues Solution
The Flow Library issue noted in Sprint 112 with splitting Splitting flow to multiple pipe objects now works
flow to multiple Pipe objects has now been fixed within properly in Sprint 113.
Sprint 113.
Simio Version 6
Sprint 112 Issues Solution
The Flow Library does not currently support splitting The Simio development team is actively investigating
flow to multiple Pipe objects. this issue and possible solutions. Until the problem is
resolved, if flow splitting is required at a flow node then
it is recommended to use FlowConnector objects
instead.
Sprint 107/108 Issues Solution
Related to the duplicate identifiers issue listed in sprint Any model built in sprint 106 and prior should have the
106 - in sprint 106, we gave a warning if model built Parse Element Functions in Expressions Last set to
prior to that had a duplicate identifier. Now, in sprint ‘False’. If not, there may be conflicts with a user defined
107/.108, we have a new property on the Model itself state or property and an internal element function,
that will allow users to Parse Element Functions in such as the newly added internal element function.
Expressions Last. Element functions are built in named ModelEntity.EntityType.
functions that come off of elements, or Intelligent
Objects, such as Object.Capacity,Timer.EventCount, If you believe you have a conflict with a user defined
Station.Capacity.Average , etc), ModelEntity.EntityType, stateor property, you can change the name of your
etc. state or property to be unique from Simio’s internal
element functions and change any references to that
The setting for this Parse Element Functions in user defined state or property.
Expressions Last is set to ‘False’ for all models built in
sprint 106 and prior. For new models, it is set to ‘True’.
Sprint 106 Issues Solution
Although Simio has always tried to prevent the use of Although you can ignore the warning and continue to
duplicate identifiers, sometimes it still can happen - for run, we recommend that you rename the items
example when an updated object introduces new involved to provide unique names and avoid the
constructs. Simio now detects duplicate identifiers and potential model error.
warns that you might have a logic error because of it.
If using Collection.ItemAtIndex(index) function syntax in Make sure the ‘index’ argument passed to an
an expression (e.g., QueueStateName.ItemAtIndex(3) or ItemAtIndex function is within the bounds of the
NodeName.InboundLinks.ItemAtIndex(3)), then when current collection size.
evaluating the function a runtime error will be thrown if
the index argument is out of range. Advanced users who wish to disable this error check for
a project may go to Run Setup – Advanced Compatibility
Previously, an undefined or null value was returned Settings (click the in the bottom right-hand corner of
without any error. the ribbon group) and set the Throw Error If Index Out
Of Range When Evaluating An 'ItemAtIndex' Function
Note that any model saved in a Sprint version prior to setting to False. Note that the recommended value for
Sprint 106 has this index checking still disabled by this setting is True as not doing index checking can
default to maintain model compatibility. result in other null reference errors that perhaps
require more effort to discover.
Sprint 99 Issues Solution
Search Step - If the 'Save Index Found' state variable is This was considered a bug fix and the desired Search
specified as a state variable of the original token, then step behavior.
for each new token that exits the 'Found' exit point of
the Search, the found item's collection index will be
assigned to that same state variable of the new token.
The original token's state variable is still always
assigned the index of the last item found if multiple
found items.
Simio Version 5
Sprint 92 Issues Solution
Flow Library Tank monitoring of ‘Mark’ threshold If an older model opened in Sprint 92 or later software
crossings, Monitor element: is using a Monitor element to monitor a continuous
state variable for threshold crossings, or is using a Flow
A flaw in Simio’s Monitor element was discovered where Library Tank object with ‘Marks’ and the provided
if monitoring for a continuous state threshold crossing, triggers to detect when the level ‘rises above’ or ‘falls
the monitor would potentially fire false crossing events if below’ a mark, then possibly the Monitor may be firing
process logic triggered by a crossing event immediately differently depending what kind of response logic was
adjusted the Rate of the monitored continuous variable. put in to react to a threshold crossing. Because the
Monitor will no longer be firing incorrect, false
For example, if you defined a Monitor element that was crossing events.
monitoring a level variable and set to detect when the
level passed a threshold in the positive direction, and if In many cases, probably the behavior of the model will
when a threshold crossing was detected there was be unaffected or even slightly improved because the
response logic defined that adjusted the Rate of the level false events will be eliminated. However, there may be
(still a positive rate, just maybe a slower or faster rate), a case where the model logic was relying for whatever
then the Monitor would incorrectly immediately fire reason on the false crossing event occurrences.
again even though the level had not really risen above
the threshold again. Depending on the Rate adjustment If this is the case, then what might be done is when the
logic, the result could possibly be ‘no harm no foul – just monitor first fires, if you want to adjust the level’s rate
an extra duplicate assignment’ or be as bad as causing variable and then for whatever reason want to ‘reset’
the model to go into an infinite logical loop of Monitor the Monitor to immediately consider the threshold
events and Rate assignments. again crossed, you have the option of disabling and
then reenabling the Monitor which will essentially
The Monitor element’s behavior starting in Sprint 92 If ‘reset’ it.
Monitoring a Continuous State for Threshold Crossings
The Process element provides an Advanced Options -> This change in default settings will have no impact on
Token Actions – On Associated Object Destroyed option the behavior of old models. However for new models
that allows you to indicate whether or not tokens being built, if entities are being destroyed with active
executing the process will automatically end processing tokens pointing to those entities, you may by default
(be disposed of) if the token’s associated object is now see cases of ‘object or element reference not set
destroyed. Previously, the default for this option was for to an instance of an object’ runtime errors being
a token to end processing but that default has now been thrown (e.g., thrown by process steps trying to access
changed to continue the process. information on a non-existent, destroyed entity). If so,
setting this option to ‘EndProcess’ on the Process
element is an easy way to automatically stop
execution of any tokens that were pointing to an entity
that has been destroyed. Or, alternatively, in your
process logic before attempting to reference a token’s
associated entity, you may do a check that the token
has an associated object (Token.AssociatedObject !=
Nothing).
Sprint 83 Issues Solution
The Entity.Population.IndexOfItem(entity) function was Make sure the ‘entity’ argument passed to the
fixed to only accept a valid entity object argument. The Entity.Population.IndexOfItem(entity) function is an
function continues to return the one-based member entity.
index of the entity if the entity is a member of the
population, or 0 if the entity is not a member. The
function will throw an error if the ‘entity’ argument is
not an entity object (e.g., is not an object reference or is
a non-entity object such as a node or link).
Sprint 80 Issues Solution
Seize step – If using the ‘SmallestDistance’ or If it is still desired to always use the direct (straight
‘LargestDistance’ selection goals, the candidate line) distance from the candidate resource to the
resources to seize are moveable resources, and the owner object, then use the ‘SmallestValue’ or
‘Request Move’ option requesting a move by the seized ‘LargestValue’ selection goal instead. The expression
resource(s) to a node is specified, then the distance used would be something like
to evaluate a candidate is now the network distance of ‘Candidate.Object.DirectDistanceTo.Object(Entity)’ if
the candidate resource to the destination node. for example the owner trying to seize the resource is
Previously, the distance used was always the direct an entity.
(straight line) distance from the resource to the owner
object.
Another option is, when opening the old model with the custom
transporter, to not update to the new vehicle or worker definition,
instead choosing to keep your old object design as is.
Sprint 72 Issues Solution
The Random Number Stream property Standard Library BasicNode and TransferNode objects now provide a
on a node (which was hidden by default) Random Number Stream property in Advanced Options if you would
was removed from the node and instead like to explicitly specify the random number stream used when
is now available on the Transfer step if selecting an outbound link from the node by link weight. That property
transferring from a node to outbound displayed by the node now maps down into the new Random Number
links. Stream property that was added to the Transfer step.
We now prevent a model from assigning Update your model so that a negative number is not assigned to a Size
a negative value to a Size state, such as state. Consider wrapping any existing expression with a Math.If
Size.Length or Size.Height expression, such as Math.If(MyOldExpression<0, 0, MyOldExpression)
which will assign a value of 0 if your old expression is trying to return a
negative value.
We now prevent destroying an entity If you get this error message, then the model logic needs to be
traveling on a link because this can adjusted to not destroy an entity traveling in the middle of a link.
sometimes cause loss of data integrity Before destroying you can test if it is on a link and not at a node
(e.g. a crash). “(Entity.CurrentLink != Nothing) && (Entity.CurrentNode == Nothing)”
and if True, then defer destroying the entity.
Sprint 65 Issues Solution
We have removed the Existing models that include a ‘subclassed’ vehicle will need to have the
IgnoredDestinationNodeID variable that OnVisitingNode process manually updated. The
was utilized in the OnVisitingNode IgnoredDestinationNodeID variable that was removed was referenced
process of a vehicle. in an expression and Assign step within the process. This must be
removed. Please refer to the current vehicle’s OnVisitingNode process
and search for the new ‘IgnoreVisitingCurrentNode’ approach that is
used.
Sprint 60 Issues Solution
We have added new predefined names Although your models should continue to work if the conflict is in an
in Simio (e.g. “Cost”) that may conflict embedded object, if the conflict is at your model level, you should
with user-defined names. rename your conflicting name (e.g. rename your “Cost” to “TotalCost”).
Execute step changes have been made If an old model was relying on the old Execute (Continue) behavior to
for ‘WaitUntilProcessCompleted’ and execute the specified process ‘in-line’ rather than scheduling its
‘Continue’ Token Wait Actions. execution on the calendar, then it is possible you will need to change
the Token Wait Action to ‘WaitUntilProcessCompleted’ as part of
updating the model. See release notes for Execute step behavior
changes.
Parking at a BasicNode or TransferNode. A change was made related to the timing of ending transfers into the
ParkingStation of either a BasicNode or TransferNode. Previously, the
EndTransfer to complete a parking was scheduled as a current event on
the simulation calendar. Now, the EndTransfer is instantaneously
executed upon the Park step attempt. If you have custom logic using
Park steps in your model, and that logic was sensitive to (relied upon) a
specific order of simultaneous events occurring at the same simulation
time, this change may have possibly caused an issue with your logic.
The corrective action would be to make sure your process logic does
not rely upon (is sensitive to) simultaneous event ordering.
Simio Version 3
Sprint 51 Issues Solution
A library change prevents Workers were enhanced in 51 in such a way that models built in 51 will often not
some backward work correctly in earlier versions, even if the new features are not explicitly used.
compatibility of Workers. You may need to delete the Workers and re-add them in the earlier sprint.
Sprint 49 Issues Solution
The conversion utility for If you need to convert SPF files to the SPFX format you can use Simio software
SPF files is no longer version 3.48 or earlier, or download the stand-alone conversion utility from:
included in Simio. http://www.simio.com/downloads/public/software/ConvertSimioSPFFileToSPFX.zip
Sprint 46 Issues Solution
The CurrentCapacity state of Assign an integer or value instead. Use the Math.Floor or Math.Ceiling functions if
a resource object or station necessary to round a real value to an integer.
element has been changed
from data type Real to data
type Integer. Thus,
attempting to assign a real
value directly to the current
capacity (e.g., “4.3”) will
now result in a runtime
error.
The Enabled state of a Assign a value or condition returning a value of True(1) or False(0) instead.
timer, monitor, or process
element has been changed
from data type Real to data
type Boolean. Thus,
attempting to assign a real
value directly to the state
(e.g., “4.3”) will now result
in a runtime error.
Sprint 42 Issues Solution
We have provided more -A frequent error that is now detected is using a reference like “LiftTruck.Priority”
stringent error checking. to refer to the state of a dynamic object. That form of reference is incorrect and
Some errors that were must be changed to the form “LiftTruck[1].Priority”.
previously overlooked are - If you were using an expression for a delay time (e.g. Processing Time) that could
now reported, for example evaluate to a negative number (like “Random.Normal(10,5)”) we previously
using a negative number for converted negative times to 0. That resulted in a distribution spike at time 0 and
a delay time or invalid actually shifts the mean of the numbers generated. Now, when a negative number
parameters for a is detected, we will generate an error. If you still want the previous behavior, you
distribution. can obtain it using the Max function. For example “Math.Max(0,
Random.Normal(10,5))”
- In most other cases even though your model was “working” it may have been
generating unexpected results due to the errors. Please correct the indicated
error(s).
Simio Version 2
Sprint 40 Issues Solution
‘Open’ and ‘Close’ public If you were using an Execute step to call those public methods:
processes on Conveyor, • To replace calling a Close, replace the Execute with an Assign step assigning
TimePath, and Path have been the link’s ‘DesiredDirection state variable to the value
removed ‘Enum.TrafficDirection.None’.
• To replace calling an Open, user can replace the Execute with an Assign step
assigning the link’s ‘DesiredDirection’ state variable to the value
‘Enum.TrafficDirection.Forward’, ‘Enum.TrafficDirection.Reverse’, or
‘Enum.TrafficDirection.Either’.
Vehicle and Resource object If you have animation or decision logic referencing the ResourceState of either a
states have been enhanced Resource object or Vehicle object, then note the changes to the possible
ResourceState values. The animation or process logic may need to be updated
accordingly to account for the new changes. For example, where before a
Vehicle object may have been in the resource state of ‘Busy = 1’, it may now be
getting assigned the state value ‘Transporting = 7’.
Sprint 37 Issues Solution
(Windows 7 Only) When you It appears to correct itself if you then change the style. Loading files with circular
first draw a circular gauge, the gauges in them (like the Tank SimBit), seem to work fine.
image of it may stay very small.