Syntax:
FREE(<node name>);It is used to release a resource from the R type node that was left by the message without releasing the resource at the leaving time (see NOTFREE procedure, 7.14). The quantity of resource freed from the indicated node is equal to the actual value of the USE variable. The procedure may be executed in any node when processing any message or no message at all. However, in most usual applications, it is executed while processing the message that left the resource without releasing the used capacity. In many applications the message has to do other things, or await certain time, before the abandoned resource become available.
This procedure can be used in nodes of any type.
Example:
Crane (R) Return, ProcLoad, Command::
RELEASE
IF HeapSize > 0 THEN BEGIN NOTFREE; SENDTO(Return, ProcLoad) END
ELSE SENDTO(Command, ProcLoad);
IF F_Crane >= 1 THEN
BEGIN
STAY := GAMMA(MTCrane, DevTCrane);
LoadCrane := MINI(HeapSize, UNIFI(2, 3));
HeapSize := HeapSize - LoadCrane;
END;
Return (R) Crane::
RELEASE BEGIN FREE(Crane); SENDTO(FIRST, Crane) END;
STAY := ReturnTime + TRIA(1, 2, 4);
A crane have to remove a heap of packages that may be transported
in groups that have, at random with the same probability, 2 or 3
packages. The time to handle and transport the load is taken from a
GAMMA distribution. When the heap is reduced to zero, the process
finishes and the crane is available to transport another heap when
that is commanded. If the remaining heap is not
zero, the crane have to return to continue the removal. The crane
is not available during this period.
Continuation of the process has priority over any other new
process of heap transportation.Crane of capacity 1.
It is activated by a message that represents the order to operate.
This messages can queue in the EL of Crane.
The message has a field HeapSize with the size of the heap to be
removed and a field LoadCrane to keep the transported quantity.
When the message is processed the LoadCrane is
computed (all the heap or 2 or 3) and the time
delay in loading and transport is taken
into account. When this process finishes the message is sent to
ProcLoad to process the actual load. If the heap is not empty, a
copy is sent to a node Return to account for the delay to return
near the heap. Otherwise, the copy is sent to Command that decides
about new command messages to remove heaps. In the Return node
the message is delayed a time for the return and then sent to
the Crane again, before other commands,
to continue the heap removal.IF F_Crane = 0 to avoid execution of
instructions without transfer of the message to the IL.