Как я могу использовать некоторую модель как часть другой модели? - PullRequest
1 голос
/ 08 сентября 2011

Я пишу программу моделирования как часть диплома и ищу Modelica в качестве языка ввода.

Но в стандартной спецификации я не могу найти, как реализовать эту функцию:

Например, у меня есть модель:

model circuit1
Resistor R1(R=10);
Capacitor C(C=0.01);
Resistor R2(R=100);
Inductor L(L=0.1);
VsourceAC AC;
Ground G;
equation
connect (AC.p, R1.p);
connect (R1.n, C.p);
connect (C.n, AC.n);
connect (R1.p, R2.p); 
connect (R2.n, L.p);
connect (L.n, C.n);
connect (AC.n, G.p); 
end circuit1

Как я могу использовать эту модель как часть другой модели?

Вот так:

model circuit2
Resistor R1(R=10);
circuit1 circ();                 // ! Define some circuit1
Resistor R2(R=100);
Inductor L(L=0.1);
VsourceAC AC;
Ground G;
equation
connect (AC.p, R1.p); 
connect (R1.n, C.p);
connect (circ.somePin1, AC.n);   // ! Connect circuit1 pins
connect (R1.p, R2.p); 
connect (R2.n, L.p);
connect (L.n, circ.somePin2);    // ! Connect circuit1 pins
connect (AC.n, G.p);
end circuit2 

Редактировать

model circuit1
extends somePin1;         //
extends somePin2;         //
Resistor R1(R=10);
Capacitor C(C=0.01);
Resistor R2(R=100);
Inductor L(L=0.1);
VsourceAC AC;
Ground G;
equation
connect (AC.p, R1.p);
connect (R1.n, C.p);
connect (C.n, AC.n);
connect (R1.p, R2.p); 
connect (R2.n, L.p);
connect (L.n, C.n);
connect (AC.n, G.p);
connect (AC.n, somePin1); //
connect (R1.n, somePin2); //
end circuit1

Ответы [ 2 ]

3 голосов
/ 09 сентября 2011

Мне кажется, ваш вопрос можно перефразировать следующим образом:

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

ЕслиИтак, ключ заключается в том, чтобы изменить исходную модель (как предложил Мартин), чтобы она выглядела следующим образом:

model circuit1
  Resistor R1(R=10);
  Capacitor C(C=0.01);
  Resistor R2(R=100);
  Inductor L(L=0.1);
  VsourceAC AC;
  MyPin somePin1;  // Add some external connectors for
  MyPin somePin2;  // models "outside" this model to connect to
  Ground G;
equation
  connect (somePin1, AC.p); // Indicate where the external models
  connect (somePin2, AC.n); // should "tap into" this model.
  connect (AC.p, R1.p);
  connect (R1.n, C.p);
  connect (C.n, AC.n);
  connect (R1.p, R2.p); 
  connect (R2.n, L.p);
  connect (L.n, C.n);
  connect (AC.n, G.p); 
end circuit1;

Теперь я думаю, что вы можете использовать circuit2 в точности так, как написали в своем вопросе.

Несколько дополнительных комментариев:

  1. Не ясно, используете ли вы модель Resistor в стандартной библиотеке Modelica или свою собственную модель Resistor.Если вы используете стандартную библиотеку Modelica, то замените «MyPin» на «Modelica.Electrical.Analog.Interfaces.PositivePin» (я думаю, что это имя).
  2. Модели в Modelica начинаются с заглавных букв по соглашению,Поэтому, чтобы сделать вашу модель более читабельной для других, я бы предложил переименовать ваши модели в «Circuit1» и «Circuit2».
  3. Не забывайте точки с запятой на концах моделей (как указал Мартин).
  4. Вы определенно НЕ хотите использовать экстенты, как вы это делали при редактировании.Вам нужно добавить контакты на диаграмму так же, как вы это сделали с резистором, заземлением и т. Д.

Надеюсь, это поможет вам немного лучше понять вещи.

3 голосов
/ 08 сентября 2011

Помимо пропущенных точек с запятой (end circuit2;), код хорошо разбирается и является правильным способом создания составной модели Modelica.

...