📄 iec61850.cpp
字号:
dmin = dmin* m_YcChannelCfg[j].ratio; SetActiveValue(j+1,(float)dmin); FFT_RI[j][0] = (float)Re ; FFT_RI[j][1] = (float)Im ; } //********************************************************************************* //计算负序、零序 //********************************************************************************* for(j=0;j<9;j++) { if(m_YcChannelCfg[j].type=0x18) { COEFFICIENT = 1; redress=0.041598; //zzg20050728007 } else if(m_YcChannelCfg[j].type=0x28) { COEFFICIENT= 1; redress=0.07569;//zzg20050728003 } else { COEFFICIENT= 1; redress=0.07569;//zzg20050728003 } value_p[j] = cacl_position ( FFT_RI[0],FFT_RI[1],FFT_RI[2])/4914.6*COEFFICIENT*redress; value_n[j] = cacl_negative ( FFT_RI[0],FFT_RI[1],FFT_RI[2])/4914.6*COEFFICIENT*redress; }//for(j=0;j<32;j++) //********************************************************************************* //*****判断有无启动; //********************************************************************************* for(j=0;j<9;j++) { GetActiveValue(j*3+1,&value[j*3]); GetActiveValue(j*3+2,&value[j*3+1]); GetActiveValue(j*3+3,&value[j*3+2]); //电压通道启动判断;启动标志 if(m_YcChannelCfg[3*j].type==0x18) { //相电压过压启动判断 if( (m_YcChannelCfg[3*j].controlword & 0x01)==1 ) { if((startflag[j]&0x01)==1)//之前有故障存在 { if( (value[3*j] < m_YcChannelCfg[j*3].localvalue[0]*0.95 ) && (value[3*j+1] < m_YcChannelCfg[j*3].localvalue[0]*0.95 ) && (value[3*j+2] < m_YcChannelCfg[j*3].localvalue[0]*0.95 ) ) { startflag[j]&=0xfe ; } else { startflag[j]|=0x1 ; } } else//之前没有故障存在 { if( ( value[3*j] >= m_YcChannelCfg[j*3].localvalue[0]) ||( value[3*j+1] >= m_YcChannelCfg[j*3].localvalue[0]) ||( value[3*j+2] >= m_YcChannelCfg[j*3].localvalue[0]) ) { //startflag[j]|=0x1 ; faulttime[j][0]++; } if (faulttime[j][0]>=2) { faulttime[j][0] =0; startflag[j]|=0x1 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x01)==1 ) //*************************************************************************** //***电压欠压启动 //*************************************************************************** if( (m_YcChannelCfg[j*3].controlword & 0x02)==1 ) { if((startflag[j]&0x02)==1)//之前有故障存在 { if((value[3*j] > m_YcChannelCfg[j*3].localvalue[1]*1.05 ) && (value[3*j+1] > m_YcChannelCfg[j*3].localvalue[1]*1.05 ) && (value[3*j+2] > m_YcChannelCfg[j*3].localvalue[1]*1.05 ) ) { startflag[j]&=0xfd ; } else { startflag[j]|=0x2 ; } } else//之前没有故障存在 { if(( value[3*j] <=m_YcChannelCfg[j*3].localvalue[1]) ||( value[3*j+1] <= m_YcChannelCfg[j*3].localvalue[1]) ||( value[3*j+2] <= m_YcChannelCfg[j*3].localvalue[1]) ) { //startflag[j]|=0x2 ; faulttime[j][1]++; } if(faulttime[j][1]>=2) { faulttime[j][1] = 0; startflag[j] |= 0x2; } } }//if( (m_YcChannelCfg[j].controlword & 0x01)==1 ) //*************************************************************************** //***零序电压越限启动判断 //*************************************************************************** if( (m_YcChannelCfg[j*3].controlword & 0x04)==1 ) { if((startflag[j]&0x04)==1)//之前有故障存在 { if(value[4*j+3] < (m_YcChannelCfg[j*3].localvalue[2]*1.05 ) ) { startflag[j]&=0xfb ; } else { startflag[j]|=0x4 ; } } else//之前没有故障存在 { if(( value[4*j+3] >=m_YcChannelCfg[j*3].localvalue[2])) { //startflag[j]|=0x4 ; faulttime[j][2]++; } if(faulttime[j][2]>=2) { faulttime[j][2] = 0; startflag[j] |= 0x4; } } }//if( (m_YcChannelCfg[j].controlword & 0x04)==1 ) //*************************************************************************** //***负序电压越限启动判断 //*************************************************************************** if( (m_YcChannelCfg[j*3].controlword & 0x08)==1 ) { if((startflag[j]&0x08)==1)//之前有故障存在 { if(value_n[j] < (m_YcChannelCfg[j*3].localvalue[3]*1.05 ) ) { startflag[j]&=0xf7 ; } else { startflag[j]|=0x8 ; } } else//之前没有故障存在 { if((value_n[j] >=m_YcChannelCfg[j*3].localvalue[3])) { //startflag[j]|=0x8 ; faulttime[j][3]++; } if(faulttime[j][3]>=2) { faulttime[j][3] = 0; startflag[j] |= 0x8; } } }//if( (m_YcChannelCfg[j].controlword & 0x04)==1 ) }//if(m_YcChannelCfg[j].type=0x18) else if(m_YcChannelCfg[j*3].type=0x28) { //*************************************************************************** //***相电流越限启动判断 //*************************************************************************** if( (m_YcChannelCfg[j*3].controlword & 0x01)==1 ) { if((startflag[j]&0x01)==1)//之前有故障存在 { if((value[3*j] < m_YcChannelCfg[j*3].localvalue[0]*0.95 ) && (value[3*j+1] < m_YcChannelCfg[j*3].localvalue[0]*0.95 ) && (value[3*j+2] < m_YcChannelCfg[j*3].localvalue[0]*0.95 ) ) { startflag[j]&=0xfe ; } else { startflag[j]|=0x1 ; } } else//之前没有故障存在 { if(( value[3*j] >= m_YcChannelCfg[j*3].localvalue[0]) ||( value[3*j+1] >= m_YcChannelCfg[j*3].localvalue[0]) ||( value[3*j+2] >= m_YcChannelCfg[j*3].localvalue[0]) ) { //startflag[j]|=0x1 ; faulttime[j][0]++; } if (faulttime[j][0]>=2) { faulttime[j][0] =0; startflag[j]|=0x1 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x01)==1 ) //*************************************************************************** //***零序电流越限启动判断 //*************************************************************************** if( (m_YcChannelCfg[j*3].controlword & 0x02)==1 ) { if((startflag[j]&0x02)==1)//之前有故障存在 { if(value[4*j+3] < m_YcChannelCfg[j*3].localvalue[1]*0.95 ) { startflag[j]&=0xfd ; } else { startflag[j]|=0x2 ; } } else//之前没有故障存在 { if(( value[4*j+3] >= m_YcChannelCfg[j*3].localvalue[1]) ) { //startflag[j]|=0x2 ; faulttime[j][1]++; } if (faulttime[j][1]>=2) { faulttime[j][1] =0; startflag[j]|=0x2 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x02)==1 ) //*************************************************************************** //***负序电流越限启动判断 //*************************************************************************** if( (m_YcChannelCfg[j*3].controlword & 0x04)==1 ) { if((startflag[j]&0x04)==1)//之前有故障存在 { if(value_n[j] < (m_YcChannelCfg[j*3].localvalue[2]*0.95 ) ) { startflag[j]&=0xfb ; } else { startflag[j]|=0x4 ; } } else//之前没有故障存在 { if(( value_n[j] >= m_YcChannelCfg[j*3].localvalue[2])) { //startflag[j]|=0x4 ; faulttime[j][2]++; } if (faulttime[j][2]>=2) { faulttime[j][2] =0; startflag[j]|=0x4 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x04)==1 ) }//else if(m_YcChannelCfg[j].type=0x28) else if(m_YcChannelCfg[j*3].type=0x38) { //*************************************************************************** //***相电流越限启动判断 //*************************************************************************** if( (m_YcChannelCfg[j*3].controlword & 0x01)==1 ) { if((startflag[j]&0x01)==1)//之前有故障存在 { if(value[3*j] < (m_YcChannelCfg[j*3].localvalue[0]*0.95 ) ) { startflag[j]&=0xfe ; } else { startflag[j]|=0x1 ; } } else//之前没有故障存在 { if( value[3*j] >= m_YcChannelCfg[j*3].localvalue[0]) { //startflag[j]|=0x1 ; faulttime[j][0]++; } if (faulttime[j][0]>=2) { faulttime[j][0] =0; startflag[j] |= 0x1 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x01)==1 ) if( (m_YcChannelCfg[j*3].controlword & 0x04)==1 ) { if((startflag[j]&0x04)==1)//之前有故障存在 { if(value[3*j+1] < (m_YcChannelCfg[j*3].localvalue[2]*0.95 ) ) { startflag[j]&=0xfb ; } else { startflag[j]|=0x4 ; } } else//之前没有故障存在 { if( value[3*j+1] >= m_YcChannelCfg[j*3].localvalue[2] ) { //startflag[j]|=0x4 ; faulttime[j][2]++; } if (faulttime[j][2]>=2) { faulttime[j][2] =0; startflag[j]|=0x4 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x01)==1 ) if( (m_YcChannelCfg[j*3].controlword & 0x10)==1 ) { if((startflag[j]&0x10)==1)//之前有故障存在 { if(value[3*j+2] < (m_YcChannelCfg[j*3].localvalue[4]*0.95 ) ) { startflag[j]&=0xef ; } else { startflag[j]|=0x10 ; } } else//之前没有故障存在 { if( value[3*j] >= m_YcChannelCfg[j*3].localvalue[4] ) { //startflag[j]|=0x10 ; faulttime[j][0]++; } if (faulttime[j][4]>=2) { faulttime[j][4] =0; startflag[j]|=0x10 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x01)==1 ) if( (m_YcChannelCfg[j*3].controlword & 0x40)==1 ) { if((startflag[j]&0x40)==1)//之前有故障存在 { if(value[3*j+3] < (m_YcChannelCfg[j*3].localvalue[6]*0.95 ) ) { startflag[j]&=0xbf ; } else { startflag[j]|=0x40 ; } } else//之前没有故障存在 { if( value[3*j+3] >= m_YcChannelCfg[j*3].localvalue[6] ) { //startflag[j]|=0x40 ; faulttime[j][6]++; } if (faulttime[j][6]>=2) { faulttime[j][6] =0; startflag[j]|=0x40 ; } } }//if( (m_YcChannelCfg[j].controlword & 0x01)==1 ) }//else if(m_YcChannelCfg[j].type=0x48) DC_Abnormity(); }//for(j=0;j<32;j++) //************************************************************************************************************************** //××××直流计算和判断; //************************************************************************************************************************** //取直流数据 for(j=0;j<6 ;j++) //没有确定 { for(i=0;i<32;i++) { GetNsValueYc(j+1,point_dc,i*4,&uclvalue_ns) ; value_wave[i]=uclvalue_ns; //if(id_ns>4) id_new=id_ns-4; //else id_ns =id_ns + YCID -4; } //计算直流 for(sumdc=0,i=0;i<32;i++) { sumdc +=value_wave[i]; } sumdc/=32; value_dc[j] = ((float)(sumdc)) ;//* coefficient; zzg01 if( value_dc[j] <=0) value_dc[j] = 0.0; SetNsActiveValue(j+1,(float)sumdc*m_NsYcChannelCfg[j].ratio); } //for(j=0;j< ;j++) //直流判据 for(j=0;j<6;j++) { if((m_NsYcChannelCfg[j].controlword & (0x1 << j))==1) { //m_NsYcChannelCfg[i].localvalue[m]; if((startflag_dc&(0x1 << j))==1)//之前有故障存在 { if(value[j] < (m_NsYcChannelCfg[j].localvalue[j]*0.95 ) ) { startflag_dc&=(0xff-(0x1<<j)) ; } else { startflag_dc|=(0x1 << j); } } else//之前没有故障存在 { if(( value[j] >= m_NsYcChannelCfg[j].localvalue[0]) ) { //startflag[j]|=0x40 ; faulttime_ns[j]++; } if (faulttime_ns[j]>=2) { faulttime_ns[j] =0; startflag_dc|=(0x01<<j) ; } } }//if((m_NsYcChannelCfg[j].controlword & (0x1 << j))==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -