sbs.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from modbus import Modbus, MBError, NoResponseError
  2. import colorama
  3. from colorama import Fore
  4. import time
  5. import os
  6. import struct
  7. reg_table = {'hw_base': 0x0200}
  8. class SBS(Modbus):
  9. def __init__(self, tty: str, brate: int, address: int):
  10. super().__init__(tty, brate, address)
  11. @staticmethod
  12. def swap(data: bytes) -> bytes:
  13. return bytes([data[2], data[3], data[1], data[2]])
  14. @staticmethod
  15. def swap_registers(data: bytes, *args) -> bytes:
  16. for i in args:
  17. data[i], data[i + 2] = data[i + 2], data[i]
  18. data[i + 1], data[i + 3] = data[i + 3], data[i + 1]
  19. return data
  20. def read_pack(self, addr: int, cnt: int):
  21. return self.read_holding_registers(addr, cnt)
  22. def read_hv_params(self):
  23. raw_data = self.read_holding_registers_raw(reg_table['hw_base'], 15)
  24. self.swap_registers(raw_data, 2, 8, 12, 16, 20, 24)
  25. return struct.unpack('>HfHfffffH', raw_data)
  26. def main():
  27. colorama.init(autoreset=True)
  28. dev = SBS('COM9', 115200, 34)
  29. dev.MB_DEBUG = False
  30. while True:
  31. # data = dev.read_pack(0x300, 30)
  32. # print("Output :", Fore.GREEN + ' '.join(str(el) for el in data))
  33. print(dev.read_hv_params())
  34. time.sleep(1)
  35. if __name__ == '__main__':
  36. main()