|  | @@ -4,13 +4,25 @@ from colorama import Fore
 | 
	
		
			
				|  |  |  import time
 | 
	
		
			
				|  |  |  import os
 | 
	
		
			
				|  |  |  import struct
 | 
	
		
			
				|  |  | +import random
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +models = {0x100: 'MDIO_88', 0x200: 'MAO_8', 0x300: 'MAI_12'}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +MODEL_MDIO_88 = 0x0100
 | 
	
		
			
				|  |  | +MODEL_MAO_8 = 0x0200
 | 
	
		
			
				|  |  | +MODEL_MAI_12 = 0x0300
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +SYS_TEST_OK = 0x0001
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  reg_table = {'in_bits': 0x0100, 'in_cnt': 0x0102, 'in_mode': 0x0120, 'in_norm': 0x0122, 'in_deb_start': 0x124,
 | 
	
		
			
				|  |  |               'out_cur': 0x0200, 'out_mode': 0x0202, 'out_mode_save': 0x0203, 'pwm_duty': 0x0210,
 | 
	
		
			
				|  |  |               'pwm_duty_save': 0x0220, 'pwm_per': 0x0230, 'pwm_per_save': 0x0240, 
 | 
	
		
			
				|  |  |               'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804, 'uptime': 0x0800, 'log_info': 0x0900, 
 | 
	
		
			
				|  |  |               'log_ent': 0x0901, 'arch_cap': 0x0902, 'arch_ent': 0x0903,
 | 
	
		
			
				|  |  | -             'password': 0x008A}
 | 
	
		
			
				|  |  | +             'model': 0x0080, 'prod_time': 0x0081, 'serial': 0x0083, 'fw_ver': 0x0085, 
 | 
	
		
			
				|  |  | +             'test_status': 0x0089, 'password': 0x008A}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class IO_Module(Modbus):
 | 
	
	
		
			
				|  | @@ -216,8 +228,31 @@ class IO_Module(Modbus):
 | 
	
		
			
				|  |  |      def set_rtc(self, utc):
 | 
	
		
			
				|  |  |          self.write_uint32(reg_table['rtc_sinhro'], utc)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def set_password(self, password):
 | 
	
		
			
				|  |  | -        self.write_holding_register(reg_table['password'], password)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def set_system_vars(dev: IO_Module, password: int):
 | 
	
		
			
				|  |  | +    # Отправка пароля для разблокирования доступа к системным настройкам
 | 
	
		
			
				|  |  | +    dev.write_holding_register(reg_table['password'], password)
 | 
	
		
			
				|  |  | +    time.sleep(0.1)
 | 
	
		
			
				|  |  | +    # Модель
 | 
	
		
			
				|  |  | +    dev.write_holding_register(reg_table['model'], SYS_MODEL_MDIO_88)
 | 
	
		
			
				|  |  | +    # Дата производства
 | 
	
		
			
				|  |  | +    dev.write_holding_register(reg_table['prod_time'], int(time.time()) - 3600*24)
 | 
	
		
			
				|  |  | +    # Серийный номер
 | 
	
		
			
				|  |  | +    dev.write_holding_register(reg_table['serial'], random.randint(10000, 1000000))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Статус тестирования
 | 
	
		
			
				|  |  | +    dev.write_holding_register(reg_table['test_status'], SYS_TEST_OK)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def get_system_vars(dev: IO_Module):
 | 
	
		
			
				|  |  | +    # Модель
 | 
	
		
			
				|  |  | +    model = dev.read_holding_registers(reg_table['model'], 1)[0]
 | 
	
		
			
				|  |  | +    print(type(model))
 | 
	
		
			
				|  |  | +    print(models.get(int(model)))
 | 
	
		
			
				|  |  | +    print(models[model])
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def main():
 | 
	
		
			
				|  |  |      colorama.init(autoreset=True)
 | 
	
	
		
			
				|  | @@ -237,7 +272,7 @@ def main():
 | 
	
		
			
				|  |  |      # unix_time = dev.get_rtc()
 | 
	
		
			
				|  |  |      # print(f'RTC: {time.ctime(unix_time)}. Unix time stamp:  {unix_time}')
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  | -    dev.set_password(1234)
 | 
	
		
			
				|  |  | +    get_system_vars(dev)
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |      return
 | 
	
		
			
				|  |  |  
 |