CANopen 是一个开放式工业标准通讯协议和设备协议规范 (EN 50325-4),它基于 Controller Area Network (CAN) 协议。“第 7 层”协议专为嵌入式网络应用而开发,为基于 CAN 的系统定义通讯和设备功能。
CANopen 支持循环和事件驱动型通讯,让您能够最大程度降低总线负载,同时仍保持较短的响应时间。
PDO 是可以为通讯接口提供过程数据并使这些数据进行实时交换的对象。CANopen 设备上的 PDO 集合描述此设备与其在网络上的通讯合作伙伴之间的隐式交换。设备处于“OPERATIONAL”模式时,有权进行 PDO 的交换。
PDO 分为两种不同的类型:
o传输 PDO (TPDO):设备传输的 PDO
o接收 PDO (RPDO):设备接收的 PDO
TM3 CANopen 总线耦合器 支持三种 PDO 传输模式:
传输代码类型 |
传输模式 |
描述 |
---|---|---|
0 |
非循环 - 同步 |
事件发生后向 PDO 发送第一个 SYNC 消息 |
1-240 |
循环 - 同步 |
向 PDO 发送全部 x 个 SYNC 消息,其中 x 可被配置为 1 至 240 |
255(缺省) |
异步 |
事件发生时,发送 PDO |
另有两个选项与事件触发的 PDO 相关:
oInhibit Time:Inhibit Time 功能用于定义传输新 PDO 前的最小时间延迟。在连续快速发生大量事件的情况下,这能够避免总线过载。Inhibit Time 以 100 微秒的倍数表示。
此功能可用于类型 255(异步)传输。
下表显示了值的示例:
值(十进制) |
定时(毫秒) |
---|---|
0 |
0 |
10 |
1 |
100 |
10 |
1000 |
100 |
10000 |
1000 |
65535 |
6553.5 |
o事件时间:事件时间用于定义到期时间延迟,在达到这个延迟后,即使状态没有变化,也会强制传输 PDO。事件时间以毫秒表示。
此功能可用于类型 255(异步)。
下表显示了值的示例:
值(十进制) |
定时(毫秒) |
---|---|
0 |
0(禁用定时器) |
10 |
10 |
100 |
100 |
1000 |
1000 |
10000 |
10000 |
65535 |
65535 |
SDO 允许使用显式请求访问设备数据。当设备处于“OPERATIONAL”或“PRE-OPERATIONAL”状态时,SDO 服务可用。
SDO 分为两种不同的类型:
o读取 SDO(下载 SDO)
o写入 SDO(上传 SDO)
SDO 协议基于“客户端/服务器”模型。对于下载 SDO,客户端(通常是控制器)发送指示要读取的对象的请求。服务器(在这里是总线耦合器)返回对象中包含的数据。对于上传 SDO,客户端(通常是控制器)发送指示要写入的对象及其期望值的请求。上传了对象之后,服务器(在这里是总线耦合器)返回确认消息。
如果 SDO 无法被服务器(总线耦合器)处理,服务器会返回错误代码(中止代码)。这同时适用于下载 SDO 和上传 SDO。如果服务器未在预先配置的时间期限(SDO 超时)内做出响应,客户端将下发 SDO 超时中止代码。
错误控制协议用于检测网络上的通讯错误。这包括两种协议:节点保护和 heartbeat。这两种监控机制在 CANopen 系统中尤其重要。连接到总线的设备不会定期指示它们的运行模式,尤其是当通过事件来控制时。
注意: CANopen 设备不支持同时使用这两种监控方法(防护和心跳)来进行监控。如果两种配置都被设备接收,将仅使用心跳监控方法。
在这个协议中,NMT 主站(通常是控制器)以定期的时间间隔轮询每个 NMT 从站(比如,总线耦合器),这个时间间隔被称为保护时间。从站以其 NMT 状态做出响应。如果在规定时长(被称为寿命)后从站未接收到轮询,此从站切换至对象 1029H 中配置的状态,并生成 life guarding 事件。如果是总线耦合器,则会切换至对象 1029H 中配置的状态(如果对象 1029H 保持缺省设置),且会启用故障预置管理并生成保护事件。寿命的定义如下:寿命 = 保护时间 x 使用寿命因数。对象 100CH 包含以毫秒表示的保护时间参数。对象 100DH 包含使用寿命因数参数。不同从站的保护时间和寿命配置可不相同。
当两个参数中的任一者(使用寿命因数或保护时间)被设置为 0(缺省配置)时,从站不执行监控。要激活随时监控,您必须至少在对象 100DH 中输入值(最小为 2),并在对象 100CH 中指定时间(以毫秒计)。
保护时间参数的典型值介于 200 毫秒与 2 秒之间。
为了保持更可靠更安全的操作,输入的使用寿命因数(对象 100Dh)必须不小于)必须不小于 2。如果使用值 1,并且如果因处理高优先级消息或因节点保护主站上的内部处理导致出现延迟,从站可能意外切换至对象 1029H 中配置的状态。
|
意外的机器操作 |
启用了节点保护时,将 Lifetime Factor(对象 100Dh)设置为不小于)设置为不小于 2 的值, |
不遵循上述说明可能导致人员伤亡或设备损坏。 |
监视可以按以下方式执行:
相位 |
描述 |
---|---|
1 |
主站设置要监控的从站的 Guarding-CobID 上的 Remote-Frames(或 Remote-Transmit-Request 请求消息)。 |
2 |
相关从站通过发送 Guarding 消息来响应。此消息包含从站的 Status-Code以及在发送每个消息后改变的 Toggle-Bit。 |
3 |
NMT(网络管理电报)主站将状态与 Toggle-Bit 信息进行比较:如果它们不是预期的状态,或者如果未接收到响应,则 NMT 主站认为从站发生了错误。 |
注意: 即使禁用了随时监控功能(保护时间和使用寿命因数寄存器设置为 0),从站也会对主站的远程请求做出响应。对于 Guarding 消息,在第一个 Guarding 消息中发送的 Toggle-Bit 的初始值为 0。然后,切换位在每条后续 Guarding 消息中更改,使得其可以表明是否丢失了消息。
设备的网络状态由其余七个位来指示:
网络状态 |
响应(十六进制) |
---|---|
‘STOPPED’ |
04H 或 84H |
‘PRE-OPERATIONAL’ |
7FH 或 FFH |
‘OPERATIONAL’ |
05H 或 85H |
在这个协议中,生产者根据对象 1017H 中配置的 Producer heartbeat time 参数(毫秒)定期传输心跳消息。负责监控此消息的设备拥有在对象 1016H 中配置的 Consumer heartbeat time 参数(毫秒)。如果在消费者设备的配置时间内未接收到生产者心跳消息,设备会生成心跳事件。如果是总线耦合器,则会切换至对象 1029H 中配置的 CANopen 状态,且会启用故障预置管理并生成心跳事件。
心跳消息以字节来指示设备状态,该字节由以下元素组成:
o最高有效位,其被保留且值始终为 0
o7 个最低有效位,其提供生成心跳消息的设备的状态
可能的值如下:
心跳生产者的状态 |
值(十进制) |
---|---|
BOOT-UP |
0 |
STOPPED |
4 |
OPERATIONAL |
5 |
‘PRE-OPERATIONAL’ |
127 |