📄 harmonic.c
字号:
{
/* if((g_sPowerQuality.iIaPhase <320) || ( g_sPowerQuality.iIaPhase >=2980 && g_sPowerQuality.iIaPhase <=3600))
{
byCurrentError_type = 0xc6;//B C 相电流反向
}
else if(g_sPowerQuality.iIbPhase <2720 && g_sPowerQuality.iIbPhase >=1780)
{
byCurrentError_type = 0xc5;//A C 相电流反向
}
else if(g_sPowerQuality.iIcPhase <1520 && g_sPowerQuality.iIcPhase >=580)
byCurrentError_type = 0xc3;//A B 相电流反向
else byCurrentError_type = 0xc7; //A B C三相同时电流反向
*/
/* lRealI0 = -(lRealI0 )/ 2;
lImageI0 = -(lImageI0) /2;
if( lRealI0 < ( iRealArray[1] + 300)
&& lRealI0 > (iRealArray[1] -300)
)
{
byCurrentError_type = 0xc6;//B C 相电流反向
}
else if( lRealI0 < ( iRealArray[3] +300)
&& lRealI0 > (iRealArray[3] - 300)
)
{
byCurrentError_type = 0xc5;//A C 相电流反向
}
else if( lRealI0 < ( iRealArray[5] +300)
&& lRealI0 > (iRealArray[5] -300)
)
{
byCurrentError_type = 0xc3;//A B 相电流反向
}
else byCurrentError_type =0;
*/
byCurrentError_type =0;
}
else
{
lRealI0 = (lRealI0 )/ 2;
lImageI0 = (lImageI0) /2;
if( lRealI0 < ( iRealArray[1] + 200)
&& lRealI0 > (iRealArray[1] -200)
)
{
if((g_sPowerQuality.iIaPhase <320) || ( g_sPowerQuality.iIaPhase >=2980 && g_sPowerQuality.iIaPhase <=3600))
{
byCurrentError_type = 0xc6;//B C 相电流反向
}
else byCurrentError_type = 0xc1;//A相电流反向
}
else if( lRealI0 < ( iRealArray[3] +200)
&& lRealI0 > (iRealArray[3] - 200)
)
{
if(g_sPowerQuality.iIbPhase <2720 && g_sPowerQuality.iIbPhase >=1780)
{
byCurrentError_type = 0xc5;//A C 相电流反向
}
else byCurrentError_type = 0xc2;//B相电流反向
}
else if( lRealI0 < ( iRealArray[5] +200)
&& lRealI0 > (iRealArray[5] -200)
)
{
if(g_sPowerQuality.iIcPhase <1520 && g_sPowerQuality.iIcPhase >=580)
byCurrentError_type = 0xc3;//A B 相电流反向
else byCurrentError_type = 0xc4;//C相电流反向
}
else byCurrentError_type =0;
}
}
else if(i==3);//都小于150则不判断极性
else if(i==1 || i==2) //判断是否有一相或两相开路
{
/* if(i==1)//判断是否有一相开路
{
if(byError[0]==1) //A相电流偏小?
{
lRealI0 = iRealArray[3] + iRealArray[5];
lImageI0 = iMageArray[3] + iMageArray[5];
lRealI0 = - lRealI0;
lImageI0 = - lImageI0;
if( iRealArray[1] < (iRealArray[0] * 11 / 10)
&& iRealArray[1] > (iRealArray[0] * 9 / 10 )
)
{
byCurrentError_type = 0x81;//A相电流开路
}
}
else if(byError[1]==1) //B相电流偏小?
{
lRealI0 = iRealArray[1] + iRealArray[5];
lImageI0 = iMageArray[1] + iMageArray[5];
lRealI0 = - lRealI0;
lImageI0 = - lImageI0;
if( iRealArray[3] < (iRealArray[0] * 11 / 10)
&& iRealArray[3] > (iRealArray[0] * 9 / 10 )
)
{
byCurrentError_type = 0x82;//B相电流开路
}
}
else //C相电流偏小?
{
l lRealI0 = iRealArray[1] + iRealArray[3];
lImageI0 = iMageArray[1] + iMageArray[3];
lRealI0 = - lRealI0;
lImageI0 = - lImageI0;
if( iRealArray[5] < (iRealArray[0] * 11 / 10)
&& iRealArray[5] > (iRealArray[0] * 9 / 10 )
)
{
byCurrentError_type = 0x84;//C相电流开路
}
}
}
else //判断是否有2相开路
{
if(byError[0]==1 && byError[1]==1) //AB相电流偏小?
{
lRealI0 = iRealArray[1] + iRealArray[3];
lImageI0 = iMageArray[1] + iMageArray[3];
}
}
*/
}//
}
}
/* 开平方程序 */
int Sqrt2(long data)
{
double a;
int b,c;
a = sqrt((double)data);
b = ((int)a)*10;
c = (int)(a*10);
c -= b;
if(c >= 5) return(((int)a) + 1);
else return((int)a);
}
//**********计算不平衡度***************
void Compute_Unbalance(INT16 iRealArray[],INT16 iMageArray[])
{
long a,b;
long c,d; // Ua Ia Ub Ib Uc Ic
float dtemp;
float dCoef = (float) (25000.0*2*1.4142 *256 /10066329.6);
a = iRealArray[0] + iRealArray[2] + iRealArray[4];
b = iMageArray[0] + iMageArray[2] + iMageArray[4];
dtemp = dCoef*(float)Sqrt2(a*a + b*b)/3.0 ;
g_sPowerQuality.wU0 = dtemp; // 零序电压
c = (iMageArray[2] - iMageArray[4])*56756;
d = (iRealArray[4] - iRealArray[2])*56756;
a = iRealArray[0] - (iRealArray[2] + iRealArray[4])/2 - (c >> 16);
b = iMageArray[0] - (iMageArray[2] + iMageArray[4])/2 - (d >> 16);
dtemp = dCoef *(float)Sqrt2(a*a + b*b)/3;
g_sPowerQuality.wU1 = dtemp ; // 正序电压
a = iRealArray[0] - (iRealArray[2] + iRealArray[4])/2 + (c >> 16);
b = iMageArray[0] - (iMageArray[2] + iMageArray[4])/2 + (d >> 16);
dtemp = dCoef *(float)Sqrt2(a*a + b*b)/3;
g_sPowerQuality.wU2 = dtemp; // 负序电压
dCoef = 6000.0*2*1.4142 *256 /10066329.6;
a = iRealArray[1] + iRealArray[3] + iRealArray[5];
b = iMageArray[1] + iMageArray[3] + iMageArray[5];
dtemp = dCoef *(float)Sqrt2(a*a + b*b)/3;
g_sPowerQuality.wI0 = dtemp; // 零序电流
c = (iMageArray[3] - iMageArray[5])*56756;
d = (iRealArray[5] - iRealArray[3])*56756;
a = iRealArray[1] - (iRealArray[3] + iRealArray[5])/2 - (c >> 16);
b = iMageArray[1] - (iMageArray[3] + iMageArray[5])/2 - (d >> 16);
dtemp = dCoef *(float)Sqrt2(a*a + b*b)/3;
g_sPowerQuality.wI1 =dtemp; // 正序电流
a = iRealArray[1] - (iRealArray[3] + iRealArray[5])/2 + (c >> 16);
b = iMageArray[1] - (iMageArray[3] + iMageArray[5])/2 + (d >> 16);
dtemp = dCoef *(float)Sqrt2(a*a + b*b)/3;
g_sPowerQuality.wI2 = dtemp;
}
//***********电能质量统计************/
void PowerQualityStat(SRestrict *psRestrict)
{
SDateTime sTime;
WORD *PtrCur;
WORD *PtrMax;
WORD *PtrBase;
DWORD *PtrMaxTime;
long temp;
BYTE i;
BYTE j;
STime4 sTime4;
//WORD wMaxHIa[XIEBO_NUM]; //A相天统计谐波电流最大值[0]2次 [1]3次 ...
//WORD wMaxHIb[XIEBO_NUM]; //B相
//WORD wMaxHIc[XIEBO_NUM]; //C相
//**********总畸变电流日最大值及发生时间*********************
PtrCur = (WORD*)&g_sPowerQuality.wTHDIa;
PtrMax = (WORD*)&g_sPowerQuality.wMaxAllIa;
PtrBase = (WORD*)&g_sPowerQuality.wIa1; //基波的有效值
PtrMaxTime = (DWORD*)&g_sPowerQuality.dwMaxAllIaT;
for(i=0; i<3; i++,PtrMax++,PtrMaxTime)
{
temp = (long)PtrCur[i] * (long)PtrBase[j] / 10000;//因畸变率的系数为10000这里要除去
if(temp > PtrMax[i] || PtrMax[i]==0)
{
PtrMax[i] = temp;
PtrMaxTime[i] = sTime.byMonth;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byDay;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byHour;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byMinute;
}
PtrBase +=2;
PtrCur +=2;
}
//**********日统计三相 2-19 次谐波电流日最大值及发生时间*****
PtrCur = (WORD*)&g_sPowerQuality.wHRIa[0];
PtrMax = (WORD*)&g_sPowerQuality.wMaxHIa[0];
PtrMaxTime = (DWORD*)&g_sPowerQuality.dwMaxIaT[0];
PtrBase = (WORD*)&g_sPowerQuality.wIa1; //基波的有效值
for(j=0; j<3; j++)
{
for(i=0; i<XIEBO_NUM; i++,PtrCur++,PtrMaxTime++,PtrMax++)
{
temp = (long)PtrCur[i] * (long)PtrBase[j] / 10000;
if(temp > PtrMax[i] || PtrMax[i]==0)
{
PtrMax[i] = temp;
PtrMaxTime[i] = sTime.byMonth;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byDay;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byHour;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byMinute;
}
}
if(j==0)
PtrCur = (WORD*)&g_sPowerQuality.wHRIb[0];
else
PtrCur = (WORD*)&g_sPowerQuality.wHRIc[0];
PtrBase +=2;
}
OSTimeDly(2);
//**********总谐波电压含有率日最大值及发生时间*********************
PtrCur = (WORD*)&g_sPowerQuality.wTHDua;
PtrMax = (WORD*)&g_sPowerQuality.wMaxTHDua;
PtrMaxTime = (DWORD*)&g_sPowerQuality.dwMaxTHDuaT;
for(i=0; i<3; i++,PtrMax++,PtrMaxTime++)
{
if(PtrCur[i] > PtrMax[i] || PtrMax[i]==0)
{
PtrMax[i] = PtrCur[i];
PtrMaxTime[i] = sTime.byMonth;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byDay;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byHour;
PtrMaxTime[i] <<= 8;
PtrMaxTime[i] |= sTime.byMinute;
}
PtrCur +=2;
}
//**********日统计三相电压含有率日最大值发生及发生时间*****
PtrCur = (WORD*)&g_sPowerQuality.wHRUa[0];
PtrMax = (WORD*)&g_sPowerQuality.wMaxHRUa[0];
PtrMaxTime = (DWORD*)&g_sPowerQuality.wMaxHRUaT[0];
for(j=0; j<3; j++)
{
for(i=0; i<XIEBO_NUM; i++,PtrCur++,PtrMaxTime++,PtrMax++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -