CAN学习笔记二:OSEK NM 学习

OSEK NM 学习

1 OSEK NM 学习准备

1.1 获取文档

OSEK NM 官方文档的获取渠道很多,不清楚的萌友们可以直接问度娘,跟度娘关系好的萌友可以试着问一下官方下载路径,然后私信告诉我,毕竟我也想验证一下自己看的文档是否有误,而且据我猜测大多数萌友都会又跟我同样的想法。在这里附加一份我阅读的疑似官方文档的下载链接,文档的名称和版本是《OSEK/VDX Network Management V2.5.3》,这份文档是我付出了N多某币下载到的,我若在这里提供给大家免费下载自然是说不过去的,可能还会有人骂我影响了他们的收益,所以我自然要跟随他们的脚步,给大家提供一个收费的下载链接:OSEK/VDX Network Management V2.5.3文档,如果有萌友打开后可以直接下载,那纯属个人运气爆棚,当然,我也会怀疑我设定的动态调分机制出了问题。

1.2 OSEK NM 简介

在文档的 Page3 页的 Introduction 中有详细说明,请萌友们自行阅读理解,这里不做过多赘述。好吧,我承认,其实是我英语不好,不会准确翻译每句话的意思,有兴趣且英语杠杠的萌友可以翻译好私信发我,我将对此段进行更新,并在其中表示感谢。目前,个人水平上的理解也仅限于 ECU 多、保证安全可靠的网络通信等等,可能类似于一人说话众人听,众人说话乱哄哄之类的情况吧。

1.3 OSEK NM 机制

OSEK NM 提供了两种网络管理机制:直接网络管理和间接网络管理,在文档中的描述如下:

OSEK NM offers two alternative mechanisms for network monitoring
• indirect monitoring by monitored application messages, and
• direct monitoring by dedicated NM communication using token principle.

本文仅对直接网络管理机制做出说明。

1.4 OSEK NM 原理

这里引用一位睿智的博友的文章来说明OSEK NM的原理,因为这位睿智的博友给我们讲述了这样一个故事:https://blog.csdn.net/anhui_boy/article/details/117128206,在后面的学习中可能还需要反复翻看这个故事。

1.5 OSEK NM 报文格式

这里引用另一位睿智的博友的文章,供萌友们参考:https://blog.csdn.net/u014156403/article/details/106869243

2 OSEK NM 学习记录

2.1 网络结点组环

相信通过对上述故事的阅读,假定大家都已经清楚了网络管理组环以及重新组环的原因和原理,在这里重点说明一点:结点组环的目的是保证 Ring 报文在网络中周期性的传递,但是 Ring 报文的传递周期和每个结点传递 Ring 报文的周期是不同的概念,每个结点只有在接收到前继结点发送的Ring报文时,才会设置定时,定时时间到时将Ring报文传递出去。网络结点在传递 Ring 报文的过程中要时刻进行两种灵魂拷问:

我有被其他结点跳过吗?
我有新的后继节点了吗?

假如当前结点是位皇上的话,上述两件事情可以看作是:

大臣们商量啥呢,他们关系这么好,难道是太子要篡位了吗?
这个皇子好像更适合继承大位,要不把太子废了,立他当太子?

2.2 我有被其他结点跳过吗?

在文档中,结点判断自身有没有被其他结点跳过需要依据以下规则(文档中 Page32 页):
结点被跳过判断规则

这里的 Receiver(R)是指当前结点本身,而 Source(S)和 Destination(D)是当前结点接收到的网络管理消息(Ring)中的源地址和目的地址,如果把源地址(S)比作大臣,当前结点比作皇上(R), 目的地址比作太子(R),那么事情可能是这样的,不过这是我猜测的。

一天,大臣偷偷地跟太子说:“太子,今晚去你府里吃火锅吧。”太子听了很慌啊:“我家没火锅底料的事情被他知道了?吃火锅不带皇上不怕皇上知道吗?你丫的是为了多吃点儿吧?”似这等机密要闻(Ring 消息)皇上怎么可能会不知道?东厂会告诉皇上的,西厂也会告诉皇上的。皇上听了很慌啊:“太子想干嘛?他们吃火锅怎么可以不带朕?这是在偷偷搞事情啊!噢!朕明白了,这是要篡位啊!”于是乎,一道圣旨(Alive 消息)发出:“众位爱卿,通知一下啊,太子和你们偷偷吃火锅的事情已经被朕发现了,你们和太子的小团体要不要先解散,重新维护朕的大团体,带着朕一块儿吃火锅?”。

2.3 我有新的后继节点了吗?

文档中为当前结点给出了判断新的后继结点的依据(文档中 Page33 页):
后继结点判断规则

这里的 Receiver(R)是指当前结点本身,Log.successor(L)是指当前结点的后继结点,Source(S)是当前结点接收到的网络管理消息(Alive 消息或 Ring 消息)中的源地址,判断新的后继结点即是判断这条消息的发送结点能否替换当前结点已存在的后继结点。不知道萌友们有没有看明白,反正我觉得自己说的不明不白的。那就假如一下吧,假如把当前结点还是比作那位皇上(R),当前结点如果不乐意的话暂时委屈一下哈,当前结点的后继结点比作现任太子(L),当前接收到的网络管理消息的发送结点比作皇子(S),那么故事就可以接着发展了。

一天,皇子给皇上送来了火锅底料,皇上龙颜大悦,大宴群臣,吃火锅吧。酒过三巡,菜过五味,皇上越看这位皇子是越开心啊,对群臣说:“众位爱卿啊,你们看这位皇子是不是和朕长得更像啊?啊呸!喝多了,朕重说哈。你们看这位皇子是不是更适合继承大位啊?”大臣们听了很慌啊:“皇上要干嘛?废太子?立太子?那以后是不是可以天天吃火锅了?!”

注意,在文档(Page33 页底部)中有这样的描述:

The state NMReset initializes the system-related basic configuration. Therefore the values L
(Log. successor identification) and R (Receiver identification) are equal. The algorithm has to
be initialized: the source of the first received NM message will be the logical successor.

什么意思呢?通俗地讲,立长子为太子。在最开始皇上还没有皇子的时候,这时候皇上为了逗自己玩,给自己封了个太子,于是皇上就可以把皇位扔给太子了,其实是扔给了自己。突然有一天,内宫中有人来给皇上报喜,说后宫某位娘娘生了个皇子,皇上那叫一个高兴啊,心想这可是朕的第一个皇子啊,那就加封为太子吧!

2.4 五个定时器

首先,要明白为什么是五个定时器,因为是在文档中具体说明了的,所以这是句废话。
其次,要知道是哪五个定时器,这个很重要!

  • TTyp
    用于指示网络管理中的结点什么时间发送 Ring 报文。即当结点接收收到前继结点传递的 Ring 消息时,开启 TTyp 定时,定时时间到时,将 Ring 消息报文发送给后继结点。

  • TMax
    用于监测网络管理报文的接收是否超时。即当结点发送 Alive 消息或者 Ring 消息后,开启 TMax 定时,表示从现在开始结点要在 TMax 定时时间内接收到网络管理报文。

  • TError
    当结点处于 LimpHome 状态时,向网络中发送 LimpHome 报文的周期。不同于 TTyp 和 TMax 定时器,TError 定时器的启动不需要外部的条件限制,可在结点处于 LimpHome 状态时由结点自己管理。

  • TWbs
    等待总线睡眠定时器(Wait bus sleep),用于设定睡眠条件满足时,结点需要等待多少漫长的岁月才能正式进入睡眠状态。

  • TTx
    网络管理消息重新发送定时器,即当节点发送网络管理消息失败时,多久后需要重新发送消息。理论上来讲,实际情况也一样(不满足的话也能假定为理想情况),当结点保证每条网络管理消息都能成功发送时,这个定时器应该会用不到。

2.5 NM 软件功能

软件机构中的 NM 服务

如上图所示(文档 Page5 页),在软件架构中,Network Management 本身是一个服务层程序,处于底层硬件驱动和上层应用程序之间,因此NM在运行维护自身功能的同时,还会和上下层(底层硬件驱动和上层应用程序)进行数据通信。与底层硬件驱动的交互体现在网络管理消息数据的收发上,由底层硬件驱动提供接口,而与上层在进行数据交互时,则需要 NM 提供接口,供上层应用程序调用改变 NM 服务的内部状态。以下图(文档 Page35)为例,图中 NMBusSleep、NMInit、NMAwake 为 NM 自身需要维护的状态,而 NMActive 和 NMPassive 则是由上层应用程序调用 NM 接口时引发的 NM 内部变化的状态。而 TalkNM 和 SilentNM 则是 NM 提供给上层应用程序调用的接口。
Toggling between NMActive and NMPassive

NM 提供给应用程序调用的接口包括:

StartNM
StopNM
TalkNM
SilentNM
GotoMode(BusSleep)
GotoMode(Awake)

2.6 文档图学习

在阅读文档和实现 NM 软件服务时,注意以下页面中提供图示的学习:

Page25 ~ Page26
Page37、Page39
Page42、Page47 ~ Page56
Page66

有条件的萌友可以将上述页面打印出来。博客下载链接中提供的文档中有我添加的学习笔记,觉得笔记有误的萌友可与我联系讨论,共同进步。

2.7 NM 服务实现

在学习过程中,我基于CANoe和CAPL语言,以面向对象编程的思想实现了 NM 基本的服务功能,测试下来所需的功能都是正常的,有需要的萌友可在参考后自行用其他语言替换。下载链接为:OSEK NM 服务实现(CANoe + CAPL),或可私信联系我获取。

(文中图片和博客链接如有侵权,请联系删除。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值