Quality & Stability Enhancements in ExtendSim 9

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.2 to 9.3

Final update to ExtendSim 9 released on June 20, 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

Includes

-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

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

Integrate

-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

Math

-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.

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

Suite AT ORItem library

Activity

-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.

Create

-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.

Equation(I)

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

Executive

-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.

Gate

-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".

Get

-New item property "ARM Resource Order ID".

History

-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.

Information

-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.

Queue

-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.

Read(I)

-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.

Set

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

Shutdown

-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.

Throw

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

Transport

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

Unbatch

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

Workstation

-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

Write(I)

-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.

Executive

-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.

History(R)

-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.

Interchange

-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.

Set(R)

-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.

Tank

-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.

Valve

-Added:

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.

Meter

-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.

Slider

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

Suite AT OR CPApplication level fixes

DLLMakeProcInstanceLibrary function, otherwise the same as DLLMakeProcInstance, includes the library name so the user can specify which library to look for the routine in.

BlockSelect message sent to all blocks when a specified block is selected in the model. This is the reverse of the BlockUnselect message.

Calling RunSimulation in a model while it is already running will no longer report an error.

Changing the selected blocks in the BlockMove message handler could cause the rest of the moved blocks to not receive the message.

OLEGetNames and OLDGetDispatchNames could crash if one of the names was longer than 31 characters.

Extend Block Profile file created in Documents directory, not application directory, for permissions issues.

BLOCKUNDELETE message is sent after all undeleting (Undoing) is done, rather than being sent to each block as the undeleting proceeds.

If the user manually changes a random cell, the random seed will now correctly take on the new value.

The ConnectorToolTipWhich() function result values are now correct when using more than one connection message type simultaneously (CONNECTORTOOLTIP CONNECTIONMAKE, CONNECTIONBREAK, and CONNECTIONCLICK).

The ConArrayGetDirection() function now correctly returns the direction even for the "NORESIZE" direction constants.

The DBDatabaseTabDelete() function will no longer crash if the database viewer is not open.

The DBDatabaseTabChangeName() function will now refresh the tab names correctly on the database viewer.

BlockDelete2 messages sent to blocks after they have been disconnected from other blocks, right before the deletion occurs.

Datatables that are linked to Database tables should display the data in the cells based on the field types of the data in the database, unless overridden by column tags.

BlockNumbers have been corrected in BlockSelect/BlockUnselect message handlers sent during pasting of blocks.

DILinkUpdateInfo has two new arguments:

-DI links disabled returns whether (1) or not (0) Link Messages have been disabled through the DILinkMsgs function call.

-Which Database updating returns the index of the database that is currently updating through a database import process. Returns a zero if no database is currently updating.

Matrix function has been improved to support matrices larger then 100x100.

Suite AT OR CPModel Compare application

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

Suite AT OR CPExcel Add-In

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


____________

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.

Write

-Significantly modified exporting to text files.

Suite AT ORItem library

Activity

-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.

Create

-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.

Equation(I)

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

Executive

-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.

Gate

-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".

Get

-New item property "ARM Resource Order ID".

History

-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.

Information

-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.

Queue

-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.

Read(I)

-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.

Set

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

Shutdown

-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.

Throw

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

Transport

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

Unbatch

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

Workstation

-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

Write(I)

-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.

Executive

-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.

History(R)

-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.

Interchange

-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.

Set(R)

-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.

Tank

-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.

Valve

-Added:

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.

Meter

-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.

Slider

-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.

Read

-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.

Statistics

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

Write

-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

Activity

-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.

Batch

-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.

Create

-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.

Executive

-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.

Gate

-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.

History

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

Information

-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.

Read(I)

-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.

Set

-Fixed problem with setting connector label.

Shutdown

-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.

Write(I)

-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.

Diverge

-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.

Tank

-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.

Interchange

- 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.

Valve

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

Suite AT OR CPUtilities library

Buttons

-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();