CAN与CANOpen(二)

CAN与CANOpen(一)基本概念

CAN与CANOpen(二)报文格式

CAN与CANOpen(三)错误处理

CAN与CANOpen(四)CANOpen对象字典

CAN与CANOpen(五)PDO和SDO

CAN与CANOpen(六)网络管理和CAN FD

3.3帧

CAN协议的报文传输主要由下面的4种帧来实现:

  • 数据帧:从发射端携带数据到接收端。
  • 远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。
  • 错误帧:任何单元检测到一总线错误就发出错误帧。
  • 过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。

同时帧间空间用来间隔数据帧/远程帧与其他帧。

3.3.1数据帧

6数据帧

7图例

图6是一个数据帧的示意图。其中绿色标识隐性,黑色表示显性,黄色标识显性或隐性(图7),以下相同。

一个完整的数据帧有7部分组成,依次为帧起始(SOF)、仲裁场(Arbitration
Field)、控制场(Control Field)、数据场(Data
Field)、CRC场、应答场(ACK
Field)、帧结尾(EOF)。

帧起始是数据帧和远程帧开始的标志,它是一个显性位。一个CAN节点只有在总线处于空闲状态时才可以发送帧起始。

8仲裁场

仲裁场在帧起始之后,控制场之前,共12位(注:协议的讲解以CAN2.0A为基础[3],CAN2.0B版本的仲裁场为32位[4])分为两部分11位的标识符和1位的远程发送请求位(RTR)。在数据帧中RTR为显性,在远程帧中RTR为隐性。所以如果相同标识符的数据帧与远程帧发生冲突,数据帧优先。

图9控制场与数据场

仲裁场之后便是控制场。控制场的头两位为保留位,为隐性。后面是数据长度代码(DataLengthCode)。数据长度代码指示了数据场中字节的个数。图10说明了数据长度的大小在DLC的表示。

10数据长度代码

DLC最大为8。

对于超出8的情况,各厂家有不同的实现。有的实现忽略“越界”DLC,传输8
bytes的数据和“错误”的DLC。有的传输8
bytes的数据并改DLC为8。有的直接不传输任何东西。

数据场在控制场之后,传输数据的长度由DLC决定。如果DLC为0,则没有数据场。数据场中高位先传输。

11 CRC

CRC场在控制场和数据场之后,由CRC序列和界定符组成。CRC序列是帧起始,仲裁场,控制场和数据场组成的位流的CRC校验值。其中CRC校验的生成多项式为X15+
X 14+ X10+ X8+
X7+ X4+ X3+
1。CRC序列之后是一个“隐性”CRC结束符。

12应答场与帧结尾

CRC场之后便是应答场。应答场由2个位组成,应答位和应答结束符。发射单元会发送“隐性”的应答位和应答结束符至总线上。而接收单元如果接收到的数据都是有效的,会在发射单元发送应答位的同时发送一个“显性”位至总线上,所以一个有效的数据帧,应答位在总线上应该表现为“显性”。

数据帧的最后为帧结尾,有7个连续的“隐性”位组成。

3.3.2远程帧

13远程帧

远程帧的主要作用是向其他的CAN节点发送数据请求,发送相同标识符的数据帧。与数据帧相比,远程帧的RTR位是隐性的,而且没有数据场。DLC中的值是数据帧的数据长度。

3.3.3错误帧

14错误帧

错误帧由错误标志的叠加和结束符组成。

错误标志有主动错误标志与被动错误标志。主动错误标志为6个显性位,被动错误标志为6个隐性位。

错误主动节点与错误被动节点(参考“CAN节点的错误状态”)对错误的反应是不一样的。

当错误主动节点检测到错误时,会发送主动错误标志。而主动错误标志又会影响总线上原有传输内容的结构,从而让其他未检测到错误的节点发现错误。一种情况是错误帧破坏了应答场和帧结尾的固有形式;另一种情况是错误帧破坏了位填充规则。当其他节点发现错误后,也会发送错误帧。这样就会造成一个错误标志的叠加会有6-12bits大小。

15本地错误的全局化

图15就演示了第二种情况时的各个节点发送错误帧的情况。节点1首先检测到错误,发送错误帧,在连续发送了6个显性位之后,节点2和3检测到位填充错误,也发送错误帧。这样总线上错误帧的叠加就达到了12位。

所有节点发送完错误标志之后就会发送一个隐性位,并监控总线,直到总线上出现一个隐性位。然后在发送7个隐性位。这样一个错误帧就发送完毕了。

3.3.4过载帧

16过载帧

过载帧与主动错误帧非常类似,特别是位的组成和全局化的过程。主要的差别在于错误帧发生着数据帧,远程帧期间。而过载帧发生于间歇字段期间。

过载帧是由过载标志的叠加和过载结束符组成。有两种情况可以触发过载帧:

  1. CAN节点的内部需求,例如需要时间准备数据帧的数据。这种情况下过载帧只允许起始于帧间隔的第一个位。
  2. 在帧间隔内侦测到显性位。这种情况下,过载帧起始于检测到显性位的后一位。

过载标志由6个显性位组成,过载帧破坏了间歇字段的结构从而导致了过载帧的全局化。发完过载标志后,CAN节点会往总线发送隐性位,并监控总线直至出现隐性位。然后再发送7个隐性位。

3.3.5帧间空间

17 主动错误节点的帧间空间结构

18被动错误节点的帧间空间结构

数据帧与远程帧的前面必然有帧间空间。对于主动错误节点和被动错误节点,帧间空间的结构稍有不同。对于主动错误节点,帧间空间由3个显性位的间歇字段和总线空闲组成。在间歇字段不允许发送数据帧与远程帧。总线空闲的长度任意,当有显性位时就被认为是帧起始。

被动错误标志除了上边两部分外,在间歇字段之后还有8个显性位的挂起传输。在挂起传输阶段被动错误节点不可以发送数据帧与远程帧。

时间: 2024-10-15 18:17:40

CAN与CANOpen(二)的相关文章

(笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32

转自http://bbs.21ic.com/icview-878522-1-1.html 前段时间学习了CanOpen协议,到网上下载的CanFestival3-10源码,移植到VC.QT.STM32等平台,由于网上的资源较少,走了不少弯路,移植好使用过程中才逐渐暴露出各种问题,比如OD字符串传输.心跳时间不准确等等,现在已经解决了遇到的所有问题,移植出来的工程能够完好支持CanOpen协议,花了点时间,整理出一个简单易用的移植方法说明,也写了一些比较实用的调试工具,本来还想整理SDO.PDO.

【转】(笔记)CanOpen协议【CanFestival】移植方法

一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * 定义帧报文的内容及含义(这在我看来是最主要的原因) * 网络的监控,节点故障的诊断与标识 CAN上层协议有许多,用大家都公认的,便于产品的兼容,因此,CANOpen成为备选项. CANOpen有个开源协议栈[CANFestival],同时有一位大神已经做了移植并记录,在此就厚着脸皮转载过来以做备份

CAN与CANOpen(五)

CAN与CANOpen(一)基本概念 CAN与CANOpen(二)报文格式 CAN与CANOpen(三)错误处理 CAN与CANOpen(四)CANOpen对象字典 CAN与CANOpen(五)PDO和SDO CAN与CANOpen(六)网络管理和CAN FD 4.3通讯对象 CANOpen协议共有6种通讯对象,分别是:PDO.SDO.SYNC.TIME.EMCY.NMT.这6种通讯对象完成了CANOpen协议的所有通讯功能.其中我们只介绍使用较多的PDO.SDO.NMT(4.4). 4.3.1

python接口自动化测试(二)-requests.post()

上一节介绍了  requests.get()  方法的基本使用,本节介绍  requests.post()  方法的使用: 本文目录: 一.方法定义 二.post方法简单使用 1.带数据的post 2.带header的post 3.带json的post 4.带参数的post 5.普通文件上传 6.定制化文件上传 7.多文件上传 一.方法定义: 1.到官方文档去了下requests.post()方法的定义,如下: 2.源码: 3.常用返回信息: 二.post方法简单使用: 1.带数据的post:

二维码扫码积分系统定制开发

微信积分系统 二维码扫码积分系统定制开发找丽姐[158.1816.6626/电微]二维码营销模式系统定制开发 微信扫二维码营销系统开发 扫码领积分系统开发 一.如何实现扫二维码领红包功能? 1.使用扫描二维码领取红包对活动进行设置,包括红包数量.红包金额.促销地区.中奖概率等. 2.将生成的二维码赋到商品上面并赋涂层,一方面可以起到保证二维码的一次性,另一方面也可以引起消费者的好奇心. 3.通过手机微信打开扫一扫,扫码商品二维码关注公众号并领取红包,如果参与分享还可以获得抽奖的机会. 二.微信扫

微信生成二维码 只需一个网址即刻 还有jquery生成二维码

<div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text=http://123.net/index.php?s=/Home/Index/yanzheng/mai/{$dange.id}" style="width: 5rem; margin-bottom: 1rem;" > </div> http://qr.tops

家电二维码售后服务平台系统开发

家电二维码售后服务平台系统开发,家电二维码售后系统开发,小吴183.2071.6434微电,家电二维码售后软件开发,家电二维码售后平台开发. 互联网平台的节点有两大类型:第一基数节点,也就是弱连接的节点,其规模要大,越大越好,互联网的价值与节点数的平比成正比.第二活跃节点,也就是强连接的节点,其能量要强,越强越好,互联网的价值与其强度成正比. 一.家电维修行业"维修黑幕"层出不穷 记者从一位从事家电维修人士那里了解到,目前行业公认当前家电维修行业有陷阱,"维修黑幕"

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1)创建数据表suppliers 前面已经有一张表是book表,我们在建立一张suppliers(供应商)表和前面的book表对应. 也就是说 让book中s_id字段值指向suppliers的主键值,创建一个外键约束关系. 其实这里并没有达到真正的外键约束关系,只是模拟,让fruits中的s_id中

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys