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.
信号 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
我们还将启用性能分析并设置性能分析点的数量。 这将允许我们将TET值保存到KPM节奏存储器中的文本文件中。 模型执行时间 - ,计算步骤 - . 要在仿真过程中保存所有tet值,需要设置2000个仿形点。
模拟结果
在KPM上开始模型的执行之后,节奏在块输出处是交互式的。 RITM-TET 可以观察到以下信号变化:
Engee graph builder具有用于主图分析的必要功能。 对于任务执行时间的更详细,准确和可视化的分析,我们可以转到KPM RHYTHM命令shell并读取模型分析文件。 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)
作为分析的结果,我们发现模型的执行时间不超过其计算步骤。 然而,用一个较小的步骤-例如, 或者,更是如此 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执行模型直至结束仿真时间。
如果计算步骤的溢出动作被设置为"完成"并且指定了允许的溢出次数,则当达到设定的溢出次数时将自动停止节奏模型的执行。 里特姆。当达到允许的最大溢出数时,监视器将在应用程序日志窗口中显示消息。 - Maximum number of allowed overruns reached, stopping model execution! 并停止模型。
结论
在这个例子中,我们检查了可用的工具和功能,以监视任务执行时间在RTOS节奏。实时,块库和设置Engee的节奏。 这些功能允许您更好地调整模型的设置和/或优化模型本身以实时执行。
