码迷,mamicode.com
首页 > 系统相关 > 详细

CAN网络上新增加的设备与网络上已有设备MAC地址冲突的软件解决方案

时间:2020-01-17 21:17:55      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:网络   本机   显示   width   部分   src   语言   none   版本   

?

已知 1号的CAN节点的地址是0x1f 2号的CAN 节点的地址是0x1f

技术图片技术图片技术图片技术图片技术图片技术图片技术图片

技术图片

?

技术图片技术图片

?

技术图片

?

?

?

?

?

?

要达到的要求是 假设 网络上 CAN1 节点已经工作了,我现在需要在网络上接入CAN2节点。

那么CAN2节点首次上电的时候 需要给网络上的其他CAN节点 发送 数据帧(数据帧叫检测ID号帧)

,该数据帧 要求 (网络上与CAN2 节点的物理MAC地址 相同的CAN节点) 发送 响应帧

(该响应帧 是 刚上电的CAN2节点,发送给网络上其他节点的响应帧 ,由其他节点处理以后的应答帧)

?

若假设CAN2 接点的物理ID 已经与CAN1节点的物理地址一样,则CAN2 节点 一直进入程序死循环,直到改变了CAN节点2 自己的 物理 MAC 地址以后(通过软件固化设置)。 才会跳出死循环,然后进行正常的接收 发送 工作。

?

本版本程序 ,在这个功能 上 ,采用的是 主机 和 从机 使用的一个程序。

?

试验平台 两个51单片机

主机 的 ID MAC 地址 是0x1f 从机的 ID MAC 地址 也是 0x1f

?

单片机的接线方式 如下

技术图片技术图片技术图片技术图片技术图片技术图片

????外部5V供电????外部5V供电

?

?

?

?

?

?

?

1号CAN节点外部5V供电正常以后, 停一段时间,再给外部的5V电源供电 。

则可以看到2号CAN节点的数码管一直显示的是4 表示它一直在循环体里面

?

?

技术图片

?

基于ICAN 协议

技术图片

?

2号CAN节点发送的 请求网络上其他节点 发送的(命令帧) 格式 应该是

?

下图黄色 为 源节点 编号 即本机的MAC地址

下图绿色 为 目标节点 编号 即邮件要发送的目的地址

下图红色 为 ACK= 0 表示本帧需要应答 是命令帧

ACK= 1 表示本帧是应答帧 不需要应答

下图蓝色为 功能代码 其中 07 表示 功能为 MAC ID 检测

下图紫色为 为资源节点编号

?

位字节

7

6

5

4

3

2

1

0

字节1

帧信息

FF

1

RTR

0

X

X

0

1

1

0

字节2

帧ID1

ID28

0

ID27

0

ID26

0

ID25

1

ID24

1

ID23

1

ID22

1

ID21

1

字节3

帧ID2

ID20

0

ID19

0

ID18

0

ID17

1

ID16

1

ID15

1

ID14

1

ID13

1

字节4

帧ID3

ID12

ACK

0

ID11

0

ID10

1

ID9

1

ID8

1

ID7

1

ID6

1

ID5

1

字节5

帧ID4

ID4

0

ID3

1

ID2

1

ID1

1

ID0

0

不使用

不使用

不使用

字节6

数据1

????????

字节7

数据2

????????

字节8

数据3

????????

字节9

数据4

????????

字节10

数据5

????????

字节11

数据6

????????

字节12

数据7

????????

字节13

数据8

????????

?

03e3e7ee 是命令帧的ID

?

程序中 发送的命令处理如下

?

技术图片

技术图片

综上 该帧消息的ID号是 03e3e7ee

?

?

?

?

?

?

?

?

?

?

?

下面看响应帧 , 本次的主机 从机 发送程序 用的是 一个 程序

?

当主机1 响应从机2 的响应命令了以后 发送响应帧

?

主机1里面执行的程序分支如下:

是 主程序中 while(1) 循环的部分

?

技术图片

?

1号机发送的响应帧 与 2号机器 先前发送的应答帧 其实仅仅是 ACK 变为了1

?

位字节

7

6

5

4

3

2

1

0

字节1

帧信息

FF

1

RTR

0

X

X

0

1

1

0

字节2

帧ID1

ID28

0

ID27

0

ID26

0

ID25

1

ID24

1

ID23

1

ID22

1

ID21

1

字节3

帧ID2

ID20

0

ID19

0

ID18

0

ID17

1

ID16

1

ID15

1

ID14

1

ID13

1

字节4

帧ID3

ID12

ACK

1

ID11

0

ID10

1

ID9

1

ID8

1

ID7

1

ID6

1

ID5

1

字节5

帧ID4

ID4

0

ID3

1

ID2

1

ID1

1

ID0

0

不使用

不使用

不使用

字节6

数据1

????????

字节7

数据2

????????

字节8

数据3

????????

字节9

数据4

????????

字节10

数据5

????????

字节11

数据6

????????

字节12

数据7

????????

字节13

数据8

????????

?

?

该响应帧的ID 号是 037e3f7ee

?

技术图片

?

技术图片

?

同时 由于 存在 下面的语句 发送响应帧的 1号 单板 的数码管 变为6

技术图片

?

?

?

阶段3 刚挂在网络上的2号机器 接收到已经挂在网上的1号机器 的应答以后,

?

注意 此时 的2 号机器 还处于 do{} while() 循环里, 所以 在中段程序里 执行的

是 if(Check_MACID_Process_Flag==1) {} 分支

技术图片

?

同时 他还在执行 while(1) 之前 的 do{} while () 循环里

技术图片

运行结果如下图

技术图片

?

?

?

?

?

?

?

?

最后 再次用简短的话语总结

CAN通讯 协议的前提 条件 是

发送命令帧 有 源地址(本机的MAC地址1) 和 目标地址

响应命令帧 有 源地址(本机的MAC地址2) 和 目标地址

一般 MAC 地址1 与MAC 地址2 肯定是不相同 。不然无法保证通讯网络里 节点的MAC地址 唯一。

?

但是 假设 实际情况中出现了 已经工作良好的网络上, 需要挂接上一个新的CAN设备,且该设备与该网络上的某个CAN 节点的MAC地址一致,那么我做程序的时候,这个新挂接上来的 CAN设备 发送 的目标节点的地址与 源节点的地址 肯定是一致的。

因为我要寻找的就是 该网络上 与 挂接的新????CAN设备 物理地址 一致的设备。

?

同时网络上已有的那个设备(该设备的ID与新挂接设备的ID 冲突)发送的目标地址与源地址也必须与新挂接 设备的ID 一致。

?

于是 就有了 新挂接CAN设备的发送程序, 与 网络上与新挂接设备地址 冲突的节点 可以共用一个子程序

技术图片

同时 子程序里面的 源地址 与 目标地址的设定必须 要与当前本机的MAC一致都一样。

?

请把最终的话语 用清晰 明了的语言描述清楚 不要向下面那样

技术图片

?

养成良好的严谨的习惯很重要。

?

硬件平台的视频 以及 程序 已经放在网盘 。以后备用。

?

CAN网络上新增加的设备与网络上已有设备MAC地址冲突的软件解决方案

标签:网络   本机   显示   width   部分   src   语言   none   版本   

原文地址:https://www.cnblogs.com/bailongwei654321/p/12207198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!