CAN总线通信中,如果是多节点通信。多通信中遇到了问题。问题在补充中: 50

通信中,一个作为主机,多个从机。主机首先向从机请求数据(主机发送一次请求数据,每一个从机都需要回数据),在从机回数据后,主机怎么接收啊?... 通信中,一个作为主机,多个从机。主机首先向从机请求数据(主机发送一次请求数据,每一个从机都需要回数据),在从机回数据后,主机怎么接收啊? 展开
 我来答
windblue72
推荐于2017-05-21 · TA获得超过675个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:130万
展开全部
首先,CAN总线不分主机,最多是整车厂在网络规划的时候定义了一个功能比较多的节点,各家车厂不一样(如网关),或者类似PowerMaster。但是CAN本身协议里是不存在主、从的。
其次,楼上说的仲裁延时的问题,CAN协议本身是考虑到这个问题的,当然按他的方法通过协议延时可以解决,但是既然CAN协议已经给了我们解决方法那肯定是更科学更有效的,具体的去看CAN的仲裁吧,你需要一个节点的报文发送不存在延时,只需要给它分配一个优先级很高的ID即可,当然这得从网络规划的角度出发,不是这么简单说说的。

回到你的问题,你说的主机请求数据,在CAN中只能是远程帧(一个远程标志位为1,数据场为空的帧),当这个帧出现在总线上时,拥有这个ID数据的节点就要发送这个同ID的完整帧(远程帧标志位为0)。但是只能有一个节点接受这个远程帧的请求。
这里强调一个概念,同一个ID的帧只能由一个节点发送,不然可想而知总线上都是冲突。

你补充问一下,你想实现什么效果吧
追问
那请问您一个问题:如果两个节点同时抢占总线,ID值小的抢占了总线,ID值小的值还会发么?还是被覆盖了  丢失了?
liufeihao19
2013-03-03 · TA获得超过111个赞
知道答主
回答量:54
采纳率:0%
帮助的人:42.6万
展开全部
读CAN控制器的接收缓冲区的数据即可。注意,要是你下面的节点很多,建议对每一个节点回复数据的时间做一个简单的协议延时(如根据每个从节点的ID来延时),不然总线仲裁的时间会很长,影响通信效率;另外是你的主机处理接收缓冲区的速度要足够快,不然可能会丢数据(总线溢出)。
更多追问追答
追问
我有两个节点:A节点与B节点,他们之间进行通信。A节点有一个发送报文对象send_a和一个接收报文对象receive_a,其send_a的ID为0x000 0000 0000和receive_a的ID为0x000 0000 0001,B节点有一个发送报文对象send_b和一个接收报文对象receive_b,send_b的ID为0x000 0000 0001,receive_b的ID为0x 000 0000 0000。现在的问题是:如果A节点和B节点同时发送信息,则,谁会收到信息,收到信息的先后顺序?其实就是问他们的仲裁机制
追答
地址低(ID小)的数据先发出。

参考资料: pfautoecu.com

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式