|
|
@@ -43,6 +43,8 @@ typedef struct {
|
|
|
board_info_t info;
|
|
|
_OverChnPwrAckInfo chInfo;
|
|
|
_OverAllPwrAckInfo allInfo;
|
|
|
+
|
|
|
+ power_info_t pwrInfo;
|
|
|
}cascade_handle_t;
|
|
|
|
|
|
int cur_dev_addr=1;
|
|
|
@@ -131,14 +133,20 @@ static int slave_get_info(cascade_handle_t *cas)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-static int slave_get_ch_info(cascade_handle_t *cas)
|
|
|
+static int slave_get_all_data(cascade_handle_t *cas)
|
|
|
{
|
|
|
+ GlobalDeviceManager *dm=get_dm();
|
|
|
+ GlobalPowerManger *tmp=NULL;
|
|
|
+
|
|
|
+ cas->pwrInfo.cnt=0;
|
|
|
+ list_for_each_entry(tmp, &dm->_globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ if(tmp) {
|
|
|
+ cas->pwrInfo.info[cas->pwrInfo.cnt] = tmp->_PowerInfo;
|
|
|
+ cas->pwrInfo.cnt++;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- return 0;
|
|
|
-}
|
|
|
-static int slave_get_all_info(cascade_handle_t *cas)
|
|
|
-{
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
@@ -372,6 +380,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
int i,t=0;
|
|
|
char buff[80];
|
|
|
board_info_t *info=&cas->info;
|
|
|
+
|
|
|
for(i=0; i<info->cnt; i++) {
|
|
|
if(info->board[i].addr>0) {
|
|
|
t = g_switch_set_all_ctrl(&get_dm()->_globalRelaySampManger, info->board[i].type, info->board[i].addr, (cas->cmd.cmd==CASCADE_CMD_OPEN)?1:0);
|
|
|
@@ -394,7 +403,9 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
case CASCADE_CMD_SAVE:
|
|
|
case CASCADE_CMD_SAVE3:
|
|
|
{
|
|
|
-
|
|
|
+ if(cas->cmd.obj==OBJ_CHANNEL) {
|
|
|
+ //dev_update_power_manage_genera_info(get_dm()->db, get_dm()->_global_device_info->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp);
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -413,23 +424,9 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
switch(cas->cmd.cmd) {
|
|
|
case CASCADE_CMD_QUERY_CH:
|
|
|
{
|
|
|
- if(cas->cmd.obj==OBJ_CHANNEL) {
|
|
|
- //
|
|
|
- }
|
|
|
- else if(cas->cmd.obj==OBJ_OVERALL){
|
|
|
- #if 0
|
|
|
- cas->allInfo._total_voltage.ydata[0] = 1.1f;
|
|
|
- cas->allInfo._total_voltage.ydata[1] = 1.2f;
|
|
|
- cas->allInfo._total_voltage.ydata[2] = 1.3f;
|
|
|
- cas->allInfo._total_voltage.ydata[3] = 1.4f;
|
|
|
-
|
|
|
- cas->allInfo._total_consumption.ydata[0] = 2.1f;
|
|
|
- cas->allInfo._total_consumption.ydata[1] = 2.2f;
|
|
|
- cas->allInfo._total_consumption.ydata[2] = 2.3f;
|
|
|
- cas->allInfo._total_consumption.ydata[3] = 2.4f;
|
|
|
- #endif
|
|
|
-
|
|
|
- memcpy(cas->map->tab_registers+h.reg, ((char*)&cas->allInfo)+sendlen, h.regcnt*2);
|
|
|
+ if(cas->cmd.obj==OBJ_OVERALL){
|
|
|
+ slave_get_all_data(cas);
|
|
|
+ memcpy(cas->map->tab_registers+h.reg, ((char*)&cas->pwrInfo.info)+sendlen, h.regcnt*2);
|
|
|
}
|
|
|
else {
|
|
|
return -1;
|
|
|
@@ -437,47 +434,13 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
- case CASCADE_CMD_QUERY_VOL:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case CASCADE_CMD_QUERY_CUR:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case CASCADE_CMD_QUERY_PWR:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case CASCADE_CMD_QUERY_PWRQ:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case CASCADE_CMD_QUERY_HIS:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case CASCADE_CMD_QUERY_TOTAL:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case CASCADE_CMD_QUERY_TOTAL_PWR:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
+ case CASCADE_CMD_QUERY_VOL:break;
|
|
|
+ case CASCADE_CMD_QUERY_CUR:break;
|
|
|
+ case CASCADE_CMD_QUERY_PWR:break;
|
|
|
+ case CASCADE_CMD_QUERY_PWRQ:break;
|
|
|
+ case CASCADE_CMD_QUERY_HIS:break;
|
|
|
+ case CASCADE_CMD_QUERY_TOTAL:break;
|
|
|
+ case CASCADE_CMD_QUERY_TOTAL_PWR:break;
|
|
|
}
|
|
|
|
|
|
r = _mb_reply(cas, buff, r, cas->map);
|
|
|
@@ -622,8 +585,26 @@ static int power_all_update(cascade_handle_t *cas)
|
|
|
GlobalDeviceManager *dm2=get_dm2();
|
|
|
_OverAllPwrAckInfo *info=&cas->allInfo;
|
|
|
|
|
|
+ if (dm2->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_Tree ||
|
|
|
+ dm2->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_One)
|
|
|
+ {
|
|
|
+ dev_search_latest_t_ac_power_statistic_info(0, 0, info);
|
|
|
+ dev_search_latest_t_ac_power_statistic_info(0, 1, info);
|
|
|
+ dev_search_latest_t_ac_power_statistic_info(0, 2, info);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ GlobalPowerInfo pwrInfo;
|
|
|
+ dev_search_latest_power_info(dm2->db, dm2->_global_device_info->product_id, 0, &pwrInfo);
|
|
|
+ info->voltage = pwrInfo._power_info.voltage ;
|
|
|
+ info->current = pwrInfo._power_info.current ;
|
|
|
+ info->power = pwrInfo._power_info.power ;
|
|
|
+ info->freq = pwrInfo._power_info.freq ;
|
|
|
+ info->consumption = pwrInfo._power_info.consumption ;
|
|
|
+ info->factor = pwrInfo._power_info.factor ;
|
|
|
+ }
|
|
|
|
|
|
- return -1;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static void print_sensor(char *s, sensor_data_t *ss)
|
|
|
@@ -773,18 +754,14 @@ static int master_query(cascade_handle_t *cas)
|
|
|
|
|
|
wdata.dlen = sizeof(*cmd);
|
|
|
wdata.data = (uint8_t*)cmd;
|
|
|
-
|
|
|
+
|
|
|
switch(cmd->cmd) {
|
|
|
|
|
|
case CASCADE_CMD_QUERY_CH:
|
|
|
{
|
|
|
- if(cmd->obj==OBJ_CHANNEL) {
|
|
|
- rdata.dlen = sizeof(chInfo);
|
|
|
- rdata.data = (uint8_t*)&chInfo;
|
|
|
- }
|
|
|
- else if(cmd->obj==OBJ_OVERALL) {
|
|
|
- rdata.dlen = sizeof(allInfo);
|
|
|
- rdata.data = (uint8_t*)&allInfo;
|
|
|
+ if(cmd->obj==OBJ_OVERALL) {
|
|
|
+ rdata.dlen = sizeof(PowerInfo)*cas->info.cnt;
|
|
|
+ rdata.data = (uint8_t*)&cas->pwrInfo.info;
|
|
|
}
|
|
|
else {
|
|
|
return -1;
|
|
|
@@ -984,6 +961,7 @@ int cascade_init(void)
|
|
|
slave_init(cas);
|
|
|
|
|
|
cas->scanAddr = 1;
|
|
|
+ cas->pwrInfo.info = malloc(128*sizeof(PowerInfo));
|
|
|
cas->map = modbus_mapping_new(0,0,MAX_READ_REGS,MAX_WRITE_REGS);
|
|
|
|
|
|
set_modbus(cas, get_mb());
|