📄 analysis.cpp
字号:
// Analysis.cpp : implementation file
//
#include "stdafx.h"
#include "wgl_32.h"
#include "Convert.h"
#include "Analysis.h"
#include "mbstring.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
char uiabcn[]={"UAUBUCUNIAIBICIN"};
int tab[32]={10, 60, 20, 40, 120, 130, 140, 50,
220, 270, 280, 290, 210, 250, 0, 30,
230, 370, 380, 100, 110, 80, 150, 160,
170, 180, 190, 300, 310, 320, 83, 86};
extern unsigned char dig[];
/////////////////////////////////////////////////////////////////////////////
// CConvert
IMPLEMENT_DYNCREATE(CAnalysis, CConvert)
CAnalysis::CAnalysis()
{
CConvert::CConvert();
m_FaultLineNo = -1;
fFaultJL = -1;
Wyyph = -1;
}
BOOL CAnalysis::OnNewDocument()
{
if (!CConvert::OnNewDocument())
return FALSE;
return TRUE;
}
CAnalysis::~CAnalysis()
{
}
BEGIN_MESSAGE_MAP(CAnalysis, CConvert)
//{{AFX_MSG_MAP(CAnalysis)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConvert diagnostics
#ifdef _DEBUG
void CAnalysis::AssertValid() const
{
CConvert::AssertValid();
}
void CAnalysis::Dump(CDumpContext& dc) const
{
CConvert::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CConvert serialization
void CAnalysis::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
int CAnalysis::tab1(int trai)
{
int i;
se_se=LONG1;
bl_se=2*se_se;
se=(struct letter far *)calloc(LONG1, sizeof(struct letter));
bl=(struct letter far *)calloc(2*LONG1, sizeof(struct letter));
if(se == NULL || bl == NULL)
{AfxMessageBox("内存不够!", MB_OK); return (-1); }
caps1 = (BYTE *)malloc(LONG1*CAPS1L);
caps2 = (BYTE *)malloc(2*LONG1*CAPS2L);
if(caps1 == NULL || caps2 == NULL)
{AfxMessageBox("内存不够!", MB_OK); return (-1); }
for(i=0;i<LONG1;i++)
(se+i)->caps = caps1+i*CAPS1L;
for(i=0;i<2*LONG1;i++)
(bl+i)->caps=caps2+i*CAPS2L;
//将glconfig.dat读入SE中,se_se中为glconfig.dat的行数
se_se=initfile2(m_StrglconfigFile, se_se, se);
jl(trai);
rechange();
free(caps1);
free(caps2);
free(se);
free(bl);
return (1);
}
int CAnalysis::initfile2(CString name, int sequence_se,struct letter *se)
{
FILE *fp;
int a,j;
if((fp=fopen(name,"r+"))==NULL)
{ AfxMessageBox("打不开文件" + name, MB_OK); return(0); }
for(a=0;a!=sequence_se;a++)
{
j=fscanf(fp," %i, %i, %i, %i, %i, %i, %s",
&(se+a)->order,&(se+a)->trait,&(se+a)->x,
&(se+a)->y,&(se+a)->line,&(se+a)->arrange,(se+a)->caps);
if(j<6)break;
(se+a)->order--;
}
fclose(fp);
return (a);
}
int CAnalysis::rechange(void)
{
char *shelp1[2]={"图形打印,请选择:",
"ENTER:故障线路ⅰ1:cpu1ⅰ2:cpu2ⅰ3:cpu3ⅰ4:cpu4",
};
char s1[]={"ESC: 退出"};
int a=0;
convcap(6);
wscani();
convcaps();
page=800;
pscani(&a);
return (1);
}
int CAnalysis::addtime(unsigned char *buf,long int lon)
{
long int i;
int j,k,n,m;
i=lon+*(buf+12)*256l+*(buf+13); //毫秒
if(i<0)goto fz1;
k=i%1000; j=i/1000;
*(buf+12)=(k&0xff00)>>8;*(buf+13)=k%256;
j = j + *(buf+11);
*(buf+11)=j%10; j=j/10;
j = j + *(buf+10);
*(buf+10)=j%6; j=j/6;
j = j + *(buf+9);
*(buf+9) = j%10; j=j/10;
j = j + *(buf+8);
*(buf+8)=j%6; j=j/6;
j = j + *(buf+6)*10 + *(buf+7);
*(buf+6) = (j%24)/10;
*(buf+7)=(j%24)%10;j=j/24;
n = naday(buf,0);
j = j + *(buf+4)*10 + *(buf+5);
if(j <= n)
{*(buf+4) = j/10; *(buf+5) = j%10; return(0);}
(*(buf+3))++;
*(buf+5)=(j%n)%10+1;
*(buf+4)=(j%n)/10;
if(k!=12)
return(0);
m = *(buf+0)*10+*(buf+1)+1;
*(buf+3)=1; *(buf+2)=0;
*(buf+1)=m%10; *(buf+0)=m/10;
return(0);
fz1:
k=1000+i%1000;j=i/1000-1;
*(buf+12)=(k&0xff00)>>8;*(buf+13)=k%256;
j = j + *(buf+11);
*(buf+11)=(10+j)%10;
if(j>=0)
return(0);
j=j/10-1;
j = j + *(buf+10);
*(buf+10) = (6+j)%6;
if(j >= 0)
return(0);
j=j/6-1;
j=j+*(buf+9);
*(buf+9)=(10+j)%10;
if(j>=0)
return(0);
j=j/10-1;
j=j+*(buf+8);
*(buf+8)=(6+j)%6;if(j>=0)return(0);j=j/6-1;
j=j+*(buf+6)*10+*(buf+7);
if(j>=0){*(buf+6)=j/10;*(buf+7)=j%10;return(0);}
*(buf+6)=(24+(j%24))/10;*(buf+7)=(24+(j%24))%10;
j=j/24-1;if(j>=0)return(0);
n=naday(buf,-1);
j=j+*(buf+4)*10+*(buf+5);
if(j>0)
{*(buf+4)=j/10; *(buf+5)=j%10; return(0);}
*(buf+4)=(n+j)/10;*(buf+5)=(n+j)%10;
j=*(buf+2)*10+*(buf+3)-1;
if(j>0)
{ *(buf+2)=j/10; *(buf+3)=j%10; return(0);}
*(buf+2)=(12+j)/10;*(buf+3)=(12+j)%10;
m=*(buf+0)*10+*(buf+1)-1;
*(buf+1)=m%10;
*(buf+0)=m/10;
return(0);
}
int CAnalysis::naday(unsigned char *buf,int tra)
{
int k,m,n;
k = *(buf+2)*10+*(buf+3);
m = *(buf+0)*10+*(buf+1);
if(tra==-1)
{
if(k==3)
{
if(m%4)n=28;
else n=29;
}
else if(((k>8)&&(!(k%2)))||((k<8)&&(k%2)))n=30;
else n=31;
return(n);
}
if(k==2)
{
if(m%4)n=28;
else n=29;
}
else if(((k>7)&&(k%2))||((k<7)&&(!(k%2))))
n=30;
else n=31;
return(n);
}
int CAnalysis::jl(int trai)
{
int xln, rpxln, noxl, xl8[9];
char ci[40] ;
BYTE *ca;
int i, j, k, s=1, aa;
long int uni,xl[40], rpxl[40];
double vmaxxl,dd;
va=(double *)malloc(1500*sizeof(double));
vb=(double *)malloc(1500*sizeof(double));
vc=(double *)malloc(1500*sizeof(double));
vd=(double *)malloc(1500*sizeof(double));
ia=(double *)malloc(1500*sizeof(double));
ib=(double *)malloc(1500*sizeof(double));
ic=(double *)malloc(1500*sizeof(double));
i0=(double *)malloc(1500*sizeof(double));
va1=(double *)malloc(1500*sizeof(double));
vb1=(double *)malloc(1500*sizeof(double));
vc1=(double *)malloc(1500*sizeof(double));
v01=(double *)malloc(1500*sizeof(double));
ia1=(double *)malloc(1500*sizeof(double));
ib1=(double *)malloc(1500*sizeof(double));
ic1=(double *)malloc(1500*sizeof(double));
i01=(double *)malloc(1500*sizeof(double));
kg1=(double *)malloc(1500*sizeof(double));
im=(double *)malloc (1500*sizeof(double));
im1=(double *)malloc(1500*sizeof(double));
j1=(char *)malloc(1500);
j2=(char *)malloc(1500);
if(va==NULL || vb==NULL || vc==NULL || vd==NULL ||
ia==NULL || ib==NULL || ic==NULL || i0==NULL ||
va1==NULL|| vb1==NULL|| vc1==NULL|| v01==NULL||
ia1==NULL|| ib1==NULL|| ic1==NULL|| i01==NULL||
kg1==NULL|| im ==NULL|| im1==NULL|| j1 ==NULL|| j2==NULL)
{ AfxMessageBox("内存不够!\n",MB_OK); return (0); }
for(xln=i=0;i<32;i++)
{
uni=(i+1)*2000l;
for(k=1;k<9;k++)
{
j=10000;
dingzhi(uni+k,&j,va,ci);
if((j<0)||(j>1000))break;
if(!cpubn[j/12])break;
dingzhi(uni+12,&j,&dd,ci);
if(dd<.00000001)break;
}
if(k==9)
{ xln++; xl[xln]=uni; }
}
xl[0]=xln; noxl=rpxln=0; trait=10;
rpxln++; vmaxxl=0.; guzhxl=0;
for(i=0;i<xl[0];i++)
{
uni=xl[i+1];
zzd=10;j=dingzhi(uni+24,&k,&zzd,ci);
if((j)&&(zzd>.01))zzd=50/zzd;
else zzd=10;
for(j=1;j<9;j++)
dingzhi(uni+j,xl8+j-1,&dd,ci);
readdat(va,xl8[0],0,1,1);
readdat(vb,xl8[1],0,1,1);
readdat(vc,xl8[2],0,1,1);
readdat(ia,xl8[4],0,1,2);
readdat(ib,xl8[5],0,1,2);
readdat(ic,xl8[6],0,1,2);
lon=seguik->l-s;
for(aa=0;aa!=lon;aa++)
*(i0+aa)=*(ia+aa)+*(ib+aa)+*(ic+aa);
dd=tbpxl();
if(dd>vmaxxl)
{ vmaxxl=dd; rpxl[rpxln]=uni; noxl=1; }
}
(se+se_se)->order = tab[14];
(se+se_se)->trait=11;
(se+se_se)->line=128;
(se+se_se)->arrange=16;
dingzhi(0,&i,va1, (char *)(se+se_se)->caps);
se_se++;//变电站名称
i=trait; trait=11;
jl1(tab[18],0.,0);
trait=i;
//报告日期
if(!noxl)
{
(se+se_se)->order=tab[17];(se+se_se)->trait=11;
(se+se_se)->line=128;(se+se_se)->arrange=16;
ca=(se+se_se)->caps;
*(ca+0)=0xa2;*(ca+1)=0xa1; *(ca+2)=0;
se_se++; //区内无故障
}
else
{
guzhxl=rpxl[1];
zb(rpxl[1],xl);
}
free(va); free(vb); free(vc); free(vd);
free(ia); free(ib); free(ic); free(i0);
free(va1);free(vb1);free(vc1);free(v01);
free(ia1);free(ib1);free(ic1);free(i01);
free(kg1);free(im); free(im1);
free(j1);free(j2);
return (1);
}
double CAnalysis::tbpxl()
{
int nqda,nqdb,nqdc,i,nqd,mqd,jp,j,nqd0;
double cukao,imaxa,imaxa0,imaxb,imaxb0,imaxc,imaxc0;
nqda=nqdb=nqdc=nqd0=0;
for(i=0;i<lon-57;i++)
{
if(fabs(*(ia+i+20)+*(ia+i+21)-*(ia+i)-*(ia+i+1))>20.0/zzd)
{ nqda++; if(nqda>=3)break; }
else if(nqda>0)nqda--;
if(fabs(*(ib+i+20)+*(ib+i+21)-*(ib+i)-*(ib+i+1))>20.0/zzd)
{ nqdb++; if(nqdb>=3)break; }
else if(nqdb>0)nqdb--;
if(fabs(*(ic+i+20)+*(ic+i+21)-*(ic+i)-*(ic+i+1))>20.0/zzd)
{ nqdc++; if(nqdc>=3)break; }
else if(nqdc>0)nqdc--;
if(fabs(*(i0+i+20)+*(i0+i+21)-*(i0+i)-*(i0+i+1))>20.0/zzd)
{ nqd0++; if(nqd0>=3)break; }
else if(nqd0>0)nqd0--;
}
if((nqda<=0)&&(nqdb<=0)&&(nqdc<=0)&&(nqd0<=0))
return(-10.);
nqd=i+40; mqd=i; imaxa=imaxb=imaxc=0.;
for(i=0;i<15;i++)
{
imaxa0 = fabs(*(ia+i+nqd)+*(ia+i+1+nqd)-*(ia+i+mqd)-*(ia+i+1+mqd));
if(imaxa<imaxa0) imaxa = imaxa0;
imaxb0 = fabs(*(ib+i+nqd)+*(ib+i+1+nqd)-*(ib+i+mqd)-*(ib+i+1+mqd));
if(imaxb<imaxb0) imaxb = imaxb0;
imaxc0 = fabs(*(ic+i+nqd)+*(ic+i+1+nqd)-*(ic+i+mqd)-*(ic+i+1+mqd));
if(imaxc<imaxc0)imaxc = imaxc0;
}
if((imaxa>=imaxb)&&(imaxa>=imaxc))
{
for(j=i=0;i<6;i++)
{
tbpfx(ia,ib,va,vb,&jp,mqd+i,nqd+i);
if(jp>0)j++;
}
cukao=imaxa;
if(j>=3)jp=1;
else jp=-1;
}
else if((imaxb>=imaxc)&&(imaxb>=imaxa))
{
for(j=i=0;i<6;i++)
{
tbpfx(ib,ic,vb,vc,&jp,mqd+i,nqd+i);
if(jp>0)j++;
}
cukao=imaxb;
if(j>=3)jp=1;
else jp=-1;
}
else if((imaxc>=imaxa)&&(imaxc>=imaxa))
{
for(j=i=0;i<6;i++)
{
tbpfx(ic,ia,vc,va,&jp,mqd+i,nqd+i);
if(jp>0)j++;
}
cukao=imaxc;
if(j>=3)jp=1;
else jp=-1;
}
if(jp<0)return (-10.);
return(cukao);
}
int CAnalysis::jl1(int order,double dst, int t)
{
unsigned char c[32];
BYTE *ca;
int a,i;
long int lon1;
memcpy(c, m_DataBuffer, sizeof(char)*16);
//fseek(fpdat,0,SEEK_SET); fread(c,16,1,fpdat);
lon1 = (long)(dst*1000+.5+t);
addtime(c+1,lon1);
(se+se_se)->order = order;
(se+se_se)->trait = trait;
(se+se_se)->line = 128;
(se+se_se)->arrange = 16;
ca = (se+se_se)->caps;
se_se++;
*(ca+3)=c[3]+48;
*(ca+4)=c[4]+48;
*(ca+6)=c[5]+48;
*(ca+7)=c[6]+48;
*(ca+0)=c[1]+48;
*(ca+1)=c[2]+48;
*(ca+2)=*(ca+5)='-';
*(ca+8)=*(ca+9)=*(ca+10)=*(ca+11)=32;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -