Commit 3dd9e49d authored by Ioannis Papagiannopoulos's avatar Ioannis Papagiannopoulos Committed by Georgios Dagkakis

expectedSignals dict added to CoreObject attributes to describe the state of...

expectedSignals dict added to CoreObject attributes to describe the state of an object (what signals is it expecting and thus can be sent)
parent 4bfbe760
...@@ -71,6 +71,20 @@ class CoreObject(ManPyObject): ...@@ -71,6 +71,20 @@ class CoreObject(ManPyObject):
# if there is input in a dictionary parse from it # if there is input in a dictionary parse from it
from Globals import G from Globals import G
G.ObjList.append(self) # add object to ObjList G.ObjList.append(self) # add object to ObjList
# list of expected signals of a station (values can be used as flags to inform on which signals is the station currently yielding)
self.expectedSignals={
"isRequested":0,
"canDispose":0,
"interruptionStart":0,
"interruptionEnd":0,
"loadOperatorAvailable":0,
"initialWIP":0,
"brokerIsSet":0,
"preemptQueue":0,
"entityRemoved":0,
"entityCreated":0,
"moveEnd":0
}
def initialize(self): def initialize(self):
from Globals import G from Globals import G
...@@ -190,6 +204,20 @@ class CoreObject(ManPyObject): ...@@ -190,6 +204,20 @@ class CoreObject(ManPyObject):
# flag that shows if the object is blocked state at any given time # flag that shows if the object is blocked state at any given time
self.isBlocked=False self.isBlocked=False
self.timeLastBlockageStarted=None self.timeLastBlockageStarted=None
# list of expected signals of a station (values can be used as flags to inform on which signals is the station currently yielding)
self.expectedSignals={
"isRequested":0,
"canDispose":0,
"interruptionStart":0,
"interruptionEnd":0,
"loadOperatorAvailable":0,
"initialWIP":0,
"brokerIsSet":0,
"preemptQueue":0,
"entityRemoved":0,
"entityCreated":0,
"moveEnd":0
}
# ======================================================================= # =======================================================================
# the main process of the core object # the main process of the core object
...@@ -263,18 +291,18 @@ class CoreObject(ManPyObject): ...@@ -263,18 +291,18 @@ class CoreObject(ManPyObject):
self.wipStatList.append([self.env.now, len(activeObjectQueue)]) self.wipStatList.append([self.env.now, len(activeObjectQueue)])
if self.entityRemoved.triggered: if self.entityRemoved.triggered:
if self.entityRemoved.value!=self.env.now and self.waitEntityRemoval: if self.entityRemoved.value!=self.env.now and self.waitEntityRemoval and self.expectedSignals['entityRemoved']:
# print self.id,'triggered and waiting' # print self.id,'triggered and waiting'
self.entityRemoved=self.env.event() self.entityRemoved=self.env.event()
self.printTrace(self.id, signal='(removedEntity)') self.printTrace(self.id, signal='(removedEntity)')
succeedTuple=(self,self.env.now) succeedTuple=(self,self.env.now)
self.entityRemoved.succeed(succeedTuple) self.entityRemoved.succeed(succeedTuple)
elif self.waitEntityRemoval: elif self.waitEntityRemoval and self.expectedSignals['entityRemoved']:
# print self.id,'not triggered and waiting' # print self.id,'not triggered and waiting'
self.printTrace(self.id, signal='(removedEntity)') self.printTrace(self.id, signal='(removedEntity)')
succeedTuple=(self,self.env.now) succeedTuple=(self,self.env.now)
self.entityRemoved.succeed(succeedTuple) self.entityRemoved.succeed(succeedTuple)
elif not self.waitEntityRemoval: elif not self.waitEntityRemoval and not self.expectedSignals['entityRemoved']:
# print self.id,'not triggered but not waiting' # print self.id,'not triggered but not waiting'
pass pass
return entity return entity
...@@ -462,8 +490,9 @@ class CoreObject(ManPyObject): ...@@ -462,8 +490,9 @@ class CoreObject(ManPyObject):
self.printTrace(self.id, signalReceiver=self.receiver.id) self.printTrace(self.id, signalReceiver=self.receiver.id)
# assign the entry of the receiver # assign the entry of the receiver
self.receiver.assignEntryTo() self.receiver.assignEntryTo()
succeedTuple=(self,self.env.now) if self.receiver.expectedSignals['isRequested']:
self.receiver.isRequested.succeed(succeedTuple) succeedTuple=(self,self.env.now)
self.receiver.isRequested.succeed(succeedTuple)
return True return True
# if no receiver can accept then try to preempt a receive if the stations holds a critical order # if no receiver can accept then try to preempt a receive if the stations holds a critical order
self.preemptReceiver() self.preemptReceiver()
...@@ -533,9 +562,11 @@ class CoreObject(ManPyObject): ...@@ -533,9 +562,11 @@ class CoreObject(ManPyObject):
giversReceiver=self giversReceiver=self
self.giver=giver self.giver=giver
self.giver.receiver=self self.giver.receiver=self
self.printTrace(self.id, signalGiver=self.giver.id) if self.giver.expectedSignals['canDispose']:
succeedTuple=(self,self.env.now) self.printTrace(self.id, signalGiver=self.giver.id)
self.giver.canDispose.succeed(succeedTuple) if self.giver.expectedSignals['canDispose']:
succeedTuple=(self,self.env.now)
self.giver.canDispose.succeed(succeedTuple)
return True return True
return False return False
......
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