CANopen协议解读
CANopen协议解读
- 一、协议标准
- 二、CANopen报文说明
- 三、CANopen协议内容
- 1. ID的理解
- 2. NMT
- (1) 节点状态
- (2) 节点状态控制
- (3) 节点心跳报文
一、协议标准
以官方的CiA 301-4.2.0基础协议为解读学习标准,同时找到了基于CiA 301标准的通用I/O设备标准的CiA 402,是中文翻译版,还有ZLG多年前发布的CANopen轻松入门作为参考学习,话不多说,接下来就开始进行学习记录吧。
CiA 301中使用的是仲裁域ID为11Bit的标准帧格式,并且发送与接收都是以从机视角来说的,对于多字节数据都是小端模式,即低字节先发送,以下的学习都以此为基础。
二、CANopen报文说明
对CANopen协议内容理解前需要大概了解CANopen都有哪些类型的报文,可以对CANopen有一个大概的了解,以下列举了CANopen的常用报文:
报文类型 | 报文说明 |
---|---|
NMT CMD(网络管理命令) | 由网络主机发出,控制各从机设备工作模式 |
NMT 心跳报文 | 由网络从机发出,包括上线通知与定时上报从机工作状态 |
PDO | 过程数据对象,单向传输,无需接收节点回应 |
SDO | 服务数据对象,主要用于参数配置,每一条信息都有回应 |
Sync | 特殊报文的一种,由主机发出,主要用于整个网络的同步传输 |
Time-Stamp | 特殊报文的一种,由主机发出,主要用于整个网络的时间同步 |
Emergency | 特殊报文的一种,当从机发生内部错误,用于通知主机 |
三、CANopen协议内容
1. ID的理解
在CANopen中有下面这几种ID,COB-ID、Node-ID,那么这两个ID又是什么呢?和CAN BUS的仲裁域的ID(以下用CAN-ID代替)又有什么关系呢?
首先,我们知道CAN-ID是CAN BUS控制器做仲裁、优先级判断使用的,CAN-ID越小优先级越高;而COB-ID(Communication Object Identifier)通信对象报文帧ID,我们可以认为COB-ID就是实际使用的CAN-ID。
Node-ID就是从机节点的编号,在对指定从节点控制时需要使用到,其中PDO与SDO比较特殊(下面会说PDO和SDO,这里知道有这个东西就好),CiA301标准也直接进行了定义,将COB-ID的高4Bit定义为功能码,低7Bit为Node-ID,所以Node-ID的最大数量就是128个各节点,但是由于0不推荐使用,实际节点数量也就127个(1-127)。
在CANopen协议中,定了一部分重要的COB-ID,下面我就列举比较常用的一些COB-ID,以便日后我查找。
通讯对象 | COB-ID |
---|---|
NMT CMD(网络管理命令) | 000h |
NMT心跳报文 | 700h + Node-ID(701h - 77Fh) |
Sync(同步报文) | 080h |
Emergency(紧急报文) | 080h + Node-ID(081h - 0FFh) |
Time stamp(时间戳报文) | 100h |
TPDO1(发送过程数据对象 1) | 180h + Node-ID(181h - 1FFh) |
RPDO1(接收过程数据对象 1) | 200h + Node-ID(201h - 27Fh) |
TPDO2(发送过程数据对象 2) | 280h + Node-ID(281h - 2FFh) |
RPDO2(接收过程数据对象 2) | 300h + Node-ID(301h - 37Fh) |
TPDO3(发送过程数据对象 3) | 380h + Node-ID(381h - 3FFh) |
RPDO3(接收过程数据对象 3) | 400h + Node-ID(401h - 47Fh) |
TPDO4(发送过程数据对象 4) | 480h + Node-ID(481h - 4FFh) |
RPDO4(接收过程数据对象 4) | 500h + Node-ID(501h - 57Fh) |
TPDO4(发送过程数据对象 4) | 480h + Node-ID(481h - 4FFh) |
SDO server->client(服务数据对象-答) | 580h + Node-ID(581h - 5FFh) |
SDO client->server(服务数据对象-问) | 600h + Node-ID(601h - 67Fh) |
2. NMT
NMT(Network Management)网络管理,为了保证CANopen网络中的可靠、可控,设计了NMT,整个CANopen网络中有且只有一个NMT主机,一个或多个NMT从机,与NMT相关的报文,比较重要的有节点状态控制(仅NMT主机)、节点错误控制、节点守护、节点上线、节点心跳报文,由于节点守护使用的是轮询方式,开销较大,已经不建议使用,所以下面也就不进行介绍了。
(1) 节点状态
CANopen中的NMT节点的节点状态有6种状态,分别是:
- 初始化:在节点上电后,对CAN控制器的初始化操作;
- 应用层复位:节点的应用层程序复位;
- 通讯复位:节点的CANopen通讯复位;
- 预操作状态:节点的预操作状态,表示节点已经完成了初始化、CANopen通讯相关配置可以进行SDO与NMT网络管理操作了,但是处于这个状态的节点不可以进行PDO操作;
- 操作状态:此状态可以由节点自主进入或由NMT主机切换进入,在此状态下,可以进行SDO、PDO等数据传输;
- 停止状态:此状态由NMT主机切换进入,仅可以进行SDO与NMT网络管理操作。
报文类型 | 预操作 | 操作 | 停止 |
---|---|---|---|
PDO | √ | ||
SDO | √ | √ | |
SYNC | √ | √ | |
TIME | √ | √ | |
EMCY | √ | √ | |
Node Ctrl | √ | √ | √ |
Err Ctrl | √ | √ | √ |
节点状态切换以及切换回路如下所示:
过程编号 | 切换触发条件 |
---|---|
(1) | 设备上电或者复位后自动进入 |
(2) | 初始化完成,自动进入NMT预操作状态 |
(3) | 通过配置自动进入或由NMT服务主机设置操作状态进入 |
(4),(7) | 通过NMT服务主机设置预操作状态进入 |
(5),(8) | 通过NMT服务主机设置停止远程节点进入 |
(6) | 通过NMT服务主机设置启动远程节点进入 |
(9),(10),(11) | 通过NMT服务主机设置复位远程节点进入 |
(12),(13),(14) | 通过NMT服务主机设置远程节点通讯复位进入 |
节点状态初始化切换回路如下所示:
过程编号 | 切换触发条件 |
---|---|
(1) | 设备上电或者复位后自动进入 |
(2) | 初始化完成,自动进入NMT预操作状态 |
(12),(13),(14) | 通过NMT服务主机设置远程节点通讯复位进入 |
(9),(10),(11) | 通过NMT服务主机设置复位远程节点进入 |
(15) | 初始化完成后自动进入复位应用程序 |
(16) | 复位应用程序完成后自动进入通信复位重置 |
(2) 节点状态控制
NMT CMD网络管理命令只能由NMT主机发出,NMT主机可以对NMT从机节点进行初始化状态以外的5种状态配置,NMT节点控制协议如下表:
COB-ID | DATA0 | DATA1 |
---|---|---|
000h | CS | Node-ID |
CS就是配置对应节点的状态参数,有以下5种:
CS | 说明 |
---|---|
00h | 启动远程节点,即将远程节点状态设置为操作状态 |
02h | 停止远程节点,即将远程节点状态设置为停止状态 |
80h | 远程节点进入预操作,即将远程节点状态设置为预操作状态 |
81h | 远程节点复位,即将远程节点状态设置为应用层复位状态 |
82h | 远程节点通讯复位,即将远程节点状态设置为通讯复位状态 |
(3) 节点心跳报文
节点心跳报文包括两类,一类是节点上线报文与周期上报从节点状态的心跳报文,报文协议如下:
COB-ID | DATA0 |
---|---|
700h+NodeId | STATE |
STATE就是对应节点的状态参数,有以下4种:
STATE | 说明 |
---|---|
00h | 从节点上线 |
04h | 从节点处于停止工作状态 |
05h | 从节点处于操作工作状态 |
7Fh | 从节点处于预操作状态 |
未完待续…
CANopen协议解读相关推荐
- canopen服务器协议,ZOPC_Server(ZLG通用OPC服务器)CANopen协议插件
ZOPC_Server(ZLG通用OPC服务器)CANopen协议插件是一款基于CAN的一种高层协议,是一种具有灵活配置功能的标准嵌入式网络.它的任务是控制和监测所有NMT从站的NMT状态.通常,CA ...
- 嵌入式CANopen协议从入门到落地产品(更新2021.9.8)
一.前言 我写CANopen系列博文的初衷是分享如何使用STM32单片机开发一款CANopen产品,所谓实战为主,理论为辅.只看CANopen协议的理论是很枯燥,而且根本看不会.我认为掌握CANope ...
- CANopen | 移植01 - STM32H743 + Canfestival的移植并让FDCAN1运行CANopen协议
文章目录 一.前言 二.移植前的准备 三.移植 3.0.移植的目的 3.1.工程的实际硬盘上添加文件夹 3.2.往bsp文件夹放入bsp代码 3.3.往canfestival里放入源代码 3.4.往o ...
- RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN驱动+CANopen协议
一.前言 百度网盘: 链接:https://pan.baidu.com/s/1NEccCy1S-Z5FhcInQOTzfA 提取码:fddg RTX5 | STM32H743+CubeMX+RTX5+ ...
- 3gpp协议_3GPP都在干什么(16)?:3GPP中网络切片原理及协议解读
本文归属于<3GPP在干什么>系列.全文71页PPT.(此系列是春天工作室一大IP(品牌),主要是协议解读.标准化进展梳理,新技术跟踪等). 今年我们会投入较多的时间和精力,重点研究和跟踪 ...
- CANopen协议及应用
文章目录 CANopen协议 CAN总线 CAN报文 CANopen概述 对象字典(Object Dictionary) 概述 通讯对象子协议区 制造商特定子协议 CANopen报文 NMT网络管理 ...
- CANopen协议介绍
1.CANopen协议简介 从OSI 网络模型的角度来看,CAN总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层),而在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软 ...
- linux下canopen协议视频,CAN协议与CANOpen协议
这里详细介绍了CAN协议中数据通信帧每位的含义,有图片,值得一看:https://www.cnblogs.com/pejoicen/p/3986587.html 这里介绍了CanOpen协议,http ...
- CANopen协议基础知识
CANopen协议基础知识 资料: DS301协议中文文档:https://winshton.gitbooks.io/canopen-ds301-cn/content/chapter5.html 30 ...
最新文章
- 实现SSTab单个选项卡代码
- python 元组传参 *args 字典传参 **kwargs 的用法
- Java 最坑爹的 10 大功能点!
- Py之cupy:cupy的简介、安装、使用方法之详细攻略
- 前端 --- 关于DOM的介绍
- Angular 8正式发布!
- ionic 上拉加载更多
- Android:自定义标题栏
- python 翻译库本地库_利用python爬取并翻译GEO数据库
- 26.leetcode160_intersection_of_two_linked_lists
- 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- Vue + Element 前端调用后端接口获取微信支付二维码和支付宝支付二维码
- CDR服装设计-旗袍款式图
- SpringBoot自动装配的魔力
- 互联网保险投诉量翻倍 众安与安心财险上榜
- win10商店打不开_win10自带的照片查看器打不开的修复方法
- 中缀表达式转后缀表达式两位数_什么是圆形磁动势?永磁无刷电机是怎么转起来的?...
- 网络营销的多种表现形式
- C++高阶 RAII机制(以对象管理资源)
- 用计算机浮点数表示法计算,计算机组成原理第4章浮点数运算方法ppt课件
热门文章
- 刚读博一,她一作登上Nature子刊!
- 本地同城小程序开发需要具备什么功能
- c语言坐标反算方位角函数,反三角函数/简易正反算or方位角转度分秒
- 蒙太奇服务器维修,蒙太奇服务器多台互连导片方法.pdf
- 使用certbot-auto脚本安装Certbot 生成https证书
- 画坦克__坦克可移动
- 不花里胡哨看电脑主板支持最大内存与频率
- GVRP-LNP-VCMP讲解
- 备赛全国阳光健身健美大赛训练记录(粗略)
- 小学四年级计算机制作月历教案,冀教版信息技术四上第1课《制作月历》教案1.doc...