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