(十年前的旧文,不舍等扔)

创建日期:2005-11-17

修改日期:2005-11-17

文件名称:简单CANOpen 协议说明.doc

作者:winshton

版本:V1.0

(注:本文以24in 24out I/O模块为例说明,对在单片机下实现简单的CANopen简单功能作分析设计,文档中所有功能均已在AVR上实现)

本说明是CAN上层协议CANOpen协议的嵌入式简化,较原始CANOpen版本简单易用,且更适应嵌入式模块通讯的需要,并且兼容CANOpen协议。

下面按照协议支持的功能分别进行说明:

  1. NMT网络管理服务

    网络管理状态表:

    终端主节点→从节点

    COB-ID

    0-字节

    1-字节

    命令说明符

    节点ID

    (16#000)

    (CS)

    (1)

    说明:一般终端主节点是指上位机,如上位用于网络管理和监控的PC机,从节点是指被管理的各模块。

    如果节点ID是0表示命令会被广播至所有从节点,从节点必须执行相应的命令。

    命令说明符功能见下表:

    命令说明符(CS)

    意义

    1(16#01)

    启动节点进入可操作状态

    2(16#02)

    停止远程节点

    128(16#80)

    使节点进入预操作状态

    129(16#81)

    复位节点

    130(16#82)

    复位通讯

    例:启动节点1进入可操作状态,

    16#000

     

    16#80

    16#04

    网络管理状态表:

    状态转换

    说明

    (1)

    通电后自动初始化

    (2)

    完成初始化自动进入预操作状态

    (3),(6)

    启动远程节点

    (4),(7)

    进入预操作状态

    (5)(8)

    停止远程节点

    (9),(10),(11)

    复位节点

    (12),(13),(14)

    复位通讯

    根据节点的状态提供以下服务:

     

    初始化

    预操作

    可操作

    停机

    PDO

       

     

    SDO

     

     

    启动引导

     

     

    网络管理

     

    错误控制

     

     
  2. 过程数据对象(PDO)服务

    过程数据对象用于在节点之间传送过程数据,如I/O模块I/O状态读取和设定,模拟量采集和模拟量输出等等,本协议考虑从机硬件限制最多支持4组PDO,每组包含一个RPDO和一个TPDO,现已I/O模块为例进行说明:

    设I/O模块有24输入,24输出,24输入通过TPDO传给监控终端或其他节点,24输出通过RPDO由控制节点对其进行设定,采用发送和接收PDO1组,即标识符TPDO:0x180+NODE_ID,RPDO:0x200+NODE_ID,用3个字节就可以表示24个I/O量,因此发送和接收PDO可以表示如下(假设NODE_ID=1):

    1. I/O节点→监控终端(TPDO)

    COB-ID

    0字节

    1字节

    2字节

    385(0x181)

    Data:输入I/O状态量

    Input_Digital_1

    Input_Digital_2

    Input_Digital_3

    1. I/O节点←监控终端(RPDO)

    COB-ID

    0字节

    1字节

    2字节

    513(0x201)

    Data:输出I/O状态量

    Output_Digital_1

    Output_Digital_2

    Output_Digital_3

    如果是8通道的模拟量采集模块则需要两个TPDO来传送采集的数据,不需要RPDO,因为每个通道产生一个16位数据,一共是16字节,每个TPDO只能够传送8字节。两个TPDO标识符分别为:0x180+NODE_ID,0x280+NODE_ID。

    每帧数据格式如下表(设NODE_ID=2):

    TPDO1

    COB-ID

    0-1字节

    2-3字节

    4-5字节

    6-7字节

    385(0x182)

    Data:输入模拟量

    Output_Anolog_1

    Output_Anolog_2

    Output_Anolog_3

    Output_Anolog_4

    TPDO2

    COB-ID

    0-1字节

    2-3字节

    4-5字节

    6-7字节

    385(0x182)

    Data:输入模拟量

    Output_Anolog_5

    Output_Anolog_6

    Output_Anolog_7

    Output_Anolog_8

  3. 服务数据对象(SDO)服务

    服务数据对象用于读写节点的对象字典,现 只实现SDO下载和上传的全速模式,不支持正常模式也不支持块下载和上传,因为数据量不大,实现的功能足够用,SDO全速下载和上传采用应答式服务,由监控终端向节点发送服务请求,由节点返回应答。

    现假设某节点NODE_ID=3,协议报文如下:

    读节点OD

    假设,读SDO index = 0x1018 subindex = 0x00,返回的是1字节data=0x04

    监控终端→节点(终端请求)

    COB-ID

    0字节

    1字节

    2字节

    3字节

    4字节

    5字节

    6字节

    7字节

    1539(0x603)

    命令

    index

    subindex

    Reserved(保留)

    0x40

    0x18

    0x10

    0x00

    0x00

    0x00

    0x00

    0x00

    监控终端←节点(节点应答)

    COB-ID

    0字节

    1字节

    2字节

    3字节

    4字节

    5字节

    6字节

    7字节

    1411(0x583)

    命令

    index

    subindex

    数据

    凑够8个字节

    0x4F

    0x18

    0x10

    0x00

    0x04

    0x00

    0x00

    0x00

    写节点OD

    假设,写SDO index=0x1017,subindex=0x00,写数据为0x07D0

    监控终端→节点(终端请求)

    COB-ID

    0字节

    1字节

    2字节

    3字节

    4字节

    5字节

    6字节

    7字节

    1539(0x603)

    命令

    index

    subindex

    要写入的数据

    凑8个字节

    0x2B

    0x17

    0x10

    0x00

    0xD0

    0x07

    0x00

    0x00

    监控终端←节点(节点应答)

    COB-ID

    0字节

    1字节

    2字节

    3字节

    4字节

    5字节

    6字节

    7字节

    1411(0x583)

    命令

    index

    subindex

    凑够8个字节

    0x60

    0x18

    0x10

    0x00

    0x00

    0x00

    0x00

    0x00

    如果监控终端发送的请求,节点处理出错,将返回SDO中止报文,报文如下:

    COB-ID

    0字节

    1字节

    2字节

    3字节

    4字节

    5字节

    6字节

    7字节

    1411(0x583)

    命令

    index

    subindex

    错误代码

    0x80

    0x18

    0x10

    0x00

    0-7位

    8-15位

    16-23位

    24-31位

    节点返回的错误代码如下:

    SDO_ABORT_UNSUPPORTED 0x06010000UL 不支持该功能

    SDO_ABORT_NOT_EXISTS 0x06020000UL 不存在的索引

    SDO_ABORT_READONLY 0x06010002UL 只读,不可写

    SDO_ABORT_TYPEMISMATCH 0x06070010UL 类型不匹配

    SDO_ABORT_UNKNOWN_COMMAND 0x05040001UL 未知命令

    SDO_ABORT_UNKNOWNSUB 0x06090011UL 未知子索引

    注:命令字节含义请参考CANOpen协议文件DS301。

  4. 错误控制——心跳(或者叫脉动)协议(heatbeat)

    错误控制用于了解总线上各节点的状态,本文只实现心跳协议,由各节点向监控终端定期发送心跳报文,报告本节点的状态,报文如下:

    设节点NODE_ID=2

    节点→监控终端

    COB-ID

    0字节

    1794(0x702)

    节点状态

    0x00

    返回状态如下:

    状态代码

    状态含义

    0x00

    BOOTUP启动状态

    0x04

    STOPPED停止

    0x05

    OPERATIONAL可操作

    0x7F

    PRE-OPERATIONAL预操作

    节点在启动之后发出BOOTUP心跳,然后按固定频率发出脉动消息帧,监控终端接收该报文用以检测该节点状态。

    参考文献:

    1. CiA Draft Standard 401 <Device Profile for Generic I/O Modules> CAN in Automation
    2. CiA Draft Standard 301 <Application Layer and Communication Profile> CAN in Automation
    3. 周立功 <CANopen 协议介绍>
    4. 史久根 等《CAN 现场总线系统设计技术》
    5. www.microcanopen.comMicroCANopen Atmel 89C51CC01 Application Examples

旧文备份:简单CANOpen 协议说明的更多相关文章

  1. 旧文备份:在CANopen网络中通过LSS服务设置节点地址和网络波特率

    CANopen专有个子协议用来描述怎样去通过网络设置节点地址和波特率,就是CiA DSP-305,大伙都叫LSS协议,是Layer Setting Services的缩写,不太好翻译,可以叫底层设置服 ...

  2. 旧文备份: 怎样实现SDO服务

    SDO是CANopen协议中最复杂的一部分,带有应答机制,有多种传输方式,并且完整的SDO功能节点需提供1个SDO server和多个SDO client,因此SDO的实现异常困难,协议多种传输方式的 ...

  3. 旧文备份:CANopen协议PDO的几种传输方式

    (于2007.1.22) 由于PDO所传输的数据内容是无协议的且分配的标识符范围较SDO靠前,因此,其效率和优先级都是较高的,通常用于实时过程数据的传输. PDO是生产/消费类型的通讯方式,数据只有一 ...

  4. 旧文备份:CANopen协议中SDO服务

    SDO是服务数据对象接口(Service Data Obiect)的缩写,顾名思义提供服务数据的访问接口,服务数据就是一些实时性要求不高的数据,一般是指节点配置参数,因此,SDO一般用来配置和获得节点 ...

  5. 旧文备份: CANopen的LSS子协议中文翻译

    有关节点地址和网络波特率的在线设置等:下载

  6. 旧文备份:CANopen中SYNC的功能和使用

    SYNC是CANopen管理各节点同步数据收发的一种方法,相当于网络节拍,基于同步的PDO按照这个网络节拍来执行实时数据的收发.SYNC属于生产/消费型通讯方式,网络中有且只有一个SYNC生产者,一般 ...

  7. 旧文备份:怎样利用好单片机上的存储器资源来实现OD的存储与访问

    我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的OD实现是协议栈高效稳定运行的基础,而OD的实现最基本的一点就是怎么去保存它.因为OD的内容比较杂, ...

  8. 旧文备份:FFTW介绍

    1. FFTW介绍 FFTW由麻省理工学院计算机科学实验室超级计算技术组开发的一套离散傅立叶变换(DFT)的计算库,开源.高效和标准C语言编写的代码使其得到了非常广泛的应用,Intel的数学库和Sci ...

  9. 旧文备份:rtlinux安装手册

    前段时间接触了几天RTLinux,折腾了好几天才总算把它安装上,得益于Prof. Chang-Gun Lee的安装建议,觉得该文档可能会对准备尝试安装RTLinux的朋友们有帮助,本人英语很烂,也比较 ...

随机推荐

  1. 【洛谷】P1156 垃圾陷阱【DP】

    P1156 垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2≤D≤100)英尺. 卡门想把垃圾堆起来 ...

  2. [转]android系统各种音量的获取与设置

    获取系统音量 通过程序获取android系统手机的铃声和音量.同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManager提供了方法:publicvoidsetStreamV ...

  3. jmeter用beanshell调用自己写的jar进行MD5加密

    1.先在eclipse里面写好MD5的加密文件,用eclipse执行一遍,确保文件不会报错 Str2MD5.java 内容如下: package hehe.md5; import java.secur ...

  4. SQl CASE 语句的嵌套使用方式

    case具有两种格式.简单case函数和case搜索函数.  1.简单case函数 case sex when ’1’ then ’男’ when ’2’ then ’女’else ’其他’ end ...

  5. XPath教程

    XPath 简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...

  6. mysql中如何比较日期

    做项目,需求是要做一个统计的功能,首次进入默认显示今天以及七天前的数据,这个很好解决. 然后就是用户点击日历插件选择日志,根据日期来统计当天的情况,我数据库里存的时间是使用的时间戳 前台获取到的日期是 ...

  7. JAVA如何把一个float四舍五入到小数点后2位,4位,或者其它指定位数.

    怎么使float保留两位小数或多位小数 http://meryvn.blog.163.com/blog/static/36962664201173010402629/ 两种方法: import   j ...

  8. UnsupportedOperationException:can&#39;t convert to dimension :typx=0x1

    at android.content.res.TypeArray.getDimensionPixelSize(TypeArray.java:463) 今天在给项目做适配执行项目时遇到这个错误,发生错误 ...

  9. ArcGIS for Android地图上实际距离与对应的屏幕像素值计算

    本篇文章主要介绍了"ArcGIS for Android地图上实际距离与对应的屏幕像素值计算",主要涉及到ArcGIS for Android地图上实际距离与对应的屏幕像素值计算方 ...

  10. java_Collection_详细介绍

    转自:http://blog.sina.com.cn/s/blog_3fb3625f0101aref.html 1.类集框架 java.util 包中包含了一些在 Java 2 中新增加的最令人兴奋的 ...