[CAN-bus/DeviceNet] 一个很幼稚的问题,CAN通信帧ID如何设定?

[复制链接]
15929|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 | 显示全部楼层
软件指定的!
airwill 发表于 2013-2-25 23:35 | 显示全部楼层
其实 CAN 并没有规定地址使用规则, 你想用什么地址, 就什么地址.
caijun_2012 发表于 2013-2-27 22:19 | 显示全部楼层
制定规范者,根据CAN使用负载率,已经规划好CAN  ID大小了。。。
jellywang 发表于 2013-4-11 14:35 | 显示全部楼层
1. CAN ID是信息编码,而不是地址;
2. ID用于报文过滤;
3. ID自定义或者根据标准应用层协议确定;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

177

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部