analog_in.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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 AI_REGS
  9. import matplotlib.pyplot as plt
  10. import matplotlib.animation as animation
  11. class IO_AnalogInput(IO_Module):
  12. GRAPTH_LEN = 100
  13. def __init__(self, modbus: Modbus):
  14. self.modbus = modbus
  15. super().__init__(self.modbus)
  16. self.log = AnalogInputLogReader(self.modbus)
  17. self.fig = plt.figure()
  18. self.in1 = self.fig.add_subplot(1, 1, 1)
  19. # self.in2 = self.fig.add_subplot(1, 1, 2)
  20. self.x = [0]
  21. self.data_in1 = []
  22. # self.data_in2 = []
  23. '''Чтение параметров'''
  24. # Рожим работы входов
  25. def get_inputs_mode(self):
  26. data = self.modbus.read_holding_registers(AI_REGS['ain_mode'], 1)
  27. return format(data[0], '012b')
  28. def get_raw_inputs(self):
  29. data = self.modbus.read_holding_registers(AI_REGS['ain_raw'], 16)
  30. return data
  31. '''Установка параметров'''
  32. def set_inputs_mode(self, val):
  33. self.modbus.write_holding_register(AI_REGS['ain_mode'], val)
  34. '''Вывод параметров'''
  35. def print_raw_inputs(self):
  36. data = self.get_raw_inputs()
  37. print(f"[ADC raw] IN_1: {data[0]}, IN_2: {data[1]}, IN_3: {data[2]}, IN_4: {data[3]}")
  38. print(f"[ADC raw] IN_5: {data[4]}, IN_6: {data[5]}, IN_7: {data[6]}, IN_8: {data[7]}")
  39. print(f"[ADC raw] IN_9: {data[8]}, IN_10: {data[9]}, IN_11: {data[10]}, IN_12: {data[11]}")
  40. print(f"[ADC raw] V_ISO_CL: {data[12]}, V_ISO: {data[13]}")
  41. print(f"[ADC raw] CRNT_LIM_U_BFR_R: {data[14]}, CRNT_LIM_U_ABFR_R: {data[15]}")
  42. '''Вывод данных на график'''
  43. def draw_raw_inputs(self, i):
  44. data = self.get_raw_inputs()
  45. self.data_in1.append(data[0])
  46. # self.data_in2.append(data[1])
  47. self.in1.clear()
  48. self.in1.plot(self.x, self.data_in1)
  49. # self.in2.clear()
  50. # self.in2.plot(self.x, self.data_in2)
  51. if len(self.data_in1) == self.GRAPTH_LEN:
  52. self.data_in1.pop(0)
  53. # self.data_in2.pop(0)
  54. self.x.pop(0)
  55. self.x.append(self.x[-1] + 1)
  56. # print(self.in1)
  57. # print(self.x)
  58. def main():
  59. colorama.init(autoreset=True)
  60. serial_port = Serial('COM24', 115200, timeout=0.05, parity='N', xonxoff=False)
  61. modbus_tester = Modbus(serial_port, 1)
  62. # dev_tester = IO_Digital(modbus_tester)
  63. ai = IO_AnalogInput(modbus_tester)
  64. '''Режим работы аналоговых входов'''
  65. # print(ai.get_inputs_mode())
  66. # ai.set_inputs_mode(0b00011000)
  67. # ai.get_raw_inputs()
  68. # ai.print_raw_inputs()
  69. ani = animation.FuncAnimation(ai.fig, ai.draw_raw_inputs, interval=100)
  70. plt.show()
  71. if __name__ == '__main__':
  72. main()