0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CAN上层协议CANOpen协议的嵌入式简化说明

454398 来源:开源嵌入式 作者:开源嵌入式 2020-12-23 10:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

CANopen是一种架构在控制局域网路(Controller Area Network, CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线。CANopen 实现了OSI模型中的网络层以上(包括网络层)的协定。CANopen 标准包括寻址方案、数个小的通讯子协定及由设备子协定所定义的应用层。 CANopen 支援网络管理、设备监控及节点间的通讯,其中包括一个简易的传输层,可处理资料的分段传送及其组合。一般而言数据链结层及物理层会用CAN来实作。除了 CANopen 外,也有其他的通讯协定(如EtherCAT)实作 CANopen 的设备子协定。CANopen由非营利组织CiA(CAN in Automaion)进行标准的起草及审核工作,基本的 CANopen 设备及通讯子协定定义在 CAN in Automation (CiA) draft standard 301中。针对个别设备的子协定以 CiA 301 为基础再进行扩充。如针对 I/O 模组的 CiA401 及针对运动控制的 CiA402。

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

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

NMT网络管理服务

网络管理状态表:

终端主节点→从节点

COB-ID 0-字节 1-字节
0 命令说明符 节点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

网络管理状态表:

pIYBAF9uHI6AbqjaAADqjgTk-uc569.png

状态转换 说明
(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):

COB-ID 0字节 1字节 2字节
385(0x181) Data:输入I/O状态量
Input_Digital_1 Input_Digital_2 Input_Digital_3
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

1. I/O节点←监控终端(RPDO)

2. I/O节点→监控终端(TPDO)

服务数据对象(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心跳,然后按固定频率发出脉动消息帧,监控终端接收该报文用以检测该节点状态。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    58

    文章

    3013

    浏览量

    471489
  • CANopen
    +关注

    关注

    8

    文章

    456

    浏览量

    47586
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CANopen转Profinet是一种构建于控制局域网设备之上的协议网关

    CANopen作为构建于控制局域网(Controller Area Network, CAN)之上的高层通信协议,其体系架构包含通信子协议与设备子
    的头像 发表于 11-05 14:05 257次阅读
    <b class='flag-5'>CANopen</b>转Profinet是一种构建于控制局域网设备之上的<b class='flag-5'>协议</b>网关

    嵌入式需要掌握哪些核心技能?

    /网络设备)、中断底半部处理,适用于高端嵌入式设备。 企业需求:RTOS是60%岗位的核心要求,Linux开发需求随项目复杂度增长。 4)通信协议与接口 基础协议:UART、SPI、I2C、
    发表于 10-21 16:25

    CANopen转Profient网关协议介绍

    CANopen介绍: CANopen是一种基于控制器局域网(CAN)的高层工业通信协议,由国际用户和制造商协会CiA于1995年发布,基础规范为CiA 301标准。该
    的头像 发表于 09-25 17:31 613次阅读
    <b class='flag-5'>CANopen</b>转Profient网关<b class='flag-5'>协议</b>介绍

    入行嵌入式应该怎么准备?

    CAN和Ethernet等)以及它们的工作原理和使用方法是必不可少的。此外,对于无线通信协议(如Bluetooth、Wi-Fi和LoRa等)的了解也是有益的。 五、调试和故障排除能力嵌入式系统开发中经
    发表于 08-06 10:34

    CANopen转EtherCAT协议转换案例解析

    在工业自动化领域,运动控制器与传感器之间的协议兼容性是系统集成中的关键挑战。某智能装备制造企业采用EtherCAT协议的运动控制器作为主站,需驱动基于CANopen协议的分布
    的头像 发表于 06-17 19:22 319次阅读
    <b class='flag-5'>CANopen</b>转EtherCAT<b class='flag-5'>协议</b>转换案例解析

    NVMe协议研究扫盲

    协议栈的执行流程密切相关。NVMe Host端的命令需要经过文件系统层、块设备层、驱动层等多个层次的处理,同时NVMe协议栈中的队列设计、乱序执行、完成信息检查等流程也十分复杂,加之嵌入式处理器主频较低
    发表于 06-02 23:28

    ElfBoard嵌入式教育科普|CAN接口全面解析

    CAN的全称是Controller Area Network,译为控制器区域网络,是一种用于车辆、电力系统、工业设备等嵌入式系统的半双工异步串行通信协议和物理接口。
    的头像 发表于 05-28 16:30 1722次阅读
    ElfBoard<b class='flag-5'>嵌入式</b>教育科普|<b class='flag-5'>CAN</b>接口全面解析

    协议大和解:ETHERCAT转CANopen网关配置

    最近有同学后台咨询疆鸿智能EtherCAT转CANopen协议转换网关如何配置,小编今天给大家详细分享下配置的步骤。 一,设备主要功能 JH-ECT009 型网关是EtherCAT网络
    的头像 发表于 05-21 14:55 482次阅读
    <b class='flag-5'>协议</b>大和解:ETHERCAT转<b class='flag-5'>CANopen</b>网关配置

    EtherCAT转CANopen协议网关应用详解

    成为运动控制领域的“明星”,而CANopen则凭借灵活性和成本优势在中小型设备中广泛应用。当两者相遇时,如何打破协议阻碍,实现无缝互联? EtherCAT转CANopen网关通过智能协议
    的头像 发表于 05-19 14:19 430次阅读
    EtherCAT转<b class='flag-5'>CANopen</b><b class='flag-5'>协议</b>网关应用详解

    CanOpen转Profinet协议转换:解锁型钢成型机高效控制新维度

    CANopen转Profinet转换网关在型钢成型机的自动控制中起着至关重要的作用。我们需要理解一下什么是CANopen和Profinet。CANopen是一种基于CAN总线的通信
    的头像 发表于 05-12 11:07 367次阅读
    <b class='flag-5'>CanOpen</b>转Profinet<b class='flag-5'>协议</b>转换:解锁型钢成型机高效控制新维度

    使用ES32实现CANopen从机

    CANopen是一种基于CAN的通信协议,已在工业领域得到了广泛应用。CAN提供可靠的底层数据传输,CANopen提供标准化的应用层
    的头像 发表于 03-26 19:05 1513次阅读
    使用ES32实现<b class='flag-5'>CANopen</b>从机

    CANOPEN协议详细介绍

             CANOPEN协议是基于CAN总线协议建立的应用层协议CANOPEN
    发表于 03-26 15:27 0次下载

    iic协议嵌入式系统中的功能

    在现代电子设备中,嵌入式系统的设计越来越复杂,需要集成更多的功能和外设。I2C协议因其简单性、灵活性和高效性,在嵌入式系统中得到了广泛的应用。 1. 简介 I2C协议最初由Philip
    的头像 发表于 02-05 11:40 1033次阅读

    2025必备知识,CANopen转EtherCAT协议允许配备啥协议的电气设备

    CANopen转EtherCAT稳联技术(WL-COP-ECAT)协议允许配备 CANopen 的设备在基于 EtherCAT 的工业以太网网络上使用。
    的头像 发表于 12-29 09:50 720次阅读
    2025必备知识,<b class='flag-5'>CANopen</b>转EtherCAT<b class='flag-5'>协议</b>允许配备啥<b class='flag-5'>协议</b>的电气设备

    ARM嵌入式通信协议及应用

    随着科技的飞速发展,嵌入式系统在各个领域扮演着越来越重要的角色。ARM处理器因其高性能、低功耗的特点,在嵌入式系统中得到了广泛应用。通信协议作为嵌入式系统的重要组成部分,对于实现设备间
    的头像 发表于 12-28 09:18 1493次阅读