<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>uml on Kohsruhe</title><link>https://www.kohsruhe.com/zh/tag/uml/</link><description>Recent content in uml on Kohsruhe</description><generator>Hugo -- gohugo.io</generator><language>zh</language><managingEditor>kohsruhe@outlook.com (Leehyon HNG)</managingEditor><webMaster>kohsruhe@outlook.com (Leehyon HNG)</webMaster><lastBuildDate>Tue, 15 Sep 2026 10:24:26 +0800</lastBuildDate><atom:link href="https://www.kohsruhe.com/zh/tag/uml/index.xml" rel="self" type="application/rss+xml"/><item><title>借助 UML Model 深入 AUTOSAR BSW</title><link>https://www.kohsruhe.com/zh/2026/09/autosar-bsw-uml-model/</link><pubDate>Tue, 15 Sep 2026 10:24:26 +0800</pubDate><author>kohsruhe@outlook.com (Leehyon HNG)</author><guid>https://www.kohsruhe.com/zh/2026/09/autosar-bsw-uml-model/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;这是 AUTOSAR 学习系列番外的番外篇。在上一篇的结尾有提到过可以用 EA 看官方模型，仔细查看后发现，官方模型是不可多得的学习材料，值得再深入讲讲。&lt;/p&gt;
&lt;p&gt;相比晦涩的 SWS 文本规范，图形能帮我们在脑海中瞬间建立直观骨架。本文梳理如何利用官方 UML Model 建立 AUTOSAR BSW 的整体认知。&lt;/p&gt;</description><content:encoded><![CDATA[<h2 id="背景">背景</h2>
<p>这是 AUTOSAR 学习系列番外的番外篇。在上一篇的结尾有提到过可以用 EA 看官方模型，仔细查看后发现，官方模型是不可多得的学习材料，值得再深入讲讲。</p>
<p>相比晦涩的 SWS 文本规范，图形能帮我们在脑海中瞬间建立直观骨架。本文梳理如何利用官方 UML Model 建立 AUTOSAR BSW 的整体认知。</p>
<h3 id="什么是-autosar-bsw-uml-model">什么是 AUTOSAR BSW UML Model</h3>
<p>AUTOSAR 官方在发布 CP 规范包时，除了 PDF 规范外，还会随附一份 UML 模型（通常是 <code>MOD</code> 类文档，如 <code>AUTOSAR_MOD_BSWUMLModel.zip</code>）。它本质上是所有 BSW SWS 规范中架构图、时序图与类图的「设计母版」：</p>
<ul>
<li><strong>静态结构</strong>：完整定义了各 BSW 模块的组件关系、对外提供/引用的接口、API 签名与数据类型</li>
<li><strong>动态行为</strong>：包含典型场景下的跨模块交互时序图与核心模块的状态机</li>
<li><strong>可追溯性</strong>：在 EA 中所有元素均有关联关系，支持双向跳转与依赖反查，要比翻阅 PDF 高效</li>
</ul>
<h2 id="准备工作">准备工作</h2>
<ol>
<li><strong>获取官方模型</strong>：访问 <a href="https://www.autosar.org/search">Search AUTOSAR</a>，搜索 <code>BSW UML Model</code>，在 Doc Type 中筛选 <code>MOD</code> 下载。</li>
</ol>
<p><img src="https://images.kohsruhe.com/2026/autosar-search-bswuml.png" alt="autosar-search-bswuml"></p>
<ol start="2">
<li><strong>安装查看工具</strong>：解压后找到 <code>.eap</code> 并使用 Enterprise Architect 打开<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。</li>
</ol>
<ol start="3">
<li><strong>建立学习副本</strong>：保留一份未修改的原始副本。若需要在模型中添加标注或自定义视图，建议新建独立的根包（如 <code>Learning_Sandbox</code>），不要直接更改官方包结构。</li>
</ol>
<h2 id="模型目录">模型目录</h2>
<p><img src="https://images.kohsruhe.com/2026/autosar-bswproject.png" alt="autosar-bswproject"></p>
<p>模型工程树内容庞大，不必逐个展开阅读，重点聚焦以下 4 个核心入口：</p>
<pre class="mermaid">mindmap
  root((BSW UML Model))
    OverallViews[&#34;Overall Views&lt;br/&gt;宏观全景&#34;]
    InteractionViews[&#34;Interaction Views&lt;br/&gt;跨模块动态交互&#34;]
    SoftwarePackages[&#34;Software Packages&lt;br/&gt;模块静态定义与 API&#34;]
    DocumentationDrawings[&#34;Documentation Drawings&lt;br/&gt;核心状态机与辅助图&#34;]</pre><h3 id="overall-views">Overall Views</h3>
<p>这里通常放 AUTOSAR 分层架构、BSW 模块分布和模块之间的宏观依赖。</p>
<p><img src="https://images.kohsruhe.com/2026/autosar-packages.png" alt="autosar-packages"></p>
<p><img src="https://images.kohsruhe.com/2026/autosar-dependencies.png" alt="autosar-dependencies"></p>
<h3 id="interaction-views">Interaction Views</h3>
<p>这里主要是跨模块的时序图。</p>
<blockquote>
<p>官方建模指南规定，Interaction Views 用于放置不同模块之间的交互时序图，并按软件栈组织；这些时序图用于表现 BSW 模块之间的典型用例，并被纳入对应 SWS。</p>
</blockquote>
<p>当你想理解“一帧报文如何收发”、“一次诊断请求如何响应”、“一次 NvM 数据如何异步读写”时，应优在这里找找：</p>
<ul>
<li><strong>典型时序</strong>：主控调用链路与模块流转</li>
<li><strong>调用性质</strong>：区分同步轮询、同步阻塞与异步回调</li>
<li><strong>异常流向</strong>：如超时、校验失败、Bus-off 等异常分支的触发与通知机制</li>
</ul>
<p>比如，下面是模拟 EEPROM（Fee_Write）的写时序图，描述的是 NvM 发起一次写请求，经过 MemIf → Fee<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> → Fls，最终把数据写入 Flash，并通过 JobEndNotification 逐层通知完成。</p>
<p><img src="https://images.kohsruhe.com/2026/autosar-feewrite.png" alt="autosar-feewrite"></p>
<p>对应的，这是真实 EEPROM（Ea_Write）的写时序图：</p>
<p><img src="https://images.kohsruhe.com/2026/autosar-eawrite.png" alt="autosar-eawrite"></p>
<p>对比两张时序图会发现，Fee 的复杂度要高于 Ea：</p>
<ul>
<li>Ea 更像一个转发模块：EEPROM 物理特性支持字节级随机读写与原地覆盖。因此 Ea 只需做 32 位逻辑地址到物理偏移的线性映射，将 NvM 的请求打包转发给底层的 Eep 驱动，调用链很平直</li>
<li>Fee 是一个真正的内部状态机模块：Flash 物理特性决定其不能原地覆盖，必须“先按扇区擦除、再按页写入”，且擦写寿命有限。为了在只支持块擦除的 Flash 上“模拟”出 EEPROM 的随机读写能力，Fee 内部必须依赖复杂的状态机驱动，包括动态映射、扇区轮转、垃圾回收和掉电安全</li>
</ul>
<p>尽管下层机制差异很大，但对于上层的 NvM 来说，通过 MemIf 调用的却是完全相同的 <code>MemIf_Write</code> 接口与异步 Job 模型。NvM 既不需要关心当前操作的是 Flash 还是 EEPROM，更无需理会底层是在做垃圾回收还是在做直接的物理覆写。</p>
<h3 id="software-packages">Software Packages</h3>
<p>当需要落地到代码或查阅具体 API 时，从 Software Packages 进入对应模块包：</p>
<ul>
<li><strong>模块组件</strong>：对外提供的 Required/Provided 接口</li>
<li><strong>API 列表</strong>：函数名称、入参、出参及返回值类型</li>
<li><strong>Callback 规范</strong>：下层向上层通知的统一回调规范</li>
<li><strong>Header File Diagrams</strong>：模块间头文件的包含关系，帮助理清编译依赖</li>
</ul>
<p>比如下图是 Fee 模块的提供的接口图，路径位于 <code>AUTOSAR.SoftwarePackages.ECUAL.MemHwA.Fee.Fee Provided Interfaces</code>：</p>
<p><img src="https://images.kohsruhe.com/2026/autosar-feepif.png" alt="autosar-feepif"></p>
<h3 id="documentation-drawings">Documentation Drawings</h3>
<p>这里放的是状态机和活动图，主要是网络管理与通信控制模块相关的。这些模块往往不是简单的数据转发，状态和模式是理解行为的核心。</p>
<p>比如下图是 DEM 模块处理故障的活动图，可以帮助我们更好理解 Event 从“检测到故障”到“生成 DTC 并存储”的核心流程：</p>
<p><img src="https://images.kohsruhe.com/2026/autosar-demeventstorage.png" alt="autosar-demeventstorage"></p>
<h2 id="学习流程">学习流程</h2>
<p>同阅读 PDF 一样，不建议无目的地漫游模型，还是要以具体的工程问题为切入点：</p>
<ul>
<li>一帧 CAN 报文从应用发出到硬件发送经历了什么？</li>
<li>CAN 报文接收后如何解析并通知到 RTE/SWC？</li>
<li>发生 Bus-off 后，CanSM 与 CanIf 如何协调恢复？</li>
<li>NvM 读取 Block 时底层的异步任务是如何轮询完成的？</li>
<li>ComM 如何协同各个通道的通信模式？</li>
</ul>
<p>推荐参考如下路径展开学习：</p>
<pre class="mermaid">flowchart TD
    Q[&#34;🎯 工程问题驱动&#34;] --&gt; A[&#34;&lt;b&gt;1. Overall Views&lt;/b&gt;&lt;br/&gt;定位涉及模块与分层拓扑&#34;]
    A --&gt; B[&#34;&lt;b&gt;2. Interaction Views&lt;/b&gt;&lt;br/&gt;阅读时序图，理清动静态交互主线&#34;]
    B --&gt; C[&#34;&lt;b&gt;3. Software Packages&lt;/b&gt;&lt;br/&gt;查阅关键 API、Callback 与参数类型&#34;]
    C --&gt; D[&#34;&lt;b&gt;4. 对应模块 SWS&lt;/b&gt;&lt;br/&gt;核对详细时序要求、返回值与配置项约束&#34;]
    D --&gt; E[&#34;&lt;b&gt;5. 工具配置与代码生成&lt;/b&gt;&lt;br/&gt;结合 DaVinci / EB Tresos 及生成的代码验证&#34;]</pre><h2 id="总结">总结</h2>
<p>AUTOSAR BSW UML Model 最大的价值，倒不在于具体画了多少张图，而是把散落在几十个 SWS 规范里的模块、接口、数据类型和状态机，串成了一张能随时点击、跳转和导航的全局地图。比起直接硬啃大段的英文规范，先看图理顺逻辑确实要友好得多。</p>
<p>另外，如果你平时工作里也用 EA 做软件设计和架构，官方这份工程也是现成的参考样本<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>。</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Enterprise Architect 首次打开会提示 Project Transfer 并创建一个新的 <code>.qea</code> 文件&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Flash EEPROM Emulation&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>本人还是习惯 Diagrams as Code，比如 Mermaid 或 PlantUML&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item></channel></rss>