什么是CAN通信呢?通俗的讲一讲CAN通信

通信网络

630人已加入

描述

首先,什么是CAN呢。

学过散装英语的人,应该都有知道有一个单词叫can 。

那我们要讲的这个CAN,很多时候,发音可以和can一样。

这么说来,CAN通信的CAN,并不是一个单词,而是缩写了。

那这个CAN是由什么缩写的呢。

Controller

Area

Network

组合起来就是CAN了。接触过CAN的读者应该了解,CAN应用在汽车总线比较多。

一开始我也以为CAN里的C,指的是Car。Car Area Network ,唉,好像也可以哦。

抛开散装英语,这那个CAN,大意就是一种控制器的局域(区域)网络总线了。

就是支持CAN通信的设备,通过总线接到一个通信局域网络里。这个局域网和我们说的以太网的局域网不是一回事。

实际上,在控制器通信数据采集领域,其实应该是由以太网,串口和CAN三分天下的局面。

三者都支持总线。但是我们常见的主要是以太网和串口的控制器居多。高端点的主要是以太网,低端的设备主要就是串口。可能也和易用性,成本等原因,当然也有领域的不同吧。

像CAN主要在于汽车领域为主。

那些说还有什么SPI,IIC,IIS,1-Wire之类的,你出去。此总线非彼总线。

那么CAN不是以太网,它是什么呢。

请看。

在笔者报名参加了88块学画画培训班之后,画下了如下不是很严谨的CAN总线图。

ModBus协议

为什么说不严谨呢。因为没有画上地线,还在终端电阻之类的。

眼力好的同学呢,很快就发现了,CAN总线,其实就是由H线和L线组成的。

似乎有一种似曾相识的感觉,却又说不上为什么,这么咋一看,说它是485总线都会有人信。

单纯从线来看,确实和485总线很相似。所以接下来介绍CAN,会尽量和我们熟悉的485总线类比。

CAN总线的这两根线呢,一般叫做CAN-High和CAN-Low。简称嘛就是CAN-H和CAN-L .

再简一点就是H和L了。

会有同学问了,可以再简一些嘛。这个问题问得好。

据悉,有些485设备已经可以不区分+和-,也就是485的A和B两根线可以反着接也能自动识别和适应。

但是在CAN设备上,这个不是很成熟,所以,还是尽量要区分H和L。

同样的,CAN的通信,也是靠H和L两根线的差分信号进行传输信号的。这点和485很类似了。

ModBus协议

ModBus协议

(图片来源于网络)

通过不同的电平组合信号,就能传输0和1信号,也就是一个位的信号。

8个位就组成一个字节。N个字节就组成了CAN协议了。

ModBus协议

(图片来源于网络)

ModBus协议

(图片来源于网络)

CAN的通信和485(也就是串口通信)很类似,也是有什么起始位,停止位之类的。

只是CAN会复杂一些,多了很多段。

其实多出来的内容,无非就是增加CAN通信的各种稳定性,协议可靠性等等。

对用户来说,那个起始位停止位其实不关心的。

只需要CAN设备双方通信参数匹配,就可以用来传输应用层数据了。

所以应用层数据才是我们比较关心的,也是我们使用中用到的。

刚才也提到了,CAN通信双方参数匹配,主要是要适配哪些呢。

像串口通信,要设置的波特率,数据位,停止位,校验位。

但是CAN呢,很多时候,只需要设置波特率就可以了。

毕竟波特率也是影响传输速度和距离的关键因素,至于什么数据位,校验位,CAN通信懒得去让用户设置,全都统一多好。省得用户一个个去操心了,是吧。

ModBus协议

与其叫波特率,其实叫比特率更为合适。不同的比特率,能支持的通信线长度也不一样。具体根据需要匹配即可。

超过500米的通信线通信,笔者还没有尝试过,有条件的同学,可以去购买繁易支持CAN通信的FBox网关或者触摸屏去使用。

前面介绍了一大堆,简单用几句话概括就是:

CAN通信只需要两根线(H,L),双方设置同样的波特率,就可以进行收发数据。

CAN收发数据,收的是什么,发的又是什么呢。

这应该是CAN通信关键的内容了。

CAN通信和串口通信不一样。

串口通信至少要发送一个字节,通信双方需要约定好通信内容格式长度等,比较著名的就是modbus协议,当然还有各种PLC协议的串口协议,也都是约定好格式。

而CAN通信,在这点就稍微好一些,只要是CAN通信的,都是标准的。

ModBus协议

不管是哪一家的CAN设备,通信双方收发的内容格式,就是统一的。

就像串口通信,都规定使用modbus rtu协议一样。

那我们这个CAN协议报文,就和modbus 类比一下。

modbus的通信,主要是读取位和字变量。位有0x,1x,字有3x,4x。地址访问都是65535个。

就拿4x地址来说,就是有65535个字。一个字是16个位。

可以把modbus理解为16位数据宽度的协议。modbus就类比于16位系统电脑。

看看CAN报文。CAN_ID如果类比于4X这样的寄存器地址的话,地址是有536870911个地址,5亿个地址。

然后每个地址能表示的数据是8个字节,也就是4个字。64个位。

那CAN就是64位系统了。

modbus为6万个字。

CAN为5亿个4字,10亿个双字,20亿个字。地址表示空间范围远超串口的modbus 。

ModBus协议

在CAN报文里,最前面三个位,主要是标志位。用于表示不同的通信类型。

ModBus协议

就刚才的报文格式来看,好像说不上为什么,感觉看得懂,但又哪里不太明白,也不知道怎么问。

学过modbus报文的人都知道,modbus报文呢,有主站发送方和从站回复方的。主站请求数据,从站回复数据。主从站报文不一样的。。

这就对了,从报文上,没有提到谁是主,谁是从哦。难道主从发送的都是同样的报文。

没错,就是这么大胆。

比如0000 0012 08 00 01 02 03 04 05 06 07 这个CAN报文,

指就是帧ID地址为0x12,发送8个数据长度,数据内容是00 01 02 03 04 05 06 07 。

主站可以发送给从站,从站也可以发送给主站。

CAN报文可以没有主从概念。但是我们从使用上,可以分主从。

从站发这个报文给主站,相当于上报从站的数据给主站,比如温度,湿度等变量。

如果是主站发送这个报文给从站,相当于主站给从站发送写命令或者控制命令。

思维敏捷的同学马上就反应过来了。

我主站都没有问呢,你个从站就给我发内容,你知道我要读什么内容了吗?

刚才提到,CAN总线的地址负载能力大概在5亿个左右。如果是标准帧,只有0x7FF个。

那么就需要使用CAN通信设备的人,进行地址规划,什么地址内容代表什么。

话是这么说了,但是一想,好像哪里不对。modbus是可以主动请求数据的。难道CAN也不行吗?

这就是所谓的远程帧了。

远程帧呢,大概意思就是,主站如果想请求某个帧ID(地址)的数据,刚向总线发送一个远程帧。也就是这个报文上,某个标志位置1的事。这时候对方设备向总线发送数据帧,就完成一次主动请求数据了。

补充一下,另一个设备收到远程帧呢,在CAN里面,并不会要求其它设备一定要回复。回复不回复远程帧,取决于这个CAN设备的程序,可以回,可以不回,爱回不回。

以上就是通俗的介绍一些CAN通信的内容了,抛开那些繁琐的细节。毕竟对我们CAN的使用者来说,不需要深入了解CAN里的每一个细节。

有时候就是把CAN设备拿出来,把两根线接好,上电,通信进行通信,看到数据即可。大不了就是设置了一个波特率。

双方再维护一下数据点表,哪个地址代表什么意思。对着数据点表添加数据,调试,通信正常,关机,走人。

CAN通信只是一个基本的通信接口或者协议。

在CAN之后,还有CANOpen之样的二次协议。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分