Task 3.2 - Multi-compartment loading

Task Overview

In this task, you will extend the previous model to model multi-compartment loading and unloading. You will create and secondary production source to include a second product. The Multi-compartment loading controller object will be used to load and unload the multi-product vessels.

Step 1 The second product

To support loading of a secondary product, you will first have to duplicate the infrastructure for a single product you have created in the previous task. Select all the flow source, flow pile, loading arm and – if you have added it – deferred production sink at the production site, by holding down Control and clicking the objects. Making sure you have not selected the berth or port queue, copy the objects and set their product type to 2 (only the product type of the stock pile is relevant).

Do the same at the consumption side.

Step 2 Adding a tank to the vessels

You'll need to add an additional tank to the flow vessels, which they can use to transport the secondary product. In the Toolbox, find the FlowItem Bin, then double click the Flow Vessel.

Click the tank on the vessel (watch the yellow box to make sure you select the tank, not the vessel) and press Control + C to copy it. Then click on the vessel and press Control + V to paste the tank as a component (subnode) of the vessel. By default the tank will be shown floating above the vessel, but if you copied it correctly you can move the vessel around and see both tanks move with it.

Double click on the second tank and change its product type to product 2. Also make sure to select “<Not connected>” in the Flow Control dropdown, or you will see strange results when the flow item bin objects gets instantiated and first starts loading.

When you run the model as is, you will now see the flow vessels only being filled for 50%, with green product. The second tank still has the default maximum content of 50000. Add an extra OnCreationTrigger to the source to set the compartment size for the second product. The Object now needs to be set to item.subnode[2]. The maximum content can again be set to 100.

Step 3 Multi-compartment loading controller

Each berth now should have two loading arms, each connected to one of the two flow piles. Theoretically, each of the tanks can have different loading times because of the flow rate constraints on all involved objects and the available stock in the stock piles. Therefore, we can no longer rely on a single loading arm to tell the berth when the vessel is allowed to leave. Instead, we'll use a Multi-Compartment Loading Controller to coordinate the berths, in a way somewhat resembling the Dispatcher for operators.

At the production site, add a Multi-Compartment Loading Controller (MCLC) from the FloWorks drag-drop library. Disconnect the loading arm(s) from the berth (‘W’-drag). Then create center connections (‘S’)...

  • ... between the berth and the MCLC
  • ... between the two loading arms and the MCLC

The center ports of the MCLC should then look as shown below:

Open the properties of the MCLC. You can define the loading steps in the "Multi-Compartment Loading Controller" panel. All the loading arms attached to a single step are allowed to load or unload simultaneously. Only when all loading arms in a step report that they are done loading, the loading will continue to the next step. In this case you'll only need a single step that allows both loading arms to load at the same time. This is already the default, so you don't have to change anything here.

The only thing that you still have to do, is tell the second loading arm to load the second compartment, as the default is to always load the first (only) compartment. Click the second loading arm. In the “Item Tank” field, change the default “Tank on flow item” to “Specific compartment”. In the settings popup, enter 2 as the compartment number. This will make the loading arm connect to the second object inside the flow item.

Do the same on the other side: add a MCLC, and center-connect it to the berth and the two loading arms. Make sure both loading arms are set to unload mode and that the second loading arm unloads the second compartment. Set the unloading rate of one of the loading arms to 1, so you can verify that the MCLC actually waits for both compartments to finish unloading before the vessel is released.

Step 4 Third party vessels

Back in Task 3.1 (step 3), we noted that a loading arm is either in loading or in unloading mode, and promised that we would show how to use a single berth to both load and unload a vessel. Suppose that in addition to our own fixed fleet of vessels, we have an interweaved arrival pattern of third party vessels that will only deliver the green product (1), with an inter-arrival time of 200.

First you’ll need a way to distinguish between your own vessels and the third party vessels. Click on the vessel source in the model, and set the number of Labels to 1. Name the extra column that appears in the arrival table “Type” and give the vessel an item type of 1.

At the consumption site, add another (flow item) source, and connect it to the port queue. Set its FlowItem Class to FlowVessel, with an inter-arrival time of 200.

You'll need to add an On Creation trigger. Use the Set Label and Color option from the Data submenu to set the "Type" label to 2.

Also use the OnCreationTrigger to set the maximum content of the tank on the vessel again to 100.

At the cons berth, you’ll need to add a loading arm for loading the vessel. Add a loading arm, connect the green stock pile to it, and center connect it to the berth.

Set the maximum flow rate of the loading arm to 3. The berth should now have two center connections: the first one to the unloading (multi-compartment) controller, the second one to the loading arm.

You can now tell the berth to use the first loading controller for vessels of type 1 (your fleet), and the second loading controller for vessels of type 2 (third party). One way to do this, is to select the “Center Port By Case” option for the loading controller, and using item.Type as the case function. Select center port 2 for item type 2, and center port 1 for all other types:

When you run the model, you should now see that your own vessels unload both of their compartments through the MCLC, while the vessels generated by the source load the green compartment through the other loading arm, then leave.

The only remaining problem with the model is, that the third party vessels will also return to the production site and clog up the queue there. To solve this, connect the berth at the consumption side to a (flow item) sink, so that its first output port goes to the production site port queue and the second output port goes to the sink at the consumption side.

In the “Send to port” expression of the berth select “By Expression” and use the default of item.Type. This will send vessels of type 1 (own fleet) through output port 1, so the production site, and the third-party vessels of type 2 to the sink through port 2.

When you run the model now, you will regularly see a loading vessel interfere with the pattern of the unloading vessels, blocking the berth and reducing the green stockpile. Consider it an exercise to add a second third-party type which only loads the blue product, or if you are up for a challenge, perhaps randomly select one of the two compartments to fill.


This task concludes the FloWorks Loading Points and Berths tutorial.