canopen部分 5 pdo指令


进行pdo通信,需要配置两个部分:通讯参数和映射参数.
pdo类似于"暗号"通信,在进行通信前,需要配置.
pdo的通道建立就是靠配置通讯参数和映射参数实现的,所以这里是重点.
这些配置信息,是记录在字典里面的.
某款驱动器上位机的界面,用于配置通讯参数和映射参数,
rpdo的通讯参数:

rpdo的映射参数:

上面两张图可以表达为:
RPDO1绑定的通讯参数,索引为1400h 绑定的映射参数,索引为1600h
RPDO2绑定的通讯参数,索引为1401h 绑定的映射参数,索引为1601h
RPDO3绑定的通讯参数,索引为1402h 绑定的映射参数,索引为1602h
RPDO4绑定的通讯参数,索引为1403h 绑定的映射参数,索引为1603h
上面是接收rpdo,也有发送pdo即tpdo:
tpdo通讯参数:

tpdo映射参数:

上面两张图可以表达为:
TPDO1绑定的通讯参数,索引为1800h 绑定的映射参数,索引为1A00h
TPDO2绑定的通讯参数,索引为1801h 绑定的映射参数,索引为1A01h
TPDO3绑定的通讯参数,索引为1802h 绑定的映射参数,索引为1A02h
TPDO4绑定的通讯参数,索引为1803h 绑定的映射参数,索引为1A03h
pdo的发送方式是通信参数决定的.映射参数决定了发送的内容解析.

上面映射参数和通讯参数是存在字典中的内容,具体存在哪里,要看索引.
索引就是字典上的"门牌号".
下面解说ID,也就是can报文的id,在canopen中又叫做cob-id.
这个ID决定了报文的角色.
(即sdo,pdo,nmt报文的分类依靠id).
这里的id也是在cia301中规定好的.
下面还是以驱动器为例,cia301中规定

TPDO的指令是181h,281h,381h,481h.见到这几个开头的报文,就知道它是驱动器发送的TPDO
RPDO的指令是201h,301h,401h,501h.见到这几个开头的报文,就知道它是驱动器接收的RPDO
注:单片机和驱动器的接收发送id是相反的.
举例:
通过can分析仪接收到总线上有报文201,e8 03
注意报文都是十六进制的.
但是由于id是201,所以可以确定是pdo报文,后面的数据必须按照pdo的格式去解析.
又因为201,可以知道,是驱动器要接收的报文.(那一定就是单片机发送的了.)
因为是201,可以解读为200+1,这个1是1号节点,即是控制线上1号驱动器的.
这个时候是不知道哪个pdo通道发送的.
这个时候也不知道e8 03这个数据代表什么,因为我们不知道字典
(字典是存储在驱动器里的,可以去读,然后就知道e8 03 代表什么了).
PDO相当于通道.一般驱动器里面有4个通道(这个是厂家决定的).
比如:
PDO1是第一个通道,至于里面传输的内容(索引,字典决定).
可以是1,2,3,4,…中任意节点中的一个(id / cob-id 决定).
就是单片机的TPDO1可以配置线上任意驱动器中的一个.

在使用PDO这种通信之前,要按照需求配置通信双方的字典,从而引导数据的流动.以TPDO1配置为例:





用sdo配置pdo的过程是固定的:
失能, 使能pdo(失能通讯参数1800h的01h子索引)
类型,(传输类型的配置,通讯参数1800h的02h子索引)
消数,(消去映射参数1A00h里面的个数)
写入数据,(写入映射参数1A00h里面的数据6072h)
写入个数,(写入映射参数1A00h里面的个数)
失能,(失能通讯参数1800h的01h子索引)
(在进行pdo操作之前,要先让can总线进入操作模式,可以发送000,01 00)
实例如下:
