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.

[参考译文] TIDM-Delfino-EtherCAT:过程数据映射。

Guru**** 2609245 points
Other Parts Discussed in Thread: TIDM-DELFINO-ETHERCAT, TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/683485/tidm-delfino-ethercat-process-data-mapping

器件型号:TIDM-Delfino-EtherCAT
主题中讨论的其他器件: TMS320F28379D

您好!

我已成功为 TIDM-Delfino-EtherCAT 运行示例应用。 现在、我想更改项目的处理数据。 我使用 SSC 准备了堆栈代码、并在 Excel 中创建了新应用程序:

接下来、我将 ESI XML 文件放在 EtherCAT 目录中。

我也准备了映射。 代码如下:

void APPL_InputMapping (UINT16* pData)
{
uint16_t j = 0;
uint16_t * pTmpData =(uint16_t *) pData;
uint16_t 数据;


对于(j = 0;j < sTxPDOassign.u16SubIndex0;j++)
{
开关(sTxPDOassign.aEntry [j])
{
/* TxPDO */
情况0x1A00:// 8位
数据= Sinus0x6000;

*(volatile uint16_t *) pTmpData = data;

中断;
}
}
void APPL_OutputMapping (uint16* pData)
{
uint16_t j = 0;
uint16_t * pTmpData =(uint16_t *) pData;//允许字节处理
uint16_t data = 0;
对于(j = 0;j < sRxPDOassign.u16SubIndex0;j++)
{
开关(sRxPDOassign.aEntry[j])
{
/* RxPDO */
情况0x1600://byte (8位)
数据=(*(volatile uint16_t *) pTmpData);
Angle0x7000 =数据;
中断;
}
}

在 CCS 中、我可以看到我的变量已映射:

但是、当我触发 TwinCAT 时、我可以看到错误、这意味着输入过程数据的 SM 配置无效:

我不知道我做了什么错。 这是我第二天与这一目标作斗争、我的想法得到了实现。
您知道我在哪里出错了吗?

我感谢你的任何帮助。
BR、
Dawid。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dawid、
    感谢您对所提供的配套资料的反馈、很高兴它对您有所帮助。

    如果您查看 AN_ET9300文档、SSC 工具提供了该文档。 打开 SSC 工具->帮助->文档-> ET9300应用手册,请参阅第6.5节,除了执行步骤9所需的操作外,还请按照文档中的说明定义 RXPDO 和 TXPDO。 按照本节中的步骤操作、您应该能够执行您想要的操作。

    另一种方法是在 Excel 中添加 PDO 映射和 Syncmanager 分配。

    除了输入/输出之外、我以前在 Excel 中创建了以下条目(就像您所做的那样)。 查看这种方法是否有用、将下面的内容添加到 Excel 中并指导您执行操作、然后保存项目并重新创建 ESI 文件、EEPROM 二进制文件和 SSC 代码、然后尝试。


    //0x16nnRxPDO 映射(0x1600 - 0x17FF)|注意:如果未定义 RxPDO 映射对象、则将自动创建
    0x1600记录RX PDO 映射RX PDO 映射
    0x01UNSIGNED32角度0x70000110MS roRx映射到16位角度

    //0x18nnTxPDO 参数(0x1800 - 0x19FF)


    //0x1AnnTxPDO 映射(0x1A00 - 0x1BFF)|注意:如果未定义 TxPDO 映射对象、将自动创建
    0x1A00记录TX PDO 映射TX PDO 映射
    0x01UNSIGNED32Sinus0x60000110MSroTX映射到16位 Sinus

    //0x1C12SyncManager 2分配|注意:如果未定义此对象、则将自动创建
    0x1C12阵列RX PDO 将RX PDO 分配给 SM2
    0x01UNSIGNED16Entry10x1600MSRWRxentry 1 assignment

    //0x1C13SyncManager 3分配|注意:如果未定义此对象、则会自动创建
    0x1C13数组TX PDO 分配给 SM3的 TX PDO 分配
    0x01UNSIGNED16Entry10x1A00MSRWTXEntry1分配给 Sinus


    希望这对您有所帮助。

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

    Santosh、

    感谢你的帮助。 我在您提到的 ET9300中找到了这一章。 我将尝试通过两种方式进行映射、但我不明白在 Excel 文件中、我应该在您的帖子中键入您提供的其他信息。 我的意思是、我不明白将其放在哪里:

    //0x16nnRxPDO 映射(0x1600 - 0x17FF)|注意: 如果未定义 RxPDO 映射对象、将自动创建
    0x1600记录RX PDO 映射RX PDO 映射
    0x01UNSIGNED32角度0x70000110MS roRx映射到16位角度
    
    //0x18nnTxPDO 参数(0x1800 - 0x19FF)
    
    
    ///0x1AnnTxPDO 映射(0x1A00 - 0x1BFF)|注意: 如果未定义 TxPDO 映射对象、将自动创建
    0x1A00记录TX PDO 映射TX PDO 映射
    0x01UNSIGNED32Sinus0x60000110MSroTX映射到16位 Sinus
    
    //0x1C12SyncManager 2分配|注意: 如果未定义此对象、则将自动创建
    0x1C12数组RX PDO 将RX PDO 分配给 SM2
    0x01UNSIGNED16Entry10x1600MSRWRxEntry 1分配给 Angle
    
    // 0x1C13SyncManager 3分配|注意: 如果未定义此对象、将自动创建
    0x1C13数组TX PDO 将TX PDO 分配给 SM3
    0x01UNSIGNED16Entry10x1A00MSRWTXEntry1分配给 Sinus 

    我是否理解正确、我应该将其放入 Excel 应用程序模板中? 如果是、在哪一行中?

    BR、
    Dawid。

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

    Dawid、
    我在 SSC 工具(SSC -> Tool -> Application -> Create new)中引用 Excel 模板、如果您查看第35行、则会看到一个"+"符号(位于#0x6nnx)、通过单击+符号展开该行、您将看到用于0x1600、0x1A00的选项、 0x1C12和0x1C13。


    此致
    Santosh Athuru

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

    我现在可以看到它。 我之前没有注意到这一点。

    但请告诉我一点-这里是注意的: 注意:如果没有定义 TxPDO 映射对象、将 自动创建  


    如果是自动创建的、那么我手动执行它的区别是什么?

    BR、
    Dawid。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我看到了这一点。 我没能再用它进行实验。 如果我有时间、我将首先输入输入/输出、然后输入 RXPDO 映射和 TXPDO 映射、并生成 ESI 和源文件、查看如何生成对象和代码、并将其与除映射和之外通过进入 RXPDO 和 TXPDO 生成的源文件进行比较 I/O 条目。

    请告诉我、如果您看到任何东西、如果该工具自动生成 RX 和 TX PDO、我可以看到它可以自动执行。

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

    Santosh、

    我尝试将数据放在 Excel 中、正如您提到的。 我遇到此错误:

    这是我的 Excel:

    我键入了您提供的数据。 我有没有做错了?

    BR、
    Dawid。

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

    Dawid、

    在0x1C13下面的行中、您缺少 UINT16之前的一列 S.I (子索引)。 每个条目都应有一个子索引。

    0x1C13数组 TX PDO 分配给 SM3的 TX PDO 分配

    0x01 UNSIGNED16 Entry1 0x1A00 M S RW TX Entry1分配给 Sinus

    此致
    Santosh Athuru

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

    好的、我纠正了这一点、然后它就会点亮。

    存在一些差异。 例如、当我键入 Excel 时、以下是代码、仅为变量:

    /*********
    * 对象0x1600:角度处理数据映射
    /**
    
    *\addtogroup 0x1600 0x1600 |角度处理数据映射
    *@{
    *\brief 对象0x1600 (角度处理数据映射)定义
    */
    #ifdef _OBJD_/**
    
    *\brief 对象条目说明 
    *
    *子索引0
    *子索引1 -参考0x7000.0
    // OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1600[]={ defTY_UNSIGNED8,0x8,ACCESS_READ }, { defTY_UNSIGNED32,0x20, ACCESS_READ};//*子索引1 -参考0x7000.0 *// //* \brief 对象/条目名称 */ OBJCONST UCHAR OBJMEM aName0x1600[]="角度处理数据映射\000" "Subedef 001\000\379" ;#endif //#ifdef _OBJD_#ifnSDK_DATA_SECURIT_SECURIT_ENTREMT16 *\SDTREMPT_SECURIT_SECURIT_ENTREM_ENTREM_SECURIT_INTREM_ENTREM_ENTREM_ENTRIPE * 16 *#if_INTCH_ SECURIT_ENTREM_INTREM_ENTREM_ENTREM_ENTREM_IN /* Subindex1 -参考0x7000.0 */ }obj_struct_packed_end TOBJ1600; #endif //#ifndef _TMDSECATCNCD379_D_ASYCHE_CATSLAVE_ASYNC16_objects_H_** *\brief Object 变量 */ proto TOBJ1600 Angle_CNCD379_D_CCATCHE_CCALTE_PA16_CNQ16_000= 0xPD_CCEST_PAGE_PAGE_00010_ENCHEST_#CNPAGE_ENCCESC16_#10_ENCCESC16_#10_ENCH_ENCH_#_ENCCESC16_ENCH_#10_ENCH_ENCHEST_PAGE_#_ENCHINEST_PAGE= 0xPD_ENCCESP= 0xPD_000 @

    当我键入 Excel PDO 映射时、这里是代码:

    /*********
    * 对象0x1600:RxPDOMapping
    /**
    
    *\addtogroup 0x1600 0x1600 | RxPDOMapping
    *@{
    *\brief 对象0x1600 (RxPDOMapping)定义
    */
    #ifdef _OBJD_/**
    
    *\brief 对象条目说明 
    *
    *子索引0
    *子索引1 -角度
    // OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1600[]={ defTY_UNSIGNED8,0x8,ACCESS_READ }, { defTY_UNSIGNED32,0x20, ACCESS_READ | OBJACCESS_RXPDOMAPPING}};//*子索引1 -角度*/** \SHIPE 对象/条目名称 */ OBJCONST UCHAR Name0x1600[]="RxPDOMATE\000" ;#endift/OBJECT_ENTIF_ENTIM1_ *#OBJECT_ENTRUST_INstructure_END_ SECURIT_INDIC16_ENTRUS_END_*#OBJECT_END_ SECURIT_INIT_INIT_INDIC16_IN_INIT_END_* #endif //#ifndef _TMDSECATCNCD379_D_ETHER_CATSLAVE_ASYNC16_objects_H_/** *\brief Object 变量 */ proto TOBJ1600 RxPDOMapping0x1600 #if defined (_TMDSAVATCNCD379_D_CATSLE_NC1_1) = 0x16*和#DECCANCE_1*= 0x16_CCPASH_( @

    你怎么看?

    BR、
    Dawid。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dawid、
    实际上、它们看起来会产生相同的结果、在这里和那里几乎没有名称更改。

    我在您的 Excel 条目中看到的0x6000和0x7000还有另一个错误。 这些条目应分别位于0x6000和0x7000的下一行。

    例如:-如下所示。

    0x6000变量sinus是主器件和输出 ROM 从器件的输入
    0x01UINT16Sinus0x0MS roTXSinus 输入至主器件


    请更正 Excel 中的0x6000和0x7000条目并重新生成代码。


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

    您是指这种情况吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dawid、
    以上内容看起来不错。 我认为您不需要输入/输出记录中的条目的目标代码(变量)。

    那么、更新的 Excel 和代码是否仍然出现 SM 配置错误?

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

    Santosh、

    明天早上、当我回到实验室时、我将回答这个错误。 我家里没有 EtherCAT 硬件:)

    BR、

    Dawid。

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

    Santosh、

    上述配置仍然存在相同的错误。

    BR、
    Dawid。

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

    Santosh、

    仍然没有结果。 我再检查了一件事。 从 xml 文件加载说明时、我可以看到以下内容:

    但是、当我单击"Load PDO info from device、then Sync Manager and PDO Assignment are different:

    我不知道我在哪里犯了错误。

    BR、
    Dawid。

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

    Dawid、

    您是否为配置生成了新的 ESI 文件、从 TwinCAT 中删除了旧文件并将新文件放入 TwinCAT 文件夹?

    您是否将新的 ESI (EEPROM)映像从主节点编程到了从节点?

    您的输入大小为2个字节、输出为2个字节、那么您是否执行了上述步骤?

    此致

    Santosh Athuru

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

    Santosh、

    1.我为配置生成了新的 ESI 文件,删除了旧文件,并放置了新文件。 然后、我在 TwinCAT 中重新加载了器件说明。
    2.我在从器件上对新的 ESI 映像进行了编程。

    我在另一个地方发现了泄漏。 请仔细阅读下面的信息、因为这是一个重要的注意事项、我认为这是 TI 为 controlCARD 套件开发的 SSC 工具的 C28x 补丁中的一个错误。


    首先、我检查了映射函数和参数:"nPdInputSize"和"nPdOutputSize"-它们应该等于2、但不是。 我在这里签入了它:

    下面是 CCS 观察表达式的屏幕截图:

    在这里、我们应该有0、2、2。 30 = 0x1E、因此这等于 TwinCAT 的我的 AL 状态代码。

    此信息使我进入 APPL_GenerateMapping 函数-这是问题所在。

    下面是  由 SSC 工具生成的 APPL_GenerateMapping 代码片段(带有示例应用的 C28x):

    下面是   由 SSC 工具生成的 APPL_GenerateMapping 代码片段(没有  示例应用程序的 C28x -由 Excel 文件生成的应用程序):

    您可以看到生成的行在 EchoBack 示例中注释掉、位移为4向右而不是3! 当我像在 EchoBack 示例中一样纠正这行时(因此我现在有位移4向右)、一切都将正常触发! TwinCAT 中不再存在问题。

    这个小变化解决了我的问题。

    BR、
    Dawid。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    David、
    是的、您绝对正确、如 TI EchoBack 示例应用中所示、C28上的移位应为4。 但是、该工具也是正确的、在没有 TI C28示例应用的情况下为 C28生成 SSC 代码时、它应该执行的操作。 下面是相关说明。

    App_GenerateMapping 函数是客户必须写入/移植到 C28x 的应用程序文件的一部分。 我们提供了一个带有示例应用(echoback)的补丁、以显示 APPL_GenerateMapping 应如何处理 PDO 大小。 这是拥有我们自己的示例应用程序的全部目的、因为我们无法确定其他应用程序客户将使用什么生成 SSC 代码、而且我们在不了解应用程序的情况下无法修补应用程序函数。

    用户应参阅上面快照中所示的绿色块配置生成的 EchoBack 应用程序函数、并包括 C28端口和/或分析 TI 如何处理输入和输出、并使用用户应用程序生成的 SCC 代码在其应用程序中实现 (无 C28x 示例应用)。

    可在 C28上寻址的最小数据单元为16位、因此客户应用在处理 PDO 和输入/输出时必须意识到这一点。 因此、请参阅 C28提供的回声卡应用、并以类似的方式实现数据处理。

    如果我在用户指南中包含上述详细信息、我将对其进行标记以供添加、那将会有所帮助。


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

    最好将此通知放在 controlCARD EtherCAT 套件的手册中。 例如,手册中有关创建自己的应用程序的章节,其中包含如何映射对象的提示。

    我没有检查 APPL_GenerateMapping(),因为在 SSC 警告生成的原始文件中,有三个位置:InputMapping、outputMapping 和应用程序。 在下一个版本的 APPL_GenerateMapping()中添加警告会怎么样?

    还有一件事-我有点困惑、因为您写的 C28x 是16位、但在 tms320f28379d 产品网站上、我可以看到它是32位的。 我这次不明白什么?

    BR、

    Dawid。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Dawid、
    我们将在用户文档中添加有关创建您自己的应用程序提示的章节。

    在 C28上、允许并可能进行32位访问、我想说的是、除非您使用一些字节内在函数、否则默认情况下不能进行字节访问。 在 C28上、存储器中的单个地址指向16位、而在 cortex ARM M3上、例如:存储器中的单个地址指向一个字节。


    希望这对您有所帮助。

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

    感谢你的帮助。 我认为我们解决了这个主题的主要问题。

    很高兴与您合作:)

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

    使用最新的 SSC 工具(V.1.4.2)时、函数 APPL_GenerateMapping 是正确的、您无需手动调整该函数。

    下载: www.ethercat.org/.../stack_code.aspx

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Rainer、
    感谢您的更新、这对您有所帮助。

    此致
    Santosh Athuru