⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analysis.cpp

📁 一个用C++写的电力系统故障录波数据管理系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// 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 + -