CANOpen SDO

SDO分类

根据应用程序需求,以下服务可以应用于SDO:

  • SDO下载分为如下几个部分
    • SDO下载发起
    • SDO段下载
  • SDO上传分为如下几个部分
    • SDO上传发起
    • SDO段上传
  • SDO终止传输

普通SDO(分段传输)进行下载和上传服务时,应用程序负责将SDO作为一个分段序列进行传输。与此同时,快速SDO也应当得到支持。如果传输的数据长度大于4字节,则应支持SDO分段传输。

SDO块下载服务作为可选项,可用于进行高速的SDO块数据传输:

  • SDO块下载分为如下几个部分
    • SDO块下载发起
    • SDO块下载
    • SDO块下载结束
  • SDO块上传分为如下几个部分
    • SDO块上传发起
    • SDO块上传
    • SDO块上传结束

当使用SDO块下载和SDO块上传服务时,应用程序负责将负责将数据作为一个块的序列传输。

SDO 段下载

使用SDO读写对象时,如果数据长度不大于4字节,使用快速SDO可以在一个来回之间完成通讯,读写对象超过4字节时需要进行分段传输,流程如下:
在这里插入图片描述

快速SDO下载

在这里插入图片描述

普通SDO段下载发起

在这里插入图片描述

  • ccs = 1发起段下载请求
  • scs = 3 发起段下载应答
  • n 当e和s均为1时有效,其他时候为0,当其有效时代表快速SDO通讯中后4字节数据区中非段数据的字节数。
  • e 传输类型
    • 0 普通SDO
    • 1 快速SDO
  • s 数据长度标识
    • 0 请求中不包含数据长度
    • 1 请求中包含数据长度
  • byte4 - byte7
    • e = 0, s = 1,4字节表示下载的字节数
    • e = 1, s = 1,前4-n字节为被下载的数据

普通SDO段下载

在这里插入图片描述

  • ccs = 0 段下载请求
  • scs = 1 段下载应答
  • toggle 反转位
    • 第一帧的toggle为0,该位每传输一帧会自动进行反转,发送的请求和接收到的应答中的toggle位应该相同。
  • n 7字节中非段数据的字节数
  • c 是否还有段需要下载
    • 0 还有段需要下载
    • 1 没有段需要下载

SDO 段上传

在这里插入图片描述

快速SDO上传

在这里插入图片描述

普通SDO发起段上传

在这里插入图片描述

  • ccs = 2 发起段上传请求。
  • scs = 2 发起段上传应答。
  • n 当e和s均为1时有效,其他时候为0,当其有效时代表快速SDO通讯中后4字节数据区中非段数据的字节数。
  • e 传输类型
    • 0 普通SDO
    • 1 快速SDO
  • s 数据长度标识
    • 0 请求中不包含数据长度
    • 1 请求中包含数据长度
  • byte4 - byte7
    • e = 0, s = 1,4字节表示上传的字节数
    • e = 1, s = 1,前4-n字节为被上传的数据

普通SDO段上传

在这里插入图片描述

  • ccs = 3 段上传请求
  • scs = 0 段上传应答
  • toggle 反转位
    • 第一帧的toggle为0,该位每传输一帧会自动进行反转,发送的请求和接收到的应答中的toggle位应该相同。
  • n 7字节中非段数据的字节数
  • c 是否还有段需要上传
    • 0 还有段需要上传
    • 1 没有段需要上传

SDO 块下载

在这里插入图片描述

SDO块下载发起

在这里插入图片描述

  • ccs = 6 块下载
  • scs = 5 块下载
  • s 数据长度标识
    • 0 请求中不包含数据长度
    • 1 请求中包含数据长度
  • cs 客户端子命令
    • 0 发起块下载请求
  • ss 服务端子命令
    • 0 发起块下载应答
  • sc 服务端CRC支持
    • 0 服务端不支持生成CRC
    • 1 服务端支持生成CRC
  • blksize 客户端可用于发送的每个块中段的数量

SDO子块下载

在这里插入图片描述

  • 服务端仅在最后一个分段传输完成后会进行应答
  • scs = 5 块下载
  • ss 服务端子命令
    • 2 块下载应答
  • seq 段序号 (0 < seq < 128)
  • data 最多7字节数据
  • ackseq 在上一次块下载期间成功接收到的最后一段的序列号,如果服务端将其设置为0,表明服务端未正确接收到序列号为1的包,客户端需要重新传输所有的分段。
  • blksize 客户端可用于发送的每个块中段的数量

SDO块下载结束

在这里插入图片描述

  • ccs = 6 块下载
  • scs = 5 块下载
  • s 数据长度标识
    • 0 请求中不包含数据长度
    • 1 请求中包含数据长度
  • cs 客户端子命令
    • 1 结束块下载请求
  • ss 服务端子命令
    • 0 结束块下载应答
  • n 最后一个块中最后一个分段里非数据的字节数
  • crc 数据集的16位CRC
  • x 未使用填0
  • sc 服务端CRC支持
    • 0 服务端不支持生成CRC
    • 1 服务端支持生成CRC
  • blksize 客户端可用于发送的每个块中段的数量

SDO 块上传

在这里插入图片描述

  • 如图所示,上述协议通常用于SDO块上传,协议以发起段上传作为开始。
  • 客户端可能会向服务端传递一个最小传输阈值,当传递的数据长度小于或者等于该值时,服务端将会使用普通SDO上传协议或者快速SDO上传协议来进行数据传输。

SDO块上传发起

在这里插入图片描述

  • ccs = 5 块上传
  • scs = 6 块上传
  • cs 客户端子命令
    • 0 发起上传请求
    • 3 开始上传
  • ss 服务端子命令
    • 0 发起上传应答
  • cc 客户端CRC支持
    • 0 客户端不支持从数据中产生CRC
    • 1 客户端支持从数据中产生CRC
  • sc 服务端CRC支持
    • 0 服务端不支持从数据中产生CRC
    • 1 服务端支持从数据中产生CRC
  • pst SDO协议切换阈值
    • 0 不允许切换SDO协议
    • pst > 0 当传输长度小于等于该值的时候,将使用普通SDO或者快速SDO协议进行传输
  • s 数据长度标识
    • 0 请求中不包含数据长度
    • 1 请求中包含数据长度
  • size 上传的数据大小
    • 0 保留
    • 1 size为上传数据的大小,单位为字节,小端格式
  • blksize 每个块允许的最大分段数
    • 0 < blksize < 128

SDO上传子块

在这里插入图片描述

  • ccs = 5 块上传
  • cs 客户端子命令
    • 块上传应答
  • c 表示是否还有段需要被上传
    • 0 还有段需要上传
    • 1 没有更多的段需要上传,将进入结束块上传阶段
  • seqno
    • 段序号
  • segment data
    • 分段数据,最大7字节
  • ackseq
    • 在上一次块上传期间成功接收到的最后一段的序列号,如果客户端将其设置为0,表明客户端未正确接收到序列号为1的包,服务端需要重新传输所有的分段。
  • blksize 每个块允许的最大分段数
    • 0 < blksize < 128

SDO块上传结束

在这里插入图片描述

  • ccs = 5 块上传
  • scs = 6 块上传
  • cs 客户端子命令
    • 1 结束块上传请求
  • ss 服务器子命令
    • 1 结束块上传应答
  • n 最后一个块中最后一个分段中非数据的字节数
  • crc 数据集的16位CRC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕咚.萌西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值