TelenkovDmitry преди 1 година
родител
ревизия
a24252cde5
променени са 1 файла, в които са добавени 35 реда и са изтрити 5 реда
  1. 35 5
      hw_libs/io_module.py

+ 35 - 5
hw_libs/io_module.py

@@ -5,7 +5,7 @@ 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_cur': 0x0200, 'out_mode': 0x0202,
              'rtc_unix': 0x0802, 'rtc_sinhro': 0x0804, 'uptime': 0x0800,}
 
 
@@ -120,7 +120,7 @@ class IO_Module(Modbus):
         self.write_holding_register(reg_table['in_deb_start'] + input - 1, val)
 
     # 0x0200 - текущее состояние выходов в обычно режиме
-    def get_output(self):
+    def get_outputs(self):
         data = self.read_holding_registers(reg_table['out_cur'], 1)
         return format(data[0], '08b')
 
@@ -136,6 +136,22 @@ class IO_Module(Modbus):
             data = ret[0] & ~(0b1 << (output - 1))
         self.set_outputs(data)
 
+    # 0x0202 - режим работы выходов; 0 - обычный, 1 - ШИМ
+    def get_outputs_mode(self):
+        data = self.read_holding_registers(reg_table['out_mode'], 1)
+        return format(data[0], '08b')
+    
+    def set_outputs_mode(self, val):
+        self.write_holding_register(reg_table['out_mode'], val)
+
+    def set_output_mode(self, output, val):
+        ret = self.read_holding_registers(reg_table['out_mode'], 1)
+        if val == 1:
+            data = ret[0] | (0b1 << (output - 1))
+        else:
+            data = ret[0] & ~(0b1 << (output - 1))
+        self.set_outputs_mode(data)
+
     def get_uptime(self):
         return self.read_uint32_holding(reg_table['uptime'])
 
@@ -173,7 +189,10 @@ def main():
     for i in range(1, 9):
         dev.set_debounce_channel(i, 50 + i)
         dev.set_output(i, 0)
-    
+        
+    # Установить 1-ый выход в режим PWM
+    dev.set_output_mode(1, 1)
+
     # Установить нормальное состояние входов
     # dev.set_inputs_norm_state(0b00110101)
 
@@ -193,9 +212,9 @@ def main():
         print('Inputs counters           :', Fore.GREEN + ' | '.join(str(el) for el in data))
 
         # Текущее состояние выходов в обычном режиме
-        print('Outputs norm [bit field]  :', Fore.GREEN + dev.get_output())
-
+        print('Outputs norm [bit field]  :', Fore.GREEN + dev.get_outputs())
 
+        
 
         # # Для проверки выходов в обычном режиме
         # for i in range(1, 9):
@@ -208,6 +227,17 @@ def main():
         #     print('Outputs norm [bit field]  :', Fore.GREEN + dev.get_output())
         #     time.sleep(0.1)
 
+        # # Режим работы выходов
+        # for i in range(1, 9):
+        #     dev.set_output_mode(i, 1)
+        #     print('Outputs mode [bit field]  :', Fore.GREEN + dev.get_outputs_mode())
+        #     time.sleep(0.1)
+
+        # for i in range(1, 9):
+        #     dev.set_output_mode(i, 0)
+        #     print('Outputs mode [bit field]  :', Fore.GREEN + dev.get_outputs_mode())
+        #     time.sleep(0.1)
+
         # break
         time.sleep(1)