CANOpen中SDO和PDO的COB-ID理解

CANOpen用来收发数据的通信对象有SDO(Service Data Object)和PDO(Process Data Object)


  1. 一 SDO和PDO的区别

SDO使用对象字典的Index和SubIndex来访问CAN节点的对象字典,可以读或者写。而PDO则不使用Index和SubIndex,它是两个CAN节点间约定好传输的数据内容对应哪些对象字典索引,收到数据后就直接读写相应的对象字典索引里的值。
由于SDO(常规)需要用到Index和SubIndex,所以一次最多传输4个字节,而PDO一次最多可以传输8个字节。
另外,SDO还有很多其它传输功能,这里就不细说了,有兴趣的可以看官方Spec。


  1. 二 PDO的COB-ID

PDO有2种,TPDO和RPDO,一个用来发送,一个用来接收。PDO通信参数里需要设置COB-ID。

对于TPDO来说,其通信参数中的COB-ID是自身的COB-ID,当发送TPDO时用来表明这个TPDO是谁发出的。
对于RPDO来说,其通信参数的COB-ID是发送方的COB-ID,用来表示自己只接受某个CAN节点发过来的TPDO。


  1. 三 SDO的COB-ID

SDO中的COB-ID有2个,分为:

  • Client ==> Server

  • Server ==> Client

乍一看有点晕,如果我们换个角度思考下就容易理解了,假如CAN节点A通过SDO去访问CAN节点B,那么A就是Client,B就是Server。

类似于平时上网时去打开百度,需要在浏览器的地址栏里输入百度的地址,然后就可以打开百度了。网民是Client,百度是Server,百度的网址就是Client==>Server的COB-ID。

这样在A的对象字典里,设置Client==>Server的COB-ID为B的COB-ID

而A的Server==>Client的COB-ID怎么设置呢?当A发送SDO给B时,B收到SDO后会回传一个SDO给A来表示应答。之前说了,A访问B,A是Client,B是Server,现在B回传一个应答SDO给A,那么路径就是Server==>Client,这样对于A来说,其Server==>Client的COB-ID还是B的COB-ID,用来表示收到的应答SDO是来自Server的。

可能会想到B的这两个COB-ID干嘛去了呢,对于B来说,只有B是Client时才会用到这2个COB-ID,如果B通过SDO去访问A,那么B的Client==>Server和Server==>Client的COB-ID就是A的COB-ID了。


  1. 四 总结

本文是自己在学习CANOpen中的一点心得体会,如果有写的不对的地方,请留言指正。谢谢阅读。

 

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值