[CANopen]理清PDO映射

CANopen中发送/接收的数据称之为过程数据(PDO)。这里以发送为例,理清其中的映射关系。

配置

发送使用TPDOx,可以使用TPDOx如下:

项目 通讯参数-字典Index 映射参数-字典Index
TPDO1 0x1800 0x1A00
TPDO2 0x1801 0x1A01
TPDO3 0x1802 0x1A02
TPDO4 0x1803 0x1A03

使用首先就得配置TPDOx,其中通讯参数决定“怎么发送数据”,其定义及其作用如下:

typedef struct{
               UNSIGNED8      maxSubIndex;/*子索引数量=6*/                                
               UNSIGNED32     COB_IDUsedByTPDO;/*其实是Function Code(COB-ID = Funcode+NodeID)*/  
               UNSIGNED8      transmissionType;/*发送类型:SYNC触发(同步)、周期发送(异步)、远程请求、特定*/  
               UNSIGNED16     inhibitTime;/*X*100us 间隔时间;0-禁止功能*/  
               UNSIGNED8      compatibilityEntry;/*not used*/  
               UNSIGNED16     eventTimer;/*X*1ms 周期发送间隔;0-禁止功能*/  
               UNSIGNED8      SYNCStartValue;/*SYNC报文起始值*/  
               }OD_TPDOCommunicationParameter_t;

映射参数决定了“发送什么数据”,其定义及其作用如下:

typedef struct{
               UNSIGNED8      numberOfMappedObjects;/*实际使用几个映射*/  
               UNSIGNED32     mappedObject1;
               UNSIGNED32     mappedObject2;
               UNSIGNED32     mappedObject3;
               UNSIGNED32     mappedObject4;
               UNSIGNED32     mappedObject5;
               UNSIGNED32     mappedObject6;
               UNSIGNED32     mappedObject7;
               UNSIGNED32     mappedObject8;
               } OD_TPDOMappingParameter_t;

举例

TPDO1,对通讯参数Index=0x1800,映射参数Index=0x1A00进行配置:
在这里插入图片描述
“怎么发送数据”:发送的COD-ID =0x180+NodeID;采用周期发送(异步)的方式,周期为32ms。
在这里插入图片描述
“发送什么数据”:字典Index为0x6000,subIndex为0,数据长度为0x20(32)bits/4字节的位置上的数据。再加上字典Index为0x6100,subIndex为0,数据长度为0x20(32)bits/4字节的位置上的数据。刚好8字节填满了整个数据帧。

你可能感兴趣的:(CANopen)