▼点击下方名片,关注公众号▼
近期小编开发了【跟我学CANopen】系列课程,会陆陆续续连载更新完毕,相关目录如下(由于内容较多导致文字太小,下图请放大后查看),欢迎关注【玩转单片机与嵌入式】公众号持续跟进学习。
欢迎关注【玩转单片机与嵌入式】公众号,回复【CANopen】关键字获取CANopen相关的全部内容。
对象字典索引区域定义中,0x1000h~0x9FFFh是通信对象子协议区和制造商特定子协议区。
01通讯对象子协议区
通讯对象子协议区(Communication profile area)定义了所有和通信有关的对象参数。如下图所示。
标绿色底纹的索引范围1000h ~1029h为通用通讯对象,所有CANopen节点都必须具备这些索引,否则将无法加入CANopen网络。其他索引根据实际情况进行分配与定义。
02制造商状态寄存器(索引1002h)
这个32位寄存器包含一个指针(16位索引和8位子索引)以及对象字典条目的长度(8位)。该寄存器中的内容由设备制造商来设定。
03同步参数(索引 1005h、1006h、1007h和1019h)
同步报文COB标识符参数(索引1005h)是一个32位对象。它不仅包含使用的CAN 标识符,还包含3个控制位:第31位为预留位; 第30位确定设备是发送同步报文(生产者为1)还是接收同步报文(消费者为0);第29位用来区分11位CAN标识符(0)和29位CAN标识符(1)。如果参数中没有定义这些位,而且用户又试图用SDO写操作来设定这些位,那么系统就会发送SDO中止消息来应答。
通信循环周期(索引1006h)是针对同步报文发送方而言的,该参数设置同步周期(单位为us)。同步报文的接收方同样也可以设置一个通信循环周期,这样如果在规定的时间内接收方没有收到同步报文,就会产生一个事件来通知应用程序,从而采取相应的措施。
同步窗口长度(索引1007h)以us为单位。在同步窗口时间范围内,PDO传输必须在同步报文发送之后才能进行。否则,这一情况将通知给应用程序。
同步计数器溢出参数(索引1019h)中包含一个8位值(范围为0〜240,其他值均保留),该值可用来复位同步报文中的计数器。如果该值为0,则发送不含计数器字节的同步报文。
注意:该值必须是使用的同步PDO的倍数(1—240)。
04设备监控(索引 100Ch、100Dh、1016h和1017h)
有两个参数可用于配置心跳功能。一个是生产者心跳报文时间间隔(索引1017h) ,它表示的是发送心跳报文的周期(单位为ms) 。网络中的所有设备会对心跳报文进行分析,从而确定设备故障。另一个参数是消费者心跳时间间隔(索引1016h) ,它最多可包含127个条目,条目记录被监控设备的节点ID以及时间(单位为ms)。
消费者心跳时间间隔必须大于消费者心跳周期,否则在发送下一个心跳报文之前,就先会发出设备故障消息。一旦用户设置了索引1017h的值(该值不为0) ,被监控设备进入预操作状态后就会开始发送心跳报文。第一次收到心跳报文时开始监控设备。
如果其中某个心跳时间间隔为0,那么相应的监控就会停止。由于这里是一种生产者/消费者关系,因此,当心跳时间间隔改变时,所有消费者(监控某一设备的所有设备)同样也必须收到心跳时间间隔参数发生变化通知,并进行相应的调整。
在此,我们不推荐NMT主机使用节点保护来监控设备(况且该保护方式还是基于远程帧),而是引入2个新的参数:“保护时间”(索引100Ch) 和“寿命因子”(100Dh) .对象100Ch表示NMT主机通过远程帧查询NMT状态所用的时间间隔(单位为ms)。如果不支持心跳机制,就必须使用该对象。
如果对象100Ch的值为0,则保护功能无效。
本文小部分内容引用自网络,若有侵权请联系删除。
E N D