CanOpen报文详细分析
一、SYNC
同步帧,由同步生产者定期广播同步帧,为网络提供基本的同步机制。
- CAN-ID:0x80(功能码)
- 帧类型:标准数据帧
- DLC:0
- 数据域:无
二、Error Control
1. 节点守护(node guard)
NMT主机定期向NMT从机发送节点守护请求报文,NMT从机返回自己当前的NMT状态。
NMT主机:
- CAN-ID:0x700(功能码) + Node-ID
- 帧类型:标准远程帧
- DLC:0
- 数据域:无
NMT从机:
- CAN-ID:0x700(功能码) + Node-ID
- 帧类型:标准数据帧
- DLC:1
- 数据域:
- 最高位(bit 7):翻转位,首次是0
- 低7位 [6, 0]:心跳生产者的状态
2. 心跳(heartbeat)
心跳生产者周期性的发送心跳报文到CAN总线上,由对应的心跳消费者接收,心跳生产者在字典0x1017配置,心跳消费者在字典0x1016配置(低16位周期,高16位节点ID)
- CAN-ID:0x700(功能码) + Node-ID
- 帧类型:标准数据帧
- DLC:1
- 数据域:
- 最高位(bit 7):保留
- 低7位 [6, 0]:心跳生产者的状态
三、PDO
报文分析的话就按触发方式来区分吧。大概可以分为以下几种:
- 无外部报文触发
- 定时触发(设置事件定时器)
- 发生改变触发
- 同步帧触发
- 远程帧触发
1.无外部报文触发
- CAN-ID:功能码(见下表) + Node-ID
- 帧类型:标准数据帧
- DLC:数据大小
- 数据域:dlc个8bit数据
2.同步帧触发
请求方:发送同步帧,详见同步帧
响应方:
- CAN-ID:功能码(见下表) + Node-ID
- 帧类型:标准数据帧
- DLC:数据大小
- 数据域:dlc个8bit数据
3.远程帧触发
请求方:
- CAN-ID:功能码(见下表)+ Node-ID
- 帧类型:标准远程帧
- DLC: 0
- 数据域:无
响应方:
- CAN-ID:功能码(见下表) + Node-ID
- 帧类型:标准数据帧
- DLC:数据大小
- 数据域:dlc个8bit数据
功能码表
COB | 功能码值 |
---|---|
NMT | 0x0 |
SYNC | 0x80 |
TPDO1 | 0x180 |
TPDO2 | 0x280 |
TPDO3 | 0x380 |
TPDO4 | 0x480 |
SDO(tx) | 0x580 |
RPDO1 | 0x200 |
RPDO2 | 0x300 |
RPDO3 | 0x400 |
RPDO4 | 0x500 |
SDO(rx) | 0x600 |
HeartBeat | 0x700 |
四、SDO
SDO的download和upload是相对于对象字典(OD)作为参照物的。
SDO启动报文数据域格式:
- 第一字节:CS
- 第二字节:OD索引低8位
- 第三字节:OD索引高8位
- 第四字节:OD子索引
1. Fast SDO
Fast SDO旨在用一次报文来完成数据的传输,SDO的第一个报文为启动报文,Fast SDO就是利用启动报文只用了4个字节的数据域来与其他设备建立SDO连接,利用剩下的四个空余字节来传输数据,从而达到一帧完成建立SDO连接 + 数据传输的目的。
client cs 快速取值
取值的不同是因为cs中第三位和第二位表示的是不带数据的字节数,改变第三位和第二位的值就可以指定要传输多少字节的数据。
数据规模 | download | upload |
---|---|---|
不指定字节 | 必须指定字节数 | 0x40 |
1字节 | 0x2F | 0x4F |
2字节 | 0x2B | 0x4B |
3字节 | 0x27 | 0x47 |
4字节 | 0x23 | 0x43 |
应答 | 0x60 | 字节数对应的upload值 |
download
用于修改OD的配置信息
客户端:
- CAN-ID:0x600+ Node-ID
- 帧类型:标准数据帧
- DLC: 8
- 数据域:
- 第一字节:cs(见SDO initiate)
- 第二字节:OD索引低8位
- 第三字节:OD索引高8位
- 第四字节:OD子索引
- 第5~8字节:传输的数据
服务器:
- CAN-ID:0x580 + Node-ID
- 帧类型:标准数据帧
- DLC:8
- 数据域:
- 第一字节:cs(见SDO initiate)
- 第二字节:OD索引低8位
- 第三字节:OD索引高8位
- 第四字节:OD子索引
- 第5~8字节:全为0(不使用但要有)
upload
用于读取OD的配置信息
客户端:
- CAN-ID:0x600+ Node-ID
- 帧类型:标准数据帧
- DLC: 8 (不能是4)
- 数据域:
- 第一字节:cs(见SDO initiate)
- 第二字节:OD索引低8位
- 第三字节:OD索引高8位
- 第四字节:OD子索引
- 第5~8字节:全为0(不使用但要有)
服务器:
- CAN-ID:0x580 + Node-ID
- 帧类型:标准数据帧
- DLC:8
- 数据域:
- 第一字节:cs(见SDO initiate)
- 第二字节:OD索引低8位
- 第三字节:OD索引高8位
- 第四字节:OD子索引
- 第5~8字节:传输的数据