CAN与CANOpen(一)

2023-11-09

CAN与CANOpen(一)基本概念 
CAN与CANOpen(二)报文格式 
CAN与CANOpen(三)错误处理
CAN与CANOpen(四)CANOpen对象字典 
CAN与CANOpen(五)PDO和SDO
CAN与CANOpen(六)网络管理和CAN FD


CAN(Controller Area Network, 控制器局域网络)是由博世开发的一种现场总线,首先应用在汽车领域。由于它的低成本和可靠性,现在被广泛应用在工业测控和工业自动化领域。由于工作的关系,自己接触CAN比较多所以总结一下分享给大家。

  1. 参考

  1. CAN Specification 2.0, Part A
  2. CAN Specification 2.0, Part B
  3. CANopen 协议介绍
  4. CiA Draft Standard 301

2.    CAN与CANOpen的关系

下面是CAN协议与OSI网络模型的一个对比。CAN的物理层分了三层分别是MDI,PMA和PLS,数据链路层分了两层:MAC与LLC。这五层就是最原始的CAN协议,标准是ISO11898。也就是说CAN协议一开始是没有应用层的。后来有一种叫CANOpen的基于CAN的应用层协议被开发出来,标准是CiA301。

在实际开发CAN器件的时候不一定要用CANOpen,你可以根据自己的需要定制自己的应用层协议。


1CANCANOpen的关系

下面会分别介绍CANCANOpen的内容。最后会介绍一下CAN的最新发展CAN FD

  1. CAN的基础知识

本文对于CAN的介绍主要集中在数据链路层,对于物理层涉及很少。对于物理层感兴趣的读者可以访问[1]


3.1    显性与隐形

显性(Dominant)与隐性(Recessive)是总线上最基本的两个状态,也可以表示为“0”与“1”。在物理上它有两条线的压差表示。在隐形的时候,两条线的电压相同,压差为0。当压差超过一定的阈值的时候,总线的状态就变为显性。

2显性与隐性


为什么叫显性和隐形?

假设在总线上挂了2个器件1,2.器件1将总线设为显性,而同时器件2将总线设为隐形。最终总线的状态会呈现为显性。所以当总线上的所有器件都为隐形时,总线的状态才为隐形。如果有一个器件为显性,则总线为显性


3 CAN线

3. 2   冲突裁决

当总线上的几个器件同时发送数据的时候,CAN总线必须决定哪个器件可以发送,而其他的器件必须等待。冲突裁决是CAN协议最重要的一个特性,也是CAN总线做的最漂亮的地方,用很小的成本就解决了这个问题。

总线上的每一个CAN器件都会有一个唯一的ID。ID的大小决定了器件的优先级。ID越小优先级越高。如果几个器件同时发送数据,ID小的优先发送。以下图为例,总线上有A,B,C三个器件。A首先发送数据。当总线上有器件发送数据时,其他器件只能处于监听模式,所以B,C虽然有发送数据的需求但是只能等待A发送结束。当A发送结束之后,B,C同时发送,但是B的ID更小,B优先发送。B发送结束之后C才可以发送

 

4冲突处理与Node ID


下面说明一下当几个器件同时发送时CAN总线是如何做裁决的。

以下图为例。总线上有器件ABCDABC同时发出SOF位为显性。而D为隐形,当它发现总线上的状态与自己的状态不一致时,D就进入监听状态。ABC继续发送数据。发送到ID的第5位时AC为显性,B为隐形。B检测到总线的状态于自己的状态不一致,进入监听状态。A,C继续发送数据。这也说明BIDAC要大。当发送到ID的第1位时A为隐形,C为显性,A进入监听状态。C继续发送。最终ID最小的C发送成功,AB只能等待C发送完成之后再进行发送。然后A会发送成功,B等待,最后才是B发送。从上面的裁决过程可以看出,对于C来说,它的数据发送没有因为冲突而产生延迟。

冲突处理细节


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAN与CANOpen(一) 的相关文章

  • 开发时写TestCase的一些经验

    今天修复完一个业务代码的 bug 手动测试没有问题 但写测试用例出错 在对代码很自信的情况下 因为手动测试过了 我干脆省略了这个步骤 然而偷懒的事情早晚会暴露出来 用 Git 提交到远程时在 Code Review 那里的系统集成测试老是失
  • 【SVM回归预测】基于支持向量机的数据回归预测(libsvm)附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信
  • 如何处理企业间的人际关系

    如何处理企业之间的人际关系呢 其实这个话题很多人一直都迷茫 包括我在内 我也还没有学会如何处理企业之间的人际关系 这是一门大学问 可惜真正写文章的人没有感受 会写文章的人表达不出来 所以都比较少看到诸类的文章 即使有类似的文章 可是以理论化

随机推荐

  • 说一说xgboost和lightgbm的区别是什么

    前面提到了 LightGBM是Xgboost的更高效实现 由微软发布 XGBoost的并行是在特征粒度上的 我们知道 决策树的学习最耗时的一个步骤就是对特征的值进行排序 因为要确定最佳分割点 XGBoost在训练之前 预先对数据进行了排序
  • JAVA 基础题

    1 面向对象有哪些特征 答 继承 封装 多态 2 JDK与JRE的区别是什么 答 JDK是java开发时所需环境 它包含了Java开发时需要用到的API JRE是Java的运行时环境 JDK包含了JRE 他们是包含关系 3 Java有哪几种
  • Umask的含义

    Umask的含义 umask 022中 022 是八进制的写法 如果换成二进制是000010010 在unix中文件权限是三类用户 三种权限 三类用户分别是文件所有者user u 文件所有者所在主群组group g 其它用户others o
  • Vue脚手架安装和初次使用

    1 安装淘宝镜像 npm config set registry https registry npm taobao org 2 全局安装脚手架 npm install g vue cli 3 切到要创建项目的目录 创建项目 本例选择目录为
  • windows DHCP服务器部署

    目录 一 关于windows dhcp服务器 1 1 关于dhcp 1 2 DHCP续约 二 DHCP服务器部署 2 1 关于DHCP服务器 2 2部署DHCP服务器 2 3 保留特定IP地址 2 4 相关dos命令使用 2 5 多个地址池
  • 如何在Mac OS上从Photoshop 2020作为插件访问Topaz DeNoise AI?

    TopazDeNoise AI for mac是Topaz系列中的一款AI图像降噪软件 topaz denoise ai破解版提供了数百万个噪声 清晰图像的算法 可以快速消除图像中噪音并且保留原始图像细节 人工智能降噪Topaz DeNoi
  • [Python从零到壹] 六十七.图像识别及经典案例篇之基于卷积神经网络的MNIST图像分类

    七月太忙 还是写一篇吧 欢迎大家来到 Python从零到壹 在这里我将分享约200篇Python系列文章 带大家一起去学习和玩耍 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 真心想把自己近十年的编程经验分享给
  • 如何从RNN起步,一步一步通俗理解LSTM

    转自 https blog csdn net v july v article details 89894058 如何从RNN起步 一步一步通俗理解LSTM 前言 提到LSTM 之前学过的同学可能最先想到的是ChristopherOlah的
  • Flask 扩展 用户会话

    pip install flask login 接下来创建扩展对象实例 from flask import Flask from flask login import LoginManager app Flask name login ma
  • AHB总线协议

    1 简介 AHB总线规范是AMBA总线规范的一部分 AMBA总线规范是ARM公司提出的总线规范 被大多数SoC设计采用 它规定了AHB Advanced High performance Bus ASB Advanced System Bu
  • codable swift_如何使用Swift Codable与JSON相互转换

    codable swift For this article I used Xcode 11 4 1 and Swift 5 2 I assume you re familiar with the basics of Swift 对于本文
  • 【深度学习环境搭建(一)】cuda和pytorch

    深度学习环境搭建 一 cuda和pytorch 系统配置 Python环境配置 CUDA环境配置 pytorch环境配置 系统配置 服务器型号 Dell PowerEdge R730 硬件 CPU Intel Xeon CPU E5 265
  • java date转换timestamp_Java Date转Timestamp

    Java Date转Timestamp 1 Java Date转Timestamp的介绍 我们可以使用java sql Timestamp类的构造函数在Java中将Date转换为Timestamp Timestamp类的构造函数接收长值作为
  • Python生成allure测试报告,allure使用详细说明

    pytest框架自带一个测试报告 内容也相对全面 但是可读性差点 allure生成的测试报告 可改造性强 看起来也美观 使用过程在此总结一下 一 生成allure测试报告 1 下载安装allure pytest插件 我一般都是在pychar
  • bug总结之为什么每次提升完类之后,改变原来类对应的代码位置,UI找不到原来的界面ui类了

    这边注意以下 自己给自己写的一个bug 当你提升完一个类之后 比如qcustomplot类 原先是放在mainwindow cpp同一级目录下 原先位置 后面想把qcustomplot类新建一个qcustomplot文件夹下 那需要做什么
  • 小程序跳转至企业微信客服wx.openCustomerServiceChat

    从小程序跳转至企业微信客服 小程序后台地址 https mp weixin qq com wxamp home guide 扫码登录自己的小程序 第一步 在小程序管理后台的 功能 客服 微信客服 处 填写对应的企业ID 完成绑定 第二步 在
  • CenterFace解读 轻量级anchor_free人脸检测器

    论文地址 https arxiv org ftp arxiv papers 1911 1911 03599 pdf github地址 https github com Star Clouds centerface 此篇文章是参考的Objec
  • 用php的chr和ord函数实现字符串和ASCII码互转

    http shenyongqang blog 163 com blog static 22439113201002941856838 chr和ord函数是用来字符串和ASCII码互转的 ASCII码是计算机所能显示字符的编码 它的取值范围是
  • 浅谈什么是闭包

    什么是闭包 我个人理解为 闭包就是能够读取其他函数内部变量的函数 由于在Javascript语言中 只有函数内部的子函数才能读取局部变量 因此可以把闭包简单理解成 定义在一个函数内部的函数 实际使用场景 封装方法的时使用callback回调
  • CAN与CANOpen(一)

    CAN与CANOpen 一 基本概念 CAN与CANOpen 二 报文格式 CAN与CANOpen 三 错误处理 CAN与CANOpen 四 CANOpen对象字典 CAN与CANOpen 五 PDO和SDO CAN与CANOpen 六 网