Selaa lähdekoodia

填加延时数据

liyuezong 2 vuotta sitten
vanhempi
commit
26b65c45fb
5 muutettua tiedostoa jossa 50 lisäystä ja 10 poistoa
  1. 3 0
      pro/src/app.c
  2. 2 1
      pro/src/cascade.c
  3. 7 3
      pro/src/cascade.h
  4. 36 6
      pro/src/cascade_slave.c
  5. 2 0
      pro/src/common.h

+ 3 - 0
pro/src/app.c

@@ -173,6 +173,8 @@ void* power_thread(void* arg)
                 _globalDeviceManager->single_mmap->all_ch[_chn].power = _globalPowerInfo._power_info.power *1000;
                 _globalDeviceManager->single_mmap->all_ch[_chn].current = _globalPowerInfo._power_info.current *1000;
                 _globalDeviceManager->single_mmap->chn_status[_chn] = _globalPowerInfo._power_info.status;
+                _globalDeviceManager->single_mmap->open_delay[_chn] = _globalPowerMangerTemp->product_ch_start_delay;
+                _globalDeviceManager->single_mmap->close_delay[_chn] = _globalPowerMangerTemp->product_ch_stop_delay;
             }else if(_globalDeviceManager->_global_device_info->product_pwr_type == SmartPDU_DC)
             {
                 // printf("we get current SmartPDU_DC channel %d data,and consumption=%0.2f voltage=%0.2f current=%0.2f ...\n",
@@ -539,6 +541,7 @@ void* power_thread(void* arg)
             __globalDeviceManage.single_mmap->total_power = _globalTotalPowerInfo._power_info.power;
             __globalDeviceManage.single_mmap->total_valtage = _globalTotalPowerInfo._power_info.voltage;
             __globalDeviceManage.single_mmap->dev_chn = __globalDeviceManage._global_device_info->product_pwr_type << 8 | _chn;
+
         }else if(__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_DC)
         {
             __globalDeviceManage.dc_mmap->i_valtage = _globalTotalPowerInfo._power_info.voltage;

+ 2 - 1
pro/src/cascade.c

@@ -196,7 +196,8 @@ static int slave_get_ch_data(cascade_handle_t *cas)
     list_for_each_entry(tmp, &dm->_globalPowerManger.list, list)
     {
         if(tmp) {
-            cas->chInfo.info[cas->chInfo.cnt] = tmp->_PowerInfo;
+            cas->chInfo.channelinfo[cas->chInfo.cnt].info = tmp->_PowerInfo;
+
             cas->chInfo.cnt++;
         }
     }

+ 7 - 3
pro/src/cascade.h

@@ -113,10 +113,14 @@ typedef struct {
     }channel[CH_MAX];
 }board_info_t;
 
-
+typedef struct {
+    PowerInfo       powerinfo;
+    unsigned short      product_ch_start_delay;           //
+    unsigned short      product_ch_stop_delay  ;        //
+}power_info_t;
 typedef struct {
     uint8_t         cnt;
-    PowerInfo       info[CH_MAX];
+    power_info_t      power_ info[CH_MAX];
 }channel_info_t;
 typedef struct {
     int             product_id;
@@ -130,7 +134,7 @@ typedef struct {
 }phase_info_t;
 typedef struct {
     int             type;
-    PowerInfo       info[3];
+    channel_info_t      channelinfo[3];
     //phase_info_t    ph3[3];
 }overall_info_t;
 

+ 36 - 6
pro/src/cascade_slave.c

@@ -15,23 +15,23 @@ static inline GlobalDeviceManager* get_dm2(void)
     return &__globalDeviceManage2;
 }
 
-
-static mmap_modbus_t modbus_single[]={
+static mmap_modbus_t modbus_single[] = {
     {.offset = 4000},
     {.offset = 4001},
     {.offset = 4769},
     {.offset = 4777},
-
+    {.offset = 4841},
+    {.offset = 4905},
 };
 
- static mmap_modbus_t modbus_dc[]={
+static mmap_modbus_t modbus_dc[] = {
     {.offset = 6000},
     {.offset = 6001},
     {.offset = 6002},
     {.offset = 6003},
     {.offset = 6004},
     {.offset = 6005},
- };
+};
 
 
 
@@ -46,6 +46,8 @@ int cascade_slave_map_init(cascade_handle_t *cas)
         modbus_single[1].addr = &mgr->single_mmap->all_ch;
         modbus_single[2].addr = &mgr->single_mmap->total_valtage;
         modbus_single[3].addr = &mgr->single_mmap->chn_status;
+        modbus_single[4].addr = &mgr->single_mmap->open_delay;
+        modbus_single[5].addr = &mgr->single_mmap->close_delay;
         printf("single address init 4000\n");
     }else if(mgr->_global_device_info->product_pwr_type == SmartPDU_DC)
     {
@@ -118,7 +120,7 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
                 }
             }
             break;
-            case 4777 ... 4841:
+            case 4777 ... 4840:
             {
                 uint32_t *base_addr = (uint32_t *)modbus_single[3].addr;
                 uint32_t step = addr - cas->map->start_registers;
@@ -132,6 +134,34 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
                 }               
             }
             break;
+            case 4841 ... 4904:
+            {
+                uint32_t *base_addr = (uint32_t *)modbus_single[4].addr;
+                uint32_t step = addr - cas->map->start_registers;
+                base_addr = base_addr + (addr - modbus_single[4].offset);
+                uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
+                if (lenth < 126)
+                {
+                    pthread_mutex_lock(&cas->mutex);
+                    memcpy(map_addr, base_addr, 2 * lenth);
+                    pthread_mutex_unlock(&cas->mutex);
+                }
+            }
+            break;
+            case 4905 ... 4968:
+            {
+                uint32_t *base_addr = (uint32_t *)modbus_single[5].addr;
+                uint32_t step = addr - cas->map->start_registers;
+                base_addr = base_addr + (addr - modbus_single[5].offset);
+                uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
+                if (lenth < 126)
+                {
+                    pthread_mutex_lock(&cas->mutex);
+                    memcpy(map_addr, base_addr, 2 * lenth);
+                    pthread_mutex_unlock(&cas->mutex);
+                }
+            }
+            break;
         default:
             break;
         }

+ 2 - 0
pro/src/common.h

@@ -639,6 +639,8 @@ typedef struct cascade_single_mmap{
     uint32_t total_temp;
     uint32_t total_humidity;
     uint16_t chn_status[64];
+    uint16_t open_delay[64];
+    uint16_t close_delay[64];
 }cascade_single_mmap_t;