12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- from modbus import Modbus, MBError, NoResponseError
- import colorama
- from colorama import Fore
- import time
- import os
- import struct
- reg_table = {'hw_base': 0x0200}
- class SBS(Modbus):
- def __init__(self, tty: str, brate: int, address: int):
- super().__init__(tty, brate, address)
- @staticmethod
- def swap(data: bytes) -> bytes:
- return bytes([data[2], data[3], data[1], data[2]])
- @staticmethod
- def swap_registers(data: bytes, *args) -> bytes:
- for i in args:
- data[i], data[i + 2] = data[i + 2], data[i]
- data[i + 1], data[i + 3] = data[i + 3], data[i + 1]
- return data
- def read_pack(self, addr: int, cnt: int):
- return self.read_holding_registers(addr, cnt)
- def read_hv_params(self):
- raw_data = self.read_holding_registers_raw(reg_table['hw_base'], 15)
- self.swap_registers(raw_data, 2, 8, 12, 16, 20, 24)
- return struct.unpack('>HfHfffffH', raw_data)
- def main():
- colorama.init(autoreset=True)
- dev = SBS('COM9', 115200, 34)
- dev.MB_DEBUG = False
- while True:
- # data = dev.read_pack(0x300, 30)
- # print("Output :", Fore.GREEN + ' '.join(str(el) for el in data))
-
- print(dev.read_hv_params())
- time.sleep(1)
- if __name__ == '__main__':
- main()
|