question

pc neo avatar image
0 Likes"
pc neo asked Mischa Spelt commented

FloWorks: how to send vessel away before unload till empty

@Mischa SpeltI am working on a model that has vessels filled up GearlessOGV, when the OGV is filled
I will like to send the vessels away and not keep them at the Berth. In order to achieve this I have used ProcessFlow to manually disconnect the FlowTank of vessel from the LoadingArm and send it away. After this action, it seems that the Berth is now left in a state that is unable to process any other vessels. Though when OGV arrive the Berth receives vessels but the vessels are never unloaded through the LoadingArm. Also, I noted that the vessels that are received by Berth cannot be seen visually though you can find them using Model Tree (as shown in the pic attached).

vessel.jpg

Please advice on what is done wrong or what is the best approach to achieve it. A sample is attached.

sample-model-partialrecycle.fsm

The version of FloWorks that I used is FloWorks 19.2.1 with a patch given in https://answers.flexsim.com/questions/75319/install-1924-give-error-on-floworks.html?childToView=75327#answer-75327

FlexSim 19.2.4
FloWorksberthloadingarmdisconnect
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

1 Answer

Mischa Spelt avatar image
1 Like"
Mischa Spelt answered Mischa Spelt commented

The loading arm and berth have some internal communication going on that gets disrupted when you just disconnect the loading arm and kick out the vessel. The main reason your berth stops working is the loading arm stays assigned to the barge and will not release the position on the berth until it detects the target level.

As a workaround, you could try not disconnecting the vessel manually, but scheduling the message it expects, using the following code in Disconnect Loading Arm.

FlowObject loadingArm = token.bargeCompartment.as(Object).outObjects[1];
destroyeventsofobject(loadingArm);
createevent( loadingArm, 0, 0x81300, "", token.barge );
//token.bargeCompartment.as(FlowObject).output.ports[1].disconnect()  ;

The constant 0x81300 is the internal code for the "Loading complete" event. See the attached model 24067-sample-model-partialrecycle-ms.fsm.

I hope that provides a solution to the problem. As said, this is more of a workaround. The Berth/Loading Arm is suitable in most simple cases, but if you seriously start simulating port operations our experience is it is often better to replace the berth with a Queue or Basic FR and the loading arm with a Pump, then do the connecting and waiting logic in Process Flow. We have done this a few times ourselves, and were planning to add a Process Flow template to the FloWorks 20.0 release similar to the attached example berth-with-processflow.fsm.


· 6
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

pc neo avatar image pc neo commented ·

@Mischa Spelt Thank you for your quick response.

I have tried out the sample model modified by you it seems that the workaround does allow the vessels to be disconnected from the Berth/LoadingArm and be sent away even when it is not empty. But when next OGV arrives and vessels are sent to berth to unloaded the next time, the vessels upon empty now does not leave the berth. :(

How to make the berth sent the empty vessels away?

0 Likes 0 ·
pc neo avatar image pc neo commented ·

@Mischa Spelt I've also notice that that upon sending the event to the loadingArm as suggested, the loadingArm/Berth does not move it's state to 'end loading', which I was hoping the event will do that.

0 Likes 0 ·
Mischa Spelt avatar image Mischa Spelt pc neo commented ·

I dived a bit deeper into how the loading point/arm work again and unfortunately you seem to be right: even when manually forcing the event, internally the loading arm will still check whether the target level has been reached and if not, just reschedule the event. I think that the ProcessFlow way is currently the only way.

1 Like 1 ·
pc neo avatar image pc neo Mischa Spelt commented ·

@Mischa Spelt Thank you for your reply.

I've attempted to use ProcessFlow with reference to your given sample. I've created a set of 3 berths (FRBasic object): 1 for OGV and 2 for barges with process flow. It works. However, when I tried to copied the 3 berths to duplicate another set of 3 berths, the barges now will never trigger the OnExit trigger.

I wonder if you have ever encountered this behaviour and how to overcome it or is it something that I've done wrong in the process flow.

Attached is the sample where the 3 berths are FRBasic which is copied from a working copy.

sample-model-partialrecycle-pf.fsm

0 Likes 0 ·
Show more comments