OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3553|回复: 8

有个关于stm32 canopen通讯的问题

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-7-23
在线时间
9 小时
发表于 2019-8-28 18:38:49 | 显示全部楼层 |阅读模式
20金钱
请问下我想用canopen的sdo报文来实现canopen电机控制器的协议速度模式(如图)
图片2.png

请问下我发送的报文为 2F 60 60 0 03 0 0 0 can的设置ide=0 rtr=0 dlc=8,返回的报文如下,
想用 4F 60 60 0 0 0 0 0查询一下6060H字典的数据 结过返回的报文是 80 60 60 0 0 1 4 5请问一下我是哪里出了问题

图片1.png



最佳答案

查看完整内容[请看2#楼]

昨晚通宵终于搞懂这个问题了,7f开头的是心跳报文,返回值 60 开头为通讯成功, 80为通化讯失败,请求字典内的数据是 40 +索因+子索引+0000,上面4f为笔误。至于通讯失败的原因就是字典内控制器厂商当时对该字典的字节数已经设定好了。 写入一个字节 命令字为2F 两个是 2b 三个是 27 四个是23 sdo返回字节也是同理,只不过命令字的2换成4,比如返回一个字节 为4F 比如我发送 40 60 60 0 0 0 0 0 通讯成功,返回的报文是4F开头 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-7-23
在线时间
9 小时
 楼主| 发表于 2019-8-28 18:38:50 | 显示全部楼层
昨晚通宵终于搞懂这个问题了,7f开头的是心跳报文,返回值 60 开头为通讯成功, 80为通化讯失败,请求字典内的数据是 40 +索因+子索引+0000,上面4f为笔误。至于通讯失败的原因就是字典内控制器厂商当时对该字典的字节数已经设定好了。
写入一个字节 命令字为2F 两个是 2b 三个是 27 四个是23   sdo返回字节也是同理,只不过命令字的2换成4,比如返回一个字节 为4F
比如我发送 40 60 60 0 0 0 0 0  通讯成功,返回的报文是4F开头既字典内定义了一个字节,如果要写入,便要用2F命令字写入一个0x03,使用2B则会返回 80 60 60 0 0 0 0 8 既通讯失败,为一般错误。再比如 请求 60 FF H 字典,返回值报文为 43 FF 60 0 0 0 0 0 ,既该字典内有四个字节目前均为0,所以写入协议速度要用23 FF 60 0 FF 0 0 0  就可以通讯成功,使用其他命令则返回80 FF 60 0 0 0 0 8 通讯失败
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-8-29 02:11:44 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-7-23
在线时间
9 小时
 楼主| 发表于 2019-8-30 14:30:42 | 显示全部楼层
有些时候就是会被这些看起来很小的问题卡住,有点心累。
回复

使用道具 举报

13

主题

271

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5387
金钱
5387
注册时间
2017-8-14
在线时间
248 小时
发表于 2019-9-2 09:44:07 | 显示全部楼层
辛苦了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-8-23
在线时间
15 小时
发表于 2019-9-4 17:27:37 | 显示全部楼层
你好,代码能分享下吗 最近也在学这个,谢谢 642897512@qq.com
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-7-23
在线时间
9 小时
 楼主| 发表于 2019-9-6 22:58:46 | 显示全部楼层
Gandalf 发表于 2019-9-4 17:27
你好,代码能分享下吗 最近也在学这个,谢谢

抱歉,最近几天满课没看论坛。其实这个要是全部梳理通了还是挺简单的,底子就是can通讯的底子,我那个代码也是拿现成的can通讯的demo改的。最要命的问题就是发送的报文,报文解决了就能用了。还有can的 rtr=0 ide=0 dlc=8。我发送报文的函数就是下面那个,具体要调整报文还是手动改的,比较笨的程序
                        tbuf[0]=0x2f;
                        tbuf[1]=0x60;
                        tbuf[2]=0x60;
                        tbuf[3]=0;
                        tbuf[4]=0x01;
                        tbuf[5]=0;
                        tbuf[6]=0;
                        tbuf[7]=0;
                       
                        CAN_Send_Msg(tbuf,8,0x601);
                        delay_ms(500);
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2018-12-26
在线时间
49 小时
发表于 2020-3-30 18:47:37 | 显示全部楼层
你好 我刚接触 我也是用STM32通过CANOPEN控制伺服电机  通过SDO发送不需要用到CANFESTIVAL里的那些函数吗?
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-6-16
在线时间
5 小时
发表于 2020-4-9 22:28:17 | 显示全部楼层
人畜无害 发表于 2019-8-30 14:30
有些时候就是会被这些看起来很小的问题卡住,有点心累。

自己提出的问题大部分时候都是自己解决。可不是累么!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 00:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表