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.

[参考译文] CCS/TMS320F28379D:EtherCAT

Guru**** 2522770 points
Other Parts Discussed in Thread: TMS320F28379D, CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/761995/ccs-tms320f28379d-ethercat

器件型号:TMS320F28379D
Thread 中讨论的其他器件: controlSUITE

工具/软件:Code Composer Studio

我使用 SSC 测试 EtherCAT (v5.11)、使用 TMDSECATCND379D_V1.0中的 SSCToolC28xPatch。

I test with Controllcard (使用 EtherCAT 附加电路板)

I 在 Cia402配置文件中测试 EtherCAT (在直流模式下)

运行模式正常。

但电流速度和电流位置不是反馈。

我想在 Cia402 (运动配置文件)中将 EtherCAT 与 TMS320F28379D 结合使用。

如何使用?

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

    EtherCAT 解决方案目前不支持 CIA402。 如果您想添加该内容、请从 ETG 获取支持。

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

    我在 下一个文件夹中找到 cia402appl 文件(.c、.h)  

    "C:\ti\controlSUITE\development_kits\TMDSECATCND379D_V1.0\SSCToolC28xPatch\src"

    SSC 工具

     在 Synchronization 选项中选中 DC_SUPPORTED、 在 Application 选项中选中 CIAD402_device

    并创建新的从属文件  

    我在  cia402appl.c 中找到"void CiA402_DummyMotionControl(TCiA402Axis *pCiA402Axis)"函数

    我在仿真模式(提供)下使用 TwinCAT_ manager (v3.1) CSP 模式、CSV 模式测试 cia402应用

    我看到 DC_MODE (MOTION ACTION)正在运行

    但我使用 PIC24HJ128GP306在相同的 methode 中测试 Cia402 (微芯片、SSC_SUPPORTED)

    我发现两个平台是不同的

    PIC24HJ128GP306工作正常、但 TMS32028F379D 工作正常、但不够好

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否在 SSC 工具中修改了 CiA402_device 值? 默认情况下、在 SSC 配置文件中禁用 CiA402。
    此 ESI 和演示不支持 CiA402、因为它不受支持。 这是您必须添加和测试自己的内容。
    如果您需要有关让 CiA402正常工作的支持、请在 ETG 论坛上发帖。

    此致
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我测试了 EtherCAT 示例代码(采用 controlSUIT)。
    结果是32位数据的良好变化非常好。
    但 Cia402的工作不是很好
    我的数据读/写错误...


    目标位置的运行范围为0至20
    实际位置为 o 直到目标位置为13.1072 (0x20000)
    当目标位置超过13.1072时、实际位置会改变13.1072...

    我认为低字数据是屏蔽的、或者处理不当
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这听起来可能是器件的屏蔽或字寻址方式。 很遗憾、我目前无法支持对该配置文件进行任何进一步调试。 ETG 将是您的最佳资源。

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

    抱歉。

    我将向您提出另一个问题。

    我发现它不是 EtherCAT 问题、而是 C 编译器问题

    在 Cia402appl.h 文件中

    下一条语句

    /**\brief 数据结构,用于处理通过0x1600 (CSP/csv RxPDO)*/传送的处理数据
    typedef 结构体 struct_packed_start

       uint16 ObjControlWord;/**<\brief 控制字(0x6040)*/
       Int32 ObjTargetPosition;/**<\brief 目标位置(0x607A)*/
       Int32 ObjTargetVelocity;/**<\brief 目标速度(0x60FF)*/
       Int16 ObjModesOfOperation;/**<\brief 运行模式(0x6060)*/
    }struct_packed_end
    TCiA402PDO1600;

    成员类型不相等。

    因此会出现问题

    请检查附加的文件。

    我认为需要结构对齐(1字关键字或选项)。

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

    您可以尝试调整结构、使两个 INT16彼此相邻。 此外、请参阅 echoback 解决方案及其如何使用 OutputMapping 函数中的 pData 指针来分配数据。

    此致
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您建议的两种方法的第一种方法
    这是一种处理结构对齐的简单方法。

    我已经查看了该方法
    在源代码中有很多问题需要修复
    待定状态。



    第二种方法有点难理解。
    请您更具体地解释一下吗?


    我尝试了以下测试。


    ecatappl.c 文件修改


    -->原件
    void PDO_OutputMapping (void)

    HW_EscReadIsr ((((MEM_ADDR *) aPdOutputData)、nEscAddrOutputData、nPdOutputSize);
    appl_OutputMapping ((uint16*) aPdOutputData);



    -->已修改
    void PDO_OutputMapping (void)

    HW_EscReadIsr ((((MEM_ADDR *) aPdOutputData)、nEscAddrOutputData、1);
    HW_EscReadIsr ((((MEM_ADDR *) aPdOutputData+2)、nEscAddrOutputData+2、nPdOutputSize-1);
    appl_OutputMapping ((uint16*) aPdOutputData);



    请参阅随附的文件。
    数据似乎已存储在所需的地址。

    但变量中存储的情况很奇怪。

    我想 ObjTargetPosition 变量为0x4E240001、但结果为0x00014E24 (正如您在屏幕上看到的)

    另一个问题


    在 cia402appl.c 文件中
    void APPL_OutputMapping (uint16* pData)函数




    LocalAxs[AxisIndex].Objects.objTargetPosition = SWAPDWORD (pOutputs->ObjTargetPosition);




    LocalAxs[AxisIndex].Objects.objTargetPosition = 0x00014E24正在检查


    pOutputs->ObjTargetPosition 是到 LocalAxs[AxisIndex].Objects.objTargetPosition 的 eqaul


    SWAPDWORD 关键字不执行操作

    为什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    第二种方法是 F28379D 解决方案如何获取数据。 它使用 pData 指针按字地址进行字地址寻址、并将数据放入变量中的方式。 查看代码、您将看到我的意思。

    我不确定我是否知道您对 SWAPDWORD 提出的要求。 我看不到任何附件。

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

    抱歉  

    我还没有解决这个问题。

    我测试另一个示例代码  

    由 controll西服 EchoBack_Demo 提供的示例代码。

    如指南所建议、无需修改

    我跟了。

    我发现了以下情况。

    在 coepape.c 中  

    /*-----------------
       - 0x1C00
    ------------------------ *
    /**
     *\brief 0x1C00 (同步管理器类型)对象结构
     *
    typedef struct obj_struct_packed_start{
      uint16  u16SubIndex0;/**<\brief SubIndex 0*/
      uint8  aEntry[4];/**<\brief 入口缓冲区(每个 SyncManager 一个)*/
    }obj_struct_packed_end
    TOBJ1C00;
    /**
     *\brief 0x1C00 (同步管理器类型)变量、用于处理对象数据
     *
     * SI 0:4 (4个 SyncManagers 可用)
     * SI1 (SM0):邮箱输出(0x1)
     * SI2 (SM1):邮箱输入(0x2)
     * SI3 (SM2):处理数据输出(0x3)
     * Si4 (SM3):处理数据输入(0x4)
     *
     *
    TOBJ1C00 sSyncmanagertype ={0x04、{0x01、0x02、0x03、0x04};

    /**
     *\brief 0x1C00 (同步管理器类型)条目说明
     *
     *对象是数组,因此只描述第一个条目(用于所有条目)。
     *
    OBJCONST TSDOINFOENTRYDESC   OBJMEM asEntryDesc0x1C00[2]={
      {defTY_UNSIGNED8、0x08、ACCESS_READ}、
      {defTY_UNSIGNED8、0x08、ACCESS_READ}};
    /**
     *\brief 0x1C00 (同步管理器类型)对象名称
     *
    OBJCONST UCHAR OBJMEM aName0x1C00[]="同步管理器类型";
    接下来是工作从站和 Twincatmanager 检查数据
    COE 在线版
    1C00      同步管理器类型      RO   >4<
      1C00:01 子索引001           RO   0x01 (1)
      1C00:02 子索引:002           RO   0x00 (0)
      1C00:03 子索引003           RO   0x02 (1)
      1C00:04 子索引:004           RO   0x00 (0)
    这不是正常数据。
    要获得正确的数据、我认为应该是这样的
    1C00      同步管理器类型      RO   >4<
      1C00:01 子索引001           RO   0x01 (1)
      1C00:02 子索引:002           RO   0x02 (2)
      1C00:03 子索引003           RO   0x03 (3)
      1C00:04 子索引:004           RO   0x04 (4)
    我认为,这是一种由于这一原因而出现的情况。
    0x0001 -> 0x01、0x00
    0x0002 -> 0x02、0x00
    (笑声)
    是否有办法解决这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没错、它不应该是这样的。 这返回到器件的字寻址。
    SSC v5.12对此进行了修复。 生成这些堆栈文件、并为您提供解决方案。 由于许可等原因、我无法将其发布在这里。

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

    CCS v8.3

    编译器 V18.3

    有什么问题?

    继续?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    F28379D 解决方案不支持 SSC v5.12。 它是为 v5.11构建的。 但是、v5.12在字寻址器件方面有多处改进、因此您可以继续并引用代码。 对于您的开发、您可能希望使用 v5.12。 我认为您不需要补丁。

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

    http://file.inaom.co.kr/Customer.asp

    播放连接从设备的 mp4 EtherCAT。

    第一:轴添加出现问题

        也许 Et100 -> TMS320F28379D 数据复制(特别是 0x1600、0x1601、0x1602)

    第二  个对象0x1C00

    在 SSCV512中、使 coeappl.c

    TOBJ1C00 sSyncmanagertype ={0x04、{0x0102、0x0304}};

    因此、数据(0x1c00)显示在 twincatmanager 中、如下所示:

    1C00 syncmanager 类型

         子索引 001            2.

         子索引 002            1

         子索引 003            4.

         子索引 004.           3.

    我认为 这是错误的

    我认为接下来是适当的数据

    1C00 syncmanager 类型

         子索引 001           1

         子索引 002           2.

         子索引 003          3.

         子索引 004.          4.

    以显示上述数据

    TOBJ1C00 sSyncmanagertype ={0x04、{0x0201、0x0403}};

    我认为应如上所述予以更正。   你有什么看法?

    第三 个 SSC V512 Padding

    SSCV512修改了该地址以添加填充数据。

    但 它很好,但位置不好

    下面是 sscv12创建的代码:

    typedef 结构体 struct_packed_start

       uint16 ObjControlWord;/**<\brief 控制字(0x6040)*/
       Int32 ObjTargetPosition;/**<\brief 目标位置(0x607A)*/
    /*ECATCHANGE_START (V5.12) CiA402 3*/
       uint16 Padding16位;/**<\brief 16位填充*/
    /*ECATCHANGE_END (V5.12) CiA402 3*/
    }struct_packed_end
    TCiA402PDO1601;

    我认为应该更正如下。

    typedef 结构体 struct_packed_start

       uint16 ObjControlWord;/**<\brief 控制字(0x6040)*/

    /*ECATCHANGE_START (V5.12) CiA402 3*/
       uint16 Padding16位;/**<\brief 16位填充*/
    /*ECATCHANGE_END (V5.12) CiA402 3*/

       Int32 ObjTargetPosition;/**<\brief 目标位置(0x607A)*/
    }struct_packed_end
    TCiA402PDO1601;

    我认为这些表达式具有正确的结果。

    你有什么看法?

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

    链接文件密码为1234

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

    从左到右

    4386 1234
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我同意您对堆栈的编辑。

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

    我似乎没有回答上一个问题的第一个问题。

    第一:轴添加出现问题

        也许 Et100 -> TMS320F28379D 数据复制(特别是 0x1600、0x1601、0x1602)

    我需要回答这个问题。

    一旦我对其进行测试、它似乎是内存瓶颈问题、包括内存对齐问题。

    此外、
    ecat_def.h 文件具有以下声明:

    #define SIZEOF (x)(sizeof (x)* 2) IZEOF

    我想知道这种说法是否真的合适。

    示例
    cia402appl.c 文件中

    UINT16 CiA402_Init (空)

            HMEMSET (& LocalAxes [AxisCnt]、0、SIZEOF (TCiA402Axis));



    在上面的短语中

    如果修改了 SIZEOF -> sizeof、两个轴将无错误地处于"op"模式。
    但是、第二个轴的 istate 值为0x02、不处于活动状态。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以做的另一件事是拨打电话?
    如果可以、请留下电话号码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好

    E2E 是我为您提供支持的最佳场所。

    我不清楚您的第一个关于数据副本的问题是什么。 请注意、我们目前不支持 CIA402、因此请保留您对 C28x 功能的特定问题。 我们尚未完成支持 CIA402所需的流程。

    EtherCAT 堆栈需要以字节为单位的大小、C28x 的 SIZEOF()是以字为单位、因此它具有2的倍数。
    我不能赞扬它进入 OP 模式的行为、请将此类问题提交 ETG 论坛。

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

    我的问题与 cia402有关。
    但我认为很难在其他地方获得帮助。

    我现在的问题似乎是一件事。

    cia402appl.c 文件

    UINT16 CiA402_Init (空)

    HMEMSET (&LocalAxs[AxisCnt]、0、SIZEOF (TCiA402Axis));

    如上所述、

    DefCiA402AxisObjDic 存储器区域中的前两行数据将被擦除。

    但是  

    HMEMSET (&LocalAxs[AxisCnt]、0、(SIZEOF (TCiA402Axis)-30));

    如上所述、

    DefCiA402AxisObjDic 存储器区域中前两条线的数据将被保留而不被擦除。

    我认为

    它似乎入侵了存储器区域(覆盖)

    0x0000DA00 LocalAx
    0x0000DA00 0001  0001 0001 0000 0000 0001 0000 0000 0000  
    0x0000DA08 0000 0000 0000 0000 0006 0000 0010 6040 0010 0000 0020 607A 0020 60FF 0008 6060 0008 0000 0006 0000
    0x0000DA1C 0010 6041 0010 0000 0020 6064 0020 606C 0008 6061 0008 0000 0000 0000 0000 0002 0000 0001 0002 0000
    0x0000DA30 0000 0000 0000 0000 0000  0000 0000 0000 0002 0000 6C00 88CA 9400 7735 0000  0002 0001 FFFD 0000
    0x0000DA44 0000 0000 0180 0000 C002 0000  0001 0000 0000   0001 0000 0001 0000 0001 0000 0000 0000 0000   0000 0000   0000 0006 0000
    0x0000DA58 0010 6840 0010 0800 0020 687A 0020 68FF 0008 6860 0008 0800 0006 0000 0010 6841 0010 0800 0020 6864
    0x0000DA6C 0020 686C 0008 6861 0008 0800 0000  0000 0002 0000 0001 0002 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000
    0x0000DA80 0000  0002 0000 6C00 88CA 9400 7735 0000  0002 0001 FFFD 0000 0000 0000 0000 0000 0000 C34C  0000
    0x0000DA94 0000  0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000
    0x0000DAA8 0000  0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000
    0x0000DABC 0000 0000 0000 0000


    0x0000DAC0 DefCiA402AxisObjic
    0x0000DAC0 0000 0000  0000 0000 1600 0021 0906 0000 D693 0000 D740 0000  0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DAD4 0000 0000 0000  0000 1A00 0021 0906 0000 D6A8 0000 D750 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DAE8 0000 0000 0000  0000 603F 0006 0700 0000 D85E 0000 D7F9 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DAFC 0000 0000 0000  0000 6040 0006 0700 0000 D861 0000 D7C8 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB10 0000 0000 0000 0000 6041 0006 0700 0000 D864 0000 D7ED 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB24 0000 0000 0000 0000 0000 605A 0003 0700 0000 D867 0000 D5FB 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB38 0000 0000 0000 0000 605B 0003 0700 0000 D86A 0000 D669 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB4C 0000  0000 0000 0000 605C 0003 0700 0000 D86D 0000 D5A5 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB60 0000 0000 0000 0000 605E 0003 0700 0000 D870 0000 D6BD 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB74 0000 0000 0000 0000 0000 6060 0002 0700 0000 D873 0000 D6F9 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB88 0000 0000 0000 0000 6061 0002 0700 0000 D876 0000 D5E0 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DB9C 0000 0000 0000  0000 6064 0004 0700 0000 D879 0000 D611 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DBB0 0000 0000 0000  0000 606C 0004 0700 0000 D87C 0000 D627 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DBC4 0000 0000 0000  0000 6077 0003 0700 0000 D87F 0000 D6D1 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DBD8 0000 0000 0000  0000 607D 0004 0802 0000 D80D 0000 D4B1 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DBEC 0000  0000 0000 0000 607A 0004 0700 0000 D882 0000 D760 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DC00 0000 0000  0000 0000 6085 0007 0700 0000 D885 0000 D63D 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DC14 0000 0000 0000  0000 60C2 002A 0902 0000 D816 0000 D46B 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DC28 0000 0000 0000 0000 0000 60FF 0004 0700 0000 D888 0000 D770 0000 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DC3C 0000 0000  0000 0000 6502 0007 0700 0000 D88B 0000 D653 0000  0000 0000 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
    0x0000DC50 0000 0000 0000  0000 FFFF 0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000 0000 0000
    0x0000DC64 CpuTimer1

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据您提供的内容、我同意它似乎被覆盖。 可能希望通过获取计算的大小并将其与数据对象进行比较来进行跟踪。 有些内容似乎未对齐或馈送错误信息。

    此致
    Chris