欢迎光临散文网 会员登陆 & 注册

《五》canfestival系列教程之sdo

2021-08-14 10:31 作者:GXTon_阿通  | 我要投稿

如果把pdo比作高速公路,那么sdo就是普通的小路.

pdo高速公路虽然效率高,但是下雨,下雪,有雾的时会封路.(有干扰)

sdo小路有时候很方便,很稳定.

因为pdo发送是生产--消费模式.就是只管pdo发送,谁愿意接收就接收,不接收也无所谓.因为我不管有没有人接收,更不确定有没有送到.

相比之下,sdo就稳妥多了.它是服务器--客户端模式,就是客户发给我,我必须要回复,要对客户负责.这样有了来回消息交互,就不会出现数据错误.传输也比较稳定了.


canopen的知识点和概念比较多,也比较散,建议大家准备一个小本子,可以随时记录和查阅,用电脑记录实际上很不方便.(亲身体会......)

因为sdo稳定的特性,所以一般作为pdo不能使用时的应急方案,或者作为配置参数时使用的指令.

例如驱动器,上电后需要进行配置,这里使用的就是sdo.

(这里驱动器是服务端,电脑是客户端,用电脑去访问驱动器的参数.)

配置完成之后发送数据,为了效率,才使用pdo.

但是电机故障,需要查找错误的时候,可以切换到sdo进行错误的查找.

sdo是很重要的,因为大部分设备都需要进行参数配置.

就以支持canopen的驱动器为例,通过编写canfestival程序,配置驱动为速度模式.

在拿到驱动器后,可以先用sdo去读取内部的字典,

根据字典返回的数据,就知道驱动器当前的配置和运行模式.

这一节我们只讲解sdo发送的数据流程.

sdo的数据结构为:

图一

例如:

601, 22 00 14 01 01 02 00 80

上面是一条sdo指令,

0x601: 发送时can的id,它由两部分组成,600+1,600代表了这时一条sdo. 1代表发送给1号节点的驱动器.

0x22: 写命令,向驱动器里面写入数据,就是图一中的指令字CS,它还有很多中,比如读是0x40,这里需要查找ds301协议.

0x00 14: 因为can是小端模式,真正的顺序是0x1400,这里是一个索引.

0x 01: 子索引,和上面的1400 组合在一起就是 1400,01索引.这个索引号是针对字典的,从字典表格中查找这个号(就相当于一栋楼的门牌号),这个索引里面"住"的数据,代表:驱动器接收的cob-id.

0x01 02 00 80: 数据,因为是小端模式.正常的数据顺序应该是0x 80 00 02 01.这条数据的意思是cob-id为0x80000201.

综上,整条语句的意思也就是,向驱动器1400,01索引中写入数据0x80000201.

如何把这条指令发送出去:

(从函数的名字也能看出这个是设置节点字典的,就是发送sdo的)

最核心的是writeNetworkDict()函数.

跳进去看一下

跳进去看一下,_writeNetworkDict


《五》canfestival系列教程之sdo的评论 (共 条)

分享到微博请遵守国家法律