CANopen协议学习(二)

CANopen协议学习(二)
上一篇罗里吧嗦的讲了一堆CAN协议的内容现在才开始正式进入CANopen协议的学习。(1)对象字典对象字典就是一个有序的对象组描述了对应CANopen 节点的所有参数。每个对象采用一个16位的索引值来寻址这个索引值通常被称为索引其范围在0x0000到0xFFFF之间。为了避免数据大量时无索引可分配所以在某些索引下也定义了一个8位的索引值这个索引值通常被称为子索引其范围是0x00到0xFF之间。下面可能我会讲EtherCAT里面的CoE内容和CANopen的内容合在一起其实他们两个是同一种协议的两种不同实现方式对象字典差不多是公用的。对象字典的区域划分如下0x1000~0x1FFF通讯对象子协议区Communication profile area定义了所有和通信有关的对象参数所有CANopen节点都必须具备这些索引否则将无法加入CANopen网络。我们可以怎么认为就是0x1000~0x1FFF这部分的对象字典是有固定的含义的。CANopen协议在初始化化的时候通过是需要读取部分索引进行启动。大致了解一下就可以了一般访问这里面的内容都是通过SDO去访问的平时用得很少只是对CANopen的启动比较重要而已。0x2000~0x5FFF为制造商特定子协议。供应商会在这里定义自己的对象字典因此这个区域对于不同的厂商来说相同的对象字典项其定义不一定相同。比如一些搞电机开发的供应商会在这样定义一些与PID相关的增益参数配置或者一些滤波系数之类的。0x6000~0x9FFF为标准化设备子协议。里面的一些参数定义可能和你使用的协议有关例如DS401、DS402、DS406等。(2)Network management(3)CANopen通讯COB-ID为什么要了解这部分内容呢原因是CAN总线在使用开发和使用过程中出现问题了需要进行抓包进行CANopen诊断这个时候CAN协议的作用就发挥出来了。COB-ID组成 FUNCTION(4位) NODE-ID(7位)COB-ID分配的取值范围在 0x000 到 0x7FF 之间。0x000 到 0x07F 保留给CANOPEN网络管理相关的通信如心跳消息等0x100 到 0x5FF 为标准数据对象传输使用0x600 到 0x6FF 为预留给制造商自定义使用0x700 到 0x7FF 是保留用于紧急消息的传输。3.1 NMT节点上线报文因为CANopen是支持热拔插的总线上面一些CAN设备上线会立即发送节点上线报文来告诉主站设备。COB-ID 0x700节点Id。节点id是用来区分CAN设备避免设备冲突。而且DLC1代表数据段大小为一个字节数据而且这个值还必须是0。3.2 NMT节点状态报文(心跳报文)这个节点状态报文是从站上线后周期性的发送的COB-ID 0x700节点IdDLC1数据段的取值04h为停止状态05h为操作状态7Fh为预操作状态。通过这个数据段的值来反馈从站设备的当前状态。这个节点状态报文和心跳报文是同一个东西是主站设备检测从站设备是否掉线的依据。如果多个周期都检测不到从站设备的心跳报文就意味这从站设备出现了问题。3.3 NMT节点守护报文这个报文和上面的有点不一样守护报文是主站设备先指定从站设备发送类似一种轮询模式去查看从站设备的状态。3.4 NMT节点状态切换报文这个报文是主站发送给从站的报文。COB-ID 0x000,DLC2,代表数据段的长度是2个字节第一个字节的内容代表命令类型第二个字节的内容是从站设备Id如果Id值为0就是让所以的从站设备都需要接受的指令。其实就是NMT有4种类型的报文(1)第一种就是设备上线会通知主站的报文(2)第二种就是一个心跳报文告诉主站从站当前的状态也变相告诉主站我还活着(3)第三种就是主站会去查询从站状态的报文从站应答主站当前状态(4)第四种就是主站发出报文去指定从站进行状态切换的报文过程数据PDO其实PDO直接理解为过程数据通讯即可也就是每个周期都会固定交换的数据(周期性数据)。PDO数据分为TxPDO和RxPDO。PDO数据对象有三个重要参数分别为通讯参数映射参数数据存放。RPDO 通讯参数 1400h to15FFh映射参数 1600h to 17FFh数据存放为 2000h 之后厂商 自定义区域: TPDO 通讯参数 1800h to19FFh映射参数 1A00h to 1BFFh,数据存放为 2000h 之后厂商自定义区域。所有的 PDO 传送数据必须透过对象宇典映像到对应的索引区上。一般情况我们都是使用同步传输循环模式即每个周期都会进行主站和从站的PDO数据交互。这个同步是通过同步报文来实现每个从站设备都会以这个同步报文作为参考去触发各自的PDO通讯所以同步报文会较有较高的优先级即CoB-ID具有较高的优先级和较短的传输时间一般我们会选择80h作为同步报文的CAN-ID。下面开始了解PDO的报文组成Number of entries参数条目数量即本索引中有几条参数;COB-ID即这个PDO发出或者接收的对应CAN帧ID;发送类型即这个PDO发送或者接收的传输形式通常使用循环同步和异步制造商特定事件较多;Inhibit time生产禁止约束时间(1/10ms)约束PD0发送的最小间隔避免导致总线负载剧烈增加比如数字量输入过快导致状态改变发送的TPDO频繁发送总线负载加大所以需要一个约束时间来进行“滤波”这个时间单位为0.1ms;Event timer 事件定时器触发的时间(单位ms)定时发送的PDO它的定时时间如果这个时间为0则这个PDO为事件改变发送。SYNC start value 同步起始值同步传输的PDO,收到诺干个同步包后才进行发送这个同步起始值就是同步包数量。比如设置为2即收到2个同步包后才进行发送。上面的这些都是PDO的通讯参数即0x1400~0x15FF和0x1800~0x19FF对于的Receive PDO Parameters和Transmit PDO Parameters。服务数据对象SDOSDO通讯更像是一种应答机制主站设备会发出SDO请求从站会应答SDO请求其实就是一应一答的通讯方式。根据通讯请求的数据大小分为 快速SDO 和 普通SDO快速sdo其实就是sdo请求的数据比较少(不超过4个字节)所以sdo请求会一次通讯就可以完成。普通sdo其实就是sdo请求的数据比较大(超过4个字节)这个时候sdo回应的数据会分段应答。根据传输的方向分为 SDO下载传输 和 SDO上载传输SDO的报文格式如下根据客户端和服务端的区别其COB-ID有区别客户端是0x600服务端是0x580。快速SDO报文的数据长度是固定8个字节没有使用到的部分使用0来补充。