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

📄 readieee.cpp

📁 用于电力系统潮流计算 c++程序
💻 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;

  Line[0]='\0';
  for(i=0;i<=2;strcpy(dataPtr->Title[i],"\n"),i++);
  Sn=100.0;
  RealParameter('$',&Sn,1.0,100000000.0);
  for(;;){ /* Reading Loop */
    if(LineNum && Line[0]!='%')  strcpy(Linep,Line);
    if (fgets(Line,BUFLEN,InputDataFile)==NULL) {
      fprintf(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,1,4);
      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,4,4,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) {
          fprintf(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) {
          fprintf(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,4);
          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--;
              fprintf(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(!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,4);
      ACptr=(ACbusData *) ACbusInList(i,"",0.,Nac,1);
      if (ACptr->N==0) {
        if (card) LineNum--;
        fprintf(stderr,"Input Line-> %d\n%s",LineNum,Line);
        ErrorHalt("The tap bus has not been defined (check BUS DATA cards).");
      }
      j=GetInt(Line,6,4);
      ACptrp=(ACbusData *) ACbusInList(j,"",0.,Nac,1);
      if (ACptrp->N==0) {
        if (card) LineNum--;
        fprintf(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) {
        fprintf(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--;
          fprintf(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,4);
        if (j>0) {
          ACptrs=(ACbusData *) ACbusInList(j,"",0.,Nac,1);
          if (ACptrs->N==0) {
            fprintf(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) {
            fprintf(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 + -