OSEK直接网络管理(四)

2022-05-25 15:26:49 浏览数 (2)

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

0 人点赞