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

📄 iec61850.cpp

📁 基于linux下的故障录波前置程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                        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 + -