CAN 总线 上,如果2个节点ID号一样,先后发送数据后怎么辨别总线上出现了两个相同ID?

比如说正常情况下1号机发送数据,其他机器接收数据,再回复1号机数据。如果有两个1号机,都发送相同的数据,我通过什么方法可以确定这个总线上出现了2个1号机。... 比如说正常情况下1号机发送数据,其他机器接收数据,再回复1号机数据。如果有两个1号机,都发送相同的数据,我通过什么方法可以确定这个总线上出现了2个1号机。 展开
 我来答
johnson7401
2011-06-23 · TA获得超过669个赞
知道小有建树答主
回答量:227
采纳率:50%
帮助的人:129万
展开全部
看了很多有关CAN总线的提问,都在纠结于“你发送我接收”这种通讯模式的讨论,这个实际上是对CAN总线很大的误解。
CAN总线通讯介质就是一高一低两条线,根据两线之间的电压差来判断当前发送的信号是0或1,所有节点都并联到这两根线上,从CAN的基本通讯来说(CAN 2.0B,或者ISO11898),所有节点都是没有地址这个说法的,大家要发送信息,只需往两根线上加电压。从CAN的链路层可以看出,如果两个相同ID的CAN帧同时发出来的话,那就只能看谁先发谁就有优先权。单从这里是看不出这个CAN帧来自哪个节点的。
那为什么大家会看到很多CAN协议都会提到“地址”的概念呢?那是因为CAN 2.0A或B以及ISO11898只定义了CAN的基本协议,对于很多应用场合是远远不够,所以各个厂家根据各个行业的应用又制定高层协议(也叫上层协议),就是在CAN 2.0和ISO11898的基础之上,对CAN的ID重新进行了包装,比如SAE J1939协议就对扩展帧的29位ID进行重新定义,将其中其中两个字节定义为PF和PS,合成为PGN,还有一个字节定义为SA,就是源地址。这样J1939发出来的CAN帧里面就有所谓的源地址的说法,这样在楼主所说的这个情形就可以分辨出来这个CAN帧的来源了。
另外在J1939协议的网络里,可以通过发送地址请求帧,让所有节点都发送一次地址声明帧,从而获得当前网络中有多少个节点存在,各自的地址是多少。如果有两个节点的地址有冲突,需要制定地址的仲裁机制来解决。
windblue72
推荐于2017-11-28 · TA获得超过675个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:130万
展开全部
虽然这样的应用在CAN的规范里没有明确禁止,但是绝对不建议这样设计网络规划,这样会为后续带来的诸如升级等十分复杂的问题,也影响网络的稳定。

现在回答补充问题,首先你要明确ID是赋给帧的,不是直接给节点的,只是某节点知道自己要接收某个ID的帧。总线上的节点来说它只管取总线上他应该取的ID的帧,并不管是谁发的。
即使是远程帧,发出请求的节点在获得相应时也仅仅是根据帧ID判定,并不影响其他节点的接收。

再回到开始,首先这样的网络规划是非常不合理的,等于是网络上出现了A和B两个对某一帧功能相同的节点,完全没必要,如果你要更新某个信号,只需让A节点重新发送新的即可,如果更新的信号是通过B节点模块更新的,也只需先通过B向A发送一个帧更新某个信号,然后A再重新发送更新的帧。

如果你两个节点关联同一个帧,以后加入新节点和升级改动网络的时候会多一倍的工作量,而且再远程帧的响应中,同ID多响应很容易出现问题。

总之一句话,我们要从总线的角度去看待CAN,不要从节点的角度出发
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qtworry1017
2011-06-24 · TA获得超过215个赞
知道答主
回答量:159
采纳率:0%
帮助的人:49.3万
展开全部
CAN总线上的每个节点发送的帧信息都有自己的ID,接收节点会根据这个ID来判断是不是给自己的信息。因为ID是人为定义的,做系统时不会出现有相同ID的情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
满昆皓oB
2011-06-20 · TA获得超过324个赞
知道小有建树答主
回答量:654
采纳率:0%
帮助的人:0
展开全部
没有看到实际情形不好说明白,一般想象应该是这样的:对于操作应该对象可以很方便的观察到电源的共给回路,把这个去除之外,余下的应该就是通讯线路,多观察
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式