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

📄 calmulenergy.cpp

📁 计算电能的有功功率
💻 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 + -