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

📄 readieee.cpp

📁 用于潮流计算的程序请让我下载我需要的吧感谢了啊
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* Read AC data in IEEE common fotmat. */

#include "readdata.h"

/* --------- Global Input File --------- */
extern FILE *InputDataFile;


/* ---------------- ReadIEEE ----------------------------- */
#ifdef ANSIPROTO
void ReadIEEE()
#else
void ReadIEEE()
#endif
/* Read Bus and Element data in WSCC format. */
{
  ACbusData *ACptr,*ACptrp,*ACptrs;
  ElementData *Eptr;
  ElementList *ELptr;
  AreaData *Aptr;
  char Line[75+BUFLEN],Linep[BUFLEN];
  char Name[31],str[6];
  VALUETYPE KV,R,X,Sb;
  BOOLEAN flag=FALSE,card=FALSE,empty=FALSE,flagp=FALSE;
  INDEX i,j,k,NumBusDigits=4,NumAreaDigits=2,CircData=21;

  Line[0]='\0';
  for(i=0;i<=2;strcpy(dataPtr->Title[i],"\n"),i++);
  Sn=100.0;
  RealParameter('$',&Sn,1.0,100000000.0);
  if (!strcmp(NameParameter('I'),"p")) {
          NumBusDigits=5;
          NumAreaDigits=3;
          CircData=23;
  }
  for(;;){ /* Reading Loop */
    if(LineNum && Line[0]!='%')  strcpy(Linep,Line);
    if (fgets(Line,BUFLEN,InputDataFile)==NULL) {
      fCustomPrint(stderr,"***Warning: END OF DATA card missing in IEEE input data file.");
      break;
    }
    LineNum++;
    if(!strncmp(Line,"CARD",4)) card=TRUE;

  /* --------- Comment cards (Electrocon), Sn and Title ----------------- */
    else if(!strncmp(Line,"COMMENT DATA",7)) for(;;){
      if(!flagp) {
        flagp=TRUE;
        GetStr(Linep,39,35,35,dataPtr->Title[0]);
        Sb=GetValue(Linep,32,6,0);
        if(Sb>0) Sn=Sb;
      }
      if (fgets(Line,BUFLEN,InputDataFile)==NULL) {
        ErrorHalt("Missing $$$ card in COMMENT DATA.");
        break;
      }
      LineNum++;
      if(!strncmp(Line,"$$$",3)) break;
    }

  /* -------------------- AC bus data, Sn and Title --------------------- */
    else if(!strncmp(Line,"BUS DATA",3)) for(;;){
      if(!flagp) {
        flagp=TRUE;
        GetStr(Linep,46,28,28,dataPtr->Title[0]);
        Sb=GetValue(Linep,32,6,0);
        if(Sb>0) Sn=Sb;
      }
      BusData:
      if (fgets(Line,BUFLEN,InputDataFile)==NULL) {
        ErrorHalt("Missing -999 card in BUS DATA.");
        break;
      }
      LineNum++;
      if(Line[0]=='%') goto BusData;
      if(!strncmp(Line,"-999",4)) break;
      if (card) {
        if (fgets(Linep,BUFLEN,InputDataFile)==NULL){
          ErrorHalt("Missing -999 card in BUS DATA.");
          break;
        }
        LineNum++;
        for(i=strlen(Line)-1;i<=74;Line[i]=' ',i++);
        Line[75]='\0';
        strcat(Line,Linep);
      }
      i=GetInt(Line,25,2);
      if (i!=4) {
        i=GetInt(Line,1,NumBusDigits);
        GetStr(Line,6,12,12,Name);
        KV=GetValue(Line,77,7,2);
        for (j=0;j<=11;j++) {
          if (Name[j]!=' ') break;
          if (j==11) empty=TRUE;
        }
        if (empty||(strpbrk(Name,"0")&&strlen(Name)==1)) {
          empty=FALSE;
          strcpy(Name,"BUS_");
          GetStr(Line,1,5,5,str);
          for(j=0;j<=3;j++) if(str[j]!=' ') break;
          strcat(Name,&str[j]);
          for(j=strlen(Name);j<=11;Name[j]=' ',j++);
          Name[12]='\0';
        }
        ACptr=(ACbusData *) ACbusInList(i,Name,KV,Nac,0);
        if (ACptr->N==0) { Nac++; ACptr->Num=i; ACptr->N=Nac;}
        i=GetInt(Line,19,2);
        if (i) {
          ACptr->Area=(AreaData *) AreaInList(i,"",Narea);
          if (ACptr->Area->N==0) {Narea++; ACptr->Area->N=i;}
        }
        GetStr(Line,21,3,3,ACptr->Zone);
        i=GetInt(Line,25,2);
        ACptr->V=GetValue(Line,28,6,4);
        if (ACptr->V<=0) ACptr->V=1;
        ACptr->Ang=GetValue(Line,34,7,2)*K3;
        ACptr->Pl=GetValue(Line,41,9,2)/Sn;
        ACptr->Ql=GetValue(Line,50,9,2)/Sn;
        ACptr->Pg=GetValue(Line,59,9,2)/Sn;
        ACptr->Qg=GetValue(Line,68,8,2)/Sn;
        KV=GetValue(Line,85,6,4);
        ACptr->G=GetValue(Line,107,8,4);
        ACptr->B=GetValue(Line,115,8,4);
        if (i==0 && strcmp(ACptr->Type,"BC")) ACptr->Cont=ACptr;
        else if (i==1) {
          strcpy(ACptr->Type,"BV");
          strcpy(ACptr->cont,"Q");
          ACptr->VCont=ACptr->Qg;
          ACptr->Vmax=GetValue(Line,91,8,2);
          if (ACptr->Vmax<=0) ACptr->Vmax=10.;
          ACptr->Vmin=GetValue(Line,99,8,2);
          if (ACptr->Vmin<=0) ACptr->Vmin=0.001;
          if (ACptr->Vmax<=ACptr->Vmin) {
            fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
            ErrorHalt("AC bus V limits are wrong: Vmin >= Vmax.");
          }
          ACptr->Cont=ACptr;
          ACptr->Qmax=99999999.;
          ACptr->Qmin= -99999999.;
        }
        else if (i==2 || i==3) {
          if (ExistParameter('g')) ACptr->Qg=0;
          ACptr->Qmax=GetValue(Line,91,8,2)/Sn;
          ACptr->Qmin=GetValue(Line,99,8,2)/Sn;
          if (ACptr->Qmax<ACptr->Qmin) {
            fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
            ErrorHalt("AC bus Q limits are wrong: Qmin > Qmax.");
          }
          /*if (ACptr->Qmax==ACptr->Qmin && ACptr->Qmax==0.) {
            ACptr->Qmax=9999999.;
            ACptr->Qmin= -999999.;
          }*/
          if (ACptr->Qmax==ACptr->Qmin) ACptr->Cont=ACptr;
          else {
            Nvolt++;
            ACptr->val=GetValue(Line,85,6,4);
            if (ACptr->val<=0) ACptr->val=1;
            j=GetInt(Line,124,NumBusDigits);
            if (j>0 && j!=ACptr->Num) {
              ACptr->Nc=j;
              strcpy(ACptr->Type,"BG");
              strcpy(ACptr->cont,"V");
              ACptr->Kbg=1;
              ACptr->VCont=ACptr->val;
            }
            else {
              strcpy(ACptr->Type,"BQ");
              strcpy(ACptr->cont,"V");
              ACptr->VCont=ACptr->V=ACptr->val;
            }
          } 
          if (i==3) {
            Nslack++;
            strcat(ACptr->Type,"S");
            if(ACptr->Area!=NULL) {
              ACptr->Area->i++;
              if (ACptr->Area->i>1) {
                if (card) LineNum--;
                fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
                ErrorHalt("The Area has more than one slack bus.");
              }
            }
          }
        }
      } 
    }

  /* -------------------- AC elemet data ------------------------- */
    else if(!strncmp(Line,"BRANCH DATA",6)) for(;;){
      BranchData:
      if (fgets(Line,BUFLEN,InputDataFile)==NULL) {
        ErrorHalt("Missing -999 card in BRANCH DATA.");
        break;
      }
      LineNum++;
      if(Line[0]=='%') goto BranchData;
	  if(!strcmp(NameParameter('I'),"p") && Line[strlen(Line)-2]=='0') goto BranchData;      
	  if(!strncmp(Line,"-999",4)) break;
      k=GetInt(Line,19,1);
      if (card && k) {
        if (fgets(Linep,BUFLEN,InputDataFile)==NULL){
          ErrorHalt("Missing -999 card in BRANCH DATA.");
          break;
        }
        LineNum++;
        for(i=strlen(Line)-1;i<=74;Line[i]=' ',i++);
        Line[75]='\0';
        strcat(Line,Linep);
      }
      i=GetInt(Line,1,NumBusDigits);
      ACptr=(ACbusData *) ACbusInList(i,"",0.,Nac,1);
      if (ACptr->N==0) {
        if (card) LineNum--;
        fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
        ErrorHalt("The tap bus has not been defined (check BUS DATA cards).");
      }
      j=GetInt(Line,6,NumBusDigits);
      ACptrp=(ACbusData *) ACbusInList(j,"",0.,Nac,1);
      if (ACptrp->N==0) {
        if (card) LineNum--;
        fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
        ErrorHalt("The Z bus has not been defined (check BUS DATA cards).");
      }
      Eptr=(ElementData *) ElemInList(ACptr,ACptrp,NacEl++,0,"","");
      R=GetValue(Line,20,10,6);
      X=GetValue(Line,30,10,6);
      if (fabs(R)<0.0000001 && fabs(X)<0.0000001) {
        fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
        ErrorHalt("AC element is a short circuit. Try eliminating it.");
      } else {
        Eptr->G= R/(R*R+X*X);
        Eptr->B= -X/(R*R+X*X);
      }
      Eptr->B1=Eptr->B2=GetValue(Line,41,9,5)/2;
      Eptr->Imax=GetInt(Line,51,5)/Sn;
      i=GetInt(Line,11,2);
      if (i) {
        Eptr->Area=(AreaData *) AreaInList(i,"",Narea);
        if (Eptr->Area->N==0) {
          if (card) LineNum--;
          fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
          ErrorHalt("The Area has not been defined (check BUS DATA cards).");
        }
      }
      GetStr(Line,13,3,3,Eptr->Zone);
      GetStr(Line,17,1,1,Eptr->Ckt);
      if (k==0) strcpy(Eptr->Type,"L");
      else if (k>=1) {
        Eptr->Tap=1/GetValue(Line,77,6,4);
        Eptr->Ang=GetValue(Line,84,7,2)*K3;
        j=GetInt(Line,69,NumBusDigits);
        if (j>0) {
          ACptrs=(ACbusData *) ACbusInList(j,"",0.,Nac,1);
          if (ACptrs->N==0) {
            fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
            ErrorHalt("The controlled bus has not been defined (check BUS DATA cards).");
          }
        } else ACptrs=ACptr;
        if(k==1) strcpy(Eptr->Type,"T");
        else if(k==2) {
          Eptr->Tmin=GetValue(Line,91,7,2);
          Eptr->Tmax=GetValue(Line,98,7,2);
          if(Eptr->Tmax<0) Eptr->Tmax=1.1;
          if(Eptr->Tmin<0) Eptr->Tmin=0.9;
          if(Eptr->Tmax<Eptr->Tmin) {
            fCustomPrint(stderr,"Input Line-> %d\n%s",LineNum,Line);
            ErrorHalt("LTC limits are wrong: Tmin > Tmax.");

⌨️ 快捷键说明

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