Skip to main content

抽样分析

当这种测量方法被激活时, CODESYS 生成一个附加任务。该任务在随机时间中断要测量的应用程序任务并确定其当前调用树。

仅多核系统支持采样。作为用户,您必须将自动生成的分析任务分配给任务配置中的单独任务组。此任务组应在与要测量的应用程序任务不同的核心上运行。

将记录的待测任务调用树循环传送到开发系统进行处理。因此,此方法仅在开发系统处于联机模式时才有效。

抽样不适用于确定任务运行时的异常值。当您想在较长时间内确定哪些功能需要大量时间而哪些功能需要很少时间时,请使用该方法。结果是许多任务周期的随机收集。无法检测到单个周期中的一次性影响。

这种测量方法的一个优点是对任务运行时间的影响相对较小,并且可以在运行时间随时打开和关闭测量。

测量的功能

分析任务以无限循环和高优先级运行。在随机时间,分析任务检查要测量的应用程序任务当前是否正在运行。如果它正在运行,则停止并确定当前调用树。将确定的调用树输入到列表(数组)中。

这个调用树列表被循环传输到开发系统,并在那里与之前的测量一起处理。因此,只要开发系统连接到运行时,采样就会运行。

抽样方法用于确定 POU 执行的统计分布。结果视图中显示的运行时间不是直接测量的,而是计算的结果。该计算基于这样的假设,即在调用树中经常发现的 POU 也需要更长的执行时间。 POU 的测量值(样本)占样本总数的部分转换为 POU 调用到任务循环时间的时间部分。

示例:在任务中 T1, 两个程序 P1P2 被调用,任务循环时间为 20 ms。 Profiler 任务执行 100 个样本并确定以下内容:

  • T1 在程序中停止 P1 20 次。

  • T1 在程序中停止 P2 50 次。

  • T1 不运行 30 次。

然后 Profiler 从任务占循环时间的比例中检测以下时间,并在内联视图中显示:

  • P1: 4 毫秒

  • P2: 10 毫秒

  • Idle: 6 毫秒

任务的运行时间显然被测量延长了。这种增加不是恒定的,而是取决于调用树的深度。根据平台的不同,预计运行时间会延长 10 µs – 100 µs,甚至可能更多。

“不合格样品”类别的测量:

重要

确定调用树时可能会发生错误。可能的错误原因:

  • 存储调用树的数组长度太短。在这种情况下,根本没有确定调用树。用户可以在 Profiler 设置中更改数组的长度(调用堆栈的最大深度)。

  • 该任务处于不利状态,例如处于“锁定”状态,因为它当前正在尝试操作 I/O(以访问硬件)。测量失败。

失败测量的数量显示在类别的在线视图中 Failed Samples

如果调用树的列表(数组)足够长,但此类失败测量的数量非常多,那么您应该尝试求助于另一种测量方法。

类别的测量 IDLE

任务当前未运行的测量显示在 IDLE 类别。背景:循环任务的运行时间通常比循环时间短。结果,在周期内有一段时间不运行任务。

缺失样本:

丢失的样本是控制器上的测量记录,未传输到开发系统。

由于调用树数组较大(所需的调用树深度较大)和/或采样率较高(较小 采样间隔),可能并非所有记录的调用树都可以转移到开发系统。但是,由于丢失的测量值在整个周期中的分布方式与传输的测量值相同,因此结果不会被破坏。因此,缺失样本的数量仅显示在 在线的概述 看法 (缺失样本数),而不是作为结果视图中的单独类别(如失败的样本)。但是丢失样本的数量表明采样密度可能过高,这也不必要地增加了循环时间。在这种情况下,您应该相应地修改设置 调用堆栈的最大深度 或为 采样间隔.

关于设置的注意事项

对于抽样方法,有以下特殊项目 设置 Profiler 编辑器的选项卡,在 采样参数 团体:

探查器任务组:包含 Profiler 任务的任务组。

采样间隔:在随机时间执行采样的时间段(制作并存储调用树的记录)。

调用堆栈的最大深度:在采样期间应确定调用树的最大嵌套深度。

通过采样激活和运行分析操作

要求:

  • 一种 CODESYS 具有多个 POU 的项目应用程序以离线模式打开。

  • 在通信设置中配置了与多核控制器的连接,并且控制器正在运行。

  • 用于采样的 Profiler 任务在另一个核心上运行(理想情况下作为单个任务),而不是要测量的应用程序任务。

    因此,在任务配置中,“Profiler”任务组在其自己的核心上创建(最好使用“FixedPinned”属性)。自动生成的 Profiler 任务是唯一分配给该组的任务。要测量的 IEC 应用程序任务的任务组位于另一个内核上。

  • 该应用程序是活动应用程序,可以无错误地编译。

  1. 在应用程序中,您可以创建一个布尔变量,该变量可用于以编程方式激活和停用分析。这是可选的。分析也可以在运行时通过单击 暂停/开始 控制面板中的按钮 在线的 看法。

  2. 点击 添加对象 添加一个 探查器 设备树中应用程序下方的对象。

  3. 双击对象。

    对象编辑器打开。这 _prf_icon_settings.png 设置 选项卡是焦点。

  4. 设置 方法采样.

  5. 在里面 记录 组,选择 任务 您要为其 POU 调用执行时间测量的应用程序的名称。

    为了 健康)状况, 点击 _cds_icon_three_dots.png 按钮并从应用程序中选择要用于打开和关闭值记录的布尔变量。注意:使用这种变量是可选的。如果将该字段留空,则记录每个循环。

  6. 配置以下设置 采样参数 团体:

    • 探查器任务组:任务组的名称,其中包含自动生成的分析任务(参见上文:任务配置中的要求)。

    • 采样间隔:测量之间的时间(推荐:任务循环时间的值)

    • 调用堆栈的最大深度 每次都应该确定。

  7. 在下面 快照外观, 选择 时间格式 用于显示录音。

  8. 点击 在线 → 登录 将应用程序下载到控制器。

    显示器 _prf_img_status.png 显示在状态栏中 CODESYS Profiler.

  9. 点击 在线 → 开始 启动应用程序。

    项目运行,您可以在通常的监控视图中看到当前变量值。

  10. 如果您已将布尔变量配置为开始分析的条件,那么现在将此变量设置为 TRUE.

  11. 现在看看抽样结果。打开 Profiler 对象的编辑器及其 _prf_icon_online.png 在线的 标签。点击 刷新快照 按钮,并在一段时间后再次。

    您会看到要测量的任务的调用树。对于各个块,将显示相应的样本(测量)数量和块调用消耗的确定总时间。