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.

[参考译文] TMS320F28P650DK:EtherCAT:最终地址为奇数时、上传 SDO 失败

Guru**** 2958140 points

Other Parts Discussed in Thread: TMS320F28P650DK, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655105/tms320f28p650dk-ethercat-failed-to-upload-sdo-when-final-address-is-odd

器件型号: TMS320F28P650DK
主题: C2000WARE 中讨论的其他器件

尊敬的 TI 专家:

 

我们有一个应用可以使用 TMS320F28P650DK 替代旧产品。 我们发现新器件无法使用旧 XML 进入 OP 的问题。

我们确定问题在于、如果 SM1 长度为奇数、EtherCAT 主站将无法读取 SDO 响应。  

我们旧 xml 的配置如下所示、

SM1 的起始地址为 0x1110、长度为 253。 最后一个字节是奇数地址。 当长度更改为 252 时、驱动器可以进入 OP。

我们使用的是 Beckhoff SSC 协议栈。 在函数 MBX_CopyToSendMailbox() 中、有 hw_EscWriteWord (u16dummy、(u16EscAddrSendMbx + u16SendMbxSize - 2);  

这会将最终虚拟字节写入 SM1。 我们能够确定、如果 (u16EscAddrSendMbx + u16SendMbxSize - 2) 为偶数、则 ESC 寄存器 0x80c、则存储器 0x50406 变为 0x0232、在执行此行之后由主机成功读取。

Buf 如果 (u16EscAddrSendMbx + u16SendMbxSize - 2) 为奇数、则存储器 0x50406 保持 0x8032、并且 SM1 仍在写入。 它阻止主机读取 SDO 响应。

这是一个非常重要的应用程序、因为旧驱动器仍在使用中、一些客户不愿意更改 XML。  

 

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

    您好、

    我们还测试了如何   依次写入 (u16EscAddrSendMbx + u16SendMbxSize - 4)、(u16EscAddrSendMbx + u16SendMbxSize - 2) 和 (u16EscAddrSendMbx + u16SendMbxSize)。 仍然没有成功。

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

    请向硬件专家咨询、可能会出现延迟。

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

    你好,我还没有收到 来自硬件团队的响应,将在我得到他们的响应后立即 ping。 请预计会延迟几天、

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

    您好、是否可以共享.xml 文件? 或者邮箱配置是否已完成?

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

    您好、我在 SSC 工具中配置了一些与您类似的设置、  

    长度为 253 时、我能够进入工作模式。 只是为了确保您 也使用 TwinCAT 中的最新 ESI 文件更新了 EEPROM 吗?

    还可以更改  

    SDK 中 syctl.h 文件的 SYSCTL_REGWRITE_DELAY。 然后重试。

     

    早期指定的延迟#69 存在问题。

    此致

    库纳尔。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,是否可以共享.xml 文件? 或邮箱配置已完成?

    e2e.ti.com/.../Servotronix_5F00_CDHD_5F00_PC0_5F00_Rv0_5F00_029001_5F00_1_5F00_45_5F00_31_5F00_Simple.xml

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“668159“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655105/tms320f28p650dk-ethercat-failed-to-upload-sdo-when-final-address-is-odd/6387662

    还可以更改  

    SDK 中 syctl.h 文件的 SYSCTL_REGWRITE_DELAY。 然后重试。
    [/报价]

    无差异

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

    你可能已经生成这个 xml 通过 SSC 工具权限,你可以分享完整的 SSC 工具的屏幕截图与你对过程数据 ,邮箱设置所做的更改. (如果你直接使用这个 xml 为 F29 代码 它不工作,你将不得不通过 SSC 工具进行更改,然后使用生成的 xml ,因为内部一些代码更改也发生 在生成的代码中根据 SSC 工具的更改。

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

    xml 文件不是通过 SSC 生成的。 它是一个使用其他 EtherCAT 从站协议栈的非常旧的产品。

    您能否将 SSC 工具的完整屏幕截图与您对处理数据 、邮箱设置所做的更改共享。

    我们只手动更改 EEPROM 值。 我们将尝试通过 SSC 重新生成代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    、长度为 253、我可以进入操作模式。 只是为了确保您 使用 TwinCAT 中的最新 ESI 文件更新了 EEPROM 还是正确的吗?

    尊敬的 Kunal:

    我已经在 P65 控制板上运行了 CPU1_ECHOBACK_SOLUTION。 问题重现如下:

    这意味着 TwinCAT 无法读取 SDO 响应。

    如果我将状态机长度更改为 252、则故障消息更改如下。

    这是因为以下对象未实现写入。

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

    您好,您可以尝试在 SSC 工具中进行 与 xml 设置匹配的更改并尝试. 因为我之前说手动更改 ESI 文件不起作用,因为这些值也会在生成的代码中发生更改。 如果直接使用 ESI 文件、代码将包含会导致错误的默认值。 或者、很难遍历生成的所有代码并手动进行更改。

    虽然我也会尝试复制 xml 的设置,但请期待一些延迟.

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

    尊敬的 Kunal:

    我想我已经注意到了差异。 您需要使用我附加的 XML 文件、而不是生成的文件。 在该示例中、诸如 1C12 等对象不需要 SDO 下载操作。

    您可以使用任何奇数长度。

    但您也可以转至 COE 页面、无法读取所有 SDO。  

    但当长度为偶数时、SDO 正常

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

    您好、如果直接使用 xml 文件、则不会发生代码更改。 除了生成 ESI 文件之外、SSC 工具还生成堆栈文件、这些文件会根据完成的配置更改代码。 您能否详细说明您是如何为早期器件运行该程序的。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid=“622144“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655105/tms320f28p650dk-ethercat-failed-to-upload-sdo-when-final-address-is-odd ]我们正在使用 Beckhoff SSC 协议栈。 在 file mailbox.c 中的函数 MBX_CopyToSendMailbox() 中、有 hw_EscWriteWord (u16dummy、(u16EscAddrSendMbx + u16SendMbxSize - 2); [/报价]

    请注意我们的观察结果。 关键在于写入 SDO 响应无法触发 SYNC 管理器 1、因此 TwinCAT 和从站之间的 SDO 通信是关闭的。

    生成的 xml 不包含 PDO 映射下载、例如对象 1C12h。

    [引述 userid=“622144“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655105/tms320f28p650dk-ethercat-failed-to-upload-sdo-when-final-address-is-odd/6390047

    我已经在 P65 控制板上运行了 CPU1_ECHOBACK_SOLUTION。 问题重现如下:

    这意味着 TwinCAT 无法读取 SDO 响应。

    [/报价]

    因此、您可以使用生成的 xml 执行 OP。 但是、如果没有 PDO、我们的产品将毫无用处、问题仍然存在。

    另一种使用生成的 xml 重现问题的方法是、我之前提到过、

    [引述 userid=“622144“ url=“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1655105/tms320f28p650dk-ethercat-failed-to-upload-sdo-when-final-address-is-odd/6390089

    但您也可以转至 COE 页面、无法读取所有 SDO。  

    但当长度为偶数时、SDO 正常

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

    我看到你们仍然不明白这个问题。

    28388 和 p65 的区别在于、对于 28388、我们在 ARM 内核中实现了 ESC 堆栈。 最小大小为 1 字节。

    在 28388 工程的 ethercat_slave_hal.c 文件中:

    //*****************************************************************************
    //
    // ESC_writeWordISR
    //
    //*****************************************************************************
    void
    ESC_writeWordISR(uint16_t wordValue, uint16_t address)
    {
        //
        // Write 16-bit word into ESC memory
        //
        HWREGH(ESC_BASE + address) = wordValue;
    }

    但在 P65 中、最小大小为 2 字节。 我认为、当长度为奇数时、这导致了 ESC 对同步管理器的响应不正确。

    EtherCAT_subdevice_CPU2_hal.c 文件中

    //*****************************************************************************
    //
    // ESC_writeWordISR
    //
    //*****************************************************************************
    void ESC_writeWordISR(uint16_t wordValue, uint16_t address)
    {
        //
        // Write 16-bit word into ESC memory
        //
        HWREGH(ESC_BASE + (address / 2U)) = wordValue;
    }

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

    您好、有任何更新吗? 问题已经是两个半星期了。

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

    请找到所附的补丁。  从 CCS 工作区中的 c2000ware SDK 导入 CPU 回显 EtherCAT 示例和栈。 在工作区文件夹中复制补丁(在 CCS 中右键单击您的项目,然后选择在文件资源管理器中显示)。   运行“git Apply ethercat_odd.patch“ 

    /cfs-file/__key/communityserver-discussions-components-files/171/ethercat_5F00_odd.patch

    (客户响应后更新的补丁。)  

    此致

    库纳尔。

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

    您好、  

    我使用 Git 和 GNUWIN32 补丁文件进行测试、所有返回结果都会失败。

    工作区文件夹是“D:\git\lvd2“、我在工程文件夹内外进行了测试。

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

    让我检查意味着,而我将共享文件.

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

    e2e.ti.com/.../ethercat_5F00_odd.patch
    你能检查一下,并告诉我,如果这是工作. 运行“git Apply ethercat_odd.patch“

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

    另外、确保您使用的是 6.00.01.00 c2000ware SDK。

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

    如果您有不同版本的 SSC 工具、则需要手动进行更改、然后。 您可以参考补丁以了解要进行的更改、但没有太多更改。

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

    我对 V5.12 进行了更改、结果相同。 PELAS 共享一个解析奇数地址的工程、可在 p65 controlCARD 上运行。 谢谢。

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

    您好,不幸的是,由于 Beckhoff 的限制,我们无法共享该项目。此外,我们无法访问 5.12,请尝试切换到 5.13。 我随附了显示工作案例和非工作案例的视频。 如果切换到 5.13 后您仍有问题、我们很乐意为您提供电话支持。



    我正在分享视频以展示工作场景。

    e2e.ti.com/.../working.mp4

    此致

    库纳尔。

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

    尊敬的 Kunal:

    我们已经确定了问题。 我们还需要一个名为 readOddByte 的函数、如 writeOddByte。

    存在 2 个问题、一个问题是 SM0 的奇数长度、另一个问题是 SM1 的奇数长度。 我们只能确定第二个问题。

    该代码似乎适用于任何版本的 SDK。

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

    尊敬的建宇:  

    很高兴听到它得到修复。 因此、除了共享修补程序之外、您还必须进行一些其他更改(除了

    MBX_CopyToSendMailbox 和  MBX_CheckAndCopyMailbox 函数)?  

    您能告诉我们还有哪些更改、以便我们在下一个版本中进行修复吗? 还可以修复 5.12 版本或您切换到最新版本。

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

    我更改了 SSC V5.12 中的代码。 C2000 SDK 5.05

    由于 COE 消息 远远少于 253 字节、因此我的修复不太常见、仅考虑虚拟字节。 密钥是 MBX_CheckAndCopyMailbox 和 MBX_CopyToSendMailbox 都将受到奇数地址的影响。

    在 Mailbox.c 中、考虑虚拟读取和虚拟写入的奇数地址。

    在 ethercat_subdevice_cpu1_hal.c 中、添加新函数 readoddword、writeoddword 与 shared 相同。

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



    好的、谢谢。 (在我的补丁中,我实际上处理了它,我没有创建另一个 readodd 函数的原因是因为我们只想读取最后一个字节来触发。 因此,即使我们最终阅读了比什么是需要它应该是好的。 将再次与更多有关此问题的专家联系。)  

    此致

    库纳尔。


    抱歉,你的答复后,这被删除不知何故,再次添加它,这样它不会混淆其他用户.