ZHCAEA5 August   2024 AM625 , AM6442 , AM69 , TDA4VM

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
    1. 1.1 什么是 EtherCAT?
    2. 1.2 什么是 PLC?
    3. 1.3 什么是 CODESYS?
  5. 2评估平台和方法
    1. 2.1 硬件
    2. 2.2 软件
    3. 2.3 测试拓扑
  6. 3性能指标
    1. 3.1 Cyclictest 性能指标
    2. 3.2 EtherCAT 性能指标
  7. 4优化
    1. 4.1 已实现的优化
    2. 4.2 未来注意事项
      1. 4.2.1 设置最大 CPU 频率
      2. 4.2.2 隔离核心
      3. 4.2.3 设置 CPU 亲和性
      4. 4.2.4 隔离核心并设置 CPU 亲和性
      5. 4.2.5 Ksoftirqs 到 FIFO
      6. 4.2.6 增加实时调度时间
      7. 4.2.7 禁用 irqbalance
      8. 4.2.8 使用独立的网络接口卡 (NIC)
      9. 4.2.9 禁用不必要的驱动程序
  8. 5总结
  9. 6参考资料
  10. 7附录 A:如何使用 CODESYS 协议栈将 TI 嵌入式处理器设置为 EtherCAT 控制器
    1. 7.1 硬件要求
    2. 7.2 软件要求
    3. 7.3 硬件设置
    4. 7.4 软件设置
      1. 7.4.1 Windows PC 设置
      2. 7.4.2 EtherCAT 控制器设置
      3. 7.4.3 CODESYS Development System 项目
      4. 7.4.4 执行
    5. 7.5 如何查看性能测量结果
      1. 7.5.1 附录 A 资源
  11. 8附录 B:如何在 CODESYS 协议栈上实现无限运行时间
    1. 8.1 CODESYS 许可背景
    2. 8.2 获取 CODESYS 许可证
    3. 8.3 激活 CODESYS 许可证
      1. 8.3.1 背景
      2. 8.3.2 建议的步骤
    4. 8.4 验证已应用 CODESYS 许可证
      1. 8.4.1 验证已应用 CODESYS 许可证的已知问题

已实现的优化

通过禁用多个后台进程并调整在 ARM64 A53 核心上 Linux 中运行的 CODESYS 特定进程,调整了 AM62x 和 AM64x EtherCAT 控制器,实现了更好的性能。从 AM62x 的实时“tisdk-default-image”软件开发套件 (SDK) 版本 09.01.00.08 映像中禁用的主要后台进程有 ti-apps-launcher、pulseaudio、systemd-timesyncd、telnetd、weston 和 containerd。最初激活这些后台进程是为了展示与 EtherCAT 应用程序无关的功能。禁用这些进程的目的是减少四个 A53 核心上的部分 CPU 负载,并将映像配置为接近 AM62x 的实时“tisdk-thinlinux-image”。这样做是因为当将默认映像与精简映像进行比较时,周期时间性能略有改善,从大约 350µs 的平均值更改为大约 250µs。

对周期时间的一个主要影响是名为 Codemeter 的 CODESYS 许可应用程序。大多数计划使用 CODESYS 的 EtherCAT 应用程序都需要使用正在运行的 Codemeter 来实现无限的运行时间。在没有许可应用程序的情况下,CODESYS 只能运行约 30 分钟,然后系统会终止,必须重新启动(另请参阅 CODESYS Control Standard S)。Codemeter 是在接近真实 EtherCAT 用例的环境中进行基准测试的必备应用程序;不过,大约每隔 5-6 分钟,应用程序的 CPU 负载就会激增到接近 100%,这随后会导致周期时间(从大约 350µs 到大约 1000µs)和抖动激增。随着时间的推移,可通过在 Linux 中监控 htop 以及在 CODESYS Development System GUI 中监控周期时间和抖动,可观察到这种激增。

AM6442, AM625, AM69 htop 中的 Codemeter CPU 激增图 4-1 htop 中的 Codemeter CPU 激增
AM6442, AM625, AM69 Codemeter CPU 负载激增导致的最大周期时间激增图 4-2 Codemeter CPU 负载激增导致的最大周期时间激增

经过进一步调查,Codemeter 的 CPU 亲和性似乎默认在 CPU 0、2 和 3 之间变化,并且从不使用 CPU 1。CPU 1 是默认用于运行 CODESYS 控制应用程序的核心。通过将 CPU 亲和性更改为 CPU 1,巨大的周期时间峰值(约 1000µs)减小到约 500µs。图 4-3 中高于 400µs 的一般峰值是由于在这些时间段内运行 htop 所致。关于 CPU 亲和性变化为何会降低峰值的详细信息仍不清楚。

AM6442, AM625, AM69 绿色框中为在 CPU 1 上运行的 Codemeter 应用程序及其产生的 KPI,红色框中为在 CPU 0 或 3 上运行的 Codemeter 应用程序图 4-3 绿色框中为在 CPU 1 上运行的 Codemeter 应用程序及其产生的 KPI,红色框中为在 CPU 0 或 3 上运行的 Codemeter 应用程序

另外需要注意的是,表 3-1 中报告的所有硬件平台的最大周期时间是与 EtherCAT 协议启动的大约 3 秒周期时间相关的异常值。此周期时间异常值包括设备从“Init”状态循环到“Operational”状态的几个状态的时间(基于 EtherCAT 状态机 (ESM)),启动配置通过非循环邮箱协议从 EtherCAT 控制器发送到 EtherCAT 设备(另请参阅 EtherCAT | 系统描述)。因此,性能的焦点是设备处于稳定状态时。通过 CODESYS Development System 界面注销并重新登录时,也会出现类似的循环时间峰值。在分析中排除此用例的前提是,在实际工厂自动化环境中,不太可能发生持续的注销和登录。

表 3-1 中的“过滤后的最大周期时间”和“过滤后的最大抖动”列指的是过滤掉启动异常值后的近似最大周期时间。这些过滤后的值基于最后 2 小时 46 分钟 39 秒的运行时间,因为 CODESYS Development System 的缓冲区大小仅足以存储这段时间的数据点。

AM6442, AM625, AM69 作为 EtherCAT 控制器的 AM62x 上启动期间的 KPI图 4-4 作为 EtherCAT 控制器的 AM62x 上启动期间的 KPI
AM6442, AM625, AM69 作为 EtherCAT 控制器的 AM69 上启动期间的 KPI图 4-5 作为 EtherCAT 控制器的 AM69 上启动期间的 KPI

AM62x 的这些优化的最终结果快照可以在图 4-6 中看到,其中最大周期时间是 700µs 的异常值,过滤后的最大周期时间可以估计为大约 500µs。仍观察到一些周期性周期时间增加,有待调查。

AM6442, AM625, AM69 作为 EtherCAT 控制器的 AM62x 上 63 小时运行时间后的 KPI
注: 包括每 1 到 1.5 分钟增加一次周期性周期时间,如红色框所示。
图 4-6 作为 EtherCAT 控制器的 AM62x 上 63 小时运行时间后的 KPI

总体而言,AM64x 的性能低于 AM62x,部分原因是从 4 个 A53 核心减少到 2 个 A53 核心,导致用于运行 EtherCAT 所需的各种任务和其他后台任务的核心更少。这种核心之间的差异会影响 CPU 负载,导致 AM64x 所有核心的总体 CPU 负载高于 AM62x。高速缓存大小、DDR 速度和总线宽度的差异也是造成 AM64x 和 AM62x 之间性能差异的一个因素。此外,在 AM64x 平台上观察到,在 63 小时的运行时间内,偶尔会出现 542µs 到 1032µs 之间的周期时间峰值。导致 AM64x 上出现此行为的具体原因仍在调查中。

AM6442, AM625, AM69 作为 EtherCAT 控制器的 AM64x 上的 KPI 如 CODESYS Development System 中所示图 4-7 作为 EtherCAT 控制器的 AM64x 上的 KPI 如 CODESYS Development System 中所示
AM6442, AM625, AM69 作为 EtherCAT 控制器的 AM64x 的 CPU 负载如 CODESYS Development System 中所示图 4-8 作为 EtherCAT 控制器的 AM64x 的 CPU 负载如 CODESYS Development System 中所示
注: 这些是将所有 CODESYS 相关任务设置为 CPU 0 的 CPU 负载结果。