📄 limits.c
字号:
ACptr->VCont=ACptr->Qg; ACptr->Cont=ACptr; if (flagH) x0[ACptr->Gen->Nvar+1]=ACptr->Qg; fCustomPrint(stderr,"***Warning: Generator %d %s has lost Q control\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," due to Eq_%3s limit problems.\n",str); } else if (Elim && Recover && strpbrk(ACptr->cont,"E") && ((ACptr->Gen->Eq==ACptr->Gen->EqMax && ACptr->Qg>=ACptr->VCont) || (ACptr->Gen->Eq==ACptr->Gen->EqMin && ACptr->Qg<=ACptr->VCont)) ){ flag=TRUE; Nvolt--; strcpy(ACptr->cont,"Q"); ACptr->Qg=ACptr->VCont; ACptr->Cont=ACptr; if (flagH) x0[ACptr->Gen->Nvar+1]=ACptr->Gen->Eq; fCustomPrint(stderr,"***Warning: Generator %d %s has recovered\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," Q control as Eq is again within limits.\n"); } else if (strpbrk(ACptr->cont,"V") && ((Ilim && ACptr->Gen->Ia>=ACptr->Gen->IaMax) || (Elim &&(ACptr->Gen->Eq>=ACptr->Gen->EqMax || ACptr->Gen->Eq<=ACptr->Gen->EqMin)))) { fCustomPrint(stderr,"***Error: Generator %d %s it's already at a V limit.\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," Try changing Ia and/or Eq limits.\n"); WriteSolution(0,TrueParamStr(2),"Ia/Eq Limit Problems:"); stopExecute(1); } else if (strpbrk(ACptr->cont,"I") && ((Vlim && (ACptr->V>=ACptr->Vmax || ACptr->V<=ACptr->Vmin)) || (Elim && (ACptr->Gen->Eq>=ACptr->Gen->EqMax || ACptr->Gen->Eq<=ACptr->Gen->EqMin)))) { fCustomPrint(stderr,"***Error: Generator %d %s it's already at an Ia limit.\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," Try changing V and/or Eq limits.\n"); WriteSolution(0,TrueParamStr(2),"V/Eq Limit Problems:"); stopExecute(1); } else if (strpbrk(ACptr->cont,"E") && ((Ilim && ACptr->Gen->Ia>=ACptr->Gen->IaMax) || (Vlim && (ACptr->V>=ACptr->Vmax || ACptr->V<=ACptr->Vmin)))) { fCustomPrint(stderr,"***Error: Generator %d %s it's already at an Eq limit.\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," Try changing V and/or Ia limits.\n"); WriteSolution(0,TrueParamStr(2),"V/Ia Limit Problems:"); stopExecute(1); } } } else if (strpbrk(ACptr->Type,"X")) { if (Xlim && strpbrk(ACptr->cont,"X") && ACptr->V<=ACptr->Vmin) { flag=TRUE; if (ACptr->Cont->Bx[0]>0) { ACptr->Cont->step++; i=ACptr->Cont->step; if (i<=ACptr->Cont->steps) { ACptr->Cont->B=ACptr->Cont->B+ACptr->Cont->Bx[i]; fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s requires a %d st/nd/rd/th\n",ACptr->Num,ACptr->Name,i); fCustomPrint(stderr," increment of %4.0lf MVar due to V_min problems.\n",Sn*ACptr->Cont->Bx[i]); } } else { i=ACptr->Cont->step; if (i>=1) { ACptr->Cont->B=ACptr->Cont->B-ACptr->Cont->Bx[i]; fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s requires a %d st/nd/rd/th\n",ACptr->Num,ACptr->Name,i); fCustomPrint(stderr," reduction of %4.0lf MVar due to V_min problems.\n",-Sn*ACptr->Cont->Bx[i]); ACptr->Cont->step--; } } if (ACptr->Cont->step>ACptr->Cont->steps || ACptr->Cont->step<1) { NXvolt--; strcpy(ACptr->cont,"m"); fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s has run out of \n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," reactance support due to V_min problems.\n"); } } else if (Xlim && strpbrk(ACptr->cont,"X") && ACptr->V>=ACptr->Vmax) { flag=TRUE; if (ACptr->Cont->Bx[0]>0) { i=ACptr->Cont->step; if (i>=1) { ACptr->Cont->B=ACptr->Cont->B-ACptr->Cont->Bx[i]; fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s requires a %d st/nd/rd/th\n",ACptr->Num,ACptr->Name,i); fCustomPrint(stderr," reduction of %4.0lf MVar due to V_max problems.\n",Sn*ACptr->Cont->Bx[i]); ACptr->Cont->step--; } } else { ACptr->Cont->step++; i=ACptr->Cont->step; if (i<=ACptr->Cont->steps) { ACptr->Cont->B=ACptr->Cont->B+ACptr->Cont->Bx[i]; fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s requires a %d st/nd/rd/th\n",ACptr->Num,ACptr->Name,i); fCustomPrint(stderr," increment of %4.0lf MVar due to V_max problems.\n",-Sn*ACptr->Cont->Bx[i]); } } if (ACptr->Cont->step>ACptr->Cont->steps || ACptr->Cont->step<1) { NXvolt--; strcpy(ACptr->cont,"M"); fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s has run out of \n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," reactance support due to V_max problems.\n"); } } else if (Xlim && Recover && strpbrk(ACptr->cont,"M") && ACptr->V<=ACptr->Vmax) { flag=TRUE; NXvolt++; strcpy(ACptr->cont,"X"); fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s has recovered \n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," reactance support as V < V_max.\n"); } else if (Xlim && Recover && strpbrk(ACptr->cont,"m") && ACptr->V>=ACptr->Vmin) { flag=TRUE; NXvolt++; strcpy(ACptr->cont,"X"); fCustomPrint(stderr,"***Warning: Reactance-controlled bus %d %s has recovered \n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," reactance support as V > V_min.\n"); } } } return(flag);}/* -------------------- CheckQlimits ----------------------- */#ifdef ANSIPROTOBOOLEAN CheckQlimits(void)#elseBOOLEAN CheckQlimits()#endif{ ACbusData *ACptr; char str[5],Qmax[5],Qmin[5]; BOOLEAN flag=FALSE,Recover=TRUE,RemoteVlost=FALSE; if(ExistParameter('G')) Recover=FALSE; if (Qlim || Elim || Ilim || Zlim) for(ACptr=dataPtr->ACbus;ACptr!=NULL;ACptr=ACptr->Next) { if (ACptr->flagPgMax==1) { fCustomPrint(stderr,"***Warning: Generating bus %d %s has reached the maximum P/S limit;\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," hence, Pg will be fixed at its max. MW limit -> %lf.\n",ACptr->Pmax*Sn); ACptr->flagPgMax++; } if (ACptr->Qmax==ACptr->Max) strcpy(Qmax,"Qmax"); else strcpy(Qmax,"Smax"); if (ACptr->Qmin==ACptr->Min) strcpy(Qmin,"Qmin"); else strcpy(Qmin,"Smin"); if (QRcont && strpbrk(ACptr->Type,"G")) { if (Qlim && strpbrk(ACptr->cont,"V") && (ACptr->Qg>=ACptr->Max||ACptr->Qg<=ACptr->Min)) { flag=TRUE; Nvolt--; if(ACptr->Qg>=ACptr->Max) {ACptr->Qg=ACptr->Max; strcpy(str,Qmax);} else {ACptr->Qg=ACptr->Min; strcpy(str,Qmin);} strcpy(ACptr->cont,"Q"); fCustomPrint(stderr,"***Warning: Generator %d %s has lost remote voltage control\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," due to %4s problems.\n",str); ACptr->Cont->Kbg--; if (ACptr->Cont->Kbg<1) { RemoteVlost=TRUE; ACptr->Cont->Kbg=-1; ACptr->Cont->Cont=ACptr->Cont; ACptr->Cont->VCont=ACptr->Cont->V; ACptr->Cont->Qr=ACptr->Qg/ACptr->Kbg; if (flagH) x0[ACvar[ACptr->Cont->N]+1]=ACptr->Cont->V; fCustomPrint(stderr,"***Warning: Remote voltage controlled bus %d %s\n",ACptr->Cont->Num,ACptr->Cont->Name); fCustomPrint(stderr," has lost all generator support.\n"); } } else if (Qlim && Recover && strpbrk(ACptr->cont,"Q") && ACptr->Cont->Kbg==0 && ((ACptr->Qg>=ACptr->Max && ACptr->Cont->V>=ACptr->Cont->VCont)|| (ACptr->Qg<=ACptr->Min && ACptr->Cont->V<=ACptr->Cont->VCont)) ) { flag=TRUE; Nvolt++; strcpy(ACptr->cont,"V"); ACptr->Cont->Kbg++; fCustomPrint(stderr,"***Warning: Generator %d %s has recovered\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," remote voltage control as Qg/Sg is again within limits.\n"); if (ACptr->Cont->Kbg==1) { ACptr->Cont->Cont=NULL; ACptr->Cont->V=ACptr->Cont->VCont; ACptr->Cont->Qr=ACptr->Qg/ACptr->Kbg; if (flagH) x0[ACvar[ACptr->Cont->N]+1]=ACptr->Cont->Qr; fCustomPrint(stderr,"***Warning: Remote voltage controlled bus %d %s\n",ACptr->Cont->Num,ACptr->Cont->Name); fCustomPrint(stderr," has recovered generator support.\n"); } } else if (ACptr->Gen!=NULL) { if (Ilim && strpbrk(ACptr->cont,"V") && ACptr->Gen->Ia>=ACptr->Gen->IaMax) { flag=TRUE; Nvolt--; ACptr->Gen->Ia=ACptr->Gen->IaMax; strcpy(ACptr->cont,"I"); if (flagH) x0[ACptr->Gen->Nvar+11]=ACptr->Qg; fCustomPrint(stderr,"***Warning: Generator %d %s has lost remote\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," V control due to Ia_max limit problems.\n"); ACptr->Cont->Kbg--; if (ACptr->Cont->Kbg<1) { ACptr->Cont->Cont=ACptr->Cont; ACptr->Cont->VCont=ACptr->Cont->V; if (flagH) x0[ACvar[ACptr->Cont->N]+1]=ACptr->Cont->V; fCustomPrint(stderr,"***Warning: Remote voltage controlled bus %d %s\n",ACptr->Cont->Num,ACptr->Cont->Name); fCustomPrint(stderr," has lost all generator support.\n"); } } else if (Ilim && Recover && strpbrk(ACptr->cont,"I") && ACptr->Cont->Kbg<1 && ACptr->Gen->Ia==ACptr->Gen->IaMax && ACptr->Cont->V>=ACptr->Cont->VCont) { flag=TRUE; Nvolt++; strcpy(ACptr->cont,"V"); if (flagH) x0[ACptr->Gen->Nvar+11]=ACptr->Gen->Ia; fCustomPrint(stderr,"***Warning: Generator %d %s has recovered\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," remote V control as Ia is again within limits.\n"); ACptr->Cont->Kbg++; if (ACptr->Cont->Kbg==1) { ACptr->Cont->Cont=NULL; ACptr->Cont->V=ACptr->Cont->VCont; if (flagH) x0[ACvar[ACptr->Cont->N]+1]=ACptr->Qg/ACptr->Kbg; fCustomPrint(stderr,"***Warning: Remote voltage controlled bus %d %s\n",ACptr->Cont->Num,ACptr->Cont->Name); fCustomPrint(stderr," has recovered generator support.\n"); } } else if (Elim && strpbrk(ACptr->cont,"V") && (ACptr->Gen->Eq>=ACptr->Gen->EqMax || ACptr->Gen->Eq<=ACptr->Gen->EqMin)) { flag=TRUE; Nvolt--; if (ACptr->Gen->Eq>=ACptr->Gen->EqMax) { ACptr->Gen->Eq=ACptr->Gen->EqMax; strcpy(str,"max"); } else { ACptr->Gen->Eq=ACptr->Gen->EqMin; strcpy(str,"min"); } strcpy(ACptr->cont,"E"); if (flagH) x0[ACptr->Gen->Nvar+1]=ACptr->Qg; fCustomPrint(stderr,"***Warning: Generator %d %s has lost\n",ACptr->Num,ACptr->Name); fCustomPrint(stderr," remote V control due to Eq_%3s limit problems.\n",str); ACptr->Cont->Kbg--; if (ACptr->Cont->Kbg<1) { ACptr->Cont->Cont=ACptr->Cont; ACptr->Cont->VCont=ACptr->Cont->V; if (flagH) x0[ACvar[ACptr->Cont->N]+1]=ACptr->Cont->V; fCustomPrint(stderr,"***Warning: Remote voltage controlled bus %d %s\n",ACptr->Cont->Num,ACptr->Cont->Name); fCustomPrint(stderr," has lost all generator support.\n"); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -