KPM RITM:实时控制¶
本示例通过任务执行时间 (TET) 控制来检查 RITM CPM 上的模型执行情况:以交互方式绘制 TET 变量图,分析剖析文件中的相同值,此外还测试 RITM 对模型计算步骤溢出的响应。
简介¶
***实时测试**是研究系统(或其组件)在真实运行条件下的功能--在给定的采样率下,考虑到各种运行任务的同步性,以及真实设备和界面的影响。实时测试用于控制算法的快速原型(或快速原型)、控制对象的半自然建模(也称为HIL,或硬件在环),以及数据采集和信号处理的应用技术中。
根据这一定义,实时测试是通过计算是否符合给定采样周期(模型计算步骤)来确保的。因此,在 RITM CPM 上建模期间,有必要估算和控制任务执行时间(TET,或 任务执行时间),并在不符合实时测试条件的情况下控制 RITM 上的模型执行。
为了解决这些问题,Engee 具有多种功能和工具,我们将在当前示例中进一步使用这些功能和工具。
模型概览¶
本示例的模型基于 CPM RITM:快速入门 示例中的模型。不同之处在于程序块РИТМ Время выполнения
,可在程序块库中找到:РИТМ -> RITM Utilities -> RITM Task Execution Time -> RITM-TET
。
下面是带有程序块RITM-TET
的示例模型。
块RITM-TET
输出端的信号tet
将被记录下来,以便在Engee图形窗口中进行分析。
在上一个示例中,我们已经考虑过在 Engee 中对该系统进行建模,因此在本示例中,我们将只考虑在 RITM CPM 的交互式执行模式下进行建模。
筹备时间的计算¶
将计算空间从 Engee 切换到 RITM KPM 后,打开 模型设置,启用 TET 计算:
此外,让我们打开剖析功能并设置剖析点的数量--这将允许我们将 TET 值保存到 RITM 内存中的文本文件中。模型运行时间为$2\ c$ ,计算步骤为$1\cdot 10^{-3}$ 。为了在建模过程中保存所有 TET 值,有必要设置 2000 个剖析点。
建模结果¶
在 RITM CPM 上以交互模式执行模型后,可在RITM-TET
模块的输出端观察到以下信号变化:
Engee 图形生成器具有初步图形分析所需的功能。要对任务执行时间进行更详细、准确和可视化的分析,我们可以访问 RITM CPM 命令外壳并读取模型剖析文件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 мкс$ ,则 RITM CPM 上的模型计算将部分或完全不符合实时测试原则。
RITM.Real-Time和Engee 实时操作系统(RTOS)1和Engee具有实时监测和控制模型计算的工具。
计算步骤溢出¶
为了测试实时测试控制功能,我们将示例模型中的计算步长设置为$1\cdot 10^{-6} с$ 。
为了在 RITM 部分的模型设置中控制计算步骤的溢出,让我们启用计算步骤溢出检测。首先,我们将计算步骤溢出时的操作定义为 "通知"。当计算步骤溢出时,应用日志窗口中的RITM.Monitor图形用户界面将显示相应的信息 -Overrun detected: rate #0, model time ...!
,但这不会阻止 RITM 执行模型直至最终模拟时间。
如果将计算步骤溢出时的操作设置为 "完成 "并指定了允许溢出的次数,当溢出次数达到指定数 量时,RITM 上的模型执行将自动停止。在这种情况下,应用日志窗口中的RITM.Monitor将显示达到允许溢出的最大数量的信息 -Maximum number of allowed overruns reached, stopping model execution!
并停止模型。
结论¶
在本示例中,我们了解了在 RITM.RealTime、RITM 的模块库和 Engee 设置中控制任务执行时间的可用工具和功能。通过这些功能,可以更好地选择模型设置和/或优化模型本身,以实现实时执行。