在Somachine 控制平台设计一个复杂的机器控制系统,最优的结构就是使用CANopen总线,把诸多的控制元素诸如变频器,伺服驱动器,传感器,开关按钮等通过一条电缆连接起来,共享各个控制单元的状态信息,控制指令等,如图所示。大量使用CANopen总线不仅由于其通讯速度大大高于Modbus, 更是由于其良好的抗干扰能力和简单的物理安装结构及组态方式。这章我们就来讨论CANopen总线的特性及应用。
CANopen总线基础
CANopen是一种架构在控制局域网路(Control Area Network, CAN)上的高层通讯协定,包括通讯子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线。
CANopen 实际作了OSI模型中的网络层以上(包括网络层)的协定。CANopen 标准包括寻址方案、数个小的通讯子协定及由设备子协定所定义的应用层。 CANopen 支持网络管理、设备监控及节点间的通讯,其中包括一个简易的传输层,可处理资料的分段传送及其组合。一般而言资料链结层及实体层会用CAN来实际操作。
基本的 CANopen 设备及通讯的协定定义在 CAN in Automation (CiA) 标准 301中。针对个别设备的子协定以 CiA 301 为基础再进行扩充。如针对 I/O 模组的 CiA401 及针对运动控制的 CiA402。其通讯架构如图所示。
凭借其可靠,实时,灵活,经济的特点而被广泛应用,并且已成为国际标准。CANopen协议是在现场总线CAN-BUS之上定义的一套应用层协议,其核心是对象字典及多种通信方式。对象字典是应用单元和通讯单元之间的接口,实际上是设备的所有参数列表。应用单元和通讯单元都可访问这个参数列表。对象字典中的条目(对象或参数)通过一个16位索引(Index)和一个8位子索引(Subindex)进行识别或定位,用户可对条目进行读或写。
对象字典描述了对象设备的所有功能。例如伺服驱动器的索引6060:0定位到了设备的运行模式,后面跟的数据确定了运行模式。如图12-1-2所示。
每个设备制造商会为自己的设备做好一个ASCII码格式的对象字典,即电子数据表EDS (Electronic Data Sheet)文件。这个电子数据表可以导入到控制器,实现控制器与设备的CANopen通讯。好了,让我们再来梳理一下有关的CANopen通讯要用到的概念和名称。
设备通讯
通讯单元处理和网络上其他模组通讯所需要的通讯协定。 设备的启动及重置由状态机 (state Machine)控制。状态机需包括以下的几个状态:初始化Initialization, 预运行Pre-operational, 运行Operational 及 停止Stopped。当接收到网络管理 (NMT) 通讯对象,状态机会转换到对应的状态。 对象字典 (Object Dictionary) 是一个有 16 位元索引 (Index) 的变量阵列。每个变量可以(但非必须)有 8 位元的子索引 (Subindex)。变量可用来调整设备的组态,也可以对应设备量值的数据或设备的输出。 当状态机设定为 operational 之后,设备的应用 (application) 部分就会实现设备预期的功能。此部份可以由对象字典中的变量调整其设定,而数据由通讯层传输或接收。
对象字典
CANopen 设备都需要具备对象字典,用来设定设备组态及进行非即时的通讯。对象字典的入口定义如下:
索引 (Index):对象 16 位元的位址。 对象名称 (Object name):一个代表对象的符号类型,可以是阵列、纪录或只是一个变量。 名称 (Name):描述此入口的字串。 形态 (Type):变量的数据形态。 属性 (Attribute):提供此 入口 是否可读/可写的数据,有下列四种:可读/写、只读、只写、只读常数。 必须 (Mandatory)/可选 (Optional)字段定义属于特定设备规范下的设备,是否必须实现某些对象。 在 CANopen 标准中定义了对象字典中的基本资料型态,包括逻辑值、整数及浮点数。也定义了复合对象:如阵列、记录及字串。复合对象用一个 8 位元的数值作为其子索引(subindex)。记录或阵列中子索引 0 的位置记录此数据结构的元素个数,资料型态为 UNSIGNED8。
例如在 CiA301 标准中,设备通讯的参数放在索引范围 0x1000 - 0x1FFF (通讯行规区)。此区域的前几项如下表:
若配合适当的工具,可以用编辑电子数据表(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 帧:
在 CANopen 标准中,部份 COB-ID 被保留作网络管理及 SDO 通讯用。而在设备初始化后,有些功能码和 COB-ID 会对映到标准的功能,不过后续仍可以规划为其他用途。
通讯模型
CANopen 设备间的通讯可分为以下三种通讯模型。
在 master/slave 模型中,一个 CANopen 设备为 主站master,负责传送或接收其他设备从站(称为 slave)的数据。NMT 协定就使用了 master/slave 模型。 客服(client/server)模型定义在 SDO 协定中,SDO 客户 将对象字典的索引及子索引传送给 SDO 服务员,因此会产生一个或数个需求数据(对象字典中,索引及子索引对应的内容)的 SDO 封包。 生产者/消费者(producer/consumer)模型 用在 Heartbeat and Node Guarding 协定。由一个生产者送出数据给消费者,同一个生产者的数据可能给一个以上的消费者。又可分为二种: 推送方式push-model:生产者会自动送出数据给消费者。 拉进方式pull-model:消费者需送出请求讯息,生产者才会送出数据。
NMT协定
NMT 协定NMT(网络管理, Network management)协定会定义(设备内部)状态机的状态变更命令(如启动设备或停止设备)、侦测远端设备 bootup及故障情形。
NMT master 使用的模组控制协定可变更设备的状态。其 COB-ID 为 0,其功能码及节点 ID 均为 0,因此网络上的所有节点均会处理这个讯息。在此讯息的数据部份会有此讯息实际针对节点的ID,此 ID 也可为 0,表示所有节点都要变更为指定的状态。
使用 CIA405.NMT 功能块可以从控制器应用程序控制 CANopen 设备的 NMT 状态。例如,我们用此功能块复位CAN总线或总线上的某个节点。
功能块通过执行对 CANopen 目标设备的 NMT 服务请求,来执行请求的 NMT 状态转换。
CIA405.TRANSITION_STATE ENUM
NMT 状态机描述主要操作中的 NMT 从站的初始化和状态。
下图显示的是 NMT 状态、关联的可用通讯对象(PDO、SDO、SYNC、EMCY 和 NMT)和 5 种状态转换(A 到 E)。
CIA405.TRANSITION_STATE 枚举类型包含下表中介绍的 NMT 状态转换命令。
心跳协定(Heartbeat protocol)是用来监控网络中的节点及确认其正常工作。心跳讯息的生产者(一般是 slave 设备)周期性的送出功能码 1110、ID 为本身节点 ID 的讯息,讯息的资料部份有一个表示节点状态的位元。而心跳讯息的消费者负责接收上述资料,若在指定时间(于设备的对象字典中定义)内,消费者均未收到讯息,可采取相关行动(例如显示错误或重置该设备)。
其格式为:
COBID + DATA(status of node) CANopen 设备需要在 bootup 时自动从 Initializing 状态切换至 Pre-operational 状态,设备会在切换完成后送出一个心跳讯息,这就是心跳协定。
有一种 pull model 的 NMT 协定,称作节点监控(Node guarding)协定,也可以作从机的监控。
服务数据对象 (SDO) 协定
服务数据对象(SDO)可用来存取远端节点的对象字典,读取或设定其中的数据。提供对象字典的节点称为SDO server,存取对象字典的节点称为SDO client。SDO 通讯一定由SDO client 开始,并提供初始化相关的参数。
在CANopen的术语中,上传是指由 SDO server 中读取数据,而下载是指设定 SDO server 的数据。
过程数据对象 (PDO) 协定
过程数据对象 (PDO) 协定可用来在许多节点之间交换即时的数据。可透过一个 PDO ,传送最多 8 字节(64位元)数据给一设备,或由一设备接收最多 8 字节(64位元)的数据。一个 PDO 可以由对象字典中几个不同索引的资料组成,规划方式则是透过对象字典中对应 PDO 配置 及 PDO 参数的索引。
PDO 分为两种:传送用的 TPDO 及接收用的 RPDO。一个节点的 TPDO 是将资料由此节点传输到其他节点,而 RPDO 则是接收由其他节点传输的资料。一个节点分别有 4 个 TPDO 及 4 个 RPDO 。
PDO 可以用同步或异步的方式传送:同步的 PDO 是由 同步SYNC 讯息触发,而异步的 PDO 是由节点内部的条件或其他外部条件触发。例如若一个节点规划为允许接受其他节点产生的 TPDO 请求,则可以由其他节点送出一个没有数据但有设定 RTR 位元的 TPDO(TPDO 请求),使该节点送出需求的数据。
借由 RPDO 也可以使两种设备同时启动。
除了定义对象字典,CANopen协议还定义了网络拓扑结构,如图所示。即连接各个设备站点的电缆是带屏蔽的双绞线,传输线的终端电阻为120欧姆。在整个网络中包括主站在内的站点数,最多不能超过127个。电缆的信号为CAN_H,CAN_L和CAN_GND。在同一网络内,各个站点的通讯速率要求配置一样。通讯速率根据传输距离的大小而有不同。请参见表
在控制器上的CANopen总线口被设计为D型9针口,如图所示。在运动控制器中有2个CANopen总线口,一个是通用总线口,一个是可以做多轴同步的总线口,我们称为CANmotion总线口。
D型插头的定义如图:
CANopen接线的规定:
通常 CANopen 现场总线,在现场中典型地使用带有 D 型插头的电缆,它的优点是抗干扰性强,可靠性高。在控制柜中采用RJ45 电缆进行连接,它的的优点是布线简单又快捷。
驱动器上的CANopen总线RJ45端口定义如图:
注意:使用带有 RJ45 连接器的电缆时,最大总线长度减半。
当波特率为 1Mbit/s 时,传输线就限制为 .3m。
RJ45接头定义如下:
这些定义都是CANopen总线的标准,这使得各个设备制造商提供的设备无论从软件配置还是硬件接线都有了统一的标准,总线互联变得非常方便。
最后修改:2022/5/12 10:14:06