|
|
@@ -19,18 +19,13 @@ static mmap_modbus_t modbus_single[] = {
|
|
|
{.offset = 4000},
|
|
|
{.offset = 4001},
|
|
|
{.offset = 4769},
|
|
|
- {.offset = 4777},
|
|
|
- {.offset = 4841},
|
|
|
- {.offset = 4905},
|
|
|
-};
|
|
|
-
|
|
|
-static mmap_modbus_t modbus_dc[] = {
|
|
|
- {.offset = 6000},
|
|
|
- {.offset = 6001},
|
|
|
- {.offset = 6002},
|
|
|
- {.offset = 6003},
|
|
|
- {.offset = 6004},
|
|
|
- {.offset = 6005},
|
|
|
+ {.offset = 4779},
|
|
|
+ {.offset = 4843},
|
|
|
+ {.offset = 4971},
|
|
|
+ {.offset = 5000},
|
|
|
+ {.offset = 5064},
|
|
|
+ {.offset = 5128},
|
|
|
+ {.offset = 5192},
|
|
|
};
|
|
|
|
|
|
|
|
|
@@ -39,7 +34,8 @@ int cascade_slave_map_init(cascade_handle_t *cas)
|
|
|
{
|
|
|
GlobalDeviceManager* mgr = get_dm();
|
|
|
|
|
|
- if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC) // single AC
|
|
|
+ if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC ||
|
|
|
+ mgr->_global_device_info->product_pwr_type == SmartPDU_DC) // single AC
|
|
|
{
|
|
|
cas->map = modbus_mapping_new_start_address(0,0,0,0,4000,5000,0,0); //3000 ge
|
|
|
modbus_single[0].addr = &mgr->single_mmap->dev_chn;
|
|
|
@@ -48,17 +44,11 @@ int cascade_slave_map_init(cascade_handle_t *cas)
|
|
|
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)
|
|
|
- {
|
|
|
- cas->map = modbus_mapping_new_start_address(0,0,0,0,6000,5000,0,0); //3000 ge
|
|
|
- modbus_dc[0].addr = &mgr->dc_mmap->dev_chn;
|
|
|
- modbus_dc[1].addr = &mgr->dc_mmap->i_valtage;
|
|
|
- modbus_dc[2].addr = &mgr->dc_mmap->i_current;
|
|
|
- modbus_dc[3].addr = &mgr->dc_mmap->i_power;
|
|
|
- modbus_dc[4].addr = &mgr->dc_mmap->i_consumption;
|
|
|
- modbus_dc[5].addr = &mgr->dc_mmap->o_pw_info;
|
|
|
- printf("dc address init 4000\n");
|
|
|
+ modbus_single[6].addr = &mgr->single_mmap->set_chn_open_delay;
|
|
|
+ modbus_single[7].addr = &mgr->single_mmap->set_chn_close_delay;
|
|
|
+ modbus_single[8].addr = &mgr->single_mmap->set_chn_switch_status;
|
|
|
+ modbus_single[9].addr = &mgr->single_mmap->set_chn_all_switch_status;
|
|
|
+ printf("single dc address init 4000\n");
|
|
|
}else
|
|
|
{
|
|
|
return -1;
|
|
|
@@ -72,13 +62,14 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
|
|
|
{
|
|
|
|
|
|
GlobalDeviceManager* mgr = get_dm();
|
|
|
- if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC)
|
|
|
+ if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC ||
|
|
|
+ mgr->_global_device_info->product_pwr_type == SmartPDU_DC)
|
|
|
{
|
|
|
switch (addr)
|
|
|
{
|
|
|
case 4000:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_single[0].addr;
|
|
|
+ uint16_t *base_addr = (uint16_t *)modbus_single[0].addr;
|
|
|
uint32_t step = addr - cas->map->start_registers;
|
|
|
base_addr = base_addr + (addr - modbus_single[0].offset);
|
|
|
uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
@@ -106,7 +97,7 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 4769 ... 4776:
|
|
|
+ case 4769 ... 4778:
|
|
|
{
|
|
|
uint32_t *base_addr = (uint32_t *)modbus_single[2].addr;
|
|
|
uint32_t step = addr - cas->map->start_registers;
|
|
|
@@ -120,9 +111,9 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 4777 ... 4840:
|
|
|
+ case 4779 ... 4842:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_single[3].addr;
|
|
|
+ uint16_t *base_addr = (uint16_t *)modbus_single[3].addr;
|
|
|
uint32_t step = addr - cas->map->start_registers;
|
|
|
base_addr = base_addr + (addr - modbus_single[3].offset);
|
|
|
uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
@@ -134,9 +125,9 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 4841 ... 4904:
|
|
|
+ case 4843 ... 4906:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_single[4].addr;
|
|
|
+ uint16_t *base_addr = (uint16_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]);
|
|
|
@@ -148,9 +139,9 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 4905 ... 4968:
|
|
|
+ case 4907 ... 4970:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_single[5].addr;
|
|
|
+ uint16_t *base_addr = (uint16_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]);
|
|
|
@@ -162,100 +153,69 @@ void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }else if(mgr->_global_device_info->product_pwr_type == SmartPDU_DC)
|
|
|
- {
|
|
|
- switch (addr)
|
|
|
- {
|
|
|
- case 6000:
|
|
|
- {
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_dc[0].addr;
|
|
|
- uint32_t step = addr - cas->map->start_registers;
|
|
|
- base_addr = base_addr + (addr - modbus_dc[0].offset);
|
|
|
- uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
- printf("step = %d base_addr = 0x%x map_addr = 0x%x\n", step,base_addr,map_addr);
|
|
|
- if(lenth < 126)
|
|
|
- {
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- memcpy(map_addr, base_addr,2*lenth);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case 6001:
|
|
|
+ case 4971 ... 4999:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_dc[1].addr;
|
|
|
- uint32_t step = addr - cas->map->start_registers;
|
|
|
- base_addr = base_addr + (addr - modbus_dc[1].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 6002:
|
|
|
+ case 5000 ... 5063:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_dc[2].addr;
|
|
|
+ uint16_t *base_addr = (uint16_t *)modbus_single[6].addr;
|
|
|
uint32_t step = addr - cas->map->start_registers;
|
|
|
- base_addr = base_addr + (addr - modbus_dc[2].offset);
|
|
|
+ base_addr = base_addr + (addr - modbus_single[6].offset);
|
|
|
uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
- if(lenth < 126)
|
|
|
+ if (lenth < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- memcpy(map_addr, base_addr,2*lenth);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
+ pthread_mutex_lock(&cas->mutex);
|
|
|
+ memcpy(map_addr, base_addr, 2 * lenth);
|
|
|
+ pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 6003:
|
|
|
+ case 5064 ... 5127:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_dc[3].addr;
|
|
|
+ uint16_t *base_addr = (uint16_t *)modbus_single[7].addr;
|
|
|
uint32_t step = addr - cas->map->start_registers;
|
|
|
- base_addr = base_addr + (addr - modbus_dc[3].offset);
|
|
|
+ base_addr = base_addr + (addr - modbus_single[7].offset);
|
|
|
uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
- if(lenth < 126)
|
|
|
+ if (lenth < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- memcpy(map_addr, base_addr,2*lenth);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
+ pthread_mutex_lock(&cas->mutex);
|
|
|
+ memcpy(map_addr, base_addr, 2 * lenth);
|
|
|
+ pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 6004:
|
|
|
+ case 5128 ... 5191:
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_dc[4].addr;
|
|
|
+ uint16_t *base_addr = (uint16_t *)modbus_single[8].addr;
|
|
|
uint32_t step = addr - cas->map->start_registers;
|
|
|
- base_addr = base_addr + (addr - modbus_dc[4].offset);
|
|
|
+ base_addr = base_addr + (addr - modbus_single[8].offset);
|
|
|
uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
- if(lenth < 126)
|
|
|
+ if (lenth < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- memcpy(map_addr, base_addr,2*lenth);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
+ pthread_mutex_lock(&cas->mutex);
|
|
|
+ memcpy(map_addr, base_addr, 2 * lenth);
|
|
|
+ pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 6005 ... 6260:
|
|
|
+ case 5192 :
|
|
|
{
|
|
|
- uint32_t *base_addr = (uint32_t *)modbus_dc[5].addr;
|
|
|
+ uint16_t *base_addr = (uint16_t *)modbus_single[9].addr;
|
|
|
uint32_t step = addr - cas->map->start_registers;
|
|
|
- base_addr = base_addr + (addr - modbus_dc[5].offset);
|
|
|
+ base_addr = base_addr + (addr - modbus_single[9].offset);
|
|
|
uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
- if(lenth < 126)
|
|
|
+ if (lenth < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
- memcpy(map_addr, base_addr,2*lenth);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
+ pthread_mutex_lock(&cas->mutex);
|
|
|
+ memcpy(map_addr, base_addr, 2 * lenth);
|
|
|
+ pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- default:
|
|
|
- break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -266,100 +226,114 @@ void cascade_slave_write(cascade_handle_t *cas, uint32_t addr, uint16_t val)
|
|
|
{
|
|
|
GlobalDeviceManager* mgr = get_dm();
|
|
|
uint16_t buff[128] = {0};
|
|
|
- if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC)
|
|
|
+ if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC || mgr->_global_device_info->product_pwr_type == SmartPDU_DC)
|
|
|
{
|
|
|
switch(addr)
|
|
|
{
|
|
|
- case 5128 ... 5191:
|
|
|
+ case 5000 ... 5063:
|
|
|
{
|
|
|
- int start_chn = addr - 5128 + 1;
|
|
|
+ int start_chn = addr - modbus_single[6].offset;
|
|
|
GlobalPowerManger* _globalPowerMangerTemp = NULL ;
|
|
|
-
|
|
|
list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
{
|
|
|
-
|
|
|
- if(_globalPowerMangerTemp==NULL)
|
|
|
+ if(_globalPowerMangerTemp==NULL)
|
|
|
break;
|
|
|
if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
|
|
|
{
|
|
|
- int ret=g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp,
|
|
|
- _globalPowerMangerTemp->product_saddr,
|
|
|
- _globalPowerMangerTemp->product_ch_addr,
|
|
|
- val,false);
|
|
|
- // printf("ret = %d 0x%x\n",ret,val);
|
|
|
+ if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC){
|
|
|
+ _globalPowerMangerTemp->product_ch_start_delay=val;
|
|
|
+ g_switch_set_ac_single_s_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
|
|
|
+ _globalPowerMangerTemp->product_ch_addr,val);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ _globalPowerMangerTemp->product_ch_start_delay=val;
|
|
|
+ g_switch_set_dcpdu_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
|
|
|
+ _globalPowerMangerTemp->product_ch_addr,val/1000);
|
|
|
+ }
|
|
|
+ if (dev_update_power_manage_genera_info(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
|
|
|
+ {
|
|
|
+ log_e("update pwr general data err.");
|
|
|
+ }
|
|
|
+ printf("val = %d start_chn = %d\n",val,start_chn);
|
|
|
+ // *(uint16_t *)((uint16_t*)(modbus_single[6].addr) + start_chn) = val;
|
|
|
break;
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
break;
|
|
|
- case 5192:
|
|
|
+ case 5064 ... 5127:
|
|
|
{
|
|
|
+ int start_chn = addr - modbus_single[7].offset;
|
|
|
GlobalPowerManger* _globalPowerMangerTemp = NULL ;
|
|
|
list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
{
|
|
|
if(_globalPowerMangerTemp==NULL)
|
|
|
- break;
|
|
|
- int rec=g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,val);
|
|
|
- //printf("rec = %d 0x%x\n",rec,val);
|
|
|
+ break;
|
|
|
+ if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
|
|
|
+ {
|
|
|
+ if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC){
|
|
|
+ _globalPowerMangerTemp->product_ch_stop_delay=val;
|
|
|
+ g_switch_set_ac_single_s_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
|
|
|
+ _globalPowerMangerTemp->product_ch_addr,val);
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ _globalPowerMangerTemp->product_ch_stop_delay=val;
|
|
|
+ g_switch_set_dcpdu_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
|
|
|
+ _globalPowerMangerTemp->product_ch_addr,val/1000);
|
|
|
+ }
|
|
|
+ if (dev_update_power_manage_genera_info(__globalDeviceManage.db, _globalPowerMangerTemp->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp) != 0)
|
|
|
+ {
|
|
|
+ log_e("update pwr general data err.");
|
|
|
+ }
|
|
|
+ printf("val = %d",val);
|
|
|
+ //*(uint16_t *)((uint16_t*)(modbus_single[7].addr) + start_chn) = val;
|
|
|
+ //printf("modbus_single[7].addr = %d ",modbus_single[7].addr);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
-
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }else if(mgr->_global_device_info->product_pwr_type == SmartPDU_DC)
|
|
|
- {
|
|
|
- switch (addr)
|
|
|
- {
|
|
|
- case 6756 ... 6819:
|
|
|
+ case 5128 ... 5191:
|
|
|
{
|
|
|
- int start_chn = addr - 6756 + 1;
|
|
|
- GlobalPowerManger* _globalPowerMangerTemp = NULL;
|
|
|
-
|
|
|
+ int start_chn = addr - modbus_single[8].offset;
|
|
|
+ GlobalPowerManger* _globalPowerMangerTemp = NULL ;
|
|
|
+ if (val == 0 || val == 1)
|
|
|
+ {
|
|
|
list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
{
|
|
|
-
|
|
|
- if(_globalPowerMangerTemp==NULL)
|
|
|
+ if (_globalPowerMangerTemp == NULL)
|
|
|
break;
|
|
|
- if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
|
|
|
+ if ((start_chn + 1) == _globalPowerMangerTemp->product_ch_id)
|
|
|
{
|
|
|
- int ret=g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp,
|
|
|
- _globalPowerMangerTemp->product_saddr,
|
|
|
- _globalPowerMangerTemp->product_ch_addr,
|
|
|
- val,false);
|
|
|
+ int ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp,
|
|
|
+ _globalPowerMangerTemp->product_saddr,
|
|
|
+ _globalPowerMangerTemp->product_ch_addr,
|
|
|
+ val, false);
|
|
|
+ // printf("ret = %d 0x%x\n",ret,val);
|
|
|
+ *(uint16_t *)((uint16_t *)(modbus_single[8].addr) + start_chn) = val;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- break;
|
|
|
- case 7012:
|
|
|
- {
|
|
|
-
|
|
|
- GlobalPowerManger* _globalPowerMangerTemp = NULL ;
|
|
|
- list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
- {
|
|
|
- if(_globalPowerMangerTemp==NULL)
|
|
|
- break;
|
|
|
- if(val == 0x1)
|
|
|
- g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,1);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
- case 7013:
|
|
|
+ case 5192:
|
|
|
{
|
|
|
-
|
|
|
- GlobalPowerManger* _globalPowerMangerTemp = NULL ;
|
|
|
- list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
+ if (val == 0 || val == 1)
|
|
|
{
|
|
|
- if(_globalPowerMangerTemp==NULL)
|
|
|
- break;
|
|
|
- if(val == 0x1)
|
|
|
- g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_ch_type,_globalPowerMangerTemp->product_saddr,0);
|
|
|
+ GlobalPowerManger *_globalPowerMangerTemp = NULL;
|
|
|
+ list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ if (_globalPowerMangerTemp == NULL)
|
|
|
+ break;
|
|
|
+ int rec = g_switch_set_all_ctrl(&__globalDeviceManage._globalRelaySampManger, _globalPowerMangerTemp->product_ch_type, _globalPowerMangerTemp->product_saddr, val);
|
|
|
+ // printf("rec = %d 0x%x\n",rec,val);
|
|
|
+ }
|
|
|
+ *(uint16_t *)(modbus_single[9].addr) = val;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
+
|
|
|
default:
|
|
|
break;
|
|
|
}
|