/** * @brief 多功能表计统计任务 */ static void *CenMetSticTask(void * arg) { unsigned long ev; SysAddCTimer(60, CTimerCMetStic, 0); while(1) { SysWaitEvent(&CMetSticEvent, 1, CMSEV_1MIN, &ev); if(ev&CMSEV_1MIN) { UpdateMdbTGrpPower();// 更新(计算)总加组功率 UpdateMdbStic(); } } }
/** * @brief 市电状态监测 * @param pbuf 告警缓存区指针 */ static void PowerMonitor(alarm_t *pbuf) { int stat = GpioGetValue(GPIO_POWER_STATUS); #if 1 if(stat) { //power off if(0 == RunState.pwroff) { runstate_t *prun = RunStateModify(); sysclock_t clock; PrintLog(LOGTYPE_ALARM, "power off!!\n"); Sleep(200); prun->pwroff = 1; memset((unsigned char *)pbuf, 0, sizeof(alarm_t)); pbuf->erc = 14; pbuf->len = 5; //记录停电时间 SysClockReadCurrent(&clock); prun->timepoweroff[0] = pbuf->min = clock.minute; prun->timepoweroff[1] = pbuf->hour = clock.hour; prun->timepoweroff[2] = pbuf->day = clock.day; prun->timepoweroff[3] = pbuf->mon = clock.month; prun->timepoweroff[4] = pbuf->year = clock.year; HexToBcd(&pbuf->min, 5); MakeAlarm(ALMFLAG_ABNOR, pbuf); if(TimerIdPowerOff >= 0) { SysStopCTimer(TimerIdPowerOff); TimerIdPowerOff = -1; } TimerIdPowerOff = SysAddCTimer(180, CTimerPowerOff, 0); } else { if(TimerIdPowerOff < 0) TimerIdPowerOff = SysAddCTimer(180, CTimerPowerOff, 0); } } else { //power on if(RunState.pwroff) { sysclock_t clock; RunStateModify()->pwroff = 0; if(TimerIdPowerOff >= 0) { SysStopCTimer(TimerIdPowerOff); TimerIdPowerOff = -1; } memset((unsigned char *)pbuf, 0, sizeof(alarm_t)); pbuf->erc = 14; pbuf->len = 5; //记录上次停电时间 pbuf->min = RunState.timepoweroff[0]; pbuf->hour = RunState.timepoweroff[1]; pbuf->day = RunState.timepoweroff[2]; pbuf->mon = RunState.timepoweroff[3]; pbuf->year = RunState.timepoweroff[4]; HexToBcd(&pbuf->min, 5); SysClockReadCurrent(&clock); pbuf->data[0] = clock.minute; pbuf->data[1] = clock.hour; pbuf->data[2] = clock.day; pbuf->data[3] = clock.month; pbuf->data[4] = clock.year; HexToBcd(pbuf->data, 5); MakeAlarm(ALMFLAG_NORMAL, pbuf); } } #else runstate_t *prun = RunStateModify(); prun->pwroff = 0; #endif }