CAN-bus 使用
2017-06-22 12:57
148 查看
前言
CAN定义了物理层和数据链路层,硬件上主要由控制器(如Philips 的 SJA1000或者类似STM32F407集成了控制器的MCU)和收发器(如Philips的
TJA1050或PCA82C250)构成。在CAN-bus网络上,CAN报文以广播的形式发送,CAN报文不包含地址信息,是否处理接收到的CAN报文及如何利用由接收点软件上层协议确定。CAN2.0A
和CAN2.0B规定了CAN协议广播报文,属于较底层协议。
CAN2.0A 是CAN协议的PART A部分,此部分定义了11bit的标识区 。
CAN2.0B 是CAN协议的扩展部分,也叫PART B,定义了29bit的标识区,其它部分与CAN2.0A一样。
CAN2.0A/B是CAN标准的两个部分,只要CAN芯片支持CAN2.0B,都可以兼容通讯,而类似CANOpen最终上层应用协议,都建立在此基础上。
应用层协议
CAN-bus只提供可靠的报文传输服务,CAN报文的使用由应用者定义, 所以CAN网络中的节点要相互通信就必须制定一个统一的规则。CAN应用层协议就是这样一个规则,属于OSI模型的第七层,即规定了用户、软件、网络终端等之间用来进行信息交换的约定!
这个应用层协议规则,定义了CAN报文中帧ID及帧数据的使用方式,如将帧ID定义为需要处理该帧数据的CAN节点地址等。根据应用场合的不同,国际上出现了多种CAN应用层协议,常见的CAN-bus应用层协议如下:
图1
自定义应用层协议
构建一个现场总线网络,需要解决的关键技术问题有:
1.总线传输信息的速度、容量、优先等级、节点容量等;
2.高电磁干扰环境下的可靠数据传输;
3.最大传输距离时延时大小的确定;
4.网络的容错技术;
5.网络的监控和故障诊断功能。
要解决以上问题,需要充分考虑现场总线网络所采用的总线类型,因为以上问题和总线的性能特点是密切相关的,那么我们就看一下CAN-bus总线的上述特性:
CAN-bus网络传输速度最高可达1Mbps,并采用无损仲裁,通过报文标识符指示报文优先级;
CAN-bus采用差分信号传输,并采用可靠的数据校验和错误检测机制;
CAN-bus采用帧传输,每个报文允许传输最多8个字节,帧结构有严格规定,能够确定最大传输延时;
CAN-bus具有可靠的错误机制和检测机制,发送的信息遭到破坏后可以重新发送;节点在错误严重的情况下,具有自动退出总线的功能;
可以通过制定严禁的CAN-bus应用层协议解决网络监控和诊断。
CAN报文的分配
包含报文标识符的分配和报文数据的分配,报文格式的定义,实质是将CAN报文的分配规则进行详细的描述。
报文ID的定义:
CAN2.0A帧:11位ID
CAN2.0B帧,29位ID
报文数据的定义:每帧报文最多包含8字节数据
CAN网络数据通信的实现
在CAN网络中,通过报文的标识符进行信息的区分,因此通过报文的各种标识符分配来达到建立信息链接的目的。
图2 命令/响应模式通信
CAN应用层协议:面向节点和面向报文的协议
数据通信协议基本上可以划分为“面向节点的协议”和“面向报文的协议”两种类型,如下图:
图3:面向节点和面向报文的数据通信
制定一个CAN应用层协议
为了给读者演示CAN应用层协议的开发和使用方法,下面定义一个简单的CAN应用协议栈,该协议栈中只用到CAN标准帧中的数据帧,帧ID中的11个位的分配和使用方法如下表所列,协议中另外还定义了功能参数长度变量FunDataLen的功能参数数组FunData,该数组在需要时可以为某些特定功能函数提供足够的控制参数。
图4
参考于:http://www.eeworld.com.cn/wltx/article_2017050814929.html
CAN定义了物理层和数据链路层,硬件上主要由控制器(如Philips 的 SJA1000或者类似STM32F407集成了控制器的MCU)和收发器(如Philips的
TJA1050或PCA82C250)构成。在CAN-bus网络上,CAN报文以广播的形式发送,CAN报文不包含地址信息,是否处理接收到的CAN报文及如何利用由接收点软件上层协议确定。CAN2.0A
和CAN2.0B规定了CAN协议广播报文,属于较底层协议。
CAN2.0A 是CAN协议的PART A部分,此部分定义了11bit的标识区 。
CAN2.0B 是CAN协议的扩展部分,也叫PART B,定义了29bit的标识区,其它部分与CAN2.0A一样。
CAN2.0A/B是CAN标准的两个部分,只要CAN芯片支持CAN2.0B,都可以兼容通讯,而类似CANOpen最终上层应用协议,都建立在此基础上。
应用层协议
CAN-bus只提供可靠的报文传输服务,CAN报文的使用由应用者定义, 所以CAN网络中的节点要相互通信就必须制定一个统一的规则。CAN应用层协议就是这样一个规则,属于OSI模型的第七层,即规定了用户、软件、网络终端等之间用来进行信息交换的约定!
这个应用层协议规则,定义了CAN报文中帧ID及帧数据的使用方式,如将帧ID定义为需要处理该帧数据的CAN节点地址等。根据应用场合的不同,国际上出现了多种CAN应用层协议,常见的CAN-bus应用层协议如下:
图1
自定义应用层协议
构建一个现场总线网络,需要解决的关键技术问题有:
1.总线传输信息的速度、容量、优先等级、节点容量等;
2.高电磁干扰环境下的可靠数据传输;
3.最大传输距离时延时大小的确定;
4.网络的容错技术;
5.网络的监控和故障诊断功能。
要解决以上问题,需要充分考虑现场总线网络所采用的总线类型,因为以上问题和总线的性能特点是密切相关的,那么我们就看一下CAN-bus总线的上述特性:
CAN-bus网络传输速度最高可达1Mbps,并采用无损仲裁,通过报文标识符指示报文优先级;
CAN-bus采用差分信号传输,并采用可靠的数据校验和错误检测机制;
CAN-bus采用帧传输,每个报文允许传输最多8个字节,帧结构有严格规定,能够确定最大传输延时;
CAN-bus具有可靠的错误机制和检测机制,发送的信息遭到破坏后可以重新发送;节点在错误严重的情况下,具有自动退出总线的功能;
可以通过制定严禁的CAN-bus应用层协议解决网络监控和诊断。
CAN报文的分配
包含报文标识符的分配和报文数据的分配,报文格式的定义,实质是将CAN报文的分配规则进行详细的描述。
报文ID的定义:
CAN2.0A帧:11位ID
CAN2.0B帧,29位ID
报文数据的定义:每帧报文最多包含8字节数据
CAN网络数据通信的实现
在CAN网络中,通过报文的标识符进行信息的区分,因此通过报文的各种标识符分配来达到建立信息链接的目的。
图2 命令/响应模式通信
CAN应用层协议:面向节点和面向报文的协议
数据通信协议基本上可以划分为“面向节点的协议”和“面向报文的协议”两种类型,如下图:
图3:面向节点和面向报文的数据通信
制定一个CAN应用层协议
为了给读者演示CAN应用层协议的开发和使用方法,下面定义一个简单的CAN应用协议栈,该协议栈中只用到CAN标准帧中的数据帧,帧ID中的11个位的分配和使用方法如下表所列,协议中另外还定义了功能参数长度变量FunDataLen的功能参数数组FunData,该数组在需要时可以为某些特定功能函数提供足够的控制参数。
图4
参考于:http://www.eeworld.com.cn/wltx/article_2017050814929.html
相关文章推荐
- A20_can_BUS 使用
- BAPI / RFC with Delphi(系列之八)--TBAPIControl使用BUS2012建立PO(Delphi源代码)
- BAPI / RFC with Delphi(系列之八)--TBAPIControl使用BUS2012建立PO(Delphi源代码)
- 使用TOMCAT5.5连接池连接mysql(解决Cannot create JDBC driver of class '' for connect URL 'null' 及can not load org.gjt.mm.mysql.Driver)
- 网络中收集的CAN-BUS 知识
- 使用json-lib-2.1.jar报,org.apache.struts2.json.JSONWriter can not access a member of class org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public"-转载
- 16.2 进程间使用D-Bus通信
- 使用 D-BUS 连接桌面应用程序
- LPC2400系列ARM体系下,通过CAN通讯应用,来理解IRQ和FIQ使用的心得
- CAN (Controller Area Network) BUS
- BAPI / RFC with Delphi(系列之八)--TBAPIControl使用BUS2012建立PO(Delphi源代码)
- Maemo Linux手机平台系列分析:9 Maemo平台开发之 使用D-Bus信号做异步操作
- Can't User UserProfileManager.GetUserProfile Get User Userprofile In Web Service,Error:System.ArgumentNullException: Value Cannot Be Null.(不能在Webservice中使用UserProfileManager的GetUserProfile得到用户配置,报错:System.ArgumentNullException: 值不能为空。)
- 使用 D-BUS 连接桌面应用程序
- Maemo Linux手机平台系列分析:10 Maemo平台开发之 使用Glib/D-Bus做异步操作
- BAPI / RFC with Delphi(系列之八)--TBAPIControl使用BUS2012建立PO(Delphi源代码)
- 使用 D-BUS 连接桌面应用程序
- Maemo Linux手机平台系列分析:8 Maemo平台开发之 使用Glib绑定的D-Bus
- 使用asp.net urlrewrite 出现 Session state can only be used when enableSessionState is set to true 错误
- Win7下使用toad连接oracle出现can't initialize OCI -1