📄 voltage.c
字号:
if( ram_Data.sMonthLastTime.byMonth == sTime.byMonth &&
ram_Data.sMonthLastTime.wYear == sTime.wYear &&
ram_Data.sMonthLastTime.byDay == sTime.byDay
)
{
//××××月统计
if (ram_Data.Utemp[i] > g_sVoltStat_m.dwMaxU[i] || g_sVoltStat_m.dwMaxU[i]== 0)
{
g_sVoltStat_m.dwMaxU[i] = ram_Data.Utemp[i];
g_sVoltStat_m.dwMaxT[i] = sTime.byDay;
g_sVoltStat_m.dwMaxT[i] <<= 8;
g_sVoltStat_m.dwMaxT[i] |= sTime.byHour;
g_sVoltStat_m.dwMaxT[i] <<= 8;
g_sVoltStat_m.dwMaxT[i] |= sTime.byMinute;
}
if (ram_Data.Utemp[i]< g_sVoltStat_m.dwMinU[i] || g_sVoltStat_m.dwMinU[i] == 0)
{
g_sVoltStat_m.dwMinU[i] = ram_Data.Utemp[i];
g_sVoltStat_m.dwMinT[i] = sTime.byDay;
g_sVoltStat_m.dwMinT[i] <<= 8;
g_sVoltStat_m.dwMinT[i] |= sTime.byHour;
g_sVoltStat_m.dwMinT[i] <<= 8;
g_sVoltStat_m.dwMinT[i] |= sTime.byMinute;
}
}
}
if (ram_Data.Utemp[i] > ram_Data.Udown2[i] && ram_Data.Utemp[i] < ram_Data.Uup2[i])
{
//××月
g_sVoltageCompute.dwTimeCnt_m[i] ++;
g_sVoltageCompute.dwU_m[i] += ram_Data.Utemp[i];
g_sVoltStat_m.dwAvgU[i] = g_sVoltageCompute.dwU_m[i] / g_sVoltageCompute.dwTimeCnt_m[i];
}
//*********对直流量的统计***********
if(i == 0)
{
if(iDcTemp < psRestrict->wAnalogDCMin)
{
g_sVoltStat_m.dwDCLowerT ++;
}
else if(iDcTemp > psRestrict->wAnalogDCMin)
{
g_sVoltStat_m.dwDCUperT ++;
}
if(iDcTemp > g_sVoltStat.dwDCMax || g_sVoltStat.dwDCMax==0)
{
g_sVoltStat_m.dwDCMaxT = iDcTemp;
g_sVoltStat_m.dwDCMaxT = sTime.byDay;
g_sVoltStat_m.dwDCMaxT <<= 8;
g_sVoltStat_m.dwDCMaxT |= sTime.byHour;
g_sVoltStat_m.dwDCMaxT <<= 8;
g_sVoltStat_m.dwDCMaxT |= sTime.byMinute;
}
if(iDcTemp <g_sVoltStat.dwDCMin || g_sVoltStat.dwDCMin==0)
{
g_sVoltStat_m.dwDCMinT = iDcTemp;
g_sVoltStat_m.dwDCMinT = sTime.byDay;
g_sVoltStat_m.dwDCMinT <<= 8;
g_sVoltStat_m.dwDCMinT |= sTime.byHour;
g_sVoltStat_m.dwDCMinT <<= 8;
g_sVoltStat_m.dwDCMinT |= sTime.byMinute;
}
}
}
if(bySaveFlag ==1 && i==0)
{
if(g_bSaveVoltageState_m)
{
g_bSaveVoltageState_m =0;
SaveMonthData(&g_sVoltStat_m,byVoltageSaveMonth);//保存月电压合格数据
}
memcpy(&ram_Data.sMonthLastTime, &sTime, sizeof(SDateTime));
}
}
}
//***************电压合格率统计*****************
void VoltageGrade(SRestrict *psRestrict)
{
BYTE i;
static BYTE circle = 0;
// FeedDog(0, 500);
if (MUST_LOAD_THRESHOLD) ReInitData(psRestrict);
if (MUST_INITIAL_5460)
{
// InitCS5460();
}
interuptserver(psRestrict);
circle++;
if (circle>=50)
{
circle = 0;
for (i=0; i<MAX_SHOW_LU_NUM; i++)
{
if (ram_Data.flag[i]<1)
{
//InitCS5460();
break;
}
ram_Data.flag[i] = 0;
}
}
}
#define PTVALUE_100 102
#define PTVALUE_200 201
//****************工程化数据******************
void ProADData(SCs5460Coef *psCs5460Coef)
{
DWORD dwTemp;
SRealVal sRealVal;
INT32 iValue[20];
float fRealVal[3];
DWORD* pdwCode;
BYTE i;
BYTE j;
SRealCode sRealCode;
DWORD dwDCValue[2]; //直流量,和温度传感器的AD值
static int k=0;
/* dwTemp = 0xfc;
WriteCom(0,(BYTE*)&dwTemp,1);
dwTemp = 0xfc;
WriteCom(0,(BYTE*)&dwTemp,1);
dwTemp = g_sRealCode.dwUa;
PrintHex((BYTE*)&dwTemp,4);
dwTemp = g_sRealCode.dwPc;
PrintHex((BYTE*)&dwTemp,4);
dwTemp = g_sRealCode.dwQc;
PrintHex((BYTE*)&dwTemp,4);
dwTemp = g_sRealCode.dwPFc;
PrintHex((BYTE*)&dwTemp,4);
*/
//**********把在AD的原始数据中g_sRealCode,**********
//以24位二进制补码的数,扩展到32位二进制补码的数
pdwCode = &g_sRealCode.dwSa;
j = 0;
for(i=0; i<4; i++) //A相视在功率 有功功率 无功功率 功率因数
{
iValue[j] = *pdwCode & 0x00ffffff;
if(*pdwCode & 0x00800000 ) //AD的原始数据为负数
{
iValue[j] |= 0xff000000; //符号位扩展
}
pdwCode ++;
j++;
}
pdwCode = &g_sRealCode.dwTemp;
for(i=0; i<6; i++) //温度 频率 B相视在功率 有功功率 无功功率 功率因数
{
iValue[j] = *pdwCode & 0x00ffffff;
if(*pdwCode & 0x00800000 ) //AD的原始数据为负数
{
iValue[j] |=0xff000000; //符号位扩展
}
pdwCode ++;
j++;
}
pdwCode = &g_sRealCode.dwSc;//C相视在功率 有功功率 无功功率 功率因数
for(i=0; i<4; i++)
{
iValue[j] = *pdwCode & 0x00ffffff;
if(*pdwCode & 0x00800000 ) //AD的原始数据为负数
{
iValue[j] |=0xff000000; //符号位扩展
}
pdwCode ++;
j++;
}
//***********把电压的数据工程化************
fRealVal[0]=(float)( g_sRealCode.dwUa & 0x00ffffff);
fRealVal[1]=(float)( g_sRealCode.dwUb & 0x00ffffff);
fRealVal[2]=(float)( g_sRealCode.dwUc & 0x00ffffff);
for(i=0; i<3; i++)
{
fRealVal[i] *= 2500.0 ; //250*10
fRealVal[i] /=10066329.6; //((2^24)*0.6=10066329.6)=0x999999
}
for(i=0; i<3; i++)
{
if(fRealVal[i] <3 )fRealVal[i] =0;
}
g_sRealVal.wUa = fRealVal[0];
g_sRealVal.wUb = fRealVal[1];
g_sRealVal.wUc = fRealVal[2];
fRealVal[0]=(float)( g_sRealCode.dwU0 & 0x00ffffff);
fRealVal[0] *= 250.0 * 10.0; //额定值*系数(x100)?
fRealVal[0] /=10066329.6; //((2^24)*0.6=10066329.6)=0x999999
g_sRealVal.wU0 = fRealVal[0];
/*dwTemp = g_sRealVal.wUa;
WriteCom(0,(BYTE*)&dwTemp,2);
dwTemp = g_sRealVal.wUb;
WriteCom(0,(BYTE*)&dwTemp,2);
dwTemp = g_sRealVal.wUc;
WriteCom(0,(BYTE*)&dwTemp,2);
*/
//***********把电流的数据工程化************
fRealVal[0]=(float)( g_sRealCode.dwIa & 0x00ffffff);
fRealVal[1]=(float)( g_sRealCode.dwIb & 0x00ffffff);
fRealVal[2]=(float)( g_sRealCode.dwIc & 0x00ffffff);
for(i=0; i<3; i++)
{
fRealVal[i] *= 6000.0;// * 1000; //额定值5.1A
fRealVal[i] /=10066329.6; //((2^24)*0.6=10066329.6)=0x999999
}
g_sRealVal.wIa = fRealVal[0];
g_sRealVal.wIb = fRealVal[1];
g_sRealVal.wIc = fRealVal[2];
/* dwTemp = g_sRealVal.wIa;
WriteCom(0,(BYTE*)&dwTemp,2);
dwTemp = g_sRealVal.wIb;
WriteCom(0,(BYTE*)&dwTemp,2);
dwTemp = g_sRealVal.wIc;
WriteCom(0,(BYTE*)&dwTemp,2);
*/
fRealVal[0]=(float)( g_sRealCode.dwI0 & 0x00ffffff);
fRealVal[0] *= 6000.0; //额定值系数x1000
fRealVal[0] /=10066329.6; //((2^24)*0.6=10066329.6)=0x999999
g_sRealVal.wI0 = fRealVal[0];
j = 0;
/*dwTemp = g_sRealVal.wU0;
WriteCom(0,(BYTE*)&dwTemp,2);
dwTemp = g_sRealVal.wI0;
WriteCom(0,(BYTE*)&dwTemp,2);
*/
//***********把A相功率的数据工程化************
fRealVal[0]=(float)iValue[j++]; //A相视在功率
fRealVal[1]=(float)iValue[j++]; //有功功率
fRealVal[2]=(float)iValue[j++]; //无功功率
for(i=0; i<3; i++)
{
//额定值220*5A*系数(10*1000)
fRealVal[i] *= 250.0 *60.0 ;//wVOLTAGE_STANDARD[i] * 5 *10 ;
fRealVal[i] /=3019898.88; //0.6 * 0.6 * (2~23) = 3019898.88
}
g_sRealVal.iSa = fRealVal[0];
g_sRealVal.iPa = fRealVal[1];
g_sRealVal.iQa = fRealVal[2];
fRealVal[0]=(float)iValue[j++]; //功率因数
fRealVal[0] *= 1000; //
fRealVal[0] /=8388608; //(2~23) = 8388608
g_sRealVal.iPFa = fRealVal[0];
//**********温度 频率工程化处理
fRealVal[0] = (float)iValue[j++]; //温度
fRealVal[0] *= 100;//系数100
fRealVal[0] /= 65536; //2~16
g_sRealVal.wTemper = fRealVal[0];
fRealVal[0] = (float)iValue[j++]; //频率
fRealVal[0] *= 100;//系数100
fRealVal[0] /= 8388608.0; //2~23
fRealVal[0] *= 4000; //4000 = Mclk/(k*1024) Mclk =4.096Mhz k =1
g_sRealVal.wFreq = fRealVal[0];
//***********把B相功率的数据工程化************
fRealVal[0]=(float)iValue[j++]; //A相视在功率
fRealVal[1]=(float)iValue[j++]; //有功功率
fRealVal[2]=(float)iValue[j++]; //无功功率
for(i=0; i<3; i++)
{
//额定值220*5A*系数(10*1000)
fRealVal[i] *=250*60.0; // wVOLTAGE_STANDARD[i] * 5 *10 ;
fRealVal[i] /=3019898.88; //0.6 * 0.6 * (2~23) = 3019898.88
}
g_sRealVal.iSb = fRealVal[0];
g_sRealVal.iPb = fRealVal[1];
g_sRealVal.iQb = fRealVal[2];
fRealVal[0]=(float)iValue[j++]; //功率因数
fRealVal[0] *= 1000; //
fRealVal[0] /=8388608; //(2~23) = 8388608
g_sRealVal.iPFb = fRealVal[0];
//***********把C相功率的数据工程化************
fRealVal[0]=(float)iValue[j++]; //c相视在功率
fRealVal[1]=(float)iValue[j++]; //有功功率
fRealVal[2]=(float)iValue[j++]; //无功功率
for(i=0; i<3; i++)
{
//额定值220*5A*
fRealVal[i] *= 250*60.0;//wVOLTAGE_STANDARD[i] * 5 *10 ;
fRealVal[i] /=3019898.88; //0.6 * 0.6 * (2~23) = 3019898.88
}
g_sRealVal.iSc = fRealVal[0];
g_sRealVal.iPc = fRealVal[1];
g_sRealVal.iQc = fRealVal[2];
fRealVal[0]=(float)iValue[j++]; //功率因数
fRealVal[0] *= 1000; //
fRealVal[0] /=8388608; //(2~23) = 8388608
g_sRealVal.iPFc = fRealVal[0];
/* dwTemp = g_sRealVal.iSc;
PrintHex((BYTE*)&dwTemp,4);
dwTemp = g_sRealVal.iPc;
PrintHex((BYTE*)&dwTemp,4);
dwTemp = g_sRealVal.iQc;
PrintHex((BYTE*)&dwTemp,4);
dwTemp = g_sRealVal.iPFc;
PrintHex((BYTE*)&dwTemp,4);
*/
//去掉零漂
if(g_sRealVal.wUa<=2 )
{
g_sRealVal.wUa = 0;
}
if(g_sRealVal.wIa<=5)//0.01A
{
g_sRealVal.wIa =0;
}
if( g_sRealVal.wUa==0 || g_sRealVal.wIa==0)
{
g_sRealVal.iSa = 0;
g_sRealVal.iPa = 0;
g_sRealVal.iQa = 0;
g_sRealVal.iPFa = 0;
}
//去掉零漂
if(g_sRealVal.wUb<=2 )
{
g_sRealVal.wUb = 0;
}
if(g_sRealVal.wIb<=5) //0.01A
{
g_sRealVal.wIb =0;
}
if( g_sRealVal.wUb==0 || g_sRealVal.wIb==0)
{
g_sRealVal.iSb = 0;
g_sRealVal.iPb = 0;
g_sRealVal.iQb = 0;
g_sRealVal.iPFb = 0;
}
//去掉零漂
if(g_sRealVal.wUc<=2 )
{
g_sRealVal.wUc = 0;
}
if(g_sRealVal.wIc<=5)//0.01A
{
g_sRealVal.wIc =0;
}
if( g_sRealVal.wUc==0 || g_sRealVal.wIc==0)
{
g_sRealVal.iSc = 0;
g_sRealVal.iPc = 0;
g_sRealVal.iQc = 0;
g_sRealVal.iPFc = 0;
}
//**********计算总的功率 及 功率因数*********
g_sRealVal.iS = g_sRealVal.iSa + g_sRealVal.iSb + g_sRealVal.iSc;
g_sRealVal.iP = g_sRealVal.iPa + g_sRealVal.iPb + g_sRealVal.iPc;
g_sRealVal.iQ = g_sRealVal.iQa + g_sRealVal.iQb + g_sRealVal.iQc;
fRealVal[0] = (float)g_sRealVal.iS;
fRealVal[1] = (float)g_sRealVal.iP * (float)1000;
if(fRealVal[0] ==0) fRealVal[2] = 0;
else fRealVal[2] = fRealVal[1] / fRealVal[0];
g_sRealVal.iPF = fRealVal[2];
if(g_sRealVal.iPF >1000)g_sRealVal.iPF =1000;
//**********以下为直流量 和温度传感器的值
GetAdcValue_cs5460(dwDCValue);
iValue[0] = dwDCValue[0] & 0x00ffffff;
if(dwDCValue[0] & 0x00800000 ) //AD的原始数据为负数
{
iValue[0] |= 0xff000000; //符号位扩展
}
iValue[1] = dwDCValue[1] & 0x00ffffff;
if(dwDCValue[1] & 0x00800000 ) //AD的原始数据为负数
{
iValue[1] |= 0xff000000; //符号位扩展
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -