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.

[参考译文] AM6421:EtherCAT 子器件:

Guru**** 2478765 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1439039/am6421-ethercat-subdevice

器件型号:AM6421

工具与软件:

使用的 SDK:ind_comms_sdk_am64x_09_02_00_15 (附带 TI 的多个补丁、用于改善 appingChanged 回调的行为)

在我们的测试中,我们注意到堆栈没有可靠地调用映射更改的回调(由 EC_API_SLV_PDO_registerMapingChanges()注册)。

在初始连接设置期间、一切正常。 但是、当我更改 TwinCAT 中的 PDO (映射)和 SyncManager (分配)时、有时应用程序和堆栈的处理数据映像不再匹配。

在这些情况下、我发现 PDO 的内容不同。 根本原因是未调用映射更改回调。

不幸的是、我还不能提供此不匹配发生的准确模式。 您能否再次检查您的代码、以确保对 PDO 的每次更改都触发此回调?

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

    您好 Kai Schröder

    当 PDO 映射发生更改(添加/删除 PDO 或 PDO 大小)时、仅 触发使用 API EC_API_SLV_PDO_registerMapingChanges ()连接的回调、而当更改 PDO 分配时、则 触发使用 API EC_API_SLV_PDO_registerAssignmentChanges ()连接的回调。

    如果您可以提供您的 PDO 配置详细信息,例如,如果您使用 API EC_API_SLV_PDO_addPaddPadding ()向 PDO 添加填充字节、PDO 数量和 PDO 大小,那么我们可以尝试在我的最后重现相同的行为

    此外、我将再次使用简单的演示 PDO 配置测试这些回调。

    此致、

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

    您好 Harsha、

    以下是有关我的 PDO 的一些详细信息:

    我对输入使用10个 PDO、对输出使用10个 PDO。

    PDO 始终引用固定 SDO (索引和子索引不会更改)、但 ECAT 主器件可以更改大小。 大小范围为1字节至32字节、因此也使用填充。

    上电后的配置始终正常工作。 当我开始重新配置服务器时、会出现不匹配。

    一个问题:是在任何情况下触发 PDO 的映射更改回调,还是仅当在 syncManager 中分配此 PDO 时触发? 是否有办法在对象写入回调中直接获取 PDO 的写入回调?

    BR
    Kai

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

    您好 Kai Schröder

    使用 API  EC_API_SLV_PDO_registerMapingChanges()连接的映射更改回调仅在 使用 PDO 分配对象将此 PDO 分配给同步管理器时触发。

    此致、

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

    您好 Harsha、

    对于 简单演示配置的测试、您是否有任何反馈?

    我仍然有这个问题、堆栈对我来说是一个黑盒、因此我无法调试到这里。

    如果以某种方式可以为 PDO 获取对象写入回调(就像用于 CoE 变量 EC_API_SLV_CBObjWrite_t 的回调)、您是否对我以上的问题有了解答。

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

    您好  Kai Schröder

    我无法重现您提到的问题。  当我在 TwinCAT 中修改 PDO 映射时、会调用回调。

    有。 您可以注册类型为的读取/写入回调函数 EC_API_SLV_CBObjRead _t  EC_API_SLV_CBObjWrite_t 创建变量/数组/记录对象时。  

    回调函数  EC_API_SLV_CBObjWrite_t  在 EtherCAT 主站(TwinCAT)发送对象写入请求时调用。 如果未注册回调函数、则 将 pData 指向的值 直接写入对象条目。 如果注册了回调函数、则回调函数负责将  pData 指向的值复制到对象条目。

    回调函数 EC_API_SLV_CBObjRead _t 、 在 EtherCAT 主站发送对象读取请求时调用。 如果未注册回调函数、则返回对象中包含的值。  如果已注册回调函数、则回调函数负责更新 pData 指向的值。 此  pData 在  SDO 响应数据报中返回。

    此致、

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

    很抱歉、我请求给 PDO 回拨。

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

    您好  Kai Schröder

    PDO 的对象读/写回调不可用。

    此致、

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

    您是否在测试中还对 PDO 使用了具有多个 PDO 和可变大小的 PDO 配置?

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

    您好  Kai Schröder

    有。 我使用多个不同尺寸的 PDO 进行了测试。

    如您所说、当您 多次开始重新配置时、如果不匹配发生、配置始终会在上电之后工作。 我想知道、

    首次重新配置后是否随时发生不匹配? 还是一直在数次之后?

    重新配置完成的频率如何? 完成得太快吗? 您能否在重新配置周期之间添加延迟(仅用于测试)以检查是否观察到相同的行为?

    您能否在此处分享来自堆栈的调试日志?

    此致、

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

    您好 Harsha、

    我做了一些更多的调查:

    当未分配给 SyncManager 的 PDO 被分配和配置(此处的大小不同)时、会发生不匹配。

    TwinCAT 将首先写入 PDO 内容、然后写入 SyncMgr:

    ECAT 堆栈不会为 映射更改发送回调、而仅对分配更改发送回调:

    当我在 TwinCAT 中再次"激活配置"时(从 Preop 再次转到 OP)、PDD 映射回调称为 Correct:

    因此、问题似乎出在堆栈何时更新 PDO 的决策上

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

    您好  Kai Schröder

    感谢您提供的信息。
    如前所述、 仅当 使用 PDO 分配对象将此 PDO 分配给同步管理器时、才会触发 PDO 映射更改回调。 EtherCAT 从站希望首先分配 PDO、然后重新配置 PDO。 在这种情况下、首先触发 PDO 分配已更改回调、然后触发 PDO 映射已更改回调。  

    如果我理解正确、在您的情况下、在将 PDO 分配给 SM 之前会重新配置、然后仅触发 PDO 分配回调。  
    您能否先分配 PDO、然后重新配置分配的 PDO 和测试?

    此致、

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

    您好 Harsha、

    是的、它看起来就像您说的。

    我不可能以相反的方式对其进行测试、因为 TwinCAT 在启动命令中单独安排 PDO 和 SyncMgr 设置。

    但我想从器件实现应该能够处理 Beckhoff/ TwinCAT、因此无论如何对堆栈进行返工都很有意义。

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

    您好  Kai Schröder

    规格。 在这种情况下、 无论是否分配了 PDO、都将触发 PDO 映射更改回调以重新配置所有 PDO。 谢谢。  

    此致、

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

    Harsha 您好、何时提供修复?

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

    您好  Kai Schröder

    我们无法重现您提到的问题。  我确实重新配置 了一个未分配给同步管理器的 PDO、然后我将此重新配置的 PDO 分配给 TwinCAT 中的同步管理器。  我们观察到、首先触发 PDO 映射更改回调、然后按预期触发 PDO 分配更改回调。

    您能否在仅触发 PDO 分配更改回调时共享日志?

    此致、

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

    您好 Harsha、  

    在本例中、对 PDO 的重新配置只改变了大小、这一点很重要。

    索引和子索引未更改。 您是否在测试中尝试过相同的方法?

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

    您好  Kai Schröder

    有。 仅在更改大小后进行了 PDO 重新配置。  
    我使用索引0x1602创建了一个 PDO、该索引只有一个子索引的大小为32位。 我仅更改大小、并将此 PDO 分配给同步管理器分配对象0x1C12。  

    此致、

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

    您好  Kai Schröder

    如果您可以使用 SDK EtherCAT 简单演示例尝试重现此问题、会有所帮助?  

    您还可以创建一个额外的 RxPDO 或 TxPDO、然后更改其大小并对其进行测试。

    此致、