|
|
@@ -185,23 +185,6 @@ static int reset_consump(power_handle_t *h, int type, int addr)
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
|
-static board_data_t* board_next(power_handle_t *h)
|
|
|
-{
|
|
|
- uint8_t addr=h->cur_addr;
|
|
|
- while(1) {
|
|
|
- h->cur_addr++;
|
|
|
- if(h->cur_addr>h->brd_max) {
|
|
|
- h->cur_addr = 1;
|
|
|
- }
|
|
|
- else if(h->cur_addr==addr) {
|
|
|
- return h->pbrd[h->cur_addr];
|
|
|
- }
|
|
|
- if(h->pbrd[h->cur_addr]) {
|
|
|
- return h->pbrd[h->cur_addr];
|
|
|
- }
|
|
|
- }
|
|
|
- return NULL;
|
|
|
-}
|
|
|
static uint8_t get_ch_idx(board_data_t *pbrd, uint8_t sch)
|
|
|
{
|
|
|
uint8_t ch=0;
|
|
|
@@ -229,17 +212,22 @@ static int threshold_proc(power_handle_t *h, board_data_t *pbrd)
|
|
|
pch = &pbrd->pch[i];
|
|
|
if(h->prod->pwr_type==PDU_AC_I3O3) {
|
|
|
times = 3;
|
|
|
+
|
|
|
+ //设置为输出三相且三相有缺失则报警
|
|
|
+ if(pch->info.ph_val && pbrd->ph_loss) {
|
|
|
+ //trigger alarm event here ...
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
for(j=0; j<times; j++) {
|
|
|
if(pch->thr.v_upper.en) {
|
|
|
- if(pch->power[i].voltage>pch->thr.v_upper.val) {
|
|
|
+ if(pch->power[j].voltage>pch->thr.v_upper.val) {
|
|
|
if(pch->alarm.v_upper==0) {
|
|
|
pch->alarm.v_upper = 1;
|
|
|
//trigger alarm event here ...
|
|
|
}
|
|
|
}
|
|
|
- else if(pch->power[i].voltage<pch->thr.v_lower.val) {
|
|
|
+ else if(pch->power[j].voltage<pch->thr.v_lower.val) {
|
|
|
if(pch->alarm.v_lower==0) {
|
|
|
pch->alarm.v_lower = 1;
|
|
|
//trigger alarm event here ...
|
|
|
@@ -252,7 +240,7 @@ static int threshold_proc(power_handle_t *h, board_data_t *pbrd)
|
|
|
}
|
|
|
|
|
|
if(pch->thr.c_upper.en) {
|
|
|
- if(pch->power[i].current>pch->thr.c_upper.val) {
|
|
|
+ if(pch->power[j].current>pch->thr.c_upper.val) {
|
|
|
if(pch->alarm.c_upper==0) {
|
|
|
pch->alarm.c_upper = 1;
|
|
|
//trigger alarm event here ...
|
|
|
@@ -264,7 +252,7 @@ static int threshold_proc(power_handle_t *h, board_data_t *pbrd)
|
|
|
}
|
|
|
|
|
|
if(pch->thr.p_upper.en) {
|
|
|
- if(pch->power[i].power>pch->thr.p_upper.val) {
|
|
|
+ if(pch->power[j].power>pch->thr.p_upper.val) {
|
|
|
if(pch->alarm.p_upper==0) {
|
|
|
pch->alarm.p_upper = 1;
|
|
|
//trigger alarm event here ...
|
|
|
@@ -276,7 +264,7 @@ static int threshold_proc(power_handle_t *h, board_data_t *pbrd)
|
|
|
}
|
|
|
|
|
|
if(pch->thr.w_upper.en) {
|
|
|
- if(pch->power[i].current>pch->thr.w_upper.val) {
|
|
|
+ if(pch->power[j].current>pch->thr.w_upper.val) {
|
|
|
if(pch->alarm.w_upper==0) {
|
|
|
pch->alarm.w_upper = 1;
|
|
|
//trigger alarm event here ...
|
|
|
@@ -291,30 +279,54 @@ static int threshold_proc(power_handle_t *h, board_data_t *pbrd)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-static int total_proc(power_handle_t *h, board_data_t *pbrd)
|
|
|
+static int total_proc(power_handle_t *h)
|
|
|
{
|
|
|
- int i,j,r=-1,times=1;
|
|
|
+ total_t tmp[3]={0};
|
|
|
+ int i,j,k,r=-1,times=1;
|
|
|
power_ch_t *pch=NULL;
|
|
|
+ board_data_t *pbrd=NULL;
|
|
|
|
|
|
- for (i=0; i<pbrd->chs; i++) {
|
|
|
- pch = &pbrd->pch[i];
|
|
|
- if(h->prod->pwr_type==PDU_AC_I3O3) {
|
|
|
- times = 3;
|
|
|
+ lock_d_hold(h->lck);
|
|
|
+ if(h->prod->pwr_type==PDU_AC_I3O3) times = 3;
|
|
|
+ for(i=0; i<h->brd_max; i++) {
|
|
|
+ if(h->pbrd[i]) {
|
|
|
+ for (j=0; i<h->pbrd[i]->chs; i++) {
|
|
|
+ pch = &h->pbrd[i]->pch[j];
|
|
|
+ for(k=0; k<times; k++) {
|
|
|
+ tmp[k].voltage = pch->power[j].voltage;
|
|
|
+ tmp[k].current += pch->power[j].current;
|
|
|
+ tmp[k].power += pch->power[j].power;
|
|
|
+ tmp[k].freq = pch->power[j].freq;
|
|
|
+ tmp[k].consump += pch->power[j].consump;
|
|
|
+ tmp[k].active = pch->power[j].active;
|
|
|
+ tmp[k].reactive = pch->power[j].reactive;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
+ for(k=0; k<times; k++) {
|
|
|
+ h->ttl.total[k].voltage = tmp[k].voltage;
|
|
|
+ h->ttl.total[k].current = tmp[k].current;
|
|
|
+ h->ttl.total[k].power = tmp[k].power;
|
|
|
+ h->ttl.total[k].freq = tmp[k].freq;
|
|
|
+ h->ttl.total[k].consump = tmp[k].consump;
|
|
|
+ h->ttl.total[k].factor = tmp[k].active/tmp[k].power;
|
|
|
+ h->ttl.total[k].active = tmp[k].active;
|
|
|
+ h->ttl.total[k].reactive = tmp[k].reactive;
|
|
|
+ }
|
|
|
+
|
|
|
+ h->ttl.type = h->prod->pwr_type;
|
|
|
+ memcpy(h->ttl.total, tmp, sizeof(tmp));
|
|
|
+ lock_d_release(h->lck);
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
static int board_read(power_handle_t *h, board_data_t *pbrd)
|
|
|
{
|
|
|
int i,j,r=-1;
|
|
|
power_t *pwr,power;
|
|
|
uint16_t offset,tmp[144];
|
|
|
+ power_ch_t *pch=NULL;
|
|
|
|
|
|
lock_d_hold(h->lck);
|
|
|
if(pbrd) {
|
|
|
@@ -359,13 +371,14 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
|
|
|
}
|
|
|
|
|
|
for (i=0; i<pbrd->chs; i++) {
|
|
|
- pbrd->pch[i].power[0].status = tmp[i] & (0x01);
|
|
|
- pbrd->pch[i].alarm.v_upper = tmp[i] & ALARM_V_UPPER;
|
|
|
- pbrd->pch[i].alarm.v_lower = tmp[i] & ALARM_V_LOWER;
|
|
|
- pbrd->pch[i].alarm.c_upper = tmp[i] & ALARM_C_UPPER;
|
|
|
- pbrd->pch[i].alarm.p_upper = tmp[i] & ALARM_P_UPPER;
|
|
|
- pbrd->pch[i].alarm.w_upper = tmp[i] & ALARM_W_UPPER;
|
|
|
- pbrd->pch[i].alarm.ph_loss = 0;
|
|
|
+ pch = &pbrd->pch[i];
|
|
|
+ pch->power[0].status = tmp[i] & (0x01);
|
|
|
+ pch->alarm.v_upper = tmp[i] & ALARM_V_UPPER;
|
|
|
+ pch->alarm.v_lower = tmp[i] & ALARM_V_LOWER;
|
|
|
+ pch->alarm.c_upper = tmp[i] & ALARM_C_UPPER;
|
|
|
+ pch->alarm.p_upper = tmp[i] & ALARM_P_UPPER;
|
|
|
+ pch->alarm.w_upper = tmp[i] & ALARM_W_UPPER;
|
|
|
+ pch->alarm.ph_loss = 0;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
@@ -423,11 +436,12 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
|
|
|
|
|
|
for (i = 0; i < pbrd->chs; i++) {
|
|
|
int Index = i * 2;
|
|
|
- pbrd->pch[i].alarm.v_upper = tmp[0+Index] & BIT(0);
|
|
|
- pbrd->pch[i].alarm.v_lower = tmp[0+Index] & BIT(1);
|
|
|
- pbrd->pch[i].alarm.c_upper = tmp[0+Index] & BIT(2);
|
|
|
- pbrd->pch[i].alarm.p_upper = tmp[0+Index] & BIT(3);
|
|
|
- pbrd->pch[i].alarm.w_upper = tmp[0+Index] & BIT(4);
|
|
|
+ pch = &pbrd->pch[i];
|
|
|
+ pch->alarm.v_upper = tmp[0+Index] & BIT(0);
|
|
|
+ pch->alarm.v_lower = tmp[0+Index] & BIT(1);
|
|
|
+ pch->alarm.c_upper = tmp[0+Index] & BIT(2);
|
|
|
+ pch->alarm.p_upper = tmp[0+Index] & BIT(3);
|
|
|
+ pch->alarm.w_upper = tmp[0+Index] & BIT(4);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
@@ -507,11 +521,12 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
|
|
|
}
|
|
|
for (i=0; i<pbrd->chs; i++) {
|
|
|
int Index = i * 2;
|
|
|
- pbrd->pch[i].alarm.v_upper = tmp[0+Index] & BIT(0);
|
|
|
- pbrd->pch[i].alarm.v_lower = tmp[0+Index] & BIT(1);
|
|
|
- pbrd->pch[i].alarm.c_upper = tmp[0+Index] & BIT(2);
|
|
|
- pbrd->pch[i].alarm.p_upper = tmp[0+Index] & BIT(3);
|
|
|
- pbrd->pch[i].alarm.w_upper = tmp[0+Index] & BIT(4);
|
|
|
+ pch = &pbrd->pch[i];
|
|
|
+ pch->alarm.v_upper = tmp[0+Index] & BIT(0);
|
|
|
+ pch->alarm.v_lower = tmp[0+Index] & BIT(1);
|
|
|
+ pch->alarm.c_upper = tmp[0+Index] & BIT(2);
|
|
|
+ pch->alarm.p_upper = tmp[0+Index] & BIT(3);
|
|
|
+ pch->alarm.w_upper = tmp[0+Index] & BIT(4);
|
|
|
}
|
|
|
|
|
|
offset = POWER_AC3_ALARM_MISSING_PH;
|
|
|
@@ -555,6 +570,7 @@ static int board_query(power_handle_t *h)
|
|
|
for(i=0; i<h->brd_max; i++) {
|
|
|
r = board_read(h, h->pbrd[i]);
|
|
|
}
|
|
|
+ total_proc(h);
|
|
|
|
|
|
return r;
|
|
|
}
|
|
|
@@ -858,7 +874,7 @@ int power_reset(void)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- for (i = 0; i < pbrd->chs; i++) {
|
|
|
+ for (i=0; i<pbrd->chs; i++) {
|
|
|
memset(data_temp, 0, sizeof(data_temp));
|
|
|
offset = POWER_AC3_OUT_ENABLE + i;
|
|
|
data_temp[0] = pbrd->pch[i].power[0].status;
|