0%

CAN和MODBUS

起因

之前一直没搞懂,这两个的区别,甚至以为可以一起使用,哈哈哈,两个还是有很大的本质区别的。首先就是实时性了。还有成本,效率,使用场景都是不同的。

性质

都是基于差分信号来实现的,数据发送和传输,所以,它们有着一样的电气特性。但是,他们的数据和工作原理是完全不同的。最直接比较吧,CAN是全主机,MODBUS是一主多从。因为CAN有线与操作,所以,0电平就会被当成显性电平,从而获得话语权。显性电平和隐性电平也是can独有的。而MODBUS就是在485的技术上,增加一些对于帧的要求,对于时序的要求。相比起CAN来说,数据帧和查错能力完全不能比

MODBUS

Modbus协议是一种用于工业控制的网络通讯协议,可以片面的理解为,Modbus协议一种机器与机器之间进行数据、信息传递的一种格式规范。
Modbus协议还遵循主从协议,支持单主机,多从机,最多支持247个从机设备。并且,在同一个通信线路上只会有一个主机,所有的通讯过程全部由主机主动发起,从机接收到主机请求后,会对请求做出响应。从机不会主动进行数据的发送,从机之间也不会有通讯过程。
Modbus的通讯方式有:串行通讯方式、以太网通讯方式、串行-以太网转换方式、无线通讯方式

MODBUS确实可以用于网络tcp通信,不过这个我确实没用过,以后用到再补充。

这边就说一下,串行链路吧,就是一个一主多从的模式,主机发送数据给特定从机,从机接收到进行通信,有点iic的味道,一般是建立在485上面的。在iso中属于第七层的应用层,所以,它是可以做到,只要从设备也好些对应从处理,就可以通过485网络实现地址访问和处理了,这其实就是一个广播,对应从机接收到就相应罢了。

如果从机突然没了,主机也是会知道的,这个就看怎么处理了。也要知道一件事情,这个从机出问题是非常麻烦的,设置可能会破坏这个总线链路。

CAN

CAN,这个一看就是车载标配了,可以说,只要是车载就是CAN,基本没有modbus的事情,modbus都是工控那些为主,这是为什么呢?

因为CAN没有主从之分,只有优先级之分,所有人有情况都要立刻反馈到总线之中,比如有刹车信号了,立刻发送到总线之后,此时刹车在发送信号之前就应该执行了,不过是通知总线而已,此时一些其他的制动设备就跟着一起运作,上位应用也因此响应。

不同上面的modbus,它是一主多从,就导致了从机很多时候,是没有主动访问的权限,都是等待主机来一个个询问,这明显是不符合车载需要的,而且车载也确实需要优先级来做到一个先后问题,而且can更加严格,要求也更多,出现问题就多看错误码吧,这个没啥好说的,多调多试,看can手册就会了。而且一个从设备出问题,识别到多次错误还错就会把这个设备屏蔽,这个是一个非常厉害的功能。

一般分为标准帧和扩展帧,看实际的id够不够用吧,一般都是够的。

LIN

LIN(Local Interconnect Network)总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。

由于LIN网络在汽车中一般不独立存在,通常会与上层CAN网络相连,形成CAN-LIN网关节点。

什么是LIN总线?高速CAN、容错CAN、LIN总线有什么区别?-CSDN博客

所以就一个CAN-LIN节点挂载CAN总线上面,这个节点下面可以有多个从机,可以把这个节点当成一个主机来看待。

这些从机中有只有一个主机,其他都是从机,一个LIN网络最多可以连接16个节点,也就是15个从机,从机也是智能老实等待主机发送指令,不能越界主动申请发言。

LIN线在物理上是一个上拉到12V的集电极开漏总线,多个节点可以并联到同一根线上,与IIC的SDA类似,但其没有独立的时钟线,靠通信双方约定的波特率进行通信,与UART类似,但由于UART之处在于,其可以通过同步场进行时钟同步,使传输变得更可靠。这样与CAN总线的一对差分双绞线不同,其抗干扰能力大大减弱,通信速率最高只能20Kbps,而CAN可达1Mbps。

LIN线拓扑结构是主从结构的星型模型,所有传输都是master发起,slave不可以主动发起请求。这个其实与modbus更类似。也可以把slave看做消息的发布者,master看成消息的订阅者,想要获取某个变量值,就需要不断问询对应节点对应的报文。这个结构就决定了LIN线传输的消息不可能太多,以保证消息更新的实时性,通常一条LIN线上定义的消息要比一条CAN线上定义的消息少一个数量级。

汽车LIN总线与CAN的区别是什么?-EDN 电子技术设计 (ednchina.com)

使用场景

首先呢,CAN是多主机的,而且MODBUS只有一个主机,所以MODBUS同一时刻只能有一个设备在发送数据。但是很多时候,有些设备是高优先级的,他必须要得到发言,不可能等待其他人执行完毕,而且还要满足大家都发送,所以这个时候线与的作用就出来了,可以多主机仲裁,而且可靠,很多时候好像确实是CAN更好更更可靠,但是CAN更贵,配置也更难,工控的话MDOBUS就足够了。

总结

CAN和MODBUS,各有各自的优劣,主要还是看开发项目的用途。车载终究是涉及到人生安全,标准要更高一点,没办法的,成本也是高的,可靠那些CAN收发器价格就知道了,尤其是车载MCU价格搞得吓人,就是CAN的收发器多。MODBUS,就成本低,更适合工控啦。

-------------下次的来访是什么时候呢[doge]-------------