当前位置: 首页 > news >正文

现场总线CANopen设计与应用

说明:

CAN-bus的国际标准支队物理层和数据链路层制定了规范,对应用层没有定义。国内许多CAN用户采用自己定义的应用层协议。因为诸多原因,许多设计者定义的CAN-bus上层协议局限性较大,,甚至仅仅是用于再物理层取代传统的RS485总线。这些设计并没有很好的体现CAN-bus可以多主机、优先级仲裁等有点,只是系统的实时性和可靠性都较低。

 

CANopen协议是在现场总线CAN-bus之上定义的一套应用层协议,其核心是对象字典及多种通信方式。基于这一核心,该协议又对多种行业设备制定了进一步的规范,称为设备子协议。

前言:

 CANopen是一种基于控制器局域网(CAN)的通信自协议。CANopen规范全集除了包括应用层和通信协议之外,还包括各种不同的框架、建议,以及标准的设备规范、接口协议与应用技术规范。

第一章 通信和设备模型

为了达到各种不同的兼容性等级,所有的过程数据、配置参数和诊断信息都必须用同一个对象模型来描述。CANopen规范用通过3套属性来描述一个对象。

  1. 对象描述。对象描述包括对象的名称机器唯一的标识符(索引)。此外用户还可以设定对象的类型:变量(仅由一个元素构成)、数组(由多个相同的元素构成)以及记录(由不同元素构成)。包含在对象描述中的数据类型描述了各自称部分的编码和长度。
  2. 入口描述。入口描述可以为数组和记录(子对象)设定一个名称机器唯一的标识符(子索引)。
  3. 值定义描述。该描述详细规定了对象的含义,包括物理单位、乘数、偏置量和编码。

第二章 物理层

第三章 CAN协议

物理媒介对于“显性位”和"隐性位"的阐述是CAN方位机制和出错管理的基本前提条件。

CAN总线上传输的帧共有4中类型:数据帧、远程帧、错误帧、超载帧。

  • 标准帧

帧起始(SOF)用来指示一个数据帧或远程帧的开始。SOF包含1个确定的显性位,出现在总线上的隐性到显性的乃冲下降沿用于同步CAN网络中的其它节点设备。

帧起始后面是标识符场(CAN-ID)。在标准格式的数据帧中,标识符场由11位组成,用于表示确定的待传输消息。其数值也作为袋传书消息的优先级。

同一个CAN网络中,不能够有两个节点同时发送具有相同标识符但却包括不同数据内容的帧。

标识符段之后一位是远程传输请求位(RTR),用来却分数据帧和远程帧。当RTR位为显性时,表示传输数据帧;当RTR为隐性时,表示传输远程帧。

控制端由6位组成,包括保留为r1、r0以及4位DLC(数据长度代码)。DLC表示此阵在数据段中的传输字节数。通常DLC范围为0~8,当DLC值大于8时,改制也可以在总线上传输,但此阵在数据段中的传输字节数仍会北限制在8字节。

数据段由0~64位组成,包含此阵传输的实际有效信息(0~8字节)。通常,数据段的传输都是从第一个字节开始,并且时从每个字节的最高有效位开始。

数据段之后是CRC段(循环冗余校验),由15位CRC序列和1位CRC界定符组成。接收器可以利用CRC序列来识别是否接收了错误的数据。

应答段(ACK)由一个应答间隙位和一个应答界定符位组成。发送器在应答间隙位传输一个隐性电平;在正确接受了完整的消息之后,接收器发送一个显性电平以进行确认。应答间隙位的电平值剋用来提示本网络中有没有接收器正确收到了当前发送的消息(应答间隙位呈隐性电平),或至少有一个接收器正确收到了当前发送的消息(应答间隙位呈显性电平)。因此,应答机制只可以用来检测网络消息响应故障,但不能用来发送错误帧。

每一帧以帧结束段(EOF)结束。EOF段由7个隐性电平的位组成。在传输EOF段的过程中,网络的各个接收器还有最后一次发出错误帧的机会。

EOF段之后还必须插入一个帧间空间(ITM),ITM之后才能开始传输下一个帧。ITM空间由3个隐性电平的位组成,已不属于前一条帧的组成单元。

 

  • 远程帧

 

 

 

第四章 应用层

 CANopen规范中所定义的基本通信服务构成了应用程序与CANopen应用层之间的接口。

基本服务有一下4种:

  • 请求:应用程序请求CANopen软件的一种通信服务
  • 指示:CANopen软件向应用程序报告某一事件或应执行的任务
  • 响应:应用程序对CANopen软件报告的事件或任务做出的应答
  • 确认:CANopen软件向应用程序确认CANopen软件已经执行了任务

CANopen应用层服务类型:

  • 仅在一个设备中执行的服务,比如:局部服务和提供者启动的服务
  • 多个设备通过网络进行通信的服务,比如:确认和未确认的服务

 

 基本原理:

CANopen设备模型。包含通信单元、应用程序和对象字典3个部分。

  • 通信单元。通信单元由CAN收发器、CAN控制器以及CANopen协议栈组成。协议栈中包括实现通信的通信对象(如过程数据对象(PDO)和服务数据对象(SDO))和状态机。通信单元提供数据传输所需的所有机制和通信对象,符合CANopen规范的数据可以利用这些机制通过CAN接口进行传输。
  • 应用单元。对设备的基本功能进行定义或描述。
  • 对象字典。是应用单元与同i性能单元之间的接口,实际上是设备的所有参数列表。应用单元和通信单元都可以方位这个参数列表。对象字典中的词目(对象或参数)通过一个16位索引和一个8位子索引进行识别或定位,用户客队词目进行读写。例如,为通信对象配置不同的CAN标识符。如果应用对象是一个调节器,那么对象字典中的词目就是调节器参数。

CANopen协议中定义3中不同类型的通信关系:

  • 主机-从机模型

  • 客户端-服务器模型

  • 生产者-消费者模型 

 

 通信对象:

  • 过程数据对象(PDO):用来传输实时数据
  •  

 

相关文章:

  • 一份DBA面试题及解答
  • 方程组的几何解
  • 做人之上品
  • 3D数学基础:矩阵的几何解释
  • DBC和J1939理解(也许不正确,探索阶段)
  • 上传文件
  • DBC(解决上一篇的疑问)
  • zynq移植J1939协议
  • zynqCAN中断梳理
  • zynqIO中断梳理
  • 上传wmv文件遇到的问题
  • linux高并发服务器
  • HTML平滑缩放显示图片
  • 高并发服务器二
  • RedHat Linux9.0 硬盘安装全攻略
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Git学习与使用心得(1)—— 初始化
  • JavaScript实现分页效果
  • Java超时控制的实现
  • PAT A1017 优先队列
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 初探 Vue 生命周期和钩子函数
  • 关于 Cirru Editor 存储格式
  • 坑!为什么View.startAnimation不起作用?
  • 力扣(LeetCode)56
  • 浅谈Golang中select的用法
  • 让你的分享飞起来——极光推出社会化分享组件
  • 使用 Docker 部署 Spring Boot项目
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一份游戏开发学习路线
  • 用Python写一份独特的元宵节祝福
  • 与 ConTeXt MkIV 官方文档的接驳
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (27)4.8 习题课
  • (二)丶RabbitMQ的六大核心
  • (汇总)os模块以及shutil模块对文件的操作
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (循环依赖问题)学习spring的第九天
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Mysql的优化设置
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core使用ef 6
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net2005怎么读string形的xml,不是xml文件。