Ver Fonte

Разношу архив по модулям.

TelenkovDmitry há 5 meses atrás
pai
commit
b1f22dae49

+ 4 - 4
fw/modules/io/analog_input.c

@@ -195,7 +195,7 @@ bool ai_adc_init(void)
 // Оцифровка всех 16-и каналов (входы + дополнительные каналы)
 void ai_processing(void)
 {
-#if 1
+#if 0
     adc_meas_two_channels(&settings.ai[0], &settings.ai[0 + 6], 
                               &adc_com_raw_data[0], &adc_com_raw_data[0 + 6]);
         
@@ -204,7 +204,7 @@ void ai_processing(void)
     adc_com_fil_data[0 + 6] = average_int(&average_filter[0 + 6], adc_com_raw_data[0 + 6]);
 #endif
     
-#if 0  
+#if 1  
     // 12 основных каналов 
     for (uint8_t i = 0; i < AI_COMMON_NUMBER/2; i++)
     {
@@ -218,7 +218,7 @@ void ai_processing(void)
 #endif
     
     
-#if 0    
+#if 1    
     // 4 дополнительных канала
     for (uint8_t i = 0; i < AI_ADD_NUMBER/2; i++)
     {
@@ -256,7 +256,7 @@ void adc_meas_two_channels(ai_t *one, ai_t *two, uint16_t *out_one, uint16_t *ou
     }            
     
     
-#if 0    
+#if 1    
     // 2 - ой канал
     if (two->state == 0) {
         DBG printf("[two] channel name: %u off\r\n", two->name);

+ 68 - 27
fw/modules/io/analog_output.c

@@ -8,6 +8,7 @@
 #include "dac_transport.h"
 #include "monitoring.h"
 #include "mux.h"
+#include "io_utils.h"
 #include <stdio.h>
 
 #undef DBG
@@ -29,8 +30,35 @@ led_t ao_output_led[4] = {OUT_1_G, OUT_2_G, OUT_3_G, OUT_4_G};
 //
 void ao_init(void)
 {
-    // Зеленые LED сигнализируют (вкл/выкл) входов.
-    ao_led_update();    
+  
+#if 0  
+    // Для тестов
+    settings.ao[0].state = 1;
+    settings.ao[1].state = 1;
+    settings.ao[2].state = 0;
+    settings.ao[3].state = 0;
+    
+    settings.ao[0].value = 30000;
+    settings.ao[1].value = 30000;
+    settings.ao[2].value = 30000;
+    settings.ao[3].value = 30000;
+    
+    settings.ao_save[0].state = 0;
+    settings.ao_save[1].state = 0;
+    settings.ao_save[2].state = 1;
+    settings.ao_save[3].state = 1;
+    
+    settings.ao_save[0].value = 50000;
+    settings.ao_save[1].value = 50000;
+    settings.ao_save[2].value = 50000;
+    settings.ao_save[3].value = 50000;
+#endif    
+    
+    // Зеленые LED сигнализируют (вкл/выкл) входов. Проверка на безопасный режим.
+    if (save_mode_get())
+        ao_led_update(settings.ao_save);
+    else 
+        ao_led_update(settings.ao);
     
     // Сдвиговые регистры
     sh_init();
@@ -38,32 +66,38 @@ void ao_init(void)
     // Внешний DAC
     dac_init();
     
-    // Режир работы выходов
-    ao_mode = settings.ao_mode_bits;
+    // Режир работы выходов.
+    // При старте проверяется состояние безопасного режима в настройках
+    if (save_mode_get()) {
+        ao_mode = settings.ao_mode_save_bits;
+    }
+    else {
+        ao_mode = settings.ao_mode_bits;
+    }
     
+    // Флаг - нужно обновить значения на выходах
+    ao_set_value_flag();
+}
+
+// Вызывается при обновлении статуса безопасного режима работы
+void ao_save_update(bool state)
+{
+    if (state) {
+        ao_led_update(settings.ao_save);
+    }
+    else {
+        ao_led_update(settings.ao);
+    }
+        
     ao_set_value_flag();
-    
-#if 0    
-    // Режим измерения
-    ai_set_meas_mode();
-    
-    // Питание внешних датчиков
-    ai_ext_sens_power(settings.ext_sens_power); 
-    
-    // Внешинй ADC
-    ai_adc_init();
-    
-    // Modbus параметры
-    ai_init_modbus_params();
-#endif    
 }
 
 // Управление LED для выходов
-void ao_led_update(void)
+void ao_led_update(ao_t *ao)
 {
     for (int i = 0; i < AO_NUMBER; i++) 
     {
-        if (settings.ao[i].state)
+        if (ao[i].state)
             leds[ao_output_led[i]].state = LED_ON;
         else
             leds[ao_output_led[i]].state = LED_OFF;
@@ -127,6 +161,9 @@ void ao_set_values(ao_t *ao)
         if (ao[i].state) {
             dac_test((DAC_CHANNEL)i, ao[i].value);
         }
+        else {
+            dac_test((DAC_CHANNEL)i, 0);
+        }
     }
 }
 
@@ -139,21 +176,25 @@ void dac_task(void *params)
         ao_power = sh_ao_mode(ao_mode);
         
         // Обновить значения на выходах
+        // Нужно проверять наличие безопасного режима работы
         if (set_value_flag)
         {
             set_value_flag = false;
-            ao_set_values(&settings.ao[0]);
+            
+            if (save_mode_get()) {
+                ao_set_values(settings.ao_save);
+            }
+            else {
+                ao_set_values(settings.ao);
+            }
         }
         
+        
+        //ao_set_values(settings.ao_save);
+        
         DBG printf("AO_Power: %u\r\n", ao_power);
         
         vTaskDelay(100);
-#if 0        
-        ai_alarm = sh_ai_mode(ai_mode);
-        ai_processing();
-        ai_leds_processing();
-        vTaskDelay(10);
-#endif        
     }
 }
 

+ 3 - 1
fw/modules/io/analog_output.h

@@ -16,8 +16,10 @@ typedef struct
 //
 void ao_init(void);
 
+void ao_save_update(bool state);
+
 //
-void ao_led_update(void);
+void ao_led_update(ao_t *ao);
 
 // 
 void ao_set(void);

+ 25 - 0
fw/modules/io/io_utils.c

@@ -4,6 +4,7 @@
 #include "task.h"
 #include "settings_api.h"
 #include "mux.h"
+#include "analog_output.h"
 #include <stdio.h>
 
 
@@ -33,12 +34,36 @@ bool save_mode_get(void)
 // Должна вызываться раз в секунду
 void save_mode_inc_cnt(void)
 {
+    if (settings.save_mode)
+        return;
+
     bool foo = counter++ > settings.save_delay ? true : false;
     save_mode_set(foo);
 }
 
+// Должна вызываться раз в секунду
+void save_mode_set_with_counter(void)
+{
+    if (!settings.save_mode)
+        return;
+    
+    if (counter++ > settings.save_delay) {
+        if (!save_mode_get()) {
+            save_mode_set(true);
+#if (MAO_4)
+            ao_save_update(true);
+#endif            
+        }
+
+    }
+}
+
 //
 void save_mode_reset_cnt(void)
 {
     counter = 0;
+    save_mode_set(false);
+#if (MAO_4)    
+    ao_save_update(false);
+#endif    
 }

+ 26 - 23
fw/modules/io/io_utils.h

@@ -1,23 +1,26 @@
-#ifndef __IO_UTILS_H
-#define __IO_UTILS_H
-
-#include <stdbool.h>
-
-
-//
-void save_mode_init(void);
-
-//
-void save_mode_set(bool state);
-
-//
-bool save_mode_get(void);
-
-//
-void save_mode_inc_cnt(void);
-
-//
-void save_mode_reset_cnt(void);
-
-#endif  // __IO_UTILS_H
-
+#ifndef __IO_UTILS_H
+#define __IO_UTILS_H
+
+#include <stdbool.h>
+
+
+//
+void save_mode_init(void);
+
+//
+void save_mode_set(bool state);
+
+//
+bool save_mode_get(void);
+
+//
+void save_mode_inc_cnt(void);
+
+//
+void save_mode_set_with_counter(void);
+
+//
+void save_mode_reset_cnt(void);
+
+#endif  // __IO_UTILS_H
+

+ 0 - 2
fw/modules/io/mux.c

@@ -239,7 +239,6 @@ void mux_led_blink(void)
 // false - alarm
 void mux_led_status(bool state)
 {
-/*  
     if (state) {
         leds[STATUS_G].state = LED_ON;
         leds[STATUS_R].state = LED_OFF;
@@ -248,7 +247,6 @@ void mux_led_status(bool state)
         leds[STATUS_G].state = LED_OFF;
         leds[STATUS_R].state = LED_ON;
     }
-*/    
 }
 
 //

+ 20 - 4
fw/modules/log/log.c

@@ -9,6 +9,8 @@
 #include "rtc.h"
 #include "settings_api.h"
 #include "digital_input.h"
+#include "log_ai.h"
+#include "log_dio.h"
 #include <string.h>
 #include <stdio.h>
 #include <inttypes.h>
@@ -159,9 +161,10 @@ void log_init(bool format)
 	}
 	DBG printf("FAT1 true\r\n");
     
-    // ---------------------------------------------------------------------- //
-    // Архив. 8 буфером на каждый канал.
-   
+    
+#if defined (MDIO_88)    
+
+#if 0    
     for (uint8_t i = 0; i < ARCH_CH_NUMBER; i ++) 
     {
         fingfs_flash_ch_arch[i].sector_size = spi_flash_desc.sector_size,
@@ -177,7 +180,19 @@ void log_init(bool format)
         }
         DBG printf("FAT for channel %u is true\r\n", i + 1);
     }
-
+#endif
+    
+    log_dio_archive_init();
+#endif
+    
+#if defined (MAI_12)
+    log_ai_archive_init();
+#endif
+    
+    
+#if 0
+    
+    
     // ---------------------------------------------------------------------- //
 	log_mutex = xSemaphoreCreateMutex();
 
@@ -200,6 +215,7 @@ void log_init(bool format)
     
     // Таймер для ведения архива с разным периодом по разным каналам
     log_init_archive_tim();  
+#endif    
 }
 
 // Настройка таймера на частоту 10 Гц

+ 6 - 1
fw/modules/log/log.h

@@ -36,7 +36,12 @@ extern "C" {
 // -------------------------------------------------------------------------- //
 // Настройки архивов
 
-#define ARCH_CH_NUMBER                  8  
+//#define ARCH_CH_NUMBER                  8  
+  
+#define ARCH_DIO_CH_NUMBER              8
+  
+#define ARCH_AI_CH_NUMBER               12
+  
   
 // События архивов
 typedef enum

+ 36 - 0
fw/modules/log/log_ai.c

@@ -0,0 +1,36 @@
+#include "at32f403a_407.h"
+#include "log_ai.h"
+#include "settings_api.h"
+
+
+#if defined (MAI_12)
+
+
+#undef DBG
+#define DBG if(1)
+
+
+
+// Архив. 12 буферов на каждый канал.
+void log_ai_archive_init(void)
+{
+    for (uint8_t i = 0; i < ARCH_AI_CH_NUMBER; i ++) 
+    {
+        fingfs_flash_ch_arch[i].sector_size = spi_flash_desc.sector_size,
+        
+        fingfs_flash_ch_arch[i].sector_count = ARCHIVE_FLASH_SECTOR_COUNT,
+        
+        ringfs_init(&fs_ch_arch[i], &fingfs_flash_ch_arch[i], 
+                    ARCHIV_ENTRY_VERSION + i, sizeof(archive_entry_t));
+        
+        if (ringfs_scan(&fs_ch_arch[i]) != 0) {
+            DBG printf("FAT for channel %u is false\r\n", i + 1);
+            ringfs_format(&fs_ch_arch[i]);
+        }
+        DBG printf("FAT for channel %u is true\r\n", i + 1);
+    }
+}
+
+
+
+#endif

+ 18 - 0
fw/modules/log/log_ai.h

@@ -0,0 +1,18 @@
+#ifndef __LOG_AI_H
+#define __LOG_AI_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+void log_ai_archive_init(void);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __LOG_AI_H

+ 37 - 0
fw/modules/log/log_dio.c

@@ -0,0 +1,37 @@
+#include "at32f403a_407.h"
+#include "log_dio.h"
+#include "settings_api.h"
+
+
+
+#if defined (MDIO_88)
+
+
+#undef DBG
+#define DBG if(1)
+
+
+// Архив. 8 буферов на каждый канал.
+void log_dio_archive_init(void)
+{
+    for (uint8_t i = 0; i < ARCH_DIO_CH_NUMBER; i ++) 
+    {
+        fingfs_flash_ch_arch[i].sector_size = spi_flash_desc.sector_size,
+        
+        fingfs_flash_ch_arch[i].sector_count = ARCHIVE_FLASH_SECTOR_COUNT,
+        
+        ringfs_init(&fs_ch_arch[i], &fingfs_flash_ch_arch[i], 
+                    ARCHIV_ENTRY_VERSION + i, sizeof(archive_entry_t));
+        
+        if (ringfs_scan(&fs_ch_arch[i]) != 0) {
+            DBG printf("FAT for channel %u is false\r\n", i + 1);
+            ringfs_format(&fs_ch_arch[i]);
+        }
+        DBG printf("FAT for channel %u is true\r\n", i + 1);
+    }
+}
+    
+    
+
+#endif
+

+ 19 - 0
fw/modules/log/log_dio.h

@@ -0,0 +1,19 @@
+#ifndef __LOG_DIO_H
+#define __LOG_DIO_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+//
+void log_dio_archive_init(void);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __LOG_DIO_H

+ 2 - 1
fw/modules/misc/uptime.c

@@ -43,7 +43,8 @@ void TMR1_OVF_TMR10_IRQHandler(void)
         tmr_flag_clear(TMR10, TMR_OVF_FLAG);
         uptime++;
         rtc_unix = RTC_GetUnixTime();
-        save_mode_inc_cnt();
+        //save_mode_inc_cnt();
+        save_mode_set_with_counter();
     }
 }
 

+ 5 - 0
fw/modules/settings/settings_ai.c

@@ -57,6 +57,11 @@ void settings_ai_def(settings_t *settings)
     settings->ai_add[1].name = V_ISO;
     settings->ai_add[2].name = CRNT_LIM_U_BFR_R;
     settings->ai_add[3].name = CRNT_LIM_U_ABFR_R;
+    
+    // Время ведения архива по каждому каналу (сек.)
+    for (uint8_t i = 0; i < ARCH_AI_CH_NUMBER; i++) {
+        settings.period_archive[i] = 3600;
+    }
 }
 
 //

+ 7 - 1
fw/modules/settings/settings_api.c

@@ -116,7 +116,13 @@ uint32_t settings_get_crit_sec_crc(settings_t *settings)
 void settings_set_all_default(void)
 {
     settings_set_modbus_def(&settings.com_settings.mb_port);
-        
+
+    // Безопасный режим
+    settings.save_mode = true;
+    
+    // Время ожидания опроса (сек.)
+    settings.save_delay = 60;
+    
     settings.settings_version = SETTINGS_VERSION;
     settings.critical_section_crc = settings_get_crit_sec_crc(&settings);
     settings.control_word = SETTINGS_CONTROL_WORD;

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

@@ -117,6 +117,8 @@ typedef struct
     uint16_t    do_pwm_save[DO_NUMBER]; // значение заполнения ШИМ в безопасном режиме
     uint16_t    do_pwm_period[DO_NUMBER];  // период ШИМ в [0.1с (10..1000)]
     uint16_t    do_pwm_period_save[DO_NUMBER]; // период ШИМ в безопасном режиме [0.1с (10..1000)]
+    
+    uint16_t    period_archive[ARCH_DIO_CH_NUMBER]; // период архивирования
 #endif
 
 #if defined (MAI_12)
@@ -126,6 +128,8 @@ typedef struct
     uint16_t    ai_state_bits;      // статус входа (для 12 основных), 0 - выкл, 1 - вкл
     uint16_t    ai_mode_bits;       // режим работы входов (для 12 основных), 0 - измерение напряжения, 1 - тока
     uint16_t    ext_sens_power;     // питание внешних датчиков, 0 - выкл, 1 - вкл
+    
+    uint16_t    period_archive[ARCH_AI_CH_NUMBER]; // период архивирования
 #endif    
 
 #if defined (MAO_4)    
@@ -143,7 +147,7 @@ typedef struct
     bool        save_mode;          // безопасный режим, 0 - выкл, 1 - вкл
     uint16_t    save_delay;         // время ожидания опроса (сек.)
       
-    uint16_t    period_archive[ARCH_CH_NUMBER]; // период архивирования
+    
     
 } settings_t;
 

+ 1 - 7
fw/modules/settings/settings_dio.c

@@ -13,14 +13,8 @@ void settings_dio_set_all_default(void)
     // Выходы
     settings_do_def(&settings);
     
-    // Безопасный режим
-    settings.save_mode = 1; 
-    
-    // Время ожидания опроса (сек.)
-    settings.save_delay = 60;
-    
     // Время ведения архива по каждому каналу (сек.)
-    for (uint8_t i = 0; i < ARCH_CH_NUMBER; i++) {
+    for (uint8_t i = 0; i < ARCH_DIO_CH_NUMBER; i++) {
         settings.period_archive[i] = 3600;
     }
 }

+ 3 - 3
fw/user/main.cpp

@@ -116,9 +116,9 @@ void init_task(void *argument)
 // -------------------------------------------------------------------------- //    
 // Безопасный режим, входы, выходы
     
-#if defined (MDIO_88)    
+#if defined (MDIO_88) || (MAO_4)
+    //settings.save_mode = false;
     save_mode_init();
-    save_mode_set(false);   
 #endif
     
 // -------------------------------------------------------------------------- //
@@ -192,7 +192,7 @@ void init_task(void *argument)
     
 // -------------------------------------------------------------------------- //    
 // SPI flash, журнал событий, архив
-#if 0
+#if 1
     common_spi_init();
     spi_flash_init();
     

BIN
output/fw.bin


Diff do ficheiro suprimidas por serem muito extensas
+ 354 - 353
project/ewarm/iap/iap.dep


Diff do ficheiro suprimidas por serem muito extensas
+ 655 - 637
project/ewarm/module_universal_io.dep


+ 7 - 1
project/ewarm/module_universal_io.ewp

@@ -225,7 +225,7 @@
                     <state>AT_START_F403A_V1</state>
                     <state>PRINTF_STDLIB</state>
                     <state>DEBUG</state>
-                    <state>MAO_4</state>
+                    <state>MAI_12</state>
                 </option>
                 <option>
                     <name>CCPreprocFile</name>
@@ -2212,9 +2212,15 @@
                 <file>
                     <name>$PROJ_DIR$\..\..\fw\modules\log\log.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\..\..\fw\modules\log\log_ai.c</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\..\..\fw\modules\log\log_api.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\..\..\fw\modules\log\log_dio.c</name>
+                </file>
             </group>
             <group>
                 <name>misc</name>

+ 6 - 0
project/ewarm/module_universal_io.ewt

@@ -2420,9 +2420,15 @@
                 <file>
                     <name>$PROJ_DIR$\..\..\fw\modules\log\log.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\..\..\fw\modules\log\log_ai.c</name>
+                </file>
                 <file>
                     <name>$PROJ_DIR$\..\..\fw\modules\log\log_api.c</name>
                 </file>
+                <file>
+                    <name>$PROJ_DIR$\..\..\fw\modules\log\log_dio.c</name>
+                </file>
             </group>
             <group>
                 <name>misc</name>

+ 7 - 6
tools/analog_in.py

@@ -147,7 +147,7 @@ class IO_AnalogInput(IO_Module):
 def main():
     colorama.init(autoreset=True)
     
-    serial_port = Serial('COM24', 115200, timeout=0.05, parity='N', xonxoff=False)
+    serial_port = Serial('COM22', 115200, timeout=0.05, parity='N', xonxoff=False)
     
     modbus_tester = Modbus(serial_port, 1)
     # modbus_tester.MB_DEBUG = True
@@ -192,7 +192,7 @@ def main():
     
     # print(ai.get_inputs_state())
     # ai.set_inputs_state(0b1111_1111_1111)
-    ai.set_inputs_state(0b0000_0100_0000)
+    # ai.set_inputs_state(0b0000_0000_0000)
     # ai.set_inputs_state(0b1111_1111_1111)
     # print(ai.get_inputs_state())
     
@@ -200,11 +200,11 @@ def main():
     # ai.set_inputs_state(0b0)
 
     # print(ai.get_inputs_mode())
-    ai.set_inputs_mode(0b0000_0100_0000)
+    # ai.set_inputs_mode(0b0000_0000_0000)
     # print(ai.get_inputs_mode())
 
     '''Питание внешних датчиков'''
-    ai.set_ext_sens_power(1)
+    # ai.set_ext_sens_power(0)
 
     '''Аварии аналоговых входов'''
     # for i in range(100):
@@ -226,10 +226,11 @@ def main():
     '''Вывод на график. Фильтрованные данные'''
     # ai.show_graph(ai.get_fil_inputs, 'AIN_FIL_12')
 
-    # print(ai.sys.get_system_vars())
+    '''Системные настройки'''
+    # ai.sys.get_system_vars()
 
     '''Сохранение настроек'''
-    # ai.sys.save_sattings()
+    ai.sys.save_sattings()
 
     '''Обновление прошивки'''
     # serial_port.timeout = 1

+ 7 - 7
tools/analog_out.py

@@ -91,7 +91,7 @@ class IO_AnalogOutput(IO_Module):
 
 def main():
     colorama.init(autoreset=True)
-    serial_port = Serial('COM24', 115200, timeout=0.05, parity='N', xonxoff=False)
+    serial_port = Serial('COM22', 115200, timeout=0.05, parity='N', xonxoff=False)
     ao_modbus = Modbus(serial_port, 8)
     ao = IO_AnalogOutput(ao_modbus)
     ao.DBG = True
@@ -100,9 +100,9 @@ def main():
     # ao.sys.get_system_vars()
         
     '''Настройка аналоговых выходов'''
-    ao.set_outputs_state(0b1111)
+    # ao.set_outputs_state(0b1111)
     # ao.set_outputs_state_save(0b1111)
-    ao.set_outputs_mode(0b0001)
+    # ao.set_outputs_mode(0b0000)
     # ao.set_outputs_mode_save(0b0000)
 
     '''Чтение режимов работы аналоговых выходов'''
@@ -113,8 +113,8 @@ def main():
     # ao.get_outputs_power()
 
     '''Установка значений на выходах'''
-    values = [35000, 0, 0, 0]
-    ao.set_ouputs_value(1, values[0])
+    # values = [50000, 50000, 50000, 50000]
+    # ao.set_ouputs_value(1, values[0])
     # ao.set_ouputs_value(2, values[1])
     # ao.set_ouputs_value(3, values[2])
     # ao.set_ouputs_value(4, values[3])
@@ -144,8 +144,8 @@ def main():
     # ao.sys.save_sattings()
 
     '''Обновление прошивки'''
-    # ao_modbus.MB_DEBUG = True
-    # ao.updater.update('fw.bin', 'MAO_4')
+    ao_modbus.MB_DEBUG = True
+    ao.updater.update('fw.bin', 'MAO_4')
 
 
 if __name__ == '__main__':

BIN
tools/fw.bin


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff