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.

[参考译文] TMS320F2.8388万D:在EtherCAT上发送32位UINT和FLOAT数据类型PDO

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1094436/tms320f28388d-send-32-bit-uint-and-float-datatype-pdo-on-ethercat

部件号:TMS320F2.8388万D

大家好,

我想发送etherCAT上的32位数据类型。

为了对其进行测试,我创建了一个包含3个变量的SSC应用程序,并 使用CM示例创建了CCS项目:

  • REAL32 FloatingVariable
  • UINT32 集成32Var_1
  • UINT32 集成32Var_1

在我的objects.h中一切看起来都很好我可以看到我定义的变量:

以及TwinCAT:

现在,我 不确定实施输入映射的最佳方式是什么。

我一直在使用uint16,所以我只是增加指针,因为pData是UINT16*:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
void APPL_InputMapping(UINT16* pData)
{
#if _WIN32
#pragma message ("Warning: Implement input (Slave->Master) mapping")
#else
#warning "Implement input (Slave->Master) mapping"
#endif
*pData = Myvar0x6000.Var1;
pData++;
*pData = Myvar0x6000.Var2;
pData++;
*pData = Myvar0x6000.Var3;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

但是现在我使用的是real32和UINT32,我不确定如何实现它。 我只是尝试移动指针两次 以获得32位,但它不起作用。  

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
void APPL_InputMapping(UINT16* pData)
{
*pData = DataTest0x6000.FloatingVariable;
pData++;
pData++;
*pData = DataTest0x6000.Integer32Var_1;
pData++;
pData++;
*pData = DataTest0x6000.Integer32Var_2;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

如果您有使用uint16以外的其他数据类型的示例,请告诉我。

谢谢你

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

    您好,

    设备专家不在办公室,直至21日星期四。  请在本周结束前回复。

    此致

    Lori

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

    您好,Alexis,

    I2000 floate-datatype-PDO-on-EtherCAT"]I一直2000一直在109.4436万在使用2.8388万使用uint16,所以我只是在增加一个指针[/INT16*:

    UINT16案例中递增+1是否有效? CM内核是可字节寻址的,所以我认为你实际上必须增加两倍。

    有关CM示例中的UINT8,UINT16和UINT32数据处理,请参阅下面的代码片段。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    UINT8 *pTmpData = (UINT8 *)pData;
    switch(sTxPDOassign.aEntries[j])
    {
    //
    // TxPDO 0 (Data from ESC to master)
    //
    case 0x1A00U:
    //
    // Switches (8-bit (Byte) Data)
    //
    data = ((Switches0x6000.Switch8 << 7U) |
    (Switches0x6000.Switch7 << 6U) |
    (Switches0x6000.Switch6 << 5U) |
    (Switches0x6000.Switch5 << 4U) |
    (Switches0x6000.Switch4 << 3U) |
    (Switches0x6000.Switch3 << 2U) |
    (Switches0x6000.Switch2 << 1U) |
    Switches0x6000.Switch1);
    *(volatile UINT8 *)pTmpData = data;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    最佳,

    Kevin

    编辑:由于pData是UINT16*,因此您拥有的可能是OK的。 这可能是仍然需要的排种。

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

    您好,Kevin:

    我从未想过CM是与C2000不同的架构。 对于 UINT16,增加+1是很有效的(我建议你在自己的端尝试)。

    对于32位,我们使用temp 32指针,它可以执行以下任务:
    void APPL_InputMapping(UINT16* pData)
        

      UINT32 *tempdata =(UINT32*) pData;   
       *tempdata = MyData0x6000.VAR1;
       *tempdata ++;
       *tempdata = MyData0x6000.VA2;


    }

    我将看看这个示例,但我仍然很好奇为什么在生成文件的过程中它不会生成输入和输出映射。 我的意思是,PDO在Excel工作表中已知。