一文详述CAN及CANopen协议,万字内容,目录清晰,需耐心阅读

[复制链接]
查看91873 | 回复0 | 2024-10-31 09:19:54 | 显示全部楼层 |阅读模式


目录


1 CAN概述

    1.1 什么是CAN

    1.2 CAN的历史

    1.3 CiA组织

    1.4 CAN的OSI模型

    1.5 CAN的特性

    1.6 CAN的拓扑结构

    1.7 CAN的数据帧

    1.8 常见的CAN应用层协议

2 CANopen概述

    2.1 什么是CANopen

    2.2 CANopen网络模型

    2.3 CANopen常见规范

    2.4 CANopen对象字典

    2.5 CANopen通讯标识符

3 CANopen协议概述

    3.1 常用术语

    3.2 通讯状态机

    3.3 通讯报文

4 CANopen管理报文

    4.1 NMT模块控制报文

    4.2 NMT节点保护报文

    4.3 心跳报文

    4.4 NMT BOOT-UP启动报文

5 CANopen紧急报文

6 SDO(服务数据对象)通讯

    6.1 SDO功能

    6.2 SDO的通讯对象标识符(COB_ID)

    6.3 SDO读报文

    6.4 SDO读报文示例

    6.5 SDO 写报文

    6.6 SDO写报文示例

    6.7 SDO通讯失败报文

7 PDO(过程数据对象)通讯

    7.1 PDO功能

    7.2 PDO通讯参数

    7.3 PDO通讯对象标识符(COB_ID)

    7.4 PDO的传输类型

    7.5 PDO映射

    7.6 PDO报文

    7.7 PDO和SDO总结

9 同步报文

    9.1 同步报文的功能

    9.2 同步报文的数据帧

    9.3 同步报文的传输类型

    9.4 同步循环周期与窗口时间

    9.5 伺服周期性同步位置模式(CSP)原理

    9.6 同步周期对运动控制性能的影响
10 电子数据表格(EDS)

正文

1 CAN概述1.1 什么是CANController Area Network,控制器局域网,是国际上应用最广泛的现场总线之一。20世纪80年代初德国Bosch公司为解决现代汽车中众多控制单元、测试仪器之间的实时数据交换而开发的一种串行通信协议。1.2 CAN的历史

    1983年,Bosch开始研究车上网络技术。

    1986年,Bosch在SAE(美国汽车工程师学会)大会公布CAN协议。

    1987年,Intel和Philips先后推出CAN控制器芯片。

    1991年,Bosch颁布CAN 2.0技术规范,CAN2.0包括A和B两个部分。

    1991年,CAN总线最先在Benz S系列轿车上实现。

    1993年,ISO颁布CAN国际标准ISO-11898。

    1994年,SAE颁布基于CAN的J1939标准。

    2003年,Maybach发布带76个ECU的新车型(CAN,LIN,MOST)。
    2003年,VW发布带35个ECU的新型Golf。
1.3 CiA组织1992年,一些公司创建了非盈利性组织CAN in Automation(CiA),以提供与CAN相关的技术、产品和市场营销方面的信息。此举旨在提升CAN的形象,并且为CAN协议未来的发展铺平道路。到2020年年初,已有670家公司加入CiA组织。1.4 CAN的OSI模型七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。从OSI网络模型的角度来看同,现场总线网络一般只实现了第1层(物理层)、第2层(数据链路层)、第7层(应用层)。因为现场总线通常只包括一个网段,因此不需要第3层(传输层)和第4层(网络层),也不需要第5层(会话层)第6层(描述层)的作用。CAN只定义物理层和数据链路层,没有规定应用层。


数据链路层:包括介质访问控制(MAC)层和逻辑链路控制(LLC)层,关键是形成数据帧。

物理层:有时也称物理接口,是实现物理连接的功能描述和执行连接的规程,提供用于建立、保持和断开物理连接的机械、电气、功能和规程的条件,物理层有四个重要特性:

    机械特性——连接器、引脚数、引脚排列。

    电气特性——信号电平高低、阻抗和阻抗匹配、传输速度和距离。

    功能特性——信号线(数据、控制、地线)的功能分配和确切定义。
    规程特性——各信号线的工作规则和时序。



1.5 CAN的特性采用双线差分信号,两根线构成总线,CAN High与CAN Low,这两根线之间的电位差可以对应两个不同的逻辑状态进行编码。静态时均是2.5V左右,此时状态表示为逻辑1,也可以叫做隐性位,用CAN_H比CAN_L高表示逻辑0,称为显性位,此时通常电压值为CAN_H=3.5V和CAN_L=1.5V,竞争时显位优先。


使用双绞线作为总线介质时,总线长度≤40米, 传输速率可达1Mbps。


协议本身对节点的数量没有限制,实际应用中节点数目受网络硬件的电气特性所限制,总线上节点的数量可以动态改变,广播发送报文,报文可以被所有节点同时接收。



    CAN是多主站结构。
    每个报文的内容通过标识符识别,标识符在网络中是唯一的:
      标识符描述了数据的含义;某些特定的应用对标识符的分配进行了标准化。
    根据需要可进行相关性报文过滤。



1.6 CAN的拓扑结构

    总线长度L:最大40m。

    支线长度H:最大0.3m。

    节点距离D:最大40m。
    终端电阻R:120Ω。



1.7 CAN的数据帧标识符(CAN Identifier)+8字节数据。标准CAN的标识符长度是11位,而扩展格式CAN的标识符长度可达29位。CAN协议的2.0A版本规定CAN控制器必须有一个11位的标识符,同时在2.0B版本中规定CAN控制器的标识符长度可以是11位或29位。遵循CAN2.0B协议的CAN控制器可以发送和接收11位标识符的标准格式报文或29位标识符的扩展格式报文。如果禁止CAN2.0B,则CAN控制器只能发送和接收11位标识符的标准格式报文,而忽略扩展格式的报文结构但不会出现错误。CAN本身并不完整,没有定义CAN报文中的11/29位标识符、8字节数据的使用。


1.8 常见的CAN应用层协议


2 CANopen概述2.1 什么是CANopenCAL(CAN Application Layer)协议是目前基于CAN的高层通讯协议中的一种,最早由 Philips医疗设备部门制定。CAL提供了所有的网络管理服务和报文传送协议,但并没有定义通讯对象的内容或者正在通讯的对象的类型(它只定义了how,没有定义what)。而这正是CANopen切入点。CANopen是在CAL基础上开发的,使用CAL通讯和服务协议子集,提供了分布式控制系统的一种实现方案。CANopen是CAN的一种应用层协议。CANopen的核心概念是设备对象字典(OD:Object Dictionary),在其它现场总线(Profibus,Interbus-S)系统中也使用这种设备描述形式。应当注意,对象字典不是CAL的一部分,而是在CANopen中实现的。CANopen协议是免许可证的,任何组织和个人都可以开发支持CANopen协议的设备而不用支付版税。2.2 CANopen网络模型


2.3 CANopen常见规范CANopen协议是CAN-in-Automation(CiA)定义的标准之一,在欧洲,CANopen协议被认为是在基于CAN的工业系统中占领导地位的标准。大多数重要的设备类型,例如数字和模拟的输入输出模块、驱动设备、操作设备、控制器、可编程控制器或编码器,都在称为“设备描述”的协议中进行描述;“设备描述”定义了不同类型的标准设备及其相应的功能。依靠CANopen协议的支持,可以对不同厂商的设备通过总线进行配置。


2.4 CANopen对象字典对设备的操作基于“Object Dictionary(OD 对象字典)”,所有的参数、参数值和功能都是通过16位index和8位sub-index组成的地址来访问和存取。通俗的理解就是CANopen通讯的地址。


CANopen网络中每个节点都有一个对象字典。对象字典包含了描述这个设备和它的网络行为的所有参数。一个节点的对象字典(包含通讯功能、通讯对象、与设备相关的对象以及对象的缺省值等)是在电子数据文档(EDS:Electronic Data Sheet)中描述或者记录在纸上。对象字典中描述通讯参数的部分对所有CANopen设备(例如在OD中的对象是相同的,对象值不必一定相同)都是一样的。CANopen对象词典的通用结构如下。


2.5 CANopen通讯标识符Communication Object Identifier (COB_ID)即通讯标识符。每个CANopen帧都以COB-ID开头,COB-ID是数据帧的唯一标识符。COB_ID包括功能段(FUNCTION)和地址段(NODE-ID)。Node-ID由系统集成商定义,例如通过拨码开关设置。Node-ID范围是1~127(0不允许被使用)。COB_ID越小报文优先级别越高。CANopen的COB_ID范围从0-77F。


其中,DLC为数据包内的有效字节数,范围0~8。Data为数据包(0~8字节数据)。3 CANopen协议概述3.1 常用术语


3.2 通讯状态机


状态转移(1~5由NMT服务发起),NMT命令字(在括号中):

1:Start_Remote_node (0x01)。

2:Stop_Remote_Node (0x02)。

3:Enter_Pre-Operational_State (0x80)。

4:Reset_Node (0x81)。

5:Reset_Communication (0x82)。
6:设备初始化结束,自动进入Pre_Operational状态,发送Boot-up报文。3.3 通讯报文CANopen通讯定义了4种通讯报文。(1)管理报文

    网络管理和ID分配服务,如初始化节点、启动节点,复位节点。
    这些服务都是基于主从通讯模式,在CAN网络中,只能有一个发送管理报文的主节点。
(2)预定义报文或者特殊功能对象

    节点/寿命保护。

    Boot-up。

    紧急报文。

    同步报文。
    时间标记对象。
(3)服务数据对象SDO(Service Data Objects)
    通过使用索引和子索引,SDO使客户机能够访问设备(服务器)对象字典中的项。
(4)过程数据对象PDO(Process Data Objects)
    用来传输实时数据,数据传送限制在1到8个字节。
4 CANopen管理报文4.1 NMT模块控制报文只有NMT-Master节点能够传送NMT Module Control报文。所有从节点必须支持NMT模块控制服务。NMT Module Control报文不需要应答。NMT 报文格式如下:


当Node-ID=0,则所有的NMT从站设备被寻址。CS是命令字,取值及含义如下:


4.2 NMT节点保护报文通过节点保护报文,NMT主节点可以监视每个从节点的当前状态。主节点周期性的发送报文去询问从节点的状态,从节点收到主节点的询问后将自己的状态回复给主节点,在设定的时间内如果主节点没有收到从节点的信息或信息错误都会判断从节点通讯故障。主节点发送远程帧(只有COB-ID,无数据)。


Bit7为触发位,在每次节点保护应答中交替“0”和“1”,在第一次节点保护时置0。Bit0-bit6状态表:


注意:带*号的需要支持扩展BOOT-UP的节点才提供,状态0从不在节点保护中出现,因为从节点在初始化状态中是不会应答报文的。4.3 心跳报文一个节点还可被配置为产生周期性的被称作心跳报文(Heartbeat)的报文,从节点周期将该报文发送给消费者,消费者可以通过报文中的状态值得知从节点的状态。


心跳报文(HeartBeat)的消费者通常是NMT-Master主节点,它为每一个HeartBeat节点设置一个超时时间,超时则采取相应的动作。一个节点不能同时使用NODE-Guarding和HeartBeat。4.4 NMT BOOT-UP启动报文NMT-slave节点发布Boot-UP报文通知NMT-Master节点它已经从initialising状态进入pre-operational状态。


5 CANopen紧急报文紧急报文当设备内部出现的致命错误触发,以最高优先级发送到其它设备。适用于中断类型的错误报警信号。一个紧急报文包含8个字节,报文格式如下:


16进制的应急错误代码如下表所示。应急错误代码中“xx”部分由相应的设备子协议定义。


错误寄存器(Error Register)在设备的对象字典(索引0x1001)中,下表说明了错误寄存器的位定义。设备可以将内部错误映射到这个状态字节中,并可以快速查看当前错误。


6 SDO(服务数据对象)通讯6.1 SDO功能



    SDO主要用来在设备之间传输低优先级的对象,典型是用来对从设备进行配置、管理,比如用来修改速度环、位置环的PID参数,PDO配置参数等。

    通过使用索引和子索引SDO使客户机能够访问设备对象字典中的对象。

    通常情况下传输的数据长度不超过4个字节,当数据长度超过4个字节是分拆成几个报文。
    协议是确认服务类型:每个消息生成一个应答。SDO请求和应答报文总是包含8个字节。
6.2 SDO的通讯对象标识符(COB_ID)通讯对象标识符,使用中具体定义规则如下:


6.3 SDO读报文发送报文:


命令字:0x40。回应报文:


**最大四字节数据。
命令字:

    如果数据为1个字节,则回应命令字为0x4F。

    如果数据为2个字节,则回应命令字为0x4B。

    如果数据为3个字节,则回应命令字为0x47。

    如果数据为4个字节,则回应命令字为0x43。
    如果失败,则回应命令字为0x80。
6.4 SDO读报文示例对设备的操作基于“Object Dictionary”,所有的参数、参数值和功能都是通过16位index和8位subindex组成的地址来访问和存取。通俗的理解就是CANopen通讯的地址。


举例:读取设备站号为1的伺服实际位置60630020,读到的数据是4个字节,CANopen数据低字节在前高字节在后,回应数据为FFFFD113HEX,转换成10进制为-12013。


6.5 SDO 写报文发送报文:


命令字:

    如果数据为1个字节,则发送命令字为0x2F。

    如果数据为2个字节,则发送命令字为0x2B。

    如果数据为3个字节,则发送命令字为0x27。
    如果数据为4个字节,则发送命令字为0x23。
回应报文:


**为写报文的数据。
命令字:

    如果成功,则回应命令字为0x60
    如果失败,则回应命令字为0x80
6.6 SDO写报文示例举例:写设备站号为1的伺服目标位置607A0020=100000inc=000186A0HEX。注意:CANopen数据低字节在前高字节在后。


6.7 SDO通讯失败报文从站回复报文格式如下:


错误代码:


7 PDO(过程数据对象)通讯7.1 PDO功能



    CANopen协议并没有讲关于主站的概念,只是定义了从站,没有定义主站任何东西。因此RPDO和TPDO都是针对从站来说的。一个节点分别有4个TPDO和4个RPDO。

    PDO用来传输实时数据,数据从一个生产者传到一个或多个消费者。1个PDO 每次最多传输8个字节的数据。

    每个PDO在对象字典中用2个对象描述:

      PDO通讯参数:包含COB_ID、传输类型、禁止时间、定时器周期。

      PDO映射参数:包含对象字典中对象列表,这些对象映射到PDO里,包含数据长度。生产者和消费者根据映射的地址解释PDO内容。
    报文内容是预定义的(或者在网络启动时由主站配置)。
7.2 PDO通讯参数发送PDO通讯参数(1800h-19FFh)和接收PDO通讯参数(1400h-15FFh)。PDO通讯参数说明了PDO的基本特性,如COB-ID、传输类型、禁止时间和事件定时器等,它决定了PDO是以何种方式发送和接收数据。PDO禁止时间:两个连续PDO传输的最小间隔时间,避免由于高优先级信息的数据量太大,始终占据总线,而使其它优先级较低的数据无力竞争总线的问题。禁止时间由16位无符号整数定义,例如Kinco伺服中单位为1ms(原标准100us)。PDO定时周期:当超过定时时间后一个PDO可以被触发,周期有16位无符号数定义,单位1ms。


7.3 PDO通讯对象标识符(COB_ID)


7.4 PDO的传输类型
同步(通过接收SYNC对象实现同步):

    非周期:由远程帧预触发传送,或者由设备子协议规定中的对象特定事件预触发传送。
    周期:传送在每1到240个SYNC消息后触发。

异步:
    由设备协议中规定的对象特定事件触发传送。



7.5 PDO映射

    映射说明了PDO中所包含的通讯对象,决定了发送或接收的数据内容。

    发送映射(1A00h-1BFFh)。
    接收映射(1600h-17FFh)。



7.6 PDO报文Tx-PDO:


Rx-PDO:


7.7 PDO和SDO总结

    SDO通讯采用应答的方式。

    PDO通讯采用单向通讯,不需要确认回答。

    从节点在预操作状态和操作状态可以进行SDO通讯。
    从节点只有在操作状态才可进行PDO通讯。

重新回顾下状态机。



9 同步报文9.1 同步报文的功能

    同步报文用于控制TPDO的发送。

    同步报文用于控制RPDO的激活。
    同步报文用于同步各个节点的时钟。
9.2 同步报文的数据帧


9.3 同步报文的传输类型



    0非循环。
    1-240的传输类型就是指经过多少个同步报文后,发送TPDO。
9.4 同步循环周期与窗口时间



    通讯循环周期:索引1006h,规定了同步帧的循环周期。
    同步窗口时间:索引1007h,约束了同步帧发送后从节点发送PDO的时效,即在这个时间内发送的PDO才有效,超过时间的PDO将被丢弃。
9.5 伺服周期性同步位置模式(CSP)原理Cyclic Synchronous Position Mode,即伺服周期性同步位置模式。若伺服工作在7号插补模式,控制器完成位置指令规划,然后将规划好的目标位置607A以周期性同步的方式发送给伺服驱动器。控制器发送目标位置的周期必须是伺服驱动器位置环周期的整数倍。控制器周期性的发送同步报文,比如1ms、2ms、4ms等,驱动器主动通过微调自身控制环频率将控制环(电流环、速度环、位置环)和同步信号同步,从而实现多个驱动器同步工作。控制器发送RPDO给各个驱动器,比如目标位置,在下一个同步报文到来后,驱动器将指令激活,所有的驱动器同时更新指令,从而实现同步。


在运行同步工作模式的时候,SDO和TPDO也是允许的,但是发送的时机是需要检测的。因为RPDO是最重要的数据,必须优先保证RPDO的接收,然后在空闲时间才可以发送SDO和TPDO。一个比较合理的排列是:同步周期里面,前半时间用于SDO以及TPDO的发送,后半时间用于RPDO的接收。驱动器接收到设定位置后与当前位置比较,并依据控制器的周期与伺服位置环周期的倍数进行线性或非线性插值,将插值作为每个位置环周期的“设定位置”。例如驱动器位置环的周期1ms,控制器周期为4ms,伺服当前位置为300inc,目标位置为700inc,那么接下来的4个周期伺服位置环的“设定值”就依次是:400inc,500inc,600inc,700inc。如果不进行插值,伺服的第1个周期就将位置设置为700inc,那么接下来2~4个位置环扫描周期内设定位置维持不变,相当于电机停止,直到第4ms时控制器又发送新的“给定位置”。由于间隔了4ms驱动器才更新“设定位置”,电机表现为顿挫感,转动不流畅、不连贯。


此时伺服的速度取决于控制器的周期以及每个周期的脉冲增量,以上面为例:如果控制器每4ms将目标位置增加400inc,那么此时伺服的运转速度n=400inc*1000ms/4ms=100000inc/s。若是2轴同步的情形,则如下图。


9.6 同步周期对运动控制性能的影响(1)下面经过计算看下CAN总线同步周期与最多控制轴数的关系若同步周期1ms(1Mbit/s)则最多控制轴数为3轴,计算过程如下:

    PLC发送一个RPDO用时:47us(COB_ID、校验、传输间隔等)+64us(数据)=111us。

    SERVO接收一个TPDO用时:47us+64us=111us(同上)。

    PLC发送同步报文用时:47us。
    控制三个轴需要时间为:222us*3+47us=713us。

类推可知:

    2ms -> 6 axis,
    4ms ->12 axis
对于多数自动化设备CAN已经足够。高速以太网的优势在于可对更多轴进行同步控制。(2)同步精度同步精度取决于同步信号的精度,高性能的伺服同步信号抖动一般小于5us。如果同步信号抖动为5us,速度3000RPM,分辨率10000,同步周期4ms,即每4ms更新2000inc,那么5us是2.5inc,即5us的抖动精度在±2.5inc。高速以太网在同步精度上比CAN总线是有优势的,比如Ethercat的同步信号抖动小于1us,但在多数应用场合上CAN总线的同步精度已经足够。同步精度与同步周期无关,1ms与4ms的区别在于定位过程更平滑,不在于定位结果的偏差。


10 电子数据表格(EDS)EDS(电子数据表格)文件是PLC所连接从站的标识文件,通过该文件来辨认从站所属的类型。该文件包含从站的所有信息,比如生产厂家、序列号、软件版本、支持波特率种类、可以映射的OD及各个OD的属性等参数,类似于Profibus的GSD文件。因此在进行硬件配置前,我们首先需要把从站的EDS文件导入到上位组态软件中,才能与之通讯。END好书推荐现场总线与工业以太网已经成为重要的工业控制通信网络,近年来,无线传感网络与物联网(IoT)也融入到工业测控系统中。此书详述了包括CAN、PROFIBUS、CC-LINK、无线传感网络、物联网技术、嵌入式网络、工业以太网等内容,需要深入了解的可以阅读。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则