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

КПМ РИТМ: контроль реального времени

В этом примере рассматривается выполнение модели на КПМ РИТМ с контролем времени выполнения задач (TET): переменная TET выводится на график в интерактивном режиме, эти же значения анализируются из файла профилирования, и, кроме того, тестируются реакции РИТМ на переполнения шага расчёта модели.

Введение

После настройки машины реального времени РИТМ и её рабочего окружения можно перейти непосредственно к применению технологий быстрого прототипирования и/или полунатурного моделирования. Эти и другие подходы базируются на тестировании в реальном времени.

Тестирование в реальном времени — это исследование функционирования системы (или ее компонентов) в реальных рабочих условиях — при заданной частоте дискретизации, с эффектами, возникающими при работе с реальным оборудованием и интерфейсами, с учетом синхронизации различных выполняющихся задач. Тестирование в реальном времени применяется в технологиях быстрого прототипирования алгоритма управления (или Rapid Prototyping), полунатурного моделирования объекта управления (также известное как HIL, или Hardware-in-the-Loop), а также в применении к сбору данных и обработки сигналов.

Как следует из этого определения, тестирование в реальном времени обеспечивается соблюдением выполнения расчётов с заданным периодом дискретизации - шагом расчёта модели. Соответственно, в ходе моделирования на КПМ РИТМ нужно оценивать и контролировать время выполнения задач (TET, или Task Execution Time), а также управлять выполнением модели на РИТМ в случае несоблюдения условий тестирования в реальном времени.
Для решения этих задач в Engee есть несколько возможностей и инструментов, которые мы используем далее в текущем примере.

Обзор модели

Модель этого примера базируется на модели из примера КПМ РИТМ: быстрый старт. Отличие заключается в блоке РИТМ Время выполнения, который можно найти в библиотеке блоков: РИТМ -> RITM Utilities -> RITM Task Execution Time -> RITM-TET.
Ниже представлена модель примера с блоком RITM-TET.

image_2.png

Сигнал tet на выходе блока RITM-TET запишем для анализа в окне графиков Engee. Моделирование в Engee данной системы было рассмотрено в предыдущем примере, поэтому в текущем примере будет рассмотрено моделирование только на КПМ РИТМ в режиме интерактивного выполнения.

Расчёт времени выполнения

После переключения расчётного пространства с Engee на КПМ РИТМ откроем настройки модели и включим расчёт TET:

image_3.png

Также включим профилирование и зададим количество точек профилирования - это позволит нам сохранять значения TET в текстовый файл в памяти КПМ РИТМ. Время выполнения модели - $2\ c$, шаг расчёта - $1\cdot 10^{-3}$. Чтобы сохранить все значения TET в процессе моделирования, необходимо задать 2000 точек профилирования.

Результаты моделирования

После запуска выполнения модели на КПМ РИТМ в интерактивном режиме на выходе блока RITM-TET можно наблюдать следующее изменение сигнала:

image.png

Графопостроитель Engee имеет необходимые функциональности для первичного анализа графика. Для более подробного, точного и наглядного анализа времени выполнения задач мы можем перейти в командную оболочку КПМ РИТМ и прочитать файл профилирования модели ritm_dcm_get_tet_profile.txt. Сохраним файл профилирования модели и проанализируем данные о времени выполнения при помощи кода на julia, приведённого ниже.

Анализ времени выполнения модели

Подключим скрипт со вспомогательной функцией чтения файлов формата .txt в векторную переменную:

In [ ]:
# Подключаем скрипт
include("$(@__DIR__)/txt_to_vector.jl");

# Получаем вектор значений из файла
tet = TxtToVec("$(@__DIR__)/ritm_dcm_get_tet_profile.txt");

# Шаг расчёта модели
StepTime = 1e3; # мкс

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

In [ ]:
Pkg.add(["StatsBase", "Printf"])
import StatsBase.mean, Printf.@printf
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`

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

In [ ]:
@printf "Количество точек профилирования: %d\n\n" length(tet)

@printf "Минимальное TET:   %.3f мкс\n" tet_min = (minimum(tet)/1000)
@printf "Среднее TET:       %.3f мкс\n" tet_mean = (mean(tet)/1000)
@printf "Максимальное TET:  %.3f мкс\n\n" tet_max = (maximum(tet)/1000)

print("Диапазон TET относительно шага расчёта модели, %: ")
@printf "%.1f - %.1f" tet_min/StepTime*100 tet_max/StepTime*100
Количество точек профилирования: 2000

Минимальное TET:   6.966 мкс
Среднее TET:       12.740 мкс
Максимальное TET:  53.930 мкс

Диапазон TET относительно шага расчёта модели, %: 0.7 - 5.4

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

Для наглядности также можно представить полученные данные графически:

In [ ]:
gr(legend=:right, title="Время выполнения модели\n на КПМ РИТМ",
    xlabel="Время модели, мс", ylabel="Время выполнения, мкс")
plot(tet./1000;  label="TET")
plot!([0, 2000], [tet_min,  tet_min];  label="TET_MIN",   color=:green)
plot!([0, 2000], [tet_mean, tet_mean]; label="TET_MEAN",  color=:purple)
plot!([0, 2000], [tet_max,  tet_max];  label="TET_MAX",  color=:red)
Out[0]:

В результате анализа мы установили, что время выполнения модели не превышает её шага расчёта. Однако при меньшем шаге - например, $53 мкс$ или, тем более $10 мкс$, расчёт модели на КПМ РИТМ будет частично или полностью не соответствовать принципу тестирования в реальном времени.
В операционной системе реального времени (ОСРВ) РИТМ.Реальное время и Engee есть инструменты, позволяющие вести мониторинг и контролировать расчёт модели в реальном времени.

Переполнение шага расчёта

Для тестирования возможностей по контролю тестирования в реальном времени установим в модели примера шаг расчёта на уровне $1\cdot 10^{-6} с$.

Для контроля переполнения шага расчёта в настройках модели в разделе РИТМ включим обнаружение переполнения шага расчёта. Сперва определим действие при переполнении шага расчёта как "Уведомить". При переполнении шага расчёта графический интерфейс RITM.Monitor в окне Application Log будет выводить соответствующие сообщения - Overrun detected: rate #0, model time ...!, однако это не помешает КПМ РИТМ выполнять модель вплоть до конечного времени моделирования.

image.png

В случае установки действия при переполнении шага расчёта "Завершить" и указании количества допустимых переполнений выполнение модели на РИТМ будет автоматически остановлено при достижении заданного числа переполнений. RITM.Monitor в окне Application Log для данного случая выведет сообщения о достижении максимального числа допущенных переполнений - Maximum number of allowed overruns reached, stopping model execution! и остановке модели.

image.png

Заключение

В примере мы рассмотрели имеющиеся инструменты и возможности для контроля времени выполнения задач в ОСРВ РИТМ.Реальное время, библиотеке блоков и настройках Engee для РИТМ. Эти функциональности позволяют лучше подобрать настройки модели и/или оптимизировать саму модель для её выполнения в режиме реального времени.