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

📄 tsystem.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:

void YcCalc(void)
{
     int i,n,j,m;
     long  P,Q;
     register unsigned int  portid;
     register unsigned int  value;
     register unsigned char addr,data;
     struct   SampleTableStruct *pSampleTable;

     if(((TaskStatus(YcCalcTaskNo)&0x80)!=0)) //定时巡检
     {
	  ResetTimer(YcCalcTaskNo);
	  SetTimer(YcCalcTaskNo,3000);
	  SetUpSample(nextSampleTable);
	  errorf++;
     }

     if(((TaskStatus(YcCalcTaskNo)&0x02)!=0)) //采样结束
     {
	  int_mask=int_mask & ~EPA0_INT_BIT;
	  disable_pts();
	  pSampleTable=nextSampleTable;//记录当前采样表指针
	  if(nextSampleTable->Link==NULL)
	  {
	     nextSampleTable=headSampleTable;
	  }else
	  {
	     nextSampleTable=nextSampleTable->Link;
	  }
	  Task[YcCalcTaskNo].WaitStatus =Task[YcCalcTaskNo].WaitStatus & 0xFD;
	  LCD_Device();
	  SetFirstChan(nextSampleTable);//电子开关切换到下一条线路
	  switch(pSampleTable->Flag)
	  {
	      case 0x00:// 0: 连续采样两周波 计算频率
			ycframe0(pSampleTable);
			break;
	      case 0x01:// 1: 采样一周波  计算功率 P=U*I
			ycframe1(pSampleTable);
			break;
	      case 0x02:// 2:U=U+I
			ycframe2(pSampleTable);
			break;
	      case 0x03:// 3:
			//ycframe3(pSampleTable);
			break;
	  }
	  LCD_Device();
	  SetTimer(YcCalcTaskNo,3000);
	  SetUpSample(nextSampleTable);
     }
}

void SetUpSample(struct  SampleTableStruct *pSampleTable)
{
     int i;
     unsigned long   dx,dy;

     if(pVar->SampleCycle!=0)
     {
	disable();
	disable_pts();
	Task[YcCalcTaskNo].WaitStatus =Task[YcCalcTaskNo].WaitStatus & 0xFD;
	outport(AD7874_CMD, 0x0F);
	int_mask=int_mask | EPA0_INT_BIT;
	Pass=0;
	enable();
     }
}

void ycframe0(struct  SampleTableStruct *pSampleTable)
{    // 0: 连续采样两周波 计算频率
     int i,j,k,c,dx,dt,n;
     unsigned char ch;

     ch=1;
     for(i=0;i<4;i++)
     {
	   j=pSampleTable->BSQ[i];
	   {
		if(j!=0)
		{
		    j--;
		    DCZO=ADCLIB[j].DCZO;	// 零点
		    DCSK=ADCLIB[j].DCSK;	// 斜率
		    TEMPERATURE=ADCLIB[j].ACSK; // 斜率
		    ADWINDOWS=9604;		// 1706--4000

		    LCD_Device();

		    COM_Device_Task();

		    WTMP=0;
		    WORK=(unsigned int)(pVar->ADBUF[0])+8*2+i*2;
		    FFT32();//第1寄存器区
		    COM_Device_Task();



		    SINVL=fftReg[0].V[14].Low;	 // 1-13次谐波有效值
		    COSVL=pVar->split_image[j];
		    DCZO =pVar->split_flag[j];
		    n=split();
		    if(n!=0)
		    {
		      pVar->split_image[j] = COSVL;
		      pVar->split_flag[j]  = DCZO;
		      DCZO=ACZeroFlow[j]*4;
		      if(DCSK<DCZO) DCSK=0;
		      ADCLIB[j].AVALUE=DCSK;
		      DCZO=ACWndValue[j];
		      YCWND();
		      ADCLIB[j].WndAVALUE=DCSK;
		    }else
		    {
		      pVar->split_image[j] = COSVL;
		      pVar->split_flag[j]  = DCZO;
		    }

		    ADCLIB[j].XVALUE=fftReg[0].V[14].High; // 2-13次谐波有效值
		    ADCLIB[j].XAVALUE=fftReg[0].V[15].Low; // 波型畸变率
		    for(k=1;k<14;k++)
		    {
			  ADCLIB[j].ZVALUE[k]=fftReg[0].V[k].Low;    // 幅值
			  ADCLIB[j].ARC[k]   =fftReg[0].V[k].High;   // 角度
			  ADCLIB[j].XA[k]    =fftReg[0].V[k+17].Low; // 谐波含量
		    }

		    ADCLIB[j].ZVALUE[0]=fftReg[0].V[0].Low;
		    DCZO=DCWndValue[j];
		    DCSK=ADCLIB[j].ZVALUE[0];
		    DCWND();
		    ADCLIB[j].WndZVALUE=DCSK;

/*		    SINVL=fftReg[0].V[0].Low;
		    COSVL=pVar->split_dc_image[j];
		    DCZO =pVar->split_dc_flag[j];
		    n=split();
		    if(n!=0)
		    {
		      pVar->split_dc_image[j] = COSVL;
		      pVar->split_dc_flag[j]  = DCZO;
		      ADCLIB[j].ZVALUE[0]=DCSK;
		      DCZO=DCWndValue[j];
		      DCWND();
		      ADCLIB[j].WndZVALUE=DCSK;
		    }else
		    {
		      pVar->split_dc_image[j] = COSVL;
		      pVar->split_dc_flag[j]  = DCZO;
		    }
*/

		    LCD_Device();
		    if((ch & pSampleTable->FreqFlag)!=0)
		    {
			if(pSampleTable->SLimit>=255)
			{
			   WORK=(unsigned int)(pVar->ADBUF[0])+8*2+i*2;
			   FFTARC();
			   if(WTMP>400)//基波模长>400
			   {
				 SINVL=(int)fftReg[0].V[1].High;
				 ARCVL=COSVL-SINVL; //基波角度 - 基波角度
				 if(ARCVL<0) ARCVL=ARCVL+18000;
				 freqsum();
			   }
			}
		    }
		}
	   }
	   ch=ch<<1;
     }


     freqdefault();
}

void ycframe1(struct  SampleTableStruct *pSampleTable)
{//二表法 一周波采样 计算功率
     int   i,j,k,LineNo,n,x1,x2;
     long  P,Q;

     LineNo=pSampleTable->LineNo;
     j=pSampleTable->BSQ[0]; /*  U1  */
     if(j!=0)
     {
	   j--;
	   DCZO=ADCLIB[j].DCZO; // 零点
	   DCSK=ADCLIB[j].DCSK; // 斜率
	   TEMPERATURE=ADCLIB[j].ACSK; // 斜率
	   ADWINDOWS=9604; //1706--4000
	   LCD_Device();
	   COM_Device_Task();
	   WTMP=0;
	   WORK=(unsigned int)(&ADBUF0)+16;
	   FFT32();//第1寄存器区
	   LCD_Device();
	   COM_Device_Task();

	   x1=ACWndValue[j];

	   DCSK=ADCLIB[j].AVALUE;
	   LNLIB[LineNo].Value[0]=DCSK;
	   DCZO=ACWndValue[j];
	   YCWND();
	   LNLIB[LineNo].WndValue[0]=DCSK;



//	   LNLIB[LineNo].Value[0]=fftReg[0].V[14].Low; //U1
/*	   SINVL=fftReg[0].V[14].Low;//U1  1-13次谐波有效值
	   COSVL=pVar->split_image[j];
	   DCZO =pVar->split_flag[j];
	   n=split();
	   if(n!=0)
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
		  DCZO=ACZeroFlow[j]*4;
		  if(DCSK<DCZO) DCSK=0;
		  LNLIB[LineNo].Value[0]=DCSK;
		  DCZO=ACWndValue[j];
		  YCWND();
		  LNLIB[LineNo].WndValue[0]=DCSK;
	   }else
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
	   }
*/
     }
     j=pSampleTable->BSQ[1]; /*  I1  */
     if(j!=0)
     {
	   j--;
	   DCZO=ADCLIB[j].DCZO; // 零点
	   DCSK=ADCLIB[j].DCSK; // 斜率
	   TEMPERATURE=ADCLIB[j].ACSK; // 斜率
	   ADWINDOWS=9604; //1706--4000
	   LCD_Device();
	   COM_Device_Task();
	   WTMP=1;
	   WORK=(unsigned int)(&ADBUF0)+16+4;
	   FFT32();//第3寄存器区
	   LCD_Device();
	   COM_Device_Task();


	   x2=ACWndValue[j];

	   DCSK=ADCLIB[j].AVALUE;
	   LNLIB[LineNo].Value[3]=DCSK;
	   DCZO=ACWndValue[j];
	   YCWND();
	   LNLIB[LineNo].WndValue[3]=DCSK;






//	   LNLIB[LineNo].Value[3]=fftReg[1].V[14].Low; //I1


/*	   SINVL=fftReg[1].V[14].Low;//I1  1-13次谐波有效值
	   COSVL=pVar->split_image[j];
	   DCZO =pVar->split_flag[j];
	   n=split();
	   if(n!=0)
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
		  DCZO=ACZeroFlow[j]*4;
		  if(DCSK<DCZO) DCSK=0;
		  LNLIB[LineNo].Value[3]=DCSK;
		  DCZO=ACWndValue[j];
		  YCWND();
		  LNLIB[LineNo].WndValue[3]=DCSK;
	   }else
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
	   }
*/


     }

     i=pSampleTable->BSQ[0]; /*  U1  */
     j=pSampleTable->BSQ[1]; /*  I1  */
     if((i!=0)&&(j!=0))
     {
	   LCD_Device();
	   DCSK=LNLIB[LineNo].PSK_ADJUST[0]; // 单相功率斜率校正系数
	   DCZO=LNLIB[LineNo].PARC_ADJUST[0];// 单相功率角度校正系数
	   POWER1();			   //			 1 | 0
	   LCD_Device();
	   WORK=fftReg[2].V[17].Low;	   // 基波功角象限值   ---------
	   ARCVL=fftReg[2].V[17].High;	   // 基波功角		 3 | 2
	   switch(WORK)
	   {
	      case  0x01:ARCVL=18000-ARCVL;
			 break;
	      case  0x02:ARCVL=-ARCVL;
			 break;
	      case  0x03:ARCVL=ARCVL-18000;
			 break;
	      default:	 break;
	   }
	   LNLIB[LineNo].P_ARC[0] =ARCVL;
	   P=SUP;  Q=SUQ;

	   LNLIB[LineNo].Value[6] =(int)SUP;//P1
	   LNLIB[LineNo].Value[10]=(int)SUQ;//Q1

	   DCZO=x1;
	   DCSK=x2;
	   PQWND();
	   LNLIB[LineNo].WndValue[6] =(int)SUP;
	   LNLIB[LineNo].WndValue[10]=(int)SUQ;
	   pVar->PP=(int)SUP;
	   pVar->QQ=(int)SUQ;
     }else
     {
	   P=0;
	   Q=0;
	   pVar->PP=0;
	   pVar->QQ=0;
	   LNLIB[LineNo].P_ARC[0] =0;
	   LNLIB[LineNo].Value[6] =0;//P1
	   LNLIB[LineNo].Value[10]=0;//Q1
	   LNLIB[LineNo].WndValue[6] =0;//P1
	   LNLIB[LineNo].WndValue[10]=0;//Q1
     }

     j=pSampleTable->BSQ[2]; /*  U2  */
     if(j!=0)
     {
	   j--;
	   DCZO=ADCLIB[j].DCZO; // 零点
	   DCSK=ADCLIB[j].DCSK; // 斜率
	   TEMPERATURE=ADCLIB[j].ACSK; // 斜率
	   ADWINDOWS=9604; //1706--4000
	   COM_Device_Task();
	   LCD_Device();
	   WTMP=0;
	   WORK=(unsigned int)(&ADBUF0)+16+2;
	   FFT32();//第1寄存器区
	   LCD_Device();
	   COM_Device_Task();


	   x1=ACWndValue[j];

	   DCSK=ADCLIB[j].AVALUE;
	   LNLIB[LineNo].Value[1]=DCSK;
	   DCZO=ACWndValue[j];
	   YCWND();
	   LNLIB[LineNo].WndValue[1]=DCSK;



//	   LNLIB[LineNo].Value[1]=fftReg[0].V[14].Low; //U2
/*	   SINVL=fftReg[0].V[14].Low;//U2  1-13次谐波有效值
	   COSVL=pVar->split_image[j];
	   DCZO =pVar->split_flag[j];
	   n=split();
	   if(n!=0)
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
		  DCZO=ACZeroFlow[j]*4;
		  if(DCSK<DCZO) DCSK=0;
		  LNLIB[LineNo].Value[1]=DCSK;
		  DCZO=ACWndValue[j];
		  YCWND();
		  LNLIB[LineNo].WndValue[1]=DCSK;
	   }else
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
	   }
*/

     }

     j=pSampleTable->BSQ[3]; /*  I2  */
     if(j!=0)
     {
	   j--;
	   DCZO=ADCLIB[j].DCZO; // 零点
	   DCSK=ADCLIB[j].DCSK; // 斜率
	   TEMPERATURE=ADCLIB[j].ACSK; // 斜率
	   ADWINDOWS=9604; //1706--4000
	   LCD_Device();
	   COM_Device_Task();
	   WTMP=1;
	   WORK=(unsigned int)(&ADBUF0)+16+6;
	   FFT32();//第3寄存器区
	   LCD_Device();
	   COM_Device_Task();

	   x2=ACWndValue[j];

	   DCSK=ADCLIB[j].AVALUE;
	   LNLIB[LineNo].Value[4]=DCSK;
	   DCZO=ACWndValue[j];
	   YCWND();
	   LNLIB[LineNo].WndValue[4]=DCSK;


//	   LNLIB[LineNo].Value[4]=fftReg[1].V[14].Low; //I2
/*	   SINVL=fftReg[1].V[14].Low;//I2  1-13次谐波有效值
	   COSVL=pVar->split_image[j];
	   DCZO =pVar->split_flag[j];
	   n=split();
	   if(n!=0)
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
		  DCZO=ACZeroFlow[j]*4;
		  if(DCSK<DCZO) DCSK=0;
		  LNLIB[LineNo].Value[4]=DCSK;
		  DCZO=ACWndValue[j];
		  YCWND();
		  LNLIB[LineNo].WndValue[4]=DCSK;
	   }else
	   {
		  pVar->split_image[j] = COSVL;
		  pVar->split_flag[j]  = DCZO;
	   }
*/

     }

     i=pSampleTable->BSQ[2]; /*  U2  */
     j=pSampleTable->BSQ[3]; /*  I2  */
     if((i!=0)&&(j!=0))
     {
	   LCD_Device();
	   DCSK=LNLIB[LineNo].PSK_ADJUST[1]; // 单相功率斜率校正系数
	   DCZO=LNLIB[LineNo].PARC_ADJUST[1];// 单相功率角度校正系数
	   COM_Device_Task();
	   POWER1();			   //			 1 | 0
	   LCD_Device();
	   COM_Device_Task();
	   WORK=fftReg[2].V[17].Low;	   // 基波功角象限值   ---------
	   ARCVL=fftReg[2].V[17].High;	   // 基波功角		 3 | 2
	   switch(WORK)
	   {
	      case  0x01:ARCVL=18000-ARCVL;
			 break;
	      case  0x02:ARCVL=-ARCVL;
			 break;
	      case  0x03:ARCVL=ARCVL-18000;
			 break;
	      default:	 break;
	   }
	   LNLIB[LineNo].P_ARC[1] =ARCVL;
	   P=SUP+P;  Q=SUQ+Q;
	   LNLIB[LineNo].Value[7] =(int)SUP;//P1
	   LNLIB[LineNo].Value[11]=(int)SUQ;//Q1

	   DCZO=x1;
	   DCSK=x2;
	   PQWND();
	   LNLIB[LineNo].WndValue[7]= (int)SUP;
	   LNLIB[LineNo].WndValue[11]=(int)SUQ;
	   pVar->PP=SUP+pVar->PP;
	   pVar->QQ=SUQ+pVar->QQ;
     }else
     {
	   LNLIB[LineNo].Value[7] =0;//P2
	   LNLIB[LineNo].Value[11]=0;//Q2
	   LNLIB[LineNo].P_ARC[1] =0;
	   LNLIB[LineNo].WndValue[7] =0;
	   LNLIB[LineNo].WndValue[11]=0;

     }

     SUP=P;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -