《CANopen合约协议讲解》由会员分享,可在线阅读,更多相关《CANopen合约协议讲解(33页珍藏版)》请在金锄头文库上搜索。
1、根据DS301的内容进行介绍1、CAN总线 CAN标准报文2、CANopen应用层协议CANopen 协议不针对某种特别的应用对象,具有较高的配置灵活性,高数据传输能力,较低的实现复杂度。同时,CANopen 完全基于CAN 标准报文格式,而无需扩展报文的支持,最多支持127个节点,并且协议开源。一个标准的CANopen 节点(下图),在数据链路层之上,添加了应用层。该应用层一般由软件实现,和控制算法共同运行在实时处理单元内。 一个标准的CANopen 节点CANopen 应用层协议细化了CAN 总线协议中关于标识符的定义。定义标准报文的11 比特标识符中高4 比特为功能码,后7 比特为节点号
2、,重命名为通讯对象标识符(COB-ID)。功能码将所有的报文分为7个优先级,按照优先级从高至低依次为:网络命令报文(NMT)同步报文(SYNC)紧急报文(EMERGENCY)时间戳(TIME)过程数据对象(PDO)服务数据对象(SDO)节点状态报文(NMT Err Control)7 位的节点号则表明CANopen 网络最多可支持127个节点共存(0 号节点为主站)。下表给出了各报文的COB-ID 范围。NMT 命令 为最高优先级报文,由CANopen 主站发出,用以更改从节点的运行状态。SYNC 报文 定期由CANopen 主站发出,所有的同步PDO 根据SYNC报文发送。EMERGENCY
3、报文 由出现紧急状态的从节点发出,任何具备紧急事件监控与处理能力的节点会接收并处理紧急报文。TIME 报文 由CANopen 主站发出,用于同步所有从站的内部时钟。PDO 分为4 对发送和接收PDO,每一个节点默认拥有4对发送PDO 和接收PDO,用于过程数据的传递。SDO 分为发送SDO 和接收SDO,用于读写对象字典。MT Error Control报文 由从节点发出,用以监测从节点的运行状态。状态机CANopen 的每一个节点都维护了一个状态机。该状态机的状态决定了该节点当前支持的通讯方式以及节点行为。初始化时,节点将自动设置自身参数和CANopen 对象字典,发出节点启动报文,并不接收
4、任何网络报文。初始化完成后,自动进入预运行状态。在该状态,节点等待主站的网络命令,接收主站的配置请求,因此可以接收和发送除了PDO 以外的所有报文。运行状态为节点的正常工作状态,接收并发送所有通讯报文。停止状态为一种临时状态,只能接收主站的网络命令,以恢复运行或者重新启动。CANopen节点状态转换图 CANopen节点状态转换条件3、Device ModelCommunication 提供通信对象和传输经过底层的数据的适当功能;Object Dictionary 对此设备上的应用程序对象,通信对象和状态机的行为有影响的所有数据项的集合。Application 由在处理环境方面的设备功能组成。
5、设备应用在数据条目中的完整描述在对象字典中叫设备子文件(device profile)4、OD每个节点维护一个对象字典(Object Dictionary, OD)。该对象字典保存了节点信息、通讯参数和所有的过程数据,是CANopen 节点的核心数据结构。上层应用程序也主要通过读写对象字典和CANopen 应用层进行交互。CANopen 对象字典为两级数组结构,通过索引(16bits)和子索引(8bits)来编址。设备子文件中最重要的就是对象字典的描述, 对象字典在slave节点中一般是在设备初始化写好的不会修改,而在master节点中可以在运行过程中动态修改,不修改的OD一般存在ROM中,而
6、修改的存在RAM中。由于它是由16bits的位索引,所以最多有65536个entries.根据节点所支持的通讯方式,每一个节点都必须实现1000h1FFFh 当中的一个必要子集,同时实现6000h 以上部分的数据区。数据区大小由节点的功能自行决定。1000h 以下部分所有的节点都不需实现。对象字典作为在CAN总线上连接application和通信的媒介,其允许来自application数据在CAN 网络上进行交换。CANopen定义了可以进入对象字典的服务和通信对象。每一个入口通过索引和子索引来编址。在一个主索引里中的子索引入口的类型和属性可能会变化。5、PDO数据处理对象 (PDO) 特别适
7、合快速的数据处理传输。通信模块针对这些数据处理对象定义了一个PDO producer 和一个或多个PDO consumers。PDO的传输是由事件触发的,这样的事件可以是代表一个PDO变量的变化;可以是时间的过期或者是接收到一个特定的消息。过程数据直接在一个CAN消息中传输而不需要协议头文件。一个PDO的长度是在0到8个字节之间。PDOs包含在其映射参数和通信参数中。TPDOs 和RPDOs的最大的数可以被定义为512。一个简单的CANopen设备一般支持4个PDOs。实际当中,对一个具体的CANopen设备而言,其PDOs的个数由应用层或设备profile来决定的。3.1PDO的结构映射参数
8、在对象词典中一个PDO由临近的条目构成。所谓的映射参数定义了这些条目的连接。一个映射参数通过索引、分索引和位数定义数据源。例如:一个CAN消息最多有8个字节。这意味着当使用一个PDO时,在一个PDO中发送8个字典的对象条目。3.2PDO的结构通信参数为了传输一个PDO,通信参数定义了传输的性质和CAN标识符(CAN identifier)。PDO通信参数是在对象词典的条目(RPDOs: index 0x14000x15FF,TPDOs: 0x1800-0x19FF)如果允许,映射参数在数据服务对象帮助下可以通过CAN修改。3.2 COB-ID(CAN 标识符, 分索引 1)COB-ID作为身份
9、证明,PDO的优先权在总线入口(access)之前。对于每一个CAN消息来说只允许有一个发送者(生产者)。然而,对这个已存在的消息来说其允许多个接收者(消费者)。位30=0,著对这个PDO来说一个远程发送请求(RTR)是被允许。3.3 PDO连接的例子设备A的输入2和3被转移到设备B的输出1和3。两个设备都支持完全映射。传输和接收都是PDOs使用的是相同的标识符0x01C0。因此设备B自动的接收由设备A发送的PDO。设备B作为接收者根据映射原理分析数据:它传递第一个字节到输出1,传递第二个字节到输出3。在另一方面,发送设备A以同样的字节存储它的输入2和3。6、SDO数据字典作为应用层和通信层的
10、主要数据交换媒介。一个CANopen设备的所有数据的入口可以通过对象字典来管理。每一个对象字典的入口可以用索引和子索引来表示其地址。CANopen定义了所谓的SDO就是用于进入到这些入口。通信模块基于客户-服务器框架上的数据交换。读或写入口总是由客户来初始化并且是由服务器服务。每一个CANopen设备必须有一个数据服务对象服务器来进入到它的对象字典。SDO 发送需要两类不同的COB IDs (CAN identifier)。第一个COB ID 用于从客户到服务器发送一个请求。服务器通过第二个COB ID发送反馈信号到客户。不同的 COB ID必须用于各自的方向以防止在CAN总线上的冲突。通信p
11、rofile定义了COB IDs 可以用default SDP server。每一个CANopen设备可以处理127个SDO servers. CANopen 标准CiA DS-301 定义了不同的协议用于发送SDOs。读OD 入口称作为上传,写入口称为下载。一个正在进行的发送可以在终止转移服务帮助下由客户或服务器来中断。TPDO 传输的是采样的数据,当发生触发TPDO 传输的事件时,各个TPDO 根据自己的传输类型决定是否进行采样并传输。TPDO 的传输分为同步和异步两大类,传输类型为同步的,需要在接收到同步消息(SYNC) 时采样数据。同步又分为周期和非周期两种。传输类型0 为非周期传输,
12、表示只有接收到同步消息并且规定的事件发生才进行采样数据发送,具体是在收到同步对象后,判断规定的事件是否发生,如果发生则进行采样并触发TPDO 的发送。传输类型1240 为周期传输,传输类型的值表示在接收到对应个数的同步消息后采样并触发TPDO 的发送,例如某个TPDO的传输类型为10,就表示此TPDO 每次接收到10 个同步消息后采样并发送数据。传输类型252 为非周期传输,在接收到同步对象后进行采样但不发送,在接收到请求该数据的远程帧后发送。传输类型253-255 为异步传输,定义为此三种类型的TPDO在接收到远程帧或规定的事件发生后进行传输。7、CANopen中的协议CAN message
13、 in CANopen数据放在CAN帧中是按最小位在前的顺序存放。NMT protocol设置节点进入操作设置节点进入停止设置节点进入预操作设置节点进入复位应用设置节点进入复位通信配置所有节点时,使用nodeID=00Node Guard Protocol主节点发送下列命令来询问节点的状态节点响应HeartBeat Protocol节点周期传送它的状态。Bootup Protocol节点进入预操作状态时,它发送:SDO protocol 所有SDO帧都具有相同的CAN帧长度:8bytes数据和rtr=0.SDO Download expedited protocol为了写0xd0d1到服务器节
14、点对象字典,客户机发送请求: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 block size (block mode only)0504 0003 Invalid s
15、equence 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 in the object dictionary0604 0041 Object cannot