123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- from DEVS import *
- from infinity import INFINITY
- class Operator(AtomicDEVS):
- def __init__(self, name="Operator"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"op_out": self.addOutPort("op_out"), "op_in": self.addInPort("op_in")}
- def initialState(self):
- return {'name': 'waiting', 'req_queue': [], 'query_queue': [], 'requester': None}
- def timeAdvance(self):
- if self.state['query_queue']:
- return 0
- elif self.state['name'] == 'waiting':
- return INFINITY
- elif self.state['name'] == 'requested':
- return 0
- elif self.state['name'] == 'allocating':
- return 0
- elif self.state['name'] == 'allocated':
- return INFINITY
- def outputFnc(self):
- output = {}
- if self.state['query_queue']:
- output[self.my_ports['op_out']] = []
- for it in self.state['query_queue']:
- output[self.my_ports['op_out']].append({'type': 'response', 'req_name': it, 'op_name': id(self), 'free': self.state['name'] == 'waiting'})
- if self.state['name'] == 'allocating':
- if self.my_ports['op_out'] in output:
- output[self.my_ports['op_out']].append({'type': 'allocate', 'req_name': self.state['requester'], 'op_name': id(self)})
- else:
- output[self.my_ports['op_out']] = [({'type': 'allocate', 'req_name': self.state['requester'], 'op_name': id(self)})]
- return output
- def intTransition(self):
- if self.state['name'] == 'requested':
- self.state['name'] = 'allocating'
- self.state['requester'] = self.state['req_queue'].pop()
- elif self.state['name'] == 'allocating':
- self.state['name'] = 'allocated'
- if self.state['query_queue']:
- self.state['query_queue'] = []
- return self.state
- def extTransition(self, my_inputs):
- msgs = my_inputs[self.my_ports['op_in']]
- release_msgs = [it for it in msgs if it['type'] == 'release' and it['op_name'] == id(self)]
- req_msgs = [it for it in msgs if it['type'] == 'request' and it['op_name'] == id(self)]
- query_msgs = [it for it in msgs if it['type'] == 'query']
- if release_msgs:
- self.state['name'] = 'requested' if self.state['req_queue'] else 'waiting'
- for r_m in req_msgs:
- self.state['req_queue'].append(r_m['req_name'])
- self.state['name'] = 'requested'
- for q_m in query_msgs:
- self.state['query_queue'].append(q_m['req_name'])
- return self.state
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class ConveyorBelt(AtomicDEVS):
- def __init__(self, name="ConveyorBelt"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"conv_out": self.addOutPort("conv_out"), "conv_in": self.addInPort("conv_in")}
- def initialState(self):
- return {'name': 'waiting', 'product': None}
- def timeAdvance(self):
- if self.state['name'] == 'waiting':
- return INFINITY
- elif self.state['name'] == 'transporting':
- return 1
- def outputFnc(self):
- return {self.my_ports['conv_out']: [self.state['product']]}
- def intTransition(self):
- if self.state['name'] == 'transporting':
- self.state['name'] == 'waiting'
- return self.state
- def extTransition(self, my_inputs):
- if self.state['name'] == 'waiting':
- self.state['product'] = my_inputs[self.my_ports['conv_in']][0]
- self.state['name'] = 'transporting'
- return self.state
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class WheelsGenerator(AtomicDEVS):
- def __init__(self, name="WheelsGenerator"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"g_out": self.addOutPort("g_out")}
- def initialState(self):
- return {'name': 'generating'}
- def timeAdvance(self):
- if self.state['name'] == 'generating':
- return 1
- def outputFnc(self):
- if self.state['name'] == 'generating':
- return {self.my_ports['g_out']: [{'type': 'Wheels', 'broken': False}]}
- def intTransition(self):
- return AtomicDEVS.intTransition(self)
- def extTransition(self, my_inputs):
- return AtomicDEVS.extTransition(self, my_inputs)
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class TracksGenerator(AtomicDEVS):
- def __init__(self, name="TracksGenerator"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"g_out": self.addOutPort("g_out")}
- def initialState(self):
- return {'name': 'generating'}
- def timeAdvance(self):
- if self.state['name'] == 'generating':
- return 1
- def outputFnc(self):
- if self.state['name'] == 'generating':
- return {self.my_ports['g_out']: [{'type': 'Tracks', 'broken': False}]}
- def intTransition(self):
- return AtomicDEVS.intTransition(self)
- def extTransition(self, my_inputs):
- return AtomicDEVS.extTransition(self, my_inputs)
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class BodyGenerator(AtomicDEVS):
- def __init__(self, name="BodyGenerator"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"g_out": self.addOutPort("g_out")}
- def initialState(self):
- return {'name': 'generating'}
- def timeAdvance(self):
- if self.state['name'] == 'generating':
- return 1
- def outputFnc(self):
- if self.state['name'] == 'generating':
- return {self.my_ports['g_out']: [{'type': 'Body', 'broken': False}]}
- def intTransition(self):
- return AtomicDEVS.intTransition(self)
- def extTransition(self, my_inputs):
- return AtomicDEVS.extTransition(self, my_inputs)
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class MachineGunGenerator(AtomicDEVS):
- def __init__(self, name="MachineGunGenerator"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"g_out": self.addOutPort("g_out")}
- def initialState(self):
- return {'name': 'generating'}
- def timeAdvance(self):
- if self.state['name'] == 'generating':
- return 1
- def outputFnc(self):
- if self.state['name'] == 'generating':
- return {self.my_ports['g_out']: [{'type': 'MachineGun', 'broken': False}]}
- def intTransition(self):
- return AtomicDEVS.intTransition(self)
- def extTransition(self, my_inputs):
- return AtomicDEVS.extTransition(self, my_inputs)
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class WaterCannonGenerator(AtomicDEVS):
- def __init__(self, name="WaterCannonGenerator"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"g_out": self.addOutPort("g_out")}
- def initialState(self):
- return {'name': 'generating'}
- def timeAdvance(self):
- if self.state['name'] == 'generating':
- return 1
- def outputFnc(self):
- if self.state['name'] == 'generating':
- return {self.my_ports['g_out']: [{'type': 'WaterCannon', 'broken': False}]}
- def intTransition(self):
- return AtomicDEVS.intTransition(self)
- def extTransition(self, my_inputs):
- return AtomicDEVS.extTransition(self, my_inputs)
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class collector(AtomicDEVS):
- def __init__(self, name="collector"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"c_in": self.addInPort("c_in")}
- def initialState(self):
- return {'name': 'collecting', 'WarAPCs': 0, 'RiotAPCS': 0}
- def timeAdvance(self):
- if self.state['name'] == 'collecting':
- return INFINITY
- def outputFnc(self):
- return AtomicDEVS.outputFnc(self)
- def intTransition(self):
- return AtomicDEVS.intTransition(self)
- def extTransition(self, my_inputs):
- if (my_inputs[self.my_ports['c_in']][0]['type'] == 'WarAPC'):
- self.state['WarAPCs'] += 1
- elif (my_inputs[self.my_ports['c_in']][0]['type'] == 'RiotAPC'):
- self.state['RiotAPCs'] += 1
- return self.state
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class assembler(AtomicDEVS):
- def __init__(self, name="assembler"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"ass_op_out": self.addOutPort("ass_op_out"), "ass_out": self.addOutPort("ass_out"), "ass_op_in": self.addInPort("ass_op_in"), "ass_in": self.addInPort("ass_in")}
- def initialState(self):
- return {'name': 'waiting', 'queue': [], 'finishedProduct': None, 'op_name': None, 'op_to_send': None}
- def timeAdvance(self):
- if self.state['name'] == 'waiting':
- return INFINITY
- elif self.state['name'] == 'looking_for_op':
- return 0
- elif self.state['name'] == 'sending_req_to_op':
- return 0
- elif self.state['name'] == 'waiting_for_op':
- return INFINITY
- elif self.state['name'] == 'producing':
- return self.wait_time
- def outputFnc(self):
- if self.state['name'] == 'producing':
- return {self.my_ports['ass_out']: [self.state['finishedProduct']], self.my_ports['ass_op_out']: [{'type': 'release', 'op_name': self.state['op_name']}]}
- elif self.state['name'] == 'looking_for_op':
- return {self.my_ports['ass_op_out']: [{'type': 'query', 'req_name': id(self)}]}
- elif self.state['name'] == 'sending_req_to_op':
- return {self.my_ports['ass_op_out']: [{'type': 'request', 'req_name': id(self), 'op_name': self.state['op_to_send']}]}
- else:
- return AtomicDEVS.outputFnc(self)
- def intTransition(self):
- if self.state['name'] == 'producing':
- self.state['name'] = 'waiting'
- elif self.state['name'] == 'sending_req_to_op':
- self.state['name'] = 'waiting_for_op'
- return self.state
- def extTransition(self, my_inputs):
- if self.state['name'] == 'producing':
- self.wait_time -= self.elapsed
- import helpers, random
- if self.my_ports['ass_in'] in my_inputs:
- self.state['queue'].extend(my_inputs[self.my_ports['ass_in']])
- if (self.state['name'] == 'waiting' and (helpers.canWarAPC(self.state['queue']) or helpers.canRiotAPC(self.state['queue']))):
- self.state['name'] = 'looking_for_op'
- if self.state['name'] == 'looking_for_op' and self.my_ports['ass_op_in'] in my_inputs:
- msgs = my_inputs[self.my_ports['ass_op_in']]
- free = [msg['op_name'] for msg in msgs if msg['req_name'] == id(self) and msg['type'] == 'response' and msg['free']]
- notfree = [msg['op_name'] for msg in msgs if msg['req_name'] == id(self) and msg['type'] == 'response' and not msg['free']]
- if free:
- self.state['op_to_send'] = free[0]
- else:
- self.state['op_to_send'] = notfree[0]
- self.state['name'] = 'sending_req_to_op'
- elif self.state['name'] == 'waiting_for_op' and self.my_ports['ass_op_in'] in my_inputs:
- forme = [msg for msg in my_inputs[self.my_ports['ass_op_in']] if msg['req_name'] == id(self) and msg['type'] == 'allocate']
- if forme:
- self.state['op_name'] = my_inputs[self.my_ports['ass_op_in']][0]['op_name']
- if helpers.isWarAPC(self.state['queue']):
- self.state['finishedProduct'] = {'type': 'WarAPC', 'broken': (random.random() < 0.05)}
- elif helpers.isRiotAPC(self.state['queue']):
- self.state['finishedProduct'] = {'type': 'RiotAPC', 'broken': (random.random() < 0.05)}
- self.state['name'] = 'producing'
- self.wait_time = 2
- return self.state
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class repair(AtomicDEVS):
- def __init__(self, name="repair"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"rep_op_out": self.addOutPort("rep_op_out"), "rep_out": self.addOutPort("rep_out"), "rep_op_in": self.addInPort("rep_op_in"), "rep_in": self.addInPort("rep_in")}
- def initialState(self):
- return {'name': 'waiting', 'item': None, 'op_to_send': None, 'op_name': None}
- def timeAdvance(self):
- if self.state['name'] == 'waiting':
- return INFINITY
- elif self.state['name'] == 'looking_for_op':
- return 0
- elif self.state['name'] == 'sending_req_to_op':
- return 0
- elif self.state['name'] == 'waiting_for_op':
- return INFINITY
- elif self.state['name'] == 'repairing':
- return self.wait_time
- def outputFnc(self):
- if self.state['name'] == 'repairing':
- return {self.my_ports['rep_out']: [self.state['item']], self.my_ports['rep_op_out']: [{'type': 'release', 'op_name': self.state['op_name']}]}
- elif self.state['name'] == 'looking_for_op':
- return {self.my_ports['rep_op_out']: [{'type': 'query', 'req_name': id(self)}]}
- elif self.state['name'] == 'sending_req_to_op':
- return {self.my_ports['rep_op_out']: [{'type': 'request', 'req_name': id(self), 'op_name': self.state['op_to_send']}]}
- else:
- return AtomicDEVS.outputFnc(self)
- def intTransition(self):
- if self.state['name'] == 'repairing':
- self.state['name'] = 'waiting'
- elif self.state['name'] == 'sending_req_to_op':
- self.state['name'] = 'waiting_for_op'
- return self.state
- def extTransition(self, my_inputs):
- if self.state['name'] == 'repairing':
- self.wait_time -= self.elapsed
- if self.state['name'] == 'waiting' and self.my_ports['rep_in'] in my_inputs:
- self.state['item'] = my_inputs[self.my_ports['rep_in']][0]
- self.state['name'] = 'looking_for_op'
- elif self.state['name'] == 'looking_for_op' and self.my_ports['rep_op_in'] in my_inputs:
- msgs = my_inputs[self.my_ports['rep_op_in']]
- free = [msg['op_name'] for msg in msgs if msg['req_name'] == id(self) and msg['type'] == 'response' and msg['free']]
- notfree = [msg['op_name'] for msg in msgs if msg['req_name'] == id(self) and msg['type'] == 'response' and not msg['free']]
- if free:
- self.state['op_to_send'] = free[0]
- else:
- self.state['op_to_send'] = notfree[0]
- self.state['name'] = 'sending_req_to_op'
- elif self.state['name'] == 'waiting_for_op' and self.my_ports['rep_op_in'] in my_inputs:
- forme = [msg for msg in my_inputs[self.my_ports['rep_op_in']] if msg['req_name'] == id(self) and msg['type'] == 'allocate']
- if forme:
- self.state['op_name'] = my_inputs[self.my_ports['rep_op_in']][0]['op_name']
- self.state['item']['broken'] = False
- self.state['name'] = 'repairing'
- self.wait_time = 2
- return self.state
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class qualitycontrol(AtomicDEVS):
- def __init__(self, name="qualitycontrol"):
- AtomicDEVS.__init__(self, name)
- self.state = self.initialState()
- self.my_ports = {"qc_op_out": self.addOutPort("qc_op_out"), "qc_out_working": self.addOutPort("qc_out_working"), "qc_out_broken": self.addOutPort("qc_out_broken"), "qc_op_in": self.addInPort("qc_op_in"), "qc_in": self.addInPort("qc_in")}
- def initialState(self):
- return {'name': 'waiting', 'item': None}
- def timeAdvance(self):
- if self.state['name'] == 'waiting':
- return INFINITY
- elif self.state['name'] == 'looking_for_op':
- return 0
- elif self.state['name'] == 'sending_req_to_op':
- return 0
- elif self.state['name'] == 'waiting_for_op_query_answer':
- return INFINITY
- elif self.state['name'] == 'waiting_for_op':
- return INFINITY
- elif self.state['name'] == 'checking':
- return self.wait_time
- def outputFnc(self):
- if self.state['name'] == 'checking':
- if self.state['item']['broken']:
- return {self.my_ports['qc_out_broken']: [self.state['item']], self.my_ports['qc_op_out']: [{'type': 'release', 'op_name': self.state['op_name']}]}
- else:
- return {self.my_ports['qc_out_working']: [self.state['item']], self.my_ports['qc_op_out']: [{'type': 'release', 'op_name': self.state['op_name']}]}
- elif self.state['name'] == 'looking_for_op':
- return {self.my_ports['qc_op_out']: [{'type': 'query', 'req_name': id(self)}]}
- elif self.state['name'] == 'sending_req_to_op':
- return {self.my_ports['qc_op_out']: [{'type': 'request', 'req_name': id(self), 'op_name': self.state['op_to_send']}]}
- else:
- return AtomicDEVS.outputFnc(self)
- def intTransition(self):
- if self.state['name'] == 'checking':
- self.state['name'] = 'waiting'
- elif self.state['name'] == 'looking_for_op':
- self.state['name'] = 'waiting_for_op_query_answer'
- elif self.state['name'] == 'sending_req_to_op':
- self.state['name'] = 'waiting_for_op'
- return self.state
- def extTransition(self, my_inputs):
- if self.state['name'] == 'repairing':
- self.wait_time -= self.elapsed
- if self.state['name'] == 'waiting' and self.my_ports['qc_in'] in my_inputs:
- self.state['item'] = my_inputs[self.my_ports['qc_in']][0]
- self.state['name'] = 'looking_for_op'
- elif self.state['name'] == 'waiting_for_op_query_answer' and self.my_ports['qc_op_in'] in my_inputs:
- msgs = my_inputs[self.my_ports['qc_op_in']]
- free = [msg['op_name'] for msg in msgs if msg['req_name'] == id(self) and msg['type'] == 'response' and msg['free']]
- notfree = [msg['op_name'] for msg in msgs if msg['req_name'] == id(self) and msg['type'] == 'response' and not msg['free']]
- if free:
- self.state['op_to_send'] = free[0]
- else:
- self.state['op_to_send'] = notfree[0]
- self.state['name'] = 'sending_req_to_op'
- elif self.state['name'] == 'waiting_for_op' and self.my_ports['qc_op_in'] in my_inputs:
- forme = [msg for msg in my_inputs[self.my_ports['qc_op_in']] if msg['req_name'] == id(self) and msg['type'] == 'allocate']
- if forme:
- self.state['name'] = 'checking'
- return self.state
- def confTransition(self, my_inputs):
- return AtomicDEVS.confTransition(self, my_inputs)
- class Root(CoupledDEVS):
- def __init__(self, name="Root"):
- CoupledDEVS.__init__(self, name)
- self.my_ports = {}
- self.submodels = {"WheelsGenerator_i": self.addSubModel(WheelsGenerator(name="WheelsGenerator_i")), "TracksGenerator_i": self.addSubModel(TracksGenerator(name="TracksGenerator_i")), "BodyGenerator_i": self.addSubModel(BodyGenerator(name="BodyGenerator_i")), "MachineGunGenerator_i": self.addSubModel(MachineGunGenerator(name="MachineGunGenerator_i")), "WaterCannonGenerator_i": self.addSubModel(WaterCannonGenerator(name="WaterCannonGenerator_i")), "collector_i": self.addSubModel(collector(name="collector_i")), "assembler_i": self.addSubModel(assembler(name="assembler_i")), "repair_i": self.addSubModel(repair(name="repair_i")), "qualitycontrol_i": self.addSubModel(qualitycontrol(name="qualitycontrol_i")), "op1_i": self.addSubModel(Operator(name="op1_i")), "op2_i": self.addSubModel(Operator(name="op2_i")), "w_g_to_assembler_i1": self.addSubModel(ConveyorBelt(name="w_g_to_assembler_i1")), "t_g_to_assembler_i1": self.addSubModel(ConveyorBelt(name="t_g_to_assembler_i1")), "b_g_to_assembler_i1": self.addSubModel(ConveyorBelt(name="b_g_to_assembler_i1")), "mg_g_to_assembler_i1": self.addSubModel(ConveyorBelt(name="mg_g_to_assembler_i1")), "wc_g_to_assembler_i1": self.addSubModel(ConveyorBelt(name="wc_g_to_assembler_i1")), "assembler_to_qualitycontrol_i1": self.addSubModel(ConveyorBelt(name="assembler_to_qualitycontrol_i1")), "qualitycontrol_broken_to_repair_i1": self.addSubModel(ConveyorBelt(name="qualitycontrol_broken_to_repair_i1")), "qualitycontrol_to_collector_i1": self.addSubModel(ConveyorBelt(name="qualitycontrol_to_collector_i1")), "repair_to_collector_i1": self.addSubModel(ConveyorBelt(name="repair_to_collector_i1")), "w_g_to_assembler_i2": self.addSubModel(ConveyorBelt(name="w_g_to_assembler_i2")), "t_g_to_assembler_i2": self.addSubModel(ConveyorBelt(name="t_g_to_assembler_i2")), "b_g_to_assembler_i2": self.addSubModel(ConveyorBelt(name="b_g_to_assembler_i2")), "mg_g_to_assembler_i2": self.addSubModel(ConveyorBelt(name="mg_g_to_assembler_i2")), "wc_g_to_assembler_i2": self.addSubModel(ConveyorBelt(name="wc_g_to_assembler_i2")), "assembler_to_qualitycontrol_i2": self.addSubModel(ConveyorBelt(name="assembler_to_qualitycontrol_i2")), "qualitycontrol_broken_to_repair_i2": self.addSubModel(ConveyorBelt(name="qualitycontrol_broken_to_repair_i2")), "qualitycontrol_to_collector_i2": self.addSubModel(ConveyorBelt(name="qualitycontrol_to_collector_i2")), "repair_to_collector_i2": self.addSubModel(ConveyorBelt(name="repair_to_collector_i2"))}
- self.connectPorts(self.submodels["WheelsGenerator_i"].my_ports["g_out"], self.submodels["w_g_to_assembler_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["TracksGenerator_i"].my_ports["g_out"], self.submodels["t_g_to_assembler_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["BodyGenerator_i"].my_ports["g_out"], self.submodels["b_g_to_assembler_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["MachineGunGenerator_i"].my_ports["g_out"], self.submodels["mg_g_to_assembler_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["WaterCannonGenerator_i"].my_ports["g_out"], self.submodels["wc_g_to_assembler_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["assembler_i"].my_ports["ass_op_out"], self.submodels["op1_i"].my_ports["op_in"])
- self.connectPorts(self.submodels["assembler_i"].my_ports["ass_op_out"], self.submodels["op2_i"].my_ports["op_in"])
- self.connectPorts(self.submodels["assembler_i"].my_ports["ass_out"], self.submodels["assembler_to_qualitycontrol_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["repair_i"].my_ports["rep_op_out"], self.submodels["op1_i"].my_ports["op_in"])
- self.connectPorts(self.submodels["repair_i"].my_ports["rep_op_out"], self.submodels["op2_i"].my_ports["op_in"])
- self.connectPorts(self.submodels["repair_i"].my_ports["rep_out"], self.submodels["repair_to_collector_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["qualitycontrol_i"].my_ports["qc_op_out"], self.submodels["op1_i"].my_ports["op_in"])
- self.connectPorts(self.submodels["qualitycontrol_i"].my_ports["qc_op_out"], self.submodels["op2_i"].my_ports["op_in"])
- self.connectPorts(self.submodels["qualitycontrol_i"].my_ports["qc_out_working"], self.submodels["qualitycontrol_to_collector_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["qualitycontrol_i"].my_ports["qc_out_broken"], self.submodels["qualitycontrol_broken_to_repair_i1"].my_ports["conv_in"])
- self.connectPorts(self.submodels["op1_i"].my_ports["op_out"], self.submodels["assembler_i"].my_ports["ass_op_in"])
- self.connectPorts(self.submodels["op1_i"].my_ports["op_out"], self.submodels["qualitycontrol_i"].my_ports["qc_op_in"])
- self.connectPorts(self.submodels["op1_i"].my_ports["op_out"], self.submodels["repair_i"].my_ports["rep_op_in"])
- self.connectPorts(self.submodels["op2_i"].my_ports["op_out"], self.submodels["assembler_i"].my_ports["ass_op_in"])
- self.connectPorts(self.submodels["op2_i"].my_ports["op_out"], self.submodels["qualitycontrol_i"].my_ports["qc_op_in"])
- self.connectPorts(self.submodels["op2_i"].my_ports["op_out"], self.submodels["repair_i"].my_ports["rep_op_in"])
- self.connectPorts(self.submodels["w_g_to_assembler_i1"].my_ports["conv_out"], self.submodels["w_g_to_assembler_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["t_g_to_assembler_i1"].my_ports["conv_out"], self.submodels["t_g_to_assembler_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["b_g_to_assembler_i1"].my_ports["conv_out"], self.submodels["b_g_to_assembler_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["mg_g_to_assembler_i1"].my_ports["conv_out"], self.submodels["mg_g_to_assembler_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["wc_g_to_assembler_i1"].my_ports["conv_out"], self.submodels["wc_g_to_assembler_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["assembler_to_qualitycontrol_i1"].my_ports["conv_out"], self.submodels["assembler_to_qualitycontrol_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["qualitycontrol_broken_to_repair_i1"].my_ports["conv_out"], self.submodels["qualitycontrol_broken_to_repair_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["qualitycontrol_to_collector_i1"].my_ports["conv_out"], self.submodels["qualitycontrol_to_collector_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["repair_to_collector_i1"].my_ports["conv_out"], self.submodels["repair_to_collector_i2"].my_ports["conv_in"])
- self.connectPorts(self.submodels["w_g_to_assembler_i2"].my_ports["conv_out"], self.submodels["assembler_i"].my_ports["ass_in"])
- self.connectPorts(self.submodels["t_g_to_assembler_i2"].my_ports["conv_out"], self.submodels["assembler_i"].my_ports["ass_in"])
- self.connectPorts(self.submodels["b_g_to_assembler_i2"].my_ports["conv_out"], self.submodels["assembler_i"].my_ports["ass_in"])
- self.connectPorts(self.submodels["mg_g_to_assembler_i2"].my_ports["conv_out"], self.submodels["assembler_i"].my_ports["ass_in"])
- self.connectPorts(self.submodels["wc_g_to_assembler_i2"].my_ports["conv_out"], self.submodels["assembler_i"].my_ports["ass_in"])
- self.connectPorts(self.submodels["assembler_to_qualitycontrol_i2"].my_ports["conv_out"], self.submodels["qualitycontrol_i"].my_ports["qc_in"])
- self.connectPorts(self.submodels["qualitycontrol_broken_to_repair_i2"].my_ports["conv_out"], self.submodels["repair_i"].my_ports["rep_in"])
- self.connectPorts(self.submodels["qualitycontrol_to_collector_i2"].my_ports["conv_out"], self.submodels["collector_i"].my_ports["c_in"])
- self.connectPorts(self.submodels["repair_to_collector_i2"].my_ports["conv_out"], self.submodels["collector_i"].my_ports["c_in"])
|