《CANopen协议详情讲解-16页文档资料.doc》由会员分享,可在线阅读,更多相关《CANopen协议详情讲解-16页文档资料.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流CANopen协议详情讲解【精品文档】第 16 页根据DS301的内容进行介绍1、CAN总线 CAN标准报文2、CANopen应用层协议CANopen 协议不针对某种特别的应用对象,具有较高的配置灵活性,高数据传输能力,较低的实现复杂度。同时,CANopen 完全基于CAN 标准报文格式,而无需扩展报文的支持,最多支持127个节点,并且协议开源。一个标准的CANopen 节点(下图),在数据链路层之上,添加了应用层。该应用层一般由软件实现,和控制算法共同运行在实时处理单元内。 一个标准的CANopen 节点CANopen 应用层协议细化了CAN 总线协议
2、中关于标识符的定义。定义标准报文的11 比特标识符中高4 比特为功能码,后7 比特为节点号,重命名为通讯对象标识符(COB-ID)。功能码将所有的报文分为7个优先级,按照优先级从高至低依次为:网络命令报文(NMT)同步报文(SYNC)紧急报文(EMERGENCY)时间戳(TIME)过程数据对象(PDO)服务数据对象(SDO)节点状态报文(NMT Err Control)7 位的节点号则表明CANopen 网络最多可支持127个节点共存(0 号节点为主站)。下表给出了各报文的COB-ID 范围。NMT 命令 为最高优先级报文,由CANopen 主站发出,用以更改从节点的运行状态。SYNC 报文
3、定期由CANopen 主站发出,所有的同步PDO 根据SYNC报文发送。EMERGENCY报文 由出现紧急状态的从节点发出,任何具备紧急事件监控与处理能力的节点会接收并处理紧急报文。TIME 报文 由CANopen 主站发出,用于同步所有从站的内部时钟。PDO 分为4 对发送和接收PDO,每一个节点默认拥有4对发送PDO 和接收PDO,用于过程数据的传递。SDO 分为发送SDO 和接收SDO,用于读写对象字典。MT Error Control报文 由从节点发出,用以监测从节点的运行状态。状态机CANopen 的每一个节点都维护了一个状态机。该状态机的状态决定了该节点当前支持的通讯方式以及节点行
4、为。初始化时,节点将自动设置自身参数和CANopen 对象字典,发出节点启动报文,并不接收任何网络报文。初始化完成后,自动进入预运行状态。在该状态,节点等待主站的网络命令,接收主站的配置请求,因此可以接收和发送除了PDO 以外的所有报文。运行状态为节点的正常工作状态,接收并发送所有通讯报文。停止状态为一种临时状态,只能接收主站的网络命令,以恢复运行或者重新启动。CANopen节点状态转换图 CANopen节点状态转换条件3、Device ModelCommunication 提供通信对象和传输经过底层的数据的适当功能;Object Dictionary 对此设备上的应用程序对象,通信对象和状态
5、机的行为有影响的所有数据项的集合。Application 由在处理环境方面的设备功能组成。设备应用在数据条目中的完整描述在对象字典中叫设备子文件(device profile)4、OD每个节点维护一个对象字典(Object Dictionary, OD)。该对象字典保存了节点信息、通讯参数和所有的过程数据,是CANopen 节点的核心数据结构。上层应用程序也主要通过读写对象字典和CANopen 应用层进行交互。CANopen 对象字典为两级数组结构,通过索引(16bits)和子索引(8bits)来编址。设备子文件中最重要的就是对象字典的描述, 对象字典在slave节点中一般是在设备初始化写好的
6、不会修改,而在master节点中可以在运行过程中动态修改,不修改的OD一般存在ROM中,而修改的存在RAM中。由于它是由16bits的位索引,所以最多有65536个entries.根据节点所支持的通讯方式,每一个节点都必须实现1000h1FFFh 当中的一个必要子集,同时实现6000h 以上部分的数据区。数据区大小由节点的功能自行决定。1000h 以下部分所有的节点都不需实现。对象字典作为在CAN总线上连接application和通信的媒介,其允许来自application数据在CAN 网络上进行交换。CANopen定义了可以进入对象字典的服务和通信对象。每一个入口通过索引和子索引来编址。在一
7、个主索引里中的子索引入口的类型和属性可能会变化。5、PDO数据处理对象 (PDO) 特别适合快速的数据处理传输。通信模块针对这些数据处理对象定义了一个PDO producer 和一个或多个PDO consumers。PDO的传输是由事件触发的,这样的事件可以是代表一个PDO变量的变化;可以是时间的过期或者是接收到一个特定的消息。过程数据直接在一个CAN消息中传输而不需要协议头文件。一个PDO的长度是在0到8个字节之间。PDOs包含在其映射参数和通信参数中。TPDOs 和RPDOs的最大的数可以被定义为512。一个简单的CANopen设备一般支持4个PDOs。实际当中,对一个具体的CANopen
8、设备而言,其PDOs的个数由应用层或设备profile来决定的。3.1PDO的结构映射参数在对象词典中一个PDO由临近的条目构成。所谓的映射参数定义了这些条目的连接。一个映射参数通过索引、分索引和位数定义数据源。例如:一个CAN消息最多有8个字节。这意味着当使用一个PDO时,在一个PDO中发送8个字典的对象条目。3.2PDO的结构通信参数为了传输一个PDO,通信参数定义了传输的性质和CAN标识符(CAN identifier)。PDO通信参数是在对象词典的条目(RPDOs: index 0x14000x15FF,TPDOs: 0x1800-0x19FF)如果允许,映射参数在数据服务对象帮助下可
9、以通过CAN修改。3.2 COB-ID(CAN 标识符, 分索引 1)COB-ID作为身份证明,PDO的优先权在总线入口(access)之前。对于每一个CAN消息来说只允许有一个发送者(生产者)。然而,对这个已存在的消息来说其允许多个接收者(消费者)。位30=0,著对这个PDO来说一个远程发送请求(RTR)是被允许。3.3 PDO连接的例子设备A的输入2和3被转移到设备B的输出1和3。两个设备都支持完全映射。传输和接收都是PDOs使用的是相同的标识符0x01C0。因此设备B自动的接收由设备A发送的PDO。设备B作为接收者根据映射原理分析数据:它传递第一个字节到输出1,传递第二个字节到输出3。在
10、另一方面,发送设备A以同样的字节存储它的输入2和3。6、SDO数据字典作为应用层和通信层的主要数据交换媒介。一个CANopen设备的所有数据的入口可以通过对象字典来管理。每一个对象字典的入口可以用索引和子索引来表示其地址。CANopen定义了所谓的SDO就是用于进入到这些入口。通信模块基于客户-服务器框架上的数据交换。读或写入口总是由客户来初始化并且是由服务器服务。每一个CANopen设备必须有一个数据服务对象服务器来进入到它的对象字典。SDO 发送需要两类不同的COB IDs (CAN identifier)。第一个COB ID 用于从客户到服务器发送一个请求。服务器通过第二个COB ID发
11、送反馈信号到客户。不同的 COB ID必须用于各自的方向以防止在CAN总线上的冲突。通信profile定义了COB IDs 可以用default SDP server。每一个CANopen设备可以处理127个SDO servers. CANopen 标准CiA DS-301 定义了不同的协议用于发送SDOs。读OD 入口称作为上传,写入口称为下载。一个正在进行的发送可以在终止转移服务帮助下由客户或服务器来中断。TPDO 传输的是采样的数据,当发生触发TPDO 传输的事件时,各个TPDO 根据自己的传输类型决定是否进行采样并传输。TPDO 的传输分为同步和异步两大类,传输类型为同步的,需要在接收
12、到同步消息(SYNC) 时采样数据。同步又分为周期和非周期两种。传输类型0 为非周期传输,表示只有接收到同步消息并且规定的事件发生才进行采样数据发送,具体是在收到同步对象后,判断规定的事件是否发生,如果发生则进行采样并触发TPDO 的发送。传输类型1240 为周期传输,传输类型的值表示在接收到对应个数的同步消息后采样并触发TPDO 的发送,例如某个TPDO的传输类型为10,就表示此TPDO 每次接收到10 个同步消息后采样并发送数据。传输类型252 为非周期传输,在接收到同步对象后进行采样但不发送,在接收到请求该数据的远程帧后发送。传输类型253-255 为异步传输,定义为此三种类型的TPDO
13、在接收到远程帧或规定的事件发生后进行传输。7、CANopen中的协议CAN message in CANopen数据放在CAN帧中是按最小位在前的顺序存放。NMT protocol设置节点进入操作设置节点进入停止设置节点进入预操作设置节点进入复位应用设置节点进入复位通信配置所有节点时,使用nodeID=00Node Guard Protocol主节点发送下列命令来询问节点的状态节点响应HeartBeat Protocol节点周期传送它的状态。Bootup Protocol节点进入预操作状态时,它发送:SDO protocol 所有SDO帧都具有相同的CAN帧长度:8bytes数据和rtr=0.
14、SDO Download expedited protocol为了写0xd0d1到服务器节点对象字典,客户机发送请求:SDO Upload expedited protocol为了读0xd0d1到服务器节点对象字典,客户机发送请求:SDO abort protocolAbort code (hexa)0503 0000 Toggle bit not alternated0504 0000 SDO protocol timed out0504 0001 Client/server command specifier not valid or unknown0504 0002 Invalid bl
15、ock size (block mode only)0504 0003 Invalid sequence number (block mode only)0504 0004 CRC error (block mode only)0504 0005 Out of memory0601 0000 Unsupported access to an object0601 0001 Attempt to read a write only object0601 0002 Attempt to write a read only object0602 0000 Object does not exist
16、in the object dictionary0604 0041 Object cannot be mapped to the PDO0604 0042 The number and length of the objects to be mapped whould exeed PDO length0604 0043 General parameter incompatibility reason0604 0047 General internal incompatibility in the device0606 0000 Access failed due to a hardware e
17、rror0607 0010 Data type does not match, length of service parameter does not match0607 0012 Data type does not match, length of service parameter too hight0607 0013 Data type does not match, length of service parameter too low0609 0011 Sub-index does not exist.0609 0030 Value range of parameter exce
18、eded (only for write access)0609 0031 Value of parameter written too hight0609 0032 Value of parameter written too low0609 0036 Maximum value is less than minimum value0800 0000 General error0800 0020 Data cannot be transferred or stored to the application0800 0021 Data cannot be transferred or stor
19、ed to the application because of local control0800 0022 Data cannot be transferred or stored to the application because ofthe present device state0800 0023 Object dictionary dynamic generation fails or no object dictionary is present.8、CANopen中PDO与SDO配置How to configure a PDO Transmit ?例子:-配置PDO 0x18
20、00+n-它的COBID是0x387-该PDO始终触发传输-它必须包含数据:data X(2bytes),data Y(4bytes),按下面的顺序-data X定义在索引0x6000,子索引03-data Y定义在索引0x2010,子索引211索引1800+n,子索引01:写COBID(4bytes)2- 子索引02:写传输字节t(1byte) t=1to 0xF0:PDO 在每接到t个SYNC后被传输 t=FD :在接收到PDO请求(rtr=1)后传输 t=FF:根据事件进行传输,节点自发发送PDO3索引1A00+n:定义第n个数据的映射子索引0:写嵌入到PDO中的数据个数(1byte),
21、本例是,写入2子索引1:定义在哪里寻找嵌入的第一个数据和大小。(8bytes) 格式是:index (2 bytes) subindex (1 byte) size in bits (1 byte) 本例,写入60000310子索引2:定义在哪里寻找嵌入的第二个数据和大小。(8bytes) 本例,写入20102120配置节点5的PDO 1802在每3个SYNC传输,发送的SDO(s)应为605 23 02 18 01 00 00 87 03605 2F 02 18 02 03 00 00 00605 2F 02 1A 00 02 00 00 00605 23 02 1A 01 10 03 00
22、 60605 23 02 1A 02 20 21 10 20什么是PDO Transmited 10 on request 10 ?当一个节点接受到带有相同COBID的rtr,该PDO必须传输。例如:如果带有COBID384的PDO被请求,它就必须被传输。How to configure a PDO Receive ?例子-配置PDO 0x1400+n-它的COBID是0x183-该PDO始终触发传输-它必须包含数据:data X(2bytes),data Y(4bytes),按下面的顺序-data X定义在索引0x6000,子索引03-data Y定义在索引0x2010,子索引211索引14
23、00+n,子索引01:写COBID(4bytes)2- 子索引02:写传输字节t(1byte) t=1to 0xF0:PDO 在每接到t个SYNC后被传输 t=FD :在接收到PDO请求(rtr=1)后传输 t=FF:根据事件进行传输,节点自发发送PDO3索引1600+n:定义映射子索引0:写嵌入到PDO中的数据个数(1byte),本例是,写入2子索引1:定义在哪里寻找嵌入的第一个数据和大小。(8bytes) 格式是:index (2 bytes) subindex (1 byte) size in bits (1 byte) 本例,写入60000310子索引2:定义在哪里寻找嵌入的第二个数据
24、和大小。(8bytes) 本例,写入20102120配置节点5的PDO 1802在每3个SYNC接收,发送的SDO(s)应为605 23 02 14 01 00 00 83 01605 2F 02 14 02 03 00 00 00605 2F 02 16 00 02 00 00 00605 23 02 16 01 10 03 00 60605 23 02 16 02 20 21 10 20How to configure a SDO client ?在CANopen网络,每一个slave节点实现一个SDO服务器(index1200),来接收来自client节点的SDO。缺省情况下,slave
25、节点功能都是很好的配置的了。一般,slave节点不需要实现任何SDO client,因为它不需要发送SDO到其他的节点。Master节点为了发送SDO到slave节点,它应该有几个SDOclients(每个slave一个)。项必须被配置在1280,1281,配置SDOclient定义在index 0x1280+n来和节点nsl通信1 Index 1280 + n, subindex 01 : write the cobId transmit (4 bytes) : 600 + nsl2 subindex 02 : write the cobId receive (4 bytes) : 580
26、+ nsl3 subindex 03 : write the slave node id (1 byte) : nsl (Optional)How to configure a node to send the SYNC ?Index 1006, subindex 00 : write the period in microseconds. (4 bytes) :例子:to send a SYNC every 10(dec) ms (1000 micro), write the value : 0x 2710The SDO should be if it is the node 9: 609
27、23 06 10 00 10 27 00 00To stop, write 0.To start, write 0x40000080 at index 0x1005, subindex 0What is the SYNC message ?How to configure a node to send its heartbeat ?To send its heartbeat every n milliseconds :1 Index 1017 subindex 00 : write n 12 (2 bytes) :例子 :to send a heartbeat every 100 ms, wr
28、ite the value : 0x 64The SDO should be, if it is the node 9 : 609 2B 17 10 00 64 00 00 00To stop, write 0.9、CANopen 如何修改对象字典的理解SDO的基本结构如下:ClientServer/ServerClient下载/上传(Download / upload)请求/应答(Request /response)分段/加速传送(Segmented / expedited transfer)CAN帧数据字节长度用于后续每个分段的交替清零和置位的触发位(toggle bit)SDO中实现了5
29、个请求/应答协议:启动域下载(Initiate Domain Download);域分段下载(Download Domain Segment);启动域上传(Initiate Domain Upload);域分段上传(Upload Domain Segment)和域传送中止(Abort Domain Transfer)。 下载(Download)是指对对象字典进行写操作,上传(Upload)指对对象字典进行读操作。 协议的SDO 命令字(SDO CAN报文的第一个字节)语法和细节在下面部分说明:(表示不相关,应为0)。 读取参数时,使用启动域上传(Initiate Domain Upload )
30、协议 设置参数时,使用启动域下载(Initiate Domain Download)协议n:表示报文数据中无意义数据的字节数【从(8n)字节到第7字节数据无意义】 (当e=1且s=1时n有效,否则n为0)。e:e=0时正常传送,e=1时加速传送。s:表示是否指明数据长度,0为数据长度未指明,1为数据长度指明。e=0,s=0:由CiA保留。e=0,s=1:数据字节为字节计数器,byte 4是数据低位部分(LSB),byte 7是数据高位部分(MSB)。e=1:数据字节为将要下载(download)的数据。Examples:读取参数 发送SDO报文 接收SDO报文 (*为最大字节数据) 注 :SD
31、O报文发送时命令字均为0x40如果数据为1个字节,则接收命令字为0x4F如果数据为2个字节,则接收命令字为0x4B如果数据为3个字节,则接收命令字为0x47如果数据为4个字节,则接收命令字为0x43 修改参数时发送SDO报文 (*为最大字节数据)如果数据为1个字节,则发送命令字为0x2F如果数据为2个字节,则发送命令字为0x2B如果数据为3个字节,则发送命令字为0x27如果数据为4个字节,则发送命令字为0x23接收SDO报文 注 :SDO报文接收时命令字均为0x60读取参数举例Send : 601 40 01 65 00 00 00 00 00 - 读取6501h/00h地址的参数(节点地址0
32、1)(SingleTurn resolution:四个字节)Receive: 581 43 01 65 00 A0 8C 00 00 - 6501h/00h地址的参数值为0x00008CA0Send : 601 40 00 20 00 00 00 00 00 - 读取2000h/00h地址的参数(Mode:一个字节)Receive: 581 4F 00 20 00 00 00 00 00 - 2000h/00h地址的参数值为0x00写入参数举例Send : 601 23 01 65 00 A0 8C 00 00 - 将6501h/00h地址的参数值设为0x00008CA0(SingleTurn
33、 resolution:四个字节)Receive: 581 60 01 65 00 00 00 00 00 - 6501h/00h地址的参数值修改成功Send : 601 2F 00 20 00 00 00 00 00 - 将2000h/00h地址的参数值设为0x00(Mode:一个字节)Receive: 581 60 00 20 00 00 00 00 00 - 2000h/00h地址的参数值修改成功 注:参数修改后并没有直接保存,必须在Object 1010h:Save parameters(保存参数)内进行“save”写入才能保存所修改参数。在SubIndex 1写入命令“save”(0
34、x65766173h),参数将会存入存储器。举例:Send: 601 23 10 10 01 73 61 76 65 - 将0x65766173h写入1010h/01h地址Receive: 581 60 10 10 01 00 00 00 00 - 1010h/01h地址的参数值修改成功 注:恢复默认参数时,也必须对Object 1011h:Restore default parameters(恢复默认参数)内进行“load”修改参数并保存。在SubIndex 1写入命令“load”(0x64616F6Ch),参数将会恢复成默认值并写入存储器。举例:Send: 601 23 11 10 01
35、6C 6F 61 64 - 将0x64616F6Ch写入1011h/01hReceive: 581 60 11 10 01 00 00 00 00 - 1011h/01h地址的参数值修改成功/* 注:编码器除了可以在CAN接口内修改波特率和节点地址外,还可以通过在CiA DSP-305协议里定义的Layer-Setting-Service (LSS)进行设置。LSS主节点通过CAN总线可以对LSS从节点的节点地址和CAN波特率进行设置。LSS主节点先设置LSS从节点进入configuration mode(配置模式),然后从节点被给予了一个新的节点地址,从节点进行确认是否支持新的节点地址。然后
36、再切换回operation mode (操作模式)*/1. Setting node address(设置节点地址)Send : 7E5 04 01 00 00 00 00 00 00 - 进入配置模式Send : 7E5 11 20 00 00 00 00 00 - 设置新的节点地址为0x20Receive: 7E4 11 00 00 00 00 00 00 00 - SuccessSend : 7E5 17 00 00 00 00 00 00 00 -存贮配置Receive: 7E4 17 00 00 00 00 00 00 00 - SuccessSend : 7E5 04 00 00
37、00 00 00 00 00 - 进入操作模式(重启)Receive: 720 - New bootup message2. Setting baudrate(设置波特率)Send : 7E5 04 01 00 00 00 00 00 00 -进入配置模式Send : 7E5 13 00 02 00 00 00 00 00 - 设置新的波特率500KReceive: 7E5 13 00 00 00 00 00 00 00 - SuccessSend : 7E5 15 10 00 00 00 00 00 00 - 设置编码器波特率(重启)Receive: 740 - New bootup message (500k)10、协议理解