КПМ РИТМ: контроль реального времени¶
В этом примере рассматривается выполнение модели на КПМ РИТМ с контролем времени выполнения задач (TET): переменная TET выводится на график в интерактивном режиме, эти же значения анализируются из файла профилирования, и, кроме того, тестируются реакции РИТМ на переполнения шага расчёта модели.
Введение¶
После настройки машины реального времени РИТМ и её рабочего окружения можно перейти непосредственно к применению технологий быстрого прототипирования и/или полунатурного моделирования. Эти и другие подходы базируются на тестировании в реальном времени.
Тестирование в реальном времени — это исследование функционирования системы (или ее компонентов) в реальных рабочих условиях — при заданной частоте дискретизации, с эффектами, возникающими при работе с реальным оборудованием и интерфейсами, с учетом синхронизации различных выполняющихся задач. Тестирование в реальном времени применяется в технологиях быстрого прототипирования алгоритма управления (или Rapid Prototyping), полунатурного моделирования объекта управления (также известное как HIL, или Hardware-in-the-Loop), а также в применении к сбору данных и обработки сигналов.
Как следует из этого определения, тестирование в реальном времени обеспечивается соблюдением выполнения расчётов с заданным периодом дискретизации - шагом расчёта модели. Соответственно, в ходе моделирования на КПМ РИТМ нужно оценивать и контролировать время выполнения задач (TET, или Task Execution Time), а также управлять выполнением модели на РИТМ в случае несоблюдения условий тестирования в реальном времени.
Для решения этих задач в Engee есть несколько возможностей и инструментов, которые мы используем далее в текущем примере.
Обзор модели¶
Модель этого примера базируется на модели из примера КПМ РИТМ: быстрый старт. Отличие заключается в блоке РИТМ Время выполнения
, который можно найти в библиотеке блоков: РИТМ -> RITM Utilities -> RITM Task Execution Time -> RITM-TET
.
Ниже представлена модель примера с блоком RITM-TET
.
Сигнал tet
на выходе блока RITM-TET
запишем для анализа в окне графиков Engee.
Моделирование в Engee данной системы было рассмотрено в предыдущем примере, поэтому в текущем примере будет рассмотрено моделирование только на КПМ РИТМ в режиме интерактивного выполнения.
Расчёт времени выполнения¶
После переключения расчётного пространства с Engee на КПМ РИТМ откроем настройки модели и включим расчёт TET:
Также включим профилирование и зададим количество точек профилирования - это позволит нам сохранять значения TET в текстовый файл в памяти КПМ РИТМ. Время выполнения модели - $2\ c$, шаг расчёта - $1\cdot 10^{-3}$. Чтобы сохранить все значения TET в процессе моделирования, необходимо задать 2000 точек профилирования.
Результаты моделирования¶
После запуска выполнения модели на КПМ РИТМ в интерактивном режиме на выходе блока RITM-TET
можно наблюдать следующее изменение сигнала:
Графопостроитель Engee имеет необходимые функциональности для первичного анализа графика. Для более подробного, точного и наглядного анализа времени выполнения задач мы можем перейти в командную оболочку КПМ РИТМ и прочитать файл профилирования модели ritm_dcm_get_tet_profile.txt
. Сохраним файл профилирования модели и проанализируем данные о времени выполнения при помощи кода на julia, приведённого ниже.
Анализ времени выполнения модели¶
Подключим скрипт со вспомогательной функцией чтения файлов формата .txt в векторную переменную:
# Подключаем скрипт
include("$(@__DIR__)/txt_to_vector.jl");
# Получаем вектор значений из файла
tet = TxtToVec("$(@__DIR__)/ritm_dcm_get_tet_profile.txt");
# Шаг расчёта модели
StepTime = 1e3; # мкс
Установим библиотеки и импортируем модули для анализа и отображения данных.
Pkg.add(["StatsBase", "Printf"])
import StatsBase.mean, Printf.@printf
Выведем сообщения с данными об анализируемой выборке, минимальном, среднем и максимальном значениях, а также процентном соотношении времени выполнения модели и шага расчёта модели.
@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
Как и было определено ранее, мы получили заданное количество точек профилирования.
Для наглядности также можно представить полученные данные графически:
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)
В результате анализа мы установили, что время выполнения модели не превышает её шага расчёта. Однако при меньшем шаге - например, $53 мкс$ или, тем более $10 мкс$, расчёт модели на КПМ РИТМ будет частично или полностью не соответствовать принципу тестирования в реальном времени.
В операционной системе реального времени (ОСРВ) РИТМ.Реальное время и Engee есть инструменты, позволяющие вести мониторинг и контролировать расчёт модели в реальном времени.
Переполнение шага расчёта¶
Для тестирования возможностей по контролю тестирования в реальном времени установим в модели примера шаг расчёта на уровне $1\cdot 10^{-6} с$.
Для контроля переполнения шага расчёта в настройках модели в разделе РИТМ включим обнаружение переполнения шага расчёта. Сперва определим действие при переполнении шага расчёта как "Уведомить". При переполнении шага расчёта графический интерфейс RITM.Monitor в окне Application Log будет выводить соответствующие сообщения - Overrun detected: rate #0, model time ...!
, однако это не помешает КПМ РИТМ выполнять модель вплоть до конечного времени моделирования.
В случае установки действия при переполнении шага расчёта "Завершить" и указании количества допустимых переполнений выполнение модели на РИТМ будет автоматически остановлено при достижении заданного числа переполнений. RITM.Monitor в окне Application Log для данного случая выведет сообщения о достижении максимального числа допущенных переполнений - Maximum number of allowed overruns reached, stopping model execution!
и остановке модели.
Заключение¶
В примере мы рассмотрели имеющиеся инструменты и возможности для контроля времени выполнения задач в ОСРВ РИТМ.Реальное время, библиотеке блоков и настройках Engee для РИТМ. Эти функциональности позволяют лучше подобрать настройки модели и/или оптимизировать саму модель для её выполнения в режиме реального времени.