canopen协议的介绍之NMT节点管理;

canopen协议的介绍之NMT节点管理;耐心查看 必有所获 尽量别跳过 否则有些前面写了的 后面可不一定解释了 一个系列的首页 https blog csdn net kissgoodbye2 article details canopen 需要掌握的知识 1 对象字典 OD 最重要 需要了解 2 NMT 节点管理 主节点来操作 3 PDO 过程数据传输 4 SDO 对象字典配置

耐心查看,必有所获!尽量别跳过,否则有些前面写了的,后面可不一定解释了。

 

一个系列的首页:https://blog.csdn.net/kissgoodbye2012/article/details/

canopen需要掌握的知识:

1.对象字典OD——最重要,需要了解。

2.NMT节点管理——主节点来操作;

3.PDO过程数据传输;

4.SDO对象字典配置;

 

参考文章:

这篇写得比较好:https://blog.csdn.net/iamplane/article/details/

 

写在前面的话(必看)

一个canopen网络,有且仅有一个NMT主机节点,可以配置包括自身在内的所有canopen网络的节点。

而后设备再canopen网络中发送Boot-up信号,自动进入预操作状态,此状态为主要的配置节点状态。

完成配置后,节点需要NMT 主机发送NMT 报文进入操作状态。操作状态是CANopen 正常工作时的状态
各个模块都应正常工作。

当NMT 主机发送停止节点报文时,设备进入停止状态,CANopen 子设备的通信只有NMT 模块正常工作。

NMT功能

  1. 初始化、启动和停止CANOPEN网络中的设备;
  2. 查询CANOPEN网络中设备的状态;

 CANOPEN节点控制

一个canopen子设备的状态及其转换关系,如图1所示,有如下几种:

canopen协议的介绍之NMT节点管理;

                                            图1   NMT状态执行图

  • 状态有三种:预操作状态(pre-oprational),运行状态(oprational)和停止状态(Stopped)
  • 可以随时复位节点和复位通信操作;
  • 可以从预操作状态到运行或者停止状态;
  • 可以从运行到预操作状态或者停止状态;
  • 可以从停止到预操作状态,但不能到运行状态

(canopen命令)——can标准帧的发送格式

(数据帧,非远程帧)0x000+CS(命令字节)+Node-ID

其中的CS命令字节:

            0x01(1)——启动节点

            0x02(2)——停止节点

            0x80(128)——进入预操作状态

            0x81(129)——复位节点

            0x82(130)——复位通信

通俗的讲:就是标准帧头为0x000的节点,发送两个字节的数据。

                                                                      表1     各种状态下可以进行的服务

canopen协议的介绍之NMT节点管理;

查询节点的状态(也称NMT错误控制)

两种方式:

第一种——主节点发送 节点保护 命令,查询节点的当前状态;

第二种——子节点每隔一段时间发送 心跳包 ,报告自身状态给主节点。

 

注1:不允许同时使用寿命保护和心跳。
注2:节点保护、寿命保护和心跳的时间不宜设置过短,以免增大网络负载!

这里的寿命保护,是针对从节点而言的。防止主节点掉线,所以主节点必须间隔一定时间发送节点保护指令。

当然,推荐且最常用的是心跳方式。

 

(1)节点保护

节点保护是NMT 主机通过远程帧,周期地查询NMT 从机的状态。节点保护遵循的是主从模型,每个远程帧都必须得到应答

———-主节点发送指令:0x700+Node-ID;(远程帧)

由于是远程帧,没有数据,所以只需要标准帧的帧头,指示想要查询的节点。

———-从节点应答指令:0x700+Node-ID   Byte1(状态字节) ;(数据帧)

状态字节是一个字节,包括一个触发位( bit7),触发位必须在每次节点保护应答中交替置“ 0”或者“ 1 ”。触发位在第一次节点保护请求时置为“ 0”,下一次应答就会置“ 1 ”。

位 0 到位 6( bits0~6)表示节点状态,可为下面的数值。

状态字节有如下几种值:

         0x00(0)——正在初始化

         0x01(1)——未连接

         0x02(2)——连接中

         0x03(3)——准备中

         0x04(4)——停止状态

         0x05(5)——开始状态

         0x7F(127)——预操作状态

注意:

  • 其中主节点发送中和从节点发送中的Node-ID都是从节点的节点号。
  • 0x01,0x02,0x03的状态只有支持扩展 boot-up 的节点才提供。
  • 0x00从不在节点保护应答中出现,因为一个节点在这个状态时并不应答节点保护报文。

(2)心跳

心跳模式采用的是生产者——消费者模型。CANopen 设备可根据生产者心跳间隔对象0x1017h (从节点)设置的周期来
发送心跳报文,单位为ms。网络总具有消费者心跳功能的节点,根据对象0x1016h(主节点) 设置的消费者时间监视该
生产者,一旦在消费者心跳时间范围内未接收到相应节点的生产者心跳,则认为该节点出现故障。

配置方法:通过SDO对象通信方式,这是一种应答模式的配置方法。具体看看SDO通信。

配置生产者心跳时间间隔1017h 后,节点心跳功能激活开始产生心跳报文。

配置消费者心跳1016h 的有效子索引后,接收到相应节点发出的一帧心跳即开始监视。

1016h 某子索引时间≥主机生产者时间×1.8,否则易误报从机认为主机掉站。对于伺服控制的建议:心跳生产者的时间不要低于20ms,而消费者心跳时间不要低于40ms,且为相应生产者心跳时间的1.8 倍以上。还是那句话,节点保护、寿命保护和心跳的时间不宜设置过短,以免增大网络负载!

心跳报文的格式:0x700+Node-ID Byte1(状态字);(数据帧)

状态字节是一个字节,包括一个触发位( bit7),触发位必须在每次节点保护应答中交替置“ 0”或者“ 1 ”。触发位在第一次节点保护请求时置为“ 0”,下一次应答就会置“ 1 ”。

位 0 到位 6( bits0~6)表示节点状态,可为下面的数值。

状态字节有如下几种值:

         0x00(0)——正在初始化

         0x01(1)——未连接

         0x02(2)——连接中

         0x03(3)——准备中

         0x04(4)——停止状态

         0x05(5)——开始状态

         0x7F(127)——预操作状态

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234021.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 归一化函数mapminmax的讨论

    归一化函数mapminmax的讨论一、基本用法[y,ps]=mapminmax(x,ymin,ymax)   %这里如果不指定ymin,ymax,则ymin默认为-1,ymax默认为1。mapminmax(data)        默认归一化范围为[-1,1],且对每一行做归一化。一定记住是对行进行归一化!!!二、归一化的讨论参考:http://www.ilovematlab

    2022年6月18日
    22
  • python中imread什么意思_imwrite函数

    python中imread什么意思_imwrite函数Python中各种imread函数的区别与联系最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该readthefuckcode和APIdocument,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释

    2022年10月14日
    0
  • 基于java的毕业设计参考文献_java毕业论文参考文献

    基于java的毕业设计参考文献_java毕业论文参考文献一年一度的毕业季,最令毕业生头疼的就是毕业设计以及撰写毕业论文,而毕业论文还需要加上多篇参考文献,有的老师对参考文献的要求是很多的,比如需要国内的和国外的,时间必须是近三年的,满足XXX要求的文献至少

    2022年8月5日
    3
  • Android 打包出现jdk版本错误的问题

    Android 打包出现jdk版本错误的问题

    2021年9月16日
    75
  • JVM内存管理及GC机制[通俗易懂]

    JVM内存管理及GC机制[通俗易懂]一、概述JavaGC(GarbageCollection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。经过这么长时间的发展,JavaGC…

    2022年5月2日
    37
  • 数据库关系代数表达式学习[通俗易懂]

    数据库关系代数表达式学习[通俗易懂]本文转自:http://www.blogjava.net/decode360/archive/2009/04/15/292362.html感谢原作者关系代数是关系数据库系统查询语言的理论基础。很有必要学习一下,有些是用代数表达式很方便的东西,用SQL写出来还是挺麻烦的,并不是想象当中那么直接。 一、关系代数的9种操作:    关系代数中包括了:

    2022年10月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号