📄 convert.cpp
字号:
else {if(pi) {
ppf=(*(rup+12)-max)/3;
for(x=10;x<13;x++)*(rup+x)=max+ppf*(x-9);
min=*(rup+12);max=*(rup+kk+7);
}
if(qi) {
qqf=(*(ruq+12)-nax)/3;
for(x=10;x<13;x++)*(ruq+x)=nax+qqf*(x-9);
nin=*(ruq+12);nax=*(ruq+kk+7);
}
}
}
else {for(x=0;x<kk/4;x++)
{y=4*x;
cdpq(va+y,ia+y,vb+y,ib+y,vc+y,ic+y,&ppf,&qqf);
if(pi)*(rup+x+10)=ppf;if(qi)*(ruq+x+10)=qqf;
}
if(pi){min=*(rup+10);max=*(rup+x-1);}
if(qi){nin=*(ruq+10);nax=*(ruq+x-1);}
}
}
j=k;
k+=g+10;
*(rui+0)=k;*(rui+g+10)=0;*(rui+4)=(g-1)**(rui+2)+*(rui+1);
if(pi) {*(rup+0)=*(rui+0);*(rup+g+10)=0;*(rup+4)=*(rui+4);
*(rup+g+11)=*(rui+4)+*(rui+2);
}
if(qi) {*(ruq+0)=*(rui+0);*(ruq+g+10)=0;*(ruq+4)=*(rui+4);
*(ruq+g+11)=*(rui+4)+*(rui+2);
}
i++;
}while( i < (int)seg1);
k=j=0;
while(*(o+j))
{
rui=o+j;
hua=o+k;
kk=(int)(*(o+j)-j+1.5);
rup=p+j;ruq=q+j;hup=p+k;huq=q+k;
g=(int)((*(rui+kk)-*(rui+1))/(*(rui+2))+.5);
g1=(int)((*(rui+4)-*(rui+1))/(*(rui+2))+.5);
if((g>g1)&&(j==k))goto end1;
if(g1+1>g)kk=g;else kk=g1+1;
l=(long int)(*rui+.5);
*(hua+1)=*(rui+1);*(hua+2)=*(rui+2);*(hua+3)=*(rui+3);
*(hua+4)=(kk-1)**(hua+2)+*(hua+1);
if(pi) {*(hup+0)=*(rui+0);*(hup+2)=*(rui+2);
*(hup+3)=*(rui+3);*(hup+4)=*(rui+4);}
if(qi) {*(huq+0)=*(rui+0);*(huq+2)=*(rui+2);
*(huq+3)=*(rui+3);*(huq+4)=*(rui+4);}
if(j!=k)for(i=10;i<kk+10;i++)
{
if(pi)*(hup+i)=*(rup+i);
if(qi)*(huq+i)=*(ruq+i);
}
f=*(o+k+4);k+=kk+10;if(pi)*hup=k;if(qi)*huq=k;j=l;
continue;
end1: f=*(o+k+4);
j=(long int)(*rui+.5);k=(long int)(*hua+.5);
}
*(o+k)=0;*(o+k+1)=f;
if(pi) {*(p+k)=0;*(p+k+1)=f;}
if(qi) {*(q+k)=0;*(q+k+1)=f;}
k=0; j = (int)(*o+.5);
while(*(o+j))
{rui=o+j;hua=o+k;
rup=p+j;ruq=q+j;hup=p+k;huq=q+k;
g=(int)(*(rui+3)+.5);
g1=(int)(*(hua+3)+.5);
f=*(rui+1)-*(hua+4)-*(hua+2);
l=(long int)(*rui+.5);
if((g!=g1)||(2*f>*(rui+2))||(-2*f>*(rui+2)))goto end2;
kk=(int)(*(o+j)-j-9.5);
f=(int)(*(o+j+4));
g1=(int)(*(o+k)-k+.5);
for(i=0;i<kk;i++)
{
if(pi)*(hup+g1+i)=*(p+j+i+10);
if(qi)*(huq+g1+i)=*(q+j+i+10);
}
*hua=k+kk+g1;*(hua+4)=f;
if(pi){*hup=*hua;*(hup+4)=f;}
if(qi){*huq=*hua;*(huq+4)=f;}
j=l;
continue;
end2: k=(long int)(*hua+.5);
if(j!=k){ kk =(int)(*(o+j)-j+.5);
for(i=1;i<kk;i++)
{
if(pi)*(p+k+i)=*(p+j+i);
if(qi)*(q+k+i)=*(q+j+i);
}
*(o+k)=k+kk;if(pi)*(p+k)=*(o+k);if(qi)*(q+k)=*(o+k);
}
j=l;
continue;
}
k=(long int)(*(o+k)+.5);
if(pi){*(p+k+1)=*(p+j+1);*(p+k)=0;}
if(qi){*(q+k+1)=*(q+j+1);*(q+k)=0;}
j=0;
while(*(o+j))
{
g1=(int)((*(o+j+4)-*(o+j+1))/(*(o+j+2))+.5);
if(pi)max=min=*(p+j+10);
if(qi)nax=nin=*(q+j+10);
for(i=j+10;i<g1+j+10;i++)
{
if(pi) {if(max<*(p+i))max=*(p+i);
if(min>*(p+i))min=*(p+i);
}
if(qi) {if(nax<*(q+i))nax=*(q+i);
if(nin>*(q+i))nin=*(q+i);
}
}
if(pi){*(p+j+5)=max;*(p+j+6)=min;}
if(qi){*(q+j+5)=nax;*(q+j+6)=nin;}
j=(long int)(*(o+j)+.5);
}
endf:
if(!fi)goto end;
i=j=k=0;
*(rui+2)=(seguik+0)->dt;
*(rui+3)=(seguik+0)->c;
do {
*(rui+1)=(seguik+i)->t;
*(rui+2)=(seguik+i)->dt;
*(rui+3)=(seguik+i)->c;g=(seguik+i)->l;
if((seguik+i)->c==2)g=(seguik+i)->l-2;
if((seguik+i)->c==3)g=(seguik+i)->l/4;
if((seguik+i)->c==4)g=(seguik+i)->l/4;
if(((i+1) != ((int)seg1))&&(g>0))
{g1 = (int)(((seguik+i+1)->t-*(rui+1))/(*(rui+2))+.0005);
if(g>g1)g=g1;
}
if(g<=1)
{
k=j;
g= (int)(*(rui+0)-j-10);
if((i+1) != ((int)seg1))
{g1 = (int)(((seguik+i+1)->t-*(rui+1))/(*(rui+2))+.0005);
if(g>g1)g=g1;
}
}
j=k;
k+=g+10;
*(rui+0)=k;*(rui+g+10)=0;
*(rui+4)=(g-1)**(rui+2)+*(rui+1);
*(rui+g+11)=*(rui+4)+*(rui+2);
i++;
}while( i < (int)seg1);
end:
free(va);free(vb);free(vc);
free(ia);free(ib);free(ic);
return 0;
}
int CConvert::abpq(double far *ua,double far *ia,double far *ub,double far*ib,
double far *uc,double far *ic,double far *p,double far *q)
{
double f,su1,su2,si1,si2,qa,qb,qc,pa,pb,pc;
f=314.15927;
su1=0.0005*(*(ua+0)+*(ua+1)+*(ua+2)+*(ua+3)+*(ua+4)
-*(ua+10)-*(ua+11)-*(ua+12)-*(ua+13)-*(ua+14));
su2=0.0005*(*(ua+5)+*(ua+6)+*(ua+7)+*(ua+8)+*(ua+9)
-*(ua+15)-*(ua+16)-*(ua+17)-*(ua+18)-*(ua+19));
si1=0.0005*(*(ia+0)+*(ia+1)+*(ia+2)+*(ia+3)+*(ia+4)
-*(ia+10)-*(ia+11)-*(ia+12)-*(ia+13)-*(ia+14));
si2=0.0005*(*(ia+5)+*(ia+6)+*(ia+7)+*(ia+8)+*(ia+9)
-*(ia+15)-*(ia+16)-*(ia+17)-*(ia+18)-*(ia+19));
pa=(f*f*(su1-su2)*(si1-si2)+f*f*(su1+su2)*(si1+si2))/8;
qa=f*f*(su1*si2-su2*si1)/4;
su1=0.0005*(*(ub+0)+*(ub+1)+*(ub+2)+*(ub+3)+*(ub+4)
-*(ub+10)-*(ub+11)-*(ub+12)-*(ub+13)-*(ub+14));
su2=0.0005*(*(ub+5)+*(ub+6)+*(ub+7)+*(ub+8)+*(ub+9)
-*(ub+15)-*(ub+16)-*(ub+17)-*(ub+18)-*(ub+19));
si1=0.0005*(*(ib+0)+*(ib+1)+*(ib+2)+*(ib+3)+*(ib+4)
-*(ib+10)-*(ib+11)-*(ib+12)-*(ib+13)-*(ib+14));
si2=0.0005*(*(ib+5)+*(ib+6)+*(ib+7)+*(ib+8)+*(ib+9)
-*(ib+15)-*(ib+16)-*(ib+17)-*(ib+18)-*(ib+19));
pb=(f*f*(su1-su2)*(si1-si2)+f*f*(su1+su2)*(si1+si2))/8;
qb=f*f*(su1*si2-su2*si1)/4;
su1=0.0005*(*(uc+0)+*(uc+1)+*(uc+2)+*(uc+3)+*(uc+4)
-*(uc+10)-*(uc+11)-*(uc+12)-*(uc+13)-*(uc+14));
su2=0.0005*(*(uc+5)+*(uc+6)+*(uc+7)+*(uc+8)+*(uc+9)
-*(uc+15)-*(uc+16)-*(uc+17)-*(uc+18)-*(uc+19));
si1=0.0005*(*(ic+0)+*(ic+1)+*(ic+2)+*(ic+3)+*(ic+4)
-*(ic+10)-*(ic+11)-*(ic+12)-*(ic+13)-*(ic+14));
si2=0.0005*(*(ic+5)+*(ic+6)+*(ic+7)+*(ic+8)+*(ic+9)
-*(ic+15)-*(ic+16)-*(ic+17)-*(ic+18)-*(ic+19));
pc=(f*f*(su1-su2)*(si1-si2)+f*f*(su1+su2)*(si1+si2))/8;
qc=f*f*(su1*si2-su2*si1)/4;
*p=pa+pb+pc;
*q=qa+qb+qc;
return(1);
}
int CConvert::cdpq(double far *ua,double far *ia,double far *ub, double far*ib,
double far *uc,double far *ic,double far *p,double far *q)
{
double a,b,su1,su2,si1,si2,f,qa,qb,qc,pa,pb,pc;
f=50;
a=2*sin(3.1415927*0.005*f);
b=2*cos(3.1415927*0.005*f);
su1=*(ua+0)-*(ua+2);
su2=*(ua+1)-*(ua+3);
si1=*(ia+0)-*(ia+2);
si2=*(ia+1)-*(ia+3);
pa=((su1-su2)*(si1-si2)/a/a+(su1+su2)*(si1+si2)/b/b)/8;
qa=(su1*si2-su2*si1)/a/b/4;
su1=*(ub+0)-*(ub+2);
su2=*(ub+1)-*(ub+3);
si1=*(ib+0)-*(ib+2);
si2=*(ib+1)-*(ib+3);
pb=((su1-su2)*(si1-si2)/a/a+(su1+su2)*(si1+si2)/b/b)/8;
qb=(su1*si2-su2*si1)/a/b/4;
su1=*(uc+0)-*(uc+2);
su2=*(uc+1)-*(uc+3);
si1=*(ic+0)-*(ic+2);
si2=*(ic+1)-*(ic+3);
pc=((su1-su2)*(si1-si2)/a/a+(su1+su2)*(si1+si2)/b/b)/8;
qc=(su1*si2-su2*si1)/a/b/4;
*p=pa+pb+pc ;
*q=qa+qb+qc;
return(1);
}
//初始化波形数据
int CConvert::initwaew(struct disr far *dvew, int *dvvp, int *dvvn,
struct datd *dat, struct disview far *waew, long int *unxl)
{
int i,j,k,n,y;
long int x;
double ft;
char c;
struct disr far *dv;
struct disview far *wa;
for(i=0;i<*dvvp;i++)
{
j=*(dvvp+i+1);
dv=dvew+j;
wa=waew+i;
wa->v.left=dv->v.left;
wa->v.top=dv->v.top;
wa->v.right=dv->v.right;
wa->v.bottom=dv->v.bottom;
wa->v.clip=dv->v.clip;
wa->p=dv->p;
wa->g=dv->g;
wa->z=dv->z;
wa->s1=dv->s1;
wa->s2=dv->s2;
wa->s3=dv->s3;
wa->s4=dv->s4;
wa->o=0;
wa->i=wa->j=1.;
wa->t=wa->ti=-11.;
wa->ot=wa->tj=100;
for(n=0;n<4;n++)
{
wa->w[n].c=dv->w[n].c;
wa->w[n].w=dv->w[n].w;
wa->w[n].x=dv->w[n].x;
for(k=0;k<*dvvn;k++)
{
wa->w[n].d.c = NULL;
if(( dv->w[n].w == *(dvvn+1+2*k)) && (dv->w[n].x==*(dvvn+2+2*k)))
{
wa->w[n].d.c=dat[k].c;
if(!n)
{
switch(dv->w[0].w)
{
case 1: // 电流
case 4: //
dingzhi1(dv->w[0].x,&x);
*(unxl+i)=x/2000*2000;//线路号*2000
x=*(unxl+i)+17; //线路号*2000+17 电压等级
dingzhi(x,&y,&ft,&c);//y为返回的电压等级,如110kv
wa->bl=y*10;
break;
case 2: //电压
case 5:
dingzhi1(dv->w[0].x,&x);
*(unxl+i)=x/2000*2000; //线路号*2000
x=*(unxl+i)+18; //线路号*2000+18 CT变比
dingzhi(x,&y,&(wa->bl),&c);
break;
case 3: //开关
dingzhi1(dv->w[0].x+1000,&x); //x中返回的是开关量通道号
*(unxl+i)=x/2000*2000; //线路号*2000
wa->bl=wa->dw=1.;
break;
case 6: //有功
case 7: //无功
*(unxl+i)=(dv->w[0].x+1)*2000;
x=*(unxl+i)+17;
dingzhi(x,&y,&ft,&c);
wa->bl=y*10;
x=*(unxl+i)+18;
dingzhi(x,&y,&ft,&c);
wa->bl=wa->bl*ft;
break;
case 9: //频率
dingzhi1(dv->w[0].x+2000,&x);
*(unxl+i)=x/2000*2000;
wa->bl=1.;
break;
}
} // if(!n)
break;
} //if()
}//for
} //for n=0;
} //for i
return 0;
}
BOOL CConvert::ConvertToIEEE(CString ExtName)
{
int i, j, k;
int FLAG =0 ;
FILE *rfp;
double m_MaxNum, m_MinNum, m_MaxMinNum, a[2];
char ChannelPhase[4][4]={"A","B","C","O"};
char VAString[4][4]={"V","A","KV","KA"};
double Dat[122];
CString drive;
CString dir;
CString fname;
CString ext;
FILE *hfp, *cfp, *dfp;
double far *buf, OldValue, StartTime;
double far *value;
double Rate[4] = {1000, 200, 10, 1};
int NowRate, Segs;
long SegPoints, StartPoint;
double wyymax[48], wyymin[48];
unsigned char tempbuf[28];
_splitpath( m_FaultFileName, drive.GetBuffer(_MAX_DRIVE), dir.GetBuffer(_MAX_DIR),
fname.GetBuffer(_MAX_FNAME), ext.GetBuffer(_MAX_EXT) );
drive.ReleaseBuffer();
dir.ReleaseBuffer();
fname.ReleaseBuffer();
ext.ReleaseBuffer();
m_StrFaultHeadFile = drive + dir + fname + ".hdr";
m_StrFaultCFGFile = drive + dir + fname + ".cfg";
m_StrFaultDataFile = drive + dir + fname + ExtName;
hfp = fopen(m_StrFaultHeadFile, "wt");
if(hfp == NULL)
{ AfxMessageBox("不能创建文件:" + m_StrFaultHeadFile, MB_OK); return (FALSE);}
fprintf(hfp, "Wyy Wgl32's COMTRADE File\n");
fclose(hfp);
cfp = fopen(m_StrFaultCFGFile, "wt");
if(cfp == NULL)
{ AfxMessageBox("不能创建文件:" + m_StrFaultCFGFile, MB_OK); return (FALSE);}
dfp = fopen(m_StrFaultDataFile, "wt");
if(dfp == NULL)
{ AfxMessageBox("不能创建文件:" + m_StrFaultDataFile, MB_OK); return (FALSE);}
fprintf(cfp, "%s,%d\n", m_StrStationName, m_wStationID);
fprintf(cfp, "120,48A,72D\n");
for(i=0; i<10; i++)
{
m_Max[i] = 0.0; m_absMax[i] = 0.0;
m_Min[i] = 999999.0; m_absMin[i] = 999999.0;
}
for(i=0; i<120; i++)
{
if( (m_ChannelsData[i].w != 1) && (m_ChannelsData[i].w != 2)) continue;
if(FLAG==0){FLAG=1; buf = m_ChannelsData[i].c;}
if(m_Max[m_ChannelsData[i].w] < m_ChannelsData[i].max )
m_Max[m_ChannelsData[i].w] = m_ChannelsData[i].max;
if(m_Min[m_ChannelsData[i].w] > m_ChannelsData[i].min )
m_Min[m_ChannelsData[i].w] = m_ChannelsData[i].min;
if((m_absMax[m_ChannelsData[i].w]) < (m_ChannelsData[i].absMax))
m_absMax[m_ChannelsData[i].w] = m_ChannelsData[i].absMax;
if((m_absMin[m_ChannelsData[i].w]) > (m_ChannelsData[i].absMin))
m_absMin[m_ChannelsData[i].w] = m_ChannelsData[i].absMin;
}
for(i=1; i<3; i++)
{
m_MaxNum = m_absMax[i]/(double)999988. ;
if(m_absMin[i] <10.)
m_MinNum = m_absMin[i]/10.;
else
m_MinNum = m_absMin[i];
if(m_MinNum >= m_MaxNum)
m_MaxMinNum = m_MaxNum + (m_MinNum - m_MaxNum)*0.618;
else
m_MaxMinNum = m_MinNum + (m_MaxNum - m_MinNum)*0.618;
a[i-1] = m_MaxMinNum;
}
for(i=0; i<48; i++)
{wyymax[i] = 0; wyymin[i] = 999999.;}
for(i=0; i<48; i++)
{
if(m_ChannelsData[i].w ==0 )
fprintf(cfp, "% 4d, , , , ,%lf, 0, 0 , 0, 999999\n", i+1, a[m_ChannelsData[i].w-1]);
else
{
fprintf(cfp, "% 4d,% 30s,% 10s,% 10s,% 5s,%lf, 0 , 0 ,% 6ld,% 6ld\n",
i+1, m_StrAChannel[i], ChannelPhase[i%4],ChannelPhase[i%4],
VAString[m_ChannelsData[i].w-1],
a[m_ChannelsData[i].w-1],
(long)((m_ChannelsData[i].min)/a[m_ChannelsData[i].w-1]) - 10,
(long)((m_ChannelsData[i].max)/a[m_ChannelsData[i].w-1]) + 10 );
if(wyymax[i] < (long)((m_ChannelsData[i].max)/a[m_ChannelsData[i].w-1]))
wyymax[i] = (long)((m_ChannelsData[i].max)/a[m_ChannelsData[i].w-1]);
if(wyymin[i] > (long)((m_ChannelsData[i].min)/a[m_ChannelsData[i].w-1]))
wyymin[i] = (long)((m_ChannelsData[i].min)/a[m_ChannelsData[i].w-1]);
}
}
for(i=0; i<72; i++)
{
if(m_ChannelsData[i].w ==0 )
fprintf(cfp, "% 4d, , 0\n", i+48+1);
else
fprintf(cfp, "% 4d,% 30s,% 2d\n", 48+i+1, m_StrDChannel[i], 0);
}
fprintf(cfp," 50\n");
value = buf;
Segs = (int)(value[7]);
fprintf(cfp,"% 4d\n", Segs); //段数
OldValue = value[0];
StartPoint = 0;
StartTime = value[1];
for(i=0; i<Segs; i++)
{
OldValue = value[0];
SegPoints = (long)(value[0]-10*(i+1));
NowRate = (int)(1./(value[2]));
fprintf(cfp, "% 6ld,% 6ld\n", NowRate, SegPoints);
for(k=StartPoint; k<SegPoints; k++)
{
Dat[0] = k+1;
Dat[1] = (value[1]+(k-StartPoint)*value[2] - StartTime)*1000.*1000.;
fprintf(dfp, "% 10ld, % 10ld,", (long)(Dat[0]),(long)(Dat[1]));
for(j=0; j<120; j++)
{
if(m_ChannelsData[j].w ==0) Dat[2+j] = (double)999999L;
else
{
if( j < 48)
Dat[2+j] = ( (*(m_ChannelsData[j].c+(i+1)*10+k))/a[m_ChannelsData[j].w-1] );
else
{
Dat[2+j] = *(m_ChannelsData[j].c+(i+1)*10+k);
if(Dat[2+j] == -1)Dat[2+j] = 0;
}
}
}
for(j=0; j<119; j++)
fprintf(dfp, "% 10ld,", (long)(Dat[2+j]));
fprintf(dfp, "% 10ld\n", (long)(Dat[121]));
}
StartPoint = (long)OldValue-(i+1)*10;
value = (buf + (int)OldValue);
}
fprintf(dfp, "\0x1A");
rfp = fopen(m_FaultFileName, "rb");
if(rfp == NULL)
{ AfxMessageBox("不能打开文件:" + m_FaultFileName, MB_OK); return (FALSE);}
SegPoints=0;
do{
fseek(rfp, SegPoints*28L, SEEK_SET);
SegPoints++;
fread(tempbuf, sizeof(char), 28, rfp);
}while((tempbuf[0] & 0x0f) != 0x07);
fclose(rfp);
if(m_StrStartDateTime.IsEmpty())
fprintf(cfp, "%02d/%02d/%d,%02d:%02d:%09.6lf\n", tempbuf[3]*10+tempbuf[4],
tempbuf[5]*10+tempbuf[6],tempbuf[1]*10+tempbuf[2],
tempbuf[7]*10+tempbuf[8],tempbuf[9]*10+tempbuf[10],
tempbuf[11]*10+tempbuf[12] + ((double)(tempbuf[13]*256+tempbuf[14]))/1000.);
else fprintf(cfp, "%s\n", m_StrStartDateTime);
fprintf(cfp, "%02d/%02d/%d,%02d:%02d:%09.6lf\n", tempbuf[3]*10+tempbuf[4],
tempbuf[5]*10+tempbuf[6],tempbuf[1]*10+tempbuf[2],
tempbuf[7]*10+tempbuf[8],tempbuf[9]*10+tempbuf[10],
tempbuf[11]*10+tempbuf[12] + ((double)(tempbuf[13]*256+tempbuf[14]))/1000.);
fprintf(cfp,"ASCII\n");
fclose(cfp);
for(i=0;i<120;i++)
{
if(m_ChannelsData[i].w==0)continue;
free(m_ChannelsData[i].c);
}
fclose(dfp);
return (TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -