[CANopen] SDO的命令字

问: 为什么SDO修改参数的命令字为2F、2B、23、27,还有的是22?这些值是怎么定义的?#

答:#

先看下图:

答案是:

数据的定义请看下图。

  1. 首先我们确定e的值:因为我们正常的SDO通讯都是使用的加速传送(最多传输4字节数据),所以e = 1
  2. 然后我们确定s的值:如果我们不指定数据长度,则s=0,否则s=1
  3. 然后我们确定n的值:根据e和s的值,如果我们不指定数据长度,则n无意义,n=0,那么命令字就等于00100010b,即0x22
    如果指定数据长度,则s=1,这时候n有效,n表示数据部分无意义数据的字节数,注意是无意义的字节数。
    如果我们只使用1个字节,则无意义字节数为3 (BYTE6-8)。n=11b,那么命令字就等于00101111,即0x2F(这里要注意SDO的数据格式,八个字节依次是:命令字(BYTE1),索引(BYTE2-3),子索引(BYTE4),数据(BYTE5-8))
    同理,如果我们使用两个字节,则无意义字节数为2,(BYTE7-8),n=10b。那么命令字就等于00101011,即0x2B。
    三个字节的0x27和四个字节的0x23,想必你一定能算出来吧。
posted @ 2015-11-02 03:37  CAN总线  阅读(6597)  评论(0编辑  收藏  举报