CANopen


CANopen

文章插图
CANopen【CANopen】CANopen是一种架构在控制区域网路路(Controller Area Network, CAN)上的高层通信协协定,包括通信子协定及设备子协定,常在嵌入式系统中使用,也是工业控制常用到的一种现场汇流排 。
基本介绍中文名:CANopen
外文名:CANopen
架构在:控制区域网路路
属于:高层通信协定
用于:工业控制常用到的一种现场汇流排
总述CANopen是一种架构在控制区域网路路(Controller Area Network, CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场汇流排 。CANopen 实现了OSI模型中的网路层以上(包括网路层)的协定 。CANopen 标準包括定址方案、数个小的通讯子协定及由设备子协定所定义的套用层 。CANopen 支援网路管理、设备监控及节点间的通讯,其中包括一个简易的传输层,可处理资料的分段传送及其组合 。一般而言数据链结层及物理层会用CAN来实作 。除了 CANopen 外,也有其他的通讯协定(如EtherCAT)实作 CANopen 的设备子协定 。CANopen由非营利组织CiA(CAN in Automaion)进行标準的起草及审核工作,基本的 CANopen 设备及通讯子协定定义在 CAN in Automation (CiA) draft standard 301中 。针对个别设备的子协定以 CiA 301 为基础再进行扩充 。如针对 I/O 模组的 CiA401 及针对运动控制的 CiA402 。设备模型以下是所有 CANopen 设备都要具备的功能:通讯单元 处理和网路上其他模组通讯所需要的通讯协定 。设备的启动及重置由状态机(state machine)控制 。状态机需包括以下的几个状态:Initialization, Pre-operational, Operational 及 Stopped 。当接收到网路管理 (NMT) 通讯对象,状态机会转换到对应的状态 。对象字典 (Object Dictionary) 是一个有 16 位元索引 (Index) 的变数阵列 。每个变数可以(但非必须)有 8 位元的子索引 (Subindex) 。变数可用来调整设备的组态,也可以对应设备量测的资料或设备的输出 。当状态机设定为 operational 之后,设备的套用 (application) 部份就会实现设备预期的机能 。此部份可以由对象字典中的变数调整其设定,而资料由通讯层传送或接收 。CANopen优势概述1.物理层非常稳定;2. 数据链路层可靠,因为相比其他所有汇流排,只有CAN可以做到达到汉明间距(Hamming Distanz)为6,能够检测报文里多达5个随机引入的位错误及15位突发性错误 。3. 灵活,兼容性高;4. 可互操作性高;5. 价格低 (对于设备生产商来说);6. CAN产品尺寸小,节省空间;7.支持冗余备用对象字典CANopen 设备都需要具备对象字典,用来设定设备组态及进行非即时的通讯 。对象字典的entry 定义如下:索引 (Index):对象 16 位元的位址 。对象名称 (Object name):一个代表对象的 symbolic type,可以是阵列、纪录或只是一个变数 。名称 (Name):描述此 entry 的字串 。形态 (Type):变数的资料形态 。属性 (Attribute):提供此 entry 是否可读/可写的资料,有下列四种:可读/写、唯读、唯写、唯读常数 。必须 (Mandatory)/可选 (Optional)栏位定义属于特定设备规範下的设备,是否必须实现某些对象 。在 CANopen 标準中定义了对象字典中的基本资料型态,包括逻辑值、整数及浮点数 。也定义了複合对象:如阵列、记录及字串 。複合对象用一个 8 位元的数值作为其子索引(subindex) 。记录或阵列中子索引 0 的位置记录此数据结构的元素个数,资料型态为 UNSIGNED8 。例如在 CiA301 标準中,设备通讯的参数放在索引範围 0x1000 - 0x1FFF (通讯行规区) 。此区域的前几项如下:索引对象名称名称形态属性M/O0x1000VARdevice typeUNSIGNED32唯读M0x1001VARerror registerUNSIGNED8唯读M...0x1008VARmanufacturer device nameVis-String常数O...若配合适当的工具,可以用编辑电子资料表(electronic data sheet, EDS)档案的方式规划一个设备,并且将变数的数值上传到设备中 。EDS 档案的格式通常会是INI档 。通讯通讯对象CANopen 的物理层 CANbus 每次传送的数据量不大,其中包括 11 位元的 ID、远端传输请求(RTR)位元及大小不超过8位元组的资料 。CANopen 将 CANbus 11 位元的 ID 分为 4 位元的功能码及 7 位元的 CANopen 节点 ID 。7 位元的 ID 共有 128 种不同的组合,其中 ID 0 不使用,因此一个 CANopen 网路上最多允许 127 台设备 。CANbus 在 CAN 2.0 B 规格中允许 29 位元的 ID,因此若配合 CAN 2.0 B 使用,CANopen 网路上可以超过127 台设备,不过在实际运用中,大多数的 CANopen 网路上设备数量均低于此数值 。CANopen 将 CANbus 的 11 位元 ID 称为通讯对象 ID (COB-ID) 。当传输数据发生冲突时,CANbus 的仲裁机制会使 COB-ID 最小的讯息继续传送,不用等待或重传 。COB-ID 的前 4 个位元是 CANopen 的功能码,因此数值小的功能码錶示对应的功能重要,允许的延迟时间较短 。以下是一个标準的 CANopen 页框:功能码节点 IDRTR资料长度资料长度4 位元7 位元1 位元4 位元0-8 位元组在 CANopen 标準中,部份 COB-ID 被保留作网路管理及 SDO 通讯用 。而在设备初始化后,有些功能码和 COB-ID 会对映到标準的功能,不过后续仍可以规划为其他用途 。通讯模型CANopen 设备间的通讯可分为以下三种通讯模型 。在 master/slave 模型中,一个 CANopen 设备为 master,负责传送或接收其他设备(称为 slave)的数据 。NMT 协定就使用了 master/slave 模型 。客户机/伺服器(client/server)模型定义在 SDO 协定中,SDO client 将对象字典的索引及子索引传送给 SDO server,因此会产生一个或数个需求数据(对象字典中,索引及子索引对应的内容)的 SDO 封包 。生产者/消费者(producer/consumer)模型用在 Heartbeat and Node Guarding 协定 。由一个生产者送出数据给讯息者,同一个生产者的数据可能给一个以上的讯息者 。又可分为二种: push-model:生产者会自动送出数据给消费者 。pull-model:消费者需送出请求讯息,生产者才会送出数据 。CANopen参考模型: