1.
什么是BUS-OFF?
当CAN 控制器发生错误的次数超过255次,就会触发BUS-OFF错误。一般发生BUS-OFF的条件是CAN总线受周围环境干扰,导致CAN发送端发送到总线的数据被BUS总线判断为异常,但异常的次数超过255次,BUS总线自动设置为BUS-OFF状态,此时总线处于忙的状态,数据无法发送,也无法接收。
2. 如何检测BUS-OFF?
下面以CAN发送数据为例,介绍如何检测BUS-OFF错误状态。
struct can_frame framesend = {
.can_id = 0xaa,
.can_dlc = 1,
.data[0] = 0x66,
};
err = write(s_can0, &framesend, sizeof(framesend));
if(err <=0)
perror(“send data error”);
else{
if(framesend .can_id & CAN_ERR_BUSOFF){
perror(“bus-off”);
}
}
通过检测framesend .can_id是否被BUS-OFF置位。
3. BUS-OFF错误后如何处理?
最好的处理方法是:restart。can0出错了,restart can0。
4. 代码实现
检测CAN BUS-OFF错误并进行处理,网上已经有开源代码,大家可以参考这个网址:http://www.pengutronix.de/software/libsocketcan/download/ 代码里有个can_get_state函数,也可以检测CAN BUS当前的状态。
int
state;
if ((can_get_state(if_name_can0, &state)) < 0)
{
fprintf(stderr, "cannot get bustate, " "something is seriously wrong
");
}
else if (state == CAN_STATE_BUS_OFF)
{
fprintf(stderr, "Device is in BUS_OFF" );
do_restart("can0");
}
do_restart("can0")的作用是restart can0。
关键字:Can总线 BUS-OFF
引用地址:
Can总线如何检测BUS-OFF
推荐阅读最新更新时间:2024-05-02 23:57
CAN总线介绍
一、概述 CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要, 1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后, CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。 现在, CAN 的高性能和
[嵌入式]
基于CAN总线的智能超声液位变送器设计
O 引言 现场总线是用于现场仪表与控制系统和控制室之间的一种全分散、全数字化、智能、双向、互连、多变量、多点、多站的通信网络。CAN(Controller Area Network,控制器局域网)是德国Bosch公司在80年代初为解决现代汽车中大量的控制与测试仪器之间的数据交换而提出的一种串行数据通信协议。CAN总线是国际上应用最广泛的现场总线之一,由于采用了许多新技术以及独特的设计,与一般的通信总线相比,CAN总线的数据通信具有突出的性能,且可靠性、实时性和灵活性强。 近些年来,随着超声技术研究的不断深入,再加上其具有的高精度、无损、非接触等优点,超声的应用变得越来越普及。超声波液位测量有许多优点:检测元件可以不与被
[单片机]
基于CAN总线的PLC/IPC印染设备控制系统
1 引言 CAN总线是现场总线的一种,最初用于汽车内部检测部件与执行部件之间的数据通讯,有极强的抗恶劣环境和抗干扰能力。由于本身的特点,其应用范围已经由交通运输扩展到过程控制、数控机床、机器人、智能建筑、医疗器械等领域,被公认是几种最有前途的现场总线之一。 与多数现场总线(如Profibus、CC-Link等)的物理层采用RS485主从协议不一样,CAN的介质访问采用载波侦听多路访问(CSMA)技术,从而允许多主工作方式。并且,由于采用非破坏性总线仲裁技术,大大节省了总线冲突仲裁时间。与多数现场总线不一样,CAN总线只有物理层和数据链路层,应用层留给用户开发,使用户拥有了相当的灵活性。这些优点令人注目,以致于一些
[工业控制]
车载以太网挑战CAN总线
随着汽车智能化的发展,车载以太网成为先进汽车电子架构必不可缺的一部分,在中心节点,车载以太网已经占据绝对优势地位,但在边缘节点,CAN、CAN-FD和FlexRay等总线依然占据主要地位,特别是CAN。这使得汽车电子架构难以达到真正的Zonal级别,只能停留在域控制器级别。要想软件定义汽车或者说服务导向架构,Zonal架构都是必须要做到的。 图片来源:互联网 典型的Zonal架构,就是服务器的概念,通过车载以太网骨干网,超级计算核(即服务器或高性能计算即HPC)处理所有节点的计算需求。汽车变成类似于PC的架构,软硬件彻底分离,硬件统一,绝大部分工作都是软件,依靠LINUX等操作系统与自适应AUTOSAR,硬件对程序员
[汽车电子]
CAN总线在停车场灯光智能控制系统中的应用
CAN(Controller达式Area Network--控制器局域网)是一种有效支持分布式控制和实时控制的串行通信网络,具有可靠性高、成本低、配置灵活、数据传输距离远、数据传输速率快等优点,已经成为国际上应用最广泛的现场总线之一。 目前大部分的地下停车场都需要大量的照明设备进行长期照明,采用传统的连续照明方式或声控照明方式很难实现照明的自动控制,且会造成巨大的能源浪费和设备损耗。国外虽然有类似的灯光智能控制系统,但价格很高,限制了它的广泛应用。本文提出了一种基于CAN总线技术开发的分布式停车场灯光智能控制系统,能够解决停车场内照明智能控制问题,降低停车场内的布线复杂度,减少安装费用并大大延长停车场内照明设备的使用寿
[工业控制]
如何提升汽车CAN总线能效以增强燃油经济性?
对于传统乘用车而言,油箱是唯一的实际能源来源,故制造商们寻求在包括电子系统在内的所有汽车系统中节能,以进一步改善燃油经济性及二氧化碳(CO2)排放。随着汽车中增添的电子系统的数量不断增多,以增强汽车性能及安全性,并为购买者提供有吸引力的新功能,汽车中每个电子控制单元(ECU)的节能效果较低的话,就会使总油耗大幅增加。 芯片设计人员采用不同技术及途径,已经能够降低他们提供的器件的总能耗。在单个系统基础芯片(SBC)中结合多个器件的功能,并应用不同电源管理策略,还能帮助进一步降低总能耗。这些进展表示当今的内燃发动机汽车能够舒适安全地搭载乘客,而使用的燃油更少,碳排放更低。 增强型系统基础芯片 SBC为连接至汽车(C
[汽车电子]
CAN总线在七头钥匙机上的应用
七头钥匙机是一种同时加工七把钥匙的设备。钥匙形状如图1所示,该钥匙有两面,每一面都有18个孔, 孔的排列如图2所示。这种类型的钥匙,孔的深度有三个规格,按照排列组合可产生出3亿把不同的钥匙,这使得钥匙重复率非常低。
一、 系统配置及控制方案
系统具体配置见表一:
表一
本系统用工控机通过MODBUS RTU协议分别跟Kinco PLC和台安变频器通讯,Kinco PLC则通过CAN总线控制Kinco伺服。该系统利用CAN总线的高通讯速率,从而可以快速地控制多台伺服的联动,达到了系统快速性的要求。系统控制方框图如图3所示:
在本系统中,工控机主要起到设置变频器频率,钥匙编码的生成和
[嵌入式]
CAN总线在汽车领域的应用
CAN总线是国际上应用较为广泛的现场总线之一,可实现对车辆本身的控制。对于汽车工业而言,它的实时性、灵活性、可靠性以及低成本,有着较大的市场空间。如发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN总线控制装置。 1 CAN总线的发展 在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发出来。由于这些系统之间通信所用的数据类型及对可靠性要求不尽相同,且因多条总线构成的情况复杂、线束数量增加。原以为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过IS01
[嵌入式]