BaseClass.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import asyncio, time
  2. from sockets import ConnectionManager
  3. from utils.common import message_queue
  4. from mcu.capture.smart_shooter_class import SmartShooter
  5. class BaseClass:
  6. def __init__(
  7. self, websocket_manager: ConnectionManager, smart_shooter: SmartShooter = None
  8. ):
  9. self.websocket_manager = websocket_manager
  10. self.smart_shooter = smart_shooter
  11. self.msg_type = ""
  12. self.websocket = None
  13. # -1连接失败 0未连接 1连接中 2连接成功 3端口占用
  14. # self.device_status = 2
  15. def sendSocketMessage(self, code=0, msg="", data=None, device_status=2):
  16. t_start = time.time()
  17. message_type = self.msg_type
  18. payload = {
  19. "code": code,
  20. "msg": msg,
  21. "status": device_status,
  22. "data": data,
  23. "msg_type": message_type,
  24. }
  25. print(f"[T1: {t_start:.4f}] sendSocketMessage 调用, msg={msg}")
  26. loop = asyncio.get_event_loop()
  27. if self.websocket == None:
  28. print(f"[T1: {time.time() - t_start:.4f}s] 走队列路径")
  29. loop.create_task(message_queue.put(payload))
  30. else:
  31. print(f"[T1: {time.time() - t_start:.4f}s] 走直接发送路径")
  32. async def _do_send():
  33. t2 = time.time()
  34. print(f"[T2: {t2 - t_start:.4f}s] 任务开始执行, 准备调用 send_personal_message")
  35. await self.websocket_manager.send_personal_message(payload, self.websocket)
  36. t3 = time.time()
  37. print(f"[T3: {t3 - t_start:.4f}s] send_personal_message 完成, 总耗时: {t3 - t2:.4f}s")
  38. loop.create_task(_do_send())
  39. print("\033[1;32;40m 发送消息===>sendSocketMessage \033[0m", data)
  40. async def asyncSendSocketMessage(self, code=0, msg="", data=None, device_status=2):
  41. data = {
  42. "code": code,
  43. "msg": msg,
  44. "status": device_status,
  45. "data": data,
  46. "msg_type": self.msg_type,
  47. }
  48. if self.websocket == None:
  49. await asyncio.wait_for(message_queue.put(data), timeout=0.1)
  50. else:
  51. await self.websocket_manager.send_personal_message(data, self.websocket)
  52. def change_hex_to_int(self, _bytearray):
  53. return " ".join([hex(x) for x in _bytearray])
  54. def read_cmd(self, serial_handle, check=None):
  55. n = 0
  56. while 1:
  57. try:
  58. read_d = serial_handle.read_all() # 读取接收到的数据
  59. self.receive_data += read_d
  60. except BaseException as e:
  61. print("171串口接收报错", e)
  62. self.serial_handle = None
  63. return False
  64. if len(self.receive_data) < 4:
  65. break
  66. if self.receive_data[0] == 0x55 and self.receive_data[1] == 0x55:
  67. # print("read ori ", self.change_hex_to_int(self.receive_data))
  68. data_len = self.receive_data[2]
  69. if len(self.receive_data) < data_len + 4:
  70. # 此处需要超时机制
  71. # print("数据长度不够,等待下次读取")
  72. # 超时退出
  73. # if not self.serial_handle.txdone():
  74. # return None
  75. # n += 1
  76. # if n > out_time_n:
  77. # return None
  78. # time.sleep(0.01)
  79. continue
  80. _data = self.receive_data[3: data_len + 4]
  81. # 更新缓存区
  82. self.receive_data = self.receive_data[data_len + 4:]
  83. # 校验数据
  84. if 0xFF & ~sum(_data[:-1]) == _data[-1]:
  85. # print("receive_data:", self.change_hex_to_int(self.receive_data[:-1]))
  86. return _data[:-1]
  87. else:
  88. return None
  89. else:
  90. # print("起始位不是 55 55 进行移除", self.receive_data[0])
  91. # 起始位不是 55 55 进行移除
  92. while self.receive_data:
  93. if len(self.receive_data) == 1:
  94. if self.receive_data[0] == 0x55:
  95. break
  96. else:
  97. self.receive_data = b""
  98. else:
  99. if (
  100. self.receive_data[0] == 0x55
  101. and self.receive_data[1] == 0x55
  102. ):
  103. break
  104. else:
  105. self.receive_data = self.receive_data[1:]
  106. def write_cmd(self, serial_handle, data: list):
  107. if serial_handle:
  108. # data = [(0xff & par1), (0xff & (par1 >> 8))]
  109. # self.clearn_flush()
  110. buf = bytearray(b"")
  111. buf.extend([0x55, 0x55, (0xFF & len(data))])
  112. buf.extend(data)
  113. buf.extend([0xFF & ~sum(data)])
  114. # 55 55 02 5a 01 a4
  115. # print("send buf {}".format(self.change_hex_to_int(buf)))
  116. try:
  117. serial_handle.write(buf)
  118. return True
  119. except:
  120. serial_handle = None
  121. _recv_data = b""
  122. return False