CAN总线从两个主站发送数据,且平衡度相等。

问题描述 投票:0回答:1

我有两个主节点连接到同一个CAN总线上,都向我的电脑发送数据。

第一个主站ID = 0xFFA1第二个主站ID = 0xFFA2

由于第一主站ID比第二主站低,它比第二主站更多的控制总线。而这就会造成数据的一些延迟。

有没有办法使两个节点之间的负载均衡,使每个节点发送的消息量几乎相等。

我试过让第一个节点发送数据,同时在两个ID 0xFFA1和0xFFB2之间切换,第二个节点用ID 0xFFB1发送数据。而且没有任何帮助。

can-bus
1个回答
2
投票

在CAN中没有 "主站 "这种东西,在更高一层的协议中也没有,比如CANopen(CANopen中的 "主站 "只是一个主管节点)。谁能发送什么是由CAN标识符定义的--CAN主要关注的是数据,而不是节点。重要的是 什么 被发送,而不是 是发送-接收,因为每个消息都是广播的。

听起来,如果你有2个节点以最快的速度用标识符0xFFA1和0xFFA2消息疯狂地在总线上乱发,导致总线负载达到100%。那么发送0xFFA2的节点就会 "饿死"。"能多快就多快 "地发送数据绝不是使用CAN的正确方式。

相反,你需要定义一个更高层次的协议,决定实时特性。在控制系统中,最常见的做法是让节点以固定的时间间隔发送数据,比如每10ms或100ms发送一次。仅此一点就应该解决你的饥饿问题。

如果你想防止节点在同一时间发送,那么你可以提供一种手段让它们同步。在CANopen和其他协议中使用的一个技巧,就是让一个节点在给定的固定时间间隔发送一个 "同步 "消息。在读取这个同步消息后,所有节点应该在收到这个消息后的x毫秒内行动。

© www.soinside.com 2019 - 2024. All rights reserved.