FlexSim Knowledge Base
Announcements, articles, and guides to help you take your simulations to the next level.
Sort by:
We normally try not to introduce changes in a bug-fix release that require module developers to recompile their modules using new flexsimcontent headers. However, 17.0.4 included a bug-fix that added a virtual method on the SimpleDataType, which changes the virtual tables of any classes that inherit from that class. Because of this change, you will need to update your flexsimcontent and recompile your modules in order for them to work properly with 17.0.4. We apologize for this inconvenience. We have added a "v17.0" branch to the Module SDK repository that includes the updated flexsimcontent that you will need to compile for 17.0.4.
View full article
The FloWorks module has been updated for FlexSim 2017 Update 1 and FloWorks 17.1.0 is now available (10 April 2017). This release contains new features (see the Release Notes section below). It does not work with the LTS version of FlexSim 2017 (17.0.x). The upgrade version FloWorks 17.0.3 has been released for FlexSim 2017 (17.0.4). It contains all the bug fixes from FloWorks 17.1.0 but it does not contain new features and does not work with FlexSim 2017 Update 1 (17.1.0). NOTE: Due to a change in FlexSim, a new version was released on April 12. If you are using FlexSim 17.0.0 - 17.0.3, please use FloWorks 17.0.2, which is functionally identical. Both versions can be found in the Downloads section of your FlexSim account on the 3rd party modules tab. Bugs may be reported 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. Note that FloWorks 17.1.0 may require an upgraded license, see the Release Notes below. For any questions, please email [email protected]. Release notes FloWorks 17.1.0 (April 11, 2017) This version of FloWorks supports FlexSim version 17.1.0. Added a multi-compartment loading controller to allow multiple tanks on the same Task Executer to be loaded in sequence and/or in parallel. Added the mass flow conveyor, an accumulating version of the Flow Conveyor. Instead of using numeric product IDs, you can now pre-define a product table in your model, with fixed product names and colors. See the Products page in the FloWorks User Manual for more information. As of now, FloWorks license versions will need to be upgraded with every release, similar to your FlexSim license. (Existing users will automatically be requested to upgrade their license using the Request Upgrade button in the FlexSim License Activation window.) All bug fixes included in version 17.0.2, see below. FloWorks 17.0.3 (April 12, 2017) Version 17.0.3 of FloWorks supports FlexSim 2017 LTS versions 17.0.4 and onwards. This version is a re-release of FloWorks 17.0.2 (see below) due to a change from FlexSim 17.0.3 to 17.0.4. Which FlexSim version are you using? Which FloWorks version should you download? 17.0.0, 17.0.1, 17.0.2, 17.0.3 17.0.2 17.0.4 (LTS) 17.0.3 17.1.0 17.1.0 FloWorks 17.0.2 (April 11, 2017) This version of FloWorks supports Flexsim versions 17.0.0 - 17.0.3. Bug fix: Code headers correctly use Object instead of treenode for current and item so pick list items like "Object connected to center port" work again. Bug fix: Utilization no longer reported as -100% for object with maximum flow set to 0 on reset. Bug fix: Flow control no longer breaks down indefinitely once run with one connected object. Bug fix: Fixed exception when copy/pasting object with Flow Arrows enabled. Bug fix: Added missing icons for options in FloWorks submenu of Toolbox. Bug fix: Flow Conveyor now correctly detects changes in ratio of incoming components where total flow stays the same. Bug fix: ChangeTeEdgeSpeed command no longer throws exception when used on Task Executer not attached to Travel Network. Bug fix: Berth and loading point clear their contents on reset, like all Fixed Resources do. Older versions The release notes for older versions of FloWorks (FloWorks 17.0.0 and FloWorks 17.0.1) for FlexSim 2017 can be found here.
View full article
FlexSim 2020 Update 2 Beta is available. (Updated 22 July 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 Updated the run speed slider so you can customize the ratio of display units to real seconds. Moved object properties windows into the context sensitive Properties window (formerly known as Quick Properties). Added a new Quick Properties window that appears next to your cursor when double clicking on an object. Added a pop-out button to the Labels panel of the Properties window. Added a Dark theme for FlexSim's UI. Added Unit edit buttons to more edit fields. Updated the Quick Library to match the current state of collapsed and expanded panels in the main library. Removed the View Settings window and moved all its options into the Properties window. Improved performance of Properties window and various other UIs. Added Object Property tables. Added Object class properties and methods to the Variant class in FlexScript. This removes the need to use .as(Object) if you know the treenode pointed at by a Variant is an Object. Added Object.resetPosition property. Added capture groups to the string.replace() method. Enabled several SQL clauses - NOT, NOT IN, DELETE FROM, INSERT INTO, and LEFT JOIN/LEFT OUTER JOIN. Added ARRAY_VAL() sql function for accessing a value in an array. Added unit conversions to the convert() command - convert(4.5, "ft/min", MODEL_UNITS). Improved performance of loading media by making it multi-threaded. Added Color.fromPalette options to several Set Color popups. Added a pickoption for the Source's On Creation trigger for attaching items to an Object process flow. Disabled the beeping noise when pressing Enter in edit fields. Fixed the Create Object edit mode sometimes not creating objects and just exiting (like when clicking on the library when the User Manual was active). Fixed a draw issue with tables drawing bold text sometimes. Fixed a bug with window docking. Backwards Compatibility Note: the following changes may slightly change the way updated models behave. Changed updatehotlinks() to only repaint the view if it applies a node with a viewsyncupdate attribute of 1. The keywords VALUES an DELETE were added to the sql parser. This means that previous models that use the term VALUES, Values, values, DELETE, etc. will get an error because sql now sees it as a special keyword. If you get this error, just wrap your term with square brackets: [Values] to tell the parser to not interpret it as a sql keyword. Agent Added the Agent module to the Flexsim Installer. Enabled A* walls as static agents. Added a neighbors() function to the Agent API. Fixed social forces for agents not in model space. Fixed bugs with using A* bridges. AGV The join tool now joins in all cases, defaulting to a straight path if it can't solve for a curved path. Conveyor The join tool now joins in all cases, defaulting to a straight conveyor if it can't solve for a curved conveyor. Emulation Added Allen-Bradley connections. People Improved performance of state history tables. Fixed listening to travel events on a person created with the Create Person activity. Process Flow Added new Kinematics activities. Added new Warehousing activities. Added an Enabled checkbox to the Source activities so that you can turn them off. Consolidated Fixed Resource and Task Executer process flow types into a single "Object" type. Added a right-click menu option to the 3D view so a user can right-click on an object and add an Object process flow directly. Added an Object Flow field to the Create Object activity and added a pickoption for attaching items to an instanced flow. Changed double clicking on an activity to be more consistent with the 3D view and now opens the activity's properties window. This window now has a name edit field so you can still easily rename the activity. You can also slow double click to only open the old name edit field. Improved performance of activity properties windows.
View full article
Como criar animações customizadas em máquinas ou equipamentos no FlexSim é o que demonstramos nesse rápido vídeo. Customizamos uma animação no objeto processor, criando a movimentação real de uma maquina envolvedora de filme stretch. Veja o tutorial completo de como executar essa tarefa passo a passo, acessando o Canal Youtube da FlexSim Brasil. Ainda neste artigo, estou anexando uma pasta chamada 'Wrapper' com os arquivos em 3D para os interessados que quiserem criar as customizações acessarem e usarem os arquivos. wrapper.raranimationcreator.fsm
View full article
FlexSim 2022 Update 1 is now available for download. For more in depth discussion and videos of the new features, check out the official software release page: Official Software Release Page - FlexSim 2022 Update 1: Python Connector, Coroutines + more You can view the Release Notes in the online user manual. FlexSim 22.1.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
Neste Tutorial iremos demonstrar como importar um Layout do AutoCad no FlexSim. Desenhos do AutoCAD e outras imagens podem ser usadas como planta baixa para a montagem do modelo de simulação no FlexSim, sendo facilmente importadas usando o Background Drawing Wizard. Isto facilita a construção do modelo de simulação fazendo com que o modelador possa posicionar os objetos de forma rápida e em escala. O Background Drawing Wizard pode ser acessado clicando em: Tools / Visual / Model Background , ou na Biblioteca de Objetos / Visual / Background arrastando o objeto para o plano. O assistente abre uma nova janela, e irá pergunta-lo se você quer importar um desenho CAD ou um arquivo de imagem. Assegure-se que "AutoCAD Drawing" está selecionado e então clique em "Next". A próxima tela irá pedir a você que especifique o caminho do arquivo CAD que você quer usar; busque o arquivo em seu computador e clique em "Open". Veja que você está usando um arquivo .dwg; arquivos .dxf e .dwg podem ser importados para o FlexSim. Clique em "Next" novamente para ir para a próxima tela. Nesta tela você poderá definir detalhes sobre o posicionamento do seu layout no plano de trabalho do FlexSim. Existem três colunas representando os eixos X, Y e Z e três linhas para cada um que correspondem a posição, rotação e tamanho ao longo de cada eixo. Configure a posição para cada eixo em "0" e você verá a posição original do desenho, localizado no canto esquerdo inferior, mostrando exatamente que está no centro do seu modelo. Clique em "Next" para seguir para a próxima tela. Nesta tela você pode customizar qual layers de seu desenho CAD estarão visíveis, e ainda alterar a cor de cada layer. Se você tiver algum recurso no desenho que não é necessário para o modelo de simulação, como por exemplo, uma parede ou uma porta, talvez possa ser uma boa idéia fazer com que estes layers fiquem invisíveis e então o espaço visual não se torne confuso. Clique em "Next" para ir para a tela final. Clique em Finish e pronto! Agora você já pode começar a montar seu modelo utilizando o Layout em AutoCad como planta baixa.
View full article
When working with complex hierarchical models in FlexSim, referencing objects deep inside a structure can quickly become difficult to manage. When not using multiple centre port connections (which gets messy)  users often rely on manually created labels and pointers, but that in turn can  introduce extra work and inconsistency—especially when deciding whether a label should reference a single object or an array. This post describes a small set of user commands, packaged as an auto-installing user library, that automatically builds and maintains hierarchical object references based on each object’s role. The goal is simple: allow users to reference objects using intuitive chains like: current.printerCell.rewinder.turret without manually creating or maintaining those labels. What this does This system automatically: creates label pointers based on object roles (functionname) builds those references up the hierarchy optionally propagates system-level references downward handles single vs multiple objects automatically rebuilds everything on reset so it stays consistent How it is set up The functionality is delivered as: an auto-installing user library containing the commands a template container that includes: a reset trigger that calls: containerReset(current) predefined labels: functionname systemContainer Users can drop this container into their model and begin assigning functionname labels to objects. The rest is handled automatically at reset. Core concept Each object declares its role using a label such as: functionname = "rewinder" From this, the system builds references dynamically using only the tree hierarchy. A key point is that this is not limited to containers. Any object, including standard FlexSim fixed resources such as processors, sources, queues, and sinks, can and should also be given a functionname when you want it to participate in the reference structure. That means this system maps not just structure, but function. How it works 1. Reset seeds the reference map On reset, each relevant container calls: containerReset(current) This starts the process of rebuilding all references from the current tree structure. 2. Objects register themselves upward If an object has a non-empty functionname, it adds a reference to itself on the next relevant level above it. So if a rewinder contains a turret, the rewinder can gain: rewinder.turret 3. Non-functional levels are skipped If an intermediate object has no functionname, the logic recurses through it rather than making it part of the reference chain. That means purely structural levels can exist in the tree without cluttering the reference path. So a structure like: printerCell   └─ layoutContainer        └─ rewinder             └─ turret can still produce: printerCell.rewinder.turret even though layoutContainer exists physically in the tree. 4. System containers propagate references downward If an object has: systemContainer = true then its own functionname is pushed down to all contained objects. So if printerCell is marked as a system container, nested objects can directly reference: current.printerCell This makes it easy for deeply nested components to find the root system they belong to. 5. Repeated roles become arrays automatically If a label already points to one object and a second different object needs to be stored under the same role name, the value is automatically converted into an array. So if one rewinder contains multiple turrets, then: rewinder.turret becomes an array of turret pointers instead of a single pointer. Users do not need to decide this in advance. Works for both machines and factories A useful feature of this approach is that a “system” does not have to mean a single tightly integrated machine. A system can be: one complex interconnected machine acting as a whole one cell within a larger process a factory made up of linked but physically distinct cells As long as those objects live under a meaningful tree structure, the same logic works. A printer cell can be used as a standalone system, then placed inside a larger factory container and reset again to gain one more level of functional context. That makes the approach scalable from machine-level modeling to line-level or factory-level organization. Example model I’m also including an example printer cell model where the labels are not pre-populated. You can: open the model press Reset inspect the created labels on the objects Then you can place that same printer cell inside a factory container, reset again, and inspect the results after the hierarchy changes. That gives a simple way to see the library working in both a standalone and larger-system context. Implementation details Below are the three user commands that make this work. 1. containerReset(<container>) Purpose This is the reset entry point. It does three things: registers the current object upward on its parent if it has a functionname if the current object is a systemContainer, propagates a reference to itself downward through everything beneath it calls the recursive function that builds the rest of the pointer map below it So this command seeds both the upward and downward context, then delegates the deeper hierarchy building. 2. assertReference(<objectToAddReference>, <referenceName>, <referenceObject>) Purpose This utility adds a reference safely and automatically handles whether the label should be: a single pointer or an array of pointers If the label is empty, it stores a single object pointer. If it already points to a different object, it converts the value into an array. If it is already an array, it adds the new object only if it is not already present. This is what removes the need for users to decide ahead of time whether a role is unique or repeated. 3. assertallobjectpointers(<involved>, <container>) Purpose This is the recursive traversal function. It walks downward through the tree under container and looks for objects with a non-empty functionname. When it finds one, it adds a reference on current using that object’s function name. When it encounters an object with no functionname, it does not stop. Instead, it recurses further downward through that object’s children. This is the key to skipping non-functional levels in the tree. In effect, this command says: Starting from the current functional object, keep searching downward until you find the next lower functional objects, then create references to them. That is what allows the reference chain to reflect logical structure rather than every structural level. Why this is useful This approach gives you: cleaner, more readable code no manual label maintenance automatic support for one-or-many references a functional map of the model rather than just a physical tree better reuse of machines, cells, and factory-level groupings Instead of writing search logic, you can work with meaningful chains such as: current.printerCell.rewinder.turret Best practices Use role-based names Set functionname based on what the object does, not its instance name. Good examples: printerCell rewinder turret infeedQueue Less useful examples: object1 machineA testNode Be consistent across models If you reuse systems or templates, keep the same functionname values so code remains portable. Add functionname only where it adds value Not every object needs one. Use it on objects you want to reference directly in logic. Include fixed resources too Do not treat this as a container-only feature. Fixed resources such as processors, sources, queues, and sinks can also participate and often should as these will be the objects your want to setup, load or listen to. Use systemContainer deliberately Mark the objects that represent meaningful system roots. That may be a machine, a cell, a line, or a factory-level grouping. Expect arrays when a role repeats If multiple objects with the same function appear under the same functional parent, that reference will become an array. Keep the hierarchy meaningful Since this works purely from tree structure, the physical organization of the tree should support the logical organization of the model. Use it to remove search logic If you find yourself repeatedly searching for the same kind of object, that is often a sign that it should have a functionname. Summary This approach turns the model hierarchy into a self-maintaining functional reference map. By assigning functionname labels to meaningful objects and rebuilding relationships during reset with containerReset(current), the model can automatically expose useful object references without manual wiring. That works whether the model represents a single complex machine or a larger factory made up of linked but physically distinct cells. The result is cleaner code, easier maintenance, and a more consistent way to navigate hierarchical models.
View full article
The FlexSim Application Models is a collection of example models, techniques, and reusable solutions from the FlexSim Knowledge Base. 
View full article
This article lists off application models of Statistic Examples: Custom Statistic Collectors, Custom Performance Measures, Visualization of Metric in Model view, Other
View full article
FlexSim 25.2.0 includes upgraded third-party licensing libraries which require an updated set of license server files based on Flexnet Publisher version 11.19.8.0 or higher. For background, see Version Compatibility Between Components. In terms of that article, the client library linked to the FlexEnabled application (FlexSim) was upgraded, so all the licensing components further up the list also require an upgrade. Thus, FlexSim has a new set of license server files available. Download the new license server files here:   https://flexs.im/lmtools-download   Suggested instructions:   1. Download the new license server files (.zip archive) and extract to a location right next to your previous license server tools, like in this screenshot:     2. Install the latest anchor service: Browse the newly extracted files to find flexsimserveractutil.exe. Right click and choose Run as Administrator. From the main menu of flexsimserveractutil.exe, go to Tools > Licensing Service > Install Anchor Service. This will install the updated version of the licensing anchor service, compatible with FlexSim 25.2 and higher. For more information, see License Server - FlexNet Licensing Service 64.   3. Start the new lmtools.exe from the new folder. Your FlexSim_License service should be listed there.   4. Update the paths for lmgrd.exe, flexsim.lic, and log.log to point to the new files in the newly extracted folder.     5. After editing the three paths, save the service (button in upper right).   6. Check the service using Windows Services. Make sure that the "log on" tab is still set to use a "local system account".   7. Make sure the new lmgrd.exe and new flexsim.exe are allowed through the firewall. See lmtools - Add Windows Firewall exceptions.   8. Restart the service, either from the Start/Stop/Reread tab of lmtools or from Windows Services.   9. After you confirm everything is working properly, you can safely delete your old folder containing the previous version of FlexSim's license server files.   If you run into any troubles, try stopping your existing FlexSim_License service first, then repeat the above steps.  
View full article
En este vídeo aprenderá a utilizar la propiedad Send To Port de los Objetos 3D para definir el enrutamiento de los Flowitems. Para más videos tutoriales pueden suscribirse al canal de YouTube de FlexSim Andina y acceder a nuestra lista de reproducción de FlexTips.
View full article
FlexSim 2025 Update 1 is now available for download. You can view the Release Notes in the online user manual. FlexSim 25.1.0 Release Notes For more in-depth discussion of the new features, check out the official software release page: FlexSim 2025 Update 1: Change Object Class, Exports, AGVs, Timed Travel, and more If you have bug reports or other feedback on the software, please create a new post in the Bug Report space or Development space.
View full article
FloWorks 24.0.5 is now available (27 August 2024). This version of FloWorks is intended for use with FlexSim 2024. If you are using FloWorks with FlexSim 2023 (LTS), please use FloWorks version 23.0.5 (LTS). If you are using FloWorks with FlexSim 2023 Update 2, please use FloWorks version 23.2.2. For FlexSim 2024 Update 1 or FlexSim 2024 Update 2, please use the FloWorks version starting with 24.1 or 24.2, respectively. 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 24.0.5 (27 August 2024) Bug fix: Version 24.0.4 installer contained an incorrect module (.t) file Bug fix: Removed ProcessFlow activities which are only available from 24.1 from the drag/drop library FloWorks 24.0.4 (6 August 2024) Bug fix: FlowToItem was not behaving correctly when an item buffer was used. Bug fix: Fixed a timing issue when FlowToItem got starved while an item was being released. Bug fix: Fixed some rounding issues in event scheduling. Bug fix: Fixed Quick Properties product combo when product has been deleted. Bug fix: Missing states 19 and 20 added to state profile. Bug fix: Fixed several issues in FlowConveyor visualization. Bug fix: Invalid curved FlowConveyor animation fixed. Bug fix: Invalid initial content for Segmented Pipe fixed. Bug fix: "FlowConveyor content changes are not allowed" error (and subsequent exception) fixed. Improvment: Curved conveyor now also supports FlowConveyor length property. Improvement: Tank label hidden in FlowItems (FlowVessel and FlowTruck). Improvement: Cleaned up the variables in the FlowItems' model tree. Improvement: Tank size/position and max content changed for FlowTruck, also as FlowTaskExecuter. Improvement: Slight optimization in preventing unnecessary FlowControl events. Improvement: Added SetMaxContent for FlowToItem and improved handling for Flow Tanks. FloWorks 24.0.3 (17 April 2024) QuickProperties behavior improved. Fixed invalid manual references. Fixed missing code completion documentation FloWorks 24.0.2 (6 March 2024) Made activity path references in warning message more clear Restore missing Flow Trigger Process Flow activities to the library Fixed Tank level indicator settings for some tank shapes Add Accumulating checkbox to the Conveyor properties FloWorks 24.0.1 (5 February 2024) Added vertical splitter to Mixer recipe editor and other small layout improvements. Fixed missing icons in statistics panel pin menus. Flow Polygon Tank property panels fixed and documentation updated. Added "Fill Sideways" property for Flow Polygon Tank. IsMultiProduct setting on Flow Tank is now a proper property. Renamed Flow Tank shapes from Cylindric and Rectangular to Tank and Container, respectively. Fixed "Copy Production Plan" button in Flow To Item properties. Some objects were not correctly reset. ItemToFlow statistics were accessible through .output instead of .input . Breaking changes: Deprecated the input.triggerAmount , input.triggerInterval , output.triggerAmount , and output.triggerInterval properties. FlowObject.stats.input and FlowObject.stats.output now return a Tracked Variable. Cylindric level indicator now expects size of bounding box instead of center and radius. The update script will try to convert these for you. FloWorks 24.0.0 (14 January 2024) All bug fixes in FloWorks 23.0.5 below. Improved warning and error messages throughout Fixed rounding issue in Mass Flow Conveyor FloWorks 23.2.2 All bug fixes in FloWorks 23.0.5 below. FloWorks 23.2.1 (7 November 2023) All bug fixes in FloWorks 23.0.4 below. FloWorks 23.2.0 (10 August 2023) All bug fixes in FloWorks 23.0.3 below. FloWorks 23.1.3 All bug fixes in FloWorks 23.0.5 below. FloWorks 23.1.2 (7 November 2023) All bug fixes in FloWorks 23.0.4 below. FloWorks 23.1.1 (26 July 2023) 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.5 Rounding error mode added to Flow control. Improved error message when new content exceeds max content Added ratios function to FlowComposition Error message doesn't show time when stepping, but shows it when running Bug fix: Flow Pipe "Calculate Max. Content From Size" was not working Bug fix: Statistics nodes content, input and output checked during rate precalculation Bug fix: Flow control group panel Statistics renamed to Tracked Variables Bug fix: FlowComposition interface fixed Bug fix: GetProductTypeAmount function fixed for new flow conveyor Bug fix: Tank full event is not scheduled in some cases Bug fix: Flow rates are not always converted when using non-standard units Bug fix: FlowPipe max content update in QuickProperties also updates the current content Bug fix: Set flow rate activity does not always set both in and outflow rate Bug fix: Level indicator is not allowed to be set to 0 Bug fix: Several Segmented Pipe draw issues fixed Bug fix: Names of FloWorks ProcessFlow activities were made more consistent with FlexSim style Bug fix: Set Product Type activity shows list of defined products when using a product table Bug fix: Name dropdown of ProcessFlow statistics popup also working for FloWorks activities Bug fix: Fixed On Full / On Empty event sometimes firing twice for the same tank top / bottom FloWorks 23.0.4 (7 November 2023) Bug fix: Fixed several errors in Flow Conveyor content calculations Bug fix: Additional checks on input / output and triggers when rounding content Backwards Compatibility Note: The following change may change the way updated models behave. Bug fix: Fixed an issue with binding of interface classes. This sometimes caused replications to get initialized incorrectly in an existing FlexSim experimenter instance. FloWorks 23.0.3 (26 July 2023) 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 23.0.1 (16 March 2023) All bug fixes in FloWorks 22.0.5 below. FloWorks 23.0.0 (6 January 2023) Improvement: FlowConveyor snapping improved between conveyors. Improvement: Made FlowConveyor properties available in property tables. Improvement: Extra FlowConveyor options added, such as virtual length support. Improvement: Compare Properties enabled for all active FloWorks objects. Improvement: Toolbox items "Level Triggered Event" and "Time Series" support disabled icon. Improvement: MassFlowConveyor supports stacked products. All bug fixes in FloWorks 22.0.4 below (please note the Known Issues information there).
View full article
En este video aprenderán a crear diferentes flujos de pacientes en un centro de salud en base a la información almacenada en una etiqueta. Para más videos tutoriales pueden suscribirse al canal de YouTube de FlexSim Andina y acceder a nuestra lista de reproducción de FlexTips HC.
View full article
Would you like to remove your data from FlexSim? Here are two options: 1. Remove all data from FlexSim and Autodesk If you would like to remove all of your data from both FlexSim and Autodesk, please use this link. This will initiate a delete request across our systems to ensure that your data is removed in accordance with Autodesk's data privacy standards. 2. Remove specific data from FlexSim If you would like to have some or all of your data removed from FlexSim properties, please submit your request via email to [email protected] and we will complete your request. Note: We may retain certain data for legal and internal business purposes, such as fraud prevention, in accordance with applicable laws.
View full article
Requirements FlexSim 25.0 or later (found in the downloads page) NVIDIA's Omniverse USD Composer Background Historically, users have used USD Stages in FlexSim to create a live connection with an Omniverse application to be able to simulate animations in Omniverse. However, this relies on a live connection between FlexSim and Omniverse. Sometimes this type of connection is sub-optimal for a user's situation. This article will explain a workflow for writing animation data to a USD file to play in an Omniverse application independent from FlexSim. Disclaimer All the data we record during this example is meant to help us write meaningful data into a .usd file so we can generate an animation in USD Composer. When I say "animation", I mean positional and rotational data along with showing/hiding flowitems. If you want to see Operator Skeletal Animations, I'll post a similar article with a few tweaks later to showcase how to do that using USD Composer's Sequencer, which uses Tracks and Asset Clips to handle small-scale skeletal animations. Example Model I've built a sample model demonstrating the changes to the USD API and how to use them. This example model is just one way to use the API -- there are other ways that users are free to explore. example_model.zip Explaining the Model When you open the model, you'll see a few different windowpanes. In the top-right corner, you'll see a Global Table. If you reset the model, you'll see column headings appear. Each column is a different piece of data we'll be writing to the USD Stage. Each row is a different entry of data to write. In the center views, you'll have a 3D view on the left side and a Process Flow (PF) on the right. At the bottom, there's a script window with a few lines of code. Those lines of code are User Commands I defined to summarize the functionality they encapsulate. The 3D View In the 3D view, you should see some queues, processors, operators, and conveyors. This is a simple workflow where items come into the queues, operators move them into the processors for processing, and then the operators send them down the conveyor lines. With this model, we'll demonstrate (1) operator movement and (2) flowitem movement on conveyors. Setting Up the USD Stage There should be a "USD Stage1" present in the model. If you click on the USD Stage, its properties will appear on the right-side of the screen. In it, you'll see a blank edit field. This is where you put the path to the USD file you want to work on have appear. If you want to save a fresh one, while the edit field is blank, click the "Save" icon next to it. Once you select where you want to place the file, name it, and close the file explorer popup, the edit field should populate with the full path to the .usd file. For more info, you can check out the docs page on the USD Stage object. Viewing the Model in USD Composer Once you've saved your USD Stage, you can open the .usd file in any software that can view .usd files. For this demonstration, we'll be using NVIDIA's Omniverse application which as a USD Composer module. The Process Flow Open up the Process Flow tab to view the simple setup. I'll walk through each part of the PF to give you an idea of how it works. Operator Movement This block of PF is in charge of recording information about Operator positions and rotations. It records information whenever an Operator starts and ends a task. You can expound on this concept and record information when specific triggers or events happen, but for this example I kept it simple and record when any task happens. User Command: RecordInfoToTable Within the "Record Info" Activity, it calls a User Command to record information to the table. This function simply takes a token as the first parameter. This is what the code looks like: Token token = param(1); // Setup row for this iteration Table animInfo = Table("AnimationInfo"); animInfo.addRow(); int curRow = animInfo.numRows; token.labels.assert("Row", 1).value = curRow; animInfo[curRow]["Object"] = token.operator; animInfo[curRow]["AnimTime"] = Model.time; animInfo[curRow]["TaskType"] = token.taskType; // Record positional and rotational data Object operator = token.operator.as(Object); animInfo[curRow]["PosX"] = operator.location.x; animInfo[curRow]["PosY"] = operator.location.y; animInfo[curRow]["PosZ"] = operator.location.z; double Z = Math.fmod(operator.rotation.z, 360); if (Z < 0) Z += 360; animInfo[curRow]["RotX"] = operator.rotation.x; animInfo[curRow]["RotY"] = operator.rotation.y; animInfo[curRow]["RotZ"] = Z; To summarize: Start by assigning the value of the token (parameter 1) to the local variable "token" We get a reference to the Global Table (AnimationInfo) and add a row for the data we're about to write Record (1) which operator this data is for, (2) what time this is happening, (3) and the type of task they're performing. The task type isn't as important - it's for finer details and debugging if necessary. Then we record the positional data of the operator. We previously saved the "operator" label onto the token, so we can use that and "cast" it to be an Object. We do this because the Object class has a "location" property which holds the x, y, z coordinates of the object. Lastly, we do the same thing with "rotation", except we need to bound the rotation to be a positive number between 0 and 360. To do this, we call Math.fmod() to get the reminder after dividing by 360. If the value is negative, we add 360 to get a positive value. Running the Model If you reset and run the model to the stop time at 200, you'll see the Global Table populate with data. There should be valid data for all the columns except the last 3. The "BoxNum", "EntryConveyor", and "Show" columns are for recording flowitem data. We'll discuss that later. Once you've got data in the table, we can run the User Commands in the script window at the bottom of the screen. They should be: ClearTimestampedData(); return WriteToUsd(); The first one "ClearTimestampedData()" is used to loop through the operators and clear all their time-sampled data. We do this so no old data is used if you change things in the FlexSim model and export new data. The second one "WriteToUsd()" is what reads the Global Table line by line, defines and finds prims, writes time-sampled data to them, and saves the information to the .usd file. View the Animation in USD Composer After running these scripts, you should get a prompt in USD Composer to "Fetch Changes". Fetch the changes. Then, open the Timeline feature (Window > Animation > Timeline). This opens an animation timeline at the bottom of the screen. You can save predefined start and end times for the whole stage using the Flexscript API if you choose. Otherwise, you can change the settings manually in USD Composer. (I've color-coded the image below to help explain the tool.) On the far-left (green circle) is the starting frame of the animation while the far-right (red circle) is the ending frame. The inner numbers allow you to set specific sections of the animation to play. If not set, it will play the whole animation. The top-right value and blue "scrubber" (blue circle and arrow) denote the current frame. When you hit your space-bar (or click the "Play" button), that scrubber should move. The value next to FPS (yellow circle) represents the "Frames per Second" the animation runs at. If you want it to play faster, then you can set it to a higher FPS. Note that this example model is built assuming 24 FPS. There is a User Command "TimeToFPS" that simply multiples the given Model time by a desired FPS, defaulting to 24 FPS. If you want to change that rate, you can set it in the code. Now that we've got the animation timeline setup, hit play and watch the animation. You may need to adjust the animation range to be 850 to 4800 so you can see the movements. Like I mentioned in the Disclaimer, if you want to see skeletal animations in the Operator, I'll have another article explaining how to add that functionality. Add Flowitem Movement on the Conveyor Let's go back to FlexSim and check out the Process Flow again. I have two other containers labeled "Box Movement: Time-based" and "Box Movement: DPs". These flows represent two different ways to record this data: either based on a time interval or based on Decision Point positions. The time-based way can be more accurate, but it adds much more time-sample data than the DP version. Choose one of the versions to test out, open the properties of their Source, and then Enable it. If you reset and run the model, you'll start seeing entries for Flowitems. They'll utilize the last 3 columns of the Global Table to keep track of (1) the Box# they are, (2) the Conveyor they entered on, and (3) whether or not to "show" their prim. Click here to learn more about prim visibility. Run the scripts to export and save the model. Then, fetch and view the changes in USD Composer. Conclusion We've covered how to use some of the new features of the USD API in FlexSim 25.0 to create stand-alone animations in .usd files. We used FlexSim to record and export data to .usd files to then display in USD Composer. You can now play a standalone animation in USD Composer without a live connection to FlexSim.
View full article
FlexSim 2025 Beta is now available. FlexSim 25.0.0 Release Notes To get the beta, log in to your account at https://account.flexsim.com, then go to the Downloads section, and click on More Versions. It will be at the top of the list. The More Versions button does not appear when logged in as a guest account. The beta is available only to licensed accounts and accounts that have a license shared with them. Learn more about downloading the best version of FlexSim for your license here. If you have bug reports or other feedback on the software, please create a new post in the Bug Report space or Development space.
View full article
When presenting and/or demonstrating a FlexSim model, it is often useful to have the model running in a loop that uses a flypath for a motion path. That way, you can more easily talk to the model while it runs, or leave it running unattended on repeat. The model below provides the code and settings needed to do that. In order to add this capability to your model, you will need to add a few things: A user event called EndTime. This setting will affect how long the model runs before resetting and running again. The First Event Time setting is where you can enter the number of seconds before this happens. The Event Code setting is where you can add custom code from the attached example model, found in the "event" tab. Model trigger code within OnRunStart and OnRunStop. This code can be found in the attached example model. A global variable called demo_mode. This can be set to 1 to enable the demo mode functionality, or set to 0 to disable it. Running the model with demo mode disabled is the same as how the model normally functions. Thanks to @Phil BoBo for helping to develop a solution for this. Also, the model requires FlexSim 23.2 or newer to work properly. presentation_demo_mode.fsm
View full article
27 July: Bug fix releases 22.0.7, 23.0.3 and 23.0.1 are now available. FloWorks 23.1.0 is now available (12 April 2023). This version of FloWorks is intended for use with FlexSim 2023 Update 1. If you are using FloWorks with FlexSim 2022, please use FloWorks version 22.0.6. If you are using FloWorks with FlexSim 2023 (LTS) please use FloWorks version 23.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 View the full release notes in the online documentation. 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
ContinuousUtilization_4.fsm In the attached model, you'll find a Utilization vs Time chart driven by a Statistics Collector and a Process Flow. This article is an alternative approach to the chart shown here: https://answers.flexsim.com/content/kbentry/158947/utilization-vs-time-statistics-collector.html Thanks @Felix Möhlmann for putting that article together. The concept in this model is very similar, but this is a different approach. There are pros and cons to each method. This method offers some performance improvements at the cost of writing more FlexScript code. This method also doesn't handle Warmup time, where the other method does. The general idea in this model is to keep a history of state changes for the previous hour (or other time interval). The history adds new info as states continue to change and drops old info as it "expires" by being older that the time interval. I chose to use a Bundle (stored on a token label) for the history. Bundles are optimized to add data to the end. If a bundle is paged (they are by default), then they are also optimized to remove data from the beginning. [Begin Technical Discussion - TLDR; Bundles are fast at removing the first row and adding new rows] A paged bundle keeps blocks of memory (pages) for a certain number of rows. If a page fills up, it allocates another page. It keeps track of the location in the page for the next entry. Similarly, it keeps track of the location of the first entry on the start page. If you remove the first row, that start location is moved forward on the page. If the start location gets to the end of a page, that page is dropped and the start location moves to the next page. [End Technical Discussion] The Process Flow maintains the history table. Whenever the object's state changes, the Process Flow adds a new entry to the history table. This part is straightforward. The tricky part is properly "expiring" the data. To do this, a second set of tokens wait for the last of the oldest data to expire. When the oldest set of data should expire, the tokens remove any rows that are too old and then wait for the next oldest row. If there are no expired rows, the tokens wait for one "time interval" and then check again. This is because if there is no expired data, data can't expire for at least one time interval. In this way, the history table is always kept up to date. The Statistics Collector is configured to post-process the history table. It calculates the total utilization, including the state that the object is currently in, as well as the state being "phased out" from the history table. The Statistics Collector can do this calculation at any point in the model. So the sampling interval (called Resolution in the model) is independent from the time window.
View full article
Top Contributors