CANopen基础知识

发布时间:2026/7/21 16:26:49
CANopen基础知识 一. CANopen概述CANopen是一种基于控制局域网络(Controller Area NetworkCAN)开发的高层通信协议包括通信子协议和设备子协议通常在嵌入式系统中使用是工业自动化中常用的一种现场总线。CANopen基于CAN2.0A开发CAN2.0A的OSI模型定义了物理层和数据链路层在此基础之上CANopen还定义了传输层和应用层CANopen的分层结构如图1-1所示。传输层包括支持网络管理、设备监控及节点间通信、处理资料的分段传送及其组合等功能。应用层包括寻址方案通信子协议和设备子协议等。图1-1 与OSI模型对应的CANopen分层结构CANopen 协议在使用过程中通常分为应用层、对象字典以及通信三个部分应用层用户根据实际的需求编写的应用对象,例如,取得从站数据该如何利用,该发送怎样的数据给从站等。对象字典描述了应用对象和 CANopen 报文之间的关系。通信定义了 CANopen 协议的通信规则以及与各个CAN控制器之间对应的关系。CANopen由非营利组织CiA(CAN in Automation进行标准的起草及审核工作在CAN总线的工业自动化应用中设备之间互联的需求越来越多为此CiA制定了相对开放的、标准化的高层协议DS-301又名 CiA-301。由于CANopen在工业自动化领域的应用非常广包括但不限于车辆工业、轨道交通、电机驱动、工程机械等基于DS-301定义了各个行业对应的子协议标准例如CiA 401 series: Device profile for generic I/O modules 通用IO模块的设备子协议CiA 402 series: CANopen device profile for drives and motion control 驱动与运动控制CANopen设备子协议CiA 421 series: Train vehicle control system 列车车辆控制系统CiA 423 series: Diesel engine control system 柴油机控制系统CiA 424 series: Door control system 门控制系统CiA 426 series: Exterior light control system 外部灯控制系统CiA 430 series: Auxiliary equipment control system 辅助设备控制系统它们可以实现各类设备在CAN 网络中提供标准的、统一的系统通信模式应用层(Application layer)为网络中每一个有效设备提供一组有用的服务与协议。通信描述(Communication profile)提供配置设备、通信数据的含义定义数据通信方式。设备描述(Device proflile)为设备增加符合规范的行为。在 CANopen 创立之初即使在 CAN 总线应用最广泛的汽车电子行业网络中的 CAN 节点数量和和通信量都相对较少。而在工业自动化中RS485是最为常用的通信总线使用CAN取代RS485主要在于通信效率出现以下的问题RS485需要逐一对节点进行查询防止多个节点同时向总线发送数据导致数据混乱。而CAN总线上的每个节点都拥有一个CAN控制器通过发送的CAN-ID自动进行总线仲裁始终保持总线上同一时刻只存在一条报文。RS485只提供物理层而不提供数据链路层因此数据错误的情况只能由应用层进行判断RS485一旦损坏一个节点总线网络就会全部中断。CAN总线定义了数据链路层每个节点的CAN控制器可以对总线进行监测在错误达到一定数量时会自动断开该节点。CAN总线与RS485在不超100m的情况下传输速率近乎相似在网络传输方面CAN总线更加稳定可靠价格方面自然也高于RS485在并非严格要求通信质量的情况下CAN总线并没有太大优势。但是CAN具有完善的通信协议可由CAN控制器芯片及其接口芯片实现RS485开发中的大量代码大大降低了系统开发难度缩短了开发周期这是只有物理层协议的RS485无法相比的。1.1. CANopen报文分类CANopen与CAN规范的最大区别在于CAN规范规定了多主竞争的方式每个节点都是主站通过CAN-ID进行总线仲裁。而CANopen采用的是主从机制在一般情况下总线上只存在一个主站其余节点均为从站主站控制各个从站运行从站只返回自身数据不与其他从站交互。报文传输仅支持CAN标准帧格式即11位ID尽量减小传输时间。在CANopen网络中分为以下几类报文用于网络管理的网络管理报文NMT用于实时更新数据的过程对象报文PDO用于配置各类参数的服务数据对象报文SDO特殊协议Special protocols为了减小网络负载NMT报文均采用数据最小字节数比如心跳报文只有 1 个字节数据PDO报文无需接收方报文应答。SDO报文最常用的是快速 SDO读取和写入的数据≤32位传输一次即可完成配置。1.2. COB-ID简介为了保证通信的时效性减少网络的工作量又为了减少使用者与维护者的学习时间在CANopen中定义了强制性的默认标识符并且重新定义了CAN-ID 11位的作用在CANopen中称为COB-ID如图1.3-1所示。图1.2-1 COB-ID功能码在CANopen中强制性定义了NMT功能、PDO功能、SDO功能、特殊报文的功能码。Node-ID即CANopen网络中的节点地址CANopen 规定了逻辑上最大128 个节点即1个主站127个从站主机地址默认为0从机地址范围为1~127。在实际应用中COB-ID计算方式为功能码Node-ID由于CANopen的开放度较高例如某个节点需要传递的资源特别多CANopen允许不按照这个规范定义COB-ID。二.对象字典ODObject dictionary)CANopen 对象字典OD: Object Dictionary是 CANopen 协议最为核心的概念。它是一组参数和变量的有序集合它的作用是描述对应CANopen 节点的设备描述及设备网络状态的所有参数。CANopen协议采用16位索引和8位子索引的对象字典一个主节点或配置工具能够访问从节点对象字典中的所有值对象字典的结构如表2-1所示。索引长度16位每个数据对象都会采用一个16位的索引来寻址其范围为0x0000~0xFFFF 。子索引长度8位为了避免数据量过大索引不够分配的情况在部分索引下增加了一个8位的索引值这个值被称为子索引其范围为0x00~0xFF 。每个索引包含的具体参数通常情况下不会大于32位的无符号整形数据Unsigned int32就是4个字节每个 CANopen 设备都有一个对象字典这些参数都记录在EDS文件中。对于CANopen 网络中的主站来说并不需要访问字典中的每一个对象在不同的应用行业都会起草一份 CANopen 设备子协议再由设备厂商完善成自己设备专属的子协议在子协议中会注明每个对象的功能、名称、索引、子索引、数据类型以及该对象是否允许读写等。索引对象0x0000未使用0x0001-0x000F静态数据类型0x0020-0x003F复杂数据类型0x0040-0x005F制造商规定的复杂数据类型0x0060-0x007F设备子协议规定的静态数据类型0x0080-0x009F设备子协议规定的复杂数据类型0x00A0-0x0FFF保留0x1000-0x1FFF通信子协议区域如设备类型错误寄存器支持的 PDO 数量0x2000-0x5FFF制造商特定子协议区域0x6000-0x9FFF标准化设备子协议区域0xA000-0xFFFF保留表2-1 对象字典表2-1中的通信子协议区域、制造商特定子协议区域、标准设备子协议区域最为重要也是制作EDS文件时需要操作的索引范围。2.1.通信子协议区域通信子协议区域定义了所有与通信有关的对象参数如表 2.1-1~表2.1-2所示索引范围 0x1000-0x1029为通用通信对象所有 CANopen 节点必须具备这些索引否则将无法加入 CANopen 网络。在CANopen网络中主站启动时通常会读取所有从站的全部或者部分通用通信对象中的索引。其他索引根据实际情况进行分配与定义。--------------------索引范围---------------------------------------Description 描述-------------------0x1000~0x1029通用通信对象0x1200~0x12FFSDO 参数对象0x1300~0x13FFCANopen安全对象0x1400~0x1BFFPDO 参数对象0x1F00~0x1F11SDO 管理对象0x1F20~0x1F27配置管理对象0x1F50~0x1F54程序控制对象0x1F80~0x1F89网络管理主机对象表 2.1-1 通信子协议区域Index 索引Object 对象Name 名字0x1000VAR 变量设备类型0x1001VAR 变量错误寄存器0x1002VAR 变量制造商状态寄存器0x1003ARRAY 数组预定义错误场0x1005VAR 变量同步报文 COB 标识符0x1006VAR 变量Communication cycle period 同步通信循环周期单位 us0x1007VAR 变量Synchronous windows length 同步窗口长度(单位 us)0x1008VAR 变量Manufacturer device name 制造商设备名称0x1009VAR 变量Manufacturer hardware version 制造商硬件版本0x100AVAR 变量Manufacturer software version 制造商软件版本0x100CVAR 变量Guard time 守护时间单位 ms0x100DVAR 变量Life time factor 寿命因子单位 ms0x1010VAR 变量Store parameters 保存参数0x1011VAR 变量Restore default parameters 恢复默认参数0x1012VAR 变量COB-ID time stamp 时间报文 COB 标识符发送网络时间0x1013VAR 变量High resolution time stamp 高分辨率时间标识0x1014VAR 变量COB-ID emergency 紧急报文 COB 标识符0x1015VAR 变量Inhibit time emergency 紧急报文禁止时间单位 100us0x1016ARRAY 数组Consumer heartbeat time 消费者心跳时间间隔单位 ms0x1017VAR 变量Producer heartbeat time 生产者心跳时间间隔单位 ms0x1018RECORD 记录Identity object 厂商 ID 标识对象0x1019VAR 变量Sync.counter overflow value 同步计数溢出值0x1020ARRAY 数组Verify configuration 验证配置0x1021VAR 变量Store EDS 存储 EDS0x1022VAR 变量Storage format 存储格式0x1023RECORD 记录OS command 操作系统命令0x1024VAR 变量OS command mode 操作系统命令模式0x1025RECORD 记录OS debugger interface 操作系统调试接口0x1026ARRAY 数组OS prompt 操作系统提示0x1027ARRAY 数组Module list 模块列表0x1028ARRAY 数组Emergency consumer 紧急报文消费者0x1029ARRAY 数组Error behavior 错误行为表2.1-2 通用通信对象2.2.制造商特定子协议对象字典索引0x2000~0x5FFF为制造商特定子协议区通常是存放设备子协议的应用数据地址映射关系如下所示RPDO 的通信参数存放在0x1400-0x15FF映射参数存放在0x1600-0x17FF数据存放为0x2000之后厂商自定义区。TPDO 的通信参数存放在0x1800-0x19FF映射参数存放在0x1A00-0x1BFF数据存放为0x2000之后厂商自定义区。制造商也可以在此区域根据需求定义对象字典对象因此不同厂家对于该区域的定义会有所不同详细情况请查阅章节4.4.《PDO的映射参数》。2.3.标准化设备子协议标准化设备子协议在索引0x60000x9FFF中定义了各个行业不同标准设备的子协议例如DS401、DS402、DS406等。对于不同的标准化设备而言这一块区域的定义会有所不同。三.网络管理NMTCANopen基于CAN2.0A开发所有节点通信地位平等运行时允许自行发送报文但 CANopen 网络为了稳定可靠可控需要设置一个网络管理主机 NMT-Master (Network Management-Master)主机的节点地址默认为0。例如CAN规范、SAE J1939都是以多主竞争的方式通信的CANopen用的则是主从管理模式进行通信整个网络均由主机控制它可以控制所有节点的启动与停止对各个节点的运行状态进行切换。3.1.NMT节点状态NMT网络管理对所有从节点规定了6种状态分别是初始化Initializing节点上电后对CAN控制器等部件进行初始化。应用层复位Application Reset对节点的应用程序进行复位操作为对象字典索引范围0x2000~0xFFFF进行复位例如将各种执行器恢复到初始状态关闭开关量输出模拟量输出恢复初始值。通信复位Communication reset对节点的CANopen通信进行复位为对象字典索引范围0x1000~0x1FFF进行复位启动CANopen通信使节点接入CANopen网络。预操作状态Pre-operational当节点初始化完成后包括应用层复位通信复位该节点自动进入与预操作状态此时可以进行SDO配置参数 NMT网络管理的操作但是不允许PDO通信。操作状态operational节点收到NMT主机发来的启动命令后PDO通信启动主从节点可以按照对象字典中的定义进行数据传输依旧可以进行SDO和NMT的操作。停止状态Stopped节点收到NMT主机发来的停止命令后该节点的PDO通信被禁用SDO与NMT网络管理依然可以对该节点进行操作。在初始化结束之后包括应用层复位通信复位NMT主机通过NMT命令可以让网络中任意节点进行5种状态的切换如图3.1-1所示一般情况用于预操作状态、操作状态和停止状态的切换应用层复位和通信复位应用较少。图3.1-1 NMT管理状态转换图3.2.NMT节点上线报文CANopen规定任意从站上线后需要自主发送节点上线报文boot-up通知主站自己已经接入网络报文格式ID0x700Node-ID数据长度1字节内容为0。假设该节点地址为1则报文ID0x701DLC0x01Data0x00如图3.2-1所示。图3.2-1 节点上线报文3.3.NMT心跳报文为了监控CANopen从站是否在线以及当前的节点状态CANopen协议通常要求接入网络的从站定时发送节点状态报文即心跳报文以供主站监测。从站按照对象字典中0x1017中填写的心跳时间ms为周期发送心跳报文主站按照0x1016中填写的心跳次数与时间进行检查假设超过若干次心跳时间没有收到从站的心跳报文则认为从站已经离线或者损坏。报文格式ID0x700Node-ID数据长度1字节内容为XID与节点上线报文相同假设该节点地址为1则报文ID0x701DLC0x01DataX。当X0x04时代表节点处于停止状态当X0x05时代表节点处于操作状态当X0x7F时代表节点处于预操作状态。示例如图3.3-1所示。图3.3-1 心跳报文在CANopen早期应用中存在一种主站循环发送远程帧请求监测从站节点状态被称为节点守护模式。主站发送标准远程帧请求1个字节的数据ID0x700Node-ID从站返回数据ID0x700Node-IDDLC1数据场字节0位7交替发送“0”和“1”数据场字节0位6~0发送当前节点状态X与心跳报文中相同。节点守护与心跳报文不能并存由于远程帧在 CAN 总线发展过程中逐渐被淘汰远程帧也会增加网络负载当今CANopen应用中已经不再使用节点守护均由心跳报文代替。3.4.NMT节点状态切换指令NMT 节点状态切换指令由主站向网络中的所有从站发出的报文ID0x000具有最高优先级数据长度2个字节该报文仅在需要的时候发送。报文格式ID0x000DLC2Data1CSData2Node-ID。当CS0x01时代表启动命令令节点进入操作状态当CS0x02时代表停止命令令节点进入停止状态当CS0x80时代表预操作命令令节点进入预操作状态当CS0x81时代表复位节点应用层让节点的应用恢复初始状态例如关闭各类执行器当CS0x82时代表复位节点通信让节点的 CAN 和 CANopen 通信重新初始化一般用于总线收到干扰使节点进入被动错误或离线状态时当Node-ID0时对整个网络中的所有节点同时进行控制。示例如图3.5-1所示。图3.4-1 NMT 节点状态切换命令3.5.CANopen主站设备CANopen主站也被称为NMT主站作为完整的CANopen主站设备需要满足以下功能支持 PDO、SDO 发送与接收支持 NMT 网络管理支持 PDO 通信类型并能够支持监控每一个 PDO 目标LSS 层设置功能从站波特率设置、从站节点编号设置支持从站管理功能类型与名称读取、对象字典读写紧急报文发送功能扩展 CANopen 标准指示灯功能。目前最为常用的两种主站分为是可编程控制器PLC和PC 扩展CAN通信。PLC必须含有内部集成CANopen 的主站功能的单元才能通过这个单元连接到CANopen总线PLC也是通过CPU与CANopen单元进行交互再由CANopen单元对CANopen网络进行访问管理。PC端则需要外接一个扩展 CANopen 主站的通信卡从而令 PC 具有管理 CANopen网络的能力专用CANopen主站的通信卡一般会附带一个网络管理工具可以用其开发和测试CANopen网络、扩展连接其他网络。使用通用型USB-CAN卡也可以接入CANopen网络但是无法使用CANopen配套软件将无法进行LSS 层设置和从站管理其余功能不受影响依旧可以作为主站通过PDOSDONMT功能控制从站。使用电控单元ECU比如RapidECU-U34也可以当成CANopen主站来使用通过PDOSDONMT功能控制从站。3.6.ECU网络管理示例使用RapidECU-U34控制器作为主站对从站变频器假设Node-ID为1进行CANopen网络管理示例如下图所示。四.过程数据对象PDOProcess data object)PDO用于传输实时数据单向传输无需接收节点返回报文数据长度一般为1~8字节最多只要一帧就可以传递一条信息或变量。4.1.PDO的CAN-ID定义在DS301中预定义了 PDO对象分为TPDO作用是将从站设备的运行状态数据实时发送至总线网络。RPDO作用是将主站设备的命令数据实时发送至总线网络对于从站设备而言则是接收命令。DS301中为TPDO 和 RPDO 分别定义了 4 个数据对象每个数据对象由1 条 CAN 报文封装如表4.1-1所示。Object 对象Specification 规范CAN-IDCOB-IDTPDO1DS3010x180 node-IDID范围0x181~0x1FFTPDO2DS3010x280 node-IDID范围0x281~0x2FFTPDO3DS3010x380 node-IDID范围0x381~0x3FFTPDO4DS3010x480 node-IDID范围0x481~0x4FFRPDO1DS3010x200 node-IDID范围0x201~0x27FRPDO2DS3010x300 node-IDID范围0x301~0x37FRPDO3DS3010x400 node-IDID范围0x401~0x47FRPDO4DS3010x500 node-IDID范围0x501~0x57F表4.1-1 PDO对象COB-IDPDO报文的实际数量由从站设备制造商决定定义在设备的对象字典与EDS文件中PDO报文的数据物理意义由从站设备制造商决定PDO报文示例如图4.1-1所示。图4.1-1 PDO报文虽然DS301预定义了8个PDO数据对象但是若某个节点需要传递的资源特别多是允许自定义PDO对象的 如上图所示Node-ID1需要新增一个TPDO5那么它的COB-ID可以设为0x182,那么此时COB-ID中的位6~0不再表示Node-ID但是需要注意不能与其他从站协议中的ID冲突。PDO 通信比较灵活只要符合 PDO 范围即0x181~0x57F该范围内都可以作为节点自身的 TPDO 或者 RPDO 使用因此PDO 的 COB-ID 与 Node-ID 并非完全关联。4.2.PDO的传输形式PDO的两种传输方式同步传输和异步传输。异步传输在CANopen总线网络空闲时主站可以随时向从站发送RPDO从站可以随时向主站发送TPDO两者各管各的不需要对方做出回应但是主站会根据从站发来的报文判断做出相应判断。同步传输通过同步报文让所有节点能在同一时刻进行上传数据或者执行下达的应用指令可以避免异步传输导致的应用逻辑混乱和总线负载不平衡的问题。但是若有一个节点出现故障主机不断丢失该节点报文同步报文无法响应可能使主机报错甚至有可能使整个总线网络停止工作。一般情况下均使用异步传输的方式进行通信。4.3.PDO的通信参数PDO通信参数定义了该设备所使用的COB-ID、传输类型、定时周期等。均可在对象字典EDS文件中查询。RPDO对应索引 0x14000x15FFTPDO对应索引0x18000x19FF。每条索引代表一个PDO的通信参数集其中的子索引分别指向具体的参数如表4.3-1所示。Sub-index 子索引Description 描述Data type 数据类型0x00参数条目数量uint80x01COB-ID发送/接收这个 PDO 的帧 IDuint320x02Transmission type 发送类型:0x00非循环同步0x01循环同步0xFC远程同步0xFD远程异步0xFE异步制造商特定事件0xFF异步设备子协议特定事件uint80x03生产禁止约束时间(单位0.1ms)uint160x05事件定时器触发的时间(单位 ms)uint160x06同步起始值uint8表4.3-1 PDO通信参数参数条目数量表示该条索引中包含几个参数。COB-ID该PDO对应的CAN-ID。发送类型设定该PDO发送或者接收时的传输方式通常使用循环同步或者异步制造商特定事件。生产禁止约束时间(1/10ms)设定PDO发送的最小间隔避免报文传输过于密集导致总线负载剧烈增加通过一个约束时间来进行“滤波”防止节点短时间内不断向总线发送数据这个时间单位为0.1ms。事件定时器触发的时间(单位ms)按照设定时间周期性发送PDO报文如果这个时间为 0则表示该PDO为事件触发。一般情况下TPDO为周期发送型RPDO为事件触发型。同步起始值假设设定值为x 同步传输的PDO在收到x条同步报文后才进行发送。4.4.PDO的映射参数在对象字典中定义的对象列表映射到对应的PDO通过映射参数主机与从机能够将通信参数、应用数据和CAN报文中具体的数据联系起来。RPDO的通信参数存放在0x14000x15FF映射参数存放在0x16000x17FF数据存放为0x2000之后厂商自定义区。TPDO的通信参数存放在0x18000x19FF映射参数存放在0x1A000x1BFF数据存放为0x2000之后厂商自定义区。以TPDO索引0x1800为例如表4.4-1~4.4-3所示-----索引---------------------------------------------------定义----------------------------------------------0x1800TPDO1通信参数---子索引----------------------------------------------对象内容-------------------------------------------0x00参数条目0x050x01COB-ID0x1810x02发送类型: 0xFF异步0x03生产禁止约束时间(1/10ms)1000x05事件定时器触发的时间(单位 ms)1000x06同步起始值无表4.4-1 TPDO1通信参数-----索引---------------------------------------------------定义----------------------------------------------0x1A00TPDO1映射参数---子索引----------------------------------------------对象内容-------------------------------------------0x00参数条目0x040x01值0x20300310代表映射至索引0x2030下子索引0x03对象16位。0x02值0x20210308代表映射至索引0x2021下子索引0x03对象8位。0x03值0x20210210代表映射至索引0x2021下子索引0x02对象16位。0x04值0x20210610代表映射至索引0x2021下子索引0x06对象16位。表4.4-2 TPDO1映射参数-----索引---------------------------------------------------定义----------------------------------------------0x2021TPDO1制造商特定子协议---子索引----------------------------------------------对象内容-------------------------------------------0x00参数条目0x280x01默认值0x00 01 类型int160x02默认值0xFC 03 类型uint160x03默认值0xBF 类型uint80x06默认值0xF0 31 类型uint16-----索引---------------------------------------------------定义----------------------------------------------0x2030TPDO1制造商特定子协议---子索引----------------------------------------------对象内容-------------------------------------------0x00参数条目0x200x01默认值0x00 00 类型int160x02默认值0x00 20 类型uint160x03默认值0x0C F0 类型uint16表4.4-3 制造商特定子协议TPDO1ID0x181DLC7数据格式为Intel先发低字节再发高字节Data如表4.4-4所示。--Byte0----Byte1----Byte2----Byte3----Byte4----Byte5----Byte6--0xF00x0C0xBF0x030xFC0x310xF0表4.4-4 TPDO1 数据场示例4.5.ECU与从站PDO通信示例使用RapidECU-U34控制器作为主站与从站变频器假设Node-ID为1进行PDO通信示例如下图所示。五.服务数据对象SDOService data objectSDO主要用于CANopen主站读取和配置从站参数从站收到报文后会返回一条应答消息确保数据传输的准确性。CANopen主站通过索引和子索引能够访问从站上的对象字典从而读取其中设定的对象参数通过SDO修改参数值。5.1.通信原则Communication principle主站发送SDO报文ID0x600Node-ID 访问或者修改从站某个对象的参数值。从站收到报文后会向主站返回一条报文ID0x580Node-ID告知主站是否正常响应。DLC8使用数据场全8个字节未使用的字节用0补全。5.2.快速SDO协议Expedited SDO protocol通常使用的SDO协议为快速SDO主站与从站之间来回通信一次即可完成参数的读取或配置。要求读写的值不能大于4个字节发送的报文中包括命令字CS、要读写的索引、子索引和数据命令字如表5.2-1所示示例如图5.2-1所示。-----------命令字CS-------------------------方向-------------------------------定义-----------------0x2F主站→从站写1个字节0x2B主站→从站写2个字节0x27主站→从站写3个字节0x23主站→从站写4个字节0x60主站←从站写成功应答0x40主站→从站读取0x4F主站←从站读响应1个字节0x4B主站←从站读响应2个字节0x47主站←从站读响应3个字节0x43主站←从站读响应4个字节0x80主站←从站异常响应表5.2-1 SDO命令字图5.2-1 快速SDO报文例如主站向从站地址0x3006写入2个字节的数据0x64 01未使用字节补0首先查找地址映射索引为0x2030子索引为0x07。主站发送报文ID0x601Data0x2B 30 20 07 64 01 00 00从站响应报文ID0x581Data0x60 30 20 07 00 00 00 00例如主站向从站地址0x3006读取数据。主站发送报文ID0x601Data0x40 30 20 07 00 00 00 00从站响应报文ID0x581Data0x4B 30 20 07 64 01 00 00通过快速SDO可以直接对CANopen节点的对象字典中的值进行读取和修改除了可以用来配置参数外也经常用作关键性数据的传输。若从站响应异常范围CS为0x80数据场中存放附带错误代码如表5.2-2所示。---------错误代码------------------------------------------------定义---------------------------------------0x05030000切换位未替代0x05040000SDO 协议超时0x05040001客户端/服务器命令说明符无效或未知0x05040002块大小无效仅限块模式0x05040003序列号无效仅限块模式0x05040004CRC错误仅限块模式0x05040005内存不足0x06010000不支持对对象的访问0x06010001尝试读取只读对象0x06010002尝试写入只读对象0x06020000对象字典中不存在对象0x06040041对象无法映射到PDO0x06040042要映射的对象的数量和长度将超过PDO长度0x06040043一般参数不兼容原因0x06040047设备内部普遍不兼容0x06060000由于硬件错误访问失败0x06070010数据类型不匹配服务参数长度不匹配0x06070012数据类型不匹配服务长度参数过高0x06070013数据类型不匹配服务长度参数太低0x06090011子索引不存在0x06090030超出了参数的值范围仅适用于写访问0x06090031写入的参数值过高0x06090032写入的参数值过低0x06090036最大值小于最小值0x08000000一般性错误0x08000020数据无法传输或存储到应用程序0x08000021由于本地控制数据无法传输或存储到应用程序0x08000022由于当前设备状态数据无法传输或存储到应用程序0x08000023对象字典动态生成失败或不存在对象字典表5.2-2 错误代码5.3.普通SDO协议Normal SDO protocol当传输数据的值超过4个字节时无法使用快速SDO传输必须使用普通SDO多帧报文完成传输在实际应用中较少应用通常只有在一些CANopen节点固件升级时才会用到。六.特殊协议Special protocols为了方便 CANopen 主站对从站管理。在 CANopen 协议中已经为特殊的功能预定义了 COB-ID其主要有以下几种特殊报文同步报文协议Sync protocol紧急报文协议Emergency protocol时间戳协议Time-stamp protocol6.1.同步报文协议Sync protocol该报文对象主要实现整个网络的同步传输仅针对TPDO每个节点都以该同步报文作为 PDO触发条件收到该报文才允许发送PDO报文因此该同步报文的 COB-ID优先级较高以及最短的传输时间一般选用0x80h作为同步报文的ID如图 6.1-1 所示。图6.1-1 同步报文一般同步报文由CANopen主站发出CAN 报文的数据长度为 0 字节收到同步报文后从站向主站发送一帧TPDO报文由此循环。6.2.时间戳报文协议Time-stamp protocol时间标记对象Time StampNMT 主机发送自身的时钟为网络各个节点提供公共的时间参考即网络对时从机将自身的时间设置为与主机相同节点将此时间存储在对象字典 0x1012的索引中。如图6.2-1所示。图6.2-1 时间戳报文数据类型是TIME_OF_DAY该数据类型表示的时间为绝对时间长度6字节表示与1984年1月1日0时的时间差。该报文主要用于故障诊断在从站对时完成后若某一从机发生故障可以得知在同一时刻的其余从机的工作状态。6.3.紧急报文协议Emergency protocol当设备内部发生错误时会触发紧急事件对象Emergency发送设备内部错误代码提示CANopen主站。紧急报文属于诊断性报文一般不会影响CANopen通信其 ID储存在索引0x1014中一般情况下定义为0x080Node-ID数据场8个字节包括EEC紧急错误代码、ER错误寄存器、MEF厂商自定义错误代码如图6.3-1所示。图6.3-1 紧急报文紧急对象仅根据“错误事件”传输一次。只要没有新的设备上发生错误无需传输其他紧急对象。如果ER 1则发生了指定的错误ER总共八位唯一必须发送的信号是一般错误一般错误在任何错误情况下都会发出信号其余位按实际情况发送。通过本规范紧急错误代码(EEC)如表6.3-1 所示错误寄存器(ER)如表6.3-2所示。设备特定的附加信息和紧急情况由厂商自定义不在本规范的范围内。--------错误代码------------------------------------------------定义----------------------------------------0x00xxError reset or no error 错误复位或没有错误0x10xxGeneric error 一般错误0x20xxCurrent 电流错误0x21xxDevice input side 设备输入端0x22xxInside of device 设备内部0x23xxDevice output side 设备输出端0x30xxVoltage 电压错误0x31xxMain 主供电0x32xxInside of device 设备内部0x33xxOutput 输出0x40xxTemperature 温度错误0x41xxAmbient 环境0x42xxDevice 设备0x50xxDevice hardware 硬件错误0x60xxDevice software 软件错误0x61xxInternal 内部0x62xxUser 用户0x63xxData set 数据设置0x70xxAdditional modules 辅助设备错误0x80xxMonitoring 监视错误0x81xxCommunication 通信0x8110CAN overrun CAN 通信超载0x8120Error Passive 错误被动0x8130Life Guard Error 节点守护错误0x8140Recovered from Bus-off 总线关闭恢复0x82xxProtocol error 协议错误0x8210PDO not processed PDO 没有处理0x8220Length exceeded 长度越界0x90xxExternal error 外部错误0xF0xxAdditional functions 附加功能错误0xFFxxDevice-specific 设备特定的错误表6.3-1 紧急错误代码--------位----------------要求--------------------------------------定义------------------------------0必须发送一般错误1可选发送电流2可选发送电压3可选发送温度4可选发送通信错误超时错误状态5可选发送特定于设备配置6可选发送保留7可选发送制造商特定表6.3-2 错误寄存器