请教,如果can设备上有相同id的设备,如何判断出来?
请教个问题,我现在是通过can读取其它设备信息。如果被读取的设备由于人为原因搞成了相同的id,我想通过判断单片机id的方式来判断出这种错误。
现在遇到的问题是,我发送出去读取帧后,两个设备比如A和B是同时接收到的,然后他们会返回信息,但经常是A设备能正常返回,B设备可能是竞争失败无法返回。偶尔能返回一次。
理想的状态是A和B轮流返回信息,这样就能稳定的判断了。
本帖最后由 奏奏奏 于 2019-2-19 16:44 编辑
我正在做CAN系统的项目,目前无法判断出来。
比如说我控制CAN地址是02的子设备,如果有2个子设备的CAN地址是02,则这2个子设备都会收到并执行。
不会是只有其中一个收到。
为了避免重复,必须进行额外的管理分配机制。
你这的确是个问题,CAN接点ID唯一性需要人为指定保证,已经超出了一般CAN总线的处理范畴。
不过CAN总线有仲裁机制,也有各种错误标志。没有成功发送出去数据的CAN接点,会产生发送出错标志,需要程序做异常处理。
不过也不能保证,CAN接点已经发送出去数据了,但是别的CAN接点没有收到数据这种情况的发生。因为CAN是会监听自己发送出去的数据的,自己监听到是正确的,但是总线冲突,在其它接点处的CAN电平不正常也是有可能的。 监控了下can总线,两个相同id的设备是返回信息了。估计是我这里接收没处理好。 不会这样的,CAN总线是网络结构。数据都会发出来,但是不能确定是哪个设备的。因此需要使用扩展ID来进行处理。按照1939的标准,ID的最后一个字节可以用来定义不同设备的地址。 相同ID的设备,在同时发送数据时,会出现总线竞争错误吧 安 发表于 2019-2-20 08:40
不会这样的,CAN总线是网络结构。数据都会发出来,但是不能确定是哪个设备的。因此需要使用扩展ID来进行处 ...
是担心实际应用过程中,人为错误造成的同一总线上有相同ID这种情况。 any012 发表于 2019-2-20 10:40
是担心实际应用过程中,人为错误造成的同一总线上有相同ID这种情况。
这种情况可以考虑读取总线模块的主控芯片序号来区分不同节点。节点号可以存在Flash或EEPROM中 可以增加自动处理的功能,比如你广播的是IDx018ffff01,突然有一个也在广播这个,这个时候,自动根据自己的定的协议进行处理。将源地址01进行处理。 huangyanga 发表于 2019-2-20 11:26
这种情况可以考虑读取总线模块的主控芯片序号来区分不同节点。节点号可以存在Flash或EEPROM中 ...
现在就是想通过判断芯片序列号的方式来检查这个错误。
但现在的问题是,如果是两个设备交替发过来信息倒也可以,但现在我这里有时候只能接收到其中的一个发过来的信息。
监控了总线上的信息,两个设备好像都发送过来了,可能是我这里接收处理的问题。
页:
[1]
2