王朝百科
分享
 
 
 

CANopen

王朝百科·作者佚名  2010-06-14  
宽屏版  字体: |||超大  

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

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

基本的 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 设备都需要具备对象字典,用来设定设备组态及进行非即时的通讯。对象字典的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 的仲裁机制会使 COS-ID 最小的讯息继续传送,不用等待或重传。COB-ID 的前 4 个位元是 CANopen 的功能码,因此数值小的功能码表示对应的功能重要,允许的延迟时间较短。

以下是一个标准的 CANopen 页框:

功能码

节点 ID

RTR

资料长度

资料

长度

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)协定会定义(设备内部)状态机的状态变更命令(如启动设备或停止设备)、侦测远端设备 bootup及故障情形。

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 的资料。

进程数据对象 (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 也可以使两种设备同时启动。

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 及通讯速度。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有