Engee 文档
Notebook

KPM RITM:实时控制

本示例通过任务执行时间 (TET) 控制来检查 RITM CPM 上的模型执行情况:以交互方式绘制 TET 变量图,分析剖析文件中的相同值,此外还测试 RITM 对模型计算步骤溢出的响应。

简介

一旦建立了 RITM 实时机器及其工作环境,就可以直接应用快速原型 和/或半自然建模 技术。这些方法和其他方法都以实时测试为基础。

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

根据这一定义,实时测试是通过计算是否符合给定采样周期(模型计算步骤)来确保的。因此,在 RITM CPM 上建模期间,有必要估算和控制任务执行时间(TET,或 任务执行时间),并在不符合实时测试条件的情况下控制 RITM 上的模型执行。
为了解决这些问题,Engee 具有多种功能和工具,我们将在当前示例中进一步使用这些功能和工具。

模型概览

本示例的模型基于 CPM RITM:快速入门 示例中的模型。不同之处在于程序块РИТМ Время выполнения ,可在程序块库中找到:РИТМ -> RITM Utilities -> RITM Task Execution Time -> RITM-TET
下面是带有程序块RITM-TET 的示例模型。

image_2.png

RITM-TET 输出端的信号tet 将被记录下来,以便在Engee图形窗口中进行分析。 在上一个示例中,我们已经考虑过在 Engee 中对该系统进行建模,因此在本示例中,我们将只考虑在 RITM CPM 的交互式执行模式下进行建模。

筹备时间的计算

将计算空间从 Engee 切换到 RITM KPM 后,打开 模型设置,启用 TET 计算:

image_3.png

此外,让我们打开剖析功能并设置剖析点的数量--这将允许我们将 TET 值保存到 RITM 内存中的文本文件中。模型运行时间为$2\ c$ ,计算步骤为$1\cdot 10^{-3}$ 。为了在建模过程中保存所有 TET 值,有必要设置 2000 个剖析点。

建模结果

在 RITM CPM 上以交互模式执行模型后,可在RITM-TET 模块的输出端观察到以下信号变化:

image.png

Engee 图形生成器具有初步图形分析所需的功能。要对任务执行时间进行更详细、准确和可视化的分析,我们可以访问 RITM CPM 命令外壳并读取模型剖析文件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 мкс$ ,则 RITM CPM 上的模型计算将部分或完全不符合实时测试原则。
RITM.Real-TimeEngee 实时操作系统(RTOS)1Engee具有实时监测和控制模型计算的工具。

计算步骤溢出

为了测试实时测试控制功能,我们将示例模型中的计算步长设置为$1\cdot 10^{-6} с$ 。

为了在 RITM 部分的模型设置中控制计算步骤的溢出,让我们启用计算步骤溢出检测。首先,我们将计算步骤溢出时的操作定义为 "通知"。当计算步骤溢出时,应用日志窗口中的RITM.Monitor图形用户界面将显示相应的信息 -Overrun detected: rate #0, model time ...! ,但这不会阻止 RITM 执行模型直至最终模拟时间。

image.png

如果将计算步骤溢出时的操作设置为 "完成 "并指定了允许溢出的次数,当溢出次数达到指定数 量时,RITM 上的模型执行将自动停止。在这种情况下,应用日志窗口中的RITM.Monitor将显示达到允许溢出的最大数量的信息 -Maximum number of allowed overruns reached, stopping model execution! 并停止模型。

image.png

结论

在本示例中,我们了解了在 RITM.RealTime、RITM 的模块库和 Engee 设置中控制任务执行时间的可用工具和功能。通过这些功能,可以更好地选择模型设置和/或优化模型本身,以实现实时执行。