我是靠谱客的博主 温暖画板,最近开发中收集的这篇文章主要介绍CANopen心跳和节点保护,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学习地址:https://en.nanotec.com/products/manual/PD4E_CANopen_ZH/bus%252Fcan%252Fcan_stack.html?cHash=d3b43174da641a1d53fca9c28d935948#concept_dkx_115_gj

心跳和节点保护

通过“心跳”和“节点保护”服务(通常也称为“寿命保护”),可检测 CAN 总线上已关闭或挂起的设备。为此,NMT 主站将循环请求包含从站当前 NMT 状态的消息(节点保护)。另一种方式是每个从站自发循环地发送消息(心跳)。不允许组合使用节点保护和心跳。此外,还建议为心跳设置高于节点保护的优先级,因为节点保护会导致 CAN 总线的负载较高。

节点保护

该服务所依据的原理是 NMT 主站可向相应的从站发送包含 CAN-ID 700h + 节点 ID 的 RTR 消息。随后从站必须发送消息进行响应;此消息结构如下。其中位 7 在每次传送时都会进行交替,从而能够确定消息是否丢失。在位 6 到 0 中输入从站当前的 NMT 状态。
在这里插入图片描述

对于节点保护,存在三个时间间隔(另请参见下图):

  1. 保护时间:两条 RTR 消息之间的之间。每个 CAN 节点可能具有不同的保护时间,保护时间存储在从站的对象 100Ch:00 中(单位:毫秒)
  2. 生存时间因数:保护时间的倍数;存储在 CAN 从站的对象 100Dh:00 中,CAN 总线上每个从站可能具有不同的生存时间因数。
  3. 可能的生存时间:保护时间乘以生存时间因数所得出的时间。
    在这里插入图片描述

在节点保护期间会检查以下条件:

NMT 主站必须在“可能的生存时间”内发送 RTR 请求。
从站必须在“可能的生存时间”内发送对 RTR 请求的响应。
从站的响应必须包含其 NMT 状态。此外,还必须正确设置“切换位”。

心跳

如果激活心跳,从站将自发循环地将其 NMT 状态发送至 CAN 总线。可通过将对象 1017h:00h 中的创建者心跳时间时间设为非零值,从而激活该服务。创建者心跳时间以毫秒为单位测量。从站发送的消息格式如下:

在这里插入图片描述

从站必须在心跳使用者时间内发送心跳消息。该时间只有主站知道,且不会存储在控制器中。

从站还可以从其他创建者(主站或其他从站)监测心跳。为此,必须在对象 1016h 中输入使用者心跳时间和创建者的节点 ID。

如果两个功能均已禁用,或者再次在正确的时间内发送心跳,则将重置在此监测过程中发生的错误。

最后

以上就是温暖画板为你收集整理的CANopen心跳和节点保护的全部内容,希望文章能够帮你解决CANopen心跳和节点保护所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部