📄 hgq.c
字号:
#include <e:\lhybak\tyclh.h>
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdio.h>
#include <c:\TDS-EMU2XX\c2000\cgtools\include\math.h>
#include <c:\TDS-EMU2XX\c2000\cgtools\include\stdlib.h>
#include <e:\lhybak\f206.h>
/*interrupt void c_int23(); */
#define pii 3.1415926535898
#define sqrt_3 1.73205080756887729352744634150587
#define Rcaiyang1 1.9146885751 /*1.911038611714;1.97856794752*/ /*2.0147856/1.015=1.98501044335*/
#define Dis_Max 1.0e10
extern int nTbSysTime,adt;
extern struct StructKeyNode KeyNode;
extern Boolean bRefurbish;
int N=256;
float pr[256],pi[256],fr[256],fi[256];
extern float PT_arr[13];
void PT_ctr(void);
void key_manage(void);
void CT_measure(void);
void PT_measure(void);
void admitbfb(void);
void errorbfb(void);
void init_dsp(void);
void bhd(void);
void VA_bhd(void);
void gain_ctr(void);
void pga_set(int,int);
void kkfft(void);
float avg(float *);
float av(float *);
void jdq_ctr(int,int);
void DC_ctr(void);
void DC_R(void);
void bb_adjust(void);
void ratio(void);
void direct_ratio(void);
float ratio_lb(float *);
void adjust_volt(float);
void admit(void);
void admit_pga(void);
void admit_ctr(float );
float admit_ctr2(float);
void error(void);
void sample(int);
void sample_ctr(unsigned int);
void CT_burden(void);
void PT_burden(void);
float avg_U(float *);
float max_I(float *);
float pow_p(float *,float *);
void VA_measure(void);
void VA_ctr(void);
void VA_ctr1(void);
void init_dis(void);
void putout(void);
float ua_xs,ub_xs;
int ua_set,ub_set;
volatile unsigned int *reg_p;
int sa[261],sb[261];
float pga_xs[2];
int pga_u[2];
float ukr,uki,ikr,iki,uk,ik,angle1,angle2;
extern float G[8],B[8],Y[8],Y_ang[8];
float r,x,z;
extern float Rs,Z2;
extern float ferr[8],perr[8],CT_test[24];
float ukr1[10],ang1[10],bak_uk[10],bak_ik[10];
extern float bb,err,Dc,SR,Zb,Zb_cos,SVA;
int CT_jx=-1;
extern int CT1,CTI1;
extern float COS_ms,SDVA,CT_bi;
extern unsigned CT_dj,CT_grade,CT2_mode,CTI2;
extern float COS_mode;
extern unsigned PT_mode;
extern float PT_bb,PT_bd,PT_VA,PT_cos,PT_SR,PT1_volt,PT2_volt,PT_error,PT_angle;
extern float PT_ang_err,PT_G,PT_B;
extern unsigned PT1_mode;
extern long int PT1_temp;
extern float CT_bd,CT_VA,CT_cos;
extern float CT_bfb,CT_R,CT_X;
extern float CT_ferr,CT_perr;
float R_caiyang;
extern float XS_cos,XS_sin;
unsigned int admit_ctr_pga,sample_prd;
float out_fre;
int cd_flag[5];
int VA_jdq;
int jdqa=0x0,jdqb=0x0;
unsigned int mea_again=1;
extern int nTbSysTime,adt;
extern struct StructKeyNode KeyNode;
extern float Usav,Imax,Uav,Iav;
int VA_int=1;
typedef struct
{
float U_CT;
float I_CT;
/* float P_Fe;*/
}VA_TX;
VA_TX VA_arr[256];
VA_TX err10_arr[256];
VA_TX *VA_point;
float n_Zl2[4];
int VA_wave[204];
int n_Zl[204];
int err10_n;
int err_no;
float err10_Zl;
float BH_SVA;
int mea_flag=1;
/*-----------init tbwrsystab---------*/
void init_dis(void)
{
int i;
for(i=0;i<24;i++) CT_test[i]=Dis_Max;
for(i=0;i<4;i++) n_Zl2[i]=Dis_Max;
for(i=0;i<14;i++) PT_arr[i]=Dis_Max;
for(i=0;i<95;i++)
{
VA_arr[i].I_CT=Dis_Max;
VA_arr[i].U_CT=Dis_Max;
err10_arr[i].I_CT=Dis_Max;
err10_arr[i].U_CT=Dis_Max;
}
}
/*---------VA wave------------*/
void VA_bhd(void)
{
int ii,jj,kk;
float VA_MaxI,VA_MaxU;
float tempI,tempU;
VA_wave[0]=100;
VA_wave[1]=100;
VA_wave[2]=VA_int+1;
VA_wave[3]=0;
VA_wave[4]=7;
VA_wave[5]=0;
VA_MaxI=VA_arr[0].I_CT;
VA_MaxU=VA_arr[0].U_CT;
/*-----------shell-----------*/
for(ii=0;ii<(VA_int-1);ii++)
{
for(jj=ii+1;jj<VA_int;jj++)
{
if(VA_arr[ii].I_CT>VA_arr[jj].I_CT)
{
tempI=VA_arr[ii].I_CT;
VA_arr[ii].I_CT=VA_arr[jj].I_CT;
VA_arr[jj].I_CT=tempI;
tempI=VA_arr[ii].U_CT;
VA_arr[ii].U_CT=VA_arr[jj].U_CT;
VA_arr[jj].U_CT=tempI;
}
}
}
for(ii=0;ii<VA_int;ii++)
{
if(VA_arr[ii].I_CT>VA_MaxI) VA_MaxI=VA_arr[ii].I_CT;
if(VA_arr[ii].U_CT>VA_MaxU) VA_MaxU=VA_arr[ii].U_CT;
}
tempI=150.0/VA_MaxI;
tempU=120.0/VA_MaxU;
for(ii=0;ii<VA_int;ii++)
{
VA_wave[2*ii+6]=(int)(tempI*VA_arr[ii].I_CT)+7;
VA_wave[2*ii+7]=(int)(tempU*VA_arr[ii].U_CT);
}
/*--------shell---------*/
for(ii=0;ii<2*(VA_int-1);ii+=2)
{
for(jj=ii+2;jj<2*VA_int;jj+=2)
{
if(VA_wave[ii+6]>VA_wave[jj+6])
{
tempI=VA_wave[ii+6];
VA_wave[ii+6]=VA_wave[jj+6];
VA_wave[jj+6]=tempI;
tempI=VA_wave[ii+7];
VA_wave[ii+7]=VA_wave[jj+7];
VA_wave[jj+7]=tempI;
}
}
}
}
void VA_10err(void)
{
unsigned int i;
int ii,jj,arr_no;
float I2e;
float VA_MaxI,VA_MaxU;
float tempI,tempU;
float aaa;
if(CT2_mode==0)
{
I2e=5.0;
}
else
{
I2e=1.0;
}
err10_Zl=BH_SVA/(I2e*I2e);
n_Zl[0]=100;
n_Zl[1]=100;
n_Zl[2]=VA_int-1;
n_Zl[3]=0;
if(err_no==0)
{
for(ii=0;ii<VA_int-1;ii++)
{
err10_arr[ii].I_CT=0.05263*VA_arr[ii].U_CT/VA_arr[ii].I_CT-1.05263*Z2;
err10_arr[ii].U_CT=20.0*VA_arr[ii].I_CT/I2e;
}
}
else if(err_no==1)
{
for(ii=0;ii<VA_int-1;ii++)
{
err10_arr[ii].I_CT=0.11*VA_arr[ii].U_CT/VA_arr[ii].I_CT-1.1*Z2;
err10_arr[ii].U_CT=10.0*VA_arr[ii].I_CT/I2e;
}
}
aaa=20.0;
for(ii=0;ii<VA_int-1;ii++)
{
if(fabs(err10_arr[ii].U_CT-err10_n)<aaa)
{
aaa=fabs(err10_arr[ii].U_CT-err10_n);
arr_no=ii;
}
}
if((aaa/err10_n)<0.1)
{
n_Zl2[0]=err10_arr[arr_no].U_CT;
n_Zl2[1]=err10_arr[arr_no].I_CT;
}
aaa=20.0;
for(ii=0;ii<VA_int-1;ii++)
{
if(fabs(err10_arr[ii].I_CT-err10_Zl)<aaa)
{
aaa=fabs(err10_arr[ii].I_CT-err10_Zl);
arr_no=ii;
}
}
if(aaa<0.1)
{
n_Zl2[2]=err10_arr[arr_no].I_CT;
n_Zl2[3]=err10_arr[arr_no].U_CT;
}
VA_MaxI=err10_arr[0].I_CT;
VA_MaxU=err10_arr[0].U_CT;
for(ii=0;ii<VA_int-1;ii++)
{
if(err10_arr[ii].I_CT>VA_MaxI) VA_MaxI=err10_arr[ii].I_CT;
if(err10_arr[ii].U_CT>VA_MaxU) VA_MaxU=err10_arr[ii].U_CT;
}
tempI=150.0/VA_MaxI;
tempU=120.0/VA_MaxU;
for(ii=0;ii<VA_int-1;ii++)
{
n_Zl[2*ii+4]=(int)(tempI*err10_arr[ii].I_CT)+7;
n_Zl[2*ii+5]=(int)(tempU*err10_arr[ii].U_CT);
}
/* PT_arr[9]=n_Zl2[0];
PT_arr[11]=n_Zl2[1];*/
for(i=0;i<4;i++) PT_arr[9+i]=n_Zl2[i];
/*--------shell---------*/
for(ii=0;ii<2*(VA_int-2);ii+=2)
{
for(jj=ii+2;jj<2*(VA_int-1);jj+=2)
{
if(n_Zl[ii+4]>n_Zl[jj+4])
{
tempI=n_Zl[ii+4];
n_Zl[ii+4]=n_Zl[jj+4];
n_Zl[jj+4]=tempI;
tempI=n_Zl[ii+5];
n_Zl[ii+5]=n_Zl[jj+5];
n_Zl[jj+5]=tempI;
}
}
}
}
/*-----------CT VA measure-----------*/
void VA_measure(void)
{
int i,j,jj;
int begin_flag=0,end_flag=0;
float U_bak,Imax_bak,PFe_bak;
float Iav_bak,I0e;
float bf_xs,bx_xs;
float temp;
int lcd_x,lcd_y;
int err10_flag=1;
bx_xs=1.11072;
/* for(i=0;i<100;i++)
{
VA_arr[i].I_CT=0.0;
VA_arr[i].U_CT=0.0;
}*/
VA_int=1;
VA_point=VA_arr;
sample_prd=1;
sample_ctr(256);
jdq_ctr(2,0x00);
VA_jdq=0x20+0x40;
VA_ctr();
while(KeyNode.nPage==14150||KeyNode.nPage==14864||KeyNode.nPage==15507||KeyNode.nPage==16150||KeyNode.nPage==16942||KeyNode.nPage==17079||KeyNode.nPage==17722||KeyNode.nPage==18365)
{
if(begin_flag==0)
{
KeyNode.nkey=0;
begin_flag=1;
}
VA_ctr1();
gain_ctr();
sample(1);
Usav=avg_U(pr)/ua_xs/pga_xs[0]*10.0;
Uav=av(pr)/ua_xs/pga_xs[0]*10.0;
Iav=av(pi)/ub_xs/pga_xs[1]*20.01818;
PFe_bak=pow_p(pr,pi)/ua_xs/pga_xs[0]/ub_xs/pga_xs[1]*20.01818;
bf_xs=Imax/1.4142/Iav;
CT_test[20]=Usav;
CT_test[21]=Imax;
CT_test[22]=Uav;
CT_test[23]=Iav;
/*-------Imax measure----------*/
for(i=0;i<5;i++)
{
sample(1);
Imax=max_I(pi)/ub_xs/pga_xs[1]*20.01818;
fr[i]=Imax;
}
for(i=0;i<4;i++)
{
for(j=i+1;j<5;j++)
{
if(fr[i]>fr[j])
{
temp=fr[i];
fr[i]=fr[j];
fr[j]=temp;
}
}
}
temp=0;
for(i=1;i<4;i++)
{
temp+=fr[i];
}
Imax=temp/3.0;
/* I0e=sqrt((Imax/1.4142/bf_xs)*(Imax/1.4142/bf_xs)+(PFe_bak/bx_xs/Usav)*(PFe_bak/bx_xs/Usav));*/
I0e=sqrt(((Imax*Imax)+2.0*(PFe_bak/bx_xs/Usav)*(PFe_bak/bx_xs/Usav))/2.0);
reg_prd=2500;
reg_tcr=0x0c27;
asm(" clrc intm");
for(jj=0;jj<0xffff;jj++)
SysTb(&nTbSysTime,1500);
if(KeyNode.nkey==13&&KeyNode.nPage==14150)
{
VA_point->U_CT=Usav;
VA_point->I_CT=Iav;
VA_point++;
KeyNode.nkey=0;
VA_bhd();
VA_int++;
err10_flag=1;
}
else if(KeyNode.nPage==16942||KeyNode.nPage==17079||KeyNode.nPage==17722||KeyNode.nPage==18365)
{
if(err10_flag==1)
{
VA_10err();
err10_flag=0;
}
}
/* for(jj=0;jj<0xffff;jj++)
SysTb(&nTbSysTime,1500); */
}
}
void VA_ctr1(void)
{
asm(" setc intm");
reg_tcr=0x0c20;
out_fre=50.0;
reg_prd=(int)(15625.0/out_fre-1.0);
sample_prd=1;
sample_ctr(256);
pga_set(0,0);
pga_set(1,0);
pga=pga_u[0]+(pga_u[1]<<5);
jdq_ctr(1,VA_jdq+jdqa+jdqb);
sample(1);
uk=max_I(pr);
ik=max_I(pi);
if(uk<0.7)
{
if(jdqa==0x04)
{
jdqa=0x08;
ua_xs=124.0/624.0;
}
else if(jdqa==0x08)
{
jdqa=0xa;
ua_xs=1.0;
}
}
else if(uk>4.5)
{
if(jdqa==0x0a)
{
jdqa=0x08;
ua_xs=124.0/624.0;
}
else if(jdqa=0x08)
{
jdqa=0x04;
ua_xs=24.0/624.0;
}
}
if(ik<0.4)
{
if(jdqb==0x00)
{
jdqb=0x10;
ub_xs=12.0;
}
}
else if(ik>4.5)
{
if(jdqb=0x10)
{
jdqb=0x00;
ub_xs=1.00;
}
}
jdq_ctr(1,VA_jdq+jdqa+jdqb);
}
void VA_ctr(void)
{
int i,j;
asm(" setc intm");
reg_tcr=0x0c20;
out_fre=50.0;
reg_prd=(int)(15625.0/out_fre-1.0);
sample_prd=1;
sample_ctr(256);
jdq_ctr(1,VA_jdq);
ua_xs=2.0/624.0;
ub_xs=1.0;
pga_set(0,0);
pga_set(1,0);
pga=pga_u[0]+(pga_u[1]<<5);
sample(1);
uk=max_I(pr);
if(uk<0.3)
{
jdqa=0x04;
jdq_ctr(1,VA_jdq+jdqa);
ua_xs=24.0/624.0;
sample(1);
uk=max_I(pr);
if(uk<0.7)
{
jdqa=0x08;
jdq_ctr(1,VA_jdq+jdqa);
ua_xs=124.0/624.0;
sample(1);
uk=max_I(pr);
if(uk<0.7)
{
jdqa=0xa;
ua_xs=1.0;
}
}
}
sample(1);
ik=max_I(pi);
if(ik<0.4)
{
jdqb=0x10;
ub_xs=12.0;
}
jdq_ctr(1,VA_jdq+jdqa+jdqb);
}
/*--------------ct measure------------*/
void CT_measure(void)
{
int i,jj;
if(CT2_mode==0)
{
SR=CT1/5.0;
Zb=SVA/25.0;
}
else
{
SR=CT1;
Zb=SVA;
}
/* if(COS_mode==0)
{
XS_cos=1.0;
}
else
{ XS_cos=0.8;
} */
if(COS_mode>1.0) XS_cos=1.0;
else if(COS_mode<0.0) XS_cos=0.0;
else XS_cos=COS_mode;
XS_sin=sqrt(1-XS_cos*XS_cos);
DC_R();
reg_prd=2500;
reg_tcr=0x0c27;
asm(" clrc intm");
nTbSysTime=0;
for(jj=0;jj<0xffff;jj++)
SysTb(&nTbSysTime,1000);
bRefurbish=True;
while(bRefurbish==True)
{
SysTb(&nTbSysTime,1000);
}
if(KeyNode.nPage==13296||KeyNode.nPage==13750)
{
asm(" setc intm");
ratio();
reg_prd=2500;
reg_tcr=0x0c27;
asm(" clrc intm");
nTbSysTime=0;
for(jj=0;jj<0xffff;jj++)
SysTb(&nTbSysTime,1000);
bRefurbish=True;
{
SysTb(&nTbSysTime,1000);
}
if(KeyNode.nPage==13296)
{
asm(" setc intm");
admit();
error();
}
else if(KeyNode.nPage==13750)
{
asm(" setc intm");
admitbfb();
errorbfb();
}
}
CT_test[5]=ferr[0];
CT_test[6]=ferr[1];
CT_test[7]=ferr[2];
CT_test[8]=ferr[3];
CT_test[9]=perr[0];
CT_test[10]=perr[1];
CT_test[11]=perr[2];
CT_test[12]=perr[3];
CT_test[13]=CT_ferr;
CT_test[14]=CT_perr;
init_dsp();
}
/*---------CT burden measure------------*/
void CT_burden(void)
{
unsigned int i,j,k;
reg_tcr=0x0c20;
out_fre=50.0;
reg_prd=(int)(15625.0/out_fre-1.0);
sample_prd=1;
sample_ctr(256);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -