旧文备份:简单CANOpen 协议说明
(十年前的旧文,不舍等扔)
创建日期:2005-11-17
修改日期:2005-11-17
文件名称:简单CANOpen 协议说明.doc
作者:winshton
版本:V1.0
(注:本文以24in 24out I/O模块为例说明,对在单片机下实现简单的CANopen简单功能作分析设计,文档中所有功能均已在AVR上实现)
本说明是CAN上层协议CANOpen协议的嵌入式简化,较原始CANOpen版本简单易用,且更适应嵌入式模块通讯的需要,并且兼容CANOpen协议。
下面按照协议支持的功能分别进行说明:
- 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
√
√
启动引导
√
√
网络管理
√
√
√
错误控制
√
√
- 过程数据对象(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):
- I/O节点→监控终端(TPDO)
COB-ID
0字节
1字节
2字节
385(0x181)
Data:输入I/O状态量
Input_Digital_1
Input_Digital_2
Input_Digital_3
- 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
- 服务数据对象(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。
- 错误控制——心跳(或者叫脉动)协议(heatbeat)
错误控制用于了解总线上各节点的状态,本文只实现心跳协议,由各节点向监控终端定期发送心跳报文,报告本节点的状态,报文如下:
设节点NODE_ID=2
节点→监控终端
COB-ID
0字节
1794(0x702)
节点状态
0x00
返回状态如下:
状态代码
状态含义
0x00
BOOTUP启动状态
0x04
STOPPED停止
0x05
OPERATIONAL可操作
0x7F
PRE-OPERATIONAL预操作
节点在启动之后发出BOOTUP心跳,然后按固定频率发出脉动消息帧,监控终端接收该报文用以检测该节点状态。
参考文献:
- CiA Draft Standard 401 <Device Profile for Generic I/O Modules> CAN in Automation
- CiA Draft Standard 301 <Application Layer and Communication Profile> CAN in Automation
- 周立功 <CANopen 协议介绍>
- 史久根 等《CAN 现场总线系统设计技术》
- www.microcanopen.com 《MicroCANopen Atmel 89C51CC01 Application Examples》
旧文备份:简单CANOpen 协议说明的更多相关文章
- 旧文备份:在CANopen网络中通过LSS服务设置节点地址和网络波特率
CANopen专有个子协议用来描述怎样去通过网络设置节点地址和波特率,就是CiA DSP-305,大伙都叫LSS协议,是Layer Setting Services的缩写,不太好翻译,可以叫底层设置服 ...
- 旧文备份: 怎样实现SDO服务
SDO是CANopen协议中最复杂的一部分,带有应答机制,有多种传输方式,并且完整的SDO功能节点需提供1个SDO server和多个SDO client,因此SDO的实现异常困难,协议多种传输方式的 ...
- 旧文备份:CANopen协议PDO的几种传输方式
(于2007.1.22) 由于PDO所传输的数据内容是无协议的且分配的标识符范围较SDO靠前,因此,其效率和优先级都是较高的,通常用于实时过程数据的传输. PDO是生产/消费类型的通讯方式,数据只有一 ...
- 旧文备份:CANopen协议中SDO服务
SDO是服务数据对象接口(Service Data Obiect)的缩写,顾名思义提供服务数据的访问接口,服务数据就是一些实时性要求不高的数据,一般是指节点配置参数,因此,SDO一般用来配置和获得节点 ...
- 旧文备份: CANopen的LSS子协议中文翻译
有关节点地址和网络波特率的在线设置等:下载
- 旧文备份:CANopen中SYNC的功能和使用
SYNC是CANopen管理各节点同步数据收发的一种方法,相当于网络节拍,基于同步的PDO按照这个网络节拍来执行实时数据的收发.SYNC属于生产/消费型通讯方式,网络中有且只有一个SYNC生产者,一般 ...
- 旧文备份:怎样利用好单片机上的存储器资源来实现OD的存储与访问
我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的OD实现是协议栈高效稳定运行的基础,而OD的实现最基本的一点就是怎么去保存它.因为OD的内容比较杂, ...
- 旧文备份:FFTW介绍
1. FFTW介绍 FFTW由麻省理工学院计算机科学实验室超级计算技术组开发的一套离散傅立叶变换(DFT)的计算库,开源.高效和标准C语言编写的代码使其得到了非常广泛的应用,Intel的数学库和Sci ...
- 旧文备份:rtlinux安装手册
前段时间接触了几天RTLinux,折腾了好几天才总算把它安装上,得益于Prof. Chang-Gun Lee的安装建议,觉得该文档可能会对准备尝试安装RTLinux的朋友们有帮助,本人英语很烂,也比较 ...
随机推荐
- UESTC 2015dp专题 j 男神的约会 bfs
男神的约会 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/65 Descri ...
- Codeforces Round #304 (Div. 2) B. Soldier and Badges 水题
B. Soldier and Badges Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/54 ...
- CodeM资格赛2
题目描述 组委会正在为美团点评CodeM大赛的决赛设计新赛制. 比赛有 n 个人参加(其中 n 为2的幂),每个参赛者根据资格赛和预赛.复赛的成绩,会有不同的积分.比赛采取锦标赛赛制,分轮次进行,设某 ...
- Linux6.9用RPM方式安装MySQL5.7.21
1.下载安装包 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-1.el6.x86_64.rpm-bundle.tar ...
- iOS开发中虚拟键盘相关的坑
初学者在学习iOS开发时,遇到在一个textField中输入完内容后却发现虚拟键盘无法隐藏起来而不知所措的情况的人一定不占少数吧.这篇文章就说说我遇到的和虚拟键盘有关的三个问题及解决对策. 在模拟器测 ...
- 插值技术之Bezier插值(1) -- Bezier Curve
作者:i_dovelemon 来源:CSDN 日期:2015 / 7 / 11 主题:Interpolate,Bezier Curve 引言 在游戏开发中.诸如动画系统.路径计算等等操作,都会遇到对数 ...
- JavaScript中typeof详解
[范围]typeof返回值范围: typeof返回值对应 类型 结果 String "string" Number "number" Boolean " ...
- 关于String 后面跟省略号。。。
今天阅读MonkeyRunner源码的时候发现下面一段: private String shell(String... args) { StringBuilder cmd = new StringBu ...
- SLF4J和Logback日志框架详解
SLF4J和Logback日志框架详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 本文讲述SLF4J和Logback日志框架. SLF4J是一套 ...
- RxJava 中文文档
https://mcxiaoke.gitbooks.io/rxdocs/content/Subject.html