旧文备份:简单CANOpen 协议说明

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

建立日期:2005-11-17网络

修改日期:2005-11-17spa

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

做者:winshtonhtm

版本:V1.0对象

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

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

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

  1. NMT网络管理服务

    网络管理状态表:get

    终端主节点→从节点

    COB-ID

    0-字节

    1-字节

    0

    命令说明符

    节点ID

    (16#000)

    (CS)

    (1)

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

    若是节点ID0表示命令会被广播至全部从节点,从节点必须执行相应的命令。

    命令说明符功能见下表:

    命令说明符(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
相关文章
相关标签/搜索