和朋友聊起来CAN总线,我一直以为设备和包ID是绑定关系,也就是一个设备的功能和包ID是固定地,一个设备可以有多个功能,每个功能就绑定一个ID,例如:温湿度计有两个参数,温度,湿度,露点。那么参数就可以分配三个ID。
但是朋友说:can总的ID是包的特性,所以没有限制ID和设备是必须绑定地,所以任何设备都可以发送其它设备的ID。
不知道各位如何理解,请各位科普一下。
不考虑使用场景,任何设备都可以发送任何ID的can信号。但是实际不是,比如车载,每个设备能发哪些,都是严格规定的,尤其网关帧和诊断帧。楼主没有理解can id和can message的区别,温度,湿度可以在一个can id下面。要是上canfd的协议,还可以从can id看出谁发的,发给谁 水有点深
我的理解是:CAN的每一个MESSAGE包,必须有一个ID,这个ID是为了标志这个消息是发给谁的,而不管谁发的,所以才有上面的问题。只要我上面的理解是正确地就可以。至于是不是应该管理设备和消息的对应关系就无所谓了。
引用: 数码小叶 发表于 2024-3-18 15:46 不考虑使用场景,任何设备都可以发送任何ID的can信号。但是实际不是,比如车载,每个设备能发哪些,都是严 ...
我说的是协议层的东西,不是管理与应用,can的包只有一个ID,而不像TCP/IP包那样有两个地址字段。
引用: bigbat 发表于 2024-3-18 16:04 我说的是协议层的东西,不是管理与应用,can的包只有一个ID,而不像TCP/IP包那样有两个地址字段。
标准can没有,但是上了协议后就有了,源地址与目的地址,一个普普通通的ID,包含的信息可不少
can id和设备的关系就是名称,你喊对方什么名称,对方知道就可以,不设置filter的话,所有设备都可以收到总线上所有的数据,只不过知道了名称,或者说想要的数据,就取了用,不关心的不搭理就可以
引用: LitchiCheng 发表于 2024-3-19 09:42 can id和设备的关系就是名称,你喊对方什么名称,对方知道就可以,不设置filter的话,所有设备都可以收到总 ...
可以看看周立功的can easy begin
你所理解的ID可能是以为是硬件固件的地址,实际上CAN的ID,也是来标识为了有达到高效的通信方式,过滤掉一些他不关心的信息,但是他不是固定的,是在配置中指定的。一个设备可以绑定好几个ID。
本帖最后由 lugl4313820 于 2024-3-19 16:32 编辑引用: lugl4313820 发表于 2024-3-19 16:30 你所理解的ID可能是以为是硬件固件的地址,实际上CAN的ID,也是来标识为了有达到高效的通信方式,过滤掉一 ...
CAN的协议只定义了ISO 7层的物理层和数据链路层,消息ID的功能用来管理消息的目标也是用来管理消息的优先级。
在应用时也就是过滤器的设置,就像RS485的地址一样
引用: bigbat 发表于 2024-3-19 18:40 CAN的协议只定义了ISO 7层的物理层和数据链路层,消息ID的功能用来管理消息的目标也是用来管理消息的优先 ...
其相比485又好一些,485就是一问一答,他这里可以在总线空闲下随便说话。
引用: lugl4313820 发表于 2024-3-19 21:40 其相比485又好一些,485就是一问一答,他这里可以在总线空闲下随便说话。
rs485没有优先级管理,can是有优先级管理的,所can在多机通讯时可以得到更好的实时性,而且can的物理特性为各设备占用总线的电气设计是可以“线与”的,485则没有要求,只要求是差分信号而已,RS485的地址信号是通过增加信号长度实现的,CAN是通过线与,所以我只说和rs485的地址相似。