⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caldemand.cpp

📁 计算电能的有功功率
💻 CPP
字号:
#include "stdafx.h"
#include "stdlib.h"
#include "caldemand.h"
#include "calmulenergy.h"
#include "time.h"

CDemand  Demand;

CDemand::Init()
{
	GetCurentTime();
	DemandData.PrivateData.LastMinute=DemandData.PrivateData.CurrentTimeMark.Minute;
	DemandData.PrivateData.SumPositiveDemand=0;
	DemandData.PrivateData.SumNegativeDemand=0;
    DemandData.PrivateData.Ptr =0;
    //读数据库的最大需量

}

CDemand::CDemand(void)
{
	//内部的清零
	memset((void *)&DemandData.Data,0,sizeof(DemandData.Data));
    memset((void *)&DemandData.PrivateData,0,sizeof(DemandData.PrivateData));
	//送数据库读取    
  ;
}
 
CDemand::~CDemand(void)
{
  
}
CDemand::GetRate()
{
	//记住从1开始
	//DemandData.PrivateData.Rate = FSDN_SHARP;//和电能用的一样
 
	if (DemandData.PrivateData.Rate<1)
	{
	#ifdef DEBUG
	 while(1);
	#endif
		DemandData.PrivateData.Rate=1;
	}
	if (DemandData.PrivateData.Rate>4)
	{
	#ifdef DEBUG
	 while(1);
	#endif
		DemandData.PrivateData.Rate=4;
	}

	//???
}
CDemand::GetQuadrant()
{
  //DemandData.PrivateData.Quadrant = QUADRANT_I;
  //直接从电能那里取不重复计算
}
CDemand::GetCurentTime()
{
    tm when;
    time_t now;
    time( &now );
    when = *localtime( &now );
	DemandData.PrivateData.CurrentTime.tm_hour=when.tm_hour;
	DemandData.PrivateData.CurrentTime.tm_min=when.tm_min;
	DemandData.PrivateData.CurrentTime.tm_sec=when.tm_sec;
	DemandData.PrivateData.CurrentTime.tm_mday=when.tm_mday;
	DemandData.PrivateData.CurrentTime.tm_mon=when.tm_mon;
	DemandData.PrivateData.CurrentTime.tm_wday=when.tm_wday;
	DemandData.PrivateData.CurrentTime.tm_year=when.tm_year;//10
	//当前的时标
	DemandData.PrivateData.CurrentTimeMark.Day    = DemandData.PrivateData.CurrentTime.tm_mday;
	DemandData.PrivateData.CurrentTimeMark.Hour   = DemandData.PrivateData.CurrentTime.tm_hour;
	DemandData.PrivateData.CurrentTimeMark.Minute = DemandData.PrivateData.CurrentTime.tm_min;
	DemandData.PrivateData.CurrentTimeMark.Month  = DemandData.PrivateData.CurrentTime.tm_mon;
}
CDemand::GetPQ(long p,long q)
{
	DemandData.PrivateData.P = p;
    DemandData.PrivateData.Q = q;
}
CDemand::Exec()
{ // 1S 运行一次
   static time_t t1,t2=0;
//记住费率从1开始,目的是兼容电能的定义
   GetCurentTime();//得到当前的时间
   GetRate();
   GetQuadrant();    
   if (
	  (DemandData.PrivateData.Quadrant==QUADRANT_I) ||
      (DemandData.PrivateData.Quadrant==QUADRANT_IV)
	  )
   {
    DemandData.PrivateData.SumPositiveDemand += labs(DemandData.PrivateData.P);
   }
   else
   {
    DemandData.PrivateData.SumNegativeDemand += labs(DemandData.PrivateData.P);
   }
   //t1 = mktime(&DemandData.PrivateData.CurrentTime);
   t1 = DemandData.PrivateData.CurrentTimeMark.Minute ;
   DemandData.PrivateData.Ptr++;
   if (
	   ((60 + t1 - DemandData.PrivateData.LastMinute)%60)  > (15) ||
	   (DemandData.PrivateData.Ptr > ((15*60)*10))
	  )//15分钟 || Ptr > ((15*60)*10)
   {//
      DemandData.PrivateData.LastMinute=t1;
      CalcuMaxDemand();
      DemandData.PrivateData.SumPositiveDemand=0;
      DemandData.PrivateData.SumNegativeDemand=0;
	  DemandData.PrivateData.Ptr=0;
   }
}

CDemand::CalcuMaxDemand()
{
	
   DWORD *pD;
   TIMEMARK_TYPE *pTimeMark;
   long demand;
   switch (DemandData.PrivateData.Quadrant)
   {
   case QUADRANT_I:
   case QUADRANT_IV:
	   //计算15分钟的平均功率
	   {
		   demand = DemandData.PrivateData.SumPositiveDemand/
			        DemandData.PrivateData.Ptr;
		   pD = (DWORD *)&DemandData.Data.PositiveDemand;
		   pTimeMark = (TIMEMARK_TYPE *)&DemandData.TimeMark.PositiveDemand;
		   if (
			   labs(demand) >=
			   labs(*(pD+DemandData.PrivateData.Rate-1))
			   )
		   { 
		       *(pD+DemandData.PrivateData.Rate-1)=labs(demand);
		 	   //记录时标
			   *(pTimeMark+DemandData.PrivateData.Rate-1) = DemandData.PrivateData.CurrentTimeMark;
		   }
	   }
	   break;
   case QUADRANT_II:
   case QUADRANT_III:
	   //计算15分钟的平均功率
	   {//
		   demand = DemandData.PrivateData.SumNegativeDemand/
			        DemandData.PrivateData.Ptr;
		   pD = (DWORD *)&DemandData.Data.NegativeDemand;
           pTimeMark = (TIMEMARK_TYPE *)&DemandData.TimeMark.NegativeDemand;
		   if (
			   labs(demand) > 
			   labs(*(pD+DemandData.PrivateData.Rate-1))
			   )
		   { 
		       *(pD+DemandData.PrivateData.Rate-1)=labs(demand);
			   *(pTimeMark+DemandData.PrivateData.Rate-1) = DemandData.PrivateData.CurrentTimeMark;
		   }
	   }
	   break;
   default:
	   break;
   }
}

CDemand::Clear()
{  //
   memset((void *)&DemandData.Data,0,sizeof(DemandData.Data));
   //岑坚宇也要调用本函数清零
}
CDemand::Transfer(void)
{//送回数据库
  ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -