Browse Source

Тестирование...

unknown 7 months ago
parent
commit
d748202105

+ 11 - 1
fw/modules/misc/soft_wdt.c

@@ -5,6 +5,15 @@
 #include "common_gpio.h"
 
 
+bool wdt_stop = false;
+
+
+//
+void soft_wdt_dtop(bool value)
+{
+    wdt_stop = value;
+}
+
 
 //
 void soft_wdt(void *params)
@@ -13,7 +22,8 @@ void soft_wdt(void *params)
     
     for (;;)
     {
-        extern_wdt_togle(); // extern WDT
+        if (!wdt_stop)
+            extern_wdt_togle(); // extern WDT
         vTaskDelay(100);
     }
 }

+ 9 - 0
fw/modules/misc/soft_wdt.h

@@ -1,7 +1,16 @@
 #ifndef __SOFT_WDT_H
 #define __SOFT_WDT_H
 
+#include <stdbool.h>
 
+
+#define MB_COM_STOP_WDT     20
+
+
+//
+void soft_wdt_dtop(bool value);
+
+//
 void soft_wdt(void *params);
 
 

+ 4 - 0
fw/modules/modbus/modbus_params.c

@@ -17,6 +17,7 @@
 #include "common_gpio.h"
 #include "monitoring.h"
 #include "rtc_battery.h"
+#include "soft_wdt.h"
 #include <string.h>
 
 
@@ -597,6 +598,9 @@ mb_delay_action_t mb_control(void)
         arch_channel = system_cmd;
         return MB_ARCHIVE_CLEAR;
     }
+    else if (system_cmd == MB_COM_STOP_WDT)
+        soft_wdt_dtop(true);
+      
     return MB_NO_ACTION;
     
 #if 0

BIN
output/fw.bin


File diff suppressed because it is too large
+ 433 - 430
project/ewarm/iap/iap.dep


File diff suppressed because it is too large
+ 916 - 902
project/ewarm/module_universal_io.dep


+ 4 - 1
tools/mb_registers.py

@@ -89,4 +89,7 @@ class SysReg(Enum):
     ERR         = 0x0809 # Состояние модуля
     INFO        = 0x080B # Текстовая строка (пользовательская информация)
     SAVE_MODE   = 0x081B # Безопасный режим работы (0-выкл, 1-вкл)
-    SAVE_DELAY  = 0x081C # Время до перехода в безопасный режим
+    SAVE_DELAY  = 0x081C # Время до перехода в безопасный режим
+
+    '''Команды'''
+    WDT_STOP    = 0x0014 # Отключить watchdog (программно) 

+ 4 - 0
tools/sys_params.py

@@ -149,6 +149,10 @@ class IO_SysParams:
         if value in range(5, 65536):
             self.modbus.write_holding_register(SysReg.SAVE_DELAY.value, value)
 
+    def wdt_stop(self):
+        """Программно отключает watchdog"""
+        self.modbus.write_holding_register(SysReg.COMMAND.value, SysReg.WDT_STOP.value)
+
 
 # def set_manager_register(dev: IO_Module, commands: list):
 #     foo = 0

+ 37 - 6
tools/tester_dio.py

@@ -101,10 +101,9 @@ class DIO_Tester(Tester):
 
 
     def test_all_do(self):
-        while True:
-            for i in range(1, 9):
-                self.test_do(i)
-                time.sleep(0.3)
+        for i in range(1, 9):
+            self.test_do(i)
+            time.sleep(0.3)
 
 
 
@@ -133,10 +132,12 @@ class DIO_Tester(Tester):
             print(Fore.RED + f'Время не соответствует реальному. ERROR.')
         else:
             print(Fore.GREEN + 'Тест RTC и переключателя адреса. OK.')
+            print(Fore.YELLOW + "Установите modbus адрес в значение 2 и нажмите 'Enter'.")
+            input()
  
 
     def test_led(self):
-
+        print("[Тест... Проверка LED")
         # Зеленые LED индикациии входов
         print(Fore.YELLOW + "Посмотрите на зеленые светодиоды индикации входов")
         self.tester.set_output(2, 1)
@@ -181,6 +182,30 @@ class DIO_Tester(Tester):
         input()
 
 
+    def test_battery_voltage(self):
+        print("[Тест... Проверка схемы измерения напряжения батарейки CR2032]")
+        bat_voltage = self.dut.sys.get_bat_votage()/1000.0
+        if bat_voltage < 3.1:
+            print(Fore.RED + f' Результат: Напряжение батареи слишком низкое {bat_voltage}. ERROR.')
+        else:
+            print(Fore.GREEN + f' Результат: Напряжение батареи в норме: {bat_voltage}. OK')
+
+
+    def test_wdt(self):
+        print("[Тест... Проверка WDT]")
+        old_uptime = self.dut.sys.get_uptime()
+        time.sleep(4)
+        self.dut.sys.wdt_stop()
+        time.sleep(2)
+        new_uptime = self.dut.sys.get_uptime()
+        if new_uptime > old_uptime:
+            print(Fore.RED + ' Результат: Ошибка работы WDT [Error]')
+        else:
+            print(Fore.GREEN + f' Результат: WDT работает. OK')
+
+
+
+
     def foo(self):
         print(self.modbus_dut.address)
         print(self.modbus_tester.address)
@@ -202,7 +227,9 @@ class DIO_Tester(Tester):
                         'Тест цифровых входов',
                         'Тест выхода 1',
                         'Тест RTC',
-                        'Тест LED'],
+                        'Тест LED',
+                        'Тест напряжения батареи CR2032',
+                        'Тест WDT'],
             ),
 	    ]
         answers = inquirer.prompt(questions)
@@ -223,6 +250,10 @@ class DIO_Tester(Tester):
             self.test_rtc()
         elif answers['action'] == 'Тест LED':
             self.test_led()
+        elif answers['action'] == 'Тест напряжения батареи CR2032':
+            self.test_battery_voltage()
+        elif answers['action'] == 'Тест WDT':
+            self.test_wdt()
 
 
 

Some files were not shown because too many files changed in this diff