локализация уравнений пространства состояний для синхронной машины - PullRequest
0 голосов
/ 04 апреля 2020

В modelica, для решения der ( X ) = AX + Bu , который описывает уравнения пространства состояний синхронной машины, я технически вынужден дать начальное значение для вектора u (это значение получается из уравнений установившегося состояния машины). После инициализации вектор u изменится. Как это можно реализовать в Modelica? u - вектор напряжения, X вектор потока, A вектор индуктивности.

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Вы уверены, что хотите изменить u после инициализации? Какое влияние это должно оказать на модель, если входное значение изменяется в момент времени 0 до начала симуляции? Обычно вы инициализируете состояния, а не входные данные.

Однако в стандартной библиотеке Modelica имеется блок для моделей пространства состояний (Modelica.Blocks.Continuous.StateSpace). Вы можете использовать его напрямую или использовать его как источник вдохновения для построения своей собственной модели (из-за более сложной инициализации, с которой вы, очевидно, имеете дело).

Ваша модель может выглядеть следующим образом:

model MyStateSpace

  parameter Real A[:, nx]=[1, 0; 0, 1] "System matrix";
  parameter Real B[nx, :]=[1; 1] "Input matrix";
  parameter Real C[:, nx]=[1, 1] "Output matrix";
  parameter Real D[ny, nu]=zeros(size(C, 1), size(B, 2)) "Feedthrough matrix";

  Real u[nu] "Input vector";
  Real x[size(A, 1)] "State vector";
  output Real y[size(C, 1)] "Output vector";

protected 
  final parameter Integer nx = size(A, 1) "number of states";
  final parameter Integer ny = size(C, 1) "number of outputs";
  final parameter Integer nu = size(B, 2) "number of inputs";

initial equation 

  x = {1, 0};

  /* put your equations for initialization here */

equation 

  u = if time > 0.1 then { sin(time) } else { 7 };

  der(x) = A*x + B*u;
  y = C*x + D*u;

end MyStateSpace;

В разделе initial equation вы можете поместить свои уравнения для инициализации. В этом примере я инициализировал x, а не u. Чтобы показать, как u может изменить свое значение через определенное время, я включил примерное уравнение.

1 голос
/ 06 апреля 2020

Эти уравнения обычно неочевидны в модели Modelica.

Я бы порекомендовал просто линеаризовать модель, которая даст вам матрицы A, B (и, если у вас есть также C, D) -матрицы.

Обратите внимание, что линеаризация в целом немного отличается от того, что вы пишете, так как

 der(X)=A*(X-X0)+B*(U-U0);

при линеаризации при X0, U0 и при допущении X0, U0 является стационарным. Если X0 не является стационарной точкой, вы получите:

 der(X)-X0_der=A*(X-X0)+B*(U-U0);

, где X0_der - производная в X0. А добавление явной зависимости от времени сделает ее еще более запутанной.

...