📄 update.cpp
字号:
ACptrp=ACptr->ContBus->AC;
if (j==0) ACptr->val=ACptr->V;
ACptr->val=ACptr->val+cons*dx[k+1];
if (ACptr->val<=0) ACptr->V=0.00001;
else if (strpbrk(ACptrp->cont,"Q")) {
if (Recover && ACptrp->Qg>=ACptrp->Max && ACptr->val>ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
else if (Recover && ACptrp->Qg<=ACptrp->Min && ACptr->val<ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
else ACptr->V=ACptr->val;
}
else if (strpbrk(ACptrp->cont,"E")) {
if (Recover && ACptrp->Gen->Eq>=ACptrp->Gen->EqMax && ACptr->val>ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
else if (Recover && ACptrp->Gen->Eq<=ACptrp->Gen->EqMin && ACptr->val<ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
else ACptr->V=ACptr->val;
}
else if (strpbrk(ACptrp->cont,"I")) {
if (Recover && ACptrp->Gen->Ia>=ACptrp->Gen->IaMax && ACptr->val>ACptr->VCont && Limits) ACptr->V=ACptr->VCont;
else ACptr->V=ACptr->val;
}
else ACptr->V=ACptr->val;
}
else
ACptr->Qr=ACptr->Qr+cons*dx[k+1];
}
else if (strpbrk(ACptr->Type,"R")) {
k=ACvar[ACptr->N];
ACptr->Ang=ACptr->Ang+cons*dx[k];
if (j==0) ACptr->val=ACptr->V;
ACptr->val=ACptr->val+cons*dx[k+1];
if (Rcont && ACptr->val>ACptr->Vmax && Limits) ACptr->V=ACptr->Vmax;
else if (Rcont && ACptr->val<ACptr->Vmin && Limits) ACptr->V=ACptr->Vmin;
else if (ACptr->val<=0) ACptr->V=0.00001;
else ACptr->V=ACptr->val;
}
else if (strpbrk(ACptr->Type,"T")){
k=ACvar[ACptr->N];
ACptr->Ang=ACptr->Ang+cons*dx[k];
if (Rcont) {
for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next){
Eptr=ELptr->Eptr;
if (!strcmp(Eptr->Type,"R")) {
if (j==0) Eptr->val=Eptr->Tap;
Eptr->val=Eptr->val+cons*dx[k+1];
if (Tlim && Eptr->val<1/Eptr->Tmax+0.00001 && Limits) Eptr->Tap=1/Eptr->Tmax;
else if (Tlim && Eptr->val>1/Eptr->Tmin-0.00001 && Limits) Eptr->Tap=1/Eptr->Tmin;
else Eptr->Tap=Eptr->val;
}
}
} else {
if (j==0) ACptr->val=ACptr->V;
ACptr->val=ACptr->val+cons*dx[k+1];
if (ACptr->val<=0) ACptr->V=0.00001;
else ACptr->V=ACptr->val;
}
}
if (PQcont) for(ELptr=ACptr->Reg;ELptr!=NULL;ELptr=ELptr->Next) {
Eptr=ELptr->Eptr;
if(strpbrk(Eptr->Type,"PQMN")) {
k=ACvar[ACptr->N]+1;
if(Acont && strpbrk(ACptr->Type,"A")) k=k+1;
k=k+Eptr->Cont->Ncont-Eptr->Ncont;
if (!strcmp(Eptr->Type,"RP")) {
if (j==0) Eptr->val=Eptr->Ang;
Eptr->val=Eptr->val+cons*dx[k];
if (Tlim && Eptr->val>Eptr->Tmax && Limits) Eptr->Ang=Eptr->Tmax;
else if (Tlim && Eptr->val<Eptr->Tmin && Limits) Eptr->Ang=Eptr->Tmin;
else Eptr->Ang=Eptr->val;
}
else if (!strcmp(Eptr->Type,"RQ")) {
if (j==0) Eptr->val=Eptr->Tap;
Eptr->val=Eptr->val+cons*dx[k];
if (Tlim && Eptr->val<1/Eptr->Tmax+0.00001 && Limits) Eptr->Tap=1/Eptr->Tmax;
else if (Tlim && Eptr->val>1/Eptr->Tmin-0.00001 && Limits) Eptr->Tap=1/Eptr->Tmin;
else Eptr->Tap=Eptr->val;
}
else if (strpbrk(Eptr->Type,"MN")) {
if (j==0) Eptr->val=Eptr->Cvar;
Eptr->val=Eptr->val+cons*dx[k];
if (PQlim && Eptr->val>Eptr->Max && Limits) Eptr->Cvar=Eptr->Max;
else if (PQlim && Eptr->val<Eptr->Min && Limits) Eptr->Cvar=Eptr->Min;
else Eptr->Cvar=Eptr->val;
}
else Eptr->Cvar=Eptr->Cvar+cons*dx[k];
}
}
if (ACptr->Gen!=NULL) {
k=ACptr->Gen->Nvar;
if (!strpbrk(ACptr->cont,"E")) {
if (j==0) ACptr->vals=ACptr->Gen->Eq;
ACptr->vals=ACptr->vals+cons*dx[k+1];
if (Elim && ACptr->vals>ACptr->Gen->EqMax && Limits) ACptr->Gen->Eq=ACptr->Gen->EqMax;
else if (Elim && ACptr->vals<ACptr->Gen->EqMin && Limits) ACptr->Gen->Eq=ACptr->Gen->EqMin;
else if (ACptr->vals<=0) ACptr->Gen->Eq=0.00001;
else ACptr->Gen->Eq=ACptr->vals;
}
else {
if (j==0) ACptr->vals=ACptr->Qg;
ACptr->vals=ACptr->vals+cons*dx[k+1];
if (strpbrk(ACptr->Type,"V")) {
if (Recover && ACptr->Gen->Eq>=ACptr->Gen->EqMax && ACptr->vals>ACptr->VCont && Limits) ACptr->Qg=ACptr->VCont;
else if (Recover && ACptr->Gen->Eq<=ACptr->Gen->EqMin && ACptr->vals<ACptr->VCont && Limits) ACptr->Qg=ACptr->VCont;
else ACptr->Qg=ACptr->vals;
}
else {
if (Qlim && ACptr->vals>ACptr->Max && Limits) ACptr->Qg=ACptr->Max;
else if (Qlim && ACptr->vals<ACptr->Min && Limits) ACptr->Qg=ACptr->Min;
else ACptr->Qg=ACptr->vals;
}
}
ACptr->Gen->dg=ACptr->Gen->dg+cons*dx[k+2];
ACptr->Gen->Vr=ACptr->Gen->Vr+cons*dx[k+3];
ACptr->Gen->Vi=ACptr->Gen->Vi+cons*dx[k+4];
ACptr->Gen->Ir=ACptr->Gen->Ir+cons*dx[k+5];
ACptr->Gen->Ii=ACptr->Gen->Ii+cons*dx[k+6];
ACptr->Gen->Vq=ACptr->Gen->Vq+cons*dx[k+7];
ACptr->Gen->Vd=ACptr->Gen->Vd+cons*dx[k+8];
ACptr->Gen->Iq=ACptr->Gen->Iq+cons*dx[k+9];
ACptr->Gen->Id=ACptr->Gen->Id+cons*dx[k+10];
if (!strpbrk(ACptr->cont,"I")) {
if (j==0) ACptr->valt=ACptr->Gen->Ia;
ACptr->valt=ACptr->valt+cons*dx[k+11];
if (Ilim && ACptr->valt>ACptr->Gen->IaMax && Limits) ACptr->Gen->Ia=ACptr->Gen->IaMax;
else if (ACptr->valt<=0) ACptr->Gen->Ia=0.00001;
else ACptr->Gen->Ia=ACptr->valt;
}
else {
if (j==0) ACptr->valt=ACptr->Qg;
ACptr->valt=ACptr->valt+cons*dx[k+11];
if (strpbrk(ACptr->Type,"V")) {
if (Recover && ACptr->Gen->Ia>=ACptr->Gen->IaMax && ACptr->valt>ACptr->VCont && Limits) ACptr->Qg=ACptr->VCont;
else ACptr->Qg=ACptr->valt;
}
else {
if (Qlim && ACptr->valt>ACptr->Max && Limits) ACptr->Qg=ACptr->Max;
else if (Qlim && ACptr->valt<ACptr->Min && Limits) ACptr->Qg=ACptr->Min;
else ACptr->Qg=ACptr->valt;
}
}
}
}
for (ACptr=dataPtr->ACbus; ACptr!=NULL; ACptr=ACptr->Next) {
if (QRcont && strpbrk(ACptr->Type,"G") && strpbrk(ACptr->cont,"V")){
k=ACvar[ACptr->Cont->N];
if (ACptr->Cont->Qr>=0) ACptr->Kbg=ACptr->Kbg1;
else ACptr->Kbg=ACptr->Kbg2;
ACptr->valp=ACptr->Kbg*ACptr->Cont->Qr;
if (Qlim && ACptr->valp>ACptr->Max && Limits) ACptr->Qg=ACptr->Max;
else if (Qlim && ACptr->valp<ACptr->Min && Limits) ACptr->Qg=ACptr->Min;
else ACptr->Qg=ACptr->valp;
}
}
if (flagH && !Bl) lambda=lambda+cons*dx[Jac->n1];
}
/* -----------------UpdateDCvar ---------------------------- */
#ifdef ANSIPROTO
void UpdateDCvar(VALUETYPE cons,INDEX j,BOOLEAN Limits)
#else
void UpdateDCvar(cons,j,Limits)
VALUETYPE cons;
INDEX j;
BOOLEAN Limits;
#endif
{
DCbusData *DCptrR,*DCptrI,*DCptr;
INDEX i,k,m;
k=NacVar;
for (DCptrR=dataPtr->DCbus;DCptrR!=NULL;DCptrR=DCptrR->Next){
DCptrI=DCptrR->To;
if (!strcmp(DCptrR->Type,"R")){
for (m=1;m<=2;m++) {
i= -1;
if(m==1) DCptr=DCptrR;
else DCptr=DCptrI;
if (strcmp(DCptr->Cont1,"VD") && strcmp(DCptr->Cont2,"VD")){
i++;
if (j==0) DCptr->val[i]=DCptr->Vd;
DCptr->val[i]=DCptr->val[i]+cons*dx[++k];
if (DCptr->VdN && ((DCptr->Tap>=DCptr->TapMax && DCptr->val[i]>DCptr->VdN)||
(DCptr->Tap<=DCptr->TapMin && DCptr->val[i]<DCptr->VdN) ||
(strpbrk(DCptr->Cont1,"IP")&&DCptr->Tap>DCptr->TapMin&&DCptr->val[i]>DCptr->VdN)))
DCptr->Vd=DCptr->VdN;
else DCptr->Vd=DCptr->val[i];}
if (strcmp(DCptr->Cont1,"AT") && strcmp(DCptr->Cont2,"AT")){
i++;
if (j==0) DCptr->val[i]=DCptr->Tap;
DCptr->val[i]=DCptr->val[i]+cons*dx[++k]/DCptr->Ntrf;
if (DCptr->val[i]>DCptr->TapMax && Limits) DCptr->Tap=DCptr->TapMax;
else if (DCptr->val[i]<DCptr->TapMin && Limits) DCptr->Tap=DCptr->TapMin;
else DCptr->Tap=DCptr->val[i];}
if (strcmp(DCptr->Cont1,"AL") && strcmp(DCptr->Cont2,"AL")){
i++;
if (j==0) DCptr->val[i]=cos(DCptr->Alfa);
DCptr->val[i]=DCptr->val[i]+cons*dx[++k];
if (DCptr->val[i]<cos(DCptr->AlfaMax)) DCptr->Alfa=DCptr->AlfaMax;
else if (DCptr->val[i]>cos(DCptr->AlfaMin)) DCptr->Alfa=DCptr->AlfaMin;
else if (DCptr->AlfaN && ((DCptr->Tap>=DCptr->TapMax && DCptr->val[i]<cos(DCptr->AlfaN))||
(DCptr->Tap<=DCptr->TapMin && DCptr->val[i]>cos(DCptr->AlfaN)))) DCptr->Alfa=DCptr->AlfaN;
else DCptr->Alfa=acos(DCptr->val[i]);}
if (strcmp(DCptr->Cont1,"GA") && strcmp(DCptr->Cont2,"GA")){
i++;
if (j==0) DCptr->val[i]=cos(DCptr->Gamma);
DCptr->val[i]=DCptr->val[i]+cons*dx[++k];
if (fabs(DCptr->val[i])>cos(DCptr->GammaMin)) DCptr->Gamma=DCptr->GammaMin;
else DCptr->Gamma=acos(DCptr->val[i]);}
DCptr->MVA=DCptr->MVA+cons*dx[++k];
if (strcmp(DCptr->Cont1,"PA") && strcmp(DCptr->Cont2,"PA"))
DCptr->P=DCptr->P+cons*dx[++k];
if (strcmp(DCptr->Cont1,"QA") && strcmp(DCptr->Cont2,"QA"))
DCptr->Q=DCptr->Q+cons*dx[++k];
}
if (strcmp(DCptrR->Cont1,"ID") && strcmp(DCptrR->Cont2,"ID") &&
strcmp(DCptrI->Cont1,"ID") && strcmp(DCptrI->Cont2,"ID"))
DCptrI->Id=DCptrR->Id=DCptrR->Id+cons*dx[++k];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -