parking.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import threading, time
  2. from utils.s7data import S7data
  3. from models.data_sender import Sender
  4. class Parking:
  5. def __init__(self, data_s7: S7data, sender: Sender):
  6. self.sender = sender
  7. self.ccmNo_list = ["5", "6", "6", "6"]
  8. self.auto_trigger = []
  9. self.manual_trigger = []
  10. self.value_a = []
  11. self.value_m = []
  12. self.lock = threading.Lock()
  13. self.current_car = ["", "", "", ""]
  14. self.car_time = [0, 0, 0, 0]
  15. self.car_be = []
  16. self.plate_set = {'厂内00664', '厂内00415', '厂内00687', '厂内00701', '厂内00700', '厂内00901', '厂内00699', '厂内00695', '厂内00694', '厂内00693', '厂内00692', '厂内00902', '厂内00690', '厂内00689', '陕E08582D', '陕E08515D', '陕E08000D', '陕E00298D'}
  17. for name in range(4):
  18. tmp = data_s7.make_point(f"车{name+1}自动触发信号")
  19. tmp.set_excite_action(lambda i=name: self.signal_on(i, 0))
  20. self.auto_trigger.append(tmp)
  21. tmp = data_s7.make_point(f"车{name+1}手动触发信号")
  22. tmp.set_excite_action(lambda i=name: self.signal_on(i, 1))
  23. self.manual_trigger.append(tmp)
  24. self.value_a.append(data_s7.make_point(f"车{name+1}自动触发结果"))
  25. self.value_m.append(data_s7.make_point(f"车{name+1}手动触发结果"))
  26. tmp = data_s7.make_point(f"车{name+1}存在")
  27. tmp.set_excite_action(lambda i=name: self.car_in(i))
  28. tmp.set_reset_action(lambda i=name: self.car_out(i))
  29. self.car_be.append(tmp)
  30. def signal_on(self, i, manual_flag):
  31. if manual_flag:
  32. valuedata = self.value_m[i]
  33. else:
  34. valuedata = self.value_a[i]
  35. send_flag = False
  36. with self.lock:
  37. if self.current_car[i] != valuedata.data:
  38. send_flag = True
  39. self.current_car[i] = valuedata.data
  40. self.car_time[i] = time.time()
  41. # self.sender.car_add(self.ccmNo_list[i], str(i+1), self.current_car[i])
  42. if send_flag:
  43. self.sender.plate_update(self.ccmNo_list[i], str(i+1), self.current_car[i])
  44. def car_in(self, i):
  45. plate = ''
  46. time.sleep(10)
  47. if time.time() - self.car_time[i] <= 10:
  48. plate = self.current_car[i]
  49. self.sender.car_add(self.ccmNo_list[i], str(i+1), plate)
  50. def car_out(self, i):
  51. self.sender.car_go(self.ccmNo_list[i], str(i+1))