123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- from io_module import IO_Module
- from modbus import Modbus, MBError, NoResponseError
- from log_reader import DigitalLogReader
- import log_reader
- import colorama
- from colorama import Fore
- from time import sleep
- import time
- from datetime import datetime, timedelta, timezone
- from mb_registers import DIO_REGS
- class IO_Digital(IO_Module):
- def __init__(self, tty: str, brate: int, address: int):
- self.modbus = Modbus(tty, brate, address)
- super().__init__(self.modbus)
- self.log = DigitalLogReader(self.modbus)
-
- '''Запрос параметров'''
- # 0x0100 - текущее состояние входов
- def get_inputs_bit(self) -> str:
- data = self.modbus.read_holding_registers(DIO_REGS['in_bits'], 1)
- return format(data[0], '08b')
- # 0x0101 - 0x0110 Счетчики импульсов
- def get_inputs_counters(self):
- data = []
- for i in range(DIO_REGS['in_cnt'], DIO_REGS['in_cnt'] + 16, 2):
- data.append(self.modbus.read_uint32_holding(i))
- return data
- # 0x0101 - 0x0110 Счетчики импульсов
- def get_inputs_counters(self):
- data = []
- for i in range(DIO_REGS['in_cnt'], DIO_REGS['in_cnt'] + 16, 2):
- data.append(self.modbus.read_uint32_holding(i))
- return data
- # 0x0120 - режим работы входов
- def get_inputs_mode(self):
- data = self.modbus.read_holding_registers(DIO_REGS['in_mode'], 1)
- return format(data[0], '08b')
- # 0x0122 - нормальное состояние входов
- def get_inputs_norm_state(self):
- data = self.modbus.read_holding_registers(DIO_REGS['in_norm'], 1)
- return format(data[0], '08b')
- # 0x0124 - время антидребезга (ms)
- def get_debounce_channel(self, input):
- data = self.modbus.read_holding_registers(DIO_REGS['in_deb_start'] + input - 1, 1)
- return data[0]
- def get_debounce_channels(self):
- return self.modbus.read_holding_registers(DIO_REGS['in_deb_start'], 8)
- '''Установка параметров'''
- def set_inputs_mode(self, val):
- self.modbus.write_holding_register(DIO_REGS['in_mode'], val)
- #
- def set_input_mode(self, input, val):
- ret = self.modbus.read_holding_registers(DIO_REGS['in_mode'], 1)
- if val == 1:
- data = ret[0] | (0b1 << (input - 1))
- else:
- data = ret[0] & ~(0b1 << (input - 1))
- self.set_inputs_mode(data)
- def print_inputs(self):
- # Значения входов (битовое поле)
- print('Inputs values [bit field] :', Fore.GREEN + self.get_inputs_bit())
- # Значение счетчиков
- data = self.get_inputs_counters()
- print('Inputs counters :', Fore.GREEN + ' | '.join(str(el) for el in data))
- # Режим работы входов (битовое поле)
- print('Inputs mode [bit field] :', Fore.GREEN + self.get_inputs_mode())
- # Нормальное состояние входов (битовое поле)
- print('Inputs norm [bit field] :', Fore.GREEN + self.get_inputs_norm_state())
- # Период антидребезга (ms)
- print('Debounce input (ms) :', Fore.GREEN + ' | '.join(str(el) for el in self.get_debounce_channels()))
- def main():
- colorama.init(autoreset=True)
- dev = IO_Digital('COM24', 115200, 15)
- dev.modbus.MB_DEBUG = False
- '''Системные переменные и параметры'''
- dev.sys.get_system_vars()
- ''' Установить текущее время с учетом часового пояса'''
- # dev.sys.set_rtc()
-
- '''Лог и архив. Настройки лога.'''
- # dev.log.get_log_info()
- # dev.log.get_random_entries()
- # for i in range(8):
- # dev.log.set_archive_period(5 + i*2, i)
-
- # dev.log.get_log_info()
- # dev.log.get_all_archive()
- # dev.log.get_all_log()
-
- # dev.log.log_clear()
- # dev.log.archive_clear()
- '''Лог'''
- # dev.log.get_all_log()
- '''Архив'''
- # dev.log.get_all_archive()
- # print(dev.log.get_archive_entry(0, 1))
- '''Сохранение настроек'''
- # dev.sys.save_sattings()
- '''Настройки'''
- '''Регистры модуля'''
- # dev.print_inputs()
- '''Настройи модуля'''
- # for i in range(1, 9):
- # dev.set_input_mode(i, 1)
- # print('Inputs mode [bit field] :', Fore.GREEN + dev.get_inputs_mode())
- # dev.set_input_mode(4, 1)
- # dev.print_inputs()
- '''Обновление'''
- # dev.updater.update('fw.bin', 'MDIO-88')
-
-
- if __name__ == '__main__':
- main()
|