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

?

已知 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一致都一样。

?

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

?

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

?

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

?

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

时间: 2024-08-27 22:47:34

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

在android4.4上新增加keycode

keycode是android定义好的,但是有时候无法满足需要,进行定制化难免会涉及到新增加keycode.分成两部分,驱动和framework,这里主要讲解framework部分: 一.驱动部分: 1.    在下列文件中定义 如KEY_SMS #defineKEY_SMS 252 可能涉及的文件(可能还需要在别的文件): kernel\include\linux\input.h bionic\libc\kernel\common\linux\input.h external\kernel-h

网络基本功(一):细说网络传输

介绍 常言道:欲练神功,必先练好基本功.之前做了一个关于IP路由,默认网关和掩码的问答贴,做完这个帖子觉得如果对网络知识点做一个系统的阐述,应该会很有帮助. 本系列文章着重于讲解网络管理实际应用中常常涉及的重要知识点,尽量以实用为主.准备写的几个章节暂时有(可能会有增减): 网络传输 交换机 IP地址 VLAN Trunk 链路聚合 静态路由 动态路由 集群 常用诊断工具:ping 常用诊断工具:netstat 常用诊断工具:tcpdump 更多信息 首先来看一个例子: 示例:网络服务器向客户端

让BLE设备的名称包含MAC地址

对于研发和测试BLE来说,经常看到同名的设备,是极为不方便的,一大堆设备同时上电会让同事不知道哪一个设备才是自己真正想操作的目标.再说一下小米手环,家中有三支小米手环,打开设备搜索全是“MI”,都不知道连接哪一个,所以在开始使用的时候才要求用户去敲手环几下,当然这个体验也还算不错.但不管怎样,作为开发者,面对Office里一大堆的BLE设备,能够方便区分还是不错的.因此萌生让设备名称包含一个唯一的标识——MAC地址. 第一步先说如何更改设备名称 BLE中要更改名称是极为方便的,只需要更改扫描应答

【转】 HMC与VIOS对新LPAR提供存储与网络虚拟化的支持

前面的几篇博文的操作环境都是在IVM下,IVM可以看作是VIOS的一部分,或者是对VIOS功能的一个扩展,一个IVM只能管理1台物理服务器,而HMC则是一对多.在有HMC来管理物理服务器的情形下,VIOS中的IVM功能将被屏蔽,其相应的功能将由HMC来接管. 下面是在HMC环境下创建一个新的LPAR的命令:[email protected]:~> mksyscfg -r lpar -m Server-8231-E2B-SN104A4AR -i "name=dennis,lpar_env=a

Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能

原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/index.html 引言 Android设备除了可以与服务器建立连接之外,Android无线API还允许处于同一网段下的两台设备建立连接,或者是物理距离相近的两台设备建立连接.Network Service Discovery (NSD)允许应用程序通过扫描来搜索附近可连接的设备.当然被扫描的设备也同样需要开启该服务.利用这项特性可以使应用程序拥有更强大的功

京东家电2018战略解读,打破边界,带领整个家电行业踏上新征程

昨天,京东家电在北京举行了"起航新征程赋能创未来"2018战略发布会.发布会上,京东家电新任"掌门人"刘俊发布了聚焦于赋能.渠道.服务和营销的京东家电2018年重点战略.下面何玺谈谈对京东家电2018重点战略的看法.一.京东家电赋能战略,家电行业发展新机遇开放赋能是京东家电本次发布会的核心议题.京东家电新"掌门"刘俊在发布会上表示,"京东家电开放赋能战略的核心就是将自身所积累的大量零售运营和服务的能力--最有活力的会员运营体系.最广泛的

Dual Path Networks(DPN)——一种结合了ResNet和DenseNet优势的新型卷积网络结构。深度残差网络通过残差旁支通路再利用特征,但残差通道不善于探索新特征。密集连接网络通过密集连接通路探索新特征,但有高冗余度。

如何评价Dual Path Networks(DPN)? 论文链接:https://arxiv.org/pdf/1707.01629v1.pdf在ImagNet-1k数据集上,浅DPN超过了最好的ResNeXt-101(64×4d),具有26%更小的模型尺寸,25%的计算成本和8%的更低的内存消耗 5 个回答 xiaozhi CV.ML.DL 1.针对视觉识别任务的"网络工程"一直是研究的重点,其重在设计更为高效的网络拓扑结构,一方面考虑更好的特征表示学习,另一方面尽可能减少计算复杂度

学习要趁早,专栏上新,早鸟订阅送图书

51CTO博客专栏又有新内容了<负载均衡高手炼成记>从入门到实操,Linux老鸟带你走上高并发架构之路. 为了贯彻学习要趁早的理念,我们特意为前100名订阅专栏的小伙伴免费赠送纸质图书一本,特别强调!!是!纸!质!图!书!! 每位订阅专栏的小伙伴可在以下书单中任选一本,因每类图书数量有限,先选先得.目前已订阅过<负载均衡高手炼成记>的小伙伴可直接链接小助手(微信:cto51shequ)进行领取. 好了,废话不再多说,上书单: 书名 定价 书名 文本上的算法 深入浅出自然语言处理 6

网络编程释疑之:单台服务器上的并发TCP连接数可以有多少

曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了.我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来说已经远远足够了,但是对于一些拥有很大用户基数的互联网公司,往往面临的并发连接数是百万,千万,甚至腾讯的上亿(注:QQ默认用的UDP协议).虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务器上,那我们只需要扩展出数十台电脑就可以解决问题,但是我们更希望能更大的挖掘单台服务器的资源,先努力