从0到1:开启CAN通信学习(一)
1 初识CAN通信
说起CAN通信,可能很多人都比较陌生,但实际上我们却一直在和它打交道。随着家用汽车的普及,我们开车过程中的每次刹车、每次踩油门,甚至每次的开车门、开车窗,其实都是CAN通信的应用。
【公众号dotNet工控上位机:thinger_swj】
2 CAN基础概念
CAN 是Controller Area Network 的缩写,是ISO国际标准化的串行通信协议。1986年,为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,德国电气商博世公司开发了面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。CAN总线协议是建立在OSI七层参考模型的基础上的,但是它的模型结构只有三层,即物理层、数据链路层和应用层,CAN总线是一种串行数据通信协议,其通信接口中集成了CAN协议中的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、CRC校验及优先级判别等工作。
CAN总线有以下特点:
多主工作,网络上任意一个节点均可以在任意时刻主动向网络上的其他节点发送信息,而不区分主从,通信方式灵活。
网络上的节点信息会分成多种不同的优先级,可以满足不同的实时性要求。
采用非破坏性位仲裁机制,当两个节点同时向网络上传送信息时,优先级低的节点主动停止数据发送,而优先级高的节点则不受影响继续传输。
以点对点、一点对多点及全局广播来进行数据传输。
直接通信距离最远可达10KM。
通信速率最高可达1MB/S。
点数实际可达110个。
用短帧结构,每一帧的有效字节数为8个。
每帧信息都有CRC校验及其他检错机制,数据出错率较低。
通信介质可采用双绞线、同轴电缆及光纤,一般采用廉价的双绞线即可。
节点在错误严重的情况下,具有自动关闭总线的功能,切换与总线之间的联系,以使总线上的其他操作不受影响、
3 CAN通信与RS-485通信区别
RS-485总线也是现在工业现场应用非常广泛的总线协议之一,因此我们可以结合RS-485通信来更好地了解CAN通信,具体表现在以下几方面:
通信距离:RS-485总线最大传输距离是1.2KM,CAN总线最大传输距离是10KM。
输速率:RS-485总线传输速率为300-10M bps,CAN总线传输速率为5K-1M bps。
网络结构:RS-485总线网络构成为主从式集散控制系统,CAN总线可以实现点对点、一对多及全局广播的形式来发送接收数据。
网络容量:RS-485总线网络的一条通信最大可接255个节点,CAN总线实际节点可达110个或更多。
通信方式:RS-485总线网络很难实现实时通信,CAN采用非破坏性技术,并结合位仲裁机制,可以大大节省总线冲突裁决时间。
通信可靠性:RS-485总线网络的容错与检错能力较差,CAN总线在错误严重的情况下,具有自动关闭总线的功能。
- 【公众号dotNet工控上位机:thinger_swj】
从0到1:开启CAN通信学习(一)的更多相关文章
- 开启CAN通信学习(二)——基于Kvaser的CAN通信案例
1 案例硬件介绍 Kvaser是瑞典的一家专门提供CAN和LIN总线分析仪及数据记录仪的公司,在CAN产品开发领域已经有近30年的经验,本案例选择的CAN通信硬件型号是Kvaser Leaf Ligh ...
- C# 通信学习笔记
C# 通信学习笔记 DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不 ...
- netty4.0 Server和Client的通信
netty4.0 Server和Client的通信 创建一个maven项目 添加Netty依赖 <dependency> <groupId>io.netty</group ...
- 二进制方式部署Kubernetes 1.6.0集群(开启TLS)
本节内容: Kubernetes简介 环境信息 创建TLS加密通信的证书和密钥 下载和配置 kubectl(kubecontrol) 命令行工具 创建 kubeconfig 文件 创建高可用 etcd ...
- IIS6.0服务器完美开启Gzip压缩[转]
转自:http://seo.qiankoo.com/731 在昨天服务器还没重装之前,这个服务器已经开启了Gzip,去年配置的时候就很波折,因为配置文件在C盘,所以重装后Gzip就没了. 今天理论上第 ...
- swift2.0 字符串,数组,字典学习代码
swift 2.0 改变了一些地方,让swift变得更加完善,这里是一些最基本的初学者的代码,里面涉及到swift学习的最基本的字符串,数组,字典和相关的操作.好了直接看代码吧. class View ...
- Android中使用开源框架EventBus3.0实现Fragment之间的通信交互
1.概述 在之前的博文中简单介绍过如何实现fragment之间的信息交互:<Android中Fragment与Activity之间的交互(两种实现方式)>,今天继续给大家介绍一种可以实现此 ...
- C#同步,异步的理解,包括5.0中await和async(学习笔记)
之前在工作中一直用的是同步线程,就是先进入画面的load事件,然后在里面进行数据库调用的处理.后面又遇到了公司软件中一些比较古老的代码,一开始在那块古老代码中增加机能的时候,我想用到数据库的数据给画面 ...
- 《vue.js2.0从入门到放弃》学习之路
原文地址: Vue.js2.0从入门到放弃---入门实例(一):http://blog.csdn.net/u013182762/article/details/53021374 Vue.js2.0从入 ...
随机推荐
- 小米商城项目(JSP+Servlet项目)
小米商城项目 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 在这里插入图片描述 基于Servlet+JSP开发的小米商城项目,因为 ...
- mysql数据库 创建、查看、重命名、复制和删除的基本操作
在数据库中,表是最重要.最基本的对象,是存储数据的基本单位.数据表从哪里来呢?数据表由关系模式转换而来.但不是简单的转换. 在设计表结构时要考虑下面几个方面: 字段名要通俗易懂且具有代表性,字段名不允 ...
- 如何更换Windows中命令提示符(cmd)中的字体
前言 CMD(命令提示符),全称"Command Prompt":对于这个东西我相信大部分用电脑的人基本都知道,因为常常会用到一些基本的DOS命令进行一些电脑的基本查看处理:但是我 ...
- 动手实现一个简单的 rpc 框架到入门 grpc (上)
rpc 全称 Remote Procedure Call 远程过程调用,即调用远程方法.我们调用当前进程中的方法时很简单,但是想要调用不同进程,甚至不同主机.不同语言中的方法时就需要借助 rpc 来实 ...
- day36 作业
客户端 import struct import json from socket import * client=socket(AF_INET,SOCK_STREAM) # client.conne ...
- (二)pandas处理丢失数据
处理丢失数据 有两种丢失数据: None np.nan(NaN) import numpy as np type(None) NoneType type(np.nan) float 1. None N ...
- (三)pandas 层次化索引
pandas层次化索引 1. 创建多层行索引 1) 隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 Series也可以创建多层索引 import numpy ...
- 如何在同一台电脑上部署多个tomcat实现多个tomcat在同一台电脑上同时启动
有时候我们在开发的过程中难免会遇到需要在同一台电脑部署多个tomcat,且还要他们能够都单独同时启动不会对其他的tomcat造成影响 本文就简单记录一下,如何来实现这个骚操作 1. 下载tomcat的 ...
- Scala 面向对象(十三):隐式转换和隐式参数
隐式转换的实际需要=>指定某些数据类型的相互转化 1 隐式函数基本介绍 隐式转换函数是以implicit关键字声明的带有单个参数的函数.这种函数将会自动应用,将值从一种类型转换为另一种类型 隐式 ...
- java 基本语法(十一) 数组(四)数组的常见算法
1.数组的创建与元素赋值: 杨辉三角(二维数组).回形数(二维数组).6个数,1-30之间随机生成且不重复. 杨辉三角 public class YHSJ { public static void m ...