|
@@ -7,7 +7,12 @@
|
|
|
#include "power.h"
|
|
#include "power.h"
|
|
|
#include "thread.h"
|
|
#include "thread.h"
|
|
|
#include "datadef.h"
|
|
#include "datadef.h"
|
|
|
|
|
+#include "wanning.h"
|
|
|
|
|
+#include "beep.h"
|
|
|
|
|
+#include "time.h"
|
|
|
|
|
+#include "snmp.h"
|
|
|
|
|
|
|
|
|
|
+extern AlarmTrapinfo data;
|
|
|
|
|
|
|
|
#define LIMIT_HOF(x) (x*1.1f)
|
|
#define LIMIT_HOF(x) (x*1.1f)
|
|
|
#define LIMIT_LOF(x) (x*0.9f)
|
|
#define LIMIT_LOF(x) (x*0.9f)
|
|
@@ -549,11 +554,115 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
|
|
|
pch = &pbrd->pch[i];
|
|
pch = &pbrd->pch[i];
|
|
|
//pch->power[0].status = tmp[i] & (0x01);
|
|
//pch->power[0].status = tmp[i] & (0x01);
|
|
|
pch->status = tmp[i] & (0x01);
|
|
pch->status = tmp[i] & (0x01);
|
|
|
|
|
+ uint8_t old_v_upper = pch->alarm.v_upper;
|
|
|
|
|
+ uint8_t old_v_lower = pch->alarm.v_lower;
|
|
|
|
|
+ uint8_t old_c_upper = pch->alarm.c_upper;
|
|
|
|
|
+ uint8_t old_p_upper = pch->alarm.p_upper;
|
|
|
|
|
+ uint8_t old_w_upper = pch->alarm.w_upper;
|
|
|
|
|
+
|
|
|
pch->alarm.v_upper = (tmp[i] & BIT(2))?1:0;
|
|
pch->alarm.v_upper = (tmp[i] & BIT(2))?1:0;
|
|
|
pch->alarm.v_lower = (tmp[i] & BIT(4))?1:0;
|
|
pch->alarm.v_lower = (tmp[i] & BIT(4))?1:0;
|
|
|
pch->alarm.c_upper = (tmp[i] & BIT(6))?1:0;
|
|
pch->alarm.c_upper = (tmp[i] & BIT(6))?1:0;
|
|
|
pch->alarm.p_upper = (tmp[i] & BIT(8))?1:0;
|
|
pch->alarm.p_upper = (tmp[i] & BIT(8))?1:0;
|
|
|
pch->alarm.w_upper = (tmp[i] & BIT(10))?1:0;
|
|
pch->alarm.w_upper = (tmp[i] & BIT(10))?1:0;
|
|
|
|
|
+
|
|
|
|
|
+ waning_info_t info= {0};
|
|
|
|
|
+ info.type = ALARM_TYPE_POWER;
|
|
|
|
|
+ time_t t=time(NULL);
|
|
|
|
|
+ struct tm *tm=localtime(&t);
|
|
|
|
|
+ if(!old_v_upper && pch->alarm.v_upper)
|
|
|
|
|
+ {
|
|
|
|
|
+
|
|
|
|
|
+ memset(&info.waning_context,0,sizeof(32));
|
|
|
|
|
+ sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
|
|
+ sprintf(info.waning_context,"%s over max voltage",pch->info.name);
|
|
|
|
|
+ wanning_insert(info);
|
|
|
|
|
+
|
|
|
|
|
+ if(paras_get()->snmp.trapmode == 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ //AlarmTrapinfo t_info={0};
|
|
|
|
|
+ data.ID = i;
|
|
|
|
|
+ data.Alarmid = ALARM_TYPE_POWER;
|
|
|
|
|
+ memcpy(data.AlarmDate,info.date,32);
|
|
|
|
|
+ memcpy(data.AlarmContext,info.waning_context,32);
|
|
|
|
|
+ send_snmp_tarp();
|
|
|
|
|
+ //snmp_power_alarm_trap(&t_info);
|
|
|
|
|
+// system("snmp");
|
|
|
|
|
+ }
|
|
|
|
|
+ beep_set(1);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!old_v_lower && pch->alarm.v_lower)
|
|
|
|
|
+ {
|
|
|
|
|
+ memset(&info.waning_context,0,sizeof(32));
|
|
|
|
|
+ sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
|
|
+ sprintf(info.waning_context,"%s over min voltage",pch->info.name);
|
|
|
|
|
+ wanning_insert(info);
|
|
|
|
|
+// if(paras_get()->snmp.trapmode == 1)
|
|
|
|
|
+// {
|
|
|
|
|
+// AlarmTrapinfo t_info={0};
|
|
|
|
|
+// t_info.ID = i;
|
|
|
|
|
+// t_info.Alarmid = ALARM_TYPE_POWER;
|
|
|
|
|
+// memcpy(t_info.AlarmDate,info.date,32);
|
|
|
|
|
+// memcpy(t_info.AlarmContext,info.waning_context,32);
|
|
|
|
|
+// snmp_power_alarm_trap(&t_info);
|
|
|
|
|
+// }
|
|
|
|
|
+ beep_set(1);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!old_c_upper && pch->alarm.c_upper)
|
|
|
|
|
+ {
|
|
|
|
|
+ memset(&info.waning_context,0,sizeof(32));
|
|
|
|
|
+ sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
|
|
+ sprintf(info.waning_context,"%s over max current",pch->info.name);
|
|
|
|
|
+ wanning_insert(info);
|
|
|
|
|
+ beep_set(1);
|
|
|
|
|
+// if(paras_get()->snmp.trapmode == 1)
|
|
|
|
|
+// {
|
|
|
|
|
+// AlarmTrapinfo t_info={0};
|
|
|
|
|
+// t_info.ID = i;
|
|
|
|
|
+// t_info.Alarmid = ALARM_TYPE_POWER;
|
|
|
|
|
+// memcpy(t_info.AlarmDate,info.date,32);
|
|
|
|
|
+// memcpy(t_info.AlarmContext,info.waning_context,32);
|
|
|
|
|
+// snmp_power_alarm_trap(&t_info);
|
|
|
|
|
+// }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!old_p_upper && pch->alarm.p_upper)
|
|
|
|
|
+ {
|
|
|
|
|
+ memset(&info.waning_context,0,sizeof(32));
|
|
|
|
|
+ sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
|
|
+ sprintf(info.waning_context,"%s over max power",pch->info.name);
|
|
|
|
|
+ wanning_insert(info);
|
|
|
|
|
+ beep_set(1);
|
|
|
|
|
+// if(paras_get()->snmp.trapmode == 1)
|
|
|
|
|
+// {
|
|
|
|
|
+// AlarmTrapinfo t_info={0};
|
|
|
|
|
+// t_info.ID = i;
|
|
|
|
|
+// t_info.Alarmid = ALARM_TYPE_POWER;
|
|
|
|
|
+// memcpy(t_info.AlarmDate,info.date,32);
|
|
|
|
|
+// memcpy(t_info.AlarmContext,info.waning_context,32);
|
|
|
|
|
+// snmp_power_alarm_trap(&t_info);
|
|
|
|
|
+// }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(!old_w_upper && pch->alarm.w_upper)
|
|
|
|
|
+ {
|
|
|
|
|
+ memset(&info.waning_context,0,sizeof(32));
|
|
|
|
|
+ sprintf(info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
|
|
|
|
|
+ sprintf(info.waning_context,"%s over max consumer",pch->info.name);
|
|
|
|
|
+ wanning_insert(info);
|
|
|
|
|
+ beep_set(1);
|
|
|
|
|
+// if(paras_get()->snmp.trapmode == 1)
|
|
|
|
|
+// {
|
|
|
|
|
+// AlarmTrapinfo t_info={0};
|
|
|
|
|
+// t_info.ID = i;
|
|
|
|
|
+// t_info.Alarmid = ALARM_TYPE_POWER;
|
|
|
|
|
+// memcpy(t_info.AlarmDate,info.date,32);
|
|
|
|
|
+// memcpy(t_info.AlarmContext,info.waning_context,32);
|
|
|
|
|
+// snmp_power_alarm_trap(&t_info);
|
|
|
|
|
+// }
|
|
|
|
|
+ }
|
|
|
//pch->alarm.ph_loss = 0;
|
|
//pch->alarm.ph_loss = 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -588,6 +697,7 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
|
|
|
r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
|
|
r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
|
|
|
for(int i = 0; i < pbrd->chs;i++)
|
|
for(int i = 0; i < pbrd->chs;i++)
|
|
|
{
|
|
{
|
|
|
|
|
+ pch = &pbrd->pch[i];
|
|
|
pch->info.open_delay = buffer[i] / 1000;
|
|
pch->info.open_delay = buffer[i] / 1000;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -596,6 +706,7 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
|
|
|
r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
|
|
r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
|
|
|
for(int i = 0; i < pbrd->chs;i++)
|
|
for(int i = 0; i < pbrd->chs;i++)
|
|
|
{
|
|
{
|
|
|
|
|
+ pch = &pbrd->pch[i];
|
|
|
pch->info.close_delay = buffer[i] / 1000;
|
|
pch->info.close_delay = buffer[i] / 1000;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -955,7 +1066,7 @@ static int power_copy(power_handle_t *h)
|
|
|
if(pd->pch) {
|
|
if(pd->pch) {
|
|
|
pd->chs = h->chs;
|
|
pd->chs = h->chs;
|
|
|
for(i=0; i<pd->chs; i++) {
|
|
for(i=0; i<pd->chs; i++) {
|
|
|
- pd->pch[i] = *h->pch[i];
|
|
|
|
|
|
|
+ pd->pch[i] = *(h->pch[i]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -1498,11 +1609,20 @@ int power_set_board_sw(uint8_t addr, uint8_t on)
|
|
|
int power_set_all_sw(uint8_t on)
|
|
int power_set_all_sw(uint8_t on)
|
|
|
{
|
|
{
|
|
|
int i,r;
|
|
int i,r;
|
|
|
- power_handle_t *h=&pwrHandle;
|
|
|
|
|
|
|
+ power_handle_t *handle=&pwrHandle;
|
|
|
|
|
+
|
|
|
|
|
+ if(handle->cnt > 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ for(int i = 1 ; i <= handle->cnt;i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(handle->pbrd[i])
|
|
|
|
|
+ {
|
|
|
|
|
+ handle->pbrd[i]->fn.set_all(on,handle->pbrd[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- for(i=1; i<=h->chs; i++) {
|
|
|
|
|
- power_set_ch_sw(i, on);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
@@ -1928,8 +2048,8 @@ int power_set_open_delay(power_ch_t *pch)
|
|
|
case AC_SINGLE_S_TYPE:
|
|
case AC_SINGLE_S_TYPE:
|
|
|
case AC_SINGLE_B_TYPE:
|
|
case AC_SINGLE_B_TYPE:
|
|
|
{
|
|
{
|
|
|
- tmp[0] = pch->info.open_delay;
|
|
|
|
|
- offset = POWER_AC_OPEN_DELAY_TIME_L+pch->info.ch-1;
|
|
|
|
|
|
|
+ tmp[0] = pch->info.open_delay*1000;
|
|
|
|
|
+ offset = POWER_AC_OPEN_DELAY_TIME_L+pch->info.sch;
|
|
|
r = write_reg(h, pch->info.addr, offset, tmp, 1);
|
|
r = write_reg(h, pch->info.addr, offset, tmp, 1);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
@@ -1939,7 +2059,7 @@ int power_set_open_delay(power_ch_t *pch)
|
|
|
uint32_t time=pch->info.open_delay*100;
|
|
uint32_t time=pch->info.open_delay*100;
|
|
|
tmp[0] = time & 0xffff;
|
|
tmp[0] = time & 0xffff;
|
|
|
tmp[1] = (time >> 16) & 0xffff;
|
|
tmp[1] = (time >> 16) & 0xffff;
|
|
|
- offset = POWER_DC_SET_OPEN_DELAY+pch->info.ch-1;
|
|
|
|
|
|
|
+ offset = POWER_DC_SET_OPEN_DELAY+pch->info.sch;
|
|
|
r = write_reg(h, pch->info.addr, offset, tmp, 2);
|
|
r = write_reg(h, pch->info.addr, offset, tmp, 2);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
@@ -1989,21 +2109,21 @@ int power_set_clear_consumer(power_ch_t *pch)
|
|
|
case AC_SINGLE_B_TYPE:
|
|
case AC_SINGLE_B_TYPE:
|
|
|
{
|
|
{
|
|
|
uint16_t val = 1;
|
|
uint16_t val = 1;
|
|
|
- offset = POWER_AC_RESET_CONSUMP + pch->info.ch-1;
|
|
|
|
|
|
|
+ offset = POWER_AC_RESET_CONSUMP + pch->info.sch;
|
|
|
r = write_reg(h, pch->info.addr, offset, &val, 1);
|
|
r = write_reg(h, pch->info.addr, offset, &val, 1);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case DCPDU_TYPE:
|
|
case DCPDU_TYPE:
|
|
|
{
|
|
{
|
|
|
uint32_t val = 1;
|
|
uint32_t val = 1;
|
|
|
- offset = POWER_DC_CONSUMP_CLEAR + pch->info.ch-1;
|
|
|
|
|
|
|
+ offset = POWER_DC_CONSUMP_CLEAR + pch->info.sch;
|
|
|
r = write_reg(h, pch->info.addr, offset, (uint16_t*)&val, 1);
|
|
r = write_reg(h, pch->info.addr, offset, (uint16_t*)&val, 1);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case TREE_AC_TYPE:
|
|
case TREE_AC_TYPE:
|
|
|
{
|
|
{
|
|
|
uint32_t val = 1;
|
|
uint32_t val = 1;
|
|
|
- offset = POWER_AC3_RESET_CONSUMP + pch->info.ch-1;
|
|
|
|
|
|
|
+ offset = POWER_AC3_RESET_CONSUMP + pch->info.sch;
|
|
|
r = write_reg(h, pch->info.addr, offset, (uint16_t*)&val, 1);
|
|
r = write_reg(h, pch->info.addr, offset, (uint16_t*)&val, 1);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
@@ -2025,8 +2145,8 @@ int power_set_close_delay(power_ch_t *pch)
|
|
|
case AC_SINGLE_S_TYPE:
|
|
case AC_SINGLE_S_TYPE:
|
|
|
case AC_SINGLE_B_TYPE:
|
|
case AC_SINGLE_B_TYPE:
|
|
|
{
|
|
{
|
|
|
- tmp[0] = pch->info.close_delay;
|
|
|
|
|
- offset = POWER_AC_CLOSE_DELAY_TIME_L+pch->info.ch-1;
|
|
|
|
|
|
|
+ tmp[0] = pch->info.close_delay*1000;
|
|
|
|
|
+ offset = POWER_AC_CLOSE_DELAY_TIME_L+pch->info.sch;
|
|
|
r = write_reg(h, pch->info.addr, offset, tmp, 1);
|
|
r = write_reg(h, pch->info.addr, offset, tmp, 1);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|