FlexSim Knowledge Base
Announcements, articles, and guides to help you take your simulations to the next level.
Sort by:
UPDATE (January 22, 2021): FloWorks 20.0.5 is now available. Except for critical bug fixes, this is likely to be the final bug fix release for FloWorks 2020. Please consider upgrading to FlexSim & FloWorks 2021. UPDATE (December 23, 2020): FloWorks 20.0.4 is now available. UPDATE (June 15, 2020): FloWorks 20.1.2 is now available. UPDATE (February 4, 2020): FloWorks 20.0.1 is now available. FloWorks 20.0.0 is now available (16 December 2019). This version of FloWorks is intended for use with FlexSim 2020. If you are using FloWorks with FlexSim 2019 LTS, please use FloWorks version 19.0.8. If you are using FlexSim 2019 Update 2, please use FloWorks version 19.2.2. All versions can be found in the Downloads section of your FlexSim account on the 3rd party modules tab. Please do not hesitate to report any bugs, usability improvements and feature requests to support@talumis.com. About FloWorks FloWorks is a 3rd party module developed and maintained by Talumis BV ( talumis.com). It provides faster and more accurate modelling and calculation of fluid systems than the default FlexSim fluid library. It is especially useful within the oil, gas, and bulk industry both for production and supply chain optimization. This module requires a FloWorks license with active maintenance. For any questions, please email support@talumis.com. Release notes FloWorks 20.1.3 (20 August 2020) All bug fixes included in FloWorks 20.0.2 below. FloWorks 20.1.2 (15 June 2020) Bug fix: Fixed exception in release of Flow To Item. Bug fix: Removed internal output to console. Bug fix: Removed redundant license check in old solver. FloWorks 20.1.1 (23 April 2020) Bug fix: Update script for FloWorks Custom Action activities. Bug fix / improvement: Library grid updated. FloWorks 20.1.0 (17 April 2020) Release for FlexSim 2020 Update 1. FloWorks 20.0.5 Bug fix: All products shown as black in some cases where product color table was broken. Bug fix: Items would sometimes not exit from previously blocked Item To Flow. Bug fix: Network solver gave incorrect result in some models using output ratios. FloWorks 20.0.4 Bug fix: Flow conveyor sometimes lags because of unnecessarily many content blocks. Bug fix: Removed redundant license check in model limit panel. Backwards Compatibility Note: The following change may change the way updated models behave. Bug fix: Several issues in the network flow calculation resolved. Bug fix: Flow pipe passes name instead of product ID in first On Product Out Change after reset. FloWorks 20.0.3 (02 September 2020) Bug fix: Input / output triggers were sometimes scheduled at infinity. FloWorks 20.0.2 (20 August 2020) Bug fix: Set content activity uses FlowTank in code header. Added "Max. content" option to picklist. Bug fix: Process Flow activity did not correctly set relative output trigger amount. Bug fix: Flow item tank reset content at end of warmup. Bug fix: Adding Process Flow activity created module dependency. Bug fix: Documentation for flow processor updated. Bug fix: Update script for FloWorks Custom Action activities. Bug fix / improvement: Library grid updated. Bug fix: Fixed exception in release of Flow To Item. Bug fix: Removed internal output to console. Bug fix: Removed redundant license check in old solver. FloWorks 20.0.1 (04 February 2020) Bug fix: Fixed incorrect berth configurations. Bug fix: Removed popup during startup. Bug fix: MODE_RESTART_FALLING was sometimes incorrectly #define d the same as MODE_RESTART_RISING . Bug fix: Several bug fixes and improved stability for the new (beta) solver. Documentation: updated Tank trigger levels description. FloWorks 20.0.0 (13 December 2019) Feature: Added Process Flow activities for FloWorks. Feature: Added Process Flow templates for Basic Berth and Tank Pool. User request: Added option not to checkout FloWorks license. Bug fix: Removed inconsistent behavior after (de)activating license. Bug fix: Tank level trigger could cause event list to become unsorted. Bug fix: Max. Object Depth setting in FloWorks charts was ignored.
View full article
FlexSim 2020 is available. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Changed models to automatically open the environment in which they were saved. Added boy and girl shapes to people visuals. Improved keyboard interactions within table views. Improved tabbing between fields in certain windows. Updated the 3D names and stats text rendering to support more fonts and Unicode. Improved the 3D view's lighting capabilities by adding Light objects that can be arranged in the model. Improved lighting in RTX Mode, including support for soft shadows and a denoiser. Adjusted the Rack Dimensions tab to be able to specify slot padding. Added an optional parameter to TaskSequence.create() for waiting until TaskSequence.finish(). Added an OnValuePulled event to the List. Added methods for creating a DateTime using a string or component parts. Added support for in-place addition and subtraction of DateTimes. Fixed bugs with DateTime methods when using certain years or ranges of time. Improved the convert() command's capabilities with converting dates and times. Improved the exporting of null bundle values to Excel. Added an excelcreateworkbook() command. Added statistics collectors and calculated tables to the Excel Export. Added an option for creating sheets using the Excel Export. Fixed rotation issues with pasting certain objects. Added a Vec3.projectRotation() method. Added a Vec2 FlexScript class. Changed the License Activation window to be responsive during licensing operations. Added an index type to statistics collector columns for improving performance. Added a categorical combo type to tracked variables. Updated the query builder to handle CASE statements. Simplified certain queries written by the query builder. Changed the tree structure to simplify creating custom webserver interfaces. Added a repeat type to animations for remaining in the last frame after running the animation. Added a Go To Row/Column option in quick properties for tables. Improved time plots to be able to show durations as well as calendar times. Added an optional wire mesh rack visualization. Added more picklist options to the storage object slot assignment strategy. Updated the animator so that keyframes are updated using a right-click menu option instead of automatically. Added an option to duplicate an animation keyframe into another animation. Changed the default network node speed limit to 0 (no speed limit). Reorganized the Use Transport pick list and added a No Transport Reference option. Fixed a bug with the rack's default pull requirement not reevaluating after becoming full. Fixed an issue with copy/pasting sub-locations. Fixed the dark patterns when zooming out in RTX Mode. Fixed a crash on certain hardware in RTX Mode when rendering too many transparent layers. Improved the Time Table Date Based GUI to draw past the last event and allow scrolling into the future. Added PushWheelchair and PushCart animations to Operators Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Time tables now combine consecutive down periods if using the same state and profile or the same down behavior. Fixed issues with pick/place offsets on drive in racks to improve usability with A*. Because of performance improvements to query(), the row order is not guaranteed unless using an ORDER BY statement. Fixed excelrangewrite() so that the correct overload is available in FlexScript. Improved the FlexScript hypertext preprocessor scoping mechanism used by the webserver. Fixed object color being applied incorrectly to ambient material color on certain meshes. Changed point source light attenuation. Changed TASKTYPE_NODEFUNCTION to pass variants in as parameters instead of interpreted legacy doubles. This fixes the types of arguments that are passed when calling treenode.evaluate() as part of a TASKTYPE_NODEFUNCTION task. This allows you to add TASKTYPE_NODEFUNCTION tasks with parameters that are not just numbers, (nodes, strings, arrays, etc.) and have those parameters be preserved in a type-safe manner and properly passed into the subsequent treenode.evaluate() call. However, this change may have some consequences for older models. The following guidelines apply: If you use the inserttask() command, and cast a node to a number with tonum() to pass it in as a task variable, then you should use parnode() to get those parameters out in the nodefunction. While this method will continue to work, this mechanism is nevertheless deprecated. The now-correct method for adding a TASKTYPE_NODEFUNCTION task to a task sequence is to use TaskSequence.addTask(). This method takes full Variants as its task variable parameters, so you do not need to use tonum(). When using this, you should use param() to get the parameters back out. Older models that use neither of these methods may need to be updated to use method 2 in order to work properly in this version. Process Flow Changed the default behavior of the Create Task Sequence activity to work easier with task sequences created outside of Process Flow. Added a Finish Task Sequence activity that works with the new Create Task Sequence features. Changed the default value of Task activities from token.resource to token.taskSequence. Improved the interface for connecting activities. Added a mechanism for connecting to and from containers and routing tokens between activities using those connections. Added an option to the Run Sub Flow activity to run tokens one at a time. Adjusted the size of containers and connections based on the zoom level when created. Removed the width attributes of themes. Improved the UI for entering times in the Date Time Source activity. Change Set Color By Case and Set Object Color pick options to enable setting the color of a token. Fixed the display of task parameters in the event log. People Improved people resource shared assets to be able to reference other people resources. Added Sort By and Filter By fields to people resources. Simplified and improved several activity sets. Improved the list of labels in drop-down menus to include People Settings labels. Added a Kiosk to the list of locations. Added an Observation Room multilocation. Added an option to the Toolbox to add all people tables to the Excel Export. Added more people tables and charts. Improved the performance of many existing people tables and charts. Updated preempted resources to be able to be reacquired with a higher priority. Updated Escort Patient and Tranpsort Patient activities to set the staff's TravelingWithPatient label when escorting or transporting a patient. Improved the query builder interface with support for adding group/individual subsets. Changed people acquire activities to have the default max wait timer trigger release the token out connector 2. Changed the Split activity default to creating child tokens in the Healthcare environment. Changed the repeat type of the LayDown and SitDown/SitDown2 animations to repeat the last frame. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Changed how labels are handled by People Settings. Improved animations and positioning of transports and equipment when staff move them. Emulation Added support for OPC UA connections.
View full article
FlexSim 2020 Beta is available. (Updated 26 November 2019.) To get the beta, log in to your account at www.flexsim.com, then go to the Downloads section, and click on More Versions. It will be at the top of the list. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Changed models to automatically open the environment in which they were saved. Added boy and girl shapes to people visuals. Improved keyboard interactions within table views. Improved tabbing between fields in certain windows. Updated the 3D names and stats text rendering to support more fonts and Unicode. Improved the 3D view's lighting capabilities by adding Light objects that can be arranged in the model. Improved lighting in RTX Mode, including support for soft shadows and a denoiser. Adjusted the Rack Dimensions tab to be able to specify slot padding. Added an optional parameter to TaskSequence.create() for waiting until TaskSequence.finish(). Added an OnValuePulled event to the List. Added methods for creating a DateTime using a string or component parts. Added support for in-place addition and subtraction of DateTimes. Fixed bugs with DateTime methods when using certain years or ranges of time. Improved the convert() command's capabilities with converting dates and times. Improved the exporting of null bundle values to Excel. Added an excelcreateworkbook() command. Added statistics collectors and calculated tables to the Excel Export. Added an option for creating sheets using the Excel Export. Fixed rotation issues with pasting certain objects. Added a Vec3.projectRotation() method. Added a Vec2 FlexScript class. Changed the License Activation window to be responsive during licensing operations. Added an index type to statistics collector columns for improving performance. Added a categorical combo type to tracked variables. Updated the query builder to handle CASE statements. Simplified certain queries written by the query builder. Changed the tree structure to simplify creating custom webserver interfaces. Added a repeat type to animations for remaining in the last frame after running the animation. Added a Go To Row/Column option in quick properties for tables. Improved time plots to be able to show durations as well as calendar times. Added an optional wire mesh rack visualization. Added more picklist options to the storage object slot assignment strategy. Updated the animator so that keyframes are updated using a right-click menu option instead of automatically. Added an option to duplicate an animation keyframe into another animation. Changed the default network node speed limit to 0 (no speed limit). Reorganized the Use Transport pick list and added a No Transport Reference option. Fixed a bug with the rack's default pull requirement not reevaluating after becoming full. Fixed an issue with copy/pasting sub-locations. Fixed the dark patterns when zooming out in RTX Mode. Fixed a crash on certain hardware in RTX Mode when rendering too many transparent layers. Improved the Time Table Date Based GUI to draw past the last event and allow scrolling into the future. Added PushWheelchair and PushCart animations to Operators Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Time tables now combine consecutive down periods if using the same state and profile or the same down behavior. Fixed issues with pick/place offsets on drive in racks to improve usability with A*. Because of performance improvements to query(), the row order is not guaranteed unless using an ORDER BY statement. Fixed excelrangewrite() so that the correct overload is available in FlexScript. Improved the FlexScript hypertext preprocessor scoping mechanism used by the webserver. Fixed object color being applied incorrectly to ambient material color on certain meshes. Changed point source light attenuation. Changed TASKTYPE_NODEFUNCTION to pass variants in as parameters instead of interpreted legacy doubles. This fixes the types of arguments that are passed when calling treenode.evaluate() as part of a TASKTYPE_NODEFUNCTION task. This allows you to add TASKTYPE_NODEFUNCTION tasks with parameters that are not just numbers, (nodes, strings, arrays, etc.) and have those parameters be preserved in a type-safe manner and properly passed into the subsequent treenode.evaluate() call. However, this change may have some consequences for older models. The following guidelines apply: If you use the inserttask() command, and cast a node to a number with tonum() to pass it in as a task variable, then you should use parnode() to get those parameters out in the nodefunction. While this method will continue to work, this mechanism is nevertheless deprecated. The now-correct method for adding a TASKTYPE_NODEFUNCTION task to a task sequence is to use TaskSequence.addTask(). This method takes full Variants as its task variable parameters, so you do not need to use tonum(). When using this, you should use param() to get the parameters back out. Older models that use neither of these methods may need to be updated to use method 2 in order to work properly in this version. Process Flow Changed the default behavior of the Create Task Sequence activity to work easier with task sequences created outside of Process Flow. Added a Finish Task Sequence activity that works with the new Create Task Sequence features. Changed the default value of Task activities from token.resource to token.taskSequence. Improved the interface for connecting activities. Added a mechanism for connecting to and from containers and routing tokens between activities using those connections. Added an option to the Run Sub Flow activity to run tokens one at a time. Adjusted the size of containers and connections based on the zoom level when created. Removed the width attributes of themes. Improved the UI for entering times in the Date Time Source activity. Change Set Color By Case and Set Object Color pick options to enable setting the color of a token. Fixed the display of task parameters in the event log. People Improved people resource shared assets to be able to reference other people resources. Added Sort By and Filter By fields to people resources. Simplified and improved several activity sets. Improved the list of labels in drop-down menus to include People Settings labels. Added a Kiosk to the list of locations. Added an Observation Room multilocation. Added an option to the Toolbox to add all people tables to the Excel Export. Added more people tables and charts. Improved the performance of many existing people tables and charts. Updated preempted resources to be able to be reacquired with a higher priority. Updated Escort Patient and Tranpsort Patient activities to set the staff's TravelingWithPatient label when escorting or transporting a patient. Improved the query builder interface with support for adding group/individual subsets. Changed people acquire activities to have the default max wait timer trigger release the token out connector 2. Changed the Split activity default to creating child tokens in the Healthcare environment. Changed the repeat type of the LayDown and SitDown/SitDown2 animations to repeat the last frame. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Changed how labels are handled by People Settings. Improved animations and positioning of transports and equipment when staff move them. Emulation Added support for OPC UA connections.
View full article
Following attached Code is Useful as Performance Major to Find Out Total Simulation Time in Different Scenarios. treenode datanode = param(1); double tm = time(); return tm;
View full article
16 Dec: Bug fix releases 19.0.8 and 19.2.2 are now available, together with the new FloWorks 2020 release. 18 Oct: Bug fix releases 19.0.7, 19.1.5 and 19.2.1 are now available. 09 Oct: Bug fix releases 19.0.6 and 19.1.4 are now available. The new release FloWorks 19.2.0 is now available for use with FlexSim 2019 Update 2. A bug fix release FloWorks 19.0.5 is available for use with FlexSim 2019 LTS. A bug fix release FloWorks 19.1.3 is available for use with FlexSim 2019 Update 1. FloWorks 2019 introduced some major changes in the way FloWorks works internally. These changes include the following: Flow rates and content are now tracked in the standard statistics variables, requiring us to override fewer FlexSim features. This means, for example, that you can use all of FlexSim's included Statistics Collectors and Chart Templates out-of-the-box. FloWorks now tries to schedule fewer events. This means that models will run faster and debugging your model by stepping through has become much more transparent. This release includes the beta version of the next-generation solver. This solver is particularly suited for networks with many connections, most of which are closed or blocked, or long 'chains' of objects with a single connection in and out. By simplifying the flow network before calculating the flow rates, the solver should become much faster overall. Since this solver is likely to give (valid but) different outcomes, it is not enabled by default - you can test it by enabling the "Optimize networks before solving" option in your Flow Control. The Flow Tank level triggers functionality has been overhauled. For more information, please see the detailed release notes below. All versions of FloWorks can be found in the Downloads section of your FlexSim account on the 3rd party modules tab. Please do not hesitate to report any bugs, usability improvements and feature requests to support@talumis.com. Thanks to the active users who have done this in the past weeks, we appreciate your ongoing support in helping us to improve FloWorks! About FloWorks FloWorks is a 3rd party module developed and maintained by Talumis BV (talumis.com). It provides faster and more accurate modelling and calculation of fluid systems than the default FlexSim fluid library. It is especially useful within the oil, gas, and bulk industry both for production and supply chain optimization. This module requires a FloWorks license with active maintenance. For any questions, please email support@talumis.com. Release notes Changes in FloWorks 19.2.2 (16 December 2019): Bug fix: FlexSim 19.2.4 removed node that was overridden in FloWorks All changes included in version 19.0.8. Changes in FloWorks 19.2.1 (18 October 2019): Bug fix: allow objects to be created when no runtime license present. All changes included in version 19.0.7. Changes in FloWorks 19.2.0 (26 September 2019): Flow pump / valve input and output can be set to balanced rate by % simultaneously. Flow To Item can now buffer additional material before blocking. New segmented flow pipe object. Created new runtime license type. All changes included in version 19.0.5. Changes in FloWorks 19.1.5 (18 October 2019): All changes included in version 19.0.7. Changes in FloWorks 19.0.8 (16 December 2019): Bug fix: Tank level trigger could cause event list to become unsorted. Bug fix: Max. Object Depth setting in FloWorks charts was ignored. Changes in FloWorks 19.0.7 (18 October 2019): Request: Added Waiting for Transport state to Loading Point. Bug fix: Flow Content Histogram was broken. Bug fix: Fixed rounding errors when inflow very close to outflow. Bug fix: Fixed rounding error in tank top/bottom duration calculation. Bug fix: Avoid duplicate event when recalculation requested before Flow Control resets. Backwards Compatibility Note: The following changes may change the way updated models behave. On Full event only available on tank-type objects, no longer on e.g. flow conveyors. Flow Conveyor no longer closes all ports on stop, but only input and output. Flow Conveyor speed is now affected by impact factor set through stop and impact . Flow tank passes set level instead of actual level into trigger code (rounding difference may cause Wait for Event to not match). Input and output trigger also fire in pre-recalculation when amount is reached. Changes in older FloWorks 19.x.x releases Changes in FloWorks 19.1.4 (09 October 2019): Bug fix: Restored objects missing from library and icon grid. Changes in FloWorks 19.1.3 (26 September 2019): All changes included in version 19.0.5. Changes in FloWorks 19.1.2 (19 July 2019): Bug fix: dragging in a shape from a group will no longer create the first shape in the group. All changes included in version 19.0.4. Changes in FloWorks 19.1.0 (30 April 2019): This version is for FlexSim 2019 Update 1. For FlexSim version 19.0.x use FloWorks 19.0.3. Added support for unconstrained flows. All changes included in version 19.0.3 described below. Backwards compatibility note: The following change may change the way updated models behave. Option "Unchanged" removed from "Set flow rate" triggers -- this is now considered as "Unconstrained". Use the "Set maximum input/output rate" option instead of "Set maximum rates" if you only want to change either the input or the output rate. Changes in FloWorks 19.0.6 (09 October 2019): Bug fix: Restored objects missing from library and icon grid. Changes in FloWorks 19.0.5 (26 September 2019): Bug fix: Removed old-style statistics from library, causing several issues like utilization resetting at model end time. Bug fix: FloWorks flow bin items no longer show up in Create Person Process Flow activity (class type changed from Operator to Flow Task Executer). Bug fix: Flow conveyor resume did not correctly close ports. Bug fix: Flow conveyor could get negative content due to rounding error. Bug fix: Flow conveyor stop, impact, resume did not stop content on conveyor when inflow and outflow were zero. Bug fix: Fixed issue when stopping or starting conveyor during Product Change event. Changes in FloWorks 19.0.4 (19 July 2019): Various bug fixes to the Mass Flow Conveyor. Bug fix: Utiliation returns (flow rate)/(max flow rate) at time zero. Bug fix: Solved exception when dragging different object shape into the model. Backwards Compatibility Note: The following change may change the way updated models behave. Bug fix: 'Time until event is 0' exception due to rounding errors fixed. Bug fix: Mixer On Empty event will only fire once (when mixer is actually internally idle). Changes in FloWorks 19.0.3 (30 April 2019): This version is for FlexSim 2019 LTS. For FlexSim 2019 Update 1 use FloWorks 19.1.0. Loading arm state will show Blocked and Starved instead of Idle while transporter is connected. "Pass product downstream" option added to product change trigger of flow processors. Bug fix: Transporters were sometimes positioned incorrectly when entering Loading Point. Bug fix: Flow object states were not updated. Bug fix: Fixed error when calling state() with no arguments. Bug fix: On Entry and On Exit in trigger list of Flow To Item and Item To Flow fixed. Bug fix: "Pass product downstream trigger" threw exception when connected to Flow To Item. Changes in FloWorks 19.0.2 (3 April 2019): For FlexSim 2019 Update 1 beta use FloWorks 19.1.0 (beta). Feature: Flow tank can scale in both directions (elliptical) instead of only using x-size for diameter. Bug fix: Various bug fixes to beta version of new optimizer/solver. Bug fix: Removed "content is larger than max. content" message during reset. Bug fix: Fixed exception in "Pass product downstream" when pipe is not connected to anything. Bug fix: Corrected normals on flow blender and flow splitter shapes. Bug fix: FlowObject.input /output.ports[index] now accepts Variant (e.g. token.Port ) as index and does bounds checking on index . Bug fix: Spheres no longer drawn outside flow pipes shorter than 2 m. Bug fix: Quick Properties only shows a single flow rate for flow pipes; output rate set to input rate on reset. Changes in FloWorks 19.0.1 (8 March 2019): Beta: Flow control can optimize network before solving. (Optimization is disabled by default, can be enabled for models with many (effective) single connections.) Content-holding objects now have On Trigger Level event that allows e.g. Process Flow to wait for a specific level trigger. Optimized event scheduling: obsolete events are removed from the event list instead of ignored. FlowToItem and ItemToFlow added to script so that rates and impact factors can be read and set. Added more shapes for Flow Tank and Mixer. Added "Change product by case" to trigger options. Bug fix: Flow conveyors now have state profile consistent with that of Flow Tank. Bug fix: Product color picker samples colors instead of objects again. Bug fix: Fixed incorrect layers being drawn during filling of Flow Mixer when multiple steps require input from the same port. Bug fix: Fixed incorrect states on Loading Point due to duplicate state_current node. Bug fix: Product field or dropdown will now preserve selected value instead of resetting to current product when switching property tab pages. Bug fix: Flow Task Executer connects itself to default network navigator on creation. Bug fix: Flow statistics now behave correctly under model warmup. User manual: Corrected description of FlowObject.stop() in documentation. User manual: Documented manual loading feature when Loading Points have 0 loading time. Backwards Compatibility Note: The following change may change the way updated models behave. Statistics are now kept in standard FlexSim tracked variables under the stats node. If you use dashboards, you may need to rebuild some charts. You can mostly use the standard FlexSim chart templates, listening to the On Rate Change event or the On Content Change Update (not Change). Tank trigger levels rewritten: Trigger levels are now specified using absolute level instead of percentage. Legacy limitations (max. 20 levels, no duplicate levels, 0% or 100%) have been removed. Separate trigger condition has been added to avoid coding ( if(mode == falling) { ... } ). Modes rising and falling are now called MODE_RISING and MODE_FALLING . Bug fix: Sometimes input and output triggers would not fire if trigger was reached precisely when flow was recalculated. (Mass) flow conveyor now closes input/output when stopped, instead of input/output ports. Loading point continues with next transporter after releasing completed item instead of waiting for it to exit. Bug fix: (Mass) flow conveyor only closed input when stopping; now closes both output and input.
View full article
FlexSim 2019 Update 2 is available. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Added a Storage System object to improve warehouse modeling. Improved the Rack object. Added more types of racks to the library. Updated the Sketchup SDK to load newer skp file versions. Added a ray tracing render mode. Added a Color Palette tool. Improved the color picker popup. Updated dashboard charts to use color palettes. Added options for showing column names to charts. Added options for showing multiple Y-axes on timeplots and histograms. Updated box plot options for categorizing and coloring data points. Added an option for reordering axis categories on timeplots, histograms, and box plots. Added additional line styles and visualization options to timeplots. Added Table methods for using indexed columns. Added a resetvalues attribute. Added Object getVariable() and setVariable() methods. Updated the SQL IS keyword to work with expressions. Improved performance of SQL queries on tables with indexed columns. Added an array parameter to Math.max() and Math.min(). Added a binary bundle field type. Added a button to Model Settings to export embedded media. Changed the default Person flowitem into separate Man and Woman flowitems. Added options for using the object's color to Person Visuals. Added a changepersonvisuals() command and pick options. Updated the Model Background properties window. Added a right-click option to show/hide model backgrounds from the Toolbox. Added pick options for using lists to the Pick Operator field on the processor. Updated various pick options to use generic label references. Added options to the List for special handling of SELECT values. Added Text options to Quick Properties. Added mean and standard deviation to the statistical distribution popup. Added icons to various pick option menus. Improved the Copy Variable function of Edit Selected Objects. Added the location coordinate system button to the General tab of object properties. Removed the Build menu; its options can still be added to the user toolbar. Changed the run speed slider to behave as a ratio of real time instead of model units per second. Changed the color of the selection box in the 3D view to be more visible. Fixed a bug with deleting array data from a node. Fixed an exception with cloning a table without rows. Fixed a bug with applying experimenter triggers. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Improved the rendering performance of some imported shapes by optimizing their meshes by material. Some mesh customizations may apply differently for some shapes. Charts now ignore null values instead of trying to categorize or plot them. Changed the FlexScript + operator to concatenate numbers with strings. Fixed some FlexScript math operations with numbers and null variants. Fixed an issue with FlexScript downcasting not always type checking properly in certain expressions. For example, "Object obj = param(1);" will now correctly throw an exception if param(1) is a treenode without Object data. Updated the Rack's place offset to be the actual location that the item will be placed. Fixed a bug with labels added during events at time 0 not being deleted on reset. Fixed a bug in Color.random(). Process Flow Changed the scroll wheel to zoom instead of panning the view up and down. Removed the extra outline around stacked blocks. Changed the default option for Release Batch on max wait timer and max idle timer to have Failed unchecked. Organized the ProcessFlow list on the toolbar based on the Toolbox folder structure. Changed Event-Triggered Source and Wait for Event panels to be collapsible. Added an edit field for the number of arrivals on the Scheduled Source. Added a getlastacquiredresource() command. Changed the color of the selection box to match the 3D view's. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Updated Move Object's Preserve Global Position checkbox to preserve location and rotation. People Added an experiment variable for changing the number of objects in a People group. Added a visual indicator to show when objects are acquired by the shift schedule. Added A* dividers to waiting lines and other objects. Added a custom window for People Down Behaviors. Added a Keep Person on Transport checkbox to the Transport Person activity. Changed the default Arrivals activities to randomize the created person's visuals. Added state history tables. Adjusted the Staff's walk back to reset position so that it is preempted if acquired by something else. Updated activity subflows so travelers synchronize their speeds when traveling together. Moved copying token labels to the created person to after the people settings labels are added so values aren't overwritten. Fixed a bug with getting the value of certain types of labels defined in People Settings. Walls are now created at the current Grid Z height. Conveyor Improved naming of various objects. Fixed a bug with the height of decision points when created with certain model units. Added a chain texture to conveyor belt visual options. AGV Updated curved path quick properties to be able to specify start and end points. Improved naming of control points and areas. A* Added the A* Navigator to the Toolbox. Updated the A* Navigator Properties window.
View full article
This is a demo model for the new warehouse functionality found in version 2019 Update 2: warehouse-demo-model.fsm The basic premise of this model is that items of a particular type come in, and must be placed in slots for that type. Orders also come in, requiring items of a particular type, that must be retrieved from storage. The model is meant to be a general concept model. It demonstrates the use of many of the new features in 19.2, and embodies some high-level "how-to's" of warehousing that are discussed in the user manual. Most logic for the model is implemented in a process flow. The process flow logic is separated into three main categories, namely initial inventory, inbound, and outbound processes. Further, the outbound process demonstrates both random-based order generation as well as history-based order generation. Initial Inventory The model includes a Global Table of Initial Inventory. The process flow's initial inventory section reads this table, and then creates items and places them into slots based on that initial inventory. This logic relies on the Address Scheme defined in the Storage System object, and uses direct addressing to get a slot using Storage.system.getSlot(). Inbound I use the process flow to assign a slot to each incoming item. I use an Assign Labels activity called Find Slot to do this. This uses a pick list option that wraps a call to Storage.system.findSlot(). The query matches the Type of the item with the Type of the slot, and also ensures that the target slot has space to fit the incoming item. The query also randomizes the order. Randomizing the order would likely not be necessary in most situations, but it makes the demo look nice. If the Find Slot activity properly finds a slot to store the item, then I go ahead and assign the the item to that slot, and have an operator place it in the rack. Outbound I also use the process flow to generate orders, and to reserve items in the storage system for those orders. In most warehouse simulations, order generation can be driven in two ways. First, you can use random probability distributions to generate orders based on general throughput metrics. Second, order generation can be based on historical data. This model gives an example of each method. In the random method, orders are generated randomly every ~30 seconds. Each order includes a number of SKU line items (again, random) and each line item includes a quantity of that SKU (again, random). Order tokens spawn line item tokens, which in turn spawn tokens associated with individual picks (the Fill Out Individual Picks process). For each pick, the token finds an item in storage that matches the target SKU. This is an Assign Labels activity (Find Item by SKU) with a pick option that wraps a call to Storage.system.findItem(). It finds an item that matches the required type, again using a query. Once the item is found, it makes reserves the item as "outbound" by assigning the Storage.Item.assignedSlot property to null (Set to Outbound activity). This ensures that no other process will find that same item for picking. The history-based order generation process uses much of the same functionality as the random-based, but it instead reads an "OrderHistory" table to determine when orders are started and what those orders contain. The OrderHistory table represents a simplified format for what you would likely see in a standard orders table. First, the process flow creates a transformed table that aggregates each order into a single row (this could technically be done as post-import code, but I do it in the process flow for visibility). Then the process flow loops through that transformed table, waiting for the start time of each order, then spawning that order. Custom Rack Visualization I have also customized the visualization of the racks. I have added a text to the front (and bottom on the floor) of a rack slot that will show the address of that slot. Further I've given the text a background that is color-coded to the SKU that that slot is designated to store. This was all done through the Storage System's Visualizations tab. I customized the Rack visualization.
View full article
FlexSim 2019 Update 2 Beta is available. (Updated 28 August 2019.) To get the beta, log in to your account at www.flexsim.com, then go to the Downloads section, and click on More Versions. It will be at the top of the list. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Added a Storage System object to improve warehouse modeling. Improved the Rack object. Added more types of racks to the library. Updated the Sketchup SDK to load newer skp file versions. Added a ray tracing render mode. Added a Color Palette tool. Improved the color picker popup. Updated dashboard charts to use color palettes. Added options for showing column names to charts. Added options for showing multiple Y-axes on timeplots and histograms. Updated box plot options for categorizing and coloring data points. Added an option for reordering axis categories on timeplots, histograms, and box plots. Added additional line styles and visualization options to timeplots. Added Table methods for using indexed columns. Added a resetvalues attribute. Added Object getVariable() and setVariable() methods. Updated the SQL IS keyword to work with expressions. Improved performance of SQL queries on tables with indexed columns. Added an array parameter to Math.max() and Math.min(). Added a binary bundle field type. Added a button to Model Settings to export embedded media. Changed the default Person flowitem into separate Man and Woman flowitems. Added options for using the object's color to Person Visuals. Added a changepersonvisuals() command and pick options. Updated the Model Background properties window. Added a right-click option to show/hide model backgrounds from the Toolbox. Added pick options for using lists to the Pick Operator field on the processor. Updated various pick options to use generic label references. Added options to the List for special handling of SELECT values. Added Text options to Quick Properties. Added mean and standard deviation to the statistical distribution popup. Added icons to various pick option menus. Improved the Copy Variable function of Edit Selected Objects. Added the location coordinate system button to the General tab of object properties. Removed the Build menu; its options can still be added to the user toolbar. Changed the run speed slider to behave as a ratio of real time instead of model units per second. Fixed a bug with deleting array data from a node. Fixed an exception with cloning a table without rows. Fixed a bug with applying experimenter triggers. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Improved the rendering performance of some imported shapes by optimizing their meshes by material. Some mesh customizations may apply differently for some shapes. Charts now ignore null values instead of trying to categorize or plot them. Changed the FlexScript + operator to concatenate numbers with strings. Fixed some FlexScript math operations with numbers and null variants. Fixed an issue with FlexScript downcasting not always type checking properly in certain expressions. For example, "Object obj = param(1);" will now correctly throw an exception if param(1) is a treenode without Object data. Updated the Rack's place offset to be the actual location that the item will be placed. Fixed a bug with labels added during events at time 0 not being deleted on reset. Fixed a bug in Color.random(). Process Flow Changed the scroll wheel to zoom instead of panning the view up and down. Removed the extra outline around stacked blocks. Changed the default option for Release Batch on max wait timer and max idle timer to have Failed unchecked. Organized the ProcessFlow list on the toolbar based on the Toolbox folder structure. Changed Event-Triggered Source and Wait for Event panels to be collapsible. Added an edit field for the number of arrivals on the Scheduled Source. Added a getlastacquiredresource() command. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Updated Move Object's Preserve Global Position checkbox to preserve location and rotation. People Added an experiment variable for changing the number of objects in a People group. Added a visual indicator to show when objects are acquired by the shift schedule. Added A* dividers to waiting lines and other objects. Adjusted the Staff's walk back to reset position so that it is preempted if acquired by something else. Added a custom window for People Down Behaviors. Added a Keep Person on Transport checkbox to the Transport Person activity. Changed the default Arrivals activities to randomize the created person's visuals. Updated activity subflows so travelers synchronize their speeds when traveling together. Moved copying token labels to the created person to after the people settings labels are added so values aren't overwritten. Added state history tables. Conveyor Improved naming of various objects. Fixed a bug with the height of decision points when created with certain model units. Added a chain texture to conveyor belt visual options. AGV Updated curved path quick properties to be able to specify start and end points. Improved naming of control points and areas. A* Added the A* Navigator to the Toolbox. Updated the A* Navigator Properties window.
View full article
Attached is an example DLL Maker project that calls a Java function using the Java Native Interface (JNI) from C++. The steps for how this works are outlined below: 1. Install the Java Development Kit (JDK). In creating this example, I used OpenJDK installed via Microsoft's special Installer of Visual Studio Code for Java developers. 2. Write a Java program. In my example, I created a simple Hello class with an intMethod() as described in IBM's JNI example tutorial. 3. Compile the .java file into a .class file. I did this using the Command Prompt and executing the following command: javac Hello.java 4. Configure the DLL Maker project to include the JNI library: In VC++ Directories > Include Directories, add the following two directories: C:\Program Files (x86)\Java\jdk1.8.0_131\include C:\Program Files (x86)\Java\jdk1.8.0_131\include\win32 In Linker > Input > Additional Dependencies, add jvm.lib In Linker > Input > Delay Loaded Dlls, add jvm.dll 5. Include jni.h in your code. (Line 51 of mydll.cpp) 6. Create a JVM in your code. (Lines 61-102 of mydll.cpp) 7. Get a handle to the method you want to call and then call it. (Lines 118-126 of mydll.cpp) 8. Connect a User Command in FlexSim to fire that C++ code that executes Java code. See the dll_maker_test_model.fsm included in the attached zipped directory. * Note: this example was built with 32-bit FlexSim because the JDK I installed was 32-bit. Using a 64-bit JVM is beyond the scope of this simple example and is left as an exercise for the user.
View full article
We recently had a customer ask how to draw a flow item label on the flow item object. I thought that this information would be useful to other FlexSim users as well. In the 3D model, drag and drop a Text visual from the Library. Select the text in the 3D model, then copy it to the clipboard using Ctl + C Go to the Toolbox tab, open the FlowItem Bin, and double click the Flow Item of interest. Right click the 3D flow object, and click "Explore Tree" Click in the white space underneath the Flow Item's node, and use Ctl + V to paste the text as a subnode to the flow item. If you zoom out in the Flow Item's 3D view, you will see the text. You can double click on the text and use the General tab to position it wherever you would like. Double click the 3D Flow Item. Underneath the Labels tab, select the green plus sign to add your label. In my example, I added a number label called "Type" with a default setting of 0. Click "OK". Double click the text that you added in step 5 and 6. Underneath the Display tab, click the custom code button next to Text Display. Within the custom code type something like the following: /**Custom Code*/ Object current = ownerobject(c); treenode textnode = param(1); textnode.value = "Type: " + string.fromNum(current.up.Type); //Note: If your label is called something other than "Type", make sure to replace it in both places. Click out of the "FlowItem Bin" tab and back into the "Model" tab. Double click the source where your Flow Item is being created. Underneath the Triggers tab, add an On Creation trigger. Click the green plus next to the On Creation trigger. Hover over Data and select "Set Label". Make sure the text next to the Label field matches the text of the label you set in step 7 and 8. By following these steps, each Flow Item will have a text label that displays the Flow Item label next to the Flow Item object. Please see the attached gif for a demonstration. flowitem-label.gif
View full article
FlexSim 19.0.4 and 19.1.1 are now available for download. IMPORTANT NOTE 1: The 19.0.3 installer has a bug that causes the current installer to hang during the Cleaning Up stage when upgrading from 19.0.3 to a newer version. We have resolved the issue for future installers, but to avoid the error now, uninstall 19.0.3 using Add/Remove Programs before installing the new version. Alternatively, you can press the X in the upper-right corner of the empty window, click Yes to canceling the installation (this won't do anything), and the Cleaning Up... window will successfully finish installing the upgrade. IMPORTANT NOTE 2: 19.0.4 and 19.1.1 include a bug fix to the JT importer. The JT importer now correctly accounts for the measurement units of the shape that are defined in the file. JT shapes in existing models may appear scaled incorrectly when you open them. You can resolve their scaling issue by executing the script below: forobjecttreeunder(model()) { treenode focus = a; string path = gets(shape(focus)); if(stringlen(path) > 3) { string extension = stringcopy(path, stringlen(path)-1, 2); if(comparetext(extension, "jt", 1)) { double x = xsize(focus); double y = ysize(focus); double z = zsize(focus); applyshapefactors(focus); setsize(focus, x, y, z); } } } Below is an example of the issue. Note that the shape is much smaller than its yellow box. Running the script above fixes the shape's scale factors so that it correctly fits in the yellow box again.
View full article
Run FlexSim "in the cloud"? Instead of provisioning a desktop or laptop PC that meets FlexSim's recommended system requirements, you may prefer for your FlexSim users to use a thin client PC which connects to a more powerful back end system that actually runs FlexSim. FlexSim does not test our products in such environments, so your user experience may vary. Meet the system requirements It is important that the remote system meet or exceed FlexSim's recommended system requirements. Usually for CPU and RAM that is not a problem. In the past, the biggest hurdle was typically graphics. Does the remote machine support hardware accelerated graphics, and support streaming those graphics to the thin client where the user is actually sitting? If the graphics are not accelerated, or if accelerated graphics can't be streamed to the user, then the system doesn't meet FlexSim's requirements and you may have a bad user experience. In the past In the past, provisioning such a system to meet FlexSim's requirements was quite a specialized combination of hardware and software. Even today not every cloud provider has the infrastructure to stream accelerated graphics. Our anecdotal experience is that such set ups are becoming more common among 3rd party cloud providers. Going forward Major players now seem to have mainstream support for hardware accelerated graphics: https://aws.amazon.com/ec2/elastic-graphics/ https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-gpu https://cloud.google.com/gpu/ As mentioned above, FlexSim is not targeted to these environments and the software is not tested in these environments, so your mileage may vary. Conclusion With more and more cloud providers enabling hardware accelerated graphics, there is a chance that FlexSim could work well on a cloud-based platform. If you have tried running FlexSim remotely using one of these or another cloud provider, we'd love to hear your experience. Please comment below to let us know about your setup, what worked, and what didn't.
View full article
This article borrows from @jordan.johnson's original guide for deploying a distributed experiment/optimization with Amazon. Distributed Terminology Please be familiar with the terminology related to experiments and optimizations. Replication - a distinct model run. We'll use this term below for both replications (experimenter) and solutions (optimizer). Instance - a system, whether virtual or bare-metal, local or remote, meeting FlexSim's recommended requirements, and used for running distributed replications. Main PC - the system from which the user configures and initiates the distributed experiment or optimization. The Cloud - a shorthand term for remote servers/systems hosted in a data center, sometimes by a 3rd party such as Amazon, Microsoft, Google, or others. Background Concepts In discussing distributed experiments or optimization, you should start with a good understanding of both the Experimenter and the Optimizer. Please read and understand this user manual entry which includes explanations of key concepts that will be important as you continue. Other user manual articles provide additional guidance on configuring your own experiments or optimizations. Search the online user manual and this community if you have additional questions regarding experiments or optimizations, as needed. Using the experimenter requires a FlexSim license. The optimizer requires a license for the OptQuest add-on. Please contact your local distributor for more information or to request a test license for FlexSim and/or OptQuest. What are distributed experiments or optimizations? Experiments or optimizations can create dozens, hundreds, or even thousands of distinct model runs (or replications) to test various scenarios, build confidence intervals of the results, or zero-in on an optimal solution. A distributed experiment or optimization takes those individual model runs and assigns them (distributes them) to run across a group of computers. If you needed to run 1000 replications, and you have 4 computers available, each computer could run 250 replications, getting your results 4 times faster. When should you distribute? Using distributed replications can significantly reduce the required time to run an experiment if: The single-run time for your model is high (a couple minutes or more) You anticipate running a high number of replications If the time per replication is short, then the increased communication overhead may outweigh the benefit of using distributed replications. The communication overhead increases because all distributed replications still report results to a single FlexSim process on the Main PC, and that communication occurs over the network (local instances) or internet (remote instances), rather than on a single computer. If an experiment or optimization completes in an acceptable amount of time, you may not need to use distributed replications. Financial Costs 3rd party cloud providers such as Amazon, Microsoft, Google, and others, charge for their services. Your cost is usually based on the hardware you provision for your Windows instances, and the length of time those instances are live. Typically you only run your instances when running your experiment or optimization, and cancel or decommission your instances when your replications are complete. In this way you minimize the cost of your distributed experiment or optimization. The costs and process of decommissioning your provisioned instances differ based on which 3rd party cloud provider you use. You may have access to local computing resources that could be configured for use in your FlexSim experiments or optimizations. In this case you may avoid additional costs relating to 3rd party cloud providers by using your own on-premises computers. Licensing for distributed Windows instances Windows instances used solely for distributed replications DO NOT need an individual FlexSim license. Only the FlexSim installation on the Main PC must be licensed. System requirements for distributed Windows instances Graphics A Windows instance should meet or exceed FlexSim's recommended requirements. However, because replications run as background processes without graphics, they need not meet the graphics requirements and do not need hardware accelerated graphics. CPU An instance can run as many concurrent replications as it has CPU cores. If, for example, an instance has 32 CPU cores, it can run 32 replications of your model simultaneously. RAM For this example of a 32-CPU Windows instance, if you want FlexSim to run 32 replications simultaneously - one on each core - then the instance must also have enough RAM to handle 32 concurrent model runs. On your Main PC, use Windows Task Manager to watch a single model run's RAM usage to determine its peak RAM utilization. If your model's RAM utilization peaks at 3GB throughout the course of a model run, you should make sure your 32-CPU system has at least 32*3 = 96GB of RAM for replications alone, along with a good ~10% more for additional overhead used for the Webserver and the statistics gathering and reporting from all the replications (this number could be more or less, depending on the model's stats gathering). In addition, you must account for your system's baseline RAM utilization - how much RAM it uses just to run the operating system and all its background processes. You can find this baseline by checking the Task Manager at a moment when you're not running any simulations. Add all these together to see how much RAM would be necessary to run a replication on each core of the instance. If your instance doesn't have enough RAM to handle that many simultaneous replications, you'll need to limit the number of CPUs FlexSim will use when configuring your Cloud Computing settings from the Main PC. Disk Disk space is usually not an issue. However, if you are using the Store Data on Hard Drive option in the Statistics Collector, you will need to be sure that there is enough disk space to run the model to completion on the hard drive, multiplied by the number of cores. The amount of disk space on each instance may affect the total cost of using a 3rd party cloud provider. More information See the related sections in the article Recommended System Requirements for a more in-depth discussion of system components such as CPU and RAM, and how they relate to running your simulations and experiments. Provisioning distributed Windows instances The process of provisioning 3rd party cloud instances for running distributed FlexSim replications will differ from provider to provider. FlexSim has guides for the following cloud providers: Amazon Web Services Wherever you decide to host your instances, the important part is that eventually you end up with a group of Windows instances, each with a unique IPv4 address accessible from the Main PC. A custom Windows image Your 3rd party cloud provider probably allows you to save a custom Windows image that can include software and settings that you need for each Windows instance. Doing this once for a custom Windows image saves you time when starting new instances - each instance will start with the software and settings preconfigured for your purpose. On your custom image, do the following Download and install FlexSim. Use the same version of FlexSim as is licensed on the Main PC. Remember, you DO NOT need to activate a license. Run FlexSim. This creates a directory that is needed later. After FlexSim finishes its first start, close FlexSim. Download and install the FlexSim Webserver for your installed version of FlexSim. Edit the Webserver's configuration file appropriately for your situation. Default location is here: "C:\Program Files (x86)\FlexSim Web Server\flexsim webserver configuration.txt" Start the FlexSim Webserver from your Windows Start menu, or manually from the default location here: "C:\Program Files (x86)\FlexSim Web Server\flexsimserver.bat". The Webserver will download necessary files the first time it is run. Close the Webserver after it has completed its initial startup. Allow both FlexSim and node.js through the Windows Firewall. To do so, use Windows' Allow an App through the Windows Firewall tool. You will need to browse for both FlexSim and Node.js. Example locations (exact locations may vary by version): C:\Program Files\FlexSim 2023\program\flexsim.exe C:\Program Files\nodejs\node.exe If you are not familiar with the FlexSim Webserver, please review its documentation and test it out on a local machine to understand what it does, its configuration options, etc. If you cannot configure a custom Windows image, you will need to do the above on each instance individually. Initialize instances Launch your instances. On each instance, do the following: Log in to the instance with Remote Desktop or some other solution. Start the FlexSim Webserver from your Windows Start menu, or manually from the default location here: "C:\Program Files (x86)\FlexSim Web Server\flexsimserver.bat". Note the instance's IPv4 address. Once all instances are running the Webserver, you are ready to configure a distributed experiment or optimization from the Main PC. Author's Note: There is probably a way to make it so that when instances start up, they automatically run the Webserver, so that you don't have to manually connect to each one. I welcome any suggestions or steps for how to make that happen. Configuring a distributed experiment or optimization Once you have a list of running instances available, launch FlexSim on the Main PC. Open the experimenter interface from FlexSim's Main Menu > Statistics > Experimenter. Configure your experiment. As part of your configuration, under the Advanced tab, select the option to Use Distributed CPUs. Press the button to Configure Cloud Nodes. This will open the Global Preferences' Environment tab. Enter the IP addresses of your instances into FlexSim. Enter the port numbers you configured in their FlexSim Webservers. If your instances will max out RAM before CPUs, enter a CPU count representing the maximum number of concurrent replications your instance can handle. For more information on using remote computers for Experiment Jobs, see Running Jobs on the Cloud for more information.
View full article
FlexSim 2019 Update 1 is available. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Added a new graphical interface to the Calculated Table for building queries. Updated the UI for editing rack dimensions. Added more options for customizing people visuals. Moved operator shape options from the Operator tab to Quick Properties. Improved edit modes by using right-click to cancel the current action instead of immediately exiting the mode. Added global preferences for process flow and dashboard library options. Added the FlexScript API reference to the user manual and made it accessible outside of FlexSim. Added toolbar support for adding multiple model background drawings. Adjusted how the floor Z and grid Z settings work to improve multi-floor modeling. Updated the table view to show more helpful information for certain data types. Added support for pointer data in bundles. Added a pointer type to tracked variables. Added support for the NULLIF SQL keyword. Added support for linking combo boxes to nodes with pointer data. Improved the gantt chart. Updated how tree files are saved to improve saving certain datatypes. Updated pulling from lists to throw an exception when passing a bad query. Fixed a bug with the normal map lighting calculation. Fixed an issue with the picking focus when using drawsurrogate within a drawsurrogate object. Fixed exceptions on an array table that doesn't have column header information. Fixed an issue related to moving items that had not been released. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Updated the internal structure of the Rack object's variables. Removed the rackgetcontenttable() command. Removed support for running the simulation from a loaded state file. Process Flow Added an option to the container to center its title when the contents are hidden. Added a limit to the number of activity panels displayed in quick properties. Added a Milestone activity. People Added a Healthcare environment option. Added an Elevator Bank object. Added a Prop object and more options for object visuals. Added tables that automatically collect statistics for people models. Added people chart templates. Added a People Settings object to the toolbox for people models. Improved the names of people created with the Create Person activity. AGV Updated the distancetotravel() calculation to work with moving AGVs. A* Added support for multiple grids. Adjusted how conditions are defined to improve performance.
View full article
FlexSim 2019 Update 1 Beta is available. (Updated 11 April 2019) IMPORTANT NOTE: The 15-Mar beta installer has a bug that causes the current installer to hang during the Cleaning Up stage when upgrading from the 15-Mar beta to a newer beta version. We have resolved the issue for future installers, but to avoid the error now, uninstall the 15-Mar beta using Add/Remove Programs before installing the new version. To get the beta, log in to your account at www.flexsim.com, then go to the Downloads section, and click on More Versions. It will be at the top of the list. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Added a new graphical interface to the Calculated Table for building queries. Updated the UI for editing rack dimensions. Added more options for customizing people visuals. Moved operator shape options from the Operator tab to Quick Properties. Improved edit modes by using right-click to cancel the current action instead of immediately exiting the mode. Added global preferences for process flow and dashboard library options. Added the FlexScript API reference to the user manual and made it accessible outside of FlexSim. Added toolbar support for adding multiple model background drawings. Adjusted how the floor Z and grid Z settings work to improve multi-floor modeling. Updated the table view to show more helpful information for certain data types. Added support for pointer data in bundles. Added a pointer type to tracked variables. Added support for the NULLIF SQL keyword. Added support for linking combo boxes to nodes with pointer data. Improved the gantt chart. Updated how tree files are saved to improve saving certain datatypes. Updated pulling from lists to throw an exception when passing a bad query. Fixed a bug with the normal map lighting calculation. Fixed an issue with the picking focus when using drawsurrogate within a drawsurrogate object. Fixed exceptions on an array table that doesn't have column header information. Fixed an issue related to moving items that had not been released. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Updated the internal structure of the Rack object's variables. Removed the rackgetcontenttable() command. Removed support for running the simulation from a loaded state file. Process Flow Added an option to the container to center its title when the contents are hidden. Added a limit to the number of activity panels displayed in quick properties. Added a Milestone activity. People Added a Healthcare environment option. Added an Elevator Bank object. Added a Prop object and more options for object visuals. Added tables that automatically collect statistics for people models. Added people chart templates. Added a People Settings object to the toolbox for people models. Improved the names of people created with the Create Person activity. AGV Updated the distancetotravel() calculation to work with moving AGVs. A* Added support for multiple grids. Adjusted how conditions are defined to improve performance.
View full article
The latest release of FloWorks 19.0.4 is now available (19 July 2019). This version of FloWorks is intended for use with FlexSim 2019 LTS. FloWorks 19.1.2 is available (19 July 2019) for use with FlexSim 2019 Update 1. FloWorks 2019 introduced some major changes in the way FloWorks works internally. These changes include the following: Flow rates and content are now tracked in the standard statistics variables, requiring us to override fewer FlexSim features. This means, for example, that you can use all of FlexSim's included Statistics Collectors and Chart Templates out-of-the-box. FloWorks now tries to schedule fewer events. This means that models will run faster and debugging your model by stepping through has become much more transparent. This release includes the beta version of the next-generation solver. This solver is particularly suited for networks with many connections, most of which are closed or blocked, or long 'chains' of objects with a single connection in and out. By simplifying the flow network before calculating the flow rates, the solver should become much faster overall. Since this solver is likely to give (valid but) different outcomes, it is not enabled by default - you can test it by enabling the "Optimize networks before solving" option in your Flow Control. The Flow Tank level triggers functionality has been overhauled. For more information, please see the detailed release notes below. All versions of FloWorks can be found in the Downloads section of your FlexSim account on the 3rd party modules tab. Please do not hesitate to report any bugs, usability improvements and feature requests to support@talumis.com. Thanks to the active users who have done this in the past weeks, we appreciate your ongoing support in helping us to improve FloWorks! About FloWorks FloWorks is a 3rd party module developed and maintained by Talumis BV (talumis.com). It provides faster and more accurate modelling and calculation of fluid systems than the default FlexSim fluid library. It is especially useful within the oil, gas, and bulk industry both for production and supply chain optimization. This module requires a FloWorks license with active maintenance. For any questions, please email support@talumis.com. Release notes Changes in FloWorks 19.1.2 (19 July 2019): Bug fix: dragging in a shape from a group will no longer create the first shape in the group. All changes included in version 19.0.4. Changes in FloWorks 19.1.0 (30 April 2019): This version is for FlexSim 2019 Update 1. For FlexSim version 19.0.x use FloWorks 19.0.3. Added support for unconstrained flows. All changes included in version 19.0.3 described below. Backwards compatibility note: The following change may change the way updated models behave. Option "Unchanged" removed from "Set flow rate" triggers -- this is now considered as "Unconstrained". Use the "Set maximum input/output rate" option instead of "Set maximum rates" if you only want to change either the input or the output rate. Changes in FloWorks 19.0.4 (19 July 2019): Various bug fixes to the Mass Flow Conveyor. Bug fix: Utiliation returns (flow rate)/(max flow rate) at time zero. Bug fix: Solved exception when dragging different object shape into the model. Backwards Compatibility Note: The following change may change the way updated models behave. Bug fix: 'Time until event is 0' exception due to rounding errors fixed. Bug fix: Mixer On Empty event will only fire once (when mixer is actually internally idle). Changes in FloWorks 19.0.3 (30 April 2019): This version is for FlexSim 2019 LTS. For FlexSim 2019 Update 1 use FloWorks 19.1.0. Loading arm state will show Blocked and Starved instead of Idle while transporter is connected. "Pass product downstream" option added to product change trigger of flow processors. Bug fix: Transporters were sometimes positioned incorrectly when entering Loading Point. Bug fix: Flow object states were not updated. Bug fix: Fixed error when calling state() with no arguments. Bug fix: On Entry and On Exit in trigger list of Flow To Item and Item To Flow fixed. Bug fix: "Pass product downstream trigger" threw exception when connected to Flow To Item. Changes in FloWorks 19.0.2 (3 April 2019): For FlexSim 2019 Update 1 beta use FloWorks 19.1.0 (beta). Feature: Flow tank can scale in both directions (elliptical) instead of only using x-size for diameter. Bug fix: Various bug fixes to beta version of new optimizer/solver. Bug fix: Removed "content is larger than max. content" message during reset. Bug fix: Fixed exception in "Pass product downstream" when pipe is not connected to anything. Bug fix: Corrected normals on flow blender and flow splitter shapes. Bug fix: FlowObject.input /output.ports[index] now accepts Variant (e.g. token.Port ) as index and does bounds checking on index . Bug fix: Spheres no longer drawn outside flow pipes shorter than 2 m. Bug fix: Quick Properties only shows a single flow rate for flow pipes; output rate set to input rate on reset. Changes in FloWorks 19.0.1 (8 March 2019): Beta: Flow control can optimize network before solving. (Optimization is disabled by default, can be enabled for models with many (effective) single connections.) Content-holding objects now have On Trigger Level event that allows e.g. Process Flow to wait for a specific level trigger. Optimized event scheduling: obsolete events are removed from the event list instead of ignored. FlowToItem and ItemToFlow added to script so that rates and impact factors can be read and set. Added more shapes for Flow Tank and Mixer. Added "Change product by case" to trigger options. Bug fix: Flow conveyors now have state profile consistent with that of Flow Tank. Bug fix: Product color picker samples colors instead of objects again. Bug fix: Fixed incorrect layers being drawn during filling of Flow Mixer when multiple steps require input from the same port. Bug fix: Fixed incorrect states on Loading Point due to duplicate state_current node. Bug fix: Product field or dropdown will now preserve selected value instead of resetting to current product when switching property tab pages. Bug fix: Flow Task Executer connects itself to default network navigator on creation. Bug fix: Flow statistics now behave correctly under model warmup. User manual: Corrected description of FlowObject.stop() in documentation. User manual: Documented manual loading feature when Loading Points have 0 loading time. Backwards Compatibility Note: The following change may change the way updated models behave. Statistics are now kept in standard FlexSim tracked variables under the stats node. If you use dashboards, you may need to rebuild some charts. You can mostly use the standard FlexSim chart templates, listening to the On Rate Change event or the On Content Change Update (not Change). Tank trigger levels rewritten: Trigger levels are now specified using absolute level instead of percentage. Legacy limitations (max. 20 levels, no duplicate levels, 0% or 100%) have been removed. Separate trigger condition has been added to avoid coding ( if(mode == falling) { ... } ). Modes rising and falling are now called MODE_RISING and MODE_FALLING . Bug fix: Sometimes input and output triggers would not fire if trigger was reached precisely when flow was recalculated. (Mass) flow conveyor now closes input/output when stopped, instead of input/output ports. Loading point continues with next transporter after releasing completed item instead of waiting for it to exit. Bug fix: (Mass) flow conveyor only closed input when stopping; now closes both output and input.
View full article
FlexSim 2019 is available. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Added support for importing JT files. Added a way to directly animate 3D shapes with bones. Added a way to parent subcomponents to a bone on a 3D shape. Updated calculated tables and chart templates to be able to save their data during an experiment. Added support for SQL keywords UNION, UNION ALL, INTERSECT, and EXCEPT. Updated the time table's weekly and daily modes to use a graphical display. Improved the time table's user interface. Added options for stacking bars on a histogram and added more bar modes. Added a Column Sets feature to statistics collectors. Added more options for event listening in statistics collectors. Added an option to statistics collectors and calculated tables for object path display depth. Added an option to statistics collectors to stop tracking row values after specified events. Added an option to milestone collectors to start new entries on the next milestone. Added options to record more data in additional columns on a milestone collector. Added enable/disable right-click menu options to statistics collectors in the toolbox. Improved the performance of calculated tables in certain configurations. Fixed a bug with Always Leave Entries on List when reevaluating multiple back orders. Fixed a bug with color spilling from one mesh to another when using shape data overrides. Fixed scaling issues and a crashing bug when loading certain STEP and IGES files. Process Flow Improved the Token.create() method to be able to create child tokens. Added a new Person Flow type of Process Flow. Fixed a bug with a resource connected to a global list deleting the list when the resource was in an instanced flow. People Added a Process activity. Added a Remove Person activity. Added various activity sets to quickly create common groups of activities. Added a priority value to resource objects that is used for acquiring and preempting resources. Added advanced options to the Process activity for handling preemption. Added functionality for simulating shift schedules with time tables and down behaviors. Improved the UI for how people objects are added to groups. AGV Improved control point selection on paths in the 3D view. A* Added a way to draw a heat map based on a node's percentage of total traversals. Added a Two Way option to preferred paths and dividers. Added a Condition option to A* objects to optionally disable them under certain circumstances. Added a Mandatory Path object used for defining sets of paths where certain connected objects can travel. Updated the Barrier object to be able to specify patterns to determine how it affects the grid. Added a FlexScript API for A* objects and data. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Fixed a bug with A* barriers blocking space larger than their actual size.
View full article
FlexSim 2019 Beta is available. (Updated 21 December 2018) To get the beta, log in to your account at www.flexsim.com, then go to the Downloads section, and click on More Versions. It will be at the top of the list. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Added support for importing JT files. Added a way to directly animate 3D shapes with bones. Added a way to parent subcomponents to a bone on a 3D shape. Updated calculated tables and chart templates to be able to save their data during an experiment. Added support for SQL keywords UNION, UNION ALL, INTERSECT, and EXCEPT. Updated the time table's weekly and daily modes to use a graphical display. Improved the time table's user interface. Added options for stacking bars on a histogram and added more bar modes. Added a Column Sets feature to statistics collectors. Added more options for event listening in statistics collectors. Added an option to statistics collectors and calculated tables for object path display depth. Added an option to statistics collectors to stop tracking row values after specified events. Added an option to milestone collectors to start new entries on the next milestone. Added options to record more data in additional columns on a milestone collector. Added enable/disable right-click menu options to statistics collectors in the toolbox. Improved the performance of calculated tables in certain configurations. Fixed a bug with Always Leave Entries on List when reevaluating multiple back orders. Fixed a bug with color spilling from one mesh to another when using shape data overrides. Fixed scaling issues and a crashing bug when loading certain STEP and IGES files. Process Flow Improved the Token.create() method to be able to create child tokens. Added a new Person Flow type of Process Flow. Fixed a bug with a resource connected to a global list deleting the list when the resource was in an instanced flow. People Added a Process activity. Added a Remove Person activity. Added various activity sets to quickly create common groups of activities. Added a priority value to resource objects that is used for acquiring and preempting resources. Added advanced options to the Process activity for handling preemption. Added functionality for simulating shift schedules with time tables and down behaviors. Improved the UI for how people objects are added to groups. AGV Improved control point selection on paths in the 3D view. A* Added a way to draw a heat map based on a node's percentage of total traversals. Added a Two Way option to preferred paths and dividers. Added a Condition option to A* objects to optionally disable them under certain circumstances. Added a Mandatory Path object used for defining sets of paths where certain connected objects can travel. Updated the Barrier object to be able to specify patterns to determine how it affects the grid. Added a FlexScript API for A* objects and data. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Fixed a bug with A* barriers blocking space larger than their actual size.
View full article
FlexSim 2018 Update 2 is available. If you have bug reports or other feedback on the software, please email dev@flexsim.com or create a new idea in the Development space. Release Notes Added an interface for running experiments and optimizations on the cloud. Added a mechanism for adding new charts as experimenter performance measures. Added a Sankey Diagram to the dashboard charts. Added a Milestone Collector statistics tool and chart templates. Added a way to customize how objects draw their 3D shape meshes. Added {} syntax to specify FlexScript expressions in SQL queries. Added a Down Behavior tool that can be used by Time Tables and MTBF MTTR objects. Added a message() method to the Object class to replace sendmessage() and senddelayedmessage(). Added a varchar bundle field type for variable-length strings. Added status bar updates to the table view. Updated the bar and pie charts with more options and data formats. Added duration settings to the gantt chart. Added new task sequence classes to the FlexScript API. Added a getCategoryName() method to the TrackedVariable class. Added getEntryFromValue() and reevaluateBackOrders() methods to the List class. Added padStart() and padEnd() methods to the string class. Added an option to sort back orders independent of entries when reevaluating back orders. Added an option to configure a list to always leave its entries on the list. Added events to the Statistics Collector. Added options for sorting rows in statistics collectors. Added dot syntax label access to List.BackOrder. Added a backOrder keyword that is available in a list back order queue strategy. Added a new overload to List.pull() that takes both an array and a query. Updated user library functionality to better handle conveyor types and containers. Updated Move into Highlighted code to preserve global position and rotation. Improved sampler options in various places. Improved drop-down options with label values in several places. Updated the Ctrl+W keyboard shortcut so it correctly closes the window that has keyboard focus. Updated the query() command to re-throw exceptions. Fixed a bug with updating bundle indexes when using certain commands. Fixed a performance bug with pasting into bundle tables. Fixed a window docking bug. Fixed a bug with the robot not drawing collision spheres or its stopped indicator. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Changed Variant math operations on non-numbers to throw exceptions. Updated the Source to automatically attach task executer flowitems to the DefaultNavigator. Updated dumpquery() to use bundle varchar fields. Fixed an issue with the Z-axis being inverted for screen-locked shapes in perspective 3D views. Process Flow Added stop() and resume() methods to the Token class. Updated global shared assets so they now have a separate global block instance. Updated Edit Mode so you can no longer move activities when it is off. Added a check box to quick properties to turn off all trace histories. Updated Wait for Event to handle listening to arrays of objects. Updated Pull from List so you can use it with a Resource shared asset. Updated the Resource so you can point it at a global List or a List shared asset. Added a way to sample shared assets in certain fields. Updated the naming convention for Resource object copies. Added an error message when trying to rename a shared asset the same name as another. Improved the performance of the Wait for Event activity. People Updated the multi-location to allow people to enter without an available sub-location. Conveyor Added a max count slug building property to the conveyor type. Added a catch condition to the power and free functionality to customize whether a given dog will actually catch an item. Added the capability to reverse conveyors under certain conditions. Changed the roller skew kinematics to be based on item travel distance instead of time. Changed the conveyor's belt repeat distance to sync to the adjusted dog interval. Fixed a bug with decision points snapping to grid when added with a conveyor from a user library. AGV Updated path transfers to prioritize their requests. Fixed an issue with accumulating path allocations causing AGVs to get stuck. Fixed various issues with AGVs having different deceleration values. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Improvements to AGV proximity detection on accumulating paths. Emulation Fixed Modbus polling for changes. Fixed the Modbus panels in the Variable shared asset so they show the associated object now.
View full article
One of the new features in FlexSim 2018 Update 2 is the ability to use distributed CPUs for the Experimenter or Optimizer. Those cores can exist on any machine that meets the following requirements: The machine is accessible by IPv4 address The machine has FlexSim installed The machine is running the FlexSim Webserver (version 18.2.0 or later) on port 80 The machine meets hardware requirements to support running the specified number of simultaneous replications. This article describes how to use Amazon Web Services to create remote machines that meet the above requirements. Using AWS, you can launch and connect to as many servers as you want, and pay only for the time used on those instances. Anticipated Use Case Using distributed CPUs can significantly reduce the required time to run an experiment if: The time to run a single replication is high (a couple minutes or more) The number of replications to run is high If the time per replication is short, then the increased communication overhead may outweigh the benefit of using distributed CPUs. The communication overhead increases because all CPUs still report results to a single FlexSim process, and that communication occurs over the internet, rather than on a single machine. If an Experiment or Optimization completes in an acceptable amount of time, you may not need to use distributed CPUs. Financial Costs Amazon charges for its services. Costs for running instances (and transferring data out of them) are found here : https://aws.amazon.com/ec2/pricing/on-demand/ Costs for storing data (including AMIs) are found here: https://aws.amazon.com/ebs/pricing/ These instructions include steps to create an AMI, which will likely cost around $1 per month at current rates. It also includes steps for launching high-performance instances, which have an hourly cost. Suitable instances can be as cheap as $0.50 per hour. Note that there are also charges for transferring data from an instance to another computer. Step 0: Complete an EC2 Tutorial If you are not already familiar with EC2 instances, you should complete the following tutorial: https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html Step 1: Create a Security Group You will need to create a security group with the following rules: Allow HTTP traffic on port 80. This allows incoming connections to the FlexSim Webserver. You can choose which inbound IP addresses to accept. You should make this as strict as possible. The strictest setting is to only allow incoming connections from the current IP address. Allow TCP traffic on ports 9000-9200. This is a Custom TCP rule. Note that you can make this range smaller, if all machines that use this Security Group have fewer than 200 cores. For example, if the biggest machine launched with this Security group has 72 cores, you would only need ports 9000-9072 in this rule. Allow RDP traffic on the default RDP port. This allows you to connect to the instance using remote desktop. Name the Security Group something that shows that this group is related to running FlexSim instances, and add a description if you want. Here is an example Security Group that works, but allows all TCP traffic, and so should only be used for testing purposes: Step 2: Create a Custom Amazon Machine Image (AMI) You will need to create a custom AMI. A custom AMI allows you to launch an instance that has the software you need already installed. To create one, follow these steps: Download the FlexSim installer and the Webserver installer. If your upload speed is slow, you can skip this step. Launch the cheapest instance available, with the Windows 2016 Server Base image. There are probably free-tier instances available in the list Connect to that Instance with Remote Desktop Copy (or download, if upload speed is slow) the FlexSim installer to the remote machine, and run it to install FlexSim. You do NOT need to activate a license. Run FlexSim. This creates a directory that is needed later. Then close FlexSim. Copy (or download, if your upload speed is slow) the Webserver installer to the remote machine, and run it to install the webserver. If using the 2018 Update 2 Beta, be sure to change the Webserver configuration file accordingly. Run the Webserver. It will download a bunch of files the first time it is run. Allow both FlexSim and node.js through the Windows Firewall. To do so, use the Allow an App through the Windows Firewall tool. You will need to browse for both FlexSim and Node.js. Both are in the ProgramFiles directory. Disconnect the Remote Desktop session Go to the list of Instances in the AWS Console From the Actions menu, select Image, then select Create Image: Add a name and description. Click the Create Image button On the next dialog, click the View Pending link, or navigate to the list of AMIs: Once the image becomes Available, terminate the running instance. Step 3: Launching Usable Instances Before running an Experiment or Optimization, you need to be sure that all remote instances you will use are current running. To launch and initialize these instances, follow these steps: In the EC2 Console, choose Launch Instance Select the AMI you created, from the list of My AMIs Choose the Instance Type and quantity Set the Security Group to use the Security Group you created Launch the instance Once each instance is initialized, connect to each one with Remote Desktop. Note that when you launch an instance with a given Key File, the password for each instance will be the password associated with that Key File, so you only need to decrypt the file once. Start the FlexSim Webserver in each instance Once all instances are running the Webserver, you are ready to run an Experiment or Optimization. Author's Note: There is probably a way to make it so that when instances start up, they automatically run the Webserver, so that you don't have to manually connect to each one. I welcome any suggestions or steps for how to make that happen. Step 4: Using the Instances in FlexSim Once you have a list of running instances available, you just need to input their IP Addresses into FlexSim, on the Advanced tab of the Experimenter: Once you have input this information, you just need to click the Experiment or Optimize button. FlexSim will then use the remote CPUs for running replications. Considerations Spot Pricing Amazon offers two pricing models: On Demand and Spot Pricing. FlexSim recommends On Demand instances. Spot instances can be significantly cheaper, but they can also be shut down by Amazon and given to an On Demand user at any time, if On Demand requests exceed the number of available machines. FlexSim does not try to recover from this kind of error, and it may lead to unexpected behavior. CPU Count, RAM, and Disk Space When you pick an instance type, be sure to understand how much ram you will need. If a model requires 4 GB of RAM while running, and you use an instance with 128 cores, be sure that the instance has at least 512 GB of RAM, or don't use all 128 cores. Disk space is usually not an issue. However, if you are using the Store Data on Hard Drive option in the Statistics Collector, you will need to be sure that there is enough disk space to run the model to completion on the hard drive, multiplied by the number of cores. The amount of disk space on each instance also affects the total cost of using this service.
View full article
Top Contributors