analog_out.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. from io_module import IO_Module
  2. from modbus import Modbus
  3. from log_reader import AnalogInputLogReader
  4. import colorama
  5. from colorama import Fore
  6. from time import sleep
  7. from serial import Serial
  8. from mb_registers import AoReg
  9. class IO_AnalogOutput(IO_Module):
  10. def __init__(self, modbus: Modbus):
  11. self.modbus = modbus
  12. super().__init__(self.modbus)
  13. '''Чтение параметров'''
  14. # Значения состояний выходов вкл./выкл. (битовое поле)
  15. def get_outputs_state(self):
  16. data = self.modbus.read_holding_registers(AoReg.OUT_STATE.value, 1)
  17. if self.DBG:
  18. print(Fore.GREEN + f'Read reg {[hex(AoReg.OUT_STATE.value)]} outputs state: {format(data[0], '04b')}')
  19. return format(data[0], '04b')
  20. # Значения состояний выходов вкл./выкл. в безопасном режиме (битовое поле)
  21. def get_outputs_state_save(self):
  22. data = self.modbus.read_holding_registers(AoReg.OUT_STATE_SAVE.value, 1)
  23. if self.DBG:
  24. print(Fore.GREEN + f'Read reg {[hex(AoReg.OUT_STATE_SAVE.value)]} outputs state (SAVE MODE): {format(data[0], '04b')}')
  25. return format(data[0], '04b')
  26. # Режим работы аналоговых выходов (0 - напряжение или 1 - ток. (битовое поле))
  27. def get_outputs_mode(self):
  28. data = self.modbus.read_holding_registers(AoReg.OUT_MODE.value, 1)
  29. if self.DBG:
  30. print(Fore.GREEN + f'Read reg {[hex(AoReg.OUT_MODE.value)]} outputs mode: {format(data[0], '04b')}')
  31. return format(data[0], '04b')
  32. # Режим работы аналоговых выходов (0 - напряжение или 1 - ток. (битовое поле))
  33. def get_outputs_mode_save(self):
  34. data = self.modbus.read_holding_registers(AoReg.OUT_MODE_SAVE.value, 1)
  35. if self.DBG:
  36. print(Fore.GREEN + f'Read reg {[hex(AoReg.OUT_MODE_SAVE.value)]} outputs mode (SAVE MODE): {format(data[0], '04b')}')
  37. return format(data[0], '04b')
  38. '''Установка параметров'''
  39. # Значения состояний выходов вкл./выкл. (битовое поле)
  40. def set_outputs_state(self, val):
  41. if self.DBG:
  42. print(Fore.BLUE + f'Write reg {[hex(AoReg.OUT_STATE.value)]} outputs state: {format(val, '04b')}')
  43. self.modbus.write_holding_register(AoReg.OUT_STATE.value, val)
  44. # Значения состояний выходов вкл./выкл. в безопасном режиме (битовое поле)
  45. def set_outputs_state_save(self, val):
  46. if self.DBG:
  47. print(Fore.BLUE + f'Write reg {[hex(AoReg.OUT_STATE_SAVE.value)]} outputs state (SAVE MODE): {format(val, '04b')}')
  48. self.modbus.write_holding_register(AoReg.OUT_STATE_SAVE.value, val)
  49. # Значения состояний выходов вкл./выкл. (битовое поле)
  50. def set_outputs_mode(self, val):
  51. if self.DBG:
  52. print(Fore.BLUE + f'Write reg {[hex(AoReg.OUT_MODE.value)]} outputs mode (SAVE MODE): {format(val, '04b')}')
  53. self.modbus.write_holding_register(AoReg.OUT_MODE.value, val)
  54. # Значения состояний выходов вкл./выкл. в безопасном режиме (битовое поле)
  55. def set_outputs_mode_save(self, val):
  56. if self.DBG:
  57. print(Fore.BLUE + f'Write reg {[hex(AoReg.OUT_MODE_SAVE.value)]} outputs mode (SAVE MODE): {format(val, '04b')}')
  58. self.modbus.write_holding_register(AoReg.OUT_MODE_SAVE.value, val)
  59. def main():
  60. colorama.init(autoreset=True)
  61. serial_port = Serial('COM24', 115200, timeout=0.05, parity='N', xonxoff=False)
  62. ao_modbus = Modbus(serial_port, 8)
  63. ao = IO_AnalogOutput(ao_modbus)
  64. ao.DBG = True
  65. '''Тесты отдельного модуля аналоговых выходов'''
  66. # ao.sys.get_system_vars()
  67. '''Настройка аналоговых выходов'''
  68. ao.set_outputs_state(0b1111)
  69. ao.set_outputs_state_save(0b1111)
  70. ao.set_outputs_mode(0b0101)
  71. ao.set_outputs_mode_save(0b1010)
  72. '''Чтение режимов работы аналоговых выходов'''
  73. ao.get_outputs_state()
  74. ao.get_outputs_state_save()
  75. ao.get_outputs_mode()
  76. ao.get_outputs_mode_save()
  77. '''Сохранение настроек'''
  78. # ao.sys.save_sattings()
  79. '''Обновление прошивки'''
  80. # ao_modbus.MB_DEBUG = True
  81. # ao.updater.update('fw.bin', 'MAO_4')
  82. if __name__ == '__main__':
  83. main()