canopen学习总结(一)——NMT网络管理

canopen学习总结(一)——NMT网络管理[1]NMT网络管理[1-1]概念:NMT到底是啥?答:简单理解就是由一台主机来管理从机,主机可以控制从机的状态

[1] NMT网络管理

[1-1]概念:

NMT到底是啥?
答:简单理解就是由一台主机来管理从机,主机可以控制从机的状态。
那么机器到底有哪些状态呢?
答:看下面这图,总共就这些状态
在这里插入图片描述

[1-2]命令:

主机如何去控制状态切换呢?
答:
下图是NMT命令的格式:
在这里插入图片描述

[1-3]例程:

在canfestival代码中例如:

//设置了nodeID 为0x00
setNodeId(&master_objdict_Data, 0x00); 
//初始化
setState(&master_objdict_Data, Initialisation);
//网络管理切换到操作状态,此时这个状态我直接设置成了操作状态,代表主机开始运行了,比如配置了心跳检测,主机就会不停检测从机是否发来心跳包
setState(&master_objdict_Data, Operational);//Operational 

在举一个cia402控制elmo私服驱动器的nmt例程:

Elmo_NMTWrite(elmo, 0x80);			//Pre-Operation 
...
...
Elmo_NMTWrite(elmo, 0x1);			//启动 

Elmo_NMTWrite函数

/******************************************************************************* 写NMT *******************************************************************************/
void Elmo_NMTWrite(Elmo* elmo, long cmd)
{ 
   
  elmo->elmoCAN.IDE = CAN_ID_STD;                   // 发送标准帧
  elmo->elmoCAN.StdId  = 0;         				// NMT COB-ID为0
  elmo->elmoCAN.RTR=CAN_RTR_DATA;					//数据帧
  elmo->elmoCAN.DLC = 2;                            // CAN报文数据长度
  elmo->elmoCAN.Data[0]= cmd;                    	// CAN报文前缀
  elmo->elmoCAN.Data[1]= elmo->ulNodeID;		 
  CAN_Transmit(CAN1, &(elmo->elmoCAN));     // 调用发送报文函数 
}

[1-4]实验:

nmt的实验,最多就是心跳包的实验,下面以canfestival为例。
实验目的:从机发送心跳报文给主机,主机识别,如果主机识别不到,就调用回调函数进行报警。
原理:
1.CANopen从站 按其对象字典中 1017h 中填写的心跳生产时间(ms)进行心跳报文的发送。
2.CANopen主站 则会按其 1016h 中填写的心跳消费时间进行检查,假设超过诺干次心跳消费时间没有收到从站的心跳报文,则认为从站已经离线或者损坏。

问题一:canfestival如何分辨主从机?
在这里插入图片描述
问题二:对象字典中主从机的区别?
答:index 0x1017 : Producer Heartbeat Time. 0x1017有值的是从机,发送心跳包

在这里插入图片描述
在这里插入图片描述

[1-4-1]从机心跳

对于从机来说,只需要配置好1017h,就会自动发送心跳包出来。
那么从机是如何自动发送的呢?
答:
在这里插入图片描述

[1-4-2]主机心跳

对于主机来说,主机根据0x1016索引内设置的值对从机进行心跳检测
他的类型是32位的,前16位代表从机ID号
比如:
在这里插入图片描述
2s检测一次,检测不到就会触发回调函数void _heartbeatError(CO_Data* d, UNS8 heartbeatID){heartbeat_error(d,heartbeatID);}
主机修改细节:
(1)修改

在这里插入图片描述
(2)添加回调
在这里插入图片描述
(3)绑定心跳报警回调函数
在这里插入图片描述
(4)结果
在这里插入图片描述
在这里插入图片描述
例程链接

今天的文章canopen学习总结(一)——NMT网络管理分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86057.html

(0)
编程小号编程小号

相关推荐

发表回复

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