NM全局状态转换图
图1 NM全局状态转换示意
NM状态转换模式
(1)NMActive - NMPassive
在网络中,节点可以根据其自身的需求,中止其在网络中的通信。
每个节点都有一个静默状态的标识(silent mark),通过在应用层中设置这个标识,来决定是否参与网络通信。
- silent mark置为1,表示节点希望进入NMPassive状态,节点即停止发送ring消息及参与逻辑环的循环过程;
- silent mark置为0,表示节点进入NMActive状态,继续参与逻辑环循环过程
图2 NMActive和NMPassive状态转换
注意上述状态转换是网络进入NMOn以后的一个子状态,而NMOn状态机中,有两种并行的状态转换过程。
(2)NMBusSleep - NMAwake
NM进入NMOn状态以后,会首先进入NMInit完成初始化,随后即进入NMAwake状态,直到所有节点不再有通信需求的时候,会进入NMBueSleep状态。
每个节点都有一个睡眠标识(sleep mark),可以被应用层置位或者清零。
服务 | 描述 | 睡眠标识(sleep mark) |
---|---|---|
GotoMode(BusSleep) | 进入睡眠状态 | 1 |
GotoMode(Awake) | 退出睡眠状态 | 0 |
在每个ring消息中,有一位表示这个睡眠标识,即sleep.ind。
在网络进入睡眠状态前,网络中的每一个节点都必须将sleep.ind置位,直到逻辑环中的所有节点都置位了这个标识,那么睡眠请求将会通过置位sleep.ack来确认。再经过TWaitBusSleep的时间延时后,完成状态的跳转。
图3 NMAwake(NMNormal)和NMBusSleep之间的转换
上述状态图展示了在NMAwake状态中,NMNormal子状态与NMBusSleep之间的转换,在子状态NMLimpHome状态下也可以与NMBusSleep之间进行转换。
我们知道NMLimpHome状态是在NM唤醒的时候,出现错误的一个状态,这个状态与NMBusSleep之间的转换与NMNormal状态与NMBusSleep之间的转换是类似的。
每个节点的limphome消息中也包含sleep.ind这个位,每个节点轮流置位这个标识,直到sleep.ack位被置位,等待TWaitBusSleep时间后进入睡眠状态。
与NMNormal状态稍有不同的是,NMLimpHome还有一种方式可以直接进入睡眠状态,就是在TMax时间后,如果没有接收到有效的ring消息,网络状态也会跳转至睡眠状态(图3箭头部分)。
图4 NMAwake(NMLimpHome)和NMBusSleep之间的转换
NM状态还有很多形式的转换,这里就不一一列举了,读者可以参考文档OSEK/VDX Network Management Version 2.5.3中page41-page45,有详细的状态跳转的示意图。
资料请移步:
链接:https://pan.baidu.com/s/1gGnZkYV0CBmKErp_M_Nxdg
提取码:68ll
参考资料:OSEK/VDX Network Management Version 2.5.3