Model 同步电机状态空间方程的局部化

Model 同步电机状态空间方程的局部化,model,initialization,modelica,Model,Initialization,Modelica,在modelica中,为了求解描述同步电机状态空间方程的der(X)=AX+Bu,我在技术上被迫给出向量u的初始值(该值由电机的稳态方程获得)。初始化后,向量u将改变。如何在Modelica中实现它? u是电压向量,X是磁通向量,A是电感向量。这些方程在Modelica模型中通常不明显 我建议只对模型进行线性化,它将给出A,B(如果你也有输出C,D)-矩阵 请注意,线性化通常与您编写的内容略有不同 der(X)=A*(X-X0)+B*(U-U0); 当在X0,U0处线性化并假设X0时,U0为

在modelica中,为了求解描述同步电机状态空间方程的der(X)=AX+Bu,我在技术上被迫给出向量u的初始值(该值由电机的稳态方程获得)。初始化后,向量u将改变。如何在Modelica中实现它?
u是电压向量,X是磁通向量,A是电感向量。

这些方程在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处的导数。添加明确的时间依赖性将使其更加混乱。

这些方程在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处的导数。添加显式的时间依赖性将使其更加混乱。

您确定要在初始化后更改
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;

初始方程
部分,您可以将方程放入初始化。在本例中,我初始化了
x
,而不是
u
。为了说明
u
如何在一段时间后改变其值,我加入了一个示例性等式。

您确定要在初始化后改变
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;

初始方程
部分,您可以将方程放入初始化。在本例中,我初始化了
x
,而不是
u
。为了说明
u
如何在一段时间后改变其值,我加入了一个示例方程。

在同步电机模型中,我们必须从稳态开始,状态变量是通量,我在初始方程中使用der(通量)=0来找到稳态初始化。我们有两个变量EFS作为场电压,用来求稳态值,Ef是场电压。我仍然没有得到实际的问题。你能把同步机的型号贴出来吗?为什么不使用MSL中提供的呢?在同步电机模型中,我们必须从稳态开始,状态变量是通量,我使用初始方程中的der(通量)=0来找到稳态初始化。我们有两个变量EFS作为场电压,用来求稳态值,Ef是场电压。我仍然没有得到实际的问题。你能把同步机的型号贴出来吗?你为什么不使用MSL中提供的那个呢?