搜索
bottom↓
回复: 10

CAN组网通讯情况下发送设备怎样确定报备被正常接收?

[复制链接]

出5入4汤圆

发表于 2020-6-12 14:31:31 来自手机 | 显示全部楼层 |阅读模式
经过测试验证,如果A  B  C三个设备在同一CAN网络下,在设置了ID过滤的情况下,A发送报文给B,C如果id不符合条件,不会进去接收中断,但是收发器依旧会发出ack。这样  A就不知道自己的报文有没有真正被B收到。怎么处理?如果每个报文都用问答式的能解决,但是总线负载会上升

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入9汤圆

发表于 2020-6-12 19:07:01 来自手机 | 显示全部楼层
ack是硬件层应答的。你想要实现的功能,只能在软件协议上处理。A,B,C设备按照固定周期往总线上发送心跳报文即可。

出715入1076汤圆

发表于 2020-6-12 19:15:08 | 显示全部楼层
如果是 單播 的話,應該只要收到 ACK 回復就代表成功接收了吧。多播只能更上層軟件處理。

出5入4汤圆

 楼主| 发表于 2020-6-12 19:23:47 来自手机 | 显示全部楼层
Semiconductor 发表于 2020-6-12 19:07
ack是硬件层应答的。你想要实现的功能,只能在软件协议上处理。A,B,C设备按照固定周期往总线上发送心跳报文 ...

我是准备用can总线控制伺服,位置模式下定期发送脉冲个数给伺服。如果不能确保报文被收到用心跳的话那就干脆设计成问答模式算…其实我是希望伺服收到报文后不回复,出现异常再用别的机制处理,看看无法实现了。不知道canopen是怎么做的…

出5入4汤圆

 楼主| 发表于 2020-6-12 19:24:54 来自手机 | 显示全部楼层
dukelec 发表于 2020-6-12 19:15
如果是 單播 的話,應該只要收到 ACK 回復就代表成功接收了吧。多播只能更上層軟件處理。 ...

一对一就没有我说的这个问题了,一对多才会有我提出的这个问题,不知道canopen是怎么做的…

出715入1076汤圆

发表于 2020-6-12 21:09:12 | 显示全部楼层
tim4146 发表于 2020-6-12 19:23
我是准备用can总线控制伺服,位置模式下定期发送脉冲个数给伺服。如果不能确保报文被收到用心跳的话那就 ...

我一般是用問答模式(用的是 485,CAN 也一樣),不過是連接發包,再連續接收回覆,效率比一問一答高一些,且軟件邏輯也簡單。

出5入4汤圆

 楼主| 发表于 2020-6-12 22:37:26 | 显示全部楼层
dukelec 发表于 2020-6-12 21:09
我一般是用問答模式(用的是 485,CAN 也一樣),不過是連接發包,再連續接收回覆,效率比一問一答高一些 ...

"連接發包,再連續接收回覆",这个是怎么实现的?能保证通讯质量吗?
比如我发送 1 2 3 个报文,1号报文发出去之后如果没收到回复报文就发2号报文吗?

出715入1076汤圆

发表于 2020-6-13 00:31:23 来自手机 | 显示全部楼层
本帖最后由 dukelec 于 2020-6-13 00:33 编辑
tim4146 发表于 2020-6-12 22:37
"連接發包,再連續接收回覆",这个是怎么实现的?能保证通讯质量吗?
比如我发送 1 2 3 个报文,1号报文发 ...


是啊,因為主機優先級最高,只要主機連續發包,從機即使數據包已經準備好,也要等主機空下來再發送。

剛才打錯字,不是 連接,是 接連 或者 連續。

出0入0汤圆

发表于 2020-6-13 00:43:57 来自手机 | 显示全部楼层
我理解的是如果CAN数据包发送成功,代表总线上的所有节点收到了正确的CAN数据报文,CAN的数据链路层有自动仲裁,一个设备仲裁成功开始发送时所有其他节点都转到接收状态,如果任意一个节点检测到错误就会立即在总线上发送错误帧,覆盖掉当前数据帧,发送会失败,等待下一次仲裁。所以如果发送成功就代表总线上所有节点都正确收到了此报文。当然也有例外,比如位翻转检验没检测出来就会收到错误的帧,但是概率是极低的。

出5入4汤圆

 楼主| 发表于 2020-6-13 09:36:55 来自手机 | 显示全部楼层
你说的很对,但是通讯可靠性要求很高的时候需要考虑很多异常的突发情况。比如a是主机b c都是从机,从机开启了过滤,只能收自己ID的的报文,如果运行过程中,b突然断电,但是a根本不知道,因为报文发出去之后,c的收发器还是会发出ack的,导致a主机根本不知道有设备断电了

出0入0汤圆

发表于 2021-5-7 12:55:51 | 显示全部楼层
tim4146 发表于 2020-6-13 09:36
你说的很对,但是通讯可靠性要求很高的时候需要考虑很多异常的突发情况。比如a是主机b c都是从机,从机开启 ...

你可以用远程帧,定期读每个节点信息,这样可以避免使用软件应答机制
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-16 16:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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