fischertechnik_factory.py 5.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from devs_models.crate_transporter import CrateTransporter
  2. from devs_models.generator import Generator
  3. from devs_models.high_bay_warehouse import HighBayWarehouse, InventoryPublisher
  4. from devs_models.dsi import DSI
  5. from devs_models.mpo import MPO
  6. from devs_models.mqtt_control_unit import MQTTControlUnit
  7. from devs_models.reader_station import ReaderStation
  8. from devs_models.simple_conveyor import SimpleConveyor
  9. from devs_models.sld import SLD
  10. from devs_models.dso import DSO
  11. from devs_models.vacuum_gripper import VacuumGripper
  12. from devs_models.collector import Collector
  13. from pypdevs.DEVS import CoupledDEVS
  14. class FischertechnikFactory(CoupledDEVS):
  15. def __init__(self, name: str, automatic: bool = True):
  16. super(FischertechnikFactory, self).__init__(name)
  17. # Add output port for MQTT
  18. self.REALTIME_OBSERVED = self.addOutPort('REALTIME_OBSERVED')
  19. # Create models
  20. self.gen: Generator = self.addSubModel(Generator("Generator", automatic=automatic))
  21. self.dsi: DSI = self.addSubModel(DSI("DSI"))
  22. self.reader: ReaderStation = self.addSubModel(ReaderStation("ReaderStation")) # NFC and Color reading station
  23. self.vgr: VacuumGripper = self.addSubModel(VacuumGripper("VacuumGripper"))
  24. self.ct: CrateTransporter = self.addSubModel(CrateTransporter("Transporter"))
  25. self.hbw: HighBayWarehouse = self.addSubModel(HighBayWarehouse("HighBayWarehouse"))
  26. self.hbw_inv: InventoryPublisher = self.addSubModel(InventoryPublisher("InventoryPublisher", 10))
  27. self.mpo: MPO = self.addSubModel(MPO("MPO"))
  28. self.conveyor: SimpleConveyor = self.addSubModel(SimpleConveyor("Conveyor"))
  29. self.sld: SLD = self.addSubModel(SLD("SLD"))
  30. self.dso: DSO = self.addSubModel(DSO("DSO"))
  31. self.mqtt_control: MQTTControlUnit = self.addSubModel(MQTTControlUnit("MQTTControlUnit"))
  32. self.collector: Collector = self.addSubModel(Collector("Collector"))
  33. # Connect ports
  34. self.connectPorts(self.gen.out, self.dsi.inp)
  35. self.connectPorts(self.dsi.out, self.vgr.dsi_in)
  36. self.connectPorts(self.vgr.dsi_out, self.dsi.vgr_in)
  37. self.connectPorts(self.vgr.mpo_out, self.mpo.vgr_in)
  38. self.connectPorts(self.vgr.nfc_out, self.reader.nfc_in)
  39. self.connectPorts(self.reader.nfc_out, self.vgr.nfc_in)
  40. self.connectPorts(self.vgr.color_sensor_out, self.reader.color_in)
  41. self.connectPorts(self.reader.color_out, self.vgr.color_sensor_in)
  42. self.connectPorts(self.vgr.ct_out, self.ct.right_in)
  43. self.connectPorts(self.ct.right_out, self.vgr.ct_in)
  44. self.connectPorts(self.ct.left_out, self.hbw.inp)
  45. self.connectPorts(self.hbw.out, self.ct.left_in)
  46. self.connectPorts(self.hbw.inventory_out, self.hbw_inv.inp)
  47. self.connectPorts(self.mpo.conveyor_out, self.conveyor.inp)
  48. self.connectPorts(self.conveyor.out, self.sld.inp)
  49. self.connectPorts(self.sld.red_out, self.vgr.sld_in["RED"])
  50. self.connectPorts(self.sld.blue_out, self.vgr.sld_in["BLUE"])
  51. self.connectPorts(self.sld.white_out, self.vgr.sld_in["WHITE"])
  52. self.connectPorts(self.vgr.sld_out["RED"], self.sld.red_in)
  53. self.connectPorts(self.vgr.sld_out["BLUE"], self.sld.blue_in)
  54. self.connectPorts(self.vgr.sld_out["WHITE"], self.sld.white_in)
  55. self.connectPorts(self.vgr.dso_out, self.dso.inp)
  56. self.connectPorts(self.dso.out, self.collector.inp)
  57. # Connect MQTT ports
  58. self.connectPorts(self.mqtt_control.mqtt_out, self.gen.mqtt_in)
  59. self.connectPorts(self.mqtt_control.mqtt_out, self.dsi.mqtt_in)
  60. self.connectPorts(self.mqtt_control.mqtt_out, self.reader.mqtt_in)
  61. self.connectPorts(self.mqtt_control.mqtt_out, self.vgr.mqtt_in)
  62. self.connectPorts(self.mqtt_control.mqtt_out, self.ct.mqtt_in)
  63. self.connectPorts(self.mqtt_control.mqtt_out, self.hbw.mqtt_in)
  64. self.connectPorts(self.mqtt_control.mqtt_out, self.mpo.mqtt_in)
  65. self.connectPorts(self.mqtt_control.mqtt_out, self.sld.mqtt_in)
  66. self.connectPorts(self.mqtt_control.mqtt_out, self.dso.mqtt_in)
  67. self.connectPorts(self.dsi.mqtt_out, self.mqtt_control.mqtt_in)
  68. self.connectPorts(self.reader.mqtt_out, self.mqtt_control.mqtt_in)
  69. self.connectPorts(self.vgr.mqtt_out, self.mqtt_control.mqtt_in)
  70. self.connectPorts(self.ct.mqtt_out, self.mqtt_control.mqtt_in)
  71. self.connectPorts(self.hbw.mqtt_out, self.mqtt_control.mqtt_in)
  72. self.connectPorts(self.hbw_inv.mqtt_out, self.mqtt_control.mqtt_in)
  73. self.connectPorts(self.mpo.mqtt_out, self.mqtt_control.mqtt_in)
  74. self.connectPorts(self.conveyor.mqtt_out, self.mqtt_control.mqtt_in)
  75. self.connectPorts(self.sld.mqtt_out, self.mqtt_control.mqtt_in)
  76. self.connectPorts(self.dso.mqtt_out, self.mqtt_control.mqtt_in)
  77. self.connectPorts(self.mqtt_control.REALTIME_OBSERVED, self.REALTIME_OBSERVED)
  78. def get_inventory(self) -> dict:
  79. """ Returns the inventory of the system """
  80. return self.hbw.state.mqtt_inventory.inventory