In addition to new features, we made a few other tweaks in ExtendSim 9 updates that are important, but not really considered new features. Check here for the details.

Note: ExtendSim 10 is the current release. - please consider upgrading to the current release.
If you choose to stick with ExtendSim 9, updaters will remain available on this web site until the release of ExtendSim 11.

From ExtendSim 9.3 to 9.3.1

Final update to ExtendSim 9 released on October 28, 2019

Suite AT OR New block feature

If Preserve Uniqueness is checked, the Batch block's Options tab now allows you to select an attribute in which to store the index of the global array containing the list of batched item indices.

Equation includes can now be located in the Includes folder within the Extensions folder.

Suite AT OR CPApplication level & block fixes

Stat::Fit is now being installed appropriately.

The Queue block (Item library) was improperly reporting queue length when the mode was Resource Pool rather than Sorted.

Two blocks in the Value library (Math and Random Number) had issues with animationpoly coordinates being read in as negative numbers.

When the Throw and Catch blocks (Rate library) are copied into a model, we now check first if a Global Array exists and that the index is valid.

An include file (Block location utils v9.h) was changed to avoid infinite loops and to give an error message rather than prevent the model from opening.

From ExtendSim 9.2 to 9.3

Released on June 25, 2019

Suite AT OR CPCompatibility

Release 9.3 IS backwards compatible with releases 9.2 and 9.1. However, due to architectural changes, release 9.3 (and 9.2 and 9.1) are NOT backwards compatible with 9.0 or earlier. Once files have been saved in ExtendSim 9.3 (or 9.2 or 9.1), they cannot be read by release 9.0. If you've opened a file in release 9.3 (or 9.2 or 9.1) and want to keep it readable by previous releases, DO NOT Save it. Instead, use the Save As command to save a copy of the file with a different name or save it to a different location.

Suite AT OR CPNew and improved application features

New functions • DLLUnloadLibrary and EquationCompileDynamicVariablesSilent

New message handler • PasteBlock3

New system globals • SysGlobalInt60-79, SysDBNGlobalInt0-19, SysARMGlobalInt0-19

Data tables linked to database tables use some of the database formatting for cell display

Suite AT OR CPApplication level fixes

DBGetDataAsString returns a zero if it’s a child field and no parent is selected.

Bug fix in dateTime functions for unusual overflow condition.

Some of the matrix functions had row and column arguments reversed.

Volume keys on keyboard could insert null characters into scripts.

Windows could sometimes go above the toolbar.

OpenDialogBoxToTabName sometimes had a refresh issue.

GetBlockMemSize could crash if an invalid block number was passed in.

Datatable linked to a database table didn't deal well with percent formatted fields.

Poking a safeArray to ExtendSim via OLE/COM should work better than in 9.2.

Datatable dialog item message send to block when you tab to a cell.

Copying data from datatables had issues with empty cells in the middle of the data.

Could sometimes get an extra empty model when you created a new model.

Changes made to dialog parameters in DialogClose message handler weren't saved.

Model should require a Save after you make a connection.

Suite AT OR CPNew & improved block & Includes features


-Added code for ADO_SetConnectionID and ADO_OracleGetSchemaObjectType to ADO_DBFunctions v9.h and COM_DBFunctions v9.h

-Added Attrib_Info_Changes_Complete to Attribs v9.h and a check for _ItemIndex in Attribu_CheckReserved

-Added “which” argument values for DTColumnTagGet function call in Column Tags v9.h

-Added new Excel and other constants to Constants v9.h as well as new info indexes for top and left location for GetDialogItemInfo

-Added new functions to Database v9.h

-Multiple enhancements to the Equation v9.h include

Changes to many blocks in multiple libraries

-Separated constants DILinkinfo and DILinkUpdateinfo

-Added static variable change detection

-Added more controls, reports, and error messages

-When using DILinkMsg reset, resets to previous status rather than to True

-Updated the relative positions of constants.h and attribs v9.h

-New includes: Static Variable Mgt – Functions, Static Variable Mgt – Prototypes, Static Variable Mgt – Variables, Dialog Utilities

Suite AT OR CPValue library

Data Import/Export

-Added connectivity to Oracle database

-Over 70 fixes and enhancements to this block as it was extensively updated; see the list of comments at the top of the block’s script tab for details

Data Source Create

-The resize button now allows to add columns as well as rows

-If columns are linked to string attributes, the names of the columns are the attribute names


-Fixed initialization error with first call to Euler at currenStep=0 in continuous model

Lookup Table

-In ExtendSim 8, fast lookup was not working; disabled until new binary search

-Fixed error with calendar date if not linked to DB

-In a continuous model the request can be in between values

-Almost 30 fixes and enhancements to this block as it was updated; see the list of comments at the top of the block's script tab for details


-Added the option to ignore BLANK if selected the operation in OR

-When the Math block is in a hierarchical block and zoomed in, there could be a problem with the animationpoly coordinate being negative. The offset is being limited to get positive coordinate.

Random Number

-Fixed transfer of alpha and beta info for Logistic distribution between ExtendSim and Stat::Fit

-In empirical mode for stepped option, forces the last probability to be 0 or Blank so the last bin which has no upper limit also has no associated probability

-Several changes to make empirical distribution work better

-Changed from a static array of 1k rows to a dynamic array


-If the record connector is connected, the block won’t call DB_CheckRowIndex()

-Added register content and structure to "on PasteBlock" because a pasted block was not getting registered.

-Changed the default for DB_RelatedReadOptions_pop = REPORT_PARENT_INDEX

-Fixed a problem with how the number of requested connectors was calculated

-Moved call to CheckData_IndexHealthCheckAll() to earlier in CheckData to before we do RecordID checking

Scenario Manager

-Added logic to enable having multiple Scenario Manager blocks in the same model. Distinguish the "active" Scenario Manager from inactive based on which block's "Run Scenarios" button was clicked.

-Created a new RECORD option where whole records can be copied from a source to a target table

-Added code to LINKCONTENT message handler and supporting functions to ensure that changes to database factor source tables during modeling initialization are transferred to target tables

-Unregister all link content alerts before setting up scenarios in RunScenarios

-Fixed out-of-range problems for CellAccept responses in DoScenarioNameChange

-Fixed response variable name data entry problem

-Added code to prompt for response names when adding cloned or dragged dialog variables

-Updated total number of DB factor types to accommodate the "cell" factor type in DoDBFactorTableClick

-Fixed many issues with the DB Factor and Response feature and changed name of old DB FACTOR RECORD option to DB FACTOR CELL and make it 5th element in popup list

-Adjusted the size of the target response table to match the number of scenarios being run

-Check to make sure a responses table exists before creating individual fields

-Revised right-click connecting


-Added the option to ignore BLANK if selected the operation in OR

-When the Math block is in a hierarchical block and zoomed in, there could be a problem with the animationpoly coordinate being negative. The offset is being limited to get positive coordinate.

-Added register content and structure to "on PasteBlock" because a pasted block was not getting registered

-Added new options for specifying the record index: last record and last record+1

-Added ability to re-dimension text files

-When user selects writing to a text file, default EXP_chk to True.

Suite AT ORItem library


-Added connector: Values_Out_Num_In_Proc

-Added checkbox: PE_AR_When_Reassign

-Improved performance by making the 3 calls to AnimationHide() conditional

Fixed PE_OnlyIfFul checkbox -


-Now delays clearing the item’s list of batched items until the item has departed

-Added feature in the Options tab, when Preserved uniqueness is checked, to allow users to save index of global array that stores the list of batched items in an attribute

-Fixed logic for determining whether to dispose of items in BuildBatch if Resource Manager is present

-Gets all items on all inputs when in Matching mode

-Preserves batched items until batch is formed

Convey Item

-Call CalDelta in postInitSim to fix issue when speed is connected to input connector

-Fixed unexpected reentrancy regarding Taken notification


-Timing attribute issues could arise if the user set createTimeAttrib_chk=True and then changed createOptions_pop

-Fixed Create by Schedule option to support linking to a global array

-Supports “on AttribInfo” for RndDb_AttributID_pop

-Checks if distribution parameters change during the run


-Reentrance flags weren’t getting reset at beginning of simulation

-Fixed issue so that the DB coordinates map to the correct SA name

-Wasn’t responding to DBTableSort being called on a database table that is supplying string attribute values to a string attribute

-Fixed uninitialized variable in DataTableResize

-Fixed bug when detecting how many rows are selected in attribNames_ttble

-Added Attrib_Info_Changes_Complete to resolve timing issues for custom blocks

-String attributes with no values had issue if linked to a DB table with zero records


-The variable MaxhistoryCols was dimensioned with one less column than needed


-Added new static bookkeeping variable for internal consistency checking static variables

-In ItemOut downstream queries, check queue type before using ListGetElements to get length of queue. Can only depend on ListGetElements when queue is SORTED type

-Fixed itemArray memory leak

-Fixed atypical queue length, costing, and renege calculation issues

-Fixed issues with ARM and added name tracking and other ARM enhancements

Queue Equation

-Changed valuesIn connector to a connector array

-Added the “C” Capacity connector

-Fixed AttributInfo message handler to account for attribute name changes in Contents tab

Queue Matching

-Set default value of con_BinReqOptions_Pop to Con_Bin_Req_Options_use_Curr_Val

-Updates lengthOut during run when a Shift is requested

-ABC was not getting calculated when batch was turned on

-Added reentrance flag to stop LinkContent and LinkStructure from reacting to changes

-Rewrote the DumpItems_All procedure


Changed the default for DB_ReadOptions=Parent_Record_Index if child field -

-Fixed the logic to sendMsgToInputs for results

Resource Manager

-New arguments for the new fractional resources feature

-Added logic so user can create parent-child relation for custom properties

-New message handler to auto-generate resources, pools, groups, and properties

-Added logic to release reassigned resources when the item they were assigned to is reneged from the Queue

-Added new dynamic array to support a new function

-Fixed bug in addResourceToSRL procedure with how unique ID was being created in the Resource Shifts table

-Added DB attached attribute type for specifying filtering condition attributes

-Created new function RMfcn_getAvailableResources to get a list of available resources for a specified resource requirement

-Updated RMmsg_OnBlockReceive7 to create list of available resources and store in dB table

-Updated RMmsg_OnBlockReceive7 to respond to request to dynamically change resource properties

-In AR_RESCHEDULE_RESOURCES_COMMAND_MSG_TYPE, turn off blocked flag for the requesting Queue as this request can ONLY be initiated by the Queue's downstream blocking block

-Updated logic in RMprc_executeTransaction to fix a bug when resource shifts are set to NULL

-Need to also check if the non-preserved item's item resource record does NOT already have a shared resource quantity ID and set this value in order to enable proper releasing of resources

-Aligned passed parameters to function definitions

-Added calls to some message handlers

-Numerous changes in the include files – see AR Resource Manager v9.h, AR_Utilities v9.h. RM Database v9.h, RM Dialog v9.h, RM Functions v9.h, RM Message Handlers v9.h, and RM Procedures v9.h

Resource Pool

-Added new transaction logging feature and checkbox in Results tab

-Fixed problem with shift status transitions and resources when pool goes off-shift and the input connector receives value to change resource quantity

-Accounts for off-shift resources when determining if resource number needs to change

-Added call to AR_setDBindexes

-Fixed the bookkeeping for off-shift resources

-Set offShiftResources=0 in InitSim

Select Item Out

-Performance improvement: update animation icon only if the block shows attribute on icon

-An uninitialized variable caused GotItem to not be initialized to 0 at the beginning of the simulation, blocking items

-Dialog table was not resizing to match number of output connectors

-Changed the meaning of “LastSelectedOutput” variable to mean the last place an item left the Select Item Out block.

-Throughput_tbl dialog table was linked to ProbabilityArray DA when it should have been linked to ThroughputArray DA


-Moved check for Resource Manager to the first condition in If-Then-Else statement in GetShiftBlocks procedure


-Added message sending whether going down or up

-Update connector values before sending messages

-MVIn input connector was not getting initialized properly

Throw Item

-Fixed conflict between using the block label or using the block number


-Stopped BTB animation if animation is on and Add Connection Line Animation is also on

-Fixed total cost calculation when item gets blocked downstream


-Added new feature for ARM items to create new resource orders and transfer list of attached resources from inbound to outbound items.

  -If the quantity of items to unbatch totals 0, then the item which enters the block is now disposed of properly

-Behavior change: If Use Preserved Items to Determine Unbatch Quantities is checked and the item has no preserved info, the global array is now also -1 as well as 0

-Behavior change: If cost or rate attribute has been defined as Distribute, the values have to be divided


-Made some animation calls more conditional to speed up this block’s performance


-Changed the default for DB_RelatedWriteOptions to Parent_Record_Index

  -Fixed a crash when user selects “attirib” for the record coordinate but then clicks away

Suite ATRate library

Multiple Rate Blocks

-FlowAttCurrentContent_dtbl is now linkable to a database

Stop simulation if detect recursive condition in Rate block  -

-Fixed uninitialized variable that could cause a crash

-Reduced the number of Flow Attribute propagation and calculations to only the ones necessary, since rates are already up to date in global arrays

-Fixed bug where OpenModel duplicated the block in the Global Array if a hierarchical block was also updated

-Added a re-entrance flag to avoid the code getting into a loop when it gets a linkContent message

-Updated the sections when OpenModel and changing TC connections at the same time

-Updated the dialog so a cloned Content table’s Link button is hidden

-For future compatibility, the pointer returned by LP Solve is 64 byte compatible and cannot be a normal long

-Precision issues fixed:

• When checking the result to see if it exceeds the max for the section, values too close to 0 were being ignored, but should be included

• Test to see if the result is close enough to 9 for a constraint to the LP

• Two values are compared using “nearly equal” rather than =


-Fixed problem when Catch block is not connected

Convey Flow

-When there is no outflow connection, even if there is product at the end of the block, it does not mean that the status of the layer should be to exit

-When the entering layer becomes the exiting layer, the calculation of when the layer would be empty next time wasn’t being done

-Fixed a missing event and updating of outflow attributes

-Could run into infinite loop when IrNextEvent was too close to currentTime


-If there is no flow in the block, check the inflow branch effective rate rather than the outflow branch

-Wrong function call: Use DILinkInfo instead of DILinkUpdateInfo

-Fixed issue: Now compare each branch with SysFlowGlobalInt25 before propagation

-In priority mode, create new LinkList only if parameters have been modified

-When comparing two values, need to also compare their NoValue status


-When comparing two reals, it now also checks for Blank


-If a column is not attached to a flow attribute, the model crashed if trying to access a -1 row in a global array

-The quantity unit was not being updated for History blocks connected in parallel

-Even if not checked, the alert checkbox was alerting when the rate changed


-Fixed the issue when the layer is not close enough to 0 but the Tank content calculates it is 0

-For the entering layer, the status only has to be entered if the block’s outflow is not connected


-In some cases, Results_dtbl was not updated in “other branches” at the beginning of the simulation

-If an attribute was set by Set(R) block, Merge was not registering the attribute value

-Re-entrance flag to fix stack overflow issue for FlowAtt_SetAttribute… function

  -Do not increment SysFlowGlobalInt25 if it is =0

-Wrong function call: Use DILinkInfo instead of DILinkUpdateInfo

-Fixed issue: Now compare each branch with SysFlowGlobalInt25 before propagation

-In priority mode, create new LinkList only if parameters have been modified

-When comparing two values, need to also compare their NoValue status


-Two parameters were not dealing properly to define status


-Added an option to easily erase all attributes when necessary

-Now the dialog table allows you to not define an attribute rather than return an error

-Fixed that 2 reals can be equal even if blank (= sign did not cover this)

-Flow attribute values can be set during initSim


-Adjusted the prevision for attribute layers when set to a negative

-Could get into an infinite loop if Tank becomes empty and empty layer occurs before empty tank message

-Problem when resizing the initial flow attributes table

-When the Tank is an item, item capacity is 0, and the quantity to release is 0, release the item because although technically empty it meets the criteria for being “full”

  Throw & Catch Flow

-Added a checkbox in the Throw block to cause its label to mirror the label of the enclosing hierarchical block

-Flow connection was not working properly when set remotely. Required function change to a return instead of an abort

-When Throw/Catch connection is wrong, stop the simulation from running rather than abort the open model

-To check a flow connection with a block#, if the block# does not point to a catching or throwing Rate block, the function should return -1; instead it returned the entered block number

-Now checks for blank before transforming into integer; give value -1, checks if link to database field that is an integer

-ThrowCatchConnection_dtbl reversed the order of columns and rows

-More rigorous testing of Catch to Catch or Throw to Throw connections


-Results tab shows when quantity and goal quantity were last calculated

-Added Shutdown option in Options tab

-Results tab calculates additional results

-Added checkbox to Flow Control tab to deal with blank or negative values

-In advanced status (starving or blocking while limiting), the block did not take into account when it was shutdown - it was too limiting

-To update advanced status, when propagating a solution, the update was not working correctly

-In advanced status, a case that was flagged as an error (not limiting + not starving + not blocking) is actually valid

-For advanced status, if the effective rate has not changed but advanced status needs to be updated, delay the update until all FlowBlockRecieve6 have been properly propagated

-If a new goal arrives that is 0, it is ignored

-Updates the goal quantity each time the cumulative quantity is calculated

-Updates the quantities at valueOut connector when gets a valueIn value

-Fixed that 2 reals can be equal even if blank (= sign did not cover this).

-Reset Goal_prm at beginning of simulation if connected to an input connection

-If limiting rate is set in the Executive as less than 0 precision, the Valve will be set at 0 limitation

Suite AT OR CPUtilities library


-Now the equation always recompiles

-Added a button so animation is turned on or off depending on animation status

  Find & Replace

-When you click on the first column of the dialog table it opens the block’s dialog

-If the dialog item selected is a data table, allow to select a row and column then a value can be searched/changed

Link Alert

-Added support for link structure, new addressOut array connector, ConnectorSetup(), and tooltips

-Moved BlockRegister() to “on ModifyRunParameter” to fix DB initialization problem

-Changed addressOut into a connector array

-Now regAddressOut only sends a message when the range address has changed


-Can now animate either horizontally or vertically

Model Compare

-Added the option to ignore difference when old value is blank and not new value because it is most often a new dialog item created in the newest version


-Added additional calls to SetPopups to fix issues when hBlock is updated

-Caused connector values to always be updated even if simulation is not running

  Queue Tools

-If the block was in the model prior to 9.3, it did not initialize queues with any item

-Fixed problems with attributes when pasting block from one model to another

-Updated attribute popup list in Options tab for consistency with other blocks

-Allow users to add/delete rows in the properties table in Options tab

Real Timer

-Removed the StrPutAscii(13) return character because it crashed ExtendSim when exporting DB with the text as comment for the DB table

  Record Message

-Needed nearlyEqual compared at 15 digits, otherwise it finds insignificant differences

-Added NumberDifferences parameter to show differences from one run to another

-Add limit to the number of logged differences

-Add rows to data table only when necessary

-Column tag for differences can only be check, cannot be radio button

From ExtendSim 9.1 to 9.2

Released on February 13, 2015

Suite AT OR CPCompatibility

ExtendSim 9.2 is backwards compatible with 9.1; ie. models and libraries built in release 9.2 can be opened in 9.1. However, release 9.2 is NOT backwards compatible with 9.0 as there was a file format change between 9.0 and 9.1.

Suite AT OR CPValue library

Data Init

-Removed this block's registration for structure.

Data Import/Export

-Added check to make sure that the selected worksheet was the source or destination before changing the selection range.

Data Specs

-More tightly restricted the conditions under which an entire database or table can be registered for structure. Because before this change, the presence of one Data Specs block had the potential to dramatically and unnecessarily increase runtimes if any DB table in the model got is structure changed.

Data Specs, Equation, Read, and Write

-Added right-click ability to automatically add a named connection.

Lookup Table

-Added support for Rate string attributes.

-Fixed problem with non-contiguous input values.

Mean & Variance

-Added first value as initial value for time weighted statistics.

Scenario Manager

-Added a check to see if two factors or two responses have the same name.

-Made reporting more robust if not all scenarios have been run.

-Fixed problem with responses from tables as it was not getting the correct row.


-Significantly modified exporting to text files.

Suite AT ORItem library


-Eliminated unnecessary messages coming from valuesOut.

-If a model had a time tie, call MoveItems() and SendItems() before preempting. Don't want to preempt items that are done processing.

-Made resuming from shutdown more efficient by only sorting the list if it is out of order.

-SDV_In = BLANK was not being accounted for when computing "capacityDuringTimeSlice" in UTL_CalcUtilizationAndAveLength() and also other stats in ASS_CalcStats().

-Added "extendedCapacity" which is needed to properly calculate "utilization" and "busy" when the user has shutdowns with the option to complete items already in processing before shutting down.

-If shutdowns are controlled by the Resource Manager, the Activity block is NEVER down. Only items are downed.


-If creating items infinitely, there is a scenario under which the timing attribute could be set incorrectly.

-nextEventOut was not working if the prg_StartIn was connected.

-There was a problem with how the Create block was dealing with off-shifting. When a shift came back on, no more items were being created.

-In BlockReceive0 the local variable "numItemsCreated" was sometimes not getting set before the call to RndDB_GetNewEventTimeForThisStream() was being made.

-If creating items randomly from multiple streams, check to make sure all required fields have been specified at the beginning of the run.

Convey Item

-In the accumulating mode, even if the block was not full it sometimes blocked items from entering.

-When speed changes using a link to a database, the changes of speed during the run are properly taken into account.


-New input variable "AR Order ID" reads an item's advanced resource order ID.


-A new method for reusing deleted item indexes enhances performance for discrete event models.

-During the preprocessing of the LP, checks that one parameter is not 0 when two parameters are proportional to each other.

-When too many LP calculations and a loop is suspected, if the Executive is in debug mode, offer the option to get a debuggerbreakpoint stop in the source code.

-Tests if all the variables have already been calculated, if so do not run LP solve unnecessarily.

-Fixed an issue where searching for a dialog item in a Rate block would also find the same dialog item in blocks that were from different libraries.

-If a block table in the block wizard database does not have any fields, the table is deleted and re-added.

-Deleted the block wizard database so that old blocks will not get orphaned in the list of blocks to auto connect.


-Had a model where both AG_SensorIn and AG_MaxItemsIn were both connected and a race condition emerged where a message was received at AG_SensorIn, but the block connected to AG_MaxItemsIn hadn't yet had a chance to update so items where incorrectly allowed to pass. The solution is to send a msg out AG_MaxItemsIn in "on AG_SensorIn".


-New item property "ARM Resource Order ID".


-Added a check box that saves memory by disabling the recording of information during a run.

-New item property "ARM Resource Order ID".

-For all History blocks that have been added by right-clicking, right-click disables/enables information gathering during a run.


-Added clearing ItemCount to ClearStatistics. Previously, the dialog item for count of items was not cleared when the statistics were cleared.

Item Log Manager

-New item property "ARM Resource Order ID".

Query Equation

-New input variable "AR Order ID" reads an item's advanced resource order ID.

-It was possible to get the block into a state where there were too many calculations for a given query cycle. This could happen if both DBQ_WhichRecords_chk = TRUE && DBQS_Enable_chk = TRUE. The problem could occur if a spawn still had not been found and if the number of calculations had not exceeded the number of total records in the query table.

-If spawning and destroying pass through item, shouldn't have to have ItemOut connected or visible.


-Initialized CurrentWait_prm = BLANK at the start of the simulation.

-Removed initialization of Global0 from initsim. This was probably left over debugging code.

Queue Equation

-New input variable "AR Order ID" reads an item's advanced resource order ID.

Queue Matching

-Now transfers attached ARM resources from inbound items to non-preserved batched items.

-If "Cancel" is clicked during a run, discrepancies between IFO_dtbl and the linked database table could have occurred.

-Needed to ensure dynamic arrays are properly sized in CheckData before ConnectorsSetup() is called.

-Fixed issue with displaying "total items in each queue" on the Contents tab.

-Occasional list out of bounds error was occuring in IFOV_TableUpdate().

-Restricted conditions under which ASTATS gets built and used.

-There was an error in the way average wait was being calculated when batching was turned on.

-A premature call to Batch_PropertyTable_Setup() in OpenModel was causing attribute actions to get corrupted because the full set of model attributes had not been completely added to the global arrays in OpenModel. The call to Batch_PropertyTable_Setup() has been moved to OpenModel2.

-Added code to AtribInfo to rename attributes in batch_PropertyTable_Names.

-Needed to make Batch_BatchItemsAndMoveToDL() more robust. Can now rely on every row in batch_AttribTransfer_dtbl to always be referencing an actual attribute.

-Create all the linked lists in CheckDatahere, because they may actually get referenced there; e.g., if the dialog is open when run button is hit, then GID_ListIndex will get referenced in CheckData.

-The "whichGroup" argument in the MR_ReqList_Set() needed to be changed from an integer to a real to account for the case where the group ID is larger than 2 billion.

-There were problems in InitSim with how IFO_dtbl was being integrated with a database table. First, the records were getting deleted and re-added with the call to IFO_TableUpdate(), but then after that (still in InitSim), the records were getting deleted again. And while the records were eventually getting re-added again later in the simulation run, this posed a problem if any other blocks in the model were trying to register link alerts to this database table in PostInitSim because the records weren't there yet. Also, changed the way data was getting cleared from IFO_dtbl.


-Turned off registering for block structure during run, improving runtimes.

Resource Item

-Turned off registering for block structure during run, improving runtimes.

-Messages were not getting sent to the Executive when items were destroyed via the demand connector. This could create a memory leak if the item going into the Demand connector contained a preserved batch (highly unlikely).

Resource Manager

-Non-Preserved Batching

Advanced resources attached to items entering a batching function (in the Batch and Queue Matching blocks) are now transferred to the batched item. Note: This only applies to non-preserved batching.

-Non-Preserved Unbatching

Advanced resources attached to an item entering the Unbatch block are now shared equally across all of the unbatch items. These shared resources have a “shared count”. As the cloned items holding shared resources go through release blocks, the resources’ shared counts are decremented. A shared resource remains in the utilized state until its shared count reaches zero. This feature is supported in the Unbatch and and Query Equation (I) (when spawning is turned on) blocks.

-Non-Redundant Resource Allocation

If ARM resources are already attached to an item as it enters an ARM queue (Queue and Queue Equation blocks), those attached resources are now used to help satisfy the new allocation requirement wherever possible.

-Exclude Resource Release Options

The Resource Release block now has the option to exclude certain resources from release based on that resources’ ability to satisfy one or more specified requirements. This is a way to retain resources on an item that will be used to satisfy some future downstream allocation requirement.

-Added logic to distinguish true user-based dialog initiated events from internally generated ARM events in getQEselectionQuantity.

Resource Pool

-Adjusted justification of resource pool name.

-Added UpdateStatistics message handler.

Select Item Out

-Rest useLastRandom if there is no item in the block and a message comes in through select connector. This prevents the block from locking on a random value prematurely.


-Turned off registering for block structure during run to improve runtimes.


-There was a issue with how the first schedIn message was being handled. Even if the value had not "changed", the block would always have to receive and act on that first schedIn message because the setting of previousSchedIn during InitSim is arbitrary. The block would not know what the value of the first sched in message would be so setting previousSchedIn to some value could end up causing the block to ignore the first schedIn message.


-Removed sorting and changed search method so that the catch blocks table (catch by attribute) can be linked to a database table.


-The “Do Not Pass” option is now available when the delay is set, not just when speed or speed and distance is selected.


-Added code to AtribInfo to rename attributes in the BatchAttrib_table when an attribute was renamed in the Executive.


-Fixed issue with itemIn connector array where the round robin was not working correctly.

-Fixed display of block number for resource pool. GaGetString15 was called instead of GaGetString31


-Turned off registering for block structure during run to improve runtimes.

Suite ATRate library

All Rate Blocks

-Revised the sequence of calculating flow attributes at the start of the simulation. This fixed problems when the calculation of the flow attributes spanned more than one LP area.

-Fixed problem with clearing connections between Rate blocks.

Convey Flow

-Timing to send a new flow attribute modified. When conveyor effective output rate has to be calculated, the attribute changes are sent after outflow effective rates have been updated and not before.

-Fixed an issue that was introduced in 9.1 that when trying to animate a Convey Flow while animation is OFF and simulation is not running, the Convey Flow block had to assume it was empty because it did not always have information on its previous content.

-When there is no product at the end of the conveyor and only one layer, it does not necessarily mean that the layer/conveyor is empty.

-In case FlowAtt_ExitLayerIsEmpty is called within layer update, the lrExitRate was sometimes different from the previous exit rate.

-For flow attribute management, an extra event is posted when an entering layer is becoming an exit layer.

-If the Convey Flow block has no output flow connection, the status of the layer for flow attribute management can never be "exit".

Diverge & Merge

-Two new options to maintain outflow attribute values - when inflow effective rate is 0 and when all attribute values are Blank.


-During the preprocessing of the LP, checks that one parameter is not 0 when two parameters are proportional to each other.

-When too many LP calculations and a loop is suspected, if the Executive is in debug mode, offer the option to get a debuggerbreakpoint stop in the source code.

-Tests if all the variables have already been calculated, if so do not run LP solve unnecessarily.

-Fixed an issue where searching for a dialog item in a Rate block would also find the same dialog item in blocks that were from different libraries.


-Added a checkbox that saves memory by disabling the recording of information during a run.

-If a Rate model had no flow attribute defined, the History(R) block would not work correctly.

-To be consistent with the History block in the Item library, the data collection window has been set to startTime end time when on or blank otherwise.

-When the data collection window was on and if the start time was more than endtime, do not stop the simulation - just ignore data collection.

-For all History blocks that have been added by right-clicking, right-click disables/enables information gathering during a run.


-Precision issue: For an Interchange block to check if a tank is empty, compare the quantity to its full capacity because the model might have another Interchange block being considered "full" without this one being "empty" because of precision issue and number of digits.

-When only the inflow connector connected and item enters with a non-empty quantity, a layer containing the non-empty quantity needs to be created.

-If an Interchange block has both entering and exiting flow connections and an empty item enter the block, a new flow attribute layer was not created.

-Corrected an issue where in some cases, the propagation of effective rate could be stopped incorrectly.

-Precision issue: When an item leaves and the Interchange block is then empty, sometimes the quantity is not quite empty enough and nextExitEmptyLayerTime was wrong.

-The number of elements in the list link layer need to be updated because number was incorrect when an item arrived with 0 content and 0 capacity.

-siLastTimeEffectiveRatesUpdated incorrectly set when simulation paused.

-siLastTimeEffectiveRatesUpdated changed to srLastTimeEffectiveRatesUpdated (from interger to real).

Interchange & Tank

-When entry and exit layers are deleted and only intermediate layers exist, the exit layer is now properly reset.

-Improvement: added more testing to compare the content in the block and the content in layers.

-Link alerts are now sent after InitSim. The processing of the link alert needed to be done after then calculation of the effective rates.


-On initsim, FlowOut was set to 0.0 instead of -1, then the first rate of the simulation was not propagated properly and some updates did not happen.


-If the tank has more than its capacity (because of change of capacity during run) then srNext_ExtremContent can be full and not empty, without causing the simulation to stop with an error message.

-In the value output connector, the content of the Tank is now sent at the beginning of a run.



Shutdown option.

Utilization statistics in the Results tab.

Pie chart animation option showing the utilization over time.

Information on when the quantity and goal quantity had last been calculated.

-When a new goal arrives and is equal to 0, it now gets discarded properly.

-The goal quantity was not being updated each time the cumulative quantity was calculated, causing some confusion.

-Additional calculation: Update the quantities for output value connector when receiving an connector input value.

-When comparing two values for flow control and both are blank, testing for equality will be false. Changed the block so that if both values are blank the result will be true.

-Improvement: Instead of looking for the section linked to the Valve at each function, determine the section as a static variable.

-Reset Goal_prm at beginning of simulation if connected to input connection.

-When new goal is blank and then goal in progress is not in progress, siStartingGoal is set to False.

Suite AT OR CPPlotter & Utilities library

Plotter, Discrete Event

-Added a check box that saves memory by disabling the recording of information during a run.

-Added data collection window option to the block.

Event Monitor

-Moved InitSim to PostInitSim so that all of the event arrays will be properly set up before reading into this block.


-Added Help to the block.

Model Compare

-Added “Ignore blank values in original model” checkbox.

Pause Sim

-Added feature: If you click on the Resume button and the simulation is not running, start the simulation.

-Added button which will run if the model is not running, pause if model is running, and resume if the model is paused.

Real Timer

-New snapshot option added to create a profile each time the block receives a message.

-Changed the time the profiling block is done from FinalCalc to EndSim. Because of Memory test the blocks did not get a chance to do their cleanup at the end of the simulation.

-If click on a disabled option during simulation, intercept the click on ondialogclick and abort instead of return.

-Need to reset the row accessing the block number when DB table for block profiling is recording each run separately in the same table.


-Added code to prevent moving cloned Slider if the cloned Slider is selected, this would crash ExtendSim.

Suite AT OR CPExcel Add-In

Fixed the duplicate addition of an indexed fields table to the list of indexed fields.

From ExtendSim 9.0 to 9.1

Released on February 10, 2014

Suite AT OR CPValue library

Data Import/Export

-Fixed dialog for Excel Named Ranges.

-Fixed problem with v8 -> v9 models - clones of popups.

-Fixed problem where text file selection was specified for ADO.

-Added activation of worksheet before selecting range.... Excel seems to want the worksheet up front before selecting a range.

-Added selecting a cell outside of the range before importing or exporting. This seems to improve the robustness of the import and export.

-Fixed problem where named ranges would not have the correct column number if the columns required more than one letter to represent it in Excel.

-Changed string length from 50 to 255 characters for string type ADO fields.

DB Statistics

-Added option to filter out values in database table.

-Fixed median calculation for even number of records.

Lookup Table

-Added support for Rate string attributes.

Mean & Variance

-History for multisim now records one observation per run.

-Fixed problem where history table was not recorded on the first time the simulation was run.

-Added SysGlobalInt42 so that multiple M&V blocks with “run until relative error < x” can coexist in the same model.

-Fixed problem with interval statistic calculation.

-Changed ending mechanism for stopping based on relative error.


-To speed block up, block no longer checks to see if the coordinates are in bounds during the run. If they are not in bounds, the application will inform the user.

-Added an optimization to XL_ShowWorksheetContents() so that it is not called as frequently.

-Was not properly show/hiding RW_DataSourceChangedMsg_chk.

Random Number

-Added support for Rate Attributes.

-Changed probability to y-axis value for empirical interpolated table.

-Added DiscreteEvent variable so that messages will not be sent out of the block if this is a continuous model.


-Added CheckRedim just in case there are more than 1000 blocks for statistics collection.


-To speed block up, block no longer checks to see if the coordinates are in bounds during the run. If they are not in bounds, the application will inform the user.

-If writing in FinalCalc, check to see if it's a discrete event model before sending messages.

-Added an optimization to XL_ShowWorksheetContents() so that it is not called as frequently.

Suite AT ORItem library


-SD_TotalItemsShutdown_prm was not being set.

-Fixed a bug in the calculation for sharing_chk.

-Added a call to ValuesOutUpdate() in "on itemOut" "taken" so that blockedItems_prm is updated to valuesOut.

-Fixed that Activity was trying to set an attribute on the preempted item even if "None" was selected in PETP_ttbl.

-Fixed problems with the new ItemIn connector array.


-Initialized total number in batch to Blank when quantity input connector is connected for that input.

-If batch size is 0 even if “allow 0 batch size “ is not checked, an error message is no longer generated. This will result in items being rejected if the batch size is 0.


-In CellAccept, ignore out of bounds click.

-PrgSVT works only if schedule is not linked to either database or global array. Was not checking for global array link in all cases.

-Fixed a significant figure issue in the schedule.

-The value for prg_NumCols could be incorrect if the schedule got linked to a database table.

-Added string attribute error checking.


-If all of the times are infinite we now end the simulation.

-Fixed “array out of bounds” issue when opening old models with string attributes because FSA_Names_ttbl was not dimensioned properly (i.e. to zero rows).

-Fixed error that occurred when copying and pasting Executive into a new model.

-Rate library fixes:

During LP Solve execution, under special circumstances when variables are simplified, the objective function was not properly updated.

Improved the error message when infinite rates are calculated - the model needs to be adjusted.

During LP Solve execution, when variables are removed because of simplification, the loop needs to be updated properly after deletion.

In Merge and Diverge, when trying to avoid extra LP calculations there was an error when fixed branch was calculated and only one of the variable branches was left to be calculated.


-Because a value message can be received during postInitsim, and no item should travel during postInitsim, pass item can be called only during the simulation.


-Removed code to switch connector types because it was remaking the connection in unpredictable ways.


-Added new option for reset when the next item arrives. This is consistent with v8 behavior and is the default condition.

Item Log Manager

-Show log at end of run was not working.

Queue Equation (QEQ)

-In oVarsOut changed the call to FindNextItem() so that we do not "restore statics".

-Added the variable "inMiddleOfReleaseAllTrueCalcCycle" to guarantee ExtentSim only initialize EQ_QEQ_STATIC_CALC_CYCLE_INIT once at the very beginning of the calc cycle.

-Rewrote and changed “on0VarsOut” to fully support QEQ followed by Select Item Out.

-Added better control for the setting of "foundItemToLock".

-Modified how the QUERY message is handled in itemOut when there are items in the departures list.

-Updated the item’s attributes when Queue Equation is followed by Select Item Out.

-Added a new statusOut connector for departures list length.

-Fixed call to AR_GrabResources so that item's position in queue is passed as an argument and not hard-coded to 0.

-Fixed problems with the new ItemIn connector array.

Queue Matching

-Changed how ExtendSim initializes the IFO table if it is linked to a database table. If table already exists, do not delete it.

-Block was accessing the wrong column in MR_dtbl.

-Interface added to address the question - for attribute-based requirements, what's the requirement if there is no item?

-The effective match size for items coming from a particular bin needs to be stored on the individual items coming from that bin irrespective of batching being on or off.

-In InitSim, made sure the ASTATS linked lists have been created.

-Indexing for determining which attribute was which for the new batch item was off.

-Batch attributes had a bug when choosing "max" or "min".

-The "actions" on the properties table were not following attributes as the number of attributes in the model changed.

-There was a problem with the timing of when IFO_dtbl is updating during the run.


-To speed block up, block no longer checks to see if the coordinates are in bounds during the run. If they are not in bounds, the application will inform the user.

Resource Item

-Utilization was not getting updated at the end of the run.

Resource Manager

-Fixed bug that was preventing resource orders that could have their requirements satisfied from being serviced. Added logic for new policy option to exclude the resources used by orders that cannot be serviced during the current service cycle.

-Added "ID" field to rM_Resource Release Quantity Types table.

-Added call to addIdleResourceToList in LINKCONTENT message handler to enable servicing of waiting orders when resources transition from DOWN status to IDLE.

-Add calls to synchVisibleHiddenDBresourceCustomProperties() in OPENMODEL, ABORTSIM, RR_EXECUTE_BTN, QE_EXECUTE_BTN and FC_EXECUTE_BTN message handlers.

-Add function to handle ABORTSIM messages.

-Add logic to flag when and check if a resource available message is in-process.

Resource Pool

-Fixed problem when resource shift change occurred before the resources were released from the previous shift change.


-Fixed problem with setting connector label.


-Added more code to fully support wearIn values between 0 and 1.

-The inValuesIn re-entrance flag was not getting reset in one case.

-Fixed tbfRemaining which was getting reset back to "-1" prematurely.

-WearIn values were being handled incorrectly. Also re-wrote valuesIn_WearIn().

-When a sched/shift was down/off, the calculation to determine progress made towards repair (before shutting down) was double counting.

-Fixed problems when "wear" and "sched/shift" were working in conjunction with each other simultaneously.

-In conditions where we use "endTime” switch to 1e300 because calculated tbfEndTime or ttrEndTime can exceed endTime.

-Added DB_RowToRecordConversion_BuildArray() and DB_RecordToRowConversion_BuildArray().

-Added code to make initialization faster in multisim runs.

-Added setting of previousSeed in FinalCalc, this is required to make the continue random seed option work.


-To speed block up, block no longer checks to see if the coordinates are in bounds during the run. If they are not in bounds, the application will inform the user.

Suite ATRate library

See also the changes to the Executive block as listed in the Item Library section.

All Rate library blocks (Flow Attributes related)

-When comparing two numbers and both numbers are blank they are identical. Using only == does not return identical.

-Fixed a bug in the calculation for sharing_chk.

-Added a call to ValuesOutUpdate() in "on itemOut" "taken" so that blockedItems_prm is updated to valuesOut.

-Fixed that Activity was trying to set an attribute on the preempted item even if "None" was selected in PETP_ttbl.

-Fixed problems with the new ItemIn connector array.

All blocks with a Create Shift button

-Fixed problem with Create Shift buttons caused due to changes in the Shift blocks.

All blocks with hierarchical block animation option

-Improved error message when hierarchical block animation object is not found, such as when an alternate view has been selected.

Throw Flow & Catch Flow

-The global array for Throw and Catch was not created early enough when block was pasted in a new empty model.

Merge & Diverge

-When Sensitive mode was selected in a Merge or Diverge block, the advanced status information provided by Valve blocks was not accurate.

-Added calculation of quantities when simulation is paused.

-Emptied the custom table when the custom per attribute checkbox is unchecked.

-Increase efficiency: If there is no flow, don’t loop through inflows.

-Additional checking: Check that cumulative inputs==outputs when get new rate (except unbatching or batching mode).

-In option "CalcLPEachTimePeriod_chk" the next event was not created properly so the option did not work.


-If Throw option was used inside the block, fixed the test that sees if the effective Rate had changed for flow attribute. Flow attributes were not updated at the right time.

All blocks which can hold amount of product

-Fixed timing issue when change of attribute message happens before the propagation of new effective rates (time tie). The new effective rates are now updated before taking into account the new attribute values.

-When layer in flow attribute content table changes status, the quantity of the layer has to be systematically updated.

-Improved handling of new layers in flow attribute list.

-When layers need to be sorted, a Blank value caused simulation to stop because sorting was supposed to be impossible. Now the Blank value is accepted and the simulation goes on.

-Updated more accurately when to calculate the next time a layer will be empty.

-Precision issue: If next time layer is empty is close enough to next time extreme content, then the two values are considered identical.

-When receive message of change in flow attribute value while no effective Rate has been calculated yet (beginning of the simulation), the change will be taken into account only when the first effective Rate will be received.

-If content is calculated without updating the Global array, then cumulative quantity has to be deduced and not read from GA. Otherwise the quantity calculated could be wrong.

-When display current content in resident blocks for flow attributes. Depending on timing at the beginning of the simulation, the presence of the list link has to be checked to avoid an error message.


-In case of discrepancy in Tank block due to Flow attributes, the LP area was not propagated properly and the simulation stopped.

-Increased checking: Check as often as possible that the cumulative amount in the layers matches the contents of the


-Precision issue, when the Tank is becoming empty, then the layer in the tank is set to 0.

-Precision issue: a layer cannot have a "small" negative content.

-Update srNextTime_xxx to currenttime if a precision content has been made.

-Flow attribute layers need to be updated when new initial content is received from connector.

-siFAI_NumColumns got out of sync with the size of the array, the value is restored in OpenModel.

-When option in maximum rate inflow and outflow are selected, the full dialog needs to be updated otherwise dialogs are not located properly.

-If the initial table has cleared its own link, no need to resize arrays in On linkStructure.


- Precision issue: If flow is stopped and item is almost ready to leave, made the condition for item leaving True.

-Fixed quantity attribute leaving the block when multiple layers.

-Fixed update when mode is “Tank is separate from Item” and event is Full or Empty.

-Even if Tank is separate from item, the tank level has to be updated when an item enters the block.

-If the quantity in the exiting layer has changed, the next time the layer will be empty event has to be updated.

-Moved the animation of the block to block item after the “taken” message so the timing of the animation is better,

Change Units

-If the block was not connected, there was an error at end of simulation when trying to update amount of product passed through.

Convey Flow

-When receive a new speed and shift is off, srMaximumSpeed should be updated and no new LP should be calculated.

-When only one portion in the convey block, the block was updating the amount of product moving wrongly, it did generate an error.

-If the block had no outflow connection, the block was getting an error message.

-If animation is on and simulation not running, the block used to initialize the conveyor content. That was wrong; it is better to use the last run state if still available.


-Fixed misspelling of a dialog item - the infinite parameter tag did not work properly.

Suite AT OR CPUtilities library


-Resized dynamic array storing equation text if one of the built-in functions was selected.

Suite AT OR CPApplication level fixes

Corrected issues in dynamic links in hierarchical blocks in libraries.

Clone functions couldn't place clones in a non-visible area.

Open Dynamic Links command will not open too many dialogs.

MountStacking on certain 3D objects would mount to the wrong mountPoint.

Pasting a GlobalArray into a model that already had one with the same index was not functioning correctly.

CloneGetInfo returns the clone location correctly.

GetDimensionByName would crash if called on a non-array.

UserPromptCustomButtons caused a crash if called with too long a string.

When creating distributions in database cells, an empty name was allowed.

When creating distributions in database cells, the wrong error message was displayed if replacing an existing named distribution.

If deleting more than 100,000 cells a message states that undo is not available, speeding the operation.

Fixed crashes with smart connections.

ExtendSim now sends messages correctly to another connector on the same block in all cases.

Equation compile errors are now flagged at the correct line in the equation.

UserAbort() now closes the debugger only if we are debugging the block that called UserAbort();