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

📄 powersupply.c

📁 NEC527多功能电表完整源代码,包括LCD驱动,显示,计量,存储,整个527驱动程序!
💻 C
📖 第 1 页 / 共 4 页
字号:
    }	
}

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 + -