CAN总线基础与模拟软件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个实际的例子,配料系统——CAN通信设计,ID设计
在进行CAN总线通信的设计时,要注意: 1,要能区分出各种不同的信息, 用ID号来标识。 2,要区分出各种不同信息的优先级,比如发生了报警,优先级要高。 3,要区分出信息是要大家都接收的还是只针对某一个控制器的。(接收过滤) 比如有8个配料控制器,采用标准帧进行设计,问题可以如下解决:
第3个问题,CAN总线上节点对数据的选择接收——过滤机制
一个实际的例子,配料系统(简装版)
工作过程: 1,监控计算机确定哪些配料控制器进行配料任务,发选中消息给主控制器,主控制器 发送一条选中信息给所有的配料控制器,告知配料控制器哪些进行配料工作。 2,主控制器按一定顺序发送启动信息,让配料控制器启动,配料控制器启动后发送一 条启动成功的应答消息。 3,配料控制器启动后开始称量物料,把物料的流量值周期性的发送给监控机。 4,如果某个配料控制器出现故障,要发送报警信息。 5,当系统要停止时,主控制器发送停止命令,让配料控制器停止工作,并应答。
得出的结论,ID号小的能获得较高的优先级。 通过这样做,既照顾了数据优先性,碰撞的概率也降到极低的程度
第3个问题,CAN总线上节点对数据的选择接收——过滤机制
过滤机制是靠设置接收的ID和屏蔽位共同完成的。
1.默认情况下,总线上的节点接收所有的数据。 2.只接收某一个ID号的数据帧的情况是这样实现的: 设定要接收的ID号到节点的CAN控制器中,并且把相应的屏蔽位全设置为1. ID 0x317 例如:要接收ID号为0x317的标准数据帧:
CAN模拟软件运行的环境
计算机
计算机
计算机
计算机
计算机
计算机Ethernet 计算机 计算机 计算机
基础学习可以借肋一下模拟软件,在自己的计算机上不需要CAN的相关硬件设备, 可以模拟出CAN总线的一些特性,有助于理解CAN的一些基本概念。
第1个问题,CAN总线传输的数据——认识标准数据帧
CAN四种帧类型: 数据帧、远程帧、错误帧、超载帧;数据帧是实际中经常使用的。 标准数据帧:
让2#配料控制器停止的数据帧为: ID: 01000100010 = 0x222 (ID号) DLC: 1 (数据长度) 数据: 0xFE (1个字节的数据)
一个实际的例子,配料系统——CAN通信设计,接收屏蔽
还有一个问题: 接收方怎么选择信息? 2个例子: 1.主控制器接收1~8号配料控制器的报警信息,前面说过它们的报警信息为以下这一组: 00000010001 = 0x011 1#配料控制器发送的报警信息 00000010010 = 0x012 2#配料控制器发送的报警信息 00000010011 = 0x013 3#配料控制器发送的报警信息 00000010100 = 0x014 4#配料控制器发送的报警信息 00000010101 = 0x015 5#配料控制器发送的报警信息 00000010110 = 0x016 6#配料控制器发送的报警信息 00000010111 = 0x017 7#配料控制器发送的报警信息 00000011000 = 0x018 8#配料控制器发送的报警信息 11111110000 = 0x7F0 屏蔽位 2.主控制器发送给2#的启/停信息,由于只有2#配料控制器接收,所以是全屏蔽的地方。
Hale Waihona Puke Baidu
对于标准帧,ID和MSK都是11位的,一个ID的bit就对应一个屏蔽的bit,屏蔽的某位为 1就说明接收到的ID的那一位必须与设定ID那一位相同,如果不相同就不接收;而屏 蔽位为0接收的ID那一位可以是(0或1)
第3个问题,CAN总线上节点对数据的选择接收——过滤机制
2.接收一部分ID号的实现: 例如:要接ID号为0x310到0x317标准数据帧。
一个实际的例子,配料系统——CAN通信设计,数据设计
细心的同学发现,我们上面设计的ID有的是主控制器发送给2#配料控制器的启/停信 息,一个ID只能代表一个意思? 那是让2#启动还是停止呢?
别忘了,我们还除了ID 可用外还有0~8bytes的数据区可以用,它可以装我们要发送 的数据。
例如:控制配料控制器的启动停止,相当于一个开关量,我们最多用一个字节的数据 就够了。数据为0xFC表示启动, 0xFE表示停止 所以让2#配料控制器启动的数据帧为: ID:01000100010 = 0x222 (ID号) DLC: 1 数据:0xFC (数据长度) (1个字节的数据)
011 0001 0000 b 011 0001 0001 b 011 0001 0010 b 011 0001 0011 b 011 0001 0100 b 011 0001 0101 b 011 0001 0110 b 011 0001 0110 b 111111111000b
->0x310 ->0x311 ->0x312 ->0x313 ->0x314 ->0x315 ->0x316 ->0x317 屏蔽位
动动手吧,玩一会再把作业做了!
1.先把数据帧的格式复习一下,做做数据帧的收发实验
2.优先级实验
3.实验滤波实验
4.用一下虚拟设备 4.
一个实际的例子,配料系统——CAN通信设计
先对所有收发信息进行统计:这里介绍主控制器的信息和配料控制器的信息 主控制器传送的信息有: 发送: a.配料控制器选中信息,所有控制器都接收,优先级较低 b.配料控制器启动/停止信息,针对某控制器来控制启动停止,优先级一般 接收: a.各个配料控制器发送的报警信息, 要能区分出是哪个控制器发的, 优先级较高 b.各个配料控制器的启动/停止应答信息,能区分出是哪个控制器,优先级一般 配料控制器传送的信息有: 发送: a.发送实时称量的信息,各个控制器要有区分,优先级一般 b.各个配料控制器发送的报警信息, 要能区分出是哪个控制发的, 优先级较高 c. 各个配料控制器发送启动停止应答信息,能区分出是哪个控制器发的,优先级一般 接收: a.配料控制器选中信息,所有控制器都接收,优先级较低 b.主控制器发出来的启动/停止信息,针对不同控制器,优先级一般
注:ID号里的x代表的是跟控制器相关的数据(实际x是控制器号),x的取值范围0~F
一个实际的例子,配料系统——2~3人一组试试协议
2~3人一组,来模拟配料系统,一个同学做主控制器,其它的同学做配料控制器,模拟 配料系统的工作过程。 1.定好配料控制器的号,按上面的协议表定出各条消息(ID和数据)。 2.主控制器发送选中命令,配料控制器同学看接收到的信息判断自己是否被选中。 3.主控制器依次给配料控制器同学发送启动命令,配料控制器同学回应一个启动成功 消息。 4.配料控制器的同学发送流量值信息, 主控制器同学可以用虚拟液位来看流量。 5.配料控制器的同学发送报警信息。 6.主控制器的同学区分是哪个配料控制器发送的报警信息。 7主控制器同学依次给配料控制器发送停止信息,配料控制器的同学收到后发送一个 停止成功消息。 把发送的数据和接收到的数据,附在作业上。 会出现的问题:如果都按照上面的协议表做实验,大家都是连在总线上的, 会出现的问题:如果都按照上面的协议表做实验,大家都是连在总线上的,会出现 协议冲突,每一组同学可以用扩展帧来制定自己的协议(比如 比如:用 协议冲突,每一组同学可以用扩展帧来制定自己的协议 比如 用ID12, ID13两位代表 两位代表 组号),既解决冲突,又能把第5题做完 题做完。 组号 ,既解决冲突,又能把第 题做完。 作业按组交。第5题按一小组做一份,前四题每个做自己的。
CAN总线基础与模拟软件
CAN总线的基本问题
计算机 CAN BUS CAN控制器 CAN控制器 CAN控制器
传输机构
执行机构
检测机构
其他网络
要关注的问题
1,这个总线是怎么工作的?——它们共用一条通信线路。. 2,它们传送的数据是什么样的?——帧格式 3,它们共用一条通信线路,竞争怎么办?——优先、仲裁,谁最优先 4,总线上传送的信息很多,某个控制器怎么接收自己需要的数据?——接收,过滤 5,还要注意CAN总线通信速率的问题
最前2bit设为优先 级 00 最高 01 一般 10 较低 11 最低 最后4bit设为控制器号 1111=15为主控制器 0001~1000,1~8# 0000相当于所有控制器 (用于区分不同控制器)
11 bit ID的使用
例如1#配料控制器发送的报警信息 00000010001 = 0x11 2#控制器发送的流量值信息 01000110010 = 0x232 主控制器发送给2#的启/停信息 01000100010 = 0x222 中间5bit可以代表各种消息 00001 配料控制器发送的报警 00010 主控制器发送的启动/停止信息 00011 配料控制器发送的流量信息 00100 配料控制器发送的启/停应答 00101 主控制器发送的选中信息
扩展数据帧:
数据帖主要有2种:标准帧和扩展帧 (它们主要区别是ID号长度不同;IDE位不同标准帧IDE=0显性电平,扩展帧IDE=1隐性电平。) 使用过程中要注意的有:ID,DLC, 0~8bytes数据,IDE
第2个问题,CAN总线优先级问题——逐位仲裁机制
CAN总线上的设备(节点)是检测到总线空闲才发送的,节点每次发送的数据都很短, 在极短的时间就能发送完成,这样数据不会碰撞,但当总线发送数据量很大的情况下, 难免会有两个设备同时发送的情况。就靠ID的大小来解决。 举例说明两个ID同时发送,逐位仲裁的方法 Node B:00011101101(0xED) VS Node A:00011101111(0xEF)
01000100010 = 0x222
111111111111 = 0x7FF
一个实际的例子,配料系统——协议表
对照信息表、ID的分配、数据的意义来制定协议表
命令/消息 主控制器发 启停命令 选中命令 主控制器收 启停应答 报警信息 配料控制器发 流量信息 报警信息 启停应答 配料控制器收 选中命令 启/停命令 2 1 0x450 0x22x 1节节,每bit代表相应的配料控制器启停 1字节,0xFC代表启动,0xFE代表停止 触发 触发 1 0 1 0x23x 0x01x 0x24x 1字节,0~0xFF代表流量值 1字节,0xEE代表有报警,0xEF代表无报警 1字节,0xCF代表启动,0xEF代表停止 周期 触发 触发 1 0 0x24x 0x01x 1字节,0xCF代表启动,0xEF代表停止 1字节,0xEE代表有报警,0xEF代表无报警 触发 触发 1 2 0x22x 0x450 1字节,0xFC代表启动,0xFE代表停止 1节节,每bit代表相应的配料控制器启停 触发 触发 优先级 ID号 数据 周期性