BaseClass.py 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import asyncio
  2. from sockets import ConnectionManager
  3. class BaseClass:
  4. def __init__(self, websocket_manager: ConnectionManager):
  5. self.websocket_manager = websocket_manager
  6. def sendSocketMessage(self, code=0, msg="", data=None):
  7. data = {"code": code, "msg": msg, "data": data}
  8. loop = asyncio.get_event_loop()
  9. loop.create_task(self.websocket_manager.broadcast(data))
  10. def change_hex_to_int(self,_bytearray):
  11. return ' '.join([hex(x) for x in _bytearray])
  12. def read_cmd(self, serial_handle, check=None):
  13. n = 0
  14. while 1:
  15. try:
  16. read_d = serial_handle.read_all() # 读取接收到的数据
  17. self.receive_data += read_d
  18. except BaseException as e:
  19. print("171串口接收报错", e)
  20. self.serial_handle = None
  21. return False
  22. if len(self.receive_data) < 4:
  23. break
  24. if self.receive_data[0] == 0x55 and self.receive_data[1] == 0x55:
  25. # print("read ori ", self.change_hex_to_int(self.receive_data))
  26. data_len = self.receive_data[2]
  27. if len(self.receive_data) < data_len + 4:
  28. # 此处需要超时机制
  29. # print("数据长度不够,等待下次读取")
  30. # 超时退出
  31. # if not self.serial_handle.txdone():
  32. # return None
  33. # n += 1
  34. # if n > out_time_n:
  35. # return None
  36. # time.sleep(0.01)
  37. continue
  38. _data = self.receive_data[3 : data_len + 4]
  39. # 更新缓存区
  40. self.receive_data = self.receive_data[data_len + 4 :]
  41. # 校验数据
  42. if 0xFF & ~sum(_data[:-1]) == _data[-1]:
  43. # print("receive_data:", self.change_hex_to_int(self.receive_data[:-1]))
  44. return _data[:-1]
  45. else:
  46. return None
  47. else:
  48. # print("起始位不是 55 55 进行移除", self.receive_data[0])
  49. # 起始位不是 55 55 进行移除
  50. while self.receive_data:
  51. if len(self.receive_data) == 1:
  52. if self.receive_data[0] == 0x55:
  53. break
  54. else:
  55. self.receive_data = b""
  56. else:
  57. if (
  58. self.receive_data[0] == 0x55
  59. and self.receive_data[1] == 0x55
  60. ):
  61. break
  62. else:
  63. self.receive_data = self.receive_data[1:]
  64. def write_cmd(self, serial_handle,data: list):
  65. if serial_handle:
  66. # data = [(0xff & par1), (0xff & (par1 >> 8))]
  67. # self.clearn_flush()
  68. buf = bytearray(b"")
  69. buf.extend([0x55, 0x55, (0xFF & len(data))])
  70. buf.extend(data)
  71. buf.extend([0xFF & ~sum(data)])
  72. # 55 55 02 5a 01 a4
  73. # print("send buf {}".format(self.change_hex_to_int(buf)))
  74. try:
  75. serial_handle.write(buf)
  76. return True
  77. except:
  78. serial_handle = None
  79. _recv_data = b""
  80. return False