Документация Engee
Notebook

Моделирование управляющей логики с параллельными состояниями

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

Декомпозиция состояния

Тип декомпозиции диаграммы или состояния определяет, содержит ли диаграмма или состояние исключающие или параллельные состояния:

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

Вы можете комбинировать исключающие и параллельные состояния, задав декомпозицию состояний на разных уровнях вашей иерархии состояний. Тип декомпозиции состояний по умолчанию - Исключающий (ИЛИ). Чтобы изменить тип декомпозиции на Параллельный (И), щелкните правой кнопкой мыши родительское состояние и выберите Декомпозиция > Параллельный (И). Чтобы изменить тип декомпозиции обратно на Исключающий (ИЛИ), щелкните правой кнопкой мыши родительское состояние и выберите Декомпозиция > Исключающий (ИЛИ).

Регулятор температуры воздуха

В этом примере используется параллельное декомпозиционное моделирование для имитации регулятора, поддерживающего температуру воздуха на уровне 120 градусов на реальном объекте.

fan_1747037996176.png

На верхнем уровне схема воздушного контроллера имеет два взаимоисключающих состояния, PowerOff и PowerOn. В схеме используется взаимоисключающая стратегия активация (ИЛИ), потому что контроллер не может быть включён и выключен одновременно.

Контроллер управляет двумя вентиляторами. Первый вентилятор включается, когда температура воздуха поднимается выше 120 градусов. Второй вентилятор обеспечивает дополнительное охлаждение, когда температура воздуха поднимается выше 150 градусов. На схеме эти вентиляторы представлены в виде параллельных подсостояний FAN1 и FAN2 состояния верхнего уровня PowerOn. Поскольку вентиляторы работают как независимые компоненты, которые включаются или выключаются в зависимости от требуемого уровня охлаждения. В PowerOn используется параллельная схема активации (И), чтобы оба подсостояния были активны при включении контроллера.

За исключением пороговых значений, вентиляторы моделируются состояниями с идентичной конфигурацией подсостояний и переходов, которые отражают два режима работы вентиляторов: On и Off. Поскольку ни один из вентиляторов не может быть включён и выключен одновременно, FAN1 и FAN2 имеют взаимоисключающую схему (ИЛИ).

В PowerOn третье параллельное состояние под названием SpeedValue представляет собой независимую подсистему, которая подсчитывает количество вентиляторов, включившихся на каждом временном шаге. Булево выражение in(FAN1.On) имеет значение 1, когда On состояние FAN1 активно. В противном случае in(FAN1.On) равно 0. Аналогично, значение in(FAN2.On) показывает, включился FAN2 или выключился. Сумма этих выражений указывает на количество вентиляторов, включившихся на каждом временном шаге.

Порядок выполнения для параллельных состояний

Хотя FAN1, FAN2 и SpeedValue активны одновременно, эти состояния выполняются последовательно во время моделирования. Цифры в верхних правых углах состояний определяют порядок выполнения. Обоснование такого порядка исполнения заключается в следующем:

  • FAN1 Выполняется первым, потому что включается при более низкой температуре, чем FAN2. Он может включиться независимо от того, включен или выключен FAN2.
  • FAN2 выполняется вторым, потому что включается при более высокой температуре, чем FAN1. Он может включиться, только если FAN1 уже включён.
  • SpeedValue выполняется последним, чтобы можно было наблюдать за самым актуальным состоянием FAN1 и FAN2.

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

Изучите модель

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

fan_1747037852784.png

В зависимости от температуры воздуха на физической установке диаграмма включает вентиляторы и выводит количество работающих вентиляторов airflow в подсистему. Это значение определяет коэффициент эффективности охлаждения $k_{cool}$ в соответствии с этими правилами:

  • airflow = 0 — вентиляторы не работают. Температура воздуха не снижается, потому что $k_{Cool} = 0$.

  • airflow = 1 — работает один вентилятор. Температура воздуха снижается в соответствии с коэффициентом эффективности охлаждения $k_{Cool} = 0.05$.

  • airflow = 2 — работают два вентилятора. Температура воздуха снижается в соответствии с коэффициентом эффективности охлаждения $k_{Cool} = 0.1$.

Подсистема «Физический объект» обновляет температуру воздуха $temp$ внутри объекта на основе уравнений

$$temp(0) = T_{initial}$$

$$temp'(t) = (T_{Ambient}-temp(t)) \cdot (k_{Heat}-k_{Cool}).$$

где:

  • $T_{initial}$ является начальной температурой. Значение по умолчанию равно 70°.

  • $T_{Ambient}$ является температурой окружающей среды. Значение по умолчанию равно 160°.

  • $k_{Heat}$ — коэффициент теплопередачи для установки. Значение по умолчанию — 0.01.

  • $k_{Cool}$ - коэффициент охлаждающей активности, соответствующий airflow.

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

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

In [ ]:
modelName = "parallel_st_fan";
PID_model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");
In [ ]:
results = engee.run( modelName )
Out[0]:
SimulationResult(
    "Switch" => WorkspaceArray{Float64}("parallel_st_fan/Switch")
,
    "Tout" => WorkspaceArray{Float64}("parallel_st_fan/Tout")

)
In [ ]:
plot(
    plot(results["Tout"].time, results["Tout"].value, lab = "Tout"),
    plot(results["Switch"].time, results["Switch"].value, lab = "Switch", c="red"),
    layout = (2,1)
)
Out[0]:

Вывод

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