📄 powersupply.c
字号:
}
}
void SavePeakVoltage(unsigned short addr,unsigned long v)
{
v = Hex2BcdLong(v);
FramWrite( addr, (unsigned char *)&v, 3 );
WriteTimeToFram( addr+3, 4 );
}
void PhaseVoltageDetect(void)
{
unsigned long i_mrs, v_mrs;
unsigned short addr, v_temp,v_temp1,v_temp2;
unsigned char i[2],temp[2],j;
unsigned char lvisw = LowVIStateWord;
unsigned char ovisw = OverVIStateWord;
unsigned char mrs = MeterRunningState;
unsigned char pnsw = PowerNetStateWord&0x77;
unsigned char vsw = VStateWord,flag=0;
MemSetZero( (unsigned char *)&pub_data.pub_data_buff2[0], 16 );
for( i[0] = 0; i[0] < 3; i[0]++ )
{
Att702xRead( ATT_ADDR_IRMSA+i[0], (unsigned char *)&pub_data.pub_data_buff2[0] );
i_mrs = ( pub_data.pub_data_buff2[0] * 1000 ) >> 13;
CurrentVI[i[0]+3] = (unsigned short)(i_mrs/10);
addr = ADDR_OF_DAY_DATA_START + DAY_PHIA_INFO+DAY_PH_OFFSET * i[0] + DAY_MAX_VAL;
FramRead( addr, (unsigned char *)&pub_data.pub_data_buff2[2], 3 );
pub_data.pub_data_buff2[2] = Bcd2HexLong( pub_data.pub_data_buff2[2] );
if( i_mrs > pub_data.pub_data_buff2[2] )
{
MaxTimerCounter[0][i[0]]++;
if( MaxTimerCounter[0][i[0]] >= 5 )
{
MaxTimerCounter[0][i[0]] = 0;
SavePeakVoltage( addr, i_mrs );
}
}
else
{
MaxTimerCounter[0][i[0]] = 0;
}
addr += DAY_MIN_VAL;
FramRead( addr, (unsigned char *)&pub_data.pub_data_buff2[2], 3 );
pub_data.pub_data_buff2[2] = Bcd2HexLong( pub_data.pub_data_buff2[2] );
if( pub_data.pub_data_buff2[2] == 0 )
{
pub_data.pub_data_buff2[2] = (ulong)_SysPotInfo.rated_ib*10;
}
if( ( i_mrs < pub_data.pub_data_buff2[2] ) && ( i_mrs > _SysPotInfo.lvi_con[EVT_SMALL_LOAD_CURRENT] ) )
{
MaxTimerCounter[1][i[0]]++;
if( MaxTimerCounter[1][i[0]] >= 5 )
{
MaxTimerCounter[1][i[0]] = 0;
SavePeakVoltage( addr, i_mrs );
}
}
else
{
MaxTimerCounter[1][i[0]] = 0;
}
Att702xRead( ATT_ADDR_URMSA+i[0], (unsigned char *)&pub_data.pub_data_buff2[0] );
v_mrs = ( pub_data.pub_data_buff2[0] * 100 ) >> 13;
CurrentVI[i[0]] = (unsigned short)(v_mrs/10);
addr = ADDR_OF_DAY_DATA_START+DAY_PHVA_INFO+DAY_PH_OFFSET*i[0]+DAY_MAX_VAL;
FramRead( addr, (unsigned char *)&pub_data.pub_data_buff2[2], 3 );
pub_data.pub_data_buff2[2] = Bcd2HexLong( pub_data.pub_data_buff2[2] );
if( v_mrs > pub_data.pub_data_buff2[2] )
{
MaxTimerCounter[2][i[0]]++;
if( MaxTimerCounter[2][i[0]] >= 5 )
{
MaxTimerCounter[2][i[0]] = 0;
SavePeakVoltage( addr, v_mrs );
}
}
else
{
MaxTimerCounter[2][i[0]] = 0;
}
addr += DAY_MIN_VAL;
FramRead( addr, (unsigned char *)&pub_data.pub_data_buff2[2], 3 );
pub_data.pub_data_buff2[2] = Bcd2HexLong( pub_data.pub_data_buff2[2] );
if( pub_data.pub_data_buff2[2] == 0 ) pub_data.pub_data_buff2[2] = _SysPotInfo.regv_con[2];
if( v_mrs < pub_data.pub_data_buff2[2] )
{
MaxTimerCounter[3][i[0]]++;
if( MaxTimerCounter[3][i[0]] >= 5 )
{
MaxTimerCounter[3][i[0]] = 0;
SavePeakVoltage( addr, v_mrs );
}
}
else
{
MaxTimerCounter[3][i[0]] = 0;
}
temp[0] = PS_LVA_PHA << i[0];
if( ( v_mrs < _SysPotInfo.lvi_con[EVT_LOWV_VCON] ) &&
( i_mrs < _SysPotInfo.lvi_con[EVT_LOWV_ICON] ) )
{
if( !( EvtLostvFlag & temp[0] ) )
{
EvtLostvFlag |= temp[0];
EvtLostvTimerCount[i[0]] = 0;
}
if( EvtLostvTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_LOST] )
{
EvtLostvTimerCount[i[0]] = 0;
if( !( mrs & temp[0] ) )
{
mrs |= temp[0];
}
if( !( pnsw & temp[0] ) )
{
pnsw |= temp[0];
}
}
}
if( ( v_mrs > _SysPotInfo.lvi_con[EVT_LOWV_VRCON] ) ||
( i_mrs > _SysPotInfo.lvi_con[EVT_LOWV_ICON] ) )
{
if( EvtLostvFlag & temp[0] )
{
EvtLostvFlag &=~ temp[0];
EvtLostvTimerCount[i[0]] = 0;
}
if( EvtLostvTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_LOST] )
{
EvtLostvTimerCount[i[0]] = 0;
if( mrs & temp[0] )
{
mrs &=~ temp[0];
}
if( pnsw & temp[0] )
{
pnsw &=~ temp[0];
}
}
}
if( ( v_mrs < _SysPotInfo.lvi_con[EVT_LOWV_VCON] ) &&
( i_mrs > _SysPotInfo.lvi_con[EVT_LOWV_ICON] ) )
{
if( !(EvtLowvFlag & temp[0] ) )
{
EvtLowvFlag |= temp[0];
EvtLowvTimerCount[i[0]] = 0;
}
if( EvtLowvTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_LOWV] )
{
EvtLowvTimerCount[i[0]] = 0;
if( !( lvisw & temp[0] ) )
{
lvisw |= temp[0];
}
}
}
if( ( v_mrs > _SysPotInfo.lvi_con[EVT_LOWV_VRCON] ) ||
( i_mrs < _SysPotInfo.lvi_con[EVT_LOWV_ICON] ) )
{
if( EvtLowvFlag & temp[0] )
{
EvtLowvFlag &=~ temp[0];
EvtLowvTimerCount[i[0]] = 0;
}
if( EvtLowvTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_LOWV] )
{
EvtLowvTimerCount[i[0]] = 0;
if( lvisw & temp[0] )
{
lvisw &=~ temp[0];
}
}
}
temp[0] = (unsigned char)(PS_OVUP_PHA<<i[0]);
temp[1] = (unsigned char)(PS_LVDO_PHA<<i[0]);
if( v_mrs < _SysPotInfo.regv_con[1] )
{
if( EvtOverUpFlag & temp[0] )
{
EvtOverUpFlag &=~ temp[0];
EvtOverUpTimerCount[i[0]] = 0;
}
if( EvtOverUpTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_VOVUP] )
{
EvtOverUpTimerCount[i[0]] = 0;
if( vsw & temp[0] )
{
vsw &=~ temp[0];
SaveVoltageInfo( i[0], vsw );
VStateWord = vsw;
FramWrite( ADDR_OF_VSW, (unsigned char *)&vsw, 1 );
}
}
if( !( EvtOverDownFlag & temp[1] ) )
{
EvtOverDownFlag |= temp[1];
EvtOverDownTimerCount[i[0]] = 0;
}
if( EvtOverDownTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_VOVDOWN] )
{
EvtOverDownTimerCount[i[0]] = 0;
if( !( vsw & temp[1] ) )
{
vsw |= temp[1];
SaveVoltageInfo( i[0], vsw );
VStateWord = vsw;
FramWrite( ADDR_OF_VSW, (unsigned char *)&vsw, 1 );
}
if( ovisw & temp[1] )
{
ovisw &=~ temp[1];
}
}
}
else if( v_mrs > _SysPotInfo.regv_con[0] )
{
if( EvtOverDownFlag & temp[1] )
{
EvtOverDownFlag &=~ temp[1];
EvtOverDownTimerCount[i[0]] = 0;
}
if( EvtOverDownTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_VOVDOWN] )
{
EvtOverDownTimerCount[i[0]] = 0;
if( vsw & temp[1] )
{
vsw &=~ temp[1];
SaveVoltageInfo( i[0], vsw );
VStateWord = vsw;
FramWrite( ADDR_OF_VSW, (unsigned char *)&vsw, 1 );
}
}
if( !( EvtOverUpFlag & temp[0] ) )
{
EvtOverUpFlag |= temp[0];
EvtOverUpTimerCount[i[0]] = 0;
}
if( EvtOverUpTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_VOVUP] )
{
EvtOverUpTimerCount[i[0]] = 0;
if( !( vsw & temp[0] ) )
{
vsw |= temp[0];
SaveVoltageInfo( i[0], vsw );
VStateWord = vsw;
FramWrite( ADDR_OF_VSW, (unsigned char *)&vsw, 1 );
}
if( !( pnsw & temp[0] ) )
{
pnsw |= temp[0];
}
if( !( ovisw & temp[1] ) )
{
ovisw |= temp[1];
}
}
}
else
{
if( ( v_mrs > _SysPotInfo.regv_con[3] ) &&
( v_mrs < _SysPotInfo.regv_con[2] ) )
{
if( EvtOverDownFlag & temp[1] )
{
EvtOverDownFlag &=~ temp[1];
EvtOverDownTimerCount[i[0]] = 0;
}
if( EvtOverDownTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_VOVDOWN] )
{
EvtOverDownTimerCount[i[0]] = 0;
if( vsw & temp[1] )
{
vsw &=~ temp[1];
}
}
if( EvtOverUpFlag & temp[0] )
{
EvtOverUpFlag &=~ temp[0];
EvtOverUpTimerCount[i[0]] = 0;
}
if( EvtOverUpTimerCount[i[0]]++ > _SysPotInfo.timer_count[EVT_TC_VOVUP] )
{
EvtOverUpTimerCount[i[0]] = 0;
if( vsw & temp[0] )
{
vsw &=~ temp[0];
}
if( pnsw & temp[0] )
{
pnsw &=~ temp[0];
}
if( ovisw & temp[1] )
{
ovisw &=~ temp[1];
}
}
if( ( !( vsw & temp[0] ) ) && ( !( vsw & temp[1] ) ) )
{
SaveVoltageInfo( i[0], 0 );
if( vsw != VStateWord )
{
VStateWord = vsw;
FramWrite( ADDR_OF_VSW, (unsigned char *)&vsw, 1 );
}
}
}
}
}
for( i[0] = 0; i[0] < 4; i[0]++ )
{
v_temp = GetPowerFactor( _calc_factor_item[i[0]] );
v_temp = Bcd2HexShort( v_temp );
pub_data.pub_data_buff2[0] = v_temp;
pub_data.pub_data_buff2[0] *= 10;
addr = ADDR_OF_DAY_DATA_START + DAY_PHFA_INFO + DAY_PH_OFFSET * i[0] + DAY_MAX_VAL;
FramRead( addr, (unsigned char *)&pub_data.pub_data_buff2[1], 3 );
pub_data.pub_data_buff2[1] = Bcd2HexLong( pub_data.pub_data_buff2[1] );
if( pub_data.pub_data_buff2[0] > pub_data.pub_data_buff2[1] )
{
LimitFactorTimerCounter[0][i[0]]++;
if( LimitFactorTimerCounter[0][i[0]] >= 5 )
{
LimitFactorTimerCounter[0][i[0]] = 0;
SavePeakVoltage( addr, pub_data.pub_data_buff2[0] );
}
}
else
{
LimitFactorTimerCounter[0][i[0]] = 0;
}
addr += DAY_MIN_VAL;
FramRead( addr, (unsigned char *)&pub_data.pub_data_buff2[1], 3 );
pub_data.pub_data_buff2[1] = Bcd2HexLong( pub_data.pub_data_buff2[1] );
if( ( pub_data.pub_data_buff2[0] < pub_data.pub_data_buff2[1] ) || ( pub_data.pub_data_buff2[1] == 0 ) )
{
LimitFactorTimerCounter[1][i[0]]++;
if( LimitFactorTimerCounter[1][i[0]] >= 5 )
{
LimitFactorTimerCounter[1][i[0]] = 0;
SavePeakVoltage( addr, pub_data.pub_data_buff2[0] );
}
}
else
{
LimitFactorTimerCounter[1][i[0]] = 0;
}
}
if( ( CurrentVI[3] < _SysPotInfo.lvi_con[EVT_SMALL_LOAD_CURRENT]/10 ) &&
( CurrentVI[4] < _SysPotInfo.lvi_con[EVT_SMALL_LOAD_CURRENT]/10 ) &&
( CurrentVI[5] < _SysPotInfo.lvi_con[EVT_SMALL_LOAD_CURRENT]/10 ) )
{
if( !( EvtTimerCounterflag & BIT5 ) )
{
EvtTimerCounterflag |= BIT5;
EvtTimerCounter[5] = 0;
}
if( !( AlarmCtlWord2 & ALARM_OF_SMALL_LOAD ) )
{
if( EvtTimerCounter[5]++ >= _SysPotInfo.timer_count[EVT_TC_SMALL_LOAD] )
{
EvtTimerCounter[5] = 0;
AlarmCtlWord2 |= ALARM_OF_SMALL_LOAD;
}
}
}
else
{
if( EvtTimerCounterflag & BIT5 )
{
EvtTimerCounterflag &=~ BIT5;
EvtTimerCounter[5] = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -