TelenkovDmitry 1 anno fa
parent
commit
6af2d6a81f
2 ha cambiato i file con 82 aggiunte e 4 eliminazioni
  1. BIN
      hw_libs/__pycache__/modbus.cpython-310.pyc
  2. 82 4
      hw_libs/io_module.py

BIN
hw_libs/__pycache__/modbus.cpython-310.pyc


+ 82 - 4
hw_libs/io_module.py

@@ -5,7 +5,8 @@ import time
 import os
 
 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_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,}
 
 
@@ -116,6 +117,9 @@ class IO_Module(Modbus):
         data = self.read_holding_registers(reg_table['in_deb_start'] + input - 1, 1)
         return data[0]
 
+    def get_debounce_channels(self):
+        return self.read_holding_registers(reg_table['in_deb_start'], 8)
+
     def set_debounce_channel(self, input, val):
         self.write_holding_register(reg_table['in_deb_start'] + input - 1, val)
 
@@ -152,6 +156,45 @@ class IO_Module(Modbus):
             data = ret[0] & ~(0b1 << (output - 1))
         self.set_outputs_mode(data)
 
+    # 0x0203 - состояние выходов (режим обычного выхода) в безопасном режиме работы
+    def get_outputs_mode_save(self):
+        data = self.read_holding_registers(reg_table['out_mode_save'], 1)
+        return format(data[0], '08b')
+
+    def set_outputs_mode_save(self, val):
+        self.write_holding_register(reg_table['out_mode_save'], val)
+
+    def set_output_mode_save(self, output, val):
+        ret = self.read_holding_registers(reg_table['out_mode_save'], 1)
+        if val == 1:
+            data = ret[0] | (0b1 << (output - 1))
+        else:
+            data = ret[0] & ~(0b1 << (output - 1))
+        self.set_outputs_mode_save(data)
+
+    # 0x0210 - заполнение PWM (%)
+    def get_pwm_duty(self, output):
+        data = self.read_holding_registers(reg_table['pwm_duty'] + output - 1, 1)
+        return data[0]
+    
+    def get_pwm_duty_all(self):
+        return self.read_holding_registers(reg_table['pwm_duty'], 8)
+
+    def set_pwm_duty(self, output, val):
+        self.write_holding_register(reg_table['pwm_duty'] + output - 1, val)
+
+    # 0x0220 - заполнение PWM (%)
+    def get_pwm_duty_all_save(self):
+        return self.read_holding_registers(reg_table['pwm_duty_save'], 8)
+
+    # 0x0230 - период PWM (0.1 сек)
+    def get_pwm_period_all(self):
+        return self.read_holding_registers(reg_table['pwm_per'], 8)
+
+    # 0x0240 - период PWM в безопасном режиме (0.1 сек)
+    def get_pwm_period_all_save(self):
+        return self.read_holding_registers(reg_table['pwm_per_save'], 8)
+
     def get_uptime(self):
         return self.read_uint32_holding(reg_table['uptime'])
 
@@ -167,6 +210,8 @@ def main():
     colorama.init(autoreset=True)
     dev = IO_Module('COM24', 115200, 14)
     dev.MB_DEBUG = False
+    
+    trigger = 0
     # dev.update('fw.bin')
 
     # Запрос системных параметров, установка времени
@@ -190,23 +235,36 @@ def main():
         dev.set_debounce_channel(i, 50 + i)
         dev.set_output(i, 0)
         
+    # 0x0203 - состояние выходов (режим обычного выхода) в безопасном режиме работы
+    for i in range(1, 9):
+        dev.set_output_mode_save(i, 0)
+
+    # 0x0210 - заполнение PWM (ms)
+    for i in range(1, 9):
+        dev.set_pwm_duty(i, 10 + i)    
+
     # Установить 1-ый выход в режим PWM
-    dev.set_output_mode(1, 1)
+    # dev.set_output_mode(1, 0)
 
     # Установить нормальное состояние входов
     # dev.set_inputs_norm_state(0b00110101)
 
+    # print(dev.get_pwm_duty_all())
+
     while True:
         print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
         # Значения входов (битовое поле)
         print('Inputs values [bit field] :', Fore.GREEN + dev.get_inputs_bit())
+
         # Режим работы входов (битовое поле)
         print('Inputs mode [bit field]   :', Fore.GREEN + dev.get_inputs_mode())
+
         # Нормальное состояние входов (битовое поле)
         print('Inputs norm [bit field]   :', Fore.GREEN + dev.get_inputs_norm_state())
+
         # Период антидребезга (ms)
-        for i in range(1, 9):
-            print(f'Debounce input {i} (ms)     :', Fore.GREEN + str(dev.get_debounce_channel(i)))
+        print('Debounce input (ms)       :', Fore.GREEN + ' | '.join(str(el) for el in dev.get_debounce_channels()))
+
         # Значение счетчиков
         data = dev.get_inputs_counters()
         print('Inputs counters           :', Fore.GREEN + ' | '.join(str(el) for el in data))
@@ -214,7 +272,27 @@ def main():
         # Текущее состояние выходов в обычном режиме
         print('Outputs norm [bit field]  :', Fore.GREEN + dev.get_outputs())
 
+        # Состояние выходов в безопасном режиме
+        print('Outputs save [bit field]  :', Fore.GREEN + dev.get_outputs_mode_save())
+
+        # Режим работы выходов
+        print('Outputs mode [bit field]  :', Fore.GREEN + dev.get_outputs_mode())
+
+        # 0x0210 - заполнение PWM (ms)
+        print('PWM duty cycle [%]        :', Fore.GREEN + ' | '.join(str(el) for el in dev.get_pwm_duty_all()))
+
+        # 0x0220 - заполнение PWM в безопасном режиме (ms)
+        print('PWM duty cycle (save) [%] :', Fore.GREEN + ' | '.join(str(el) for el in dev.get_pwm_duty_all_save()))
+
+        # 0x0230 - период PWM (0.1 сек)
+        print('PWM period [0.1 sec]      :', Fore.GREEN + ' | '.join(str(el) for el in dev.get_pwm_period_all()))
         
+        # 0x0240 - период PWM в безопасном режиме (0.1 сек)
+        print('PWM period save [0.1 sec] :', Fore.GREEN + ' | '.join(str(el) for el in dev.get_pwm_period_all_save()))
+
+        # Дергаем одним выходом        
+        # dev.set_output(2, trigger)
+        # trigger = not trigger
 
         # # Для проверки выходов в обычном режиме
         # for i in range(1, 9):