📄 caldemand.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 + -