4.4 网络管理系统
网络管理系统(NMT)负责启动网络和监控设备。在CANopen网络中只允许有一个活动的NMT主机,通常为中央控制器。
4.4.1 NMT服务与协议
所有CANopen 设备都具有NMT从机功能,通常NMT从机都由NMT主机来启动、监控和重启。每一个NMT从机还必须配有一个单独的设备标识符,即节点ID。
为方便管理设备,所有的设备都内置一个内部状态机。状态之间的转变由内部事件或者NMT主机外部触发。
CANopen设备启动并完成内部初始化之后,就会自动进入预操作状态,在预操作状态中,用户可以通过SDO服务器读取对象字典中的所有参数,并借此配置设备的参数。
在预操作状态下还可以启动同步服务功能,同步报文生产者在发送启动报文消息之后,马上开始循环发送同步报文,从而使其他设备同步。在该状态同样可以启动心跳机制来监控设备。
从预操作状态到运行状态的过程改变由NMT主机发起,NMT主机必须把Start_Remote_Node 发送到所有的设备(节点1~127),这意味着仅用一条由NMT主机发送的CAN消息,就可以使整个网络进入到工作状态。
在NMT初始化中有两个复位,一个是复位应用,一个是复位通信。这样NMT主机要么可以复位整个应用程序,要么也可以只复位CANopen参数。
控制设备状态的NMT指令(模块控制服务),通过具有最高优先级的CAN标识符来发送,该类型的指令包含2个数据字节。第一个字节确定要发出的指令,也叫CS(Command Specifier 指令说明符),第二个字节是指定CANopen 设备节点ID,如果为0,则以广播的方式将指令发送给所有的设备。
4.4.2 设备监控
CANopen 规范中,监控设备的服务和协议用于检测网络中的设备是否在线或设备所处的状态。其中 NMT指令在应用层中进行确认,CANopen网络管理系统以下几种用于设备监控的功能:
生命迹象报文(心跳报文):它是一种周期性地发送一个或多个设备的消息,设备之间可以相互监视。
NMT从机监控(节点保护):NMT从机通过远程帧周期性地监控从机状态。
NMT主机监控(寿命保护):通过收到用于监视从机的远程帧来间接监控NMT主机状态。
注意:本书作者Holger建议使用心跳报文,因为这种方法可以实现更加灵活的监控机构,而不需要远程帧。
若采用心跳机制,CANopen设备将根据生产者心跳时间间隔参数(索引1017h)设置的周期发送心跳报文。所谓“心跳”,指的是生产者/消费者之间的一种通信。采用心跳机制的好处在于,如果设备的通信对象发生故障,而且这个设备是必不可少的话,设备就会立即检测到对象的故障。
采用节点/ 寿命保护,用户必须在NMT主机中设置一个包含CANopen设备监视时间的表格。在监控过程中,主机将根据表格中设备的时间,通过远程帧周期性地查询所有的设备,设备则会有包含当前状态值和历史值的数据帧来应答。此外还要发送一个“翻转位” 用于区分当前状态和历史状态值。因此,微控制器必须在两次查询时间改变翻转位。
对象字典中索引(100Dh)包含“寿命因子”,该系数与保护时间相乘得到的时间,就是主机查询设备的最迟时间。
4.5 CAN标识符的分配
所有的CANopen 设备必须定义好CAN标识符,然后再根据优先级的高低将标识符分配给所有设备,缩短CANopen 网络重启和配置时间。
4.5.1 预定义主/从连接集
预定义主/从连接集的11位CAN标识符包含一个4位功能代码和一个7位节点ID。功能代码用来设定服务类型,节点ID将消息明确地与设备对应起来。例如:
通信对象 |
功能代码 |
CAN-ID |
相应的对象字典 |
广播消息 |
同步报文 |
0001b |
080h |
1005/1006/1007/1028h |
点对点消息 |
Emergency
|
0001b |
081h~0FFh |
1014h~1015h |
功能代码为0001b 的网络管理指令,具有最高优先级,并且只限于NMT主机发送。为了让设备同步时间更精确,我们给同步报文设置第二高的优先级。
设置节点ID的方法有:利用DIP拨码开关,单独的配置接口或层设置服务LSS来设置。
NMT错误对象一般用于启动报文或心跳报文。
如果要在CAN open设备之间建立其他的PDO、SDO、紧急事件和心跳连接,则必须利用默认SDO通道对CANopen 设备进行配置,这也是PDO交叉通信必不可少的条件。
4.5.2 设备的基本功能
CANopen 设备在网络中正常工作时并不需要具备CANopen 通信子协议中规定所有参数和服务,只需要具备下列这些基本的功能:
1 固定参数为设备类型、错误寄存器、制造商;
2 设备状态机必须支持4种状态和状态转变,还要能解析NMT;
3 支持启动报文;
4 SDO通道具有2个CAN标识符,其中发送方向的标识符为“580h +节点ID”,接收方向的为600h +节点ID。
5 支持心跳报文或节点/寿命保护;
6 对象字典中必须保护所有过程数据和条目。
4.6节点ID的分配
系统开发商必须要为每一个CANopen设备分配一个唯一的节点ID,大部分的CANopen 设备中使用一个DIP开关来分配节点ID,还有一种是通过位置寻址分配节点ID,另外,还有一种采用动态方式分配节点ID:其包含两种方式,其一为LSS主机利用层设置服务,通过CAN网络将节点ID分配给CANopen;其二为申请了专利保护的Node-ID Claming.
层设置服务LSS
CiA305规范中,所描述的层设置服务LSS,可用来设置标识符以及CAN网络的传输速率。利用LSS配置设备标识的典型设备有:防护级较高的设备或密闭的设备。
另注意:利用对象字典来设置节点ID或位速率是一种完全错误的方法,因为它有以下缺陷:
通过SDO连接写入新的节点ID会CAN标识符,为此我们不得不在新设定的默认SDO连接上进行确认。
‚ 通过一个单独的SDO连接为CANopen 设备设置节点ID,可能会无意地改写另一个设备的节点ID。
ƒ 整个网络中的传输速率都要统一,位速率不一致,持续发送的错误帧有可能会使设备与总线断开连接。
如果通过LSS分配的节点ID,就必须有2种寻址模式:一种是点对点模式(也就是只有一个LSS从机需要配置),另一种是广播通信模式。LSS协议采用主/从模型。LSS主机在网络中只有一个,且必须在CANopen管理器中实现。
LSS协议中只规定了2个CAN标识符,主机使用标识符为2021,从机使用为2020,2 条报文的长度总是为8字节,第一个字节通常为识别符,用来识别所涉及的指令或状态信息。 具有LSS从机功能但没有有效节点ID的CANopen 设备 在上电之后会进入LSS等待状态。
配置节点ID和设备位速率时,若为简单点对点模式时,用户可根据Switch State Global 协议对设备进行配置。若网络中有多个LSS从机需要配置,则会用到LSS地址,该地址的中4个值由标识对象索引1018h提供。
LSS配置状态中可以对设备执行以下命令:配置设备标识符,配置位速率,保存配置 。