资料: DS301协议中文文档:https://winshton.gitbooks.io/canopen-ds301-cn/content/chapter5.html
301_v04020005_cn_v02_ro.pdf
总结文档:https://blog.csdn.net/csdn_zhang99/article/details/81251969
LS伺服CANopen手册(详细):
LS伺服CANopen手册 V3.pdf
CANopen协议对CAN协议的封装关系(PDO、SDO、NMT均封装在CAN数据段):
OD(对象字典): 对象字典是通信对象和应用程序对象之间的接口。
PDO(进程数据对象):PDO 的接收不需要消费者的确认,通过DLC设置数据长度(1~8字节),发送数据帧;TPDO发送(生产者),RPDO接收(消费者)。
SDO(服务数据对象):需要应答,直接对帧ID(索引),发送远程帧,DLC无意义
NMT(网络管理对象):帧ID为0x00,D1(数据段Byte1)为CS,D2为NodeID;NMT模块控制不需要应答;NMT 节点保护需要应答;
由生产者发送的 PDO称为发送 PDO(TPDO),同样消费者接收的 PDO 称为接收 PDO(即 RPDO)
CANopen协议的帧id只有11位,即全是标准帧。
COB_ID(11bits)= 功能码(4bits)+Node_ID(7bit)
从软件的角度来说,对象字典本质就是一些数据结构的集合。可以这么理解,把对象字典看做是一本书,CANopen设备的行为准则是要参考这本书的,不管它做什么,只要它的行为要参考对象字典,就必须先查阅字典,再决定要不要做。比如它什么时候发送TPDO,这个行为是需要查询对象字典中对应于TPDO的传输类型以及Event timer。还有就是像PDO映射的原理,比如我要发送的数据,都是去查询这本书,看下它那里写的什么内容,然后我在把这部分内容以PDO的形式发送出去。
对象字典( OD: Object Dictionary)是一个有序的对象组;每个对象采用一个** 16 位的索引值**来寻址,为了允许访问数据结构中的单个元素, 同时定义了一个 8 位的子索引。
对象字典存储在每个CANopen节点的EDS文件中(单片机写入flash),通过SDO服务访问。
分11段不同类别索引,如图
0x1400-0x15FF 设置**RPDO**** **通讯参数
0x1600-0x17FF 设置RPDO映射参数
0x1800-0x19FF 设置TPDO通讯参数
0x1A00-0x1BFF 设置TPDO映射参数
RPDO映射例子:
TPDO映射例子:
SDO 主要用来访问节点的对象字典(OD),操作分成读字典操作和写字典操作,CANOpen的节点至少需要支持SDO_Server。对象字典是CANOpen节点的数据组织形式,包含了 CANOpen节点的各个参数和数据,比如,心跳报文的发送频率、系统启动次数、节点的通信参数等等等等。可以说,SDO是用来设置CANOpen节点的各个运行参数的。
从CANopen协议上看,最大支持127个节点
类似串口的一发一回模式,主站发送请求帧,从站回复应答帧
SDO中的COB-ID有2个,分为:
Client ==> Server
Server ==> Client
1、假如CAN节点A通过SDO去访问CAN节点B,那么A就是Client,B就是Server;
2、则在A的对象字典里,设置Client==>Server的COB-ID为B的COB-ID
3、且对于A的对象字典,其Server==>Client的COB-ID还是B的COB-ID
4、对于B来说,只有B是Client时才会用到这2个COB-ID,如果B通过SDO去访问A,那么B的Client==>Server和Server==>Client的COB-ID就是A的COB-ID了。
例子:(11位帧ID段(功能码+节点ID)+8字节数据段)
SDO通讯具体过程分解:
LS低压伺服驱动器CANopen 状态机 20191101pdf.pdf
1)NMT 模块控制( NMT Module Control)
只有 NMT-Master 节点能够传送 NMT Module Control 报文。 所有从设备必须支持 NMT 模块控制服务。NMT Module Control 消息不需要应答
NMT帧cs字节定义:
#define NMT_Start_Node 0x01
#define NMT_Stop_Node 0x02
#define NMT_Enter_PreOperational 0x80
#define NMT_Reset_Node 0x81
#define NMT_Reset_Comunication 0x82
2) NMT 节点保护( NMT Node Guarding)
通过节点保护服务, NMT 主节点可以检查每个节点的当前状态, 当这些节点没有数据传送时这种服务尤其有意义。
状态决定