Commit 3daaafdc authored by Georgios Dagkakis's avatar Georgios Dagkakis

wip can be set in Machine. Processing time is not yet calculated correctly

parent f842a78c
...@@ -32,6 +32,7 @@ import simpy ...@@ -32,6 +32,7 @@ import simpy
# the core object # the core object
# =========================================================================== # ===========================================================================
class CoreObject(object): class CoreObject(object):
class_name = 'Dream.CoreObject'
def __init__(self, id, name, **kw): def __init__(self, id, name, **kw):
self.id = id self.id = id
...@@ -128,6 +129,7 @@ class CoreObject(object): ...@@ -128,6 +129,7 @@ class CoreObject(object):
self.setupTimeCurrentEntity=0 self.setupTimeCurrentEntity=0
self.shouldPreempt=False #flag that shows that the machine should preempt or not self.shouldPreempt=False #flag that shows that the machine should preempt or not
self.isProcessingInitialWIP=False #flag that is used only when a Machine has initial wip
self.lastGiver=None # variable that holds the last giver of the object, used by machine in case of preemption self.lastGiver=None # variable that holds the last giver of the object, used by machine in case of preemption
# initialize the wipStatList - # initialize the wipStatList -
...@@ -141,6 +143,7 @@ class CoreObject(object): ...@@ -141,6 +143,7 @@ class CoreObject(object):
self.interruptionStart=self.env.event() self.interruptionStart=self.env.event()
self.interruptedBy=None self.interruptedBy=None
self.entityRemoved=self.env.event() self.entityRemoved=self.env.event()
self.initialWIP=self.env.event()
# flag used to signal that the station waits for removeEntity event # flag used to signal that the station waits for removeEntity event
self.waitEntityRemoval=False self.waitEntityRemoval=False
# attributes/indices used for printing the route, hold the cols corresponding to the machine (entities route and operators route) # attributes/indices used for printing the route, hold the cols corresponding to the machine (entities route and operators route)
......
...@@ -247,6 +247,12 @@ def setWIP(entityList): ...@@ -247,6 +247,12 @@ def setWIP(entityList):
entity.hot = True entity.hot = True
# add the entity to the pendingEntities list # add the entity to the pendingEntities list
G.pendingEntities.append(entity) G.pendingEntities.append(entity)
# if we are in the start of the simulation the object is of Machine type then we should send initialWIP signal
if G.env.now==0 and entity.currentStation:
if entity.currentStation.class_name:
if entity.currentStation.class_name == 'Dream.Machine':
entity.currentStation.currentEntity=entity
entity.currentStation.initialWIP.succeed(G.env)
from Exit import Exit from Exit import Exit
def countIntervalThroughput(argumentDict={}): def countIntervalThroughput(argumentDict={}):
......
...@@ -301,7 +301,7 @@ class Machine(CoreObject): ...@@ -301,7 +301,7 @@ class Machine(CoreObject):
# waitEvent isRequested /interruptionEnd/loadOperatorAvailable # waitEvent isRequested /interruptionEnd/loadOperatorAvailable
while 1: while 1:
self.printTrace(self.id, waitEvent='') self.printTrace(self.id, waitEvent='')
receivedEvent = yield self.isRequested | self.interruptionEnd | self.loadOperatorAvailable receivedEvent = yield self.isRequested | self.interruptionEnd | self.loadOperatorAvailable | self.initialWIP
self.printTrace(self.id, received='') self.printTrace(self.id, received='')
# if the machine can accept an entity and one predecessor requests it continue with receiving the entity # if the machine can accept an entity and one predecessor requests it continue with receiving the entity
if self.isRequested in receivedEvent: if self.isRequested in receivedEvent:
...@@ -325,6 +325,12 @@ class Machine(CoreObject): ...@@ -325,6 +325,12 @@ class Machine(CoreObject):
# try to signal the Giver, otherwise wait until it is requested # try to signal the Giver, otherwise wait until it is requested
if self.signalGiver(): if self.signalGiver():
break break
if self.initialWIP in receivedEvent:
assert self.initialWIP.value==self.env, 'initial wip was not sent by the Environment'
self.initialWIP=self.env.event()
self.isProcessingInitialWIP=True
break
# TODO: maybe here have to assigneExit of the giver and add self to operator activeCallers list # TODO: maybe here have to assigneExit of the giver and add self to operator activeCallers list
# here or in the getEntity (apart from the loadTimeCurrentEntity) # here or in the getEntity (apart from the loadTimeCurrentEntity)
...@@ -376,6 +382,7 @@ class Machine(CoreObject): ...@@ -376,6 +382,7 @@ class Machine(CoreObject):
# TODO: if there was loading time then we must solve the problem of getting an entity # TODO: if there was loading time then we must solve the problem of getting an entity
# from an unidentified giver or not getting an entity at all as the giver # from an unidentified giver or not getting an entity at all as the giver
# may fall in failure mode (assignExit()?) # may fall in failure mode (assignExit()?)
if not self.isProcessingInitialWIP:
self.currentEntity=self.getEntity() self.currentEntity=self.getEntity()
# TODO: the Machine receive the entity after the operator is available # TODO: the Machine receive the entity after the operator is available
# the canAcceptAndIsRequested method checks only in case of Load type of operation # the canAcceptAndIsRequested method checks only in case of Load type of operation
...@@ -613,8 +620,9 @@ class Machine(CoreObject): ...@@ -613,8 +620,9 @@ class Machine(CoreObject):
self.timeLastEntityEnded=self.env.now # this holds the time that the last entity ended processing in Machine self.timeLastEntityEnded=self.env.now # this holds the time that the last entity ended processing in Machine
self.nameLastEntityEnded=self.currentEntity.name # this holds the name of the last entity that ended processing in Machine self.nameLastEntityEnded=self.currentEntity.name # this holds the name of the last entity that ended processing in Machine
self.completedJobs+=1 # Machine completed one more Job self.completedJobs+=1 # Machine completed one more Job
# reseting the shouldPreempt flag # reseting flags
self.shouldPreempt=False self.shouldPreempt=False
self.isProcessingInitialWIP=False
# in case Machine just performed the last work before the scheduled maintenance signal the corresponding object # in case Machine just performed the last work before the scheduled maintenance signal the corresponding object
if self.isWorkingOnTheLast: if self.isWorkingOnTheLast:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment