1. 同步协议
同步(SYNC), 该报文对象主要实现整个网络的同步传输
就像阅兵分列式上的方阵, 所有士兵迈着整齐的步伐行进
每个节点都以该同步报文作为 PDO 触发参数
因此该同步报文的 COB-ID 具有比较高的优先级以及最短的传输时间
一般选用 80h 作为同步报文的 CAN-ID
一般同步报文由 NMT 主机发出, CAN 报文的数据为 0 字节
但如果一个网络内有 2 个同步机制, 就需要设置不同的同步节拍
比如某些节点按 1 个同步帧发送 1 次 PDO, 其他的节点收到2个同步帧才发送1此PDO
所以这里PDO参数中的同步起始值就起了作用
在同步协议中, 有 2 个约束条件:
- 同步窗口时间:
索引 1007h 约束了同步帧发送后, 从节点发送 PDO 的时效
即在这个时间内发送的 PDO 才有效, 超过时间的 PDO 将被丢弃 - 通讯循环周期:
索引 1006h 规定了同步帧的循环周期
2. 时间戳协议
时间标记对象(Time Stamp), NMT 主机发送自身的时钟
为网络各个节点提供公共的时间参考, 即网络对时
这在故障诊断中非常需要
比如列车中火灾报警, 检修人员需要准确获知报警的时刻
然后关联查看其它设备在这个时刻的工作状态
时间戳协议采用广播方式, 无需节点应答, CAN-ID 为 100h, 数据长度为 6
数据为当前时刻与 1984 年 1 月 1 日 0 时的时间差
节点将此时间存储在对象字典 1012h 的索引中
由于时间换算起来非常费劲, 所以会有专门的换算函数
3. 紧急报文协议
紧急事件对象(Emergency):当设备内部发生错误, 触发该对象, 发送设备内部错误代码, 提示 NMT主站
紧急报文属于诊断性报文, 一般不会影响 CANopen 通讯
其 CAN-ID存储在 1014h 的索引中, 一般会定义为 080h + node-ID, 数据包含 8 个字节
其中包括:
EEC: 紧急时间错误代码, ER: 错误寄存器, MEF: 厂商自定义的错误代码
当然这些都需要查表才能获知, 进行诊断:
与 PDO 的生产禁止时间类似, 紧急报文也有生产禁止时间
存储在对象字典的 1015h 中, 为了限制节点不断发送紧急报文, 导致总线负载过大
参考:
相关推荐:
CAN笔记(21) 服务数据对象
CAN笔记(20) 过程数据对象
CAN笔记(19) 网络管理
CAN笔记(18) 对象字典
CAN笔记(17) 预定义报文ID
谢谢!
转载:https://blog.csdn.net/qq_32618327/article/details/100737352