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

📄 convert.cpp

📁 一个用C++写的电力系统故障录波数据管理系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  *(c+8) = wyymax; *(c+9) = wyymin;
  absmax = (fabs(wyymax) > fabs(wyymin)) ? fabs(wyymax):fabs(wyymin);
  if(w==3) 
    xx=x+48;
  else
    xx=x;
  m_ChannelsData[xx].max = wyymax;
  m_ChannelsData[xx].min = wyymin;
  m_ChannelsData[xx].absMax = absmax;
  m_ChannelsData[xx].absMin = absmin;
  //////wyy do modify end

 return (1);
}

//////////////////////   readdat    //////////////////////////
//
int CConvert::readdat(double far *buf,int ith,int d,int s,char tra)
{
 int i,j,retur=0;
 double v1,v2,v3,gf1,gf2;
 unsigned char c[29],sc;
 unsigned char far *cc,*caps;
 unsigned long int y,yy;
 
 SHORT g1,g2,g3,g;
 PSHORT ic;

 y=segm[d][ith/12]/28;
 
 caps=(unsigned char far *)malloc(29);
 if(caps==NULL)
   { AfxMessageBox("内存不够", MB_OK); return (-1); }
 
 switch(ith/12%4) //CPU
   {
    case  0:sc=0x90;break;
    case  1:sc=0xb0;break;
    case  2:sc=0xd0;break;
    case  3:sc=0xf0;break;
    default:sc=0;
   }
 switch(tra)
   {
    case 1: //电压
    case 2: //电流
	 dingzhi2(ith,&v3); // v3为 sys1.dat中的三个系数之一:0.12, 0.88, 0.1524
	 v1=sin(3.1415926/20*7)/sin(3.1415926/20*s)*v3; //V1 = sin(7Pai/20)/sin(3Pai/20)*V3
	 v2=sin(3.1415926/20*7)/sin(3.1415926/20*5)*v3; //V2 = sin(7Pai/20)/sin(5Pai/20)*V3
	 switch( (seguik+d)->c )
	   {
	    case 1: //AB
		 for(i=0; i < (int)((seguik+d)->l-s); i++)
		 {
		  do{
             memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
		     // fseek(fpdat, y*28L, 0);     fread(caps, 28, 1, fpdat);
		     ic=(PSHORT)(caps+1+ith%12*2);
		     y++;
		    }while((*caps & 0xf0) !=sc);
		  yy=y;
		  g1 = ic[0];
		  j=0;
		  do{
		     memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
             //fseek(fpdat, y*28L, 0);     fread(caps, 28, 1, fpdat);
		     ic=(PSHORT )(caps+1+ith%12*2);
		     y++;
		     if((*caps & 0xf0)==sc)j++;
		    }while(j!=s);
		  g2=*ic;
		  g=g1-g2-s*250u;
		  *(buf+i)=g*v1;
		  y=yy;
		 }
		 if(!d)
		   {
            uith0[ith]=0.0;
		    for(i=0; i<20; i++)
            uith0[ith] += (*(buf+i));
		    uith0[ith] = uith0[ith]/20.;
		   }
		 for(i=0; i !=(int)((seguik+d)->l-s); i++) 
		   {
		    (*(buf+i)) -= uith0[ith];
			if( (*(buf+i)) < 0.00000001 && (*(buf+i)) > -0.00000001 ) (*(buf+i)) = 0.0;
		   }
		 break;
	    
        case 2:
		 for(i=0;i< (int)((seguik+d)->l-2);i++)
		    {
		     do{
                memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			     // fseek(fpdat, y*28L, 0); fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2);
			    y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     yy=y;g1=*ic;
		     do{
			    memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                //fseek(fpdat, y*28L, 0);		fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2);   y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     g2=*ic;
		     do{
                memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			    // fseek(fpdat, y*28L, 0);	fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2);	y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     g3=*ic;
		     g=g1-g2-1250;
		     gf1=(g-*(uith0+ith)*5/v1/s)*v2;
		     g=g2-g3-1250;
		     gf2=(g-*(uith0+ith)*5/v1/s)*v2;
		     *(buf+i)=sqrt(fabs(gf1*gf1)+fabs(gf2*gf2));
		     y=yy;
		    }
		 break;
	    case 3:
	    case 4:
		 for(i=0;i < (int)((seguik+d)->l/4); i++)
		    {
		     do{
                memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			    //fseek(fpdat, y*28L, 0); fread(caps, 28, 1, fpdat);
			    ic=(PSHORT)(caps+1+ith%12*2);	
                y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     g1=*ic-5*250u;
             gf1=(g1-*(uith0+ith)*5/v1/s)*v2;
		     do{
                memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			    // fseek(fpdat, y*28L, 0);	fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2);  y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     g2=*ic-5*250u; gf2=(g2-*(uith0+ith)*5/v1/s)*v2;
		     *(buf+i)=sqrt(gf1*gf1+gf2*gf2);
		     for(j=0;j<2;j++)
			    {
			     do{
			        memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                     //fseek(fpdat, y*28L, 0);      fread(caps, 28, 1, fpdat);
			        y++;
			       }while((*(caps+0)&0xf0)!=sc);
			    }
		    }
		 break;
	   }
	 free(caps);
	 return(retur);
    case 3:
	 switch(ith/24%4)
	    {
	     case  0:sc=0x90;break;
	     case  1:sc=0xb0;break;
	     case  2:sc=0xd0;break;
	     case  3:sc=0xf0;break;
	     default:sc=0;
	    }
	 y=segm[d][ith/24]/28;
	 g=0x80>>(ith%24%8);
	 switch((seguik+d)->c)
	   {
	    case 1:
		 for(i=0;i<(int)((seguik+d)->l-s);i++)
		    {
		     do{
                 memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			     //fseek(fpdat, y*28L, 0); fread(caps, 28, 1, fpdat);
			     cc=caps+25+ith%24/8; y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     g1=*cc&g;
		     *(buf+i)=g1?1:-1;
		    }
		 break;
	    case 2:
		 for(g3=i=0;i< (int)((seguik+d)->l-2); i++)
		    {
		     do{
			    memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                 //fseek(fpdat, y*28L, 0);	fread(caps, 28, 1, fpdat);
			    cc=caps+25+ith%24/8; y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     if(((*caps&0xf)==0x8)||((*caps&0xf)==0x9)||((*caps&0xf)==0xa))
		       {
			    if(i)*(buf+i)=*(buf+i-1);
			    else g3=1;
		       }
		     else
		       {
			    g1=*cc&g;	    *(buf+i)=g1?1:-1;
			    if(g3){*(buf+i-1)=*(buf+i);g3=0;}
		       }
		    }
		 break;
	    case 3:
	    case 4:
		 for(g3=i=0;i<(int)((seguik+d)->l/4);i++)
		    {
		     do{
                 memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			     // fseek(fpdat, y*28L, 0);	fread(caps, 28, 1, fpdat);
			     cc=caps+25+ith%24/8; y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     if(((*caps&0xf)==0x8)||((*caps&0xf)==0x9)||((*caps&0xf)==0xa))
		       {
			    if(i)*(buf+i)=*(buf+i-1);
			    else g3=1;
		       }
		     else
		       {
			     g1=*cc&g;
			     *(buf+i)=g1?1:-1;
			     if(g3){*(buf+i-1)=*(buf+i);g3=0;}
		       }
		     for(j=0;j<3;j++)
			    {
			     do{
			        memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                    //fseek(fpdat, y*28L, 0);   fread(caps, 28, 1, fpdat);
			        cc=caps+25+ith%24/8;y++;
			       }while((*(caps+0)&0xf0)!=sc);
			     if(g3)
			       {
			        if(((*caps&0xf)==0x8)||((*caps&0xf)==0x9)||((*caps&0xf)==0xa))
				    g1=*cc&g;
			        *(buf+i)=g1?1:-1;g3=0;
			      }
			   }
		    }
		 break;
	   }
	 break;
    case 6:
    case 7:
	 dingzhi2(ith,&v3);
	 v1=sin(3.1415926/20*7)/sin(3.1415926/20*s)*v3;
	 v2=sin(3.1415926/20*7)/sin(3.1415926/20*5)*v3;
	 switch((seguik+d)->c)
	   {
	    case 1:
		 for(i=0;i<(int)((seguik+d)->l-s);i++)
		    {
		     do{
                memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			    //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2);  y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     yy=y; g1=*ic;	j=0;
		     do{
			    memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
			    ic=(PSHORT)(caps+1+ith%12*2); y++;
			    if((*(caps+0)&0xf0)==sc)j++;
		       }while(j!=s);
		     g2=*ic;  g=g1-g2-s*250u;  *(buf+i)=g*v1; y=yy;
		    }
		 if(!d)
		   {
		    for(uith0[ith]=0.,i=0;i<20;i++)uith0[ith]+=*(buf+i);
		    uith0[ith]=uith0[ith]/20;
		   }
		 for(i=0;i != (int)((seguik+d)->l-s); i++)
           *(buf+i)-=uith0[ith];
		 break;
	    case 2:
		 for(i=0;i < (int)((seguik+d)->l-1);i++)
		    {
		     do{
                memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			    //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2); y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     yy=y;  g1=*ic;
		     
             do{
                memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
			     //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2); y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     g2=*ic; g=g1-g2-1250;
		     *(buf+i)=(g-*(uith0+ith)*5/v1/s)*v2; y=yy;
		    }
		 break;
	    case 3:
	    case 4:
		 for(i=0;i < (int)((seguik+d)->l); i++)
		    {
		     do{
			    memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
			    ic=(PSHORT )(caps+1+ith%12*2); y++;
		       }while((*(caps+0)&0xf0)!=sc);
		     g1=*ic-5*250u;  *(buf+i)=(g1-*(uith0+ith)*5/v1/s)*v2;
		    }
		 break;
	   }
	 break;
    case 9:
	 i=dingzhi(1,&j,&v3,(char *)c);
	 v1=sin(3.1415926/20*7)/sin(3.1415926/20*s)*v3;
	 v2=sin(3.1415926/20*7)/sin(3.1415926/20*5)*v3;
	 if((seguik+d)->c==1)
	   {
	    for(i=0; i<(int)((seguik+d)->l-s); i++)
	       {
		    do{
		        memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
		        ic=(PSHORT )(caps+1+ith%12*2);y++;
		      }while((*(caps+0)&0xf0)!=sc);
		    yy=y; g1=*ic;	j=0;
		    do{
		        memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
		        ic=(PSHORT )(caps+1+ith%12*2); y++;
		        if((*(caps+0)&0xf0)==sc)j++;
		      }while(j!=s);
		     g2=*ic;	 g=g1-g2-s*250u; *(buf+i)=g*v1;	y=yy;
	       }
	   if(!d)
	     {
	      for(uith0[ith]=0.,i=0;i<20;i++)uith0[ith]+=*(buf+i);
	      uith0[ith]=0;
	      uith0[ith]=uith0[ith]/20;
	     }
	   for(i=0;i != (int)((seguik+d)->l-s); i++)
	       *(buf+i)-=uith0[ith];
	  }
	if((seguik+d)->c==2)
	  {
	   for(i=0;i<(int)((seguik+d)->l-1); i++)
	      {
	       do{
		      memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
              //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
		      ic=(PSHORT )(caps+1+ith%12*2);y++;
		     }while((*(caps+0)&0xf0)!=sc);
	       yy=y; g1=*ic;
	       do{
		      memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
              //fseek(fpdat, y*28L, 0);   fread(caps, 28, 1, fpdat);
		      ic=(PSHORT )(caps+1+ith%12*2);  y++;
		     }while((*(caps+0)&0xf0)!=sc);
	       g2=*ic;	g=g1-g2-1250;
	       *(buf+i)=(g-*(uith0+ith)*5/v1/s)*v2; y=yy;
	      }
	  }
	if(((seguik+d)->c==3)||((seguik+d)->c==4))
	  {
	   for(i=0;i<(int)((seguik+d)->l/4);i++)
	      {
	       do{
		      memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
              // fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
		      ic=(PSHORT )(caps+1+ith%12*2); y++;
		     }while((*(caps+0)&0xf0)!=sc);
	       g1=*ic-5*250u; *(buf+i)=(g1-*(uith0+ith)*5/v1/s)*v2;
	       for(j=0;j<3;j++)
		      {
		       do{
		           memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);
                   //fseek(fpdat, y*28L, 0); fread(caps, 28, 1, fpdat); 
                   y++;
		         }while((*(caps+0)&0xf0)!=sc);
		      }
	      }
	  }
	 break;
    default:
	 v3=50.;
	 if((seguik+d)->c==1) break;
	 for(i=retur=g2=j=0; i< (int)((seguik+d)->l); i++)
	    {
	     do{
            memcpy(caps, m_DataBuffer+y*28L, sizeof(char)*28);		    
            //fseek(fpdat, y*28L, 0);  fread(caps, 28, 1, fpdat);
		    ic=(PSHORT )(caps+25);     y++;
	       }while((*(caps+0)&0xf0)!=sc);
	     if(((*caps&0xf)==0x8)||((*caps&0xf)==0x9))
	       {
		if((unsigned int)(*ic)==0xffff)
		  { if(!g2)g1=retur;  else g1++; }
		else
		  {
		   g3=(*ic)&0xfff;  v3=g3/256.;
		   if((*ic)&0x80)v3=50-v3;
		   else v3=50+v3;
		   *(buf+retur)=v3;
		   while(!g2){*(buf+g1+g2-1)=v3; g2--;}
		  }
		retur++;
	       }
	    }
	 break;
   }
 free(caps);
 return(retur);
}


/////////////////// readdatpqf ////////////////////////////////////////
int CConvert::readdatpqf(double far *p,double far *q,int pi,int qi,int fi)
{
 int i,kk,g,g1,x,y,xl[6],s=1;
 long j,k,l;
 double far *rui,far *rup,far *ruq,far *o,max,min,far *hua,f,far *hup,far *huq;
 double ppf,qqf,nax,nin;
 double far *va;  double far *vb;  double far *vc;
 double far *ia;  double far *ib;  double far *ic;
 char ci[8];

 va=(double far *)malloc(20000);ia=(double far *)malloc(20000);
 vb=(double far *)malloc(20000);ib=(double far *)malloc(20000);
 vc=(double far *)malloc(20000);ic=(double far *)malloc(20000);
 
 if(pi)j=pi*2000;
 else if(qi)j=qi*2000;
 else j=fi*2000;
 
 dingzhi(j+1,xl+0,va,ci); 
 dingzhi(j+2,xl+1,vb,ci);
 dingzhi(j+3,xl+2,vc,ci);
 dingzhi(j+5,xl+3,ia,ci);
 dingzhi(j+6,xl+4,ib,ci);
 dingzhi(j+7,xl+5,ic,ci);

 if(!(p||q)) goto endf;
 if(pi)o=p;
 else o=q;
 i=j=k=0;
 do{
	rui=o+k;   rup=p+k;  ruq=q+k;
	*(rui+1)=(seguik+i)->t;
    *(rui+2)=(seguik+i)->dt;
    *(rui+3)=(seguik+i)->c;
	if(pi) {*(rup+1)=*(rui+1); *(rup+2)=*(rui+2); *(rup+3)=*(rui+3);}
	if(qi) {*(ruq+1)=*(rui+1); *(ruq+2)=*(rui+2); *(ruq+3)=*(rui+3);}
	g=(seguik+i)->l;
	
    if((seguik+i)->c==1) g=(seguik+i)->l-s;
    else if((seguik+i)->c==2) g=(seguik+i)->l-2;
    else 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;
		rui=o+k;
		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;
			}
		}
	else
     {
	  readdat(va,*(xl+0),i,1,6);
      readdat(vb,*(xl+1),i,1,6);
	  readdat(vc,*(xl+2),i,1,6);
      readdat(ia,*(xl+3),i,1,7);
      readdat(ib,*(xl+4),i,1,7);
	  readdat(ic,*(xl+5),i,1,7);

	  kk=(seguik+i)->l;
	  if(*(rui+3)<1.5)
        {
         for(x=0;x<kk-20;x++)
            {
             abpq(va+x,ia+x,vb+x,ib+x,vc+x,ic+x,&ppf,&qqf);
			 if(pi)*(rup+x+20)=ppf;
             if(qi)*(ruq+x+20)=qqf;
			}
		  if(!k) 
            {
             if(pi) 
               {
		         min= *(rup+20);    max=*(rup+kk-1);
				 for(x=10;x<20;x++) *(rup+x)=min;
				 for(x=kk;x<kk+10-s;x++) *(rup+x)=max;
			   }
		     if(qi)  
               {
			    nin=*(ruq+20);      nax=*(ruq+kk-1);
			    for(x=10;x<20;x++)  *(ruq+x)=nin;
                for(x=kk;x<kk+10-s;x++) *(ruq+x)=nax;
               }
           }
		   else
            {
             if(pi) 
               {
                ppf=(*(rup+20)-max)*.1;
			    for(x=10;x<20;x++)*(rup+x)=max+ppf*(x-10);
				min=*(rup+20);max=*(rup+kk-1);
                for(x=kk;x<kk+10-s;x++)*(rup+x)=max;
               }
             if(qi)  
               {
			    qqf=(*(ruq+20)-nax)*.1;
                for(x=10;x<20;x++)*(ruq+x)=nax+qqf*(x-10);
				nin=*(ruq+20);nax=*(ruq+kk-1);
                for(x=kk;x<kk+10-s;x++)*(ruq+x)=nax;
               }
			}
      }
     else    if(*(rui+3)<2.5)
			{
			for(x=0;x<kk-4;x++)
                                {cdpq(va+x,ia+x,vb+x,ib+x,vc+x,ic+x,&ppf,&qqf);
                                if(pi)*(rup+x+12)=ppf;if(qi)*(ruq+x+12)=qqf;
				}
			if(!k)  {if(pi) {
				min=*(rup+12);max=*(rup+kk+7);
				for(x=10;x<12;x++)*(rup+x)=min;
					}
				if(qi)  {
				nin=*(ruq+12);nax=*(ruq+kk+7);
				for(x=10;x<12;x++)*(ruq+x)=nin;
					}
                                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -