Что такое ненаправленные связи?

Top  Previous  Next

Большинство инструментов моделирования позволяет строить компонентные модели, компоненты которых передают друг другу данные по связям «направленно», через входы и выходы.

В такой модели совокупная система уравнений представляет собой просто механическое объединение уравнений компонентов и уравнений связей вида x = y.

Если связи в такой модели разорвать или не передавать по ним данные, компонентные уравнения сохраняются и становятся независимыми. Разрабатывая компоненты с направленными связями,

можно сначала наблюдать и проверять их собственное, независимое поведение, а затем уже совместное, системное поведение. Мало того, можно даже независимо создавать выполняемый программный код для

каждого компонента в отдельности и он будет правильно работать при любых соединениях компонентов. Именно поэтому Simulink и имеет возможность использовать стандартные компоненты, которые сами не

разработаны на входном языке Simulink.

 

Однако существуют системы, для которых затруднительно создать компонентные модели, используя только направленные связи.

Ненаправленные связи используются при моделировании «физических» систем, в которых имеют место физические (механические, электрические, гидравлические и т. п. ) взаимодействия.

На такие компонентные модели изначально ориентирован язык Modelica. AnyDynamics также позволяет работать с такими моделями.

 

Рассмотрим хорошо известный пример, взятый из описания языка Modelica - модель вентилятора (демо-пример "FanCS").

Вентилятор — это пропеллер P, электродвигатель постоянного тока M и блок управления C (рис.1).

 

                         Рис.1

 

Соединение электродвигателя и вентилятора через жесткий вал — хороший пример соединения компонентов, возникающего в «физических» системах.

 

Можно создать компонентную модель этой системы, используя только направленные связи? Конечно можно.

Рассмотрим компонент «Пропеллер» с уравнениями поведения

Взаимодействие пропеллера с внешним миром через жесткий вал описывается двумя внешними переменными: моментом на валу и углом поворота вала .

Очевидно, что эти переменные не могут быть одновременно входами или выходами — уравнения становятся бессмысленными.

Возможны два варианта:

 1) момент является входом, а угол выходом

 2) момент является выходом, а угол входом

 

В первом случае пропеллер под воздействием внешнего момента начинает крутиться и разгоняется до скорости, при которой сопротивление воздуха уравновешивает внешний момент.

При этом уравнения пропеллера интерпретируются как дифференциальные, в которых искомыми величинами являются угол поворота вала и угловая скорость вала.

 

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

Уравнения динамики пропеллера «превращаются» в алгебраические уравнения, содержащие еще и операцию дифференцирования:

Для системы, показанной на рис.1, подходящим является вариант (2). В этом случае направленный компонент «Электродвигатель» будет взаимодействовать с внешним миром

по жесткому валу через выход φ и вход T, а с устройством управления — через вход V (рис..2).

         Рис.2

 

Его поведение будет задаваться системой уравнений

Связь компонентов по жесткому валу в совокупной системе урав нений будет задаваться двумя равенствами:

 

Запустив эту модель, мы увидим, что она прекрасно работает и никаких сообщений о необходимости дифференцировать не появилось.

Анализатор уравнений учел, что если углы при соединении компонентов равны, то и их производные равны, а значения производных известны из уравнений электродвигателя.

 

Возникает вопрос: если все так хорошо, зачем тогда нужны какие-то еще связи, кроме направленных?

Да потому что эти компоненты имеют ограниченное применение. Пропеллер может работать и в режиме (1) — если мы прикладываем внешний момент, крутя ручку.

Электродвигатель может работать и в режиме (2) — например, на одном валу с другим электродвигателем в качестве нагрузки.

Получается, что для других вариантов использования нужно всегда разрабатывать новые компоненты, что не позволяет создать библиотеку «универсальных»

компонентов для данной прикладной области. Для того чтобы компоненты были возможно более «универсальными», необходимо, чтобы контекст соединения учитывался

автоматически. Чтобы обеспечить возможность создавать библиотеки компонентов для «физических» моделей, компоненты нужно сделать ненаправленными.

 

Ненаправленными или неориентированными называются компоненты, имеющие внешние переменные следующих видов:

 

«контакт» («contact») — внешняя переменная, значение которой может быть изменено как извне, так и внутри объекта.

  Значения всех контактов, участвующих в связи, равны в любой момент времени;

 

«поток» («flow») — внешняя переменная, значение которой может быть изменено как извне, так и внутри объекта.

 Сумма значений всех потоков, участвующих в связи, равна нулю в любой момент времени.

 

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

В нашей задаче угол поворота вала φ должен стать контактом, а момент T потоком.

В AnyDynamics контакты изображаются прямоугольниками, а потоки — ромбами (рис.3).

         Рис.3

 

Связь компонентов по жесткому валу в совокупной системе уравнений теперь будет задаваться уравнениями:

 

должен также будет поменяться и знак у момента на валу в уравнениях электродвигателя — теперь он будет учитываться автоматически:

Компоненты в таком виде стали универсальнее и допускают теперь различные способы соединения.

 

Для модели с ненаправленными компонентами анализ уравнений и преобразование их к виду, пригодному для вычислений, можно делать

только для всей совокупной системы уравнений в целом. Для компонентных моделей с постоянным составом и непрерывными компонентами

или гибридными компонентами с ограничениями на дискретные действия это можно делать на этапе трансляции — так делается в системах моделирования с входным языком Modelica.

При этом учитываются все возможные комбинации уравнений, которые могут получиться при переключениях.

Преимуществом этого подхода является возможность выполнения сложного анализа и сложных символьных преобразований, недостатком — ограничения на входной язык.

 

Для компонентных моделей с переменным составом и гибридными компонентами, использующими машины состояний UML, анализ совокупной системы

уравнений и преобразование ее к виду, требуемому решателями уравнений, приходится делать на этапе выполнения модели — так делается AnyDynamics.

Преимуществом этого подхода является возможность использовать машины состояний, недостатком — необходимость использовать только очень эффективные и быстрые алгоритмы анализа

и очень аккуратно распределять необходимые преобразования между стадиями трансляции и выполнения.

 

Для сложных компонентных моделей удобно использовать агрегированные связи между специальными агрегированными внешними переменными, называемыми «коннекторами».

Коннектор» («connector») — это внешняя переменная, представляющая собой набор переменных — компонентов коннектора — со своими стереотипами

(например, контакт плюс поток плюс выход).

 

Для того чтобы использовать коннекторы, необходимо декларировать в проекте или импортировать определение соответствующего типа.

В нашем примере нам понадобятся следующие определения типов:

 

type Угол is double; -- (рад)

 type Момент is double; -- (н*м)

 

 type Фланец is

   connector

     contact Phi: Angle;

     flow T: Torque;

   end connector;

 

Или в стиле C#:

 

 type Фланец is

   connector {

     contact Угол Phi;

     flow Момент T;

   };

 

Переменная типа «Фланец» содержит компоненты: контакт Phi — угол поворота вала и поток T — момент на срезе вала.

Коннекторы рисуются на структурной схеме закрашенными прямоугольниками, а свзи между коннекторами утолщенной линией (рис.4).

 

FanConn

 Рис.4

 

В случаях когда в состав коннекторов входят ориентированные элементы, необходимо создавать «зеркальные» пары типов коннекторов, которые могут образовывать связи.

В этих типах каждому входу должен соответствовать выход в «парном» коннекторе и наоборот.

 

В иерархических моделях появляются особые «пограничные» внешние переменные, которые участвуют в связях на различных уровнях иерархии.

Для того чтобы правила записи уравнений для связей различных уровней иерархии были одинаковы, приходится для таких переменных

рассматривать два значения: «значение вовне» и «значение внутри».

Для входов, выходов и контактов эти значения совпадают, а для потоков эти значения сами связаны уравнением потока

 

 «значение вовне» + «значение внутри» = 0

 

В AnyDynamics под значением «пограничной» переменной всегда понимается ее «значение вовне».

В уравнениях внутренних связей это значение используется с обратным знаком.

 

                       

                 Рис.5                                                                Рис.6

 

 

На рис.5 показана структура модели в целом, на рис.6 - внутрення структура объектв "B1".

 

Объект B1 имеет «пограничную» внешнюю переменную — коннектор Z.

В уравнениях потоков структуры уровня 1 поток Z.q участвует со знаком «плюс», а вот в уравнениях потоков структуры уровня 2 — со знаком «минус»:

 

1) B1.Z.q+U2.C.q+U1.C.q+U3.C.q = 0

2) B1.u1.C.q-B1.Z.q+B1.u2.C.q = 0