from pypdevs.DEVS import CoupledDEVS from devs_models.mpo_oven import MPOOven from devs_models.mpo_gripper import MPOGripper from devs_models.mpo_table_saw import MPOTableSaw class MPO(CoupledDEVS): """ MPO: Multi-Processing Oven station Contains: - baking oven - gripper to transport from oven to saw - saw with spinning table Note: active status is handled by individual components because is difficult """ def __init__(self, name: str): super(MPO, self).__init__(name) # Components self.oven: MPOOven = self.addSubModel(MPOOven(f"{name}_oven")) self.gripper: MPOGripper = self.addSubModel(MPOGripper(f"{name}_gripper")) self.table_saw: MPOTableSaw = self.addSubModel(MPOTableSaw(f"{name}_saw")) # Own ports self.vgr_in = self.addInPort("vgr_in") self.mqtt_in = self.addInPort("mqtt_in") self.mqtt_out = self.addOutPort("mqtt_out") self.conveyor_out = self.addOutPort("conveyor_out") # Connect internal ports self.connectPorts(self.vgr_in, self.oven.vgr_in) self.connectPorts(self.oven.gripper_out, self.gripper.oven_in) self.connectPorts(self.gripper.oven_out, self.oven.gripper_in) self.connectPorts(self.gripper.table_out, self.table_saw.gripper_in) self.connectPorts(self.table_saw.gripper_out, self.gripper.table_in) self.connectPorts(self.table_saw.conveyor_out, self.conveyor_out) # Connect MQTT ports self.connectPorts(self.mqtt_in, self.oven.mqtt_in) self.connectPorts(self.mqtt_in, self.gripper.mqtt_in) self.connectPorts(self.mqtt_in, self.table_saw.mqtt_in) self.connectPorts(self.oven.mqtt_out, self.mqtt_out) self.connectPorts(self.gripper.mqtt_out, self.mqtt_out) self.connectPorts(self.table_saw.mqtt_out, self.mqtt_out)