Bläddra i källkod

Изменения в настройках. Поправил логику безопасного режима.

TelenkovDmitry 4 månader sedan
förälder
incheckning
ce99e49524

+ 21 - 16
fw/modules/io/digital_output.c

@@ -33,9 +33,6 @@ out_t outputs[DO_NUMBER] = {
 };
 
 
-static bool set_value_flag = false; // 
-
-
 //
 void do_init(void)
 {
@@ -66,7 +63,7 @@ void do_init(void)
         output_pwm_period[i] = settings.dout[i].pwm_period;
         
         output_pwm_save[i] = settings.dout_save[i].pwm_duty;
-        output_pwm_period[i] = settings.dout_save[i].pwm_period;
+        output_pwm_period_save[i] = settings.dout_save[i].pwm_period;
          
         // Установка заданного режима и состояния выхода
         if (!save_mode_get())
@@ -169,8 +166,8 @@ void do_set_common(void)
 void do_update(do_t *out, uint8_t i)
 {
     // Если выход выключен - ничего не меняем
-    if (!out->state)
-        return;
+    //if (!out->state)
+    //    return;
   
     // Режим ШИМ
     if (out->mode) {
@@ -178,6 +175,7 @@ void do_update(do_t *out, uint8_t i)
     }
     // Режим обычного выхода
     else {
+        outputs[i].mode = 0;
         do_set_out(&outputs[i], out->value);
     }
 }
@@ -255,23 +253,30 @@ void out_as_pwm(void)
 // Периодический контроль перехода в безопасный режим
 void do_task(void *params)
 {
+    static bool update_flag = false;
+    
     for (;;)
     {
-        if (save_mode_get()) {
-            set_value_flag = true;
-        }  
-        else
-            set_value_flag = false;
-        
-        // Нужно установить параметры выходов
-        if (set_value_flag) {
-            set_value_flag = false;
-            
+        if (save_mode_get() & !update_flag)
+        {
             for (int i = 0; i < DO_NUMBER; i++) 
             {
                 do_update(&settings.dout_save[i], i) ;
+                
+                output_pwm[i] = output_pwm_save[i];
+                output_pwm_period[i] = output_pwm_period_save[i];
             }
+            
+            do_update_field(&settings.dout_save[0].state, &output_state_bit);
+            do_update_field(&settings.dout_save[0].mode, &output_mode_bit);
+            do_update_field(&settings.dout_save[0].value, &output_value_bit);
+            
+            update_flag = true;
         }
+        
+        if (!save_mode_get())
+            update_flag = false;
+
           
         vTaskDelay(100);
     }

+ 1 - 1
fw/modules/io/io_utils.c

@@ -14,7 +14,7 @@ static uint16_t counter = 0;
 //
 void save_mode_init(void)
 {
-    save_mode = settings.save_mode;
+    save_mode = (bool)settings.save_mode;
     save_mode ? mux_led_status(false) : mux_led_status(true);
 }
 

+ 1 - 1
fw/modules/settings/settings_api.h

@@ -152,7 +152,7 @@ typedef struct
     
 #endif    
     
-    bool        save_mode;          // безопасный режим, 0 - выкл, 1 - вкл
+    uint16_t    save_mode;          // безопасный режим, 0 - выкл, 1 - вкл
     uint16_t    save_delay;         // время ожидания опроса (сек.)
       
     uint8_t     info[32];           // Пользовательская информация. Текстовая строка.

BIN
output/fw.bin


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 361 - 352
project/ewarm/iap/iap.dep


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 682 - 692
project/ewarm/module_universal_io.dep


BIN
tools/__pycache__/io_module.cpython-312.pyc


BIN
tools/__pycache__/sys_params.cpython-312.pyc


+ 40 - 7
tools/digital_io.py

@@ -151,9 +151,20 @@ class IO_Digital(IO_Module):
         self.set_outputs(SysUtils.set_bit(ret, output - 1, val))
 
 
+    def set_outputs_save(self, val):
+        'Текущее состояние выходов в обычном режиме'
+        self.modbus.write_holding_register(DioReg.OUT_BITS_SAVE.value, val)
+    
+
+    def set_output_save(self, output, val):
+        'Установить значение на конкретном выходе [1..8]'
+        ret = self.modbus.read_holding_registers(DioReg.OUT_BITS_SAVE.value, 1)
+        self.set_outputs_save(SysUtils.set_bit(ret, output - 1, val))
+
+
     def set_outputs_mode(self, val):
         'Режим работы выходов (битовое поле)'
-        self.modbus.write_holding_register(DioReg.OUT_MODE.value, 1)
+        self.modbus.write_holding_register(DioReg.OUT_MODE.value, val)
 
 
     def set_output_mode(self, output, val):
@@ -164,13 +175,13 @@ class IO_Digital(IO_Module):
 
     def set_outputs_mode_save(self, val):
         'Режим работы выходов в безопасном режиме (битовое поле)'
-        self.modbus.write_holding_register(DioReg.OUT_MODE_SAVE.value, 1)
+        self.modbus.write_holding_register(DioReg.OUT_MODE_SAVE.value, val)
 
 
     def set_output_mode_save(self, output, val):
         'Установить режим работы конкретного выхода [1..8] в безопамном режиме'
         ret = self.modbus.read_holding_registers(DioReg.OUT_MODE_SAVE.value, 1)[0]
-        self.set_outputs_mode(SysUtils.set_bit(ret, output - 1, val))
+        self.set_outputs_mode_save(SysUtils.set_bit(ret, output - 1, val))
 
 
     def print_inputs(self):
@@ -320,16 +331,31 @@ def main():
     '''Режим работы'''
     # print(dio.get_outputs_mode())
     # print(dio.get_outputs_mode_save())
-    # dio.set_outputs_mode(0b0010_1100)
+    # dio.set_outputs_state(0b0000_0001)
+    # dio.set_outputs_mode(0b0000_0000)
+    # dio.set_outputs(0b0000_0001)
+
+
+
     # print(dio.get_outputs_mode())
-    dio.set_outputs(0b1000_1001)
+    
 
 
     '''Текущие значения'''
     # print(dio.get_outputs())
     # print(dio.get_outputs_save())
 
-    # dio.set_output_mode(3, 0)
+    # dio.set_outputs_state(0b1000_0000)
+    # dio.set_output_mode(8, 1)
+    # dio.set_outputs(0b1000_0000)
+
+    # dio.set_outputs_state_save(0b0000_0000)
+    # dio.set_outputs_save(0b0000_0000)
+
+    # dio.set_outputs_state_save(0b1000_0000)
+    # dio.set_output_mode_save(8, 0)
+    # dio.set_outputs_save(0b1000_0000)
+
     # print(dio.get_inputs_mode())
 
     # for i in range(100):
@@ -342,6 +368,13 @@ def main():
     # dio.sys.get_system_vars()
     # print(dio.sys.get_bat_votage())
 
+    '''Безопасный режим'''
+    # print(dio.sys.get_save_delay())
+    # print(dio.sys.get_save_mode())
+    # dio.sys.set_save_mode(0)
+    # print(dio.sys.get_save_mode())
+    dio.sys.set_save_delay(5)
+
     ''' Установить текущее время с учетом часового пояса'''
     # dev.sys.set_rtc()     
 
@@ -369,7 +402,7 @@ def main():
     # print(dev.log.get_archive_entry(0, 1))
 
     '''Сохранение настроек'''
-    # dev.sys.save_sattings()
+    # dio.sys.save_sattings()
 
     '''Настройки'''
 

+ 1 - 0
tools/io_module.py

@@ -20,6 +20,7 @@ class SysUtils:
             word |= 0b1 << number
         else:
             word &= ~(0b1 << number)
+        print(word)
         return word
 
 

+ 1 - 1
tools/sys_params.py

@@ -140,7 +140,7 @@ class IO_SysParams:
             self.modbus.write_holding_register(SysReg.SAVE_MODE.value, value)
 
     def set_save_delay(self, value):
-        if value in range(60, 65536):
+        if value in range(5, 65536):
             self.modbus.write_holding_register(SysReg.SAVE_DELAY.value, value)
 
 

Vissa filer visades inte eftersom för många filer har ändrats