CAN 与 RS-485 对比

news/2024/10/21 19:54:00/

RS-485和CAN都是串行通信协议。它们允许在单个系统中布置多点设备,大大缩短了电缆长度,差分设计适用于强干扰的环境,两者都使用120 Ω电阻端接,并配有内部过压电路以进行故障保护。RS-485和CAN有太多的共同点,但无疑是不一样的。

RS-485更多的是应用在领域,CAN被广泛设计用于汽车行业。但现在,不仅汽车行业广泛使用CAN,而且航空航天等其他行业也开始转向CAN。

但是要了解使这些协议与众不同的差异,我们必须知道它们到底是什么。

先简要介绍一下RS-485。

RS-485:自20世纪80年代中期以来一直存在的串行通信协议。最初是为工业市场的应用而定义的,或者更好的说,它是为工业应用而开发的。

RS-485由电信行业协会和电子工业联盟联合发布,因此它也被称为TIA / EIA-485。但更能被业界接受的名字是RS-485,它的应用在:

  • 运动控制设备

  • 旋转编码器接口

  • 计算机自动化系统(键盘、鼠标、打印机等)

  • 工业控制系统

  • 剧院应用

  • PLC

虽然RS-485被应用到多种场合,但越来越多的行业似乎转向CAN用于其工业机械。

图片

为什么要“切换”到CAN总线?

图片

RS-485未能成为通信协议。它只是被证明是一个电气接口。它确实提供了多点通信功能,但仅适用于至少具有UART的设备。

01

一主多从系统

从技术上讲,它是一个半双工系统,一次只能有一个设备可以传输,其他设备必须监听。因此,它只能为多个节点串行地进行数据交换提供基本的物理链路。即:一主多从。

图片

与CAN不同,CAN总线的设备,每个节点都可以充当主节点,并确切地知道如何以及何时发送信号。

RS-485遵循典型的主从拓扑结构。当通信处于活动状态时,所有从站/节点都接收主站单元发送的数据。如果一个“从机”必须回答“主机”的信息,它就必须切换为“主机”,这样才能发送它的信息。

这种连接的一个特殊功能是,连接到线路的所有设备都会接收传递的所有内容。当设备必须发送时,它通过RTS信号(传输请求)激活其传输线。传输数据的元素也接收传输的数据。

当RS-485总线出现多个设备同时发送消息时,会导致过载或可能信号碰撞,进而使整个消息无效或导致数据错误。

02

容错机制

对于RS-485,这还不是它唯一的缺点。在定义方面,没有明确规定以下的内容:

  • 寻址节点的过程

  • 避免数据冲突的方法

  • 框架结构

  • 沟通程序

  • 错误检测等,

图片

3个理由了解为什么CAN总线更好

图片

CAN总线的显著优势在于它高度灵活并提供许多独特的功能,从而导致其他行业的采用率大幅增加。

CAN总线是一种双线、多点的串行通信标准协议。就像RS-485一样,通过CAN的信号以CAN-H和CAN-L作为差分电压流动。差分信号的传输类似于RS-485,但事实差异很大。CAN总线的优势主要体现在以下三个方面:

01

消息传输

CAN指定了总线上的完整数据包,而不仅仅是物理层。

CAN硬件自动处理数据包的开始/结束检测、冲突检测、回退、重试、校验和生成、验证,以及与处理硬件故障相关的更多功能。用户只需要传输消息标识符和有效负载,CAN硬件负责添加数据包的其他部分。

使用RS-485时,其实RS-485底层未进行任何定义:如数据来自何处、谁可以发送它、正在发送哪些数据、接收的数据是否损坏等。(除非在软件中指定,否则什么都不知道)。

02

仲裁

RS-485的主要问题是信号拥塞。这通常是由于多个节点试图在总线上同时发送数据,从而导致过载。

CAN遵循仲裁,其中消息按状态顺序排列和接收。失去仲裁的节点将重新发送其消息。

对于所有节点,这种情况将继续进行,直到只剩下一个节点正在传输。

由于消息式仲裁,CAN无需采取额外的预防措施即可实现多主机操作。对于RS-485,这只能通过特定协议来实现。

03

协同和错误检测及纠正

当CAN总线的一个节点将隐性状态“写入”总线并看到它实际上处于主导状态时,它知道另一个节点正在驱动它。尝试写入隐性状态的节点将后退并等待消息的结束。

写入主导状态的节点永远不会知道发生了这种情况。它的消息通常由所有其他节点发送和接收。这种冲突检测功能允许在没有任何中央仲裁的情况下实现对等网络架构。节点发送消息,但在检测到冲突时后退,然后在当前数据包完成后重试。

最终,总线可用时发送这些其他消息,并且发送先前碰撞的消息时不会发生冲突,包括 16 位 CRC 校验和。

RS-485不能触发任何消息冲突,系统的应用软件必须保证避免碰撞。

图片

综述

图片

虽然RS-485端口仍然被应用到到许多新开发的设备中中,但CAN功能的如仲裁、错误消息检查、改进的带宽和更大的数据场,加速了对CAN总线的需求。


http://www.ppmy.cn/news/1072690.html

相关文章

C#中的get和set

当我们定义属性的 get 访问器和 set 访问器时,其中的 return 和 value 分别代表以下含义: return:在 get 访问器中使用,表示返回属性的值给调用方。它用于将属性关联的字段的值返回给外部代码。value:在 set 访问器中…

Vue2向Vue3过度核心技术自定义指令

目录 1 自定义指令1.指令介绍2.自定义指令3.自定义指令语法4.指令中的配置项介绍5.代码示例6.总结 2 自定义指令-指令的值1.需求2.语法3.代码示例 3 自定义指令-v-loading指令的封装1.场景2.需求3.分析4.实现5.准备代码 1 自定义指令 1.指令介绍 内置指令:v-html、v…

【Harmony】日志打印工具(直接粘贴复用)

序言 Harmony开发中,其中自带的日志打印使用起来感觉真的是一言难尽,感觉挺麻烦的。 自带Log打印用法 public static final HiLogLabel TAGLABLE new HiLogLabel(HiLog.LOG_APP, 0x00201, "MainAbilitySlice");//使用HiLog.error(TAGLABLE,…

Python爬虫:打开盈利大门的利器

导言: 随着互联网的迅速发展,越来越多的企业和个人开始意识到数据的重要性。而Python爬虫作为一种自动化获取互联网信息的技术,为人们提供了更便捷、高效的数据获取方式。本文将介绍基于Python爬虫的五种盈利模式,并提供实际案例…

C/C++与C#随笔

C/C与C#中的值类型和引用类型 /* C/C code */ int i0; //声明值类型变量i,值为0 int &i_refi; //声明引用类型变量i_ref,是i的引用,与i等价,可作为引用传参int *i_ptr&i; //声明指针类型变量i_ptr,指向 int *i_ptr2&i_ref; //与上面…

<C++> 多态

1.多态的概念 多态是指同一个函数在不同情况下表现出不同的行为。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 举个例子:比如买票…

Springboot 整合 Redis配置

RedisService接口 import java.util.List; import java.util.Map; import java.util.Set;/*** Redis操作Service* Created by macro on 2020/3/3.*/ public interface RedisService {/*** 保存属性*/void set(String key, Object value, long time);/*** 保存属性*/void set(St…

【08期】ArrayList常见面试题

简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。 线程安全性 对ArrayList的操作…