📄 powermeasure.c
字号:
sum = SysDoCheckSum( (unsigned char*)&pTodayPower[1], sizeof(_energy_s)-4 );
DataflashBuffer1Write( 0, (unsigned char *)&sum, 4 );
DataflashBuffer1ToMain( (ushort)addr );
}
}
void LoadEnergy(unsigned char *data,unsigned char flag,unsigned char item)
{
unsigned long addr,temp,temp1;
unsigned long *pTodayPower = (unsigned long*)(&_energy);
addr = GetPrevMonAddr( flag );
if( ( flag == 0 ) || ( flag == 0xFF ) )
{
temp = pTodayPower[item+1];
}
else
{
temp=0;
}
DataflashReadByBuffer1( addr+item*4, (unsigned char *)&temp1, 4 );
temp1 = __bcd_add_long( temp1, temp );
memcpy( data, (unsigned char *)&temp1, 4 );
}
void LoadMaxDemandInfo(unsigned char *data,unsigned char flag,unsigned char item)
{
unsigned long addr;
unsigned char temp = item % 50;
item /= 50;
item--;
if( ( 0 == flag ) || ( 0xFF == flag ) )
{
addr = ADDR_OF_CUR_MD_START + MON_MD_REC_OFFSET * temp;
FramRead( (ushort)(addr+(unsigned short)item*4), data, 4 );
}
else
{
addr = GetPrevMonAddr(flag)+MON_MD_REC-4;
addr = addr+(ushort)temp*MON_MD_REC_OFFSET;
DataflashReadByBuffer1( addr+(unsigned short)item*4, data, 4 );
}
}
void LoadPhasePowerData(unsigned char *data, unsigned char mon, unsigned char item)
{
unsigned long addr,temp,temp1;
unsigned long *pPhasePower = (unsigned long*)(&CurrentPhasePower);
addr = GetPrevMonAddr( mon );
if( ( mon == 0 ) || ( mon == 0xFF ) )
{
temp = pPhasePower[item+1];
}
else
{
temp=0;
}
DataflashReadByBuffer1( addr+MON_ENERGY_PHASE-4+(ushort)item*4, (unsigned char *)&temp1, 4 );
temp1 = __bcd_add_long( temp1, temp );
memcpy( data, (unsigned char *)&temp1, 4 );
}
void PowerDataStoreRuleDay(void)
{
StoreTodayEnergy(BASE_CURS);
StoreTodayEnergy(BASE_CUR);
}
void PowerDataShift(unsigned char year,unsigned char month)
{
unsigned long addr;
unsigned char ii;
// 转存电量
year %= 10;
for( ii = 0; ii < 2; ii++ )
{
if( DataflashMainToBuffer1( ( BASE_CUR/DF_PAGE_LEN )+ii ) == OK )
{
DataflashBuffer1ToMain( ( YEAR_BASE/DF_PAGE_LEN )+( ( year*12 )+month )*2+ii );
}
}
}
void MonthDataShift(unsigned char year,unsigned char month)
{
unsigned long addr;
unsigned short temp = 0;
// 转存每月最大( 小) 值及及平均值
addr = YEAR_BASE + (unsigned long)( ( (year*12) + month ) * 2 ) * DF_PAGE_LEN;
FramRead( ADDR_OF_MON_DATA_START, (unsigned char *)&pub_data.pub_data_buff3[0], MON_DATA_SIZE );
DataflashWriteByBuffer1( addr+MON_PH_DATA_INFO, (unsigned char *)&pub_data.pub_data_buff3[0], MON_DATA_SIZE );
// 清零月平均值保存
FramWrite( ADDR_OF_MON_AVERAGE_PTR, (unsigned char *)&temp, 2 );
MemSetoWriteE2prom( ADDR_OF_MON_AVERAGE_INFO, MON_AVERAGE_INFO_SIZE );
}
void ClearTodayData(void)
{
// 清日电量
MemSetZero( (unsigned char *)&_energy.csum, sizeof(_energy_s) );
FramWrite( ADDR_OF_TODAY_PWR_START, (unsigned char*)(&_energy.csum), sizeof(_energy_s) );
MemSetZero( (unsigned char *)&CurrentPhasePower[0], sizeof( CurrentPhasePower ) );
FramWrite( ADDR_OF_PHASEPWR_START, (unsigned char *)&CurrentPhasePower[0], sizeof( CurrentPhasePower ) );
// 清日数据
MemSetZero( (unsigned char *)&pub_data.pub_data_buff3[0], 151 );
FramWrite( ADDR_OF_DAY_DATA_START+4, (unsigned char *)&pub_data.pub_data_buff3[0], 151 );
FramWrite( ADDR_OF_DAY_DATA_START+155, (unsigned char *)&pub_data.pub_data_buff3[0], 151 );
}
void ClearCurrentMonthData(unsigned long addr)
{
DataflashClearPages(addr,0,DF_PAGE_LEN,4);
ClearCurrMd();
}
void ClearPowerDataInRam(void)
{
MemSetZero( (unsigned char *)&_energy.csum, sizeof(_energy_s) );
FramWrite( ADDR_OF_TODAY_PWR_START, (unsigned char*)(&_energy.csum), sizeof(_energy_s) );
MemSetZero( (unsigned char *)&PwrData.chksum, sizeof(_sys_wat_data) );
FramWrite( ADDR_OF_RAM, (unsigned char *)&PwrData.chksum, sizeof(_sys_wat_data) );
MemSetZero( (unsigned char *)&TempLinePower[0], 36 );
FramWrite( ADDR_OF_LINEPWR_START, (unsigned char*)&(TempLinePower[0]), 36 );
MemSetZero( (unsigned char *)&CurrentPhaseInstPower[0], 52 );
FramWrite( ADDR_OF_PHASEPWR_START, (unsigned char *)&CurrentPhaseInstPower[0], 52 );
MemSetZero( (unsigned char *)&CurrentPhasePower[0], 52 );
FramWrite( ADDR_OF_PHASEINSTPWR_START, (unsigned char *)&CurrentPhasePower[0], 52 );
}
void CalcEnergyData(void)
{
unsigned short instp;
unsigned char temp=0,i,pa,flg=0,j;
unsigned long *pTodayPower = (unsigned long*)(&_energy);
if( PwrData.chksum != (SysDoCheckSum((unsigned char *)&PwrData.WattHourLeft[0],sizeof(_sys_wat_data)-4 ) ) )
{
MemSetZero( ( unsigned char * )&PwrData.chksum, sizeof(_sys_wat_data) );
FramWrite( ADDR_OF_RAM, (unsigned char *)&PwrData.chksum, sizeof(_sys_wat_data) );
}
if( CurrentPhaseInstPower[0] != ( SysDoCheckSum( (unsigned char *)&CurrentPhaseInstPower[1], 48 ) ) )
{
MemSetZero( (unsigned char *)&CurrentPhaseInstPower[0], 52 );
FramWrite( ADDR_OF_PHASEINSTPWR_START,(unsigned char *)&CurrentPhaseInstPower[0], 52 );
}
MemSetZero( (unsigned char *)&pub_data.pub_data_buff1[0], 64 );
_disable_interrupt();
RemotePulseCount[0] += DeltaWattActiveZ[3];
RemotePulseCount[1] += DeltaWattActiveF[3];
RemotePulseCount[2] += DeltaWattReactiveZ[3];
RemotePulseCount[3] += DeltaWattReactiveF[3];
for( i = 0; i < 4; i++ )
{
if( DeltaWattActiveZ[i] <= PER_50WH )
{
pub_data.pub_data_buff1[i] = DeltaWattActiveZ[i];
}
DeltaWattActiveZ[i]=0;
if( DeltaWattActiveF[i] <= PER_50WH )
{
pub_data.pub_data_buff1[4+i] = DeltaWattActiveF[i];
}
DeltaWattActiveF[i] = 0;
if( DeltaWattReactiveZ[i] <= PER_50WH )
{
pub_data.pub_data_buff1[8+i] = DeltaWattReactiveZ[i];
}
DeltaWattReactiveZ[i] = 0;
if( DeltaWattReactiveF[i] <= PER_50WH )
{
pub_data.pub_data_buff1[12+i] = DeltaWattReactiveF[i];
}
DeltaWattReactiveF[i] = 0;
if(DeltaWattLActive[i]<=PER_50WH)
{
pub_data.pub_data_buff1[16+i] = DeltaWattLActive[i]*100;
}
DeltaWattLActive[i] = 0;
if(DeltaWattLReactive[i]<=PER_50WH)
{
pub_data.pub_data_buff1[20+i] = DeltaWattLReactive[i]*100;
}
DeltaWattLReactive[i] = 0;
if( pub_data.pub_data_buff1[i] > pub_data.pub_data_buff1[4+i] )
{
PhaseActive &=~ (unsigned char)( ( 0x01 << i ) );
}
else if( pub_data.pub_data_buff1[i] < pub_data.pub_data_buff1[4+i] )
{
PhaseActive |= (unsigned char)( ( 0x01 << i ) );
}
if( pub_data.pub_data_buff1[8+i] > pub_data.pub_data_buff1[12+i] )
{
PhaseReactive &=~ (unsigned char)( ( 0x01 << i ) );
}
else if( pub_data.pub_data_buff1[8+i] < pub_data.pub_data_buff1[12+i] )
{
PhaseReactive |= (unsigned char)( ( 0x01 << i ) );
}
}
_enable_interrupt();
if( pub_data.pub_data_buff1[3] > pub_data.pub_data_buff1[7] )
{
PhaseActive &=~ BIT4;
}
else if( pub_data.pub_data_buff1[3] < pub_data.pub_data_buff1[7] )
{
PhaseActive |= BIT4;
}
if( pub_data.pub_data_buff1[11] > pub_data.pub_data_buff1[15] )
{
PhaseReactive &=~ BIT4;
}
else if( pub_data.pub_data_buff1[11] < pub_data.pub_data_buff1[15] )
{
PhaseReactive |= BIT4;
}
// 谐波电能
PwrData.LinePower[0] += pub_data.pub_data_buff1[19];
PwrData.LinePower[1] += pub_data.pub_data_buff1[16];
PwrData.LinePower[2] += pub_data.pub_data_buff1[17];
PwrData.LinePower[3] += pub_data.pub_data_buff1[18];
PwrData.LinePower[4] += pub_data.pub_data_buff1[23];
PwrData.LinePower[5] += pub_data.pub_data_buff1[20];
PwrData.LinePower[6] += pub_data.pub_data_buff1[21];
PwrData.LinePower[7] += pub_data.pub_data_buff1[22];
// A 相正向有功电量
CurrentPhaseInstPower[1] += pub_data.pub_data_buff1[0];
// A 相反向有功电量
CurrentPhaseInstPower[2] += pub_data.pub_data_buff1[4];
// A 相正向无功电量
CurrentPhaseInstPower[3] += pub_data.pub_data_buff1[8];
// A 相反向无功电量
CurrentPhaseInstPower[4] += pub_data.pub_data_buff1[12];
// B 相正向有功电量
CurrentPhaseInstPower[5] += pub_data.pub_data_buff1[1];
// B 相反向有功电量
CurrentPhaseInstPower[6] += pub_data.pub_data_buff1[5];
// B 相正向无功电量
CurrentPhaseInstPower[7] += pub_data.pub_data_buff1[9];
// B 相反向无功电量
CurrentPhaseInstPower[8] += pub_data.pub_data_buff1[13];
// C 相正向有功电量
CurrentPhaseInstPower[9] += pub_data.pub_data_buff1[2];
// C 相反向有功电量
CurrentPhaseInstPower[10] += pub_data.pub_data_buff1[6];
// C 相正向无功电量
CurrentPhaseInstPower[11] += pub_data.pub_data_buff1[10];
// C 相反向无功电量
CurrentPhaseInstPower[12] += pub_data.pub_data_buff1[14];
LCDMEM[15]=(LCD_SY_INFO_N1|LCD_SY_INFO_N2|LCD_SY_INFO_N3|LCD_SY_INFO_N4);
LCDMEM[16]|=LCD_EN_INFO_VAR|LCD_EN_INFO_WATT;
if( pub_data.pub_data_buff1[3] > pub_data.pub_data_buff1[7] )
{
if( pub_data.pub_data_buff1[11] > pub_data.pub_data_buff1[15] )
{
//第一象限
LCDMEM[15] |= LCD_SY_INFO_M2;
DisplayQuadrantFlag = LCD_SY_INFO_M2;
flg = 1;
}
else if( pub_data.pub_data_buff1[11] < pub_data.pub_data_buff1[15] )
{
//第四象限
LCDMEM[15] |= LCD_SY_INFO_M3;
flg = 1;
DisplayQuadrantFlag = LCD_SY_INFO_M3;
}
}
else if( pub_data.pub_data_buff1[3] < pub_data.pub_data_buff1[7] )
{
if( pub_data.pub_data_buff1[11] > pub_data.pub_data_buff1[15] )
{
//第二象限
LCDMEM[15] |= LCD_SY_INFO_M1;
flg = 1;
DisplayQuadrantFlag = LCD_SY_INFO_M1;
}
else if( pub_data.pub_data_buff1[11] < pub_data.pub_data_buff1[15] )
{
//第三象限
LCDMEM[15] |= LCD_SY_INFO_M4;
flg = 1;
DisplayQuadrantFlag = LCD_SY_INFO_M4;
}
}
if( flg == 0 )
{
LCDMEM[15] |= DisplayQuadrantFlag;
}
//有功功率方向为正
if( pub_data.pub_data_buff1[3] >= pub_data.pub_data_buff1[7] )
{
//无功功率方向为正
if( pub_data.pub_data_buff1[11] >= pub_data.pub_data_buff1[15] )
{
//第一象限
PwrData.WattHourLeft[6] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
PwrData.req_pwr[6] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
pub_data.pub_data_buff1[24] = pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15];
pub_data.pub_data_buff1[28] = pub_data.pub_data_buff1[3] + pub_data.pub_data_buff1[7];
}
else
{
//第四象限
PwrData.WattHourLeft[7] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
PwrData.req_pwr[7] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
pub_data.pub_data_buff1[26] = pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15];
pub_data.pub_data_buff1[30] = pub_data.pub_data_buff1[3] + pub_data.pub_data_buff1[7];
}
}
else
{
if( pub_data.pub_data_buff1[11] >= pub_data.pub_data_buff1[15] )
{
//第二象限
PwrData.WattHourLeft[8] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
PwrData.req_pwr[8] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
pub_data.pub_data_buff1[25] = pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15];
pub_data.pub_data_buff1[29] = pub_data.pub_data_buff1[3] + pub_data.pub_data_buff1[7];
}
else
{
//第三象限
PwrData.WattHourLeft[9] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
PwrData.req_pwr[9] += ( pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15] );
pub_data.pub_data_buff1[27] = pub_data.pub_data_buff1[11] + pub_data.pub_data_buff1[15];
pub_data.pub_data_buff1[31] = pub_data.pub_data_buff1[3] + pub_data.pub_data_buff1[7];
}
}
for( temp = 0; temp < 6; temp++ )
{
flg = 0x02; pa = 0x01; instp = 0x8000;
for( i = 0; i < 4; i++ )
{
if( _SysPotInfo.measure_type[temp] & flg )
{
if( _SysPotInfo.measure_type[temp] & pa )
{
if( temp < 3 )
{
instp += pub_data.pub_data_buff1[28+i];
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -