This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2434:EtherCAT PDO 输入数据延迟或缺失

Guru**** 2873830 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1627086/am2434-ethercat-pdo-input-data-delayed-or-missing

器件型号: AM2434

您好、  

我在 EtherCAT SubDevice /Beckhoff Slave 示例中遇到问题。 我的设置是运行 EtherCAT_subdevice_Beckhoff _ssc... 与 INDUSTRIAL_COMMS_SDK_2025_0_0_8 和 MCU_PLUS_SDK_11_1_0_19 配合使用、可通过以太网电缆直接连接到运行 twincat3 的专用笔记本电脑。 我在直流同步模式和 1kHz CycleTime 下使用 TIESC-004 ESI 配置。 我使用一个简单的 8 位计数器覆盖第一个输入 PDO 条目、如下所示:

void APPL_InputMapping(uint16_t *pData)
{
    uint16_t j = 0;
    uint8_t *pTmpData = (uint8_t *)pData;
    volatile static uint8_t testCounter = 0;

    for(j = 0; j < sTxPDOassign.u16SubIndex0; j++)
    {
        switch(sTxPDOassign.aEntries[j])
        {
            /* TxPDO 1 */
            case 0x1A00:
                *pTmpData++ = testCounter;
                break;

            case 0x1A03: // attention: maybe a non-aligned byte access...
                *pTmpData++ = sAI1Inputs.info1 & 0xFF;
                *pTmpData++ = (sAI1Inputs.info1 & 0xFF00) >> 8;
                *pTmpData++ = (sAI1Inputs.info1 & 0xFF0000) >> 16;
                *pTmpData++ = (sAI1Inputs.info1 & 0xFF000000) >> 24;
                *pTmpData++ = sAI1Inputs.info2 & 0xFF;
                *pTmpData++ = (sAI1Inputs.info2 & 0xFF00) >> 8;
                break;
        }
    }

    testCounter++;
}

此变量在 TwinCAT 内链接并通过测量项目进行记录。 绘制的数据显示延迟或缺失的计数器值、如附加图像中的红线所示。 在主同步 ShiftTime 为 10%时、数据错误最多、而在 40%时最少。
导致这种情况的原因以及如何解决此问题? 此外、此错误仅在直流同步模式下发生、无频率工作而没有问题。
Beckhoff _10%.pngBeckhoff _20%.pngBeckhoff _30%.pngBeckhoff _40%.png

此致

Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lucas:

    感谢您联系我们。

    我会回顾一下、并在今天通过 EOD 与您联系。

    同时、您能否共享此场景的 Wireshark 日志?

    此致、
    Aaron

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Aaron、

    感谢您的快速回复、这是请求的 Wireshark 日志。

    此致、

    Lucas

    e2e.ti.com/.../beckhoff_5F00_twincat_5F00_capture.pcapng.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Aaron、
    您是否有关于此问题的更新?

    此致、
    Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lucas:

    对因地区假日而导致的响应延迟深表歉意。

    感谢您分享日志。 以下是我的初始观察结果(与图一致):

    筛选条件: eth.src == 01:01:05:01:00:00 && ecat.cmd==lrw
    捕获的 LRW 帧总数: 132,996(1ms 循环下~125 秒)

    近况如何

    LRW 数据有效载荷为 7 字节:XX 00 56 34 12 e9 03其中 第一个字节是递增计数器 (子器件的输入 PDO)。 每个周期它应递增 1。

    12 个跳过事件 文件。 每个都遵循相同的模式:

    # 帧(看到跳过) 时间戳 缺少值 图形
    1. 15822 7.610s. 0xe6 跳转+2、然后重复
    2. 27012 13.063s. 0x33 跳转+2、然后重复
    3. 29804. 14.426s. 0x86 跳转+2、然后重复
    4. 48542. 23.466s. 0xd6 跳转+2、然后重复
    5. 49570 23.968s. 0xcc 跳转+2、然后重复
    6. 79744. 38.496s. 0x8c 跳转+2、然后重复
    7. 100464 48.505s. 0xA5 跳转+2、然后重复
    8. 106040 51.231s 0x4b 跳转+2、然后重复
    9. 122997 59.409s. 0x3D 跳转+2、然后重复
    10. 137966. 66.697 秒 0xb5 跳转+2、然后重复
    11. 189265. 91.529 秒 0xb4 跳转+2、然后重复
    12 258244. 124.841s 0xd4 跳转+2、然后重复

    每次活动都有独特的模式

    Normal:   ...prev-1  →  prev  →  X    →  X+1  →  X+2  ...
    Actual:   ...prev-1  →  prev  →  X+1  →  X+1  →  X+2  ...
                                  ^SKIP      ^REPEAT
                               (X never seen)
    

    子器件的输入 PDO 跳过一个值 然后 重复下一个值 会在紧接着的帧中调用。  

    我将尝试在我们的环境中复制它并运行几个测试。

    有关该问题的后续问题:

    1. 您能否提及这是否可立即重现、或者是否在一段时间后(例如数小时,数天或数周)发生?

    此致、
    Aaron

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hallo Aaron,

    感谢您的答复。 错误立即以低于 0.01%的比特率发生、因此每 10 秒大约发生 1 次错误。 我还尝试在 tieschw.c 中以 12000000 的波特率添加打印行,以不会减慢到太多。 打印件显示错误或许多错误、因此看起来不可靠。  

    您是否能够重现我的结果?

    此致
    Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lucas:

    您是否能够重现我的结果?

    我无法重现问题。 我看到在我的测试环境中、计数器在每次 LRW 读取后递增 1。

    我将共享一个调试固件、您可以对其进行测试并告诉我们问题是否仍然存在。 请给我一些时间来打包固件。

    此致、
    Aaron

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Aaron、

    您可以在哪里封装固件? 我真的很喜欢在周末之前看到一些工作的例子:)

    此致
    Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lucas:

    我已离线共享固件。

    此致、
    Aaron

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lucas:

    由于最新的共享固件无法解决问题、我将尝试在我这边重现问题。

    首先、我 使用以下步骤实现了一个计数器作为第一个输入 PDO 条目、并在 TwinCAT 中以 1ms 的周期时间启用直流模式: AM243x 工业通信 SDK:使用 TwinCAT 进行 EtherCAT 子器件设置 — 测试直流同步模式。

    通过查看 Wireshark 日志中来自子器件的 LRW 数据、我看不到任何遗漏的值。

    在启用 Run 之前是否有任何其他 TwinCAT 配置?

    主同步 ShiftTime 为 10%、最少为 40%、最多的数据错误发生。

    这是对绘制图形的观察、还是对 Sync ShiftTime 执行任何额外步骤?

    此致、
    Aaron

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Aaron、

    使用 Beckhoff CX5140 作为主器件进行进一步测试、但不会出现数据问题。 我们最初使用的是具有 2 个隔离内核的笔记本电脑、它可与我们以前使用 OMAP + ET1100 的驱动器配合使用。 模拟 ET1100 函数的 PRU tiesc 更容易出错的原因是否存在?

    此致、

    Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lucas:

    感谢您的澄清。 在本例中、我怀疑 EtherCAT 帧中存在 CRC 错误、这可能会影响三路缓冲区交换、从而从不同的缓冲区传输。

    此致、
    Aaron

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Aaron、

    是否有方法进行验证?

    此致

    Lucas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lucas:

    您可以监测错误计数器寄存器 (0x300 - 0x30C)、特别是 RX 错误计数器和转发的 RX 错误计数器。 您也可以使用 tap 设备(如 ET2000)检查 CRC 错误的存在情况。

    此致、
    Aaron