Engee 文档
Notebook

KPM节奏:实时监控

此示例检查了使用任务时间控制(tet)在KPM节奏上执行模型:tet变量以交互方式显示在图形上,从分析文件中分析相同的值,此外,还测试了对模型计算步骤溢出的节奏反应。

导言

配置完RHYTHM实时机及其工作环境后,就可以直接进行【快速成型】[1]和/或【半自然建模】[2]技术的应用。 这些和其他方法基于[实时测试][3]。

[1]:https://kpm-ritm.ru/realtime_testing
[2]:https://kpm-ritm.ru/realtime_testing#modeling
[3]:https://engee.com/helpcenter/stable/ru/ritm/intro.html#общая-информация

实时测试是研究系统(或其组件)在实际操作条件下的功能—以给定的采样率,在使用真实设备和接口时发生的影响,同时考虑到执行的各种任务的同步。 实时测试用于控制算法(或快速原型)的快速原型*、控制对象(也称为HIL硬件在环)的半自然建模*的技术,以及数据收集和信号处理的应用。

从这个定义如下,通过观察具有指定采样周期的计算来确保实时测试-计算模型的步骤。 因此,在KPM节奏模拟期间,有必要评估和监控任务执行时间(TET,或任务执行时间),以及在不符合实时测试条件的情况下管理节奏模型的执行。
为了解决这些问题,Engee有几个功能和工具,我们将在当前示例的后面使用。

模型概述

该示例的模型基于来自示例KPM RHYTHM:Quick Start的模型。 区别在于块 РИТМ Время выполнения,可以在块库中找到: РИТМ -> RITM Utilities -> RITM Task Execution Time -> RITM-TET.
下面是一个带有块的示例模型 RITM-TET.

image_2.png

信号 tet 在块输出 RITM-TET 让我们在图表窗口Engee中写下来进行分析。
在此系统的Engee中建模在前面的示例中被考虑,因此,在当前示例中,建模将仅在[交互执行]模式下的KPM节奏上被考虑[1]。

[1]:https://engee.com/helpcenter/stable/ru/ritm/build-modes.html#режим-интерактивного-выполнения

执行时间的计算

将计算空间从Engee切换到KPM RHYTHM后,打开[模型设置][1]并启用TET计算:

[1]:https://engee.com/helpcenter/stable/ru/ritm/ritm-model-settings.html

image_3.png

我们还将启用性能分析并设置性能分析点的数量。 这将允许我们将TET值保存到KPM节奏存储器中的文本文件中。 模型执行时间 - ,计算步骤 - . 要在仿真过程中保存所有tet值,需要设置2000个仿形点。

模拟结果

在KPM上开始模型的执行之后,节奏在块输出处是交互式的。 RITM-TET 可以观察到以下信号变化:

image.png

Engee graph builder具有用于主图分析的必要功能。 对于任务执行时间的更详细,准确和可视化的分析,我们可以转到KPM RHYTHM命令shell并读取模型分析文件。 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]:

作为分析的结果,我们发现模型的执行时间不超过其计算步骤。 然而,用一个较小的步骤-例如, 或者,更是如此 Kpm节奏上模型的计算将部分或完全不符合实时测试的原则。
在实时操作系统(RTOS)[节奏。实时][1]和[Engee][2]具有允许[监控和监控模型计算][3]实时的工具。

[1]:https://kpm-ritm.ru/real-time
[2]:https://engee.com/helpcenter/stable/ru/ritm/intro.html#осрв-ритм-реальное-время
[3]:https://engee.com/helpcenter/stable/ru/ritm/ritm-model-settings.html

计算步骤的溢出

为了测试实时测试控制的可能性,我们将示例模型中的计算步骤设置为 .

要在节奏部分的模型设置中控制计算步骤的溢出,请启用计算步骤的溢出检测。 首先,让我们将计算步骤的溢出操作定义为"通知"。 如果计算步骤溢出,则图形界面RITM。监视器将在应用程序日志窗口中显示相应的消息。 - Overrun detected: rate #0, model time ...! 但是,这不会阻止KPM RHYTHM执行模型直至结束仿真时间。

image.png

如果计算步骤的溢出动作被设置为"完成"并且指定了允许的溢出次数,则当达到设定的溢出次数时将自动停止节奏模型的执行。 里特姆。当达到允许的最大溢出数时,监视器将在应用程序日志窗口中显示消息。 - Maximum number of allowed overruns reached, stopping model execution! 并停止模型。

image.png

结论

在这个例子中,我们检查了可用的工具和功能,以监视任务执行时间在RTOS节奏。实时,块库和设置Engee的节奏。 这些功能允许您更好地调整模型的设置和/或优化模型本身以实时执行。