data_forward.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from utils.s7data import *
  2. from models.data_sender import *
  3. import copy
  4. class Forward:
  5. def __init__(self, data_s7: S7data, sender: Sender, crane_flag: bool, ccmNo: str):
  6. self.data_s7 = data_s7
  7. self.sender = sender
  8. self.crane_flag = crane_flag
  9. self.ccmNo = ccmNo
  10. self.billet_position_list = []
  11. self.barrier_state_list = []
  12. for i in range(8):
  13. self.billet_position_list.append(data_s7.make_point(f"L{i+1}坯头位置"))
  14. self.barrier_state_list.append(data_s7.make_point(f"L{i+1}挡板"))
  15. self.pusher = data_s7.make_point("推钢机激光")
  16. if self.crane_flag:
  17. self.crane_A1 = data_s7.make_point("天车A1位置")
  18. self.crane_A2 = data_s7.make_point("天车A2位置")
  19. self.crane_A3 = data_s7.make_point("天车A3位置")
  20. self.topic = 'trace/performance/billet/monitor'
  21. self.qos = 0
  22. self.template = {
  23. "type": "", # string 钢坯流道,行车,推钢机,辊道,车辆,堆垛
  24. "data": {
  25. "machine": 0, # number 如果是流道的话,哪个铸机
  26. "channel": 0, # number 如果是流道的话,第几流
  27. "direction": "", # string 运行方向 up, down, left, right
  28. "distance": 0, # number 运行距离 ,(应该是毫米)
  29. "has_billet": False, # boolean 是否夹起钢坯
  30. "position": 0, # number 车辆位置 , 从上到下,从左到右, 1 | 2 | 3 | 4, 行车位置 , 按图中位置,从左到右, A1 | A2 | A3 | B1 | B2
  31. "car_num": "", # string 车牌号
  32. "car_running": "", # string 车辆运行, in 表示车辆到站, out 车辆离开
  33. "billet_stacking": "", # string 堆垛 501 601 602 604 coolbed(步进冷床)
  34. "layers": 0, # number 堆垛层数
  35. "amount": 0 # number 堆垛夹数
  36. }
  37. }
  38. self.task_thread = None
  39. self.run_flag = False
  40. def billet_position(self, strandNo, position):
  41. tmp = copy.deepcopy(self.template)
  42. tmp['type'] = 'channel'
  43. tmp['data']['machine'] = self.ccmNo
  44. tmp['data']['channel'] = strandNo
  45. tmp['data']['direction'] = 'down'
  46. tmp['data']['distance'] = position
  47. self.sender.mqtt_publish(self.topic, tmp, self.qos)
  48. def barrier_state(self, strandNo, state):
  49. tmp = copy.deepcopy(self.template)
  50. tmp['type'] = 'channel_barrier'
  51. tmp['data']['machine'] = self.ccmNo
  52. tmp['data']['channel'] = strandNo
  53. if state:
  54. tmp['data']['direction'] = 'down'
  55. else:
  56. tmp['data']['direction'] = 'up'
  57. self.sender.mqtt_publish(self.topic, tmp, self.qos)
  58. def pusher_position(self, position):
  59. tmp = copy.deepcopy(self.template)
  60. tmp['type'] = 'steel_pusher'
  61. tmp['data']['machine'] = self.ccmNo
  62. tmp['data']['distance'] = position
  63. self.sender.mqtt_publish(self.topic, tmp, self.qos)
  64. def overhead_crane_position(self, craneNo, position):
  65. tmp = copy.deepcopy(self.template)
  66. tmp['type'] = 'train_working'
  67. tmp['data']['position'] = craneNo
  68. tmp['data']['direction'] = 'left'
  69. tmp['data']['distance'] = position
  70. tmp['data']['has_billet'] = False
  71. self.sender.mqtt_publish(self.topic, tmp, self.qos)
  72. def auto_forward(self):
  73. while self.run_flag:
  74. for i in range(8):
  75. self.billet_position(i+1, self.billet_position_list[i].data)
  76. self.barrier_state(i+1, self.barrier_state_list[i].data)
  77. self.pusher_position(self.pusher.data)
  78. if self.crane_flag:
  79. self.overhead_crane_position('A1', self.crane_A1.data)
  80. self.overhead_crane_position('A2', self.crane_A2.data)
  81. self.overhead_crane_position('A3', self.crane_A3.data)
  82. time.sleep(0.5)
  83. def start_auto_forward(self):
  84. if self.task_thread:
  85. self.run_flag = False
  86. self.task_thread.join()
  87. self.run_flag = True
  88. self.task_thread = threading.Thread(target=self.auto_forward)
  89. self.task_thread.start()