Difference between revisions of "Tutorial: Advanced System Dynamics Modelling"

From End-User Wiki
Jump to: navigation, search
m (Is output location changed from additional information to equation tab)
 
(22 intermediate revisions by the same user not shown)
Line 1: Line 1:
System dynamics modelling in Simantics is another free domain specific modelling tool that is included into the basic installation. This tutorial introduces the basic features of the system dynamcics modelling tools.
 
 
 
 
 
In this tutorial, we are going to bild a work model with two projects and shared workforce. Both the workforce and a separate project (work) are going to be created as modules, so they can be reused several times. Actually the model doesn't limit the number of projects at all.
 
In this tutorial, we are going to bild a work model with two projects and shared workforce. Both the workforce and a separate project (work) are going to be created as modules, so they can be reused several times. Actually the model doesn't limit the number of projects at all.
  
Line 11: Line 7:
 
Then create two new modules to your model. Right-click on the Modules folder and select New->Module.  
 
Then create two new modules to your model. Right-click on the Modules folder and select New->Module.  
  
Name your model WorkModel and modules Workforce and Work. You can rename them by right-clicking on the item on the model browser and selecting Rename.  
+
Name your model WorkModel and modules WorkforceModule and WorkModule. You can rename them by right-clicking on the item on the model browser and selecting Rename.  
  
 
{|
 
{|
Line 24: Line 20:
 
We will use a top-down approach in our model, so first we will make a simple model configuration with our modules. Open our model configuration by double-clicking Configuration in your model browser.  
 
We will use a top-down approach in our model, so first we will make a simple model configuration with our modules. Open our model configuration by double-clicking Configuration in your model browser.  
  
Drag one Workforce module and one Work module from your model browser to the WorkModel diagram. The modules are automatically named with a suffix number. Rename the modules to Workforce and Work1. You can rename objects on the diagram by double-clicking them or selecting them with one click and renaming them on the properties view below the diagram.
+
Drag one WorkforceModule and one WorkModule from your model browser to the WorkModel diagram. The modules are automatically named with a suffix number. Rename the modules to Workforce and Work1. You can rename objects on the diagram by double-clicking them or selecting them with one click and renaming them on the properties view below the diagram.
 
<br style="clear: both" />
 
<br style="clear: both" />
  
 
[[File:ConfigurationStart.png|right|frame|Workforce and Work modules, first inputs and connections]]
 
[[File:ConfigurationStart.png|right|frame|Workforce and Work modules, first inputs and connections]]
When the modules are on the diagram, we should think what values we would like to get from the modules and what values would we like to use in the modules.  
+
When the modules are on the diagram, we should think what values we would like to get from the modules and what values we would like to use in the modules.  
  
Workforce needs to know, how much work is required and it should give provide information on how much work can be done. To provide the information on how much work can be done, we need an Input variable. Variables can be dragged to the diagram from Symbols view or by using [[System Dynamics Modelling#Shortcut and control keys|shortcut keys]] (Shift+I for Input variable). Drag an input variable to the diagram and name it TotalPossibleWorkingSpeed.
+
Workforce needs to know, how much work is required and it should provide information on how much work can be done. To provide the information on how much work can be done, we need an Input variable. Variables can be dragged to the diagram from Symbols view or by using [[System Dynamics Modelling#Shortcut and control keys|shortcut keys]] (Shift+I for Input variable). Drag an input variable to the diagram and name it TotalPossibleWorkingSpeed.
  
 
Work module on the other hand provides information on how much work is required in it and it needs to know when the work has to be ready. Create an input variable RequiredWorkingSpeed1 and an Auxiliary variable Work1CompletionTime and place all variables like in the picture on the right.  
 
Work module on the other hand provides information on how much work is required in it and it needs to know when the work has to be ready. Create an input variable RequiredWorkingSpeed1 and an Auxiliary variable Work1CompletionTime and place all variables like in the picture on the right.  
Line 53: Line 49:
 
Now you have used all the basic components and connections. From now on the instructions will be a more simplified.
 
Now you have used all the basic components and connections. From now on the instructions will be a more simplified.
  
Next we will create four Auxiliary variables: TimeToAllocateResources, WorkforceRequired, Productivity and PossibleWorkingSpeed. Place and connect them accordign to the picture on the right.
+
Next we will create four Auxiliary variables: TimeToAllocateResources, WorkforceRequired, Productivity and PossibleWorkingSpeed. Place and connect them according to the picture on the right.
  
To be able to simulate the model, all variables must have valid equations. To configure an equation, select a variable. Variables properties are shown in the Equation view and you can input the required equations in the text fields. For some variables, you need to change the type of the variable to Parameter. The change is made from the pull-down menu Type. You can copy the equations directly from here or type them manually. Variables connected to the selected variable are shown in the Variables list. To speed up typing, you can double click on a variable name and it will be inserted to the equation.
+
To be able to simulate the model, all variables must have valid equations. To configure an equation, select a variable. Variable's properties are shown in the Property view and you can input the required equations in the text fields. You can copy the equations directly from here or type them manually. Variables connected to the selected variable are shown in the Variables list. To speed up typing, you can double click on a variable name and it will be inserted to the equation.
  
 
WorkforceStock <br />
 
WorkforceStock <br />
Line 64: Line 60:
  
 
TimeToAllocateResources <br />
 
TimeToAllocateResources <br />
Type: Parameter <br />
 
 
= 2
 
= 2
  
 
Productivity <br />
 
Productivity <br />
Type: Parameter <br />
 
 
= 1
 
= 1
 
  
 
PossibleWorkingSpeed <br />
 
PossibleWorkingSpeed <br />
= WorkforceStock * Productivity
+
= WorkforceStock * Productivity<br />
 
Is Output
 
Is Output
  
Variables can be set as output by selecting Is Output option from Additional information tab of the variable.  
+
Variables can be set as output by selecting Is Output option from the Equation tab.  
  
 
<br style="clear: both" />
 
<br style="clear: both" />
Line 92: Line 85:
  
 
[[File:WorkStocks.png|right|frame|Basic work with errors]]
 
[[File:WorkStocks.png|right|frame|Basic work with errors]]
Open Work module by selecting it from the WorkModel diagram, right-clicking it and selecting Show Module. Alternatively you can double click Work on the model browser.
+
Open Work1 module by selecting it from the WorkModel diagram, right-clicking it and selecting Show Module. Alternatively you can double click Work1 on the model browser.
  
 
Create the basic flow of work with stocks and flows like in the picture on the right.  
 
Create the basic flow of work with stocks and flows like in the picture on the right.  
Line 102: Line 95:
  
 
[[File:ProjectIsReady.png|right|frame|Smoothener for work is done]]
 
[[File:ProjectIsReady.png|right|frame|Smoothener for work is done]]
Work needs to be stopped when the project is ready. Since the simulator might face some difficulties to determine the projects readyness when project is almost ready, we need to implement some smoothing to the limit. OpenModelica doesn't yet have a builtin function for smoothing, so we need to implement our own.
+
Work needs to be stopped when the project is ready. Since the simulator might face some difficulties to determine the projects readyness when project is almost ready, we need to implement some smoothing to the limit. OpenModelica doesn't yet have a builtin function for smoothing, so we need to implement our own. Create variables and connections according to the picture on the right.
  
 
Use the following equations for variables:
 
Use the following equations for variables:
Line 112: Line 105:
 
= (xidz(WorkDone, ProjectWorkAmount, 0.0) - ProjectIsReady) / 0.08
 
= (xidz(WorkDone, ProjectWorkAmount, 0.0) - ProjectIsReady) / 0.08
  
xidz is short for function X if devided by zero.
+
xidz is short for function X if devided by zero. This means that the simulation calculates ''WorkDone / ProjectWorkAmount''. If ProjectWorkAmount is zero, the result is the third argument ''0.0''.
  
 
[[File:ProjectWorkAmount.png|right|frame|ProjectWorkAmount input variable]]
 
[[File:ProjectWorkAmount.png|right|frame|ProjectWorkAmount input variable]]
Line 129: Line 122:
  
 
WorkQuality<br />
 
WorkQuality<br />
Type: Parameter<br />
 
 
= 0.9
 
= 0.9
  
Line 137: Line 129:
 
Lookup table: {{0,5},{0.5,3},{1,0.5},{2,0.5}}
 
Lookup table: {{0,5},{0.5,3},{1,0.5},{2,0.5}}
  
WithLookup is a variable type where the value is interpolated from a 2-dimensional table (Lookup table) using the value determined in the "With Lookup" field.
+
WithLookup is a variable type where the value is interpolated from a 2-dimensional table (Lookup table) using the value determined in the "With Lookup" field. Type can be changed from the drop-down menu Type.
  
 
<br style="clear: both" />
 
<br style="clear: both" />
  
[[File:WorkAllocation.png|right|frame|Basic work with errors]]
+
[[File:WorkAllocation.png|right|frame|WorkAllocation and RequiredWorkingSpeed]]
To calculate our own need of workforce we need WorkCompletionTime input variable and the following auxliary variables:
+
To calculate our own need for workforce we need to create and connect WorkCompletionTime input variable and the following auxliary variables:
  
 
RequiredWorkingSpeed <br />
 
RequiredWorkingSpeed <br />
= if ProjectIsReady < 1 then xidz(WorkToDo, TimeToDeadline, MaximumWorkingSpeed) else 0
+
= if ProjectIsReady < 1 then xidz(WorkToDo, TimeToDeadline, MaximumWorkingSpeed) else 0<br />
 
Is Output
 
Is Output
  
 
MaximumWorkingSpeed <br />
 
MaximumWorkingSpeed <br />
Type: Parameter <br />
 
 
= 500
 
= 500
  
Line 160: Line 151:
 
We need to decide how the workforce is allocated between all the work modules that are using the same workforce. For that we need to know how much work can be done and how much workforce other works require.  
 
We need to decide how the workforce is allocated between all the work modules that are using the same workforce. For that we need to know how much work can be done and how much workforce other works require.  
  
Create two Inputs, RequiredWorkingSpeedTotalInput and PossibleWorkingSpeedInput, and an auxiliary variable WorkAllocation.
+
Create two Inputs, RequiredWorkingSpeedTotalInput and PossibleWorkingSpeedInput, and an auxiliary variable WorkAllocation. Connect the variables like int the picture.
  
 
WorkAllocation<br />
 
WorkAllocation<br />
Line 182: Line 173:
 
===Connecting modules===
 
===Connecting modules===
  
Our modules are complete. Let's get back to the WorkModel Configuration. Set Work1CompletionTime as Parameter and give it value 10.
+
Our modules are complete. Let's get back to the WorkModel Configuration.  
 +
 
 +
Set Work1CompletionTime to 10.
  
 
[[File:ModuleConnections1.png|right|frame|Module input connections]]
 
[[File:ModuleConnections1.png|right|frame|Module input connections]]
Connections between modules are made in the properties of the module. Select Work and open tab Inputs from the properties. The table lists all input variables in the module that are available. Clicking on the Refers to output column will open a drop-down menu that shows all available variables that are connected to the module. By selecting a variable, you connect that variable to the input.
+
Connections between modules are made in the properties of the module. Select Work1 and open tab Inputs from the properties. The table lists all input variables in the module that are available. Clicking on the Refers to output column will open a drop-down menu that shows all available variables that are connected to the module. By selecting a variable, you connect that variable to the input.
 
<br style="clear: both" />
 
<br style="clear: both" />
  
 +
[[File:RequiredWorkingSpeed1Connection.png|right|thumb|Connection from RequiredWorkingSpeed to Work1]]
 
[[File:ModuleConnections2.png|right|frame|Module input connections]]
 
[[File:ModuleConnections2.png|right|frame|Module input connections]]
Work1 need also information on how much working speed is required by all works. Since Work1 is the only work, create a dependency connection from RequiredWorkingSpeed1 and connect it to RequiredWorkingSpeedTotalInput.  
+
Work1 need also information on how much working speed is required by all works. Since Work1 is the only work, create a dependency connection from RequiredWorkingSpeed1 to Work1 and in Work1's properties connect it to RequiredWorkingSpeedTotalInput.  
 
<br style="clear: both" />
 
<br style="clear: both" />
  
In Outputs tab, make the only possible connection.
+
In Outputs tab, make the only possible connection: from RequiredWorkingSpeed to RequiredWorkingSpeed1.
  
Workforce module has only one input and one output. Create the only possible connections.
+
Workforce module has only one input and one output. Create the only possible connections:<br />
 +
(Inputs) RequiredWorkingSpeedInput -> RequiredWorkingSpeed1<br />
 +
(Outputs) PossibleWorkingSpeed -> TotalPossibleWorkingSpeed
  
 
Now your model is ready for simulation!
 
Now your model is ready for simulation!
Line 211: Line 207:
 
When the progress indicator disappears, the simulation is complete.
 
When the progress indicator disappears, the simulation is complete.
  
Now you can select a variable and see its simulation results in the trend view. For example WorkDone variable in Work1 module will give the following graph.
+
If the Console view pops up and shows an error "Error: Too few equations, underdetermined system. The model has X equation(s) and Y variable(s)", the simulation has failed. The reason might be that you forgot to assign an equation to some variable or some connection in modules. See through all the variables, write the missing equation and simulate again.
 +
 
 +
After the simulation is succesfully run, you can select a variable and see its simulation results in the trend view. For example WorkDone variable in Work1 module will give the following graph.
  
 
[[File:FirstSimulation.png]]
 
[[File:FirstSimulation.png]]
  
 
<br style="clear: both" />
 
<br style="clear: both" />
 
  
 
===Adding modules===
 
===Adding modules===
Line 234: Line 231:
  
 
Work2CompletionTime<br />
 
Work2CompletionTime<br />
Type: Parameter<br />
 
 
= 13
 
= 13
  
 
Work2Amount<br />
 
Work2Amount<br />
Type: Parameter<br />
 
 
= 800
 
= 800
  
Line 244: Line 239:
 
= RequiredWorkingSpeed1 + RequiredWorkingSpeed2
 
= RequiredWorkingSpeed1 + RequiredWorkingSpeed2
  
Make the connections shown in the picture and connect the inputs and outputs to the modules.
+
Update connections to match connections shown in the picture and connect the inputs and outputs to the modules.
 +
 
 +
Workforce<br />
 +
RequiredWorkingSpeedInput -> RequiredWorkingSpeedTotal
  
 
Work1 Inputs<br />
 
Work1 Inputs<br />
Line 255: Line 253:
 
[[File:Module2Inputs.png]]
 
[[File:Module2Inputs.png]]
  
 +
 +
When all the connections are made, you can simulate the model again. Now you have model with two work modules. Select variables from both modules in model browser to display them in trend view.
 +
 +
[[File:SecondSimulation.png]]
 +
 +
<br style="clear: both" />
 +
 +
<!---
 +
Operating interfaces not supported right now
 +
===Creating an Operating Interface===
 +
 +
[[File:NewOperatingUI.png|right|frame|New Operating UI]]
 +
To use the model and adjust its parameters without seeing the actual model, we can use Operating interfaces. Create a new operating interface by right-clicking Operating interfaces on the model browser and selecting New -> Operating UI. Double click the created operating ui to open it.
 +
 +
Switch to Symbols view. WidgetLibrary shows all the widgets that can be used when creating an operating interface. We will create a simple interface with a trend and two sliders.
 
<br style="clear: both" />
 
<br style="clear: both" />
 +
 +
[[File:FirstOUI.png|right|frame|Operating UI with a trend and two sliders]]
 +
Drag a trend to the diagram. Adjust the size of the trend so that it is larger. The size of the elements can be adjusted by first selecting the element and then draggign from the lower right corner of the element.
 +
 +
Then drag two sliders to the right side of the trend.
 +
 +
Now you should have an operating user interface that looks something like the picture on the right.
 +
 +
To be able to use the interface, we need to configure the elements and connect them to the actual variables on the model. First let's configure the sliders.
 +
 +
We are going to adjust the time when Work1 and Work2 are ready. Our simulation time ranges from 0 to 24, so that is the range that we are going to use in our sliders. Select one of the sliders. The Property view shows all the different properties that can be configured in the element. Do the following settings for both sliders:
 +
 +
[[File:SliderProperties.png|none|frame|Slider properties]]
 +
 +
Then select the trend element. Set its Title to "Work1 and Work2" and Y-Axis Label to "Work Done"
 +
 +
Now we need to connect the actual variables to the elements. From Model Browser, drag Work1CompletionTime to the first slider and Work2CompletionTime to the second slider.
 +
 +
Then from each of the Work module, drag WorkDone to the trend element.
 +
 +
Activate an experiment by double clicking it, activate the Operating UI by clicking it and switch it to operating mode with the switch button [[File:OperatingModeSwitch.png]] on the main toolbar.
 +
 +
Run a simulation. The trend element should show the results of the simulation. Adjust the completion times from the sliders and simulate again.
 +
 +
[[File:OperatingUI.png|none|frame|Ready Operating interface]]
 +
 +
<br style="clear: both" />
 +
 +
-->
 +
  
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]

Latest revision as of 09:05, 3 December 2013

In this tutorial, we are going to bild a work model with two projects and shared workforce. Both the workforce and a separate project (work) are going to be created as modules, so they can be reused several times. Actually the model doesn't limit the number of projects at all.

Creating model and modules

Let's start by creating the work model and the needed modules. First create a new model by right-clicking on the model browser and selecting New->Model. Alternatively you can select File->New Model from the main menu.

Then create two new modules to your model. Right-click on the Modules folder and select New->Module.

Name your model WorkModel and modules WorkforceModule and WorkModule. You can rename them by right-clicking on the item on the model browser and selecting Rename.

Creating a new model
Creating a new module
Model after renaming

Initial configuration

Workforce and Work modules

We will use a top-down approach in our model, so first we will make a simple model configuration with our modules. Open our model configuration by double-clicking Configuration in your model browser.

Drag one WorkforceModule and one WorkModule from your model browser to the WorkModel diagram. The modules are automatically named with a suffix number. Rename the modules to Workforce and Work1. You can rename objects on the diagram by double-clicking them or selecting them with one click and renaming them on the properties view below the diagram.

Workforce and Work modules, first inputs and connections

When the modules are on the diagram, we should think what values we would like to get from the modules and what values we would like to use in the modules.

Workforce needs to know, how much work is required and it should provide information on how much work can be done. To provide the information on how much work can be done, we need an Input variable. Variables can be dragged to the diagram from Symbols view or by using shortcut keys (Shift+I for Input variable). Drag an input variable to the diagram and name it TotalPossibleWorkingSpeed.

Work module on the other hand provides information on how much work is required in it and it needs to know when the work has to be ready. Create an input variable RequiredWorkingSpeed1 and an Auxiliary variable Work1CompletionTime and place all variables like in the picture on the right.

Connect the variables to modules using dependency connections (arrows). Connections are created by holding down Alt key and first clicking on the variable where to start the connection and then clicking on the variable where to end.

Now we have the initial idea of the model, so let's configure the modules.

Workforce module

Cloud, Valve, Flow and Stock

Open Workforce module by selecting it from the diagram, right-clicking it and selecting Show Module.

Create a Stock variable and name it WorkforceStock. Stock variables are created the same way as Input and Auxiliary variables. The level of the stock is controlled with a valve and a flow. To create the flow, hold down Alt and right-click on an empty space left of the stock. Then left-click on the stock. A cloud, valve and a flow is created. Rename the valve to NetResourcing.

Cloud, Valve, Flow and Stock. Flow works both on directions.

NetResourcing works both ways. To display this also visually, delete the cloud by selecting it and pressing delete on your keyboard. Then create a flow starting from NetResourcing valve and ending on an empty space next to it.

Auxiliaries in Workforce module

Now you have used all the basic components and connections. From now on the instructions will be a more simplified.

Next we will create four Auxiliary variables: TimeToAllocateResources, WorkforceRequired, Productivity and PossibleWorkingSpeed. Place and connect them according to the picture on the right.

To be able to simulate the model, all variables must have valid equations. To configure an equation, select a variable. Variable's properties are shown in the Property view and you can input the required equations in the text fields. You can copy the equations directly from here or type them manually. Variables connected to the selected variable are shown in the Variables list. To speed up typing, you can double click on a variable name and it will be inserted to the equation.

WorkforceStock
Initial value: 0

NetResourcing
= (WorkforceRequired - WorkforceStock)/TimeToAllocateResources

TimeToAllocateResources
= 2

Productivity
= 1

PossibleWorkingSpeed
= WorkforceStock * Productivity
Is Output

Variables can be set as output by selecting Is Output option from the Equation tab.


RequiredWorkingSpeedInput

On a previous phase, we wanted to give the value of RequiredWorkingSpeed1 to this workforce module. To get that value, we need to create an input. Create input RequiredWorkingSpeedInput, connect it to WorkforceRequired and write the following equation to WorkforceRequired.

WorkForceRequired
= RequiredWorkingSpeedInput/Productivity

Now this module is ready to be used as a part of the model.


Work module

Basic work with errors

Open Work1 module by selecting it from the WorkModel diagram, right-clicking it and selecting Show Module. Alternatively you can double click Work1 on the model browser.

Create the basic flow of work with stocks and flows like in the picture on the right.

The idea of the model is that first there is work. Work is done at a certain speed. When working, errors are also made. When errors are found, the amount of Errors is reduced, errors are removed from WorkDone and moved back to WorkToDo.



Smoothener for work is done

Work needs to be stopped when the project is ready. Since the simulator might face some difficulties to determine the projects readyness when project is almost ready, we need to implement some smoothing to the limit. OpenModelica doesn't yet have a builtin function for smoothing, so we need to implement our own. Create variables and connections according to the picture on the right.

Use the following equations for variables:

ProjectIsReady
Initial value: 0

ProjectReadyness
= (xidz(WorkDone, ProjectWorkAmount, 0.0) - ProjectIsReady) / 0.08

xidz is short for function X if devided by zero. This means that the simulation calculates WorkDone / ProjectWorkAmount. If ProjectWorkAmount is zero, the result is the third argument 0.0.

ProjectWorkAmount input variable

As you can see, ProjectWorkAmount is highlighted. Your model doesn't contain such variable and it is not connected to ProjectReadyness. Create an Input variable ProjectWorkAmount with default value 1000 and connect it to ProjectReadyness. The reason we are using input variable is that you can determine the default size of a project, but if you want to change it, you can change it from outside the module.


Variables needed for error handling

Next we need to define how errors are found. For that we need new variables: WorkQuality and ErrorsFoundTime. Create the variables and connections according to the picture and give variables their equations.

ErrorsGenerated
= (1-WorkQuality) * WorkingSpeed

ErrorsFoundRate
= Errors/ErrorsFoundTime

WorkQuality
= 0.9

ErrorsFoundTime
Type: WithLookup
With Lookup: xidz(WorkDone, ProjectWorkAmount, 0.0)
Lookup table: {{0,5},{0.5,3},{1,0.5},{2,0.5}}

WithLookup is a variable type where the value is interpolated from a 2-dimensional table (Lookup table) using the value determined in the "With Lookup" field. Type can be changed from the drop-down menu Type.


WorkAllocation and RequiredWorkingSpeed

To calculate our own need for workforce we need to create and connect WorkCompletionTime input variable and the following auxliary variables:

RequiredWorkingSpeed
= if ProjectIsReady < 1 then xidz(WorkToDo, TimeToDeadline, MaximumWorkingSpeed) else 0
Is Output

MaximumWorkingSpeed
= 500

TimeToDeadline
= max(0, WorkCompletionTime-time)

time is a universal variable that gives the current simulation time.


We need to decide how the workforce is allocated between all the work modules that are using the same workforce. For that we need to know how much work can be done and how much workforce other works require.

Create two Inputs, RequiredWorkingSpeedTotalInput and PossibleWorkingSpeedInput, and an auxiliary variable WorkAllocation. Connect the variables like int the picture.

WorkAllocation
= xidz(RequiredWorkingSpeed, RequiredWorkingSpeedTotalInput, 0.0) * PossibleWorkingSpeedInput

Finally let's give initial values for all the remaining variables:

WorkingSpeed
= if ProjectIsReady < 1 then WorkAllocation else 0

WorkToDo
Initial value: ProjectWorkAmount

WorkDone
Initial value: 0

Errors
Initial value: 0

Connecting modules

Our modules are complete. Let's get back to the WorkModel Configuration.

Set Work1CompletionTime to 10.

Module input connections

Connections between modules are made in the properties of the module. Select Work1 and open tab Inputs from the properties. The table lists all input variables in the module that are available. Clicking on the Refers to output column will open a drop-down menu that shows all available variables that are connected to the module. By selecting a variable, you connect that variable to the input.

Error creating thumbnail: /bin/bash: /usr/bin/convert: No such file or directory Error code: 127
Connection from RequiredWorkingSpeed to Work1
Module input connections

Work1 need also information on how much working speed is required by all works. Since Work1 is the only work, create a dependency connection from RequiredWorkingSpeed1 to Work1 and in Work1's properties connect it to RequiredWorkingSpeedTotalInput.

In Outputs tab, make the only possible connection: from RequiredWorkingSpeed to RequiredWorkingSpeed1.

Workforce module has only one input and one output. Create the only possible connections:
(Inputs) RequiredWorkingSpeedInput -> RequiredWorkingSpeed1
(Outputs) PossibleWorkingSpeed -> TotalPossibleWorkingSpeed

Now your model is ready for simulation!

Simulating the model

To make the simulation time longer, select Configuration on the model browser. Give the model Stop time 24.0

Experiment activation

To run simulations, you must activate an experiment. Expand the experiments folder on your model browser. There is one ready-made experiment. Double click on the experiment and the experiment control buttons appear on the toolbar. Press the play button ExperimentPlay.png.

System shows the simulation progress in the progress bar on the lower right corner of the screen.

SimulationProgress.png

When the progress indicator disappears, the simulation is complete.

If the Console view pops up and shows an error "Error: Too few equations, underdetermined system. The model has X equation(s) and Y variable(s)", the simulation has failed. The reason might be that you forgot to assign an equation to some variable or some connection in modules. See through all the variables, write the missing equation and simulate again.

After the simulation is succesfully run, you can select a variable and see its simulation results in the trend view. For example WorkDone variable in Work1 module will give the following graph.

FirstSimulation.png


Adding modules

Final configuration with two modules

We created the WorkModule to be reusable. To use two WorkModules in the model, you must do the following.

Populate a second WorkModule to WorkModel configuration and name it Work2.

Create RequiredWorkingSpeed2 input variable and Work2CompletionTime auxiliary variable.

We need a sum of all working speed requirements to give to the work modules. For this purpose, create an auxiliary variable RequiredWorkingSpeedTotal which sums the requirements.

You can also have a different size work. To make Work2 smaller, create an auxiliary variable Work2Amount.

Use the following equations:

Work2CompletionTime
= 13

Work2Amount
= 800

RequiredWorkingSpeedTotal
= RequiredWorkingSpeed1 + RequiredWorkingSpeed2

Update connections to match connections shown in the picture and connect the inputs and outputs to the modules.

Workforce
RequiredWorkingSpeedInput -> RequiredWorkingSpeedTotal

Work1 Inputs
RequiredWorkingSpeedTotalInput -> RequiredWorkingSpeedTotal

Work2 Outputs
RequiredWorkingSpeed -> RequiredWorkingSpeed2

Work2 Inputs
Module2Inputs.png


When all the connections are made, you can simulate the model again. Now you have model with two work modules. Select variables from both modules in model browser to display them in trend view.

SecondSimulation.png