📄 tsystem.c
字号:
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 + -