CANopen

CANopen是一种架构在控制器局域网路(Controller Area Network, CAN)上的高层通信协定,包括通信子协定及设备子协定常在嵌入式系统中使用,也是工业控制常用到的一种现场总线

CANopen实作了OSI模型中的网络层以上(包括网络层)的协定。CANopen标准包括寻址方案、数个小的通信子协定及由设备子协定所定义的应用层。CANopen支持网络管理、设备监控及节点间的通信,其中包括一个简易的传输层,可处理数据的分段发送及其组合。一般而言数据链结层实体层会用CAN来实作。除了CANopen外,也有其他的通信协定(如POWERLINKEtherCAT)实作CANopen的设备子协定。

基本的CANopen设备及通信子协定定义在CAN in Automation (CiA) draft standard 301.[1]。针对个别设备的子协定以CiA 301为基础再进行扩充。如针对I/O模块的CiA401[2]及针对运动控制的CiA402[3]

设备模型

以下是所有CANopen设备都要具备的功能:

  • 通信单元处理和网络上其他模块通信所需要的通信协定。
  • 设备的启动及重置由状态机(state machine)控制。状态机需包括以下的几个状态:Initialization, Pre-operational, Operational及Stopped。当接收到网络管理(NMT)通信对象,状态机会转换到对应的状态。
  • 对象字典(Object Dictionary)是一个有16比特索引(Index)的变量数组。每个变量可以(但非必须)有8比特的子索引(Subindex)。变量可用来调整设备的组态,也可以对应设备量测的数据或设备的输出。
  • 当状态机设置为operational 之后,设备的应用(application)部份就会实现设备预期的机能。此部份可以由对象字典中的变量调整其设置,而数据由通信层传收或接收。

对象字典

CANopen设备都需要具备对象字典,用来设置设备组态及进行非即时的通信。对象字典的entry定义如下:

  • 索引(Index):对象16比特的地址。
  • 对象名称(Object name):一个代表对象的symbolic type,可以是数组、纪录或只是一个变量。
  • 名称(Name):描述此entry的字符串。
  • 形态(Type):变量的数据形态。
  • 属性(Attribute):提供此entry是否可读/可写的数据,有下列四种:可读/写、唯读、唯写、唯读常数。
  • 必须(Mandatory)/可选(Optional)字段定义属于特定设备规范下的设备,是否必须实现某些对象。

在CANopen标准中定义了对象字典中的基本数据型态,包括逻辑值、整数及浮点数。也定义了复合对象:如数组、记录及字符串。复合对象用一个8比特的数值作为其子索引(subindex)。记录或数组中子索引0的位置记录此数据结构的元素个数,数据型态为UNSIGNED8。

例如在CiA301标准中,设备通信的参数放在索引范围0x1000 - 0x1FFF(通信行规区)。此区域的前几项如下:

索引 对象名称 名称 形态 属性 M/O
0x1000 VAR device type UNSIGNED32 唯读 M
0x1001 VAR error register UNSIGNED8 唯读 M
...
0x1008 VAR manufacturer device name Vis-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页框(frame):

COB-ID RTR 数据长度 数据
功能码 节点ID
长度 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:消费者需送出请求消息,生产者才会送出数据。

NMT协议

NMT网络管理, Network management)协议是用来发布(设备内部)状态机的状态变更命令(如启动设备或停止设备)、以及监测远程设备启动及故障情形。

NMT master使用的模块控制协定可变更设备的状态。其COB-ID为0,其功能码及节点ID均为0,因此网络上的所有节点均会处理这个消息。在此消息的数据部份会有此消息实际针对节点的ID,此ID也可为0,表示所有节点都要变更为指定的状态。

心跳协定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的数据。

由于对象字典中的数据长度可能超过8个字节,无法只用一个CAN页框传输,SDO也支持长消息的分割(segmentation)和合并(desegmentation)。这样的对象有二种:SDO下载/上传SDO download/upload)及SDO区块下载/上传(SDO Block download/upload)。CANopen协定较新版本支持SDO区块传输,可以允许传输大量的数据,且传输的overhead可以较低。

负责处理SDO数据传输的COB ID可在对象字典中设置。在对象字典的索引0x1200至0x127F可设置SDO server的COB ID,最多可设置到127个。而SDO client可以在对象字典的索引0x1280至0x12FF中设置。不过预定义链接pre-defined connection set)定义在开机后(Pre-operational状态)可用来设置设备组态的SDO。接收用的COB ID为0x600 +节点ID,而发送用的COB为0x580 +节点ID。

以下用SDO下载来说明SDO的协定,SDO client在要启始下载时,会送出CAN消息,其ID为接收端SDO channel的COB ID,而CAN页框的数据字段内容如下:

CAN页框的数据字段
字节1 字节2-3 字节4 字节5-8
3比特 1比特 2比特 1比特 1比特
ccs=1 保留(=0) n e s 索引 子索引 数据
  • ccs是SDO传输时client指令的识别码,可分为以下几种:
    • 0:SDO区域下载
    • 1:启始下载
    • 2:启始上传
    • 3:SDO区域上传
    • 4:中断SDO传输
  • n为此消息中实际数据的长度,只有在e和s设置时有效
  • e若设为1,表示是快速传输(expedited transfer),目前消息即包括了所有要传输的数据。若设为0,表示要传输的数据无法用一个消息发送,会分割为数个消息。
  • s若设为1,且e也设为1,表示数据长度记录在n。若e设为0,表示实际完整数据的长度会放在此消息中的数据字段中。
  • 索引是要访问数据的对象字典索引。
  • 子索引是要访问变量的子索引。
  • 数据在快速传输(e=1)时是要上传的数据,若s=1且e=0,则是实际数据的长度。

(PDO)协定

PDO)协定可用来在许多节点之间交换即时的数据。可通过一个PDO,发送最多8字节(64比特)数据给一设备,或由一设备接收最多8字节(64比特)的数据。一个PDO可以由对象字典中几个不同索引的数据组成,规划方式则是通过对象字典中对应PDO mapping及PDO参数的索引。

PDO分为两种:发送用的TPDO及接收用的RPDO。一个节点的TPDO是将数据由此节点传输到其他节点,而RPDO则是接收由其他节点传输的数据。一个节点分别有4个TPDO及4个RPDO。

PDO可以用同步或异步的方式发送:同步的PDO是由SYNC消息触发,而异步的PDO是由节点内部的条件或其他外部条件触发。例如若一个节点规划为允许接受其他节点产生的TPDO请求,则可以由其他节点送出一个没有数据但有设置RTR比特的TPDO(TPDO请求),使该节点送出需求的数据。 

借由RPDO也可以使两个或两个以上的设备同时启动。只要将其RPDO对应到相同的TPDO即可。

同步(SYNC)协定

同步协定使用生产者/消费者模型。同步生产者(Sync-Producer)会定时产生同步信号供同步消费者(Sync-Consumer)使用。当同步消费者收到信号,即可进行已规划好的同步工作。[4]

同步信号会定时产生,若有 PDO 是由同步信号引发,通过 PDO 发送时间及同步信号发送周期之间的调整,可以使传感器定期的取様,而致动器也可以根据最新的输入信号产生对应的输出。

在对象字典中,同步对象的索引为0x1005,可通过编辑此对象启动同步协定。

时间标记对象(TIME)协定

一般而言,时间标记对象的内容是从1984年1月1日午夜之后到现在之间经过的时间,单位为毫秒。为一个48比特(6字节)的数值。

不过有些应用会要求时间要非常精确,这种情形会需要精准的同步,尤其是在大型网络,通信速度受限时更是如此。此时需要将各设备的时钟同步,精准度要到毫秒的等级。这个要求可通过高分辨率的同步信号达成,在同步信号中也包括了另一种时间标记,可供各设备调整时钟用。

同步信号中的时间标记型态为unsigned32,单位为1毫秒,因此时间标记会在每72分钟归零重新计数。

初始化

以下是在master初始化2个压力传感器(ID分别为1和2)中,通信的数据。

CAN ID 数据长度 数据 说明
0x0 2 1 0 master将系统设置为operational mode
0x80 0 Master送出SYNC消息,使设备送出数据
0x181 4 CD 82 01 00 ID 1的节点(CID-0x180),读到的压力为0x0182CD (99021)
0x182 4 E5 83 01 00 ID 2的节点(CID-0x181),读到的压力为0x0183E5 (99301)

CANopen专有名词

  • PDO进程数据对象 - 对应实际物理量的输入及输出。数据的单位可能是RPM, V, Hz, mAmp...。
  • SDO服务数据对象 - 一般来说是组态设置的数据,如节点位置、节点ID、通信速度、位移、增益等……。
  • COB-ID - CAN对象编号
  • CAN ID - CAN Identifier.是在每个CAN消息前面的消息识别码,共11比特。
  • EDS - 电子数据档(Electronic data sheet)是INI格式的文件。
  • DCF - 设备组态文件(Device configuration file),是加强版的EDS,可以设置节点ID及通信速度。

参照

参考数据

  1. CiA Draft Standard 301,在CAN in Automation 页面存档备份,存于网站上
  2. CiA Draft Standard 401
  3. CiA Draft Standard 402
  4. . CAN in Automation (CiA). [2009-08-04]. (原始内容存档于2010-10-22).

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.