Как проверить код уравнения пространства состояний для синхронного генератора? - PullRequest
0 голосов
/ 13 июня 2019

Я пишу модель пространства состояний (уравнение состояния, а не уравнение измерения) синхронного генератора, чтобы использовать ее в алгоритме оценки и иметь модель синхронного генератора Simulink (пример MATLAB), но когда я использую код в алгоритме, результат не не такой, как у Симулинка.

Как я могу проверить уравнение пространства состояний только в коде, чтобы убедиться, что оно написано правильно?

Эта модель пространства состояний является моделью синхронного генератора седьмого порядка, описанной в книге Краузе.

function f = f_funforsim2(x)
%generator parameter
Xls = .19;
rs = .003;
Xd = 1.8;
rfd = .000929;
Xlfd = .1414;
rkd = .01334;
Xlkd = .08125;
Xq = 1.8;
rkq1 = .00178;
Xlkq1 = .8125;
rkq2 = .00841;
Xlkq2 = .0939;
Xmd = Xd-Xls;
Xkd = Xlkd+Xmd;
Xfd = Xlfd+Xmd;
Xmq = Xq-Xls;
Xkq1 = Xlkq1+Xmq;
Xkq2 = Xlkq2+Xmq;
Dd = (Xmd)^2*(Xq-2*Xmd+Xfd+Xkd)-Xd*Xfd*Xkd;
Dq = (Xmq)^2*(Xq-2*Xmq+Xkq1+Xkq2)-Xq*Xkq1*Xkq2;
a11 = (Xkq1*Xkq2-Xmq^2)/Dq;
a12 = (Xmq^2-Xmq*Xkq2)/Dq;
a13 = (Xmq^2-Xmq*Xkq1)/Dq;
a21 = (Xmq*Xkq2-Xmq^2)/Dq;
a22 = (Xmq^2-Xq*Xkq2)/Dq;
a23 = (Xq*Xmq-Xmq^2)/Dq;
a31 = (Xmq*Xkq1-Xmq^2)/Dq;
a32 = (Xq*Xmq-Xmq^2)/Dq;
a33 = (Xmq^2-Xq*Xkq1)/Dq;
b11 = (Xfd*Xkd-Xmd^2)/Dd;
b12 = (Xmd^2-Xmd*Xkd)/Dd;
b13 = (Xmd^2-Xmd*Xfd)/Dd;
b21 = (Xmd*Xkd-Xmd^2)/Dd;
b22 = (Xmd^2-Xd*Xkd)/Dd;
b23 = (Xd*Xmd-Xmd^2)/Dd;
b31 = (Xmd*Xfd-Xmd^2)/Dd;
b32 = (Xd*Xmd-Xmd^2)/Dd;
b33 = (Xmd^2-Xd*Xfd)/Dd;
omega_b = 120*pi;
omega_e = 120*pi;
P=2;
Vab=26*1000/sqrt(3);
Vqb=Vab*sqrt(2);
Sb=835*10^6;
p=.85;
q=.53;
s=p+1j*q;
Tb=Sb/(2*omega_b/P);
exfd=2.48*(2/3)^.5*26*1000/Vqb;
vs=1;
d = 5.6;
tl = ((0.85)*2.22*10^6)/Tb;

%defining state variable
% x1=phi_qs;
% x2=phi_ds;
% x3=phi_fd;
% x4=phi_kd;
% x5=phi_kq1;
% x6=phi_kq2;
% x7=omega_r;
% x8=delta;

x1 = x(1);
x2 = x(2);
x3 = x(3);
x4 = x(4);
x5 = x(5);
x6 = x(6);
x7 = x(7);
x8 = x(8);

f1 = omega_b*(vs*cos(x8)+(rs*a11*x1)-(x2)+(rs*a12*x5)+(rs*a13*x6));
f2 = omega_b*(vs*sin(x8)+x1+(rs*b11*x2)+(rs*b12*x3)+(rs*b13*x4));
f3 = omega_b*(exfd-(Xmd*b21*x2)-(Xmd*b22*x3)-(Xmd*b23*x4));
f4 = omega_b*((-rkd*b31*x2)-(rkd*b32*x3)-(rkd*b33*x4));
f5 = omega_b*((-rkq1*a21*x1)-(rkq1*a22*x5)-(rkq1*a23*x6));
f6 = omega_b*((-rkq2*a31*x1)-(rkq2*a32*x5)-(rkq2*a33*x6));
f7 = (1/2*d)*(tl-(x2*(a11*x1+a12*x5+a13*x6))-(x1*(b11*x2+b12*x3+b13*x4)));
f8 = x7*(120*pi)-omega_e;
f = [f1;f2;f3;f4;f5;f6;f7;f8];
end
...