Ejemplo n.º 1
0
/**
* @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();
		}
	}
}
Ejemplo n.º 2
0
/**
* @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
}