浏览代码

Добавил параметры дискретных входов в odbus

TelenkovDmitry 1 年之前
父节点
当前提交
c569235136

+ 3 - 3
fw/modules/io/input.c

@@ -88,9 +88,9 @@ void in_set(void)
 {
     for (int i = 0; i < DI_NUMBER; i++)
     {
-        if ((settings.mode_bits & (1 << i)) != inputs[i].mode) 
+        if ((settings.di_mode_bits & (1 << i)) != inputs[i].mode) 
         {
-            inputs[i].mode = settings.mode_bits & (1 << i);
+            inputs[i].mode = settings.di_mode_bits & (1 << i);
             if (inputs[i].mode == 0) 
             {
                 inputs[i].cnt = 0;
@@ -156,7 +156,7 @@ inline void debounce(void)
     for (int i = 0; i < DI_NUMBER; i++)
     {
         if ((inputs[i].p_flag) && (inputs[i].mode == 0)){
-            if (++inputs[i].cnt == DEBOUNCE_CNT) {
+            if (++inputs[i].cnt == settings.di_debounce[i]) {
                 inputs[i].cnt = 0;
                 inputs[i].p_flag = false;
             }

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

@@ -48,24 +48,36 @@ void mb_init_params(void)
     
     mb_param[index].reg = 0x0120;
 	mb_param[index].size = 1;
-	mb_param[index].param = (uint8_t*)&settings.mode_bits;  // Режим работы входов
+	mb_param[index].param = (uint8_t*)&settings.di_mode_bits;  // Режим работы входов
 	mb_param[index].set = set_din_mode;
     mb_param[index].get = NULL;
     mb_param[index].check_handler = mb_check_dummy;
     
     index++;
     
-    // TODO Пока дублируем
-    
     mb_param[index].reg = 0x0122;
 	mb_param[index].size = 1;
-	mb_param[index].param = (uint8_t*)&settings.norm_state_bits;  // Нормальное состояние входов
+	mb_param[index].param = (uint8_t*)&settings.di_norm_state_bits;  // Нормальное состояние входов
 	mb_param[index].set = NULL;
     mb_param[index].get = NULL;
     mb_param[index].check_handler = mb_check_dummy;
     
     index++;
  
+    // Счетчики импульсов. Регистры 0x0102 - 0x0111
+    addr = 0x0124;
+    for (int i = 0; i < DI_NUMBER; i++)
+    {
+        mb_param[index].reg = addr;
+        mb_param[index].size = 1;
+        mb_param[index].param = (uint8_t*)&settings.di_debounce[i];  // Счетчик ипульсов
+        mb_param[index].set = NULL;
+        mb_param[index].get = NULL;
+        mb_param[index].check_handler = mb_check_dummy;
+        
+        addr++;
+        index++;
+    }
 }
 
 

+ 1 - 1
fw/modules/modbus/modbus_params.h

@@ -9,7 +9,7 @@
 #include <stdbool.h>
 
 
-#define MB_PARAM_MAX			11
+#define MB_PARAM_MAX			19
 
 
 //

+ 2 - 2
fw/modules/settings/settings_api.c

@@ -218,8 +218,8 @@ void settings_conv_modbus_def(modbus_t *mb_settings, uint16_t *mb_port)
 // Установить параметры дискретных входов по умолчанию
 void settings_din_def(settings_t *settings)
 {
-    settings->mode_bits = 0;
-    settings->norm_state_bits = 0;
+    settings->di_mode_bits = 0;
+    settings->di_norm_state_bits = 0;
     
     for (int i = 0; i < DI_NUMBER; i++) {
         settings->di_debounce[i] = 50;

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

@@ -74,8 +74,8 @@ typedef struct
     uint16_t        settings_version;   // Версия структуры настроек 
     uint32_t        control_word;       // Слово для контроля целостности структуры настроек
     
-    uint16_t        mode_bits;          // режим работы, 0 - вход, 1 - счетчик импульсов
-    uint16_t        norm_state_bits;    // нормальное состояние (0 - разомкнут, 1 - замкнут)        
+    uint16_t        di_mode_bits;          // режим работы, 0 - вход, 1 - счетчик импульсов
+    uint16_t        di_norm_state_bits;    // нормальное состояние (0 - разомкнут, 1 - замкнут)        
     uint16_t        di_debounce[DI_NUMBER];   // Дискретные входы
     
       

二进制
output/fw.bin


文件差异内容过多而无法显示
+ 448 - 423
project/ewarm/iap/iap.dep


文件差异内容过多而无法显示
+ 728 - 706
project/ewarm/module_universal_io.dep


部分文件因为文件数量过多而无法显示