打印
[CAN-bus/DeviceNet]

一个很幼稚的问题,CAN通信帧ID如何设定?

[复制链接]
14880|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pallee|  楼主 | 2013-1-16 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在学习CAN通信,有个问题,每一个挂在总线上传输的帧的ID是唯一的,通信时比较优先级,ID越小,优先级越高,如果是标准帧的话,ID是11位。我想问,这11位ID是如何确定的?自己在编制软件时设定的,还是在硬件设计的时候确定了的?如果是硬件确定的话,是如何确定的?
在网上看了很多东西,还是糊里糊涂的。
希望得到详细的解答,多谢,或者推荐一些这方面的基础的资料学习。

相关帖子

沙发
pallee|  楼主 | 2013-1-18 19:47 | 只看该作者
………………

使用特权

评论回复
板凳
pallee|  楼主 | 2013-1-18 22:58 | 只看该作者
CAN总线ID是包含在报文帧中的。

1、主要用作CAN总线的仲裁使用,所以一般来说网络上的每个节点(向总线上发送)的ID应该有所不同。ID值越低,报文优先级越高,在两组不同ID报文同时上线时候,仲裁机制使得ID值低的占用总线,ID值高的退出。

2、ID域可以是11位和29位,其值和含义可以由用户自定义,可以用作高层协议的管理,比如CANopen等协议中把ID的部分做为“源地址”,部分作为“目的地址”,这样CAN报文从哪来到哪去都清晰了。

3、ID的另一个作用是配合接收方滤波使用,就是说一般接收的滤波器可以设定接收ID的范围等,用于过滤掉不需要接收的信息,减轻CPU的处理负担。





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

我们要从总线的角度去看待CAN,不要从节点的角度出发

自己搞明白了。

使用特权

评论回复
地板
flyinginred| | 2013-2-25 13:19 | 只看该作者
软件指定的!

使用特权

评论回复
5
airwill| | 2013-2-25 23:35 | 只看该作者
其实 CAN 并没有规定地址使用规则, 你想用什么地址, 就什么地址.

使用特权

评论回复
6
caijun_2012| | 2013-2-27 22:19 | 只看该作者
制定规范者,根据CAN使用负载率,已经规划好CAN  ID大小了。。。

使用特权

评论回复
7
jellywang| | 2013-4-11 14:35 | 只看该作者
1. CAN ID是信息编码,而不是地址;
2. ID用于报文过滤;
3. ID自定义或者根据标准应用层协议确定;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

177

帖子

2

粉丝