FlexSim Knowledge Base
Announcements, articles, and guides to help you take your simulations to the next level.
Sort by:
FloWorks 23.2.0 is now available (10 August 2023). This version of FloWorks is intended for use with FlexSim 2023 Update 2. If you are using FloWorks with FlexSim 2023 (LTS), please use FloWorks version 23.0.3 (LTS). If you are using FloWorks with FlexSim 2023 Update 1, please use FloWorks version 23.1.1. 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 [email protected]. 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 [email protected]. Release notes View the full release notes in the online documentation. FloWorks 23.2.0 Updated FloWorks for FlexSim 2023 Update 2. FloWorks 23.1.1 All bug fixes in FloWorks 23.0.3 below. FloWorks 23.1.0 (12 April 2023) Segmented Pipe: removed virtual content and fixed properties Changed default content of flow tanks and mixer from 50,000 to 1,000. All bug fixes in FloWorks 23.0.2 below. FloWorks 23.0.3 Bug fix: Module dependency shows invalid module version number All bug fixes in FloWorks 22.0.7 below. FloWorks 23.0.2 (12 April 2023) Moved flow control to toolbox Support time series, level triggered event and workability in Tools.create and Tools.get Added context menu option to disable time series in toolbox Added dot syntax to create flow controls, get the default flow control, and request recalculation of a flow control's network All bug fixes in FloWorks 22.0.6 below. FloWorks 22.0.7 Bug fix: Multi-product FlowTank blocks simulation when layer is small but nonzero, due to rounding error. FloWorks 22.0.6 (12 April 2023) Bug fix: Loading Arm processing time defaults to 10. Bug fix: fixed length³ to volume conversion for models in non-metric units Bug fix: fixed error message "FlowConveyor content changes are not allowed" Bug fix: flow conveyor density calculation was incorrect with non-metric units Bug fix: icon grid was not filtering correctly when A-connecting Bug fix: flow conveyor properties panel fixed Bug fix: added vertices editor to polygon flow tank quick properties Bug fix: after the first vessel, vessels were positioned incorrectly in the loading point Bug fix: quick properties now shows "Max. rate" for Loading Arm and "Max. inflow" for Flow Sink. Bug fix: removed duplicate Input / Output / Content change events from event selection list Bug fix: corrected input / output in on change event at end of warmup Bug fix: on empty and on full event would sometimes fire twice
View full article
FlexSim 2023 Update 2 is now available for download. You can view the Release Notes in the online user manual. FlexSim 23.2.0 Release Notes For more in-depth discussion of the new features, check out the official software release page: FlexSim 2023 Update 2: NVIDIA Omniverse, USD, Restricted Models, and more If you have bug reports or other feedback on the software, please email [email protected] or create a new idea in the Bug Report space or Development space.
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
FloWorks 22.2.0 is now available (31 August 2022). This version of FloWorks is intended for use with FlexSim 2022 Update 2. If you are using FloWorks with FlexSim 2022 Update 1, please use FloWorks version 22.1.1. If you are using FlexSim 2022 (LTS) please use FloWorks version 22.0.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 [email protected]. 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 [email protected]. Release notes FloWorks 22.2.0 New: Added a Flow Gauge object to measure and visualize the flow through a connection New: Added a Time Series object to the Toolbox as a source of daily, weekly or monthly changing values Improvement: Added several alternative shapes for Flow Source such as Plant and Well Improvement: Level Triggered Event now has an OnTriggerFired event that ProcessFlow can await Bug fix: Some additional issues with incorrect scaling when not using meters Bug fix: Flow tank level triggers issue with multiple levels (not) firing All bug fixes in FloWorks 22.0.2 below. Backwards Compatibility Note: The following change may change the way updated models behave. Flow Impact Event has been deprecated and may be removed in the future. Picklist options for applying impact factors have been added to FlexSim's own MTBF/MTTR and Timetable. As an improvement, the same picklist options are also available in Down Behaviors. FloWorks 22.1.1 All bug fixes in FloWorks 22.0.2 below. FloWorks 22.1.0 (12 May 2022) All bug fixes in FloWorks 22.0.1 below. FloWorks 22.0.2 Bug fix: FlowMixer.loadRecipe can handle re-ordered product tables Bug fix: Statistics are now correctly initialized for flow tanks created during run. FloWorks 22.0.1 (12 May 2022) Added support for Object Property Tables Bug fix: incorrect MassFlowConveyor content Bug fix: LoadingPoint issue with not-released positions (and status) Bug fix: Object created at incorrect scale when not using meters
View full article
FlexSim 2020 Update 1 is available. If you have bug reports or other feedback on the software, please email [email protected] or create a new idea in the Development space. Release Notes Updated the Statistics Collector to be simpler and more user friendly. Added a PowerPoint FlexScript API. Added an HTTP FlexScript API. Added a sorting tab to various charts. Improved performance of chart templates. Replaced the code profiler with a new Performance Profiler. Added a Memory Profiler. Added OnEntry and OnExit events to TaskExecuter objects. Added an icon to library items that launch a pop-out library of choices. Reorganized the dashboard library using the pop-out library to consolidate charts with multiple visualizations. Updated the WebServer to use the Version Selector. Added a Find/Replace UI for global tables. Added support for Ctrl-F and Ctrl-H keyboard shortcuts for various windows. Added support for renaming objects using the F2 keyboard shortcut. Added a Vec3 overload to the Object.setRotation() method. Added a stop parameter to the userinput() command which will stop code execution until a value is entered. Added a default parameter to the realtime() command that returns realtime(1)+0.001*realtime(2). Updated various pickoptions to use the TaskSequence and TaskExecuter APIs. Added tutorials for the Statistics Collector. Added a Variant overload to the Table() constructor. Fixed some issues with the importtable() command. AGV Added new Train functionality. Added offset travel functionality to the AGV network. Added a time-based trailing option. Added the routing drawing feature to a right click option. Updated Quick Properties' apply to all selected objects functionality to work with AGV objects. Made arrows bigger. Fixed several spinners in Quick Properties not applying immediately. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Changed behavior for when a TaskExecuter is connected to an AGV network, and is set to use the navigator for its offset travel. Previously, the navigator was hard-coded to find the closest control point. Now, you instead need to add an OnAGVOffsetTravel trigger to the navigator, wherein you can direct the AGV how to offset. People Added clipboard, test tube, and pill bottle flow items. Added a Max Speed property to Equipment objects. Updated Transport and Equipment objects to do low priority returns. Added the ability to install instanced People flows. Updated the LocationStaytimeHistory chart to handle people entering and exiting transports inside a location. Process Flow Added an AGV travel activity. Updated the Sink to notify parent tokens on a Run Sub Flow activity that the child token finished the subflow. Updated the Wait for Event and Event-triggered Source activities to be able to display more than one link at a time. Updated the sampler for Universal Edit fields to display process flow variables and current labels when sampling white space. Added a pop-out library for choosing the shape of Container objects. Added a pop-out library for choosing the type of travel activity. A* Updated the Heat Map to use a Color Pallete.
View full article
Every now and then, there are technical support questions that are asked more than once by different users. This article seeks to address a couple of “how to” questions that have come up over time. As such, this isn’t a massively technical paper just a quick look at a few things that might make your modeling experience more fun and your models a little more interesting. Background: This is a physical screening clinic similar in nature to those you might encounter either in the military or in a hospital that supports a large industrial area where employee physicals are required either by insurance companies or an employer. That said, it could even be a part of a much larger function like an ER. In a nutshell, patients that represent a mixed population of both men and women, are sent to the clinic without an appointment and arrive according to an exponential distribution. In the model, the mix of men and women is 50-50 although it can be altered to accommodate any distribution of patients. Once a patient registers, he/she is either directed to a gender-specific changing room where they change into a white surgical gown, or take a seat in the waiting room until a changing room is available. Once changed, each patient is escorted to an exam room by one of two nurse practitioners, is examined for a time period that is also gender-specific (men – normal(20,5,1), women – normal(17,3,1)), and is eventually released to return to a changing room and finally to leave the clinic. Any time there is no changing room available, patients take a seat in the waiting room. The clinic opens at 0800 hrs and closes at either 1600 hrs or after 1600 hrs when the last patient departs. Open and run the model, “changing-rooms-model-11-16-2016.fsm” to see the model in operation. Modeling challenges: The challenges are straight-forward and not at all complex. Specifically, they address the following questions: How do you stop patient arrivals (e.g. in-flow) at a certain time of day and then close the clinic when the last patient departs? How do you make sure that patients go to their own gender-specific changing rooms? How do you change a patient’s shirt color to white representing a patient gown and then back to their original color when they change back into their street clothes? How do you use a patient label to determine treatment time if a distribution is contained in the label? Flow Chart: Before we dissect the model, it’s probably not a bad idea to take a close look at the flowchart if only because, despite the model’s size, it can seem a little complex. Notice that the changing rooms really are the central point in the model. As such, connecting lines have to be constructed that link the Registration Area (0ne way), the waiting room (two way), the exam area (two way) and the Patient exit (one way) with each of the Changing rooms. Setting the Stage: Because the purpose of this model is to make provisions for and track both male and female activities, it uses two different PCIs (Patient classification Index numbers) to represent Men (PCI1) and Women (PCI2). Those PCIs and any related labels that may generally carry information about patients that might be used for decision making later, are initially entered in the Track Manager, under the tab labeled, "Patient Classification” as shown to the right. Note that, in this case, there are fields for identifying which Track a specific PCI will follow, what each PCI’s Acuity will be, which Gender different PCI’s will represent, which distributions represent each PCI’s Exam Time in the model, and a direct reference to which changing room a patient should use. Needless to say, each of the three types of fields – text, number and code – are accessible from various elements of the model and may be used to determine and isolate almost any patient characteristic a modeler might use to define patient Activities. One other “setting the stage” aspect of the model that deserves mention is the positioning of the nurses. Note that the two nurses aren’t arrayed in a single line, the default positioning of resources in a model, but rather are positioned as if they're having a conversation. Although somewhat inconsequential when a resource staff is small, large collections of staff members cry out for better, more life-like poses. To change a resource’s initial location in a model relative to its home base - in other words, it’s “Offset” – first make sure the model is in “3D View” by clicking on View>Model View (3D) in the main menu. Then, simply click on the individual resource and drag it to the place you’d like it to stand as its initial position. Note that the X Offset, Y Offset and Rot Offset values that are unique to each member of a resource group, will automatically be changed to the new coordinates. Finally, note that by clicking and holding down your left mouse button over any of the Offset positioning arrows (circled in red above), and then moving your mouse forward and back, you can also manually reposition any specific resource. Arrival Pattern : Open the Properties window for the Patient Arrivals Object to follow this discussion . The Patient Arrival pattern is simple to construct, involving nothing more than identifying the correct exponential distribution (i.e. exponential(0,20,1)) in the Patient Arrivals Properties’ Interarrival Time field as shown at the left. Notice also that the Patient Classification Index (PCI) field contains an expression to calculate and therefore generate two different PCIs. As mentioned previously, PCI 1’s are classified as men and PCI 2’s as women. In this case P(50.00, 1, 50.00, 2) insures that a mix of 50% men and 50% women will be generated by the Patient Arrivals Object during the model run. Setting Certain Patient and Model Characteristics : The purpose of the Patient Arrivals object isn’t only to create a unique pattern of patient arrivals but also to serve as the source of every patient’s initial characteristics as well as set certain actions that affect the performance of the model as a whole. In this case, changes to the patient’s appearance and the stopping time for patient arrivals are both determined in two different Patient Arrivals’ Property Triggers as shown at the right. Note that the “On Creation” Trigger is used to identify any actions the modeler might want to activate that occur when a patient is created for entry into the model. As shown, picklist option can be used in the On Creation Trigger to change any number of model parameters In this model, only that referring to the patient’s shirt color is changed. In this case, there are three entries to select from … (1) the fact that the patient’s shirt color should be changed, (2) which color palette should be used to obtain the desired color (Palette2), and (3) which color (by index number) should be used. Note that the color index number is determined by the patient’s PCI of either 1 or 2. Different palettes unique to the software can be viewed by selecting, “Edit > Color Palettes,” from the software’s main menu. Note that new palettes and/or colors may be added to the color palette editor by selecting the appropriate functional options (ie. Add/Delete Palette, More/Less colors). In this case, Male patients will wear green shirts and female patients will wear yellow. Note that the “OnExit” Trigger is used to identify any actions the modeler might want to occur when a patient exits the Patient Arrival object. In this case, the picklist option, “Stop or Resume Flow” is selected to act as a brake for patient arrivals after a specified elapsed time. Although there are seven different drop down options to select from regarding the condition desired to stop patients from entering the model, the option “time()>960” is selected to stop arrivals at 1600 hrs (4 p.m.). Note that “960” represents the elapsed time in minutes since midnight (time 00:00) of the first day of the model run. Many first time modelers make the mistake of assuming that the time value represents the elapsed time since the model’s beginning time, in this case 8 a.m., which isn’t the case. In any event, this picklist option examines the time of every patient’s departure from the Patient Arrivals object and the first patient created at or after 1600 hrs, automatically stops any additional patients from being created. Closing the Clinic’s Doors and stopping the model . Open the Properties window for the Patient Exit object to follow this discussion. Clearly there are two actions that are required to close the clinic at or after 4 p.m. when the last patient departs. The first is to close the front door which is accomplished by the “OnExit” Trigger found in the Patient Arrivals object as discussed in paragraph 5B above. The second is accomplished in the Patient Exit object’s “OnEntry” Trigger as shown at the right. In this case, the drop down picklist option, “Stop Model Based on Condition,” is selected and used to establish two criteria for the model’s end. The first criteria is that the elapsed time be later than 4 p.m. and the second is that there be no patients in the clinic when 4 p.m. arrives. The correct entry for the picklist option then, is shown at the left and takes both circumstances into account. What it determines every time a patient leaves the clinic is, what time it is and if anyone remains to complete treatment at that time. If the time is even a second past 4 p.m. and the clinic census is zero, the expression stops the model. So far, we’ve accomplished several tasks that include, (1) setting the patient’s shirt color, (2) establishing a criterion for closing the clinic door at 4 p.m. and stopping clinic operations at or after 4 p.m. when the last patient leaves, and (3) positioning resources at various places in the model rather than in a single straight line. Now, we need to change the patient’s shirt color to white – symbolizing changing into an examination gown – and back to its original color when the exam is over, and determine the patient’s Exam Time. It’s a simple process that we’ll cover in Activities 40, 60 and 80. Activity 10_Arrival: This activity causes the patient to walk unescorted from the Patient Arrival Object to the Registration Area. Although there’s nothing complex or unfamiliar about the activity, it’s important to note that even though this activity has no predecessors, a check mark is still required in the Predecessors box to cause the model to begin this activity without a command from some other activity. Activity 20_Registration : This activity causes the patient to use someone from the ClerkGroup at the Registration desk for normal(2,1,1) minutes to log in. Activity 30_TravelToChange1:This activity causes the patient to walk unescorted to one of the two changing rooms based on the patient’s sex. As such, which of the changing rooms is determined by the entry in the Patient Destination field, in this case, from the drop down picklist option, “Based on a Condition,” and by the edited drop down option, “getlabelnum(patient, "Gender") == 1 as shown to the right. Note that there are actually 12 different, “Choose a Condition” options the modeler can employ to set the patient’s destination. Activity 40_Change1 : This activity causes the patient to take normal(3,1,1) minutes to change into an examination gown and changes the patient’s shirt color from either green or yellow to white representing that change. The expression that causes the color change is contained in the Advanced Function, “Activity Finished Trigger.” In this case, the drop down picklist option, “Set Color” is selected to change a patient’s shirt to white as shown to the right. White is the color whose index number is 15 in the color palette 3. Activity 50_TvlToExam: This activity causes the patient to be escorted by a member of the NurseGroup from the changing room to the first available Exam room. Activity 60_Exam : This activity causes the patient to spend a period of time specified in the Processing Time field being examined by the same nurse that escorted them to the Exam room. Note that the exam time is entered by selecting the drop down picklist option, “Based on Patient’s Label,” and then by selecting the Patient Label, “ExamTime,“ that was previously set in the Patient Classification Index (PCI) Table. See Paragraph 3 above. Activity 70_TvlToChange2 : This activity causes the patient to walk unescorted to one of the two specifically named changing rooms. As such, which of the changing rooms is determined by the entry in the Patient Destination field, in this case, from the drop down picklist option, “Based on a Condition,” and by the edited drop down option, “getlabelnum(patient, "Gender") == 1 as shown to the right. See paragraph 7C for the same logic initially entering a changing room. Activity 80_Change2 : This activity causes the patient to take normal(3,1,1) minutes to change out of their examination gown and back into their street clothes by changing the patient’s shirt color from white back to their original color. The expression that causes the color change is contained in the Advanced Function, “Activity Finished Trigger.” In this case, the drop down picklist option, “Set Color” is again selected to change a patient’s shirt to its original color using the patient’s PCI number. Note that this is the same way the shirt color was assigned initially. See paragraph 5A Activity 90_Departure: This activity causes the patient to walk unescorted to the clinic exit and leave the model. Special Notes regarding the Changing Room model . As simple as the model may seem, it serves to reinforce several modeling techniques that we sometimes overlook. For example, … All activities are assigned unique Milestone names. In this case, TvlToChange1 and TvlToChange2 are identical in every respect. However, Change1 and Change 2 aren’t. To combine the four different activities into two identical activities would change the Patient Timeline widget in the Dashboard so that a patient’s time spent waiting for a nurse following the first Change would be combined as a single display element. This might make it difficult to glean specific information from the Timeline regarding total time changing and waiting for resources. The use of floor displays and walls to enhance a model’s appearance is highly encouraged. To design effective and realistic models, practice using the Infrastructure tools to create underlying floors and the Library tool, “Visual Objects,” to create enclosures.
View full article
FlexSim 2018 Update 2 is available. If you have bug reports or other feedback on the software, please email [email protected] 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
FlexSim 2022 Update 2 is now available for download. For more in-depth discussion of the new features, check out the official software release page: Official Software Release Page - FlexSim 2022 Update 2: AMR Modeling, AI with Bonsai, and more You can view the Release Notes in the online user manual. FlexSim 22.2.0 Release Notes If you have bug reports or other feedback on the software, please email [email protected] or create a new idea in the Development space.
View full article
Quando desenvolvemos um modelo de simulação que possua diversas ou até mesmo elevado número de variáveis de entrada, faz-se necessário analisar diversos cenários dentro de um simulador para termos o maior número de detalhes possíveis com relação ao comportamento do sistema. No FlexSim, o recurso que permite esse tipo de análise é o Experimenter. Com ele, podemos estimar como as variáveis de entrada, afetam as respostas de um experimento e pode-se planejar de forma racional os cenários a serem executados. O vídeo explicando um pouco sobre experimentos e também falando sobre o Experimenter, encontra-se em nosso Canal no Youtube.
View full article
FlexSim 2021 Beta is available. (Updated 19 November 2020) 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 [email protected] or create a new idea in the Development space. Release Notes Added a Model Parameter Table tool. Added a Performance Measure Table tool. Added an Empirical Distribution tool. Added a Web Page tool. Upgraded html views from WebKit to Chromium Embedded Framework. Added a Map FlexScript API. Added a JSON FlexScript API. Added Object.getProperty() and Object.setProperty() methods to the Object FlexScript API. Moved dashboard properties windows into the context sensitive Properties window. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. The Experimenter and Optimizer now use Model Parameter and Performance Measure Tables. Existing experiments and optimizations are no longer compatible and are discarded by the model upgrade process. Fixed the PowerPoint.Presentation.create() and PowerPoint.Presentation.open() method syntax. Due to Chromium's multi-process architecture, the FlexScript command callwebscriptmethod() and JavaScript function fireFlexsimEvent() are now asynchronous and do not return values directly. To get the return value of fireFlexsimEvent(), you can now pass a callback function as the last parameter: fireFlexsimEvent("myEvent", param1, param2, function(result) { alert("result: " + result); }); AStar Added a Strict Diagonals setting to make travelers travel better around corners. Conveyor Added a Mass Flow Conveyor. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Removed Conveyor Types. People Added a Remove Statistically Only checkbox to the Remove Person activity. Updated the Statistics Properties panel to display HC states.
View full article
Modeling LWBS patients is tricky business and can cause exception errors under certain circumstances if not done correctly. The problems usually arise due to patients who exit the model early while there are pending requests queued up in the model for future activities on the patient. The attached model demonstrates the current best practice for safely modeling LWBS patients without the possibility of generating unwanted errors. The modeling technique is very simply. Use the On Entry trigger of the waiting room object(s) to send a delayed message to itself in X minutes, where X is a sample time from an "impatience curve" representing the amount of time a typical patient is willing to wait before they strongly consider leaving. In the On Message trigger of the waiting room object(s), I have written a code snippet that you will want to copy and modify to suit your own modeling requirement. The code snippet in the example model checks to make sure the patient is still in the waiting room waiting for an exam room at the end of the "impatience time" when the message trigger fires. Then I roll the dice using a bernoulli distribution to decide whether or not to have the patient actually leave. The code snippet shows a different probability for each of two patient types (PCI's) and then a default probability of 50 percent for anyone else. Not only does this modeling approach avoid undesirable exception errors, but it is also more accurate and definitely more efficient than using the Quick Properties fields in the Patient Condition panel of a waiting room which requires repetitive function calls every so many minutes throughout the model run!
View full article
O link que segue leva a um vídeo no qual é apresentado um exemplo de modelagem utilizando-se o módulo FloWorks FlexSim. No vídeo, modela-se um processo de fabricação de Suco de Laranja, desde sua extração até seu envase. Recursos do FloWorks utilizados no vídeo: ItemToFlow: Extração do suco FlowPipe: Transporte do fluido FlowTank: Armazenamento FlowMixer: Processo de mistura de conservantes Vídeo Tutorial: FloWorks Exemplo de Modelagem Esperamos que aproveitem mais este vídeo tutorial.
View full article
Rápida demonstração de como usar o Graphical User Interface para controlar todo o modelo de simulação, desenvolver um painel de controle ou cockpit para alterar propriedades específicas de objetos dentro do modelo de simulação ou ainda, destruir ou recriar variáveis de objetos de forma a customizar ainda mais seu modelo. Tudo isso usando a estrutura do 'Tree' no FlexSim e também o recurso GUI, disponível no ícone em 'Tools'. Veja em nosso canal da FlexSim Brasil no Youtube.
View full article
Nesse vídeo demonstramos como importar modelos de animações para os executadores de tarefas ou recursos através de arquivos criados em software específicos para modelagem de animações e disponíveis em repositórios como o Mixamo. Veja o passo clicando em BoneAnimationVideo Também descrevemos o passo a passo de uma parte, logo abaixo. Estes são os passos que seguimos para criar os operadores com bone animation no FlexSim. (opção disponível a partir da versão 7.7) Copie o conteúdo deste diretório "Pasta Operador" para o seu diretório FlexSim/ fs3d / Operator para que ele tenha 5 opções de operadores ao invés de apenas 3; Abra o FlexSim; Arraste um Operador; Clique duas vezes nele para editar suas propriedades; Selecionar Masculino - High Res ou Feminino - High Res na opção do Shape na guia Operador; Pressione Aplicar; Reinicialize o modelo (Isso é necessário para atualizar as animações porque esses arquivos possuem mais animações do que o padrão); Clique com o botão direito do mouse no Operador na vista 3D e selecione Editar> Animações Existem agora 12 animações disponíveis; Execute estas animações usando listas de seleção, utilizando um Triggers para Iniciar e ou Parar a Animação eu sua Modelagem no 3D ou então use a atividade Run Animation na criação da sua lógica com o ProcessFlow. Abaixo você encontra os arquivos necessários para incluir os operadores em alta resolução em seu FlexSim e também uma grande quantidade de animações de dança extras adicionadas! Faça o download aqui do material explicando sobre o bone animation. Faça o download aqui do material usado no passo a passo do vídeo deste artigo. Inscreva-se e acompanhe nosso canal de videos no YouTube FlexSim Brasil -------------------------------------------------------------------------------------------
View full article
Neste modelo anexo simples mostramos como usar TrackedVariable para conseguir alguns outputs customizáveis dentro do FlexSim e uma das funções do recurso Global Variables, outro recurso que pode ser usado durante a modelagem para customizar os trabalhos de criação de lógicas e também customizar alguns outputs de seu sistema. O passo a passo como elaborar esse modelo encontra-se no vídeo em Passo a Passo TrackedVariable e Global Variable trackedvariables-e-global-variable.fsm somente na versão 2017 do FlexSim.
View full article
In this article, you will learn how to export data from individual replications to an external database. This is an advanced tutorial, and assumes some exposure to databases and SQL. It also assumes that you are familiar with the Experimenter and/or Optimizer feature in FlexSim. This tutorial uses PostgreSQL, but should be compatible with the most popular SQL database engines. Model Description Let's assume you have a model with at least one Statistics Collector, as well as an experiment ready to go. The model used in this example is fairly simple: As the model runs, a Statistics Collector fills in a table. The table makes a new row for every item that goes into the Sink, recording the time, and the Type label of the item: For the experiment, we don't have any variables, but we do have one Performance Measure: Input of the Sink. Of course, an actual model would have many Variables, Scenarios, and Performance Measures, but this model leaves out those details. For reasons which come up later, this model also has two global variables, called g_scenario and g_replication. We will use these during the experiment phase. Connecting to the Database To connect to a database, you can use the Database Connector tool. Each Database Connector handles the connection to a single database. If you need to connect to more than one database, you will need more than one Database Connector. For this model, I have added a Database Connector, and configured the connection tab as follows: This configuration allows me to connect to a PostgreSQL database called "flexsim_test" running on my computer at port 9001. You can test the connection by clicking the "Test Connection" button. The test attempts to connect, as well as query the list of tables found in the database. Setting Up the Export Next, take a look at the Export tab: This tab specifies that we are exporting data from StatisticsCollector1 to the table called experiment_results in the database (this table should exist before you set up the export). The Append to Table box means that when the export occurs, the data will be added to the table. Otherwise, the data would be cleared from the target table. The other interesting thing here is that we are exporting more columns than the Statistics Collector has, namely the Scenario and Replication number. However, the expression in the From FlexSim Column column must be valid FlexQL (FlexSim's internal SQL language). Wrapping the values in Math.floor() leaves the values unchanged, and works well with FlexQL. Setting up the Experimenter Finally, let's take a look at just a little bit of code that makes the Experimenter dump data to a database. There is code in Start of Experiment, Start of Replication, and End of Replication: In the Start of Experiment, we need to clear the table. The code in this trigger connects to the database, runs the necessary query, and the closes the connection to the database. In the Start of Replication trigger, the code simply copies the replication and scenario values into the global variables we created for this purpose. In the End of Replication trigger, the code uses function_s to call "exportAll" on the database connector that we created. This uses the settings on the Export tab to dump the data from StatisticsCollector1 to the database table, including the replication and scenario columns. These same triggers run during an optimization, so the same logic will apply. Run the Experiment Finally, you can run the experiment. When each replication ends, the Statistics Collector data will be exported to the database. Databases can handle many connections simultaneously. This is important, because the child processes that run replications will all open individual connections to the database at the end of each replication. This leads to many concurrent connections, which most databases are designed to handle. But how can we tell that it worked? If you connect to the database with another tool, you can see the result table. Note that there are 1700 rows, and that data from Replication 5 is included. Additionally, you could use the Import tab to import all the data, or summary of the data data, into FlexSim. Conclusion Storing data in a database during an experiment is not difficult to do. There are many excellent tools for analyzing and visualizing database tables, which you could then use to further explore and understand your system. postgresqlexperimentdemo.fsm
View full article
Introduction Several times per year we release a new feature-version of FlexSim Simulation Software. In order for your PCs to be able to run a licensed version of the upgraded software, you'll need to upgrade your standalone FlexSim license. Licenses with a current maintenance subscription are eligible to be upgraded to the new version. If you don't understand how licensing works for different FlexSim versions, please review our Answers article FlexSim Version Numbering. Overview After installing your new version of FlexSim, there are 3 main steps to upgrading your standalone license: Return the licenses you intend to upgrade Upgrade your licenses Activate the upgraded license Several of these steps have their own fully documented procedures. We'll link you to those resources below. 1. Return the licenses you intend to upgrade The steps to return a standalone license are fully documented. Choose the link below that best matches your needs, depending on whether your PC can connect to the Internet: Standalone - Return - Online Standalone - Return - XML / Offline Be sure to return ALL licenses you wish to upgrade. 2. Upgrade your licenses NOTE: Licenses with expired maintenance will not upgrade. Timed licenses do not upgrade. Only permanent (not timed) licenses under current maintenance can be upgraded. Log in to your FlexSim Account. If you were already logged in to your FlexSim Account, in the top navigation menu hover over your initials icon and choose Reload Account. Now in the top navigation menu, choose Licenses > List. Check that the available seat count is equal to the total. All of a license’s seats should be returned for it to upgrade. Click on the Upgrade Licenses button. If you have several licenses to upgrade and all are owned by or shared with your FlexSim Account, they will all be upgraded at once. Please be patient while the upgrade process works in the background. When the page refreshes, eligible licenses will have a new activation ID for the latest version of the software. Your license code indicates its version at the end of the code to help you know what versions your license will properly activate. Review license code format. You'll be able to use the upgraded license codes in the next step. 3. Activate the upgraded licenses The steps to activate a standalone license are fully documented. Choose the link below that best matches your needs, depending on whether your PC can connect to the Internet: Standalone - Activation - Online Standalone - Activation - XML / Offline If you have any questions or problems, please search our Answers Community for possible solutions. There is a good chance someone else has already asked your question. Still not finding what you're looking for? Submit a new question and we'll check it out. If you're including any confidential information, such as license codes, be sure to mark your question as private! You can also contact your local FlexSim distributor for live phone, web, or email help.
View full article
Neste Tutorial iremos demonstrar em um exemplo como funciona a biblioteca AStar Navigator no FlexSim. O AStar Navigator, também conhecido como A*, é um algoritmo de busca usado para encontrar um caminho entre pontos, e serve para determinarmos o trajeto pelo qual os executores de tarefas podem se movimentar pelo modelo. Esta biblioteca permite que você crie e defina barreiras físicas para a correta movimentação dos executores de tarefas em seu modelo. Nós iremos usar o seguinte modelo para mostrar como o A* Navigator pode ser usado em um modelo simples. astar-example-model.fsm Crie o A* Navigator Primeiro, um objeto AStarNavigator deve ser adicionado ao modelo. Somente um objeto AStarNavigator faz-se necessário e permitido por modelo. Crie um objeto AStarNavigator ao clicar e arrastar da biblioteca para qualquer posição na superfície de simulação em 3D. Conectando os Membros Neste modelo, existe apenas um objeto executador de tarefa (TaskExecuter), no entanto, nós também queremos incluir o Rack como uma barreira. Faça um conexão com o 'A' entre o AStarNavigator e o operador. Isto pode ser feito mantendo a tecla A pressionada e clicando/arrastando do AStarNavigator para o operador, ou do operador para o AStarNavigator (não importando a ordem ou sequência de onde tem que partir a conexão). Um círculo em azul irá aparecer abaixo do operador. Faça uma conexão com o 'A' entre o AStarNavigator e o Rack. Um retângulo em azul irá aparecer abaixo do Rack. Adicione um Source e um Queue próximo ao operador conforme você pode visualizar em outra imagem mais abaixo. Criando Barreiras (Barriers) Junto com o Rack, vamos também criar um par de barreiras para representar paredes ou obstáculos que o operador não pode caminhar através. Clique no ícone do Divider na biblioteca para entrar no modo de criação. Clique em algum lugar ao lado direito do Queue (buffer) para criar um novo Divider. Clique duas vezes mais próximo dos pontos para mostrar a imagem abaixo para finalizar o Divider. Clique com o botão direito do mouse para sair do modo de criação. Adicione os Processors e um Sink conforme imagens abaixo. Faça a conexão deste o Source até o Sink usando a conexão com “A”. Clique sobre o ícone Barrier na biblioteca para entrar no modo de criação. Clique uma vez onde o canto esquerdo inferior do Barrier estará como mostrado abaixo. Clique novamente no canto direito superior para completar a configuração do Barrier. Clique com o botão direito para sair do modo de criação. Coloque o Barrier abaixo do Rack. Execute o Modelo Você pode agora resetar e executar o modelo para ver como será a performance do operador. Lembre-se, se você fizer qualquer mudança nas suas barreiras, o modelo obrigatoriamente deve ser resetado antes de ser executado novamente. Note que o operador encontrou o menor caminho para movimentar-se por cima e por fora do Divider. Embora exista diversas formas de alterar os caminhos do operador (por exemplo, estender ainda mais o tamanho do Divider), nós iremos modificar o caminho percorrido pelo operador, usando o Preferred Path. Crie Preferred Paths Preferred paths não são caminhos “configuráveis”, em vez disso, dará aos nodes associados com o caminho preferido, um peso maior no algoritmo de busca. Isso vai nos afetar, e puxar o operador para o caminho preferido. Clique sobre o ícone Preferred Path na biblioteca para entrar no modo de criação. Crie os dois seguintes Preferred Paths conforme mostrado na imagem abaixo. Preferred paths são unidirecionais e além do mais precisa ser posicionado no layout na ordem correta. Clique com o botão direito do mouse para sair do modo de criação. Execute o Modelo Resete e execute o modelo. Se o seu operador continuar a movimentar para cima e fora do Divider, você pode ou movimentar o Preferred Path ou alterar o Preferred Path weight na janela de propriedades do objeto AStarNavigator. Os Resultados do seu modelo podem variar deste exemplo conforme você posiciona suas barreiras e objetos, o que pode fazer a diferença no cálculo dos caminhos do operador. AStar Navigator Library O AStar é acessado na Biblioteca principal a esquerda: View Menu / Drag-Drop Library Existem 5 tipos de barreiras usada pelo A* Navigator. Estas barreiras modificam a grade usada no algoritmo de busca. Nota: Uma vez que as barreiras são criadas ou modificadas, o modelo precisa ser Resetado para recalcular o node table. Solid Barrier A mais simples das barreiras, a barreira sólida modifica a grade para remover uma área retangular, prevenindo os membros de viajar e (travel members) se movimentarem dentro da barreira. Divider Dividers desconectam os nodes ao longo de seu caminho, prevenindo os travel members de atravessarem o divider. Dividers podem ser modificados na superfície de simulação 3D ao arrastar o ponto final e intermediário. Qualquer número de pontos pode ser adicionado ao divider. One-Way Divider O One-way divider funciona de forma muito similar ao divider, no entanto, travel members são permitidos se movimentarem através do divider na direção das flechas em verde, neste caso, em direção ao topo da página. O one-way dividers pode ser modificado na superfície de simulação em 3D ao arrastar os pontos finais ou intermediários. Qualquer número de pontos podem ser adicionados em um one-way divider. Preferred Path Embora o preferred path não é uma barreira real, ele funciona da mesma forma que as barreiras fazem para modificar a tabela de nodes do A* Navigator. Em vez de modificar os nodes removendo os seus indicadores de direção, o caminho preferencial dá um peso maior a todos os nós associados com o percurso. Este valor de Path Weight pode ser alterado através da janela de propriedades do A * Navigator. O Path Weight tem de ser maior do que 0 e menor que 1, a fim de funcionar adequadamente. Valores acima ou abaixo deste podem causar resultados não intencionais. Os preferred paths podem ser modificados na visualização em 3D, arrastando os pontos do fim ou do meio. Preferred paths são unidirecionais. Qualquer número de pontos pode ser adicionado a um preferred path.
View full article
O artigo "Using Fixed Resource Process Flows" que descreve algumas funções do Fixed Resource Process Flow tem um modelo de exemplo. O exemplo está em anexo e mostra como podemos utilizar do Fixed Resource Process Flow para multiplicar lógicas de fluxo e de trabalho. Esse representa uma área de despacho de produtos onde o produto vem de um estoque transportado pelo empacotador (Packer) e é preparado em uma paleteadora. Depois o produto é levado em lotes pelo empacotador para uma estação e dali ele vai ser despachado pelo carregador (Shipper). A função do Fixed Resource Process Flow facilita a replicação da lógica dessas paleteadoras e dos funcionários envolvidos. Alguns teste como se aumentássemos o número de recursos conseguiríamos suprir melhor a demanda podem ser realizados por esse recurso. Nesse artigo descreveremos o passo a passo desse modelo. A descrição segue no arquivo exemplo FR Flow em anexo.
View full article
One method for creating a 4-station rotating turntable using process flow.
View full article
Top Contributors