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


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

    创建日期: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-字节

      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
  • 相关阅读:
    [转] 献给所有正在找路的人
    在同一表单内,多个提交按钮的处理方式
    javascript高级选择器querySelector和querySelectorAll
    一位年轻女董事长的37条忠告很受启发吧?
    函数的延迟加载
    WCF的CommunicationObjectFaultedException异常问题
    WCF Test Client对象数组输入问题
    [转载]C#开发Winform记录用户登录状态的方法
    using(C#)
    使用 SCTP 优化网络
  • 原文地址:https://www.cnblogs.com/winshton/p/4897163.html
Copyright © 2020-2023  润新知