sys_params.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. """Модуль для работы с сис"""
  2. from modbus import Modbus
  3. from mb_registers import reg_table
  4. from colorama import Fore
  5. import time
  6. import random
  7. models = {0x100: 'MDIO_88', 0x200: 'MAO_8', 0x300: 'MAI_12'}
  8. test_state = {0: 'No Test', 1: 'Test OK', 2: 'Test FAIL'}
  9. class IO_SysParams:
  10. def __init__(self, modbus: Modbus):
  11. self.modbus = modbus
  12. self.MODEL_MDIO_88 = 0x0100
  13. self.MODEL_MAO_8 = 0x0200
  14. self.MODEL_MAI_12 = 0x0300
  15. self.SYS_TEST_OK = 0x0001
  16. self.SAVE_SYS_SETTINGS = 0x0001
  17. self.SAVE_SETTIGNS = 0x0001
  18. def get_system_vars(self):
  19. """Запрос системных настроек и параметров"""
  20. print(Fore.LIGHTMAGENTA_EX + "\nSystem settings and params:\n")
  21. # Модель
  22. model = self.modbus.read_holding_registers(reg_table['model'], 1)[0]
  23. print("Model: ", Fore.LIGHTMAGENTA_EX + models[model])
  24. # Дата производства
  25. prod_date = self.modbus.read_uint32_holding(reg_table['prod_date'])
  26. t = time.gmtime(prod_date)
  27. print("Prod date: ", Fore.LIGHTMAGENTA_EX + "{}.{}.{} {}:{}:{}".format(t.tm_mday, t.tm_mon, t.tm_year,
  28. t.tm_hour, t.tm_min, t.tm_sec))
  29. # Серийный номер
  30. serial_number = self.modbus.read_uint32_holding(reg_table['serial_number'])
  31. print("SN: ", Fore.LIGHTMAGENTA_EX + str(serial_number))
  32. # Версия ПО
  33. fw_bytes = b''
  34. data = self.modbus.read_holding_registers(reg_table['fw_ver'], 4)
  35. fw_raw = list(data)
  36. fw_raw.reverse()
  37. for i in fw_raw:
  38. fw_bytes += i.to_bytes(2, 'little')
  39. fw = fw_bytes.decode('utf-8')
  40. print("FW version: ", Fore.LIGHTMAGENTA_EX + fw)
  41. # Статус тестирования
  42. status = self.modbus.read_holding_registers(reg_table['test_status'], 1)[0]
  43. print("Test status: ", Fore.LIGHTMAGENTA_EX + test_state[status])
  44. print('\n')
  45. def set_system_vars(self, password: int):
  46. """Установка системных настроек"""
  47. # Отправка пароля для разблокирования доступа к системным настройкам
  48. print("Send password...")
  49. self.modbus.write_holding_register(reg_table['password'], password)
  50. time.sleep(0.1)
  51. # Дата производства. На день назад от текущего момента.
  52. prod_time = int(time.time()) - time.timezone - 3600*24
  53. print("Set production date: ", prod_time)
  54. self.modbus.write_uint32(reg_table['prod_date'], prod_time)
  55. # Серийный номер
  56. sn = random.randint(10000, 1000000)
  57. print("Set SN: ", sn)
  58. self.modbus.write_uint32(reg_table['serial_number'], sn)
  59. # Статус тестирования
  60. print("Set test status: Test OK")
  61. self.modbus.write_holding_register(reg_table['test_status'], self.SYS_TEST_OK)
  62. # Команда сохранения системных настроек
  63. print("Save system settings...")
  64. self.modbus.write_holding_register(reg_table['save_sys_settings'], self.SAVE_SYS_SETTINGS)
  65. def save_sattings(self):
  66. self.modbus.write_holding_register(reg_table['param_manager'], self.SAVE_SETTIGNS)
  67. # def set_manager_register(dev: IO_Module, commands: list):
  68. # foo = 0
  69. # for command in commands:
  70. # foo |= command
  71. # print(foo)
  72. # # dev.write_holding_register(reg_table['param_manager'])
  73. def main():
  74. pass
  75. if __name__ == '__main__':
  76. main()