CANOpen系列教程07_CANOpen协议概述

  • 分享一个朋友的人工智能教程,零基础!通俗易懂!希望你也加入到人工智能的队伍中来! www.captainbed.net

一、写在前面

  上一章节提供的例程是标准、数据帧格式的传输例程,结合前面理论知识,相信你根据参考例程可以实现远程帧及其他类型的数据传输。

  前面教程讲述内容为CAN总线协议,属于底层硬件相关的一些内容。从本文开始,将正式讲述CANOpen协议。

  CANOpen协议是基于CAN总线的上一层软件协议。该教程前面内容是建立底层通信,只有在底层通信成功基础上,才能实现上一层的通信协议。

  提示:CANOpen协议内容很多,有许多内容都是一些抽象的概念。所以,有一些内容相对较难理解,随着慢慢深入即可消除那些疑虑。

  本文章收录于【CANOpen系列教程】,在我的博客分类“CANOpen系列教程”也能查找到。

  为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该系列教程也同步更新于微信公众号【EmbeddedDevelop】,关注微信公众号回复【CANOpen系列教程】即可查看。

二、CANopen协议总述

CANopen 是一个基于 CAN 串行总线的网络传输系统的应用层协议,遵循 ISO/OSI 标准模型。

网络中不同的设备通过对象字典或者对象来相互交换数据,其中,主节点可以通过过程数据对象 (PDO) 或者服务数据对象 (SDO) 来获取或者修改其它节点对象字典列表中的数据。

CANOpen协议主要内容分为三大块,如下图CANopen 的设备模型。



CANOpen协议从大方向的划分,就如上图所示三大块。但是,这三大块里面的内容就牵涉到许多……

初学者可以以上图模型为中心,再结合实际例程理解CANOpen协议的各种抽象概念。

下面章节将进一步讲述模型中三大块内容的一些概念,初学者能理解尽量理解,不能理解可以先做了解即可。

三、通信对象

CANopen协议中常用的通信对象包含如下几点:

1) 网络管理对象(NMT)

网络管理对象包括 Boot-up 消息, Heartbeat 协议及 NMT 消息,基于主从通信模式, NMT 用于管理和监控网络中的各个节点,主要实现三种功能:节点状态控制、错误控制和节点启动。

2) 服务数据对象 (SDO)

·包括接收 SDO(R-SDO) 和发送 SDO(T-SDO)。
·通过使用索引和子索引, SDO 使客户机能够访问设备对象字典中的项。
·SDO 通过 CAL 中多元域的 CMS 对象来实现,允许传送任何长度的数据,当数据超过 4 个字节时分拆成几个报文。
·协议是确认服务类型,为每个消息生成一个应答。 SDO 请求和应答报文总是包含 8 个字节。

3) 过程数据对象(PDO)

·包括接收 PDO(RPDO) 和发送 PDO(TPDO)。
·用来传输实时数据,数据从一个创建者传到一个或多个接收者。数据传送限制在 1 到 8 个字节。
·每个 CANopen 设备包含 8 个缺省的 PDO 通道, 4 个发送 PDO 通道和 4 个接收 PDO 通道。
·PDO 包含同步和异步两种传输方式,由该 PDO 对应的通信参数决定。
·PDO 消息的内容是预定义的,由该 PDO 对应的映射参数决定。

4) 同步对象 (SYNC)

同步对象是由 CANopen 主站周期性地广播到 CAN 总线的报文,用来实现基本的网络时钟信号,每个设备可以根据自己的配置,决定是否使用该事件来跟其它网络设备进行同步通信。

5) 紧急报文 (EMCY)

设备内部通信故障或者应用故障错误时发送的报文。

四、对象字典

对象字典是设备规范中最重要的部分。它是一组参数和变量的有序集合,包含了设备描述及设备网络状态的所有参数。

通过网络可以采用有序的预定义的方式来访问的一组对象。这里就牵涉到定义对象字典的生成问题,后面我会讲述关于对象字典生成工具相关内容。

CANopen 协议采用了带有 16 位索引和 8 位子索引的对象字典。你可以理解为一本汉语字典,我们需要查找里面的某个汉子(可以理解定义的某个数据),我们就会从拼音或笔画(索引)进去找到对应位置。

CANOpen 协议对象字典主索引如下图,这只是一个主要的索引。其实还能细分下去,这里不过多讲述,后续会进一步讲述。



五、应用

应用这一块的内容包含应用程序、设备子协议实现。可以从CANopen 的设备模型明白,对外就是IO接口,也就是供我们调用的接口。

应用这一块包含CANOpen协议上层的内容,可以简单理解封装的一些供用户读写操作的函数。

应用这一块内容在后面结合实例分析会牵涉,初学者可以简单了解有这么一块,且知道这一块在CANOpen协议中大致的作用即可。

六、说明

1.该文档部分内容来自网络,仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号【EmbeddedDevelop】,关注微信公众号回复【CANOpen系列教程】即可查看全系列教程。

七、最后

我的博客:http://www.strongerhuang.com
我的GitHub:https://github.com/EmbeddedDevelop

  我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号。

strongerHuang wechat
关注微信公众号,查看更多精彩内容!
本文对你有帮助吗?