Release 5, Sprint 82-87

Animated Objects Walking People

We have enhanced our animation support to include animations, which provide more realistic movement of entities through the system. The built-in Simio symbol library now includes multiple male and female symbols within the Library\People\Animated area of the project symbols.

The ModelEntity within the Project window now has a string state named Animation, referred to within the model as ModelEntity.Animation. This string state is then used within the ModelEntity properties window as the default value for the Current Animation Index.

Once an entity is placed in the Facility window, the default green arrow symbol can be replaced by an animated person (from the Library\People\Animated directory within the Project Symbols). Right-clicking on an animated object will allow you to select List Animations of Active Symbol, which in turn will open the list of animations for that particular object.

 The animations may be referenced by either numeric index (in the case above, 1 through 24) or by string value (i.e., “Walk”). When using the ModelEntity.Animation string state, the string values above should be used. For example, in an Assign step upon arrival within a Source, the ModelEntity.Animation may be set directly to “Run” or could be assigned to be Random.Discrete(“Run”, .25, “Dance1”, .5, and “Swim”, 1). In that case, 25% of the entities would run, 25% would dance and the other 50% would swim.

Alternatively, the Current Animation Index property itself may reference either the string or number directly (instead of using the default value of ModelEntity.Animation).

The entity’s speed, ModelEntity.DesiredSpeed, will also impact the entity movement (i.e., a slower moving entity will appear to be walking, while a faster moving entity be running).

New SimBits

FindAMinimumStateValue.spfxThis SimBit illustrates the use of the new Find step to search a state variable array for the minimum value.
PickUpDropOffFlow.spfx – This SimBit demonstrates the Flow Library features in conjunction with an entity that has a container. The entity’s container is filled at one location and then the entity travels to a destination where it empties its container.
AnimatedPeople.spfxThis SimBit includes a demonstration of various ways to animate moving people (entities) in the system.

New and Enhanced Steps

General Note about New Step Enhancements and Functions
Enhancements made to many of the steps (as noted below) are simply to allow you to write process logic without having to be required that the executing token is associated with the object that the step is acting upon, or requiring the process steps to have to be inside the ‘Parent’ object that they are acting upon. This flexibility may be particularly useful to object builders. Many of these features, for example, are used to simplify modeling within the Crane library.
‘Controller’ process logic external to a vehicle, for example, can now use Pickup/Dropoff steps to command the vehicle to pick up or drop off entities. Or, you could model a train where all the pickup/dropoff logic is inside a single ‘Locomotive’ object, and the locomotive’s logic is going to direct multiple ‘Railcar’ transporters pulled by the locomotive to pick up or drop off cargo. Previously, you were forced to put the Pickup and Dropoff steps inside each individual railcar.
Many of the new functions have been added for flexibility as well. You can now use the various schedules functions to determine when a particular resource will be changing shifts and make routing decisions accordingly, for example.

Find Step
We have added a new Find step to the Processes window that may be used to search the value of an expression over a specified range of one or more indexed variables. The expression will typically involve array state variables (vectors or multi-dimensional arrays) or indexing related functions.
The Find step may be used to search a vector type state variable for a minimum or maximum value, for example, or to search the array for a given condition (values over the amount of X). This is a feature that many customers have asked for, as the Search step does not search for values within state variables.

‘Resource Type’ Enhancement on Allocate Step
The Allocate steps now has an additional ‘SpecificObject’ option for the ‘Resource Type’ property that that allows the owner that the step’s action is in behalf of to be specified as a specific object reference. Before, the owner always had to be either the parent object containing the step or the associated object of the token executing the step. Similar changes were made to many other steps in the previous sprint to provide more flexibility in process logic design.

‘Entity Object’ Enhancement on Destroy, Route, SetNetwork, SetNode, Park and Unpark Steps
The Destroy, Route, SetNetwork, SetNode, Park and Unpark steps now support a ‘SpecificObject’ choice to specify the specific entity object to destroy, route, set the network, set the node, park or unpark. All steps now include an Entity Object property for specific entity referencing and are no longer limited to just ParentObject or AssociatedObject choices for the Object Type property.

‘Transporter Type’ and ‘Transporter Object’ Enhancement on Pickup, Dropoff and SelectDropoff Steps
The Pickup, Dropoff and SelectDropoff steps have been enhanced to allow the transporter to be more flexibly specified. Previously, these steps could only be used in process logic of the parent transporter to which the step actions pertained. The Transporter Type property allows the user to select the object associated with the executing token, the parent object or a specific object reference. The Transporter Object property is visible when the Transporter Type is ‘SpecificObject’ and is the specific object to perform the pickup, dropoff or select dropoff.

 ‘Object’ Enhancement on Insert and Remove Steps
The Insert and Remove steps now support a ‘SpecificObject’ choice to specify the specific entity object to insert into or remove from a queue. These steps now include an Object property for specific object referencing and are no longer limited to just ParentObject or AssociatedObject choices for the Object Type property.

Transfer Step Enhancement
When transferring from the current node to an outbound link, there are now an Outbound Link Preference and Outbound Link Rule properties which can override the default settings for those property values that are defined on the node.

‘Entity Type’ and ‘Entity Object’ Enhancement on Batch, UnBatch, PlanVisit, SelectVisit, and Arrive Steps
The PlanVisit, SelectVisit, Batch, UnBatch and Arrive steps now support a ‘SpecificObject’ choice to specify the specific entity object to batch, unbatch, search visit requests, select destination of a visit request or notify visit request of arrival. All steps now include an Entity Object property for specific entity referencing and are no longer limited to just ParentObject or AssociatedObject choices for the Object Type property.

Search Step Enhancements
Search step enhancements have been added to allow the searching of new collection types including TransporterList, NodeInboundLinks, NodeOutboundLinks, NetworkLinks, ResourceOwners, and ObjectPopulation.  Link-related searching may be useful for special node-oriented process logic as part of logical decision making.
The Search step also now provides both Starting Index and Ending Index properties to narrow the range of items to search within the collection. Previously, only a Starting Index option was provided. The Starting Index and Ending Index properties are also now available for the ‘MinimizeReturnValue’ and ‘MaximizeReturnValue’ objective-oriented search types.

‘Owner Type’ Enhancements on Steps
The Seize, Release, Move, Produce, Consume and Search steps now have an additional ‘SpecificObject’ option for the ‘Owner Type’ property that that allows the owner that the step’s action is in behalf of to be specified as a specific object reference. Before, the owner always had to be either the parent object containing the step or the associated object of the token executing the step.
This kind of feature provides more flexibility in process logic design. For example, an entity may go through a server, require a resource for processing and then the entity may wish to continue to another station without immediately releasing the resource. Process logic elsewhere in the model, regardless of whether the token executing the process is associated with the entity, can now easily command that entity to release the resource later in time.

Transfer and EndTransfer Steps ‘Object Type’
The Transfer and the EndTransfer steps now provide an additional ‘SpecificObject’ option for the ‘Object Type’ property that that allows the entity being transferred to be specified as a specific entity object reference.  Before, the entity always had to be either the parent object containing the step or the associated object of the token executing the step. This kind of feature provides more flexibility in process logic design.

Travel Step ‘Token Wait Action’
The Travel step now includes a ‘Token Wait Option’ property that can be set to either ‘None (Continue)’ or ‘WaitUntilTravelCompleted’. This kind of feature provides more flexibility in process logic design, by allowing additional control of a token’s flow through process logic.

Other Animation

Expanded List of 3D Import Formats
We can now import from a larger number of 3D import formats, including Sketchup (skp), AutoCAD (.dfx), 3DS Max (.3ds), Collada (.dae), LightWave (.lwo), Milkshape 3d (.ms3d), Wavefront (.obj), Stanford Polygon .ply), and Stereolithography (.stl) files.

Shadows Change in Visibility Ribbon
The Shadows icon within the Visibility ribbon has now become two separate icons, including Direct Shadows and Diffuse Shadows.  The Direct Shadows icon shows or hides shadows from a directional light source, like the sun. The Diffuse Shadows icon shows or hides soft shadows from other objects interacting with the illumination of an object. Only one of the shadows icons may be on at a time.

Additional Symbol ‘Look’
Within the Symbol window, we’ve added a new ‘Look’ (the previous symbol definition window is now the ‘Design’ of the Symbol window). For those situations where a single symbol 3d geometry may have several different textures or colors applied to it, the ‘Look’ allows users to define each of those. These new looks are then put into the library of symbols to be selected for any given project. This saves on both disk and video memory compared to having multiple different symbols with the same geometry.

Transparent Option on Floor Label
We have added the option for a transparent type background to floor labels. This was a user requested enhancement.
Symbol Rotation
We have added the option for rotating a symbol 180 degrees in the Symbol Import window. This was a user requested enhancement.

Enterprise Edition (Facility Planning and Scheduling)

New Gantt Chart Visible/Editable Properties and Gantt Visibility Options
Several smaller items have been enhanced within Simio Enterprise edition including the addition of Gantt Chart Visible and Editable properties within a data table. This will allow a particular column(s) to be displayed on the Resource Plan Gantt when the table is a Time-indexed type table.
Additionally, various rows may now be toggled on/off within the Resource Plan Gantt by selecting the Gantt ribbon. Rows, such as Resource States, Exceptions and Constraints, can be turned on/off for more specific focus within a particular Gantt chart.

New Resource Capacity Log and Capacity row on Multiple Capacity Resources in Resource Plan Gantt
Within the Simio Enterprise Edition, we have added a Resource Capacity Log to the Logs section of reports. This log displays all of the capacity changes for the resources during the simulation run. This is especially useful when resource capacity is based on a work schedule. The capacity of the resource is displayed, along with the number that has been ‘Allocated’ (seized), as well as the number ‘Utilized’. The utilized value may differ from the allocated value when a failure occurs or when a resource is waiting for material or a secondary resource before processing.
Additionally, within the Resource Plan Gantt, when a resource has a capacity greater than one, a new row named Capacity will be displayed and a usage type Gantt shown for the capacity allocated for that resource over time.

New Transporter Usage Log
Also within Simio Enterprise, we have added a Transporter Usage Log to the Logs reports. This log displays the usage of any transporters (used for transporting, not being Seized). The start time is recorded once the transporter has arrived and loaded the entity and ends once the entity is done being unloaded at its destination. This log corresponds to the transporter’s information within the Resource Plan Gantt chart as well.

Gantt Changes
Within the Simio Enterprise Edition, there have been several changes to make the entity and resource Gantt charts easier to use. When an object has ‘Resource Logging’ set as True, two additional properties are available. The Display Category property allows for hierarchical arrangement of resources within the Resource Plan Gantt (for example to display all resources of a given type or department grouped together). The Display Color property allows for user specified colors within the Resource Plan Gantt.
Additionally, if an additional column is added to the Resource Usage Log window for grouping (previous versions had this feature for Resource Gantt grouping), this column may be referenced within the Entity Workflow Gantt. This allows the Gantt chart for entities to be ‘grouped’ into various categories, as specified via the resource usage log (which typically may reference a data table column). See the Help page titled Resource Usage Log (Enterprise) for an example.

Miscellaneous User Interface

New Breakpoints Icon in Project Home Ribbon and Breakpoints Window
A new Breakpoints icon has been added to Windows section of the Project Home window. This opens a Breakpoint window that displays the various breakpoints that have been set by the user in either the Facility or Processes window.
This window also provides additional functionality for turning on / off breakpoints with a checkbox, as well as setting an expression and/or count that must be met for the breakpoint to execute. Expressions may involve simulation time, specific object information (number in a queue), functions, etc. Hit count can be specified as Always, Equal To (count) or At Least (count). The count is not evaluated unless the expression (if any) evaluates to true.

Table Referencing Enhancement
We have added the ability to reference a data table entry as TableName[row, column] in an expression. This makes it easier, for example, to use Find step to search a table in the same manner as a variable matrix.

Schedule Referencing Enhancement
A Schedule property now provides access to the specified schedule data. This schedule property may be a property that is passing some schedule data into an embedded object’s logic or may be a property within a table. Within the expression editor, you will now see for any schedule property access to the schedule functions.

HasValue Function for Element and Object Properties
A new HasValue function has been added for all Element and Object type properties in the model. The function can be referenced as ‘ElementPropertyName.HasValue’ or ‘ObjectPropertyName.HasValue’.
Model Warning Added
We now give a warning when the total number of tokens in the system is more than 100,000. We also provide some course detail as to where the problem (if there is one) might be in the model. This will help prevent memory problems when a user may have an undetected logic issue.

Enhance State Arrays/Matrices Dimension Types
Within states, such as real, integer, object references, element references (all states but Lists), the Dimension Type property has been enhanced to include3-dimensional up to 10-dimensional array options. This capability was previously within Simio, however, not as clearly stated.

Time-Indexed Table Properties
A data table may now be specified as Time-indexed, based on the properties of the table, as shown below. When the Time-indexed property is ‘True’, you may specify the Starting Time and Interval Size. Within a time-indexed table, you can then have a column(s) of values within the table and retrieve a single value from the column, not by direct indexing, but indirectly, based on the current simulation time. Two additional table functions have been added, including:

TableName.PropertyName.TimeIndexedValue
Returns the value of the property in the row that corresponds to the current simulation time.

TableName.TimeIndexedRow
Returns the row index that corresponds to the current simulation time.  For example, let’s say you had a column of values (IntegerColumn1) within Table1 that were 10, 20, 30, 40 and 50, using the above Interval Size. Then, from time 0 – 200 minutes, the TableName1.IntegerColumn1.TimeIndexedValue would return a value of 10. For the next 200 simulation minutes, that same function would return the value of 20 and so on.

New CSV Separator for Projects
Within any given project, in Project Properties, there is now a field to indicate the separator character to use when writing to a .csv file. You can enter a specific character, but the preferred thing to do is to leave it at its default value of blank, and Simio will use the "List Separator" character defined in Windows' regional settings.

Database Binding Options – MySQL
Currently, there are many database type options when binding your table data to a database. We have now added the MySQL option to this list:

Performance Improvements
We have made some changes internally for run speed improvement that will impact some but not all models.

New ‘Reset to default view’ in Pivot Grid Window
In addition to being able to add, manage and change views within the Pivot Grid window, you may now also reset the pivot grid table to the original default view.
Properties Enhancement
When a property for a model is specified, under the Appearance section of properties, the Display Name and Category Name may be specified to group the various properties. You are also now able to specify a ‘Parent Property Name’ such that one property is listed underneath another related property and accessible using the ‘+’ on the parent property.

New Schedules Functions

Value(dateTime)- Returns the schedule's value for the specified numeric datetime (simulation time).
NextValue(dateTime) - Returns the schedule's next value if at the specified numeric datetime (simulation time).
TimeOfNextValue(dateTime) - Returns the simulation time (in hours) of the schedule's next value change if at the specified numeric datetime (simulation time).
TimeUntilNextValue(dateTime) - Returns the time duration remaining (in hours) until the schedule's next value change if at the specified numeric datetime (simulation time).

New Resource Object Functions

Capacity.Next - Returns the next scheduled capacity of this resource. *Note: If the resource is not following a work schedule then this function simply returns the current capacity since any future capacity changes are unknown.
Capacity.TimeOfLastChange - Returns the simulation time (in hours) that the capacity of this resource most recently changed.
Capacity.TimeOfNextChange - Returns the simulation time (in hours) of the next scheduled capacity change of this resource.*Note: If the resource is not following a work schedule then this function simply returns infinity since the timing of any future capacity changes is unknown.
Capacity.TimeSinceLastChange - Returns the elapsed time duration (in hours) since the most recent capacity of this resource.
Capacity.TimeUntilNextChange - Returns the time duration remaining (in hours) until the next scheduled capacity change of this resource. *Note: If the resource is not following a work schedule then this function simply returns infinity since the timing of any future capacity changes is unknown.
ResourceOwners.Contains(owner) – Returns True (1) if the list of owners that have currently seized capacity units of this resource includes the specified owner. Otherwise the value False (0) is returned.
ResourceOwnersThe objects that currently own (have seized) capacity units of this resource.
ResourceOwners.NumberItemsReturns the number of objects that currently own (have seized) capacity units of this resource.
ResourceOwners.FirstItemReturns a reference to the first owner in the list of owners that have currently seized capacity units of this resource.
ResourceOwnters.LastItemReturns a reference to last owner in the list of owners that have currently seized capacity units of this resource.
ResourceOwners.ItemAtIndex(index)Returns a reference to the owner at a specified index position in the list of owners that have currently seized capacity units of this resource.
ResourceOwners.IndexOfItem(owner)Returns the one-based index of the first occurrence of a specified owner in the list of owners that have currently seized capacity units of this resource. If the owner has not seized the resource then the value 0 is returned.

New Token Function

AssociatedObject - Returns the object that this token is associated with.

New Entity Functions

NetworkDistanceTo.NextEntityAheadOnLink- If the entity object's leading edge is on a link, then this function returns the distance from the entity's leading edge to the trailing edge of the next entity ahead on the same link. If there is no entity ahead then the value Infinity is returned.
NetworkDistanceTo.NextEntityBehindOnLink - If the entity object's trailing edge is on a link, then this function returns the distance from the entity's trailing edge to the leading edge of the next entity behind on the same link. If there is no entity behind then the value Infinity is returned.
Population.Contains(entity) – Returns True (1) if the population contains the specified entity. Otherwise the value False (0) is returned.
Sequence.DestinationNodes.Contains(node) – Returns True (1) if the entity’s assigned sequence contains the specified destination node. Otherwise the value False (0) is returned.
Population.NameReturns the string name of the entity’s population instance. This is useful when working with just an object instance (e.g., ForkLift5) rather than the object definition (e.g., ForkLift).

New Queue State Function

Contains(object) – Returns True (1) if the queue contains the specified object. Otherwise the value False (0) is returned.

New Node Functions

InboundLinks.Contains(link) – Returns True (1) if the collection of drawn inbound links into this node contains the specified link. Otherwise the value False (0) is returned.
OutboundLinks.Contains(link) – Returns True (1) if the collection of drawn outbound links from this node contains the specified link. Otherwise the value False (0) is returned.
InboundLinks.NumberItems - Returns the number of drawn inbound links into this node.
InboundLinks.FirstItem - Returns a reference to the first link in the collection of drawn inbound links into this node.
InboundLinks.LastItem - Returns a reference to the last link in the collection of drawn inbound links into this node.
InboundLinks.ItemAtIndex(index)Returns a reference to the link at a specified index position in the collection of drawn inbound links into this node.
InboundLinks.IndexOfItem(link)Returns the one-based index of a specified link in the collection of drawn inbound links into this node. If the link is not an inbound link into this node then the value 0 is returned.
OutboundLinks.NumberItems - Returns the number of drawn outbound links into this node.
OutboundLinks.FirstItem - Returns a reference to the first link in the collection of drawn outbound links into this node..
OutboundLinks.LastItem - Returns a reference to the last link in the collection of drawn outbound links into this node.
OutboundLinks.ItemAtIndex(index)Returns a reference to the link at a specified index position in the collection of drawn outbound links into this node.
OutboundLinks.IndexOfItem(link)Returns the one-based index of a specified link in the collection of drawn outbound links into this node. If the link is not an outbound link into this node then the value 0 is returned.

New Intelligent Object Function

SeizedResources.Contains(resource) – Returns True (1) if the list of resources currently seized and owned by this object includes the specified resource. Otherwise the value False (0) is returned.

New Network Element Functions

Link.Contains(link) – Returns True (1) if the network’s collection of link members contains the specified link. Otherwise the value False (0) is returned.
Links.NumberItemsReturns the number of links that are members of this network.
Links.FirstItemReturns a reference to the first link in the collection of links that are members of this network.
Links.LastItemReturns a reference to the last link in the collection of links that are members of this network.
Links.ItemAtIndex(index)Returns a reference to the link at a specified index position in the collection of links that are members of this network.
Links.IndexOfItem(link)Returns the one-based index of a specified link in the collection of links that are members of this network. If the link is not a member of this network then the value 0 is returned.

Flow Library Tank Object Enhancement

The Tank object within the Flow Library now has a ‘State Assignments’ section of properties to allow you to specify state assignments when the tank gets full or empty or its level rises or falls below a tank mark without having to go to add-on processes to do so.