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

📄 tsystem.c

📁 电力变电站RTU监控软件(80C196NT单片机) 遥控
💻 C
📖 第 1 页 / 共 5 页
字号:
     SUQ=Q;
     LNLIB[LineNo].Value[9] =(int)SUP;	//P
     LNLIB[LineNo].Value[13]=(int)SUQ;	//Q

     LNLIB[LineNo].WndValue[9] =(int)pVar->PP;	//P
     LNLIB[LineNo].WndValue[13]=(int)pVar->QQ;	//Q

     LNLIB[LineNo].WndValue[15]=freqvalue;

/*   SINVL=SUP;
     COSVL=pVar->split_P_image[LineNo];
     DCZO =pVar->split_P_flag[LineNo];
     n=split();
     if(n!=0)
     {
	    pVar->split_P_image[j] = COSVL;
	    pVar->split_P_flag[j]  = DCZO;
	    LNLIB[LineNo].Value[9] = DCSK;
     }else
     {
	    pVar->split_P_image[j] = COSVL;
	    pVar->split_P_flag[j]  = DCZO;
     }

     SINVL=SUQ;
     COSVL=pVar->split_Q_image[LineNo];
     DCZO =pVar->split_Q_flag[LineNo];
     n=split();
     if(n!=0)
     {
	    pVar->split_Q_image[j] = COSVL;
	    pVar->split_Q_flag[j]  = DCZO;
	    LNLIB[LineNo].Value[13]= DCSK;
	    LNLIB[LineNo].WndValue[13]= DCSK/4;
     }else
     {
	    pVar->split_Q_image[j] = COSVL;
	    pVar->split_Q_flag[j]  = DCZO;
     }
*/
     LCD_Device();
     SUP=P;
     SUQ=Q;
     PQCOS();
     LCD_Device();
     LNLIB[LineNo].Value[14]=COSVL;
     LNLIB[LineNo].WndValue[14]=COSVL;

     LNLIB[LineNo].PQARC=ARCVL;

     SUX=systimems;
     SUY=LNLIB[LineNo].oldsystimems;
     LNLIB[LineNo].oldsystimems=SUX;
     if(SUX>=SUY)
     {
	  SUX=SUX-SUY;
     }else
     {
	  SUX=SUX+(~SUY)+1;
     }
     LNLIB[LineNo].dt=SUX;
     //积分电度:=DCZO*SUX/(65536*450)=DCZO*146*SUX/(65536*65536);

     P=(long)LNLIB[LineNo].Value[9];  //P
     if(P>=0)
     {//WP+
	  DCZO=P;
	  SUN=(unsigned long)YWBuf+LineNo*32;
	  YwCalc();
     }else
     {//WP-
	  DCZO=-P;
	  SUN=(unsigned long)YWBuf+LineNo*32+8;
	  YwCalc();
     }
     SUX=LNLIB[LineNo].dt;
     Q=(long)LNLIB[LineNo].Value[13];  //Q
     if(Q>=0)
     {//WQ+
	  DCZO=Q;
	  SUN=(unsigned long)YWBuf+LineNo*32+16;
	  YwCalc();
     }else
     {//WQ-
	  DCZO=-Q;
	  SUN=(unsigned long)YWBuf+LineNo*32+24;
	  YwCalc();
     }
     freqdefault();
}

void ycframe2(struct  SampleTableStruct *pSampleTable)
{//2:采样一周波     不计算功率	计算Ua	Ub  Uc
     int   i,j,k,LineNo,n;

     LineNo=pSampleTable->LineNo;
     j=pSampleTable->BSQ[0]; /*  U1=Uab */
     if(j!=0)
     {
	j--;
	TEMPERATURE=ADCLIB[j].ACSK; // 斜率
	WORK=(unsigned int)(&ADBUF0)+16;
     }

     j=pSampleTable->BSQ[1]; /*  I1=Ub	*/
     if(j!=0)
     {
	j--;
	DCSK=ADCLIB[j].ACSK; // 斜率
	WTMP=(unsigned int)(&ADBUF0)+16+4;
     }

     j=pSampleTable->BSQ[2]; /*  U2=Ucb  */
     if(j!=0)
     {
	j--;
	DCZO=ADCLIB[j].ACSK; // 斜率
     }
     FFTUS();

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

	   LNLIB[LineNo].Value[0]=fftReg[0].V[14].Low; //U1
	   LNLIB[LineNo].WndValue[0]=fftReg[0].V[14].Low/4; //U1
     }


     j=pSampleTable->BSQ[1]; /*  I1=Ub	*/
     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();

	   LNLIB[LineNo].Value[1]=fftReg[1].V[14].Low;
	   LNLIB[LineNo].WndValue[1]=fftReg[1].V[14].Low/4;
     }

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



     }

     freqdefault();

}

void ycframe3(struct  SampleTableStruct *pSampleTable)
{
      int i,j,k,LineNo;
      long  P,Q;
      P=0;
      Q=0;
}


void TFreeAMail(struct Mail far *p)
{
     disable();
     p->Link=PostStation.MailQueueHead;
     PostStation.MailQueueHead=p;
     PostStation.MailQueueLength++;
     enable();
}

unsigned char SendAMail(struct Mail far *p)
{
	BYTE DestTaskNo;
	DestTaskNo=((p->Data[3])>>4) & 0x0f;
	if ((p->Data[1] & 0x80)==0)
	{
		p->Data[1] |=0xc1;
	};
	if(Task[DestTaskNo].Use)//this task is ok
	{
	   if(Task[DestTaskNo].MailQueueHead)
	   {
		  if(p->Data[1] & 0x02)//urgent mail flag
		  {
			p->Link=Task[DestTaskNo].MailQueueHead;
			Task[DestTaskNo].MailQueueHead=p;
		  }else
		  {
			Task[DestTaskNo].MailQueueTail->Link=p;
			Task[DestTaskNo].MailQueueTail=p;
			p->Link=NULL;
		  }
	   }else  //只有一个邮件
	   {
		  Task[DestTaskNo].MailQueueHead=p;
		  Task[DestTaskNo].MailQueueTail=p;
		  p->Link=NULL;
	   };
	   Task[DestTaskNo].MailQueueLength++;
	   Task[DestTaskNo].WaitStatus=(Task[DestTaskNo].WaitStatus|0x20);
	   Task[DestTaskNo].WaitControl=(Task[DestTaskNo].WaitControl|0x20);
	   return(TRUE);
	} else	return(FALSE);
}
////////////////////////////////////////////////////////////////////
struct Mail FARDATA  *ReceiveAMail(unsigned char TaskNo)
{
	struct Mail FARDATA   *p;
	disable();
	if(Task[TaskNo].MailQueueHead==NULL)
	{
		enable();
		return(NULL);
	}
	p=Task[TaskNo].MailQueueHead;
	if((Task[TaskNo].MailQueueHead=Task[TaskNo].MailQueueHead->Link)==NULL)
	{
		Task[TaskNo].MailQueueTail=NULL;
		Task[TaskNo].WaitStatus &=0xdf;
	};
	Task[TaskNo].MailQueueLength--;
	enable();
	p->Link=NULL;
	return(p);
}
/////////////////////////////////////////////////////////////////
struct Mail far *GetAEnvelope(void)//获取空信箱
{
	struct Mail far *p;
	if(PostStation.MailQueueHead)
	{
	       p=PostStation.MailQueueHead;
	       PostStation.MailQueueHead=PostStation.MailQueueHead->Link;
	       PostStation.MailQueueLength--;
	       p->Link=NULL;
	       return(p);
	}else	return(NULL);
}
///////////////////////////////////////////////////////////////////
void FreeAMail(struct Mail far *p)
{
	p->Link=PostStation.MailQueueHead;
	PostStation.MailQueueHead=p;  //获得当前释放的MAIL
	PostStation.MailQueueLength++;//空邮箱+1
}
///////////////////////////////////////////////////////////////////
unsigned char TSendAMail(struct Mail far *p)
{
	BYTE DestTaskNo;
//	if (p->Data[1] & 0x80)	DestTaskNo=((p->Data[3])>>4);
//	       else		DestTaskNo=(p->Data[3]);

	DestTaskNo=(p->Data[3]);

	if((DestTaskNo>=MAXTASK) || (p->Data[0]>MaxMailLength))  return(FALSE);
      //else if((This_Node_ID!=Main_Node_ID)&&(DestTaskNo>=MAXTASK-2)) return(FALSE);

	if(Task[DestTaskNo].Use)
	{
		disable();
		if(Task[DestTaskNo].MailQueueHead)
		{
			if(p->Data[1] & 0x02)//urgent mail flag  放置在前部
			{	p->Link=Task[DestTaskNo].MailQueueHead; //将当前新邮件放在当前邮件序列的前部
				Task[DestTaskNo].MailQueueHead=p;  //使MailQueueHead指向新的邮件
			}else//一般报文  放置在尾部
			{	Task[DestTaskNo].MailQueueTail->Link=p;
				Task[DestTaskNo].MailQueueTail=p;
				p->Link=NULL;
			}
		}
		else
		{	Task[DestTaskNo].MailQueueHead=p;
			Task[DestTaskNo].MailQueueTail=p;
			p->Link=NULL;
		};
		Task[DestTaskNo].MailQueueLength++;
		Task[DestTaskNo].WaitStatus=(Task[DestTaskNo].WaitStatus|0x20);
		Task[DestTaskNo].WaitControl=(Task[DestTaskNo].WaitControl|0x20);
		enable();

		return(TRUE);
	}
	else
	{	enable();
		return(FALSE);
	}
}
////////////////////////////////////////////////////////////////////
struct Mail far *TGetAEnvelope(void)
{
	 struct Mail far *p;
	 disable();			  //PostStation放空邮箱
	 if(PostStation.MailQueueHead)
	 {	p=PostStation.MailQueueHead;//使P指向当前邮箱
		PostStation.MailQueueHead=PostStation.MailQueueHead->Link;//指向下一个油箱
		PostStation.MailQueueLength--; //空邮箱数-1
		p->Link=NULL;
		enable();
		return(p);
	 }//--------------------------------------------
	 else
	 {  if(PostStation.TotMailNum>=MaxMailNum)
		 {	enable();
			return(NULL);
		 }
		else
		{if((p=(struct Mail far *)malloc(sizeof(struct Mail)))==NULL)
		  {		enable();
				return(NULL);
		  };
		  PostStation.TotMailNum++;
		  p->Link=NULL;
		  enable();
		  return(p);
		}
	}
}
///////////////////////////////////////////////////////////////////
unsigned char TRead(unsigned char TaskNo,unsigned char far  *buf)//读取各从板上报报文到MAIL
{
	struct Mail far *p;
	if((p=ReceiveAMail(TaskNo))!=NULL)
	{
	    memcpy(buf,p->Data,p->Data[0]);
	    TFreeAMail(p);
	    return(buf[0]);
	}else return(0);
}
///////////////////////////////////////////////////////////////////
unsigned char TWrite(unsigned char far	*buf)//将下发报文写入MAIL--p中
{
	struct Mail far *p;
	unsigned int ui;

	if((p=TGetAEnvelope())!=NULL)  //取出空邮件箱
	{
		memcpy(p->Data,buf,buf[0]);//将下发报文写入MAIL--p中
		if(TSendAMail(p))	return(TRUE);//将当前邮件放入邮件序列中
		else
		{
		     TFreeAMail(p);
		     return(FALSE);
		}
	}
	return(FALSE);
}

void  InitialY12Task(int sio)
{
      PVOID *Args;
      Args=(PVOID  *)initialY12(sio);
      if(Args!=NULL)
      {
	   CreateATask(sio,10,Args,R13_Y12,0xff,0xff);
	   SetTimer(sio,2000);
	   Wait(sio,30000);
	   receive_enable(sio);
	   trans_enable(sio);
      }
}

unsigned char  InitialComDevice(int sio)
{//通信口驱动程序
      int i,j;
      struct CanMail *pCanMail,*qCanMail;

      switch(sio)
      {
	case  Can0ComhandleNo://CAN BUS 1 驱动程序
			      InitCanBus(sio);
			      ComHandle[sio]->UseInfo=1;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP
			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);
			      InitialY12Task(sio);
			      break;
	case  Can1ComhandleNo://CAN BUS 2 驱动程序
			      InitCanBus(sio);
			      ComHandle[sio]->UseInfo=1;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP
			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);
			      InitialY12Task(sio);
			      break;
	case  TaskNoCOM00:    //COM1 驱动程序
			      Init_COM1();
			      ComHandle[sio]->UseInfo=3;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP

			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);


			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->RxdBuf=(unsigned int *)malloc(300);
			      memset(ComHandle[sio]->RxdBuf,0,300);
			      ComHandle[sio]->RxdBufTail   = 0;
			      ComHandle[sio]->RxdBufHead   = 0;
			      ComHandle[sio]->RxdBufLength = 0;
			      ComHandle[sio]->RxdBufSize   = 300;
			      ComHandle[sio]->RxdProWarn   = 1;

			      ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
			      memset(ComHandle[sio]->TxdBuf,0,300);
			      ComHandle[sio]->TxdBufHead=0;
			      ComHandle[sio]->TxdBufTail=0;
			      ComHandle[sio]->TxdBufLength=0;
			      ComHandle[sio]->TxdBufSize=300;
			      ComHandle[sio]->TxdProWarn=0;
			      ComHandle[sio]->SendFunc=Send00;
			      InitialY12Task(sio);
			      break;
	case  TaskNoCOM01:    //COM2 驱动程序
			      Init_COM2();//16C550
			      ComHandle[sio]->UseInfo=2;
			      ComHandle[sio]->Status=0x02;
			      //0:未初始化  1:TXD  2:Wait 3:STOP

			      ComHandle[sio]->CanRxdBuf=(unsigned char	*)malloc(300);
			      memset(ComHandle[sio]->CanRxdBuf,0,300);

			      ComHandle[sio]->headCanMail=NULL;
			      ComHandle[sio]->TransCanMail=NULL;
			      ComHandle[sio]->RxdBuf=(unsigned int  *)malloc(300);
			      memset(ComHandle[sio]->RxdBuf,0,300);
			      ComHandle[sio]->RxdBufTail   = 0;
			      ComHandle[sio]->RxdBufHead   = 0;
			      ComHandle[sio]->RxdBufLength = 0;
			      ComHandle[sio]->RxdBufSize   = 300;
			      ComHandle[sio]->RxdProWarn   = 1;

			      ComHandle[sio]->TxdBuf=(unsigned char *)malloc(300);
			      memset(ComHandle[sio]->TxdBuf,0,300);
			      ComHandle[sio]->TxdBufHead=0;
			      ComHandle[sio]->TxdBufTail=0;
			      ComHandle[sio]->TxdBufLength=0;
			      ComHandle[sio]->TxdBufSize=300;

⌨️ 快捷键说明

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