📄 tefacdc.cpp
字号:
}
}
countp++;
}
if (countp<4 && flagPrintTotalPl) {
if (countp==0) fprintf(Out,"'L MW_{TOTAL}'");
else fprintf(Out,",'L MW_{TOTAL}'");
countp++;
}
if (countp<4 && flagPrintTotalQl) {
if (countp==0) fprintf(Out,"'L MVar_{TOTAL}'");
else fprintf(Out,",'L MVar_{TOTAL}'");
countp++;
}
if (countp<4 && flagPrintTotalPg) {
if (countp==0) fprintf(Out,"'G MW_{TOTAL}'");
else fprintf(Out,",'G MW_{TOTAL}'");
countp++;
}
if (countp<4 && flagPrintTotalQg) {
if (countp==0) fprintf(Out,"'G MVar_{TOTAL}'");
else fprintf(Out,",'G MVar_{TOTAL}'");
countp++;
}
fprintf(Out,");\n");
for(count=i=0,Lptr=Vlist;Lptr!=NULL;Lptr=Lptr->Next) {
count++;
if (Lptr->AC!=NULL) {
if (!strcmp(Lptr->Type,"V") && Lptr->AC->Vlmax>Lptr->AC->Vlmin) {
KV=Lptr->AC->KV;
if (KV<=0) KV=1;
if (i==0) {
fprintf(Out,"hold;\nlmax=max(K*x(:,1)); lmin=min(K*x(:,1));\n");
i=1;
}
fprintf(Out,"plot([lmin lmax],[%5.1lf %5.1lf],':'); ",KV*Lptr->AC->Vlmax,KV*Lptr->AC->Vlmax);
fprintf(Out,"plot([lmin lmax],[%5.1lf %5.1lf],':');\n",KV*Lptr->AC->Vlmin,KV*Lptr->AC->Vlmin);
}
if (ExistParameter('e') && Lptr->AC->Gen!=NULL) count=count+3;
}
}
fprintf(Out,"title('Profiles'); xlabel('L.F. [p.u.]'); \n");
if (ExistParameter('O')) {
fprintf(Out,"%c Define variables for AC/DC TEF profiles:\n",'%');
fprintf(Out,"L=x(:,1); Vac=x(:,%1d);\n",count+2);
for (count+=2,i=0,DCptr=dataPtr->DCbus;DCptr!=NULL;DCptr=DCptr->Next) if(!strcmp(DCptr->Type,"R")) {
i++; DCptrp=DCptr->To;
if (i==1) fprintf(Out,"k=input('V=Vac+k*Vdc -> k=');\n");
for(l=1,Lptr=Vlist;Lptr!=NULL;Lptr=Lptr->Next) if (Lptr->AC!=NULL) {
if (Lptr->AC==DCptr->AC && !strcmp(Lptr->Type,"V")) j=l;
if (Lptr->AC==DCptrp->AC && !strcmp(Lptr->Type,"V")) k=l;
if (Lptr->AC==DCptr->AC && !strcmp(Lptr->Type,"D")) js=l;
if (Lptr->AC==DCptrp->AC && !strcmp(Lptr->Type,"D")) ks=l;
l++;
}
fprintf(Out,"Xc=[%lf %lf];\n",DCptr->Xc,DCptrp->Xc);
fprintf(Out,"V=[x(:,%1d) x(:,%1d)];\n",j+1,k+1);
fprintf(Out,"di=[x(:,%1d) x(:,%1d)];\n",js+1,ks+1);
fprintf(Out,"a=[x(:,%1d) x(:,%1d)];\n",count,count+3);
fprintf(Out,"b=[x(:,%1d) x(:,%1d)];\n",count+1,count+4);
fprintf(Out,"d=[x(:,%1d) x(:,%1d)];\n",count+2,count+5);
k1=3*sqrt(2.0)/PI/DCptr->Ld*DCptr->AC->V*DCptr->Tap*DCptr->Ntrf;
k2=(3/PI*(DCptr->Xc-DCptrp->Xc)+DCptr->Rd)/DCptr->Ld;
/* if (ExistParameter('O')) {
printf("Input DC bus %8s PI controller gains:\n",DCptr->Name);
for(;;) {
printf(" Ki=");
if (!scanf("%lf",&ki) || ki<=0) printf("Error in input data. Try again.\n");
else break;
}
for(;;) {
printf(" Kp=");
if (!scanf("%lf",&kp) || kp<=0) printf("Error in input data. Try again.\n");
else break;
}
} else */{ki=75.; kp=1.;}
ki=ki*Sn/DCptr->Vn;
kp=kp*Sn/DCptr->Vn;
P22=0.5*(ki+k1)/(k1*(k1*kp+k2));
if (ki) {
P11=0.5/ki*((ki+k1)/(k1*kp+k2)+(k1*kp+k2)/k1);
P12= -0.5/k1;
}
k1=3*sqrt(2.0)/PI/DCptrp->Ld*DCptrp->AC->V*DCptrp->Tap*DCptrp->Ntrf;
/* if (ExistParameter('O')) {
printf("Input DC bus %8s PI controller gains:\n",DCptr->Name);
for(;;) {
printf(" Ki=");
if (!scanf("%lf",&ki) || ki<=0) printf("Error in input data. Try again.\n");
else break;
}
for(;;) {
printf(" Kp=");
if (!scanf("%lf",&kp) || kp<=0) printf("Error in input data. Try again.\n");
else break;
}
} else */ {ki=75.; kp=1.;}
ki=ki*Sn/DCptr->Vn;
kp=kp*Sn/DCptr->Vn;
Beta=P22/(0.5*(ki+k1)/(k1*(k1*kp+k2)));
if (ExistParameter('d')) fprintf(stderr,"Beta=%lf\n",Beta);
if (ki) {
P33=Beta*0.5/ki*((ki+k1)/(k1*kp+k2)+(k1*kp+k2)/k1);
P23=Beta*0.5/k1;
}
fprintf(Out,"P=[%lf %lf %lf\n",P11,P12,0.);
fprintf(Out," %lf %lf %lf\n",P12,P22,P23);
fprintf(Out," %lf %lf %lf];\n",0.,P23,P33);
fprintf(Out,"[Vac,Vdc%d]=addtotef(L,di,a,b,d,V,Vac,P,Xc);\n",i);
if (i==1) fprintf(Out,"Vdc=Vdc%1d;\n",i);
else fprintf(Out,"Vdc=Vdc+Vdc%1d;\n",i);
count+=6;
}
if (i) fprintf(Out,"[lambda,TEF]=tefprof(L,Vac+k*Vdc);\n",'%');
else fprintf(Out,"[lambda,TEF]=tefprof(L,Vac);\n",'%');
}
fclose(Out);
}
/* --------------------------- TEFMatlabFiles --------------------------------- */
#ifdef ANSIPROTO
void TEFMatlabFiles(void)
#else
void TEFMatlabFiles()
#endif
/* Create the Matlab .m files needed to compute the TEF profiles. */
{
FILE *Out;
/* ---------------- Create 'tefprof.m' file needed for Matlab computations --------------- */
if (ExistParameter('O')) {
Out=OpenOutput("tefprof.m");
fprintf(Out,"function [L1,V3]=tefprof(L,V)\n");
fprintf(Out,"%c\n",'%');
fprintf(Out,"%c Plot TEF profiles using linear interpolation.\n",'%');
fprintf(Out,"%c\n",'%');
fprintf(Out,"[m,n]=max(L);\n");
fprintf(Out,"l=length(L);\n");
fprintf(Out,"L1=L(1:n);\n");
fprintf(Out,"V1=V(1:n);\n");
fprintf(Out,"L2=L(n:l);\n");
fprintf(Out,"V2=V(n:l);\n");
fprintf(Out,"L3(1)=L2(1);\n");
fprintf(Out,"V3(1)=V2(1);\n");
fprintf(Out,"J=1;\n");
fprintf(Out,"for I=2:length(L2)\n");
fprintf(Out," if(L2(I)<L2(I-1)),\n");
fprintf(Out," J=J+1;\n");
fprintf(Out," L3(J)=L2(I);\n");
fprintf(Out," V3(J)=V2(I);\n");
fprintf(Out," end\n");
fprintf(Out,"end\n");
fprintf(Out,"L2=L3';\n");
fprintf(Out,"V2=V3';\n");
fprintf(Out,"L3=flipud(L2);\n");
fprintf(Out,"if (L3(1)>0), L3(1)=0; end\n");
fprintf(Out,"V3=flipud(V2);\n");
fprintf(Out,"V3=abs(interp1(L3,V3,L1)-V1);\n");
fprintf(Out,"figure;\n");
fprintf(Out,"plot(L1,V3); \n");
fprintf(Out,"title('TEF profile'); xlabel('L.F. [p.u.]'); ylabel('TEF [p.u.]');\n");
fclose(Out);
/* ---------------- Create 'addtotef.m' file needed for Matlab computations --------------- */
if (dataPtr->DCbus!=NULL){
Out=OpenOutput("addtotef.m");
fprintf(Out,"function [Vac,Vdc]=addtotef(L,di,a,b,d,V,Vac,P,Xc)\n");
fprintf(Out,"%c\n",'%');
fprintf(Out,"%c Add coupling Qdc terms to AC Vac.\n",'%');
fprintf(Out,"%c\n",'%');
fprintf(Out,"\n");
fprintf(Out,"x=b(:,1)./sqrt(d(:,1)); %c cosar\n");
fprintf(Out,"x=[x sqrt(-a(:,1))./Xc(1)]; %c Id\n");
fprintf(Out,"x=[x b(:,2)./sqrt(d(:,2))]; %c cosgi\n");
fprintf(Out,"\n");
fprintf(Out,"c=d(:,1)./(4.*Xc(1).^2.*x(:,2).^2).*(ones(d(:,1))-x(:,1).^2);\n");
fprintf(Out,"c=[c d(:,2)./(4.*Xc(2).^2.*x(:,2).^2).*(ones(d(:,2))-x(:,3).^2)];\n");
fprintf(Out,"\n");
fprintf(Out,"\n");
fprintf(Out,"[m,n]=max(L);\n");
fprintf(Out,"l=length(L);\n");
fprintf(Out,"Vdc=zeros(l,1);\n");
fprintf(Out,"L1=L(1:n);\n");
fprintf(Out,"di1=di(1:n,:);\n");
fprintf(Out,"V1=V(1:n,:);\n");
fprintf(Out,"x1=x(1:n,:);\n");
fprintf(Out,"L2=L(n:l);\n");
fprintf(Out,"di2=di(n:l,:);\n");
fprintf(Out,"a2=a(n:l,:);\n");
fprintf(Out,"b2=b(n:l,:);\n");
fprintf(Out,"c2=c(n:l,:);\n");
fprintf(Out,"d2=d(n:l,:);\n");
fprintf(Out,"V2=V(n:l,:);\n");
fprintf(Out,"x2=x(n:l,:);\n");
fprintf(Out,"cons=pi/180;\n");
fprintf(Out,"for I=1:length(L2),\n");
fprintf(Out," N=n+I-1;\n");
fprintf(Out," X=L2(I);\n");
fprintf(Out," for J=2:length(L1),\n");
fprintf(Out," X1=L1(J-1); X2=L1(J);\n");
fprintf(Out," if (X>=X1).*(X<=X2),\n");
fprintf(Out," for K=1:2,\n");
fprintf(Out," Id=x2(I,2);\n");
fprintf(Out," if (K==1), cosag=x2(I,1); s=1;\n");
fprintf(Out," else cosag=x2(I,3); s=-1; end;\n");
fprintf(Out," a=a2(I,K);\n");
fprintf(Out," b=b2(I,K);\n");
fprintf(Out," c=c2(I,K);\n");
fprintf(Out," d=d2(I,K);\n");
fprintf(Out," V=V2(I,K);\n");
fprintf(Out," di=cons*di2(I,K);\n");
fprintf(Out," t=sqrt(-d/8/a);\n");
fprintf(Out," Vd=3*sqrt(2.0)/pi*t*V*cosag-3/pi*sqrt(-a);\n");
fprintf(Out," Pi=-s*Vd*Id;\n");
fprintf(Out," Y1=V1(J-1,K); Y2=V1(J,K);\n");
fprintf(Out," m=(Y1-Y2)/(X1-X2);\n");
fprintf(Out," p=Y1-m*X1;\n");
fprintf(Out," V0=m*X+p;\n");
fprintf(Out," U=a+b*V+c*V*V;\n");
fprintf(Out," U0=a+b*V0+c*V0*V0;\n");
fprintf(Out," q=3*Id/pi*(sqrt(U)+0.5*b/sqrt(c)*log(2*sqrt(c*U)+2*c*V+b)-sqrt(-a)*asin((b*V+2*a)/V/sqrt(d)));\n");
fprintf(Out," q0=3*Id/pi*(sqrt(U0)+0.5*b/sqrt(c)*log(2*sqrt(c*U0)+2*c*V0+b)-sqrt(-a)*asin((b*V0+2*a)/V0/sqrt(d)));\n");
fprintf(Out," Y1=di1(J-1,K); Y2=di1(J,K);\n");
fprintf(Out," m=(Y1-Y2)/(X1-X2);\n");
fprintf(Out," p=Y1-m*X1;\n");
fprintf(Out," di0=cons*(m*X+p);\n");
fprintf(Out," Vac(N)=Vac(N)-Pi*(di-di0)+q-q0;\n");
fprintf(Out," end;\n");
fprintf(Out," Y1=x1(J-1,1); Y2=x1(J,1);\n");
fprintf(Out," m=(Y1-Y2)/(X1-X2);\n");
fprintf(Out," p=Y1-m*X1;\n");
fprintf(Out," dx1=x2(I,1)-(m*X+p);\n");
fprintf(Out," Y1=x1(J-1,2); Y2=x1(J,2);\n");
fprintf(Out," m=(Y1-Y2)/(X1-X2);\n");
fprintf(Out," p=Y1-m*X1;\n");
fprintf(Out," dx2=x2(I,2)-(m*X+p);\n");
fprintf(Out," Y1=x1(J-1,3); Y2=x1(J,3);\n");
fprintf(Out," m=(Y1-Y2)/(X1-X2);\n");
fprintf(Out," p=Y1-m*X1;\n");
fprintf(Out," dx3=x2(I,3)-(m*X+p);\n");
fprintf(Out," dx=[dx1 dx2 dx3]';\n");
fprintf(Out," Vdc(N)=0.5*dx'*P*dx;\n");
fprintf(Out," break;\n");
fprintf(Out," end;\n");
fprintf(Out," end;\n");
fprintf(Out,"end;\n");
fclose(Out);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -