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

创建日期: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. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 -- 分层图最短路

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MB Description 每天,农夫 ...

  2. Codeforces Round #346 (Div. 2) A. Round House 水题

    A. Round House 题目连接: http://www.codeforces.com/contest/659/problem/A Description Vasya lives in a ro ...

  3. HDU 5650 so easy 数学

    so easy 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5650 Description Given an array with n integ ...

  4. ALAssetsLibrary使用

    在iOS中,我们调用摄像头和选择相册中的资源,我们可以使用:UIImagePickerController类来完成.   当然,我们也可以不使用UI的形式来访问iOS设备的相册资源. 那就是使用:AL ...

  5. objective C中的字符串NSStirng常用操作

    objective C中的字符串操作 在OC中创建字符串时,一般不使用C的方法,因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,在Cocoa中NSString集成的一些方法,可以很方便的 ...

  6. 关于Oracle安装完毕后,登录时遇到的错误的解决的方法

    1 提示无监听服务 解决方法:打开Net Configuration Assistant 依照提示删除现有的监听服务,然后又一次建立一个就可以. 2 SQL Plus登陆时提示username或pas ...

  7. easyui 隔行渐变色属性设置

    1.部分JS文件 function getAgencyDealTable(begin,end,regionFlag,agencyId){ $('#reportList').datagrid({ idF ...

  8. OpenShift跨版本升级

    官方的in-place upgrade直接在线升级的参考链接 https://docs.openshift.com/container-platform/3.11/upgrading/automate ...

  9. 5)Linux程序设计入门--信号处理

    )Linux程序设计入门--信号处理 Linux下的信号事件 前言:这一章我们讨论一下Linux下的信号处理函数. Linux下的信号处理函数: 信号的产生 信号的处理 其它信号函数 一个实例 .信号 ...

  10. PHP登入网站抓取并且抓取数据

    有时候需要登入网站,然后去抓取一些有用的信息,人工做的话,太累了.有的人可以很快的做到登入,但是需要在登入后再去访问其他页面始终都访问不了,因为他们没有带Cookie进去而被当做是两次会话.下面看看代 ...