您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > CANopen合约协议讲解
.\根据DS301的内容进行介绍1、CAN总线CAN标准报文.\2、CANopen应用层协议CANopen协议不针对某种特别的应用对象,具有较高的配置灵活性,高数据传输能力,较低的实现复杂度。同时,CANopen完全基于CAN标准报文格式,而无需扩展报文的支持,最多支持127个节点,并且协议开源。一个标准的CANopen节点(下图),在数据链路层之上,添加了应用层。该应用层一般由软件实现,和控制算法共同运行在实时处理单元内。一个标准的CANopen节点CANopen应用层协议细化了CAN总线协议中关于标识符的定义。定义标准报文的11比特标识符中高4比特为功能码,后7比特为节点号,重命名为通讯对象标识符(COB-ID)。功能码将所有的报文分为7个优先级,按照优先级从高至低依次为:网络命令报文(NMT)同步报文(SYNC)紧急报文(EMERGENCY)时间戳(TIME)过程数据对象(PDO)服务数据对象(SDO)节点状态报文(NMTErrControl)7位的节点号则表明CANopen网络最多可支持127个节点共存(0号节点为主站)。下表给出了各报文的COB-ID范围。.\NMT命令为最高优先级报文,由CANopen主站发出,用以更改从节点的运行状态。SYNC报文定期由CANopen主站发出,所有的同步PDO根据SYNC报文发送。EMERGENCY报文由出现紧急状态的从节点发出,任何具备紧急事件监控与处理能力的节点会接收并处理紧急报文。TIME报文由CANopen主站发出,用于同步所有从站的内部时钟。PDO分为4对发送和接收PDO,每一个节点默认拥有4对发送PDO和接收PDO,用于过程数据的传递。SDO分为发送SDO和接收SDO,用于读写对象字典。MTErrorControl报文由从节点发出,用以监测从节点的运行状态。状态机CANopen的每一个节点都维护了一个状态机。该状态机的状态决定了该节点当前支持的通讯方式以及节点行为。初始化时,节点将自动设置自身参数和CANopen对象字典,发出节点启动报文,并不接收任何网络报文。初始化完成后,自动进入预运行状态。在该状态,节点等待主站的网络命令,接收主站的配置请求,因此可以接收和发送除了PDO以外的所有报文。运行状态为节点的正常工作状态,接收并发送所有通讯报文。停止状态为一种临时状态,只能接收主站的网络命令,以恢复运行或者重新启动。.\CANopen节点状态转换图CANopen节点状态转换条件.\3、DeviceModelCommunication提供通信对象和传输经过底层的数据的适当功能;ObjectDictionary对此设备上的应用程序对象,通信对象和状态机的行为有影响的所有数据项的集合。Application由在处理环境方面的设备功能组成。设备应用在数据条目中的完整描述在对象字典中叫设备子文件(deviceprofile)4、OD每个节点维护一个对象字典(ObjectDictionary,OD)。该对象字典保存了节点信息、通讯参数和所有的过程数据,是CANopen节点的核心数据结构。上层应用程序也主要通过读写对象字典和CANopen应用层进行交互。CANopen对象字典为两级数组结构,通过索引(16bits)和子索引(8bits)来编址。设备子文件中最重要的就是对象字典的描述,对象字典在slave节点中一般是在设备初始化写好的不会修改,而在master节点中可以在运行过程中动态修改,不修改的OD一般存在ROM中,而修改的存在RAM中。.\由于它是由16bits的位索引,所以最多有65536个entries.根据节点所支持的通讯方式,每一个节点都必须实现1000h~1FFFh当中的一个必要子集,同时实现6000h以上部分的数据区。数据区大小由节点的功能自行决定。1000h以下部分所有的节点都不需实现。对象字典作为在CAN总线上连接application和通信的媒介,其允许来自application数据在CAN网络上进行交换。CANopen定义了可以进入对象字典的服务和通信对象。每一个入口通过索引和子索引来编址。在一个主索引里中的子索引入口的类型和属性可能会变化。5、PDO数据处理对象(PDO)特别适合快速的数据处理传输。通信模块针对这些数据.\处理对象定义了一个PDOproducer和一个或多个PDOconsumers。PDO的传输是由事件触发的,这样的事件可以是代表一个PDO变量的变化;可以是时间的过期或者是接收到一个特定的消息。过程数据直接在一个CAN消息中传输而不需要协议头文件。一个PDO的长度是在0到8个字节之间。PDOs包含在其映射参数和通信参数中。TPDOs和RPDOs的最大的数可以被定义为512。一个简单的CANopen设备一般支持4个PDOs。实际当中,对一个具体的CANopen设备而言,其PDOs的个数由应用层或设备profile来决定的。3.1PDO的结构—映射参数在对象词典中一个PDO由临近的条目构成。所谓的映射参数定义了这些条目的连接。一个映射参数通过索引、分索引和位数定义数据源。例如:一个CAN消息最多有8个字节。这意味着当使用一个PDO时,在一个PDO中发送8个字典的对象条目。.\3.2PDO的结构—通信参数为了传输一个PDO,通信参数定义了传输的性质和CAN标识符(CANidentifier)。PDO通信参数是在对象词典的条目(RPDOs:index0x1400–0x15FF,TPDOs:0x1800-0x19FF)如果允许,映射参数在数据服务对象帮助下可以通过CAN修改。.\3.2COB-ID(CAN标识符,分索引1)COB-ID作为身份证明,PDO的优先权在总线入口(access)之前。对于每一个CAN消息来说只允许有一个发送者(生产者)。然而,对这个已存在的消息来说其允许多个接收者(消费者)。位30=0,著对这个PDO来说一个远程发送请求(RTR)是被允许。3.3PDO连接的例子设备A的输入2和3被转移到设备B的输出1和3。两个设备都支持完全映射。.\传输和接收都是PDOs使用的是相同的标识符0x01C0。因此设备B自动的接收由设备A发送的PDO。设备B作为接收者根据映射原理分析数据:它传递第一个字节到输出1,传递第二个字节到输出3。在另一方面,发送设备A以同样的字节存储它的输入2和3。6、SDO数据字典作为应用层和通信层的主要数据交换媒介。一个CANopen设备的所有数据的入口可以通过对象字典来管理。每一个对象字典的入口可以用索引和子索引来表示其地址。CANopen定义了所谓的SDO就是用于进入到这些入口。.\通信模块基于客户-服务器框架上的数据交换。读或写入口总是由客户来初始化并且是由服务器服务。每一个CANopen设备必须有一个数据服务对象服务器来进入到它的对象字典。SDO发送需要两类不同的COBIDs(CANidentifier)。第一个COBID用于从客户到服务器发送一个请求。服务器通过第二个COBID发送反馈信号到客户。不同的COBID必须用于各自的方向以防止在CAN总线上的冲突。通信profile定义了COBIDs可以用defaultSDPserver。每一个CANopen设备可以处理127个SDOservers.CANopen标准CiADS-301定义了不同的协议用于发送SDOs。读OD入口称作为上传,写入口称为下载。一个正在进行的发送可以在终止转移服务帮助下由客户或服务器来中断。TPDO传输的是采样的数据,当发生触发TPDO传输的事件时,各个TPDO根据自己的传输类型决定是否进行采样并传输。TPDO的传输分为同步和异步两大类,传输类型为同步的,需要在接收到同步消息(SYNC)时采样数据。同步又分为周期和非周期两种。传输类型0为非周期传输,表示只有接收到同步消息并且规定的事件发生才进行采样数据发送,具体是在收到同步对象后,判断规定的事件是否发生,如果发生则进行采样并触发TPDO的发送。传输类型1~240为周期传输,传输类型的值表示在接收到对应个数的同步消息后采样并触发TPDO的发送,例如某个TPDO的传输类型为10,就表示此TPDO每次接收到10个同步消息后采样并发送数据。传输类型252为非周期传输,在接收到同步对象后进行采样但不发送,在接收到请求该数据的远程帧后发送。传输类型253-255为异步传输,定义为此三种类型的TPDO在接收到远程帧或规定的事件发生后进行传输。7、CANopen中的协议CANmessageinCANopen.\数据放在CAN帧中是按最小位在前的顺序存放。NMTprotocol设置节点进入操作设置节点进入停止设置节点进入预操作设置节点进入复位应用设置节点进入复位通信配置所有节点时,使用nodeID=00.\NodeGuardProtocol主节点发送下列命令来询问节点的状态节点响应HeartBeatProtocol节点周期传送它的状态。BootupProtocol节点进入预操作状态时,它发送:SDOprotocol所有SDO帧都具有相同的CAN帧长度:8bytes数据和rtr=0.SDODownloadexpeditedprotocol为了写0xd0d1…到服务器节点对象字典,客户机发送请求:.\SDOUploadexpeditedprotocol为了读0xd0d1…到服务器节点对象字典,客户机发送请求:.\SDOabortprotocolAbortcode(hexa)05030000Togglebitnotalternated05040000SDOprotocoltimedout05040001Client/servercommandspecifiernotvalidorunknown05040002Invalidblocksize(blockmodeonly)05040003Invalidsequencenumber(blockmodeonly)05040004CRCerror(blockmodeonly)05040005Outofmemory06010000Unsupportedaccesstoanobject06010001Attempttoreadawriteonlyobject06010002Attempttowriteareadonlyobject06020000Objectdoesnotexistintheobjectdictionary06040041ObjectcannotbemappedtothePDO.\06040042ThenumberandlengthoftheobjectstobemappedwhouldexeedPDOlength06040043Generalparameterincompatibilityreason06040047Generalinternalincompatibilityinthedevice06060000Accessfailedduetoahardwareerror06070010Datatypedoesnotmatch,lengthofserviceparameterdoesnotmatch06070012Datatypedoesnotmatch,lengthofserviceparametertoohight06070013Datatypedoesnotmatch,lengthofserviceparametertoolow06090011Sub-indexdoesnotexist.06090030Valuerangeofparameterexceeded(onlyforwriteaccess)06090031Valueofparameterwrittentoohight06090032Valueofparameterwrittentoolow06090036Maximumvalueislessthanminimumvalue08000000Generalerror08000020Datacannotbetransferredo
本文标题:CANopen合约协议讲解
链接地址:https://www.777doc.com/doc-6305829 .html