Java Reference
In-Depth Information
activateEvent("ARRIVED", moveTime, unloadStation);
}
else
working
#
false
;
}
}
}
Class
Assembler
extends the
DiscreteProcess
class and implements the state
transitions triggered by the events
WORKDONE
,
LOADED
and
UNLOADED
.
The first event is raised by the assembler, the second by the AGV and the
third by the inventory. The current state is represented by two variables:
working
is true when the assembler is executing an assembling operation;
outputEmpty
is true when the assembler's output buffer is empty. This imple-
mentation of class
Transport
does not manage the synchronization with the
transport since it does not activate the events
FULL
and
NOTFULL
that notify
the state of the input buffer. It also does not verify if the output buffer is
getting full.
package
workcell;
import
java.util.ArrayList;
public class
Assembler
extends
DiscreteProcess {
ArrayList nutBuffer
#
new
ArrayList();
ArrayList screwBuffer
#
new
ArrayList();
ArrayList boltBuffer
#
new
ArrayList();
double
maxRate; // maximum number of pieces per minute
int
inputSize; // the size of the input buffer
int
outputSize; // the size of the output buffer
boolean
working
#
false
;
boolean
outputEmpty
#
true
;
public
Assembler(String name, DiscreteClock clock,
double
rate,
int
in,
int
out){
super
(name, clock);
this
.maxRate
#
rate / 60000;
this
.inputSize
#
in;
this
.outputSize
#
out;
attachTo("WORKDONE",
this
);
}
protected void
notifyEvent(DiscreteEvent event) {
if
(event.name.equals("LOADED")) {
// a nut or a screw has been loaded in the input buffer
if
(event.value.equals("Drill"))
nutBuffer.add(event);
else if
(event.value.equals("Cutter"))
screwBuffer.add(event);
// if the machine is not working and there is at least
// a nut and a screw it starts a new manufacturing
// operation