关于SDO与PDO的一些总结与理解。
其实SDO与PDO本质基本相同,只是PDO不需要请求响应,针对canid可以直接传输数据,不需要索引与子索引,故可以传输8字节的数据,而SDO需要请求响应,需要索引与子索引作为触发条件,占用4个字节位置,故只能传输4字节的数据。
预定义标识符图表
PDO报文
- 基于事件触发,触发事件后数据立即传输,高速低延迟,不需要额外的请求和响应,适用于需要实时监控与控制的场景。
- 报文格式
COB_ID | Byte0 | Byte1 | Byte2 |
---|---|---|---|
0x280+Node_ID | 输入数据量个数 | 16位模拟量输入 | 16位模拟量输入 |
-
COB_ID:通讯对象标识符,根据CANOpen网络中使用的预定义标识符分配表,可以看出COB_ID链接到通讯服务(NMT、SYNC、RPDO1、TPDO1,PSDO,TSDO等),即COB_ID详细说明了哪个节点使用了什么服务以及区别发送/接受数据。
-
COB_ID共有11位,前4位为功能代码(可查表获得),后7位包含节点ID(支持的节点数量可查表,每个PDO与SDO的节点ID范围是0000001-1111111)。
-
PDO消息可以包含8个完整字节的数据,并且可以在单个帧内包含多个对象参数值,而在PDO服务中,可以需要至少4个SDO帧才可以完成一个帧(2个请求2个响应)。
SDO报文
1.CANOpen节点通过CAN网络读取/编辑另一个节点的对象字典的值,采用请求响应机制进行数据读写。
2. 如果数据的变化较小,且对数据采集的精度要求较高,也可以采用SDO进行数据采集。
3.报文格式
COB_ID | DLC | Byte0 | Byte1-3 | Byte4-7 |
---|---|---|---|---|
0x600+Node_ID(发) 0x580+Node_ID(回) | 8 | 命令字 | Byte1-2为主索引 Byte3为子索引 | 具体数据 |
-
COB_ID可以查表获得
-
命令字Byte0共8位,每一位的含义如下:
1) 其中bit7-bit5称为CCS(客户端命令说明符),表明输出类型(1为写入,2为读取);
2) bit4可默认为0;
3) bit3与bit2:仅当bit1=1和bit0=1时有效,否则为0。有效表示数据中不包含数据的字节数,数据是8位(1字节),16位、32位,对应的bit3,bit2的取值为11,10,00
d) bit1:1 快速传输;bit0:1 指定数据大小
- 数据为8、16、24、32位分别对应的Date Byte0的取值如下:
数据大小 | 1字节 | 2字节 | 3字节 | 4字节 |
---|---|---|---|---|
写入时命令字 | 2F | 2B | 27 | 23 |
- 数据中先写低8位,最后写高8位