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.
如上图所示,为例程中402对象字典对象的默认值
以CSV模式RxPDO中的1602对象为例
第一个数值3,表示这个对象中有3个entry
第一个entry的数值是0x60400010,6040是控制字的Index数值;因为控制字是一个16bit的数值,所以它的subindex0为00;最后的10,即0x10 = 16(十进制)代表控制字的数据位宽为16bit
第二个entry的含义是类似,只不过对象的index和数据位宽不一样
我现在不太理解第三个entry的含义,就是最后的这个0x00000010,
上图为et9300文档中index的定义
index 0x0000看起来位于数据类型区
按照这个理解 0x00000010中最后的0x10,应该是指数据位宽是16个bit
不过这个数据位宽指的什么数据的宽度呢?
这个帖子发在C2000论坛可能不太合适,不过我没有EtherCAT官方论坛的账号,所以麻烦C2000论坛有经验的工程师指点一下
谢谢
您好 看了下您提供的文档 我没有找到这个问题的答案
在ETG论坛发帖一周 目前没有回复 我在ETG的文档中目前还没有找到答案
不过调试过程中感觉每个PDO通道最后的"0x0000 00yy",很像是在进行字节对齐操作
以RxPDO 1600为例
这个结构中有5个数据,数据最宽为32bit 如果最后的8个bit看作是padding,即Entry 5,那么bit位加在一起就是32bit的整数倍
以RxPDO 1601为例
最后的16bit在XML文件中的Comment中写的就是padding,在这个结构中,数据最宽为32bit,算上最后的16bit padding 那么总的bit数也是32bit的整数倍
以我自己增加的cst模式的RxPDO 1603为例
在这个新增加的结构中,数据都是16bit宽的,所以应该不需要增加entry进行补位
从以上举例理解,我现在认为,最后的0x0000 0008,0x0000 0010这样的entry应该是类似结构体中有不同数据宽度时的字节对齐处理
您好 关于对象字典字节对齐方式 我找到了最终的答案
以上为SSC工具生成的ecat_def.h文件,文件中使能了以上两个宏定义 OBJ_DWORD_ALIGN和OBJ_WORD_ALIGN
按照注释理解,如果对象是32bit的,按照32bit对齐;如果对象是16bit的,按照16bit对齐。
在项目的XML文件中,我做了这样的设计:
上图为RxPDO通道,对象有8bit位宽、16bit位宽、32biit位宽3种,按照ecat_def.h中的定义,应设计32bit位宽对齐,所以最后的补位是24bit,即:
16+32+32+16+8+24 = 128(32x4)
上图为TxPDO通道,对象同样有8bit位宽、16bit位宽、32biit位宽3种,按照ecat_def.h中的定义,应设计32bit位宽对齐,所以最后的补位是8bit,即:
16+32+32+16+16+8+8 = 128(32x4)