📄 calmulenergy.cpp
字号:
#include "stdafx.h"
#include "stdlib.h"
#include "calmulenergy.h"
CalMulEnergy MulEnergy;
CalMulEnergy::CalMulEnergy(void)
{
Init();
}
void CalMulEnergy::Init(void)
{
//读初始电能
//读参数
//读失败的默认值
PrivatePara.ConstEp = 16000;// 16000imp/kwh
PrivatePara.ConstEq = 16000;// 16000imp/kwh
PrivatePara.WireMode =0;// 3相4线
PrivatePara.Rate = 2;//平电能
PrivatePara.PulseType = PULSE_EP;//默认输出有功电能
//
}
void CalMulEnergy::GetRate(void)
{
//Rate //读费率
static WORD LastRate;
PrivatePara.Rate = FSDN_SHARP;
if (LastRate != PrivatePara.Rate)
{
//发生费率更改
lp=0;lq=0;
}
LastRate= PrivatePara.Rate;
}
void CalMulEnergy::CalcuPulse(long p,long q)
{
BYTE quadrant;
short n;
S64 k=0;
//象限判断
if ((p>=0) && (q >=0))quadrant=QUADRANT_I;// +p + q
else if ((p <= 0) && (q >=0))quadrant=QUADRANT_II;// -p +q
else if (((p <= 0) && (q <=0)))quadrant=QUADRANT_III;// -p -q
else if((p >= 0) && (q <=0))quadrant = QUADRANT_IV; //+p =q
else quadrant = -1;//错误
p = labs(p);
q = labs(q);
lp+=p;lq+=q;
PrivateData.Quadrant = quadrant;
//有一个以上脉冲 Kp / (3600*50) 小时 50HZ
// = (S64)(S64)(S64) POWER_N * PrivatePara.ConstEp/10/(POWER_FORMAT_SCALE) /(3600 * 50 )/1000;
k = (S64)1000*(S64)(S64) (POWER_FORMAT_SCALE) * (S64)(3600 * 50 )* (S64)10 /(S64)POWER_N /(S64)PrivatePara.ConstEp;
n = lp/k;
if (n>=1)
{
lp-= (n*k);
PrivateData.Ep = n;//
}
//
k = (S64)1000*(S64)(S64) (POWER_FORMAT_SCALE) * (S64)(3600 * 50 )* (S64)10 /(S64)POWER_N /(S64)PrivatePara.ConstEq;
n = lq/k;
if (n>=1)
{
lq-= (n*k);//余数不丢掉
PrivateData.Eq = n;//
}
//输出脉冲
switch(PrivatePara.PulseType)
{
case PULSE_EP:
PulseOut(PrivateData.Ep);
break;
case PULSE_EQ:
PulseOut(PrivateData.Eq);
break;
}
// PrivateData.Ep =
// PrivateData.Ep = // 20ms * 16000
}
void CalMulEnergy::PulseOut(short n)
{
}
void CalMulEnergy::Exec(void)
{
//CalcuPulse(,);
//计算电能
//FSDN_TYPE *pFSDN;
DWORD *pD1;
switch (PrivateData.Quadrant)
{
case QUADRANT_I:
pD1=(DWORD *)&EnergyData.Data.Positive_Ep; //正向有功
*(pD1+PrivatePara.Rate) += PrivateData.Ep; //多费率
*pD1 += PrivateData.Ep; //总
pD1=(DWORD *)&EnergyData.Data.QuadrantI_Eq; //一象限无功
*(pD1+PrivatePara.Rate) += PrivateData.Eq; // 多费率
*pD1 += PrivateData.Eq; //总
break;
case QUADRANT_IV:
pD1=(DWORD *)&EnergyData.Data.Positive_Ep; //正向有功
*(pD1+PrivatePara.Rate) += PrivateData.Ep; //多费率
*pD1 += PrivateData.Ep; //总
pD1=(DWORD *)&EnergyData.Data.QuadrantIV_Eq; //四象限无功
*(pD1+PrivatePara.Rate) += PrivateData.Eq; // 多费率
*pD1 += PrivateData.Eq; //总
break;
case QUADRANT_II:
pD1=(DWORD *)&EnergyData.Data.Negative_Ep; //反向有功
*(pD1+PrivatePara.Rate) += PrivateData.Ep; //多费率
*pD1 += PrivateData.Ep; //总
pD1=(DWORD *)&EnergyData.Data.QuadrantII_Eq; //二象限无功
*(pD1+PrivatePara.Rate) += PrivateData.Eq; // 多费率
*pD1 += PrivateData.Eq; //总
break;
case QUADRANT_III:
pD1=(DWORD *)&EnergyData.Data.Negative_Ep; //反向有功
*(pD1+PrivatePara.Rate) += PrivateData.Ep; //多费率
*pD1 += PrivateData.Ep; //总
pD1=(DWORD *)&EnergyData.Data.QuadrantIII_Eq; //三象限无功
*(pD1+PrivatePara.Rate) += PrivateData.Eq; // 多费率
*pD1 += PrivateData.Eq; // 总
break;
default:
break;
}
PrivateData.Ep=0;
PrivateData.Eq=0;
}
void CalMulEnergy::Save(void)
{
}
void CalMulEnergy::Transfer(void)
{
}
void CalMulEnergy::Clear(void)
{ //自动抄表日,或者通讯请零
//岑坚宇必须在 自动抄表日,或者通讯请零调用
memset((void *)&EnergyData.Data,0,sizeof(EnergyData.Data));
//文件的转存
}
void CalMulEnergy::Freeze(void)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -