mpo.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from pypdevs.DEVS import CoupledDEVS
  2. from devs_models.mpo_oven import MPOOven
  3. from devs_models.mpo_gripper import MPOGripper
  4. from devs_models.mpo_table_saw import MPOTableSaw
  5. class MPO(CoupledDEVS):
  6. """ MPO: Multi-Processing Oven station
  7. Contains:
  8. - baking oven
  9. - gripper to transport from oven to saw
  10. - saw with spinning table
  11. Note: active status is handled by individual components because is difficult
  12. """
  13. def __init__(self, name: str):
  14. super(MPO, self).__init__(name)
  15. # Components
  16. self.oven: MPOOven = self.addSubModel(MPOOven(f"{name}_oven"))
  17. self.gripper: MPOGripper = self.addSubModel(MPOGripper(f"{name}_gripper"))
  18. self.table_saw: MPOTableSaw = self.addSubModel(MPOTableSaw(f"{name}_saw"))
  19. # Own ports
  20. self.vgr_in = self.addInPort("vgr_in")
  21. self.mqtt_in = self.addInPort("mqtt_in")
  22. self.mqtt_out = self.addOutPort("mqtt_out")
  23. self.conveyor_out = self.addOutPort("conveyor_out")
  24. # Connect internal ports
  25. self.connectPorts(self.vgr_in, self.oven.vgr_in)
  26. self.connectPorts(self.oven.gripper_out, self.gripper.oven_in)
  27. self.connectPorts(self.gripper.oven_out, self.oven.gripper_in)
  28. self.connectPorts(self.gripper.table_out, self.table_saw.gripper_in)
  29. self.connectPorts(self.table_saw.gripper_out, self.gripper.table_in)
  30. self.connectPorts(self.table_saw.conveyor_out, self.conveyor_out)
  31. # Connect MQTT ports
  32. self.connectPorts(self.mqtt_in, self.oven.mqtt_in)
  33. self.connectPorts(self.mqtt_in, self.gripper.mqtt_in)
  34. self.connectPorts(self.mqtt_in, self.table_saw.mqtt_in)
  35. self.connectPorts(self.oven.mqtt_out, self.mqtt_out)
  36. self.connectPorts(self.gripper.mqtt_out, self.mqtt_out)
  37. self.connectPorts(self.table_saw.mqtt_out, self.mqtt_out)