通信管理器规范(Specification of Communication Manager)

📄 文档 ID:079 🏷 类型:SWS(软件规范说明) 📅 版本:AUTOSAR CP 4.4.0 📑 页数:134 📌 状态:Final 🔗 原 PDF:AUTOSAR_SWS_COMManager.pdf

目录

1 介绍与功能概述

通信管理器模块(Communication Manager Module,ComM)是基本软件(BSW)的组件。它是一个资源管理器,封装了对底层通信服务的控制。ComM 模块控制与通信相关的基本软件模块,而非软件组件或可运行实体。ComM 模块从通信请求者(见第 2 章中"User"术语的定义)处收集总线通信访问请求,并协调这些请求。

ComM 模块的目的包括:

2 缩略语与定义

缩略语 / 缩写描述
BSWBasic Software(基本软件)
BswMBasic Software Mode Manager(基本软件模式管理器)
ComMCommunication Manager(通信管理器)
DCMDiagnostic Communication Manager(诊断通信管理器)
DetDefault Error Tracer(默认错误追踪器)
EcuMECU State Manager module(ECU 状态管理器模块)
I-PDUInformation Protocol Data Unit(信息协议数据单元)
NMNetwork Management(网络管理)
PDUProtocol Data Unit(协议数据单元)
SW-CSoftware Component(软件组件)
VMMVehicle Message Matrix(车辆消息矩阵)

表 — 缩略语与缩写

术语

术语描述
DCM_ActiveDiagnostic 指示 DCM 模块指示一个活动的诊断会话。DCM 需要"完全通信" = COMM_FULL_COMMUNICATION 用于诊断目的。
Active wake-up(主动唤醒) 由宿 ECU 引起的唤醒,例如由传感器触发。
Application signal scheduling(应用信号调度) 按 VMM 发送应用信号。CAN 应用信号由通信模块(Communication Module)调度;LIN 应用 I-PDU(包含信号的 PDU)由 LIN 接口调度;FlexRay 应用 PDU 由 FlexRay 接口模块调度。
Bus sleep(总线休眠) 通信总线上无活动需求(如 CAN 总线休眠)。
Bus communication messages(总线通信消息) 在通信总线上发送的所有消息。可以是诊断消息或应用消息。
COM Inhibition status(COM 抑制状态) 定义完全通信、静默通信或唤醒是否被允许。
Communication Channel(通信通道) 从发送方(或发射端)到接收方传输信息的介质。
Communication Mode(通信模式) 确定允许哪类通信:
- COMM_FULL_COMMUNICATION = 完全通信
- COMM_NO_COMMUNICATION = 无通信
- COMM_SILENT_COMMUNICATION = 静默通信
COMM_SILENT_COMMUNICATION 不可由用户请求,仅作为关机同步的内部模式。
Diagnostic PDU scheduling(诊断 PDU 调度) 诊断 PDU 的发送。CAN 诊断 PDU 由诊断模块调度;LIN 诊断 PDU 由诊断模块与 LIN 接口调度;FlexRay 诊断 PDU 由诊断模块与 FlexRay 接口模块调度。
ECU shut down(ECU 关机) 见 ECU 状态管理器规范 [6]。
Fan-out(扇出) 同一条消息/指示被发送给多个目标/接收方。
Independent software component(独立软件组件) 独立开发的软件组件,执行一组内聚的功能,与 ECU 上其他软件的接口最少。例如基本软件组件或应用软件组件。
Passive wake-up(被动唤醒) 由另一 ECU 引起并经由(总线或唤醒线)传播至当前 ECU 的唤醒。
System User(系统用户) 用于在 ComM 内部上下文中发出默认请求并覆盖用户请求的管理功能(一种特殊的"用户")。
User(用户) ECU 状态管理器和通信管理器模块的请求者概念。用户可以是 BswM、可运行实体、SW-C 或一组 SW-C,作为对 ECU 状态管理器和通信管理器模块呈现的单一单元。
User Request(用户请求) 用户可向 ComM 请求不同的通信模式。
Managed channel(被管理通道) 通过 ECUC 参数 ComMManageReference(见 ECUC_ComM_00893)引用另一 ComM 通道的 ComM 通道。
Managing channel(管理通道) 被至少一个其他通道通过 ECUC 参数 ComMManageReference(见 ECUC_ComM_00893)引用的 ComM 通道。

表 — 术语

3 相关文档

3.1 输入文档

3.2 相关标准与规范

不适用。

3.3 相关规范

AUTOSAR 提供了针对基本软件模块的通用规范 [31](SWS BSW General),该规范同样适用于通信管理器(ComM)。

因此,SWS BSW General 应被视为 ComM 的附加且必需的规范。

4 约束与假设

4.1 限制

无限制。

4.2 在汽车领域的适用性

无限制。

5 与其他模块的依赖

图 1 — 通信管理器模块上下文视图:ComM 模块(资源管理器 ResourceManager)通过 RTE 与 SW-C 交互;与 EcuM(ComM_EcuM、ComM_Nm 接口)、Nm、FrSM/CanSM/LinSM/EthSM(ComM_BusSM 接口)、Dcm(ComM_Dcm 接口)、NvM(NvM_ReadBlock/WriteBlock)、Det(Det_ReportError)、BswM(BswM_RequestMode)、Com(ComM_COMCbk)交互。

通信管理器模块向用户所请求的总线状态管理器模块请求相应的通信能力。

5.1 文件结构

(未详述)

5.2 AUTOSAR 运行时环境(RTE)

每个用户均可请求通信模式。RTE 将用户请求转发至 ComM 模块,并将 ComM 的通信模式指示转发回用户(详见 [8])。

5.3 ECU 状态管理器(EcuM)

EcuM 负责验证唤醒事件,并在唤醒被验证后向 ComM 发送指示。

通信允许与 ECU 关机由 EcuM 与 BswM 共同处理(详见 [6])。

5.4 基本软件模式管理器(BswM)

BswM 实现模式仲裁(Mode Arbitration)和模式控制(Mode Control)两个功能,以支持应用模式管理和车辆模式管理。

若在 BswM 的动作列表中配置为通过 BswM 请求 ComM 模式,则 BswM 将用户请求转发至 ComM 模块。

若在动作列表中配置了 Com_IpduGroupControl 的调用,BswM 控制 AUTOSAR 通信模块(COM)中的 PDU 组。

[SWS_ComM_00976] ⌈ ComM 应向 BswM 指示所有通道主状态变化和所有 PNC 状态变化。 ⌋()

若使用 EcuM-Flex,BswM 将向 ComM 指示通信是否被允许。

5.5 NVRAM 管理器

ComM 模块使用 NVRAM 管理器存储和读取非易失性数据。

关于 NVRAM 数据的初始值,请参见第 10 章。

注释:NVRAM 管理器必须在 ECU 上电或复位后初始化,且必须先于 ComM 初始化。当 ComM 初始化时,ComM 假定 NVRAM 已就绪可用,可以读回非易失性配置数据。当 ComM 去初始化时,会将非易失性数据写入 NVRAM。

5.6 诊断通信管理器(DCM)

DCM 执行诊断 PDU 的调度。DCM 通过"请求通信模式"作为用户出现,当需要执行诊断时通过 DCM_ActiveDiagnostic 指示请求 COMM_FULL_COMMUNICATION。DCM 不提供启动/停止发送和接收的 API,但保证通信能力与 ComM 模块的通信模式一致。

5.7 LIN 状态管理器

LIN 状态管理器控制与 ComM 模块通信模式对应的 LIN 总线实际状态。ComM 模块向 LIN 状态管理器请求通信模式,LIN 状态管理器将该通信模式映射到总线状态。

5.8 CAN 状态管理器

CAN 状态管理器控制与 ComM 模块通信模式对应的 CAN 总线实际状态。ComM 模块向 CAN 状态管理器请求通信模式,CAN 状态管理器将该通信模式映射到总线状态。

5.9 FlexRay 状态管理器

FlexRay 状态管理器控制与 ComM 模块通信模式对应的 FlexRay 总线实际状态。ComM 模块向 FlexRay 状态管理器请求通信模式,FlexRay 状态管理器将该通信模式映射到总线状态。

5.10 以太网状态管理器

以太网状态管理器控制与 ComM 模块通信模式对应的以太网总线实际状态。ComM 模块向以太网状态管理器请求通信模式,以太网状态管理器将该通信模式映射到总线状态。

5.11 网络管理(NM)

ComM 模块使用 NM 来同步跨网络的通信能力控制(同步启动与关机)。

5.12 默认错误追踪器(DET)

DET 提供用于报告开发、运行时和瞬态错误的服务(见 §7.8)。

5.13 通信(COM)

[SWS_ComM_00975] ⌈ AUTOSAR 通信模块(COM)应用于通过 COM 信号分发关于 PNC 的状态信息。 ⌋()

6 需求追溯

本章引用 SRS 文档(软件需求规范)所规定、适用于本软件模块的输入需求。

下表列出 SWS 文档中满足输入需求的具体规范条目引用。仅功能需求被引用。

6.1 SRS_BSW_* 通用 BSW 需求追溯

需求 ID由以下 SWS_ComM_* 满足
SRS_BSW_00004(BSW 模块对所有导入包含文件进行版本预处理器检查)SWS_ComM_00418
SRS_BSW_00005, _00009, _00010, _00161, _00162, _00164, _00168, _00170, _00314, _00325, _00341, _00343, _00344, _00353, _00361, _00375, _00378, _00398, _00404, _00405, _00413, _00416, _00417, _00422, _00423, _00424, _00425, _00426, _00427, _00428, _00429, _00432, _00433, _00437, _00438, _00439SWS_ComM_00499(不适用)
SRS_BSW_00101(BSW 模块可在独立初始化函数中初始化变量和硬件)SWS_ComM_00146
SRS_BSW_00158(严格分离配置与实现)SWS_ComM_00464
SRS_BSW_00167(BSW 模块提供配置规则和约束)SWS_ComM_00419
SRS_BSW_00323(BSW 模块检查 API 参数有效性)SWS_ComM_00234
SRS_BSW_00327, _00337, _00385, _00386(错误值命名约定 / 开发错误分类 / 列出可能错误通知 / BSW 配置检测错误)SWS_ComM_00234
SRS_BSW_00331(BSW 严格分离错误与状态信息)SWS_ComM_00649
SRS_BSW_00336(BSW 模块可关闭)SWS_ComM_00147
SRS_BSW_00342(可由源代码和目标代码模块构建 ECU)SWS_ComM_00459
SRS_BSW_00348, _00357(标准类型与返回类型)SWS_ComM_00820
SRS_BSW_00358(init() 函数返回 void)SWS_ComM_00146
SRS_BSW_00369, _00377(不应通过 API 返回开发错误码 / 可返回模块特定类型)SWS_ComM_00649
SRS_BSW_00373(主处理函数按约定命名)SWS_ComM_00429
SRS_BSW_00406(静态状态变量初始化为 0)SWS_ComM_00242, _00612, _00858
SRS_BSW_00407(每个 BSW 模块提供版本信息读取函数)SWS_ComM_00370
SRS_BSW_00414(init 函数以配置结构指针为单参数)SWS_ComM_00146

6.2 SRS_ModeMgm_* 模式管理需求追溯

需求 ID描述(节选)由以下 SWS_ComM_* 满足
SRS_ModeMgm_00049ComM 发起唤醒并保持物理通道唤醒SWS_ComM_00869, _00870
SRS_ModeMgm_09071可为每个物理通道独立限制通信模式SWS_ComM_00303
SRS_ModeMgm_09078ComM 协调多通信请求SWS_ComM_00686
SRS_ModeMgm_09080每个物理通道由独立通信模式控制SWS_ComM_00051
SRS_ModeMgm_09081ComM 提供收集通信请求的 APISWS_ComM_00110
SRS_ModeMgm_09083ComM 支持每物理通道两种通信模式SWS_ComM_00845, _00846, _00867, _00868
SRS_ModeMgm_09084ComM 提供查询当前通信模式的 APISWS_ComM_00083
SRS_ModeMgm_09085ComM 提供通信模式变化指示SWS_ComM_00091
SRS_ModeMgm_09087唤醒后通信请求最短持续时间可配置SWS_ComM_00893, _00894
SRS_ModeMgm_09089ComM 能防止唤醒物理通道SWS_ComM_00302
SRS_ModeMgm_09090用户与物理通道关系可预编译时配置SWS_ComM_00159
SRS_ModeMgm_09133可分配物理通道给 ComMSWS_ComM_00327
SRS_ModeMgm_09149ComM 提供查询请求通信模式的 APISWS_ComM_00079
SRS_ModeMgm_09155ComM 提供抑制通信请求计数器SWS_ComM_00138
SRS_ModeMgm_09156提供检索抑制"完全通信"请求数量的 APISWS_ComM_00108, _00224
SRS_ModeMgm_09157可独立地为每个物理通道撤销通信模式限制SWS_ComM_00124, _00156, _00163
SRS_ModeMgm_09168ComM 支持不连接任何物理通道的用户SWS_ComM_00664
SRS_ModeMgm_09172可评估当前通信模式SWS_ComM_00176
SRS_ModeMgm_09243ComM 能处理 FlexRay 和 CAN 上的部分网络SWS_ComM_00164, _00959
SRS_ModeMgm_09246, _09247ComM 仲裁/协调物理通道用户和 PNC 用户的请求;每个 PNC 有独立状态机SWS_ComM_00165
SRS_ModeMgm_09248可区分内部与外部 PNC 激活请求SWS_ComM_00165, _01014, _01015

7 功能规范

ComM 模块简化了用户的资源管理,用户可以是可运行实体、SW-C、BswM(例如通过 BswM 发出 SW-C 请求)或 DCM(出于诊断目的而需通信)。

[SWS_ComM_00867] ⌈ ComM 应提供三种不同的通信模式。最高通信模式应为 COMM_FULL_COMMUNICATION,最低通信模式应为 COMM_NO_COMMUNICATION。 ⌋(SRS_ModeMgm_09083)

[SWS_ComM_00151] ⌈ 对于用户,仅可请求通信模式 COMM_NO_COMMUNICATIONCOMM_FULL_COMMUNICATION(见 ComM_RequestComMode()SWS_ComM_00110)。 ⌋()

理由:通信模式 COMM_SILENT_COMMUNICATION 及子模式/子状态仅用于与 AUTOSAR NM 同步。

[SWS_ComM_00868] ⌈ 通信模式 COMM_SILENT_COMMUNICATION 仅应用于网络同步。 ⌋(SRS_ModeMgm_09083)

:自 2.0 版本起已取消请求 COMM_SILENT_COMMUNICATION 模式的能力。

[SWS_ComM_00845] ⌈ 在 COMM_FULL_COMMUNICATION 模式下,ComM 模块应允许受影响物理通道上的发送与接收。 ⌋(SRS_ModeMgm_09083)

[SWS_ComM_00846] ⌈ 在 COMM_NO_COMMUNICATION 模式下,ComM 模块应禁止受影响物理通道上的发送与接收。 ⌋(SRS_ModeMgm_09083)

[SWS_ComM_00686] ⌈ 若多个独立用户请求中至少有一个要求更高通信模式(见 SWS_ComM_00867SWS_ComM_00868),ComM 模块应将该更高通信模式作为目标通信模式。 ⌋(SRS_ModeMgm_09078)

理由:ComM 按"最高胜出"策略协调多个独立用户请求:COMM_FULL_COMMUNICATION 通信模式优先于 COMM_NO_COMMUNICATION

[SWS_ComM_00500] ⌈ ComM 模块不应排队用户请求。同一用户的最新用户请求应覆盖旧的请求,即便该请求尚未完成。 ⌋()

[SWS_ComM_00866] ⌈ 若配置参数 ComMNmVariant=FULL|LIGHT|NONEECUC_ComM_00568),DCM_ActiveDiagnostic 指示应被视为对指定通信通道(见 ComM_DCM_ActiveDiagnostic(channel)SWS_ComM_00873)的 COMM_FULL_COMMUNICATION 请求。 ⌋()

[SWS_ComM_00092] ⌈ 每个通信通道应有一个目标通信模式状态(按 SWS_ComM_00686 评估)。该目标模式可临时与由相应总线状态管理器模块控制的实际模式不同。 ⌋()

注释:相应总线状态管理器模块的模式切换需要时间,且可能存在模式抑制。

[SWS_ComM_00084] ⌈ ComM 模块应将 ComM_GetCurrentComMode()(见 SWS_ComM_00083)的调用传播至用户所配置通道的总线状态管理器模块(另见 SWS_ComM_00176SWS_ComM_00798)。 ⌋()

[SWS_ComM_00884] ⌈ ComM 模块应将"通信是否允许"的状态以独立的 CommunicationAllowed 布尔标志为所有受支持通道分别存储。ComM 初始化后的默认值为通信不允许,即 CommunicationAllowed=FALSE。 ⌋()

[SWS_ComM_00885]SWS_ComM_00884 中的"通信允许/不允许"状态变化应通过 ComM_CommunicationAllowed(<channel>, TRUE|FALSE)SWS_ComM_00871)指示提供给 ComM。 ⌋()

7.1 部分网络集群管理(PNC)

7.1.1 概述

ComM 为每个部分网络集群(PNC)实现一个状态机以表示该 PNC 的通信模式。

每个 PNC 拥有自己的状态。该状态定义与 ComM 的状态一一对应。

ComM 用户用于请求和释放 PNC。

系统通道上各节点的所有 PNC 状态通过网络管理用户数据进行交换。

每个 PNC 在 CAN 和 FlexRay 上 NM 用户数据的位向量中占用一个专用位位置。若 PNC 由本节点的本地 ComM 用户请求,则该节点将 NM 用户数据中相应位置 1;若不再请求 PNC,则将相应位置 0。BusNm 收集并聚合 PNC 的 NM 用户数据,并通过 COM 位向量经由 COM 信号提供给 ComM。

每个 PNC 在每个启用 NM 的系统通道上的 NM 用户数据中使用相同的位位置。ComM 使用两种位向量(EIRA 和 ERA)交换 PNC 状态信息。"EIRA"和"ERA"的定义位于 AUTOSAR SWS CAN NM 和 AUTOSAR SWS FlexRay NM 中。

ComM 在节点上请求和释放 PNC 所需的系统通信总线通道。

在节点上启用或禁用部分网络集群管理应支持构建后可配置

部分网络应在 CAN、FlexRay 总线类型上受支持。在 FlexRay 节点上 PNC 的 I-PDU 组的激活与去激活是必需的,以避免错误的超时。COM 中 I-PDU 组的启动与停止由 BswM 处理。单个 FlexRay ECU 的去激活是不可能的。

7.1.2 部分网络集群管理功能

[SWS_ComM_00910] ⌈ 仅当参数 ComMPncSupport 设为 TRUE(见 ECUC_ComM_00839)时,PNC 功能才应存在。 ⌋()

[SWS_ComM_00911] ⌈ PNC 功能的启用或禁用应支持构建后通过参数 ComMPncEnabled(见 ECUC_ComM_00878)进行配置。 ⌋()

注释:ComM 模块通过调用 BswM_ComM_CurrentPncMode()(参见 SWS_ComM_00908)将 PNC 状态机的每次状态变化通知 BswM。

[SWS_ComM_00982] ⌈ 为交换 PNC 状态信息,应使用位向量(即仅一个信号最多包含 56 个 PNC 状态信息位)。 ⌋()

[SWS_ComM_00825] ⌈ 对应于一个 ComMPncId 的位所在的 byteIndexbitIndex 应按下式确定:
byteIndex = (ComMPncId div 8) - <PNC Vector Offset>
bitIndex = (ComMPncId mod 8) ⌋()

提示<PNC Vector Offset>(以及 <PNC Vector Length>,如需)可从 <Bus> 网络管理模块的配置中获取。

[SWS_ComM_00984] ⌈ ComM 通过 Com_ReceiveSignal() 接收位向量(信号),可具有 ComMPncComSignalKindEIRAERA。 ⌋()

[SWS_ComM_00986] ⌈ ComM 应提供 API ComM_COMCbk_<sn>(),用于指示模块通信中信号的变化。 ⌋()

[SWS_ComM_00916] ⌈ ComM 模块应能够通过一个或多个通信总线,使用一个或多个 COM 信号(位向量)分发 PNC 状态(PNC 状态机的结果),该位向量中表示 PNC 状态的位被分配给该 PNC,且其 ComMPncComSignalDirectionTX。 ⌋()

7.1.3 ComM PNC 状态机

[SWS_ComM_00953] ⌈ 若使用配置参数 ComMPncEnabled = TRUE(见 ECUC_ComM_00878)启用 PNC 功能,所有 PNC 相关动作应在通道相关动作之前执行(通道相关动作见第 7.3 章)。 ⌋()

[SWS_ComM_00909] ⌈ 对每个部分网络,仅应实现一个 PNC 状态机(即每个 PNC 一个 PNC 状态机,与 ComMChannels 数量无关)。 ⌋()

[SWS_ComM_00920] ⌈ ComM 模块应支持最多 56 个 PNC 状态机。 ⌋()

[SWS_ComM_00924] ⌈ PNC 状态机应由两个主状态 COMM_PNC_FULL_COMMUNICATIONCOMM_PNC_NO_COMMUNICATION 组成。 ⌋()

[SWS_ComM_00907] ⌈ PNC 主状态 COMM_PNC_FULL_COMMUNICATION 应由子状态 COMM_PNC_PREPARE_SLEEPCOMM_PNC_READY_SLEEPCOMM_PNC_REQUESTED 组成。 ⌋()

[SWS_ComM_00908] ⌈ 每个状态变化(列于 ComM_PncModeType 中),除从 PowerOff 进入主状态 COMM_PNC_NO_COMMUNICATION 外,均应通过 API BswM_ComM_CurrentPncMode() 调用及所进入的 PNC 状态进行通知。 ⌋()

[SWS_ComM_00978] ⌈ 由 ComM_RequestComMode() 调用触发的 ComM 中 PNC 状态机状态转换,应仅在 ComM_MainFunction_<Channel.ShortName> 中执行。 ⌋()

注释:每次 PN 激活都会触发 PN 向量发送 n 次,因此若不进行去抖会增加总线负载。

[SWS_ComM_00944] ⌈ 若 Rx 位向量(信号类型为 EIRA)中与 PNC 对应的至少一位等于 '1',则 ComM 中 EIRA 内与该 PNC 对应的位应置 '1'。 ⌋()

[SWS_ComM_00945] ⌈ 若配置参数 ComMPncGatewayEnabled(见 ECUC_ComM_00840)为 true,且某 ComMChannel 的 ComMPncGatewayType 设为 COMM_GATEWAY_TYPE_ACTIVE,同时 Rx 位向量(信号类型为 ERA)中与 PNC 对应的至少一位等于 '1',则 ComM 中 ERA 内与该 PNC 对应的位应置 '1'。 ⌋()

[SWS_ComM_00971] ⌈ 触发器 ComM_COMCbk 表示来自 AUTOSAR 通信模块的通知,告知接收到包含 PNC 状态信息(称为 ERA 或 EIRA)的信号。 ⌋()

[SWS_ComM_00972] ⌈ 触发器"ComMUser"表示 ComMUser 通过调用 API ComM_RequestComMode() 发出通信请求的通知。 ⌋()

[SWS_ComM_00987] ⌈ 在映射到一个或多个 PNC 的通道的 ComM_MainFunction_<Channel.ShortName> 内,请求的状态应按以下顺序处理:
1. 映射到该通道一个或多个 PNC 的 ComM 用户请求
2. 映射到该通道的 ComM 用户请求
3. ERA(若配置开关 ComMPncGatewayEnabled 设为 TRUE
4. EIRA ⌋()

注释:请求在受其影响的通道的主函数中处理。

[SWS_ComM_00919] ⌈ 应可使用配置容器 ComMPncComSignal(见 ECUC_ComM_00881)将多个表示 PNC 的 COM 信号分配给一个 PNC。 ⌋()

[SWS_ComM_00827] ⌈ 关于"通信允许"和模式抑制,源自 PNC 状态机的请求应被视为相应通道的用户请求。 ⌋()

图 2 — PNC 状态机:主状态 COMM_PNC_FULL_COMMUNICATION(含子状态 COMM_PNC_REQUESTEDCOMM_PNC_READY_SLEEPCOMM_PNC_PREPARE_SLEEP)与 COMM_PNC_NO_COMMUNICATION(含 PowerOff)。触发器包括 ComM_EcuM_PNCWakeUpIndication()ComM_EcuM_WakeUpIndication()ComM_RequestComMode()ComM_COMCbk()ComMPncPrepareSleepTimer 超时等。动作包括 BswM_ComM_CurrentPncMode() 通知、Com_SendSignal() 发送 PNC 位、通道 Full Communication Request / 释放等。

7.1.3.1 PNC 主状态 COMM_PNC_NO_COMMUNICATION 行为

[SWS_ComM_00926] ⌈ PNC 主状态 COMM_PNC_NO_COMMUNICATION 应为断电后的默认 PNC 状态。 ⌋()

只要 PNC 既未被 ECU 内部请求,也未被外部请求,主状态 COMM_PNC_NO_COMMUNICATION 即为目标状态。

[SWS_ComM_00931] ⌈ 若在 PNC 状态 COMM_PNC_NO_COMMUNICATION 下调用 API ComM_EcuM_WakeUpIndication(),且配置开关 ComMSynchronousWakeUp 设为 TRUE(见 ECUC_ComM_00695),则应离开 PNC 主状态 COMM_PNC_NO_COMMUNICATION,并进入 PNC 子状态 COMM_PNC_PREPARE_SLEEP。 ⌋()

[SWS_ComM_00990] ⌈ 若在 PNC 状态 COMM_PNC_NO_COMMUNICATION 下调用 API ComM_EcuM_WakeUpIndication(),且配置开关 ComMSynchronousWakeUp 设为 FALSE,则 PNC 主状态 COMM_PNC_NO_COMMUNICATION 应保持为当前状态。 ⌋()

[SWS_ComM_00964] ⌈ 若在 PNC 状态 PNC_NO_COMMUNICATION 下调用 API ComM_EcuM_PNCWakeUpIndication(<PNC>)(见 SWS_ComM_91001),则应离开 PNC 主状态 PNC_NO_COMMUNICATION,并进入 PNC 子状态 PNC_PREPARE_SLEEP。 ⌋()

[SWS_ComM_00932] ⌈ 在 PNC 主状态 COMM_PNC_NO_COMMUNICATION 下,当至少一个分配给此 PNC 的 ComMUser 请求"完全通信"时,应离开该状态,并进入主状态 COMM_PNC_FULL_COMMUNICATION 的子状态 COMM_PNC_REQUESTED。 ⌋()

[SWS_ComM_00933] ⌈ 在主状态 COMM_PNC_NO_COMMUNICATION 下,当 EIRA 中表示此 PNC 的至少一位变为 '1' 时,应离开主状态 COMM_PNC_NO_COMMUNICATION,并进入 COMM_PNC_READY_SLEEP。 ⌋()

[SWS_ComM_00934] ⌈ 在主状态 COMM_PNC_NO_COMMUNICATION 下,当某 ERAn 中表示此 PNC 的至少一位变为 '1' 时,若参数 ComMPncGatewayEnabledECUC_ComM_00840)等于 TRUE,应离开该主状态并进入子状态 COMM_PNC_REQUESTED。 ⌋()

7.1.3.2 进入 PNC 主状态 COMM_PNC_NO_COMMUNICATION(自 PowerOff)

[SWS_ComM_00927] ⌈ 电源接通后,应从 PowerOff 进入主状态 COMM_PNC_NO_COMMUNICATION。 ⌋()

7.1.3.3 PNC 主状态 COMM_PNC_FULL_COMMUNICATION 行为

[SWS_ComM_00929] ⌈ 分配给此 PNC 的所有 ComMChannels 应处于"完全通信"状态。 ⌋()

7.1.3.4 进入 PNC 子状态 COMM_PNC_REQUESTED

[SWS_ComM_00930] ⌈ 当进入 PNC 子状态 COMM_PNC_REQUESTEDComMPncGatewayEnabled = FALSE 时,应使用 Com_SendSignal(),为该 PNC 对应的、ComMPncComSignalDirection = "TX" 的 Com 信号中表示该 PNC 的位调用该 API,传入值 '1'。 ⌋()

[SWS_ComM_00992] ⌈ 当进入 PNC 子状态 COMM_PNC_REQUESTEDComMPncGatewayEnabled = TRUE 时,应使用 Com_SendSignal(),对与该 PNC 关联的所有 ComM 通道(ComMPncComSignalDirection = "TX"ComMPncGatewayType == COMM_GATEWAY_TYPE_ACTIVE)的 Com 信号中表示该 PNC 的位调用该 API,传入值 '1'。 ⌋()

[SWS_ComM_00993] ⌈ 每次从其他状态进入子状态 COMM_PNC_REQUESTED,ComM 都应为此 PNC 请求所有已配置 ComM 通道的 COMM_FULL_COMMUNICATION,即便该通道已被请求。 ⌋()

7.1.3.5 PNC 子状态 COMM_PNC_REQUESTED 行为

[SWS_ComM_00164] ⌈ 若 ComMPncGatewayEnabled == TRUE,且在进入 COMM_PNC_REQUESTED 时或处于其中,Com_SendSignal() 应以值 '1' 被调用,针对与该 PNC 关联的所有 ComM 通道(ComMPncComSignalDirection = "TX"ComMPncGatewayType == COMM_GATEWAY_TYPE_PASSIVE)的 Com 信号中表示该 PNC 的位,前提是:至少一个分配给此 PNC 的 ComM 用户请求"完全通信",或至少一个通过 Com_ReceiveSignal() 接收自某通道的 ComMPncComSignal(其 ComMPncComSignalDirection = "RX"ComMPncComSignalKind = "ERA" 且该通道的 ComMPncGatewayType = "COMM_GATEWAY_TYPE_ACTIVE")被设置为 '1'。 ⌋(SRS_ModeMgm_09243)

[SWS_ComM_00959] ⌈ 若 ComMPncGatewayEnabled == TRUE,在 COMM_PNC_REQUESTED 中,Com_SendSignal() 应以值 '0' 被调用,针对与该 PNC 关联的所有 ComM 通道(ComMPncComSignalDirection = "TX"ComMPncGatewayType == COMM_GATEWAY_TYPE_PASSIVE)的 Com 信号中表示该 PNC 的位,前提是:所有分配给此 PNC 的 ComM 用户请求"无通信",且所有通过 Com_ReceiveSignal() 接收自某通道的 ComMPncComSignals(其 ComMPncComSignalDirection = "RX"ComMPncComSignalKind = "ERA" 且该通道的 ComMPncGatewayType = "COMM_GATEWAY_TYPE_ACTIVE")均被设置为 '0'。 ⌋(SRS_ModeMgm_09243)

[SWS_ComM_00966] ⌈ 若 ComM0PncVectorAvoidance 设为 TRUE,且所有引用 ComMChannel 的信号被设为 '0'(因 SWS_ComM_00959),则 ComM 模块应释放该 ComMChannel。一旦至少一个信号被重新设为 '1',ComM 模块应再次请求该 ComMChannel。 ⌋()

[SWS_ComM_00938] ⌈ 当所有分配给此 PNC 的 ComMUsers 请求"无通信"时,若配置开关 ComMPncGatewayEnabled = FALSE,应离开子状态 COMM_PNC_REQUESTED,并进入子状态 COMM_PNC_READY_SLEEP。 ⌋()

[SWS_ComM_00991] ⌈ 当所有分配给此 PNC 的 ComMUsers 请求"无通信",且所有 ERAn 中 PNC 位均等于 0 时,若配置开关 ComMPncGatewayEnabled = TRUE,应离开子状态 COMM_PNC_REQUESTED,并进入子状态 COMM_PNC_READY_SLEEP。 ⌋()

7.1.3.6 进入 PNC 子状态 COMM_PNC_READY_SLEEP

[SWS_ComM_00960] ⌈ 当从 COMM_PNC_REQUESTED 进入 PNC 子状态 COMM_PNC_READY_SLEEP 时,Com_SendSignal() 应以值 '0' 被调用,针对分配给此 PNC 的所有 Com 信号中表示该 PNC 的位(ComMPncComSignalDirection = "TX")。 ⌋()

[SWS_ComM_00961] ⌈ 当从 COMM_PNC_REQUESTED 进入 PNC 子状态 COMM_PNC_READY_SLEEP 时,ComM 应释放此 PNC 的所有已配置 ComM 通道的 COMM_FULL_COMMUNICATION 请求。 ⌋()

7.1.3.7 PNC 子状态 COMM_PNC_READY_SLEEP 行为

只要 PNC 被请求(即 EIRA 中至少一个 PNC 位等于 '1')且无 ComMUser 分配给此 PNC 请求"完全通信",COMM_PNC_READY_SLEEP 将为当前状态。

[SWS_ComM_00940] ⌈ 若 PNC 被释放(即 EIRA 中所有 PNC 位均等于 '0'),应离开子状态 COMM_PNC_READY_SLEEP,并进入子状态 COMM_PNC_PREPARE_SLEEP。 ⌋()

[SWS_ComM_00165] ⌈ 在 PNC 子状态 COMM_PNC_READY_SLEEP 下,当至少一个 ComMUser 分配给此 PNC 请求"完全通信",或 ComMPncGatewayEnabledECUC_ComM_00887)等于 TRUE 且 ERAn 中表示此 PNC 的某位变为 '1' 时,应离开此状态,并进入子状态 COMM_PNC_REQUESTED。 ⌋(SRS_ModeMgm_09246, SRS_ModeMgm_09247, SRS_ModeMgm_09248)

7.1.3.8 进入 PNC 子状态 COMM_PNC_PREPARE_SLEEP

[SWS_ComM_00952] ⌈ 若进入子状态 COMM_PNC_PREPARE_SLEEP,定时器 ComMPncPrepareSleepTimer(见 ECUC_ComM_00841)应以配置的初始值启动。 ⌋()

7.1.3.9 PNC 子状态 COMM_PNC_PREPARE_SLEEP 行为

只要定时器 ComMPncPrepareSleepTimer(见 ECUC_ComM_00841)正在运行且 ComMUser、EIRA 或 ERAn 无变化,COMM_PNC_PREPARE_SLEEP 将为当前状态。

[SWS_ComM_00947] ⌈ 当定时器 ComMPncPrepareSleepTimer(见 ECUC_ComM_00841)到期时,应离开 PNC 子状态 COMM_PNC_PREPARE_SLEEP,并进入 PNC 主状态 COMM_PNC_NO_COMMUNICATION。 ⌋()

[SWS_ComM_00948] ⌈ 在 COMM_PNC_PREPARE_SLEEP 下,当至少一个 ComMUser 分配给此 PNC 请求"完全通信"时,应离开 COMM_PNC_PREPARE_SLEEP 状态。定时器 ComMPncPrepareSleepTimer 应停止,并进入子状态 COMM_PNC_REQUESTED。 ⌋()

[SWS_ComM_00950] ⌈ 在 COMM_PNC_PREPARE_SLEEP 下,当 EIRA 中至少一个 PNC 位变为 '1' 时,应离开 COMM_PNC_PREPARE_SLEEP 子状态。定时器 ComMPncPrepareSleepTimer 应停止,并进入子状态 COMM_PNC_READY_SLEEP。 ⌋()

[SWS_ComM_00951] ⌈ 在子状态 COMM_PNC_PREPARE_SLEEP 下,当 ERAn 中至少一个 PNC 位变为 '1',且参数 ComMPncGatewayEnabled = TRUE 时,应离开 COMM_PNC_PREPARE_SLEEP 子状态。定时器 ComMPncPrepareSleepTimer 应停止,并进入子状态 COMM_PNC_REQUESTED。 ⌋()

7.1.4 PNC 网关

[SWS_ComM_00981] ⌈ 若配置参数 ComMPncGatewayEnabled(见 ECUC_ComM_00840)为 TRUE,则默认网关类型应为主动(COMM_GATEWAY_TYPE_ACTIVE)。 ⌋()

7.1.4.1 主动 PNC 网关

:即便配置参数 ComMPncGatewayEnabled(见 ECUC_ComM_00840)为 TRUE,且某 ComMChannel 的 ComMPncGatewayType 设为 COMM_GATEWAY_TYPE_ACTIVE(见 ECUC_ComM_00842),主动 PNC 网关的行为仍如图 2 所示。

注释:系统通道上的主动 PNC 网关应为释放 PNC 的最后一个节点。若所有 ERAn 中某 PNC 的位均为 0,则除 PNC 网关外无其他节点请求该 PNC。

7.1.4.2 被动 PNC 网关

被协调的通道仅在连接多于一个 PNC 网关时存在。若启用了 ComM 的 PNC 网关功能(ComMPncGatewayEnabled = true),映射到此网关的 ComM 通道可设为主动或被动类型(COMM_GATEWAY_TYPE_ACTIVECOMM_GATEWAY_TYPE_PASSIVE)。若一 ComM 通道映射到两个不同的 PNC 网关,则仅一个网关主动协调此通道,另一网关被动协调。即 PNC 网关始终至少映射到一个主动类型 ComM 通道,并可映射到一个或多个被动类型 ComM 通道。

若本地 ComM 用户请求 PNC,或某被动 PNC 网关主动协调系统通道的 ERA 中 PNC 位不全为 0,则 PNC 网关请求该 PNC。

7.1.5 ComM 用户到 PNC 的关系

图 3 — 用户到部分网络与通道的映射用例:列出 7 种典型配置:1-普通 PN 配置、2-冗余配置、3-PN 网关用例 1、4-PN 网关用例 2、5-无 PN 配置、6-PN+EthIfSwitch 端口组经 BswM 控制、7-无 PN+EthIfSwitch 端口组经通道请求控制。

[SWS_ComM_00912] ⌈ 应可通过参数 ComMUserPerPnc(见 ECUC_ComM_00876)将可配置数量的 ComMUsers 映射到一个或多个 PNC。 ⌋()

[SWS_ComM_00994] ⌈ ComM 用户到 PNC 的分配不应受 BusNm 部分网络过滤配置的限制。 ⌋()

[SWS_ComM_00995] ⌈ 应可通过参数 ComMUserPerChannel 将可配置数量的 ComMUsers 映射到一个或多个 ComM 通道。 ⌋()

[SWS_ComM_00913] ⌈ 应可通过参数 ComMChannelPerPnc(见 ECUC_ComM_00880)将可配置数量的 PNC 映射到可配置数量的 ComM 通道。 ⌋()

[SWS_ComM_00996] ⌈ 不应将 ComMUsers 同时映射到 PNC 与已被该 PNC 引用的 ComM 通道(见图 3 用例 2)。 ⌋()

[SWS_ComM_CONSTR_00001] ⌈ 对于引用了至少一个 EthIfSwitchPortGroup 的 PNC(见图 3 用例 6),其引用的 ComM 通道不应再被任何 ComMUser 引用。配置工具应拒绝此类配置(错误)。此约束仅对控制以太网交换机的宿 ECU 有效。在其他用例中,ComMChannels 可同时被 PNC 与 ComMUsers 引用。 ⌋()

7.1.6 部分网络配置提示

通常,每个 PNCSignal 在链接到该 PNC 的 ComMChannels 上发送/接收。然而,这并非强制,也允许以下配置:

7.2 ComM 通道状态机

[SWS_ComM_00979] ⌈ 若启用可选的 PNC 功能(见 ECUC_ComM_00883),所有 PNC 相关动作应在执行通道相关动作之前完成。 ⌋()

[SWS_ComM_00980] ⌈ 若参数 ComMPncNmRequest = TRUE(见 ECUC_ComM_00886),因 PNC 状态机变化为 COMM_PNC_REQUESTED(见 SWS_COMM_00993)而请求"完全通信"时,应调用 API Nm_NetworkRequest(),即便当前状态已是"完全通信"。 ⌋()

[SWS_ComM_00051] ⌈ ComM 应为每个通信通道独立实现如图 4 所示的通道状态机,相关需求列于表 1。 ⌋(SRS_ModeMgm_09080)

理由:不同通道所需的通信能力可能不同,因此控制必须独立。

用例:在带 CAN 和 LIN 通道的 ECU 上,仅 LIN 需要完全通信来请求传感器值,而 CAN 保持非活动。

图 4 — ComM 通道状态机:3 个主状态(COMM_NO_COMMUNICATIONCOMM_SILENT_COMMUNICATIONCOMM_FULL_COMMUNICATION)与 4 个子状态(COMM_NO_COM_NO_PENDING_REQUESTCOMM_NO_COM_REQUEST_PENDINGCOMM_FULL_COM_NETWORK_REQUESTEDCOMM_FULL_COM_READY_SLEEP)。触发器包括 ComM_RequestComModeComM_DCM_ActiveDiagnosticComM_Nm_NetworkStartIndicationComM_Nm_BusSleepModeComM_Nm_PrepareBusSleepModeComM_BusSM_BusSleepModeComM_Nm_RestartIndicationComM_EcuM_WakeUpIndicationComM_EcuM_PNCWakeUpIndicationComMTMinFullComModeDurationComMLightTimeout、通信抑制请求等。

表 1 — 通道状态机状态/转换详细说明链接(节选)

状态 / 转换对应小节 / 需求
COMM_NO_COMMUNICATION§7.2.2;进入:SWS_ComM_00898, _00313, _00073, _00288COMM_NO_COM_NO_PENDING_REQUEST 子状态:SWS_ComM_00875, _00876, _00893, _00894, _00694, _01014, _01015COMM_NO_COM_REQUEST_PENDING 子状态:SWS_ComM_00895, _00897
COMM_SILENT_COMMUNICATION§7.2.3;进入:SWS_ComM_00071;状态中:SWS_ComM_00877, _00878, _00295, _00296
COMM_FULL_COMMUNICATION§7.2.4;进入:SWS_ComM_00069;状态中:SWS_ComM_00637, _00826
子状态 COMM_FULL_COM_NETWORK_REQUESTED§7.2.4.1;SWS_ComM_00869, _00870, _00665, _00888, _00889, _00890
子状态 COMM_FULL_COM_READY_SLEEP§7.2.4.2;进入:SWS_ComM_00133;状态中:SWS_ComM_00610, _00671, _00882, _00883

主要状态转换需求:

转换需求
COMM_NO_COMMUNICATION → COMM_FULL_COMMUNICATIONSWS_ComM_00893, _00894, _00694, _00875, _00876, _01014, _01015
COMM_FULL_COM_NETWORK_REQUESTED → COMM_FULL_COM_READY_SLEEPSWS_ComM_00665
COMM_FULL_COM_READY_SLEEP → COMM_FULL_COM_NETWORK_REQUESTEDSWS_ComM_00882, _00883
COMM_FULL_COMMUNICATION → COMM_SILENT_COMMUNICATIONSWS_ComM_00826
COMM_FULL_COM_READY_SLEEP → COMM_NO_COMMUNICATIONSWS_ComM_00610, _00671
COMM_FULL_COMMUNICATION → COMM_NO_COMMUNICATIONSWS_ComM_00637
COMM_SILENT_COMMUNICATION → COMM_FULL_COMMUNICATIONSWS_ComM_00877, _00878
COMM_SILENT_COMMUNICATION → COMM_FULL_COM_READY_SLEEPSWS_ComM_00296
COMM_SILENT_COMMUNICATION → COMM_NO_COMMUNICATIONSWS_ComM_00295

[SWS_ComM_00879] ⌈ ComM 通道状态机应由对应于通信模式的三个主状态组成:COMM_NO_COMMUNICATIONCOMM_SILENT_COMMUNICATIONCOMM_FULL_COMMUNICATION。 ⌋()

[SWS_ComM_00880]COMM_FULL_COMMUNICATION 状态应具有两个子状态 COMM_FULL_COM_NETWORK_REQUESTEDCOMM_FULL_COM_READY_SLEEP。 ⌋()

[SWS_ComM_00881]COMM_NO_COMMUNICATION 状态应具有两个子状态 COMM_NO_COM_REQUEST_PENDINGCOMM_NO_COM_NO_PENDING_REQUEST。 ⌋()

[SWS_ComM_00485] ⌈ 每个 ComM 通道状态机的默认状态应为 COMM_NO_COMMUNICATION。 ⌋()

[SWS_ComM_00896] ⌈ 每个 ComM 通道状态机应仅在子状态 COMM_NO_COM_REQUEST_PENDING 中根据 SWS_ComM_00884 评估其对应的 CommunicationAllowed 状态标志。 ⌋()

[SWS_ComM_00472] ⌈ 主状态变化(见 SWS_ComM_00879)应通过相应的通知(见 §8.6.1.5 与 §8.6.1.6)指示给用户。例外:初始化后的默认状态,见 SWS_ComM_00313。 ⌋()

7.2.1 ComM 被管理与管理通道

ComM 通道可引用其他 ComM 通道。引用关系可通过设置 ComMManageReference(见 ECUC_ComM_00893)进行配置。ComMManageReference 的源 ComM 通道称为"管理通道",目标 ComM 通道称为"被管理通道"。一个管理通道可引用 0..n 个被管理通道。一个被管理通道仅可被 0..1 个管理通道引用。

这用于支持以下用例:管理通道处理与 NM 模块的交互,而被管理通道没有 NM。

:对管理通道的限制:

对被管理通道的限制:

通信模式消息:发送消息:接收NM(COMM_NM_VARIANT=FULL)唤醒/重启能力
COMM_FULL_COMMUNICATION总线通信被请求N/A
COMM_SILENT_COMMUNICATION总线通信被释放用户/诊断请求 / 网络指示
COMM_NO_COMMUNICATION总线通信被释放用户/诊断请求 / 被动唤醒

表 2 — 各模式授予的通信能力

7.2.2 COMM_NO_COMMUNICATION 状态行为

[SWS_ComM_00898] ⌈ 进入状态 COMM_NO_COMMUNICATION 时,ComM 通道状态机应进入子状态 COMM_NO_COM_NO_PENDING_REQUEST。 ⌋()

[SWS_ComM_00313] ⌈ 在初始化后默认进入状态 COMM_NO_COMMUNICATION 时,ComM 模块不应通过 RTE 或 BswM 向用户指示该模式变化。 ⌋()

理由:此时 RTE 尚未初始化。

[SWS_ComM_00073] ⌈ 进入状态 COMM_NO_COMMUNICATION 时,ComM 通道状态机应关闭发送与接收能力。这通过 ComM 通道状态机向总线状态管理器模块请求相应通信模式(XXSM_RequestComMode(network:=<channel state machine's network>, mode:= COMM_NO_COMMUNICATION, see SWS_ComM_00829))来实现。 ⌋()

[SWS_ComM_00288] ⌈ 进入状态 COMM_NO_COMMUNICATION 且配置参数 ComMNmVariant=FULL(见 ECUC_ComM_00568)时,ComM 模块应向 NM 模块请求释放网络,Nm_NetworkRelease()。 ⌋()

COMM_NO_COM_NO_PENDING_REQUEST 子状态

[SWS_ComM_00875] ⌈ 在子状态 COMM_NO_COM_NO_PENDING_REQUEST 下,用户请求 COMM_FULL_COMMUNICATION 且通信限制被禁用(见 §7.3.1)时,ComM 通道状态机应立即切换至子状态 COMM_NO_COM_REQUEST_PENDING。若被请求的 ComM 通道是一个未被 ComMPnc 引用的被管理通道,则引用它的管理通道的 ComM 通道状态机也应请求 COMM_FULL_COMMUNICATION。 ⌋(SRS_ModeMgm_09087)

[SWS_ComM_00876] ⌈ 在子状态 COMM_NO_COM_NO_PENDING_REQUEST、配置参数 ComMNmVariant=FULL|LIGHT|NONE(见 ECUC_ComM_00568)且 DCM 指示 ComM_DCM_ActiveDiagnostic(见 SWS_ComM_00873)时,ComM 通道状态机应立即切换至子状态 COMM_NO_COM_REQUEST_PENDING。 ⌋()

[SWS_ComM_00893] ⌈ 在子状态 COMM_NO_COM_NO_PENDING_REQUEST 下调用 ComM_EcuM_WakeUpIndication,且配置参数 ComMSynchronousWakeUp=FALSE(见 ECUC_ComM_00695)时,ComM 模块应将所指示 ComM 通道状态机切换至子状态 COMM_NO_COM_REQUEST_PENDING。若所指示的 ComM 通道是被管理通道,则引用它的管理通道(见 ECUC_ComM_00893)的 ComM 通道状态机也应切换至子状态 COMM_NO_COM_REQUEST_PENDING。 ⌋(SRS_ModeMgm_09087)

[SWS_ComM_00894] ⌈ 在子状态 COMM_NO_COM_NO_PENDING_REQUEST 下,NM 模块指示重启(ComM_Nm_RestartIndication()SWS_ComM_00792),ComM 通道状态机应立即切换至子状态 COMM_NO_COM_REQUEST_PENDING。 ⌋(SRS_ModeMgm_09087)

[SWS_ComM_00694] ⌈ 在子状态 COMM_NO_COM_NO_PENDING_REQUEST 下调用 ComM_EcuM_WakeUpIndication,且配置参数 ComMSynchronousWakeUp=TRUEECUC_ComM_00695)时,ComM 模块应将所有 ComM 通道状态机切换至子状态 COMM_NO_COM_REQUEST_PENDING。 ⌋(SRS_ModeMgm_09248)

[SWS_ComM_01014] ⌈ 在子状态 COMM_NO_COM_NO_PENDING_REQUEST 下调用 ComM_EcuM_PNCWakeUpIndication(<PNC>)(见 SWS_ComM_91001),且配置参数 ComMSynchronousWakeUp=FALSEECUC_ComM_00695)、ComMPncSupport=TRUEECUC_ComM_00839)时,ComM 模块应将被该 PNC 引用的 ComM 通道状态机切换至子状态 COMM_NO_COM_REQUEST_PENDING。 ⌋(SRS_ModeMgm_09248)

[SWS_ComM_01015] ⌈ 在子状态 COMM_NO_COM_NO_PENDING_REQUEST 下调用 ComM_EcuM_PNCWakeUpIndication(<PNC>)(见 SWS_ComM_91001),且配置参数 ComMSynchronousWakeUp=TRUEECUC_ComM_00695)、ComMPncSupport=TRUEECUC_ComM_00839)时,ComM 模块应将所有 ComM 通道状态机切换至子状态 COMM_NO_COM_REQUEST_PENDING。 ⌋(SRS_ModeMgm_09248)

COMM_NO_COM_REQUEST_PENDING 子状态

[SWS_ComM_00895] ⌈ 在子状态 COMM_NO_COM_REQUEST_PENDING 中,ComM 通道状态机应评估其对应的 CommunicationAllowed 标志(按 SWS_ComM_00884SWS_ComM_00885 存储与设置)。若评估为 CommunicationAllowed=TRUE,则 ComM 通道状态机应立即切换至状态 COMM_FULL_COMMUNICATION。 ⌋()

[SWS_ComM_00897] ⌈ 在子状态 COMM_NO_COM_REQUEST_PENDING 中且不再有对 COMM_FULL_COMMUNICATION 的有效挂起请求时,ComM 通道状态机应切换回默认子状态 COMM_NO_COM_NO_PENDING_REQUEST。管理通道仅在其所有被引用的被管理通道(见 ECUC_ComM_00893,且未被 ComMPnc 引用)也不再具有对 COMM_FULL_COMMUNICATION 的有效挂起请求时才可切换回默认子状态。 ⌋()

7.2.3 COMM_SILENT_COMMUNICATION 状态行为

[SWS_ComM_00071] ⌈ 进入状态 COMM_SILENT_COMMUNICATION 时,ComM 通道状态机应关闭发送能力(保持接收能力开启)。这通过 ComM 通道状态机向总线状态管理器模块请求相应通信模式(XXSM_RequestComMode(network:=<channel state machine's network>, mode:= COMM_SILENT_COMMUNICATION, SWS_ComM_00829))实现。 ⌋()

用例:通过 NM 模块进行关机协调(准备总线休眠状态)。

[SWS_ComM_00877] ⌈ 在状态 COMM_SILENT_COMMUNICATION 下,用户请求 COMM_FULL_COMMUNICATION 且通信限制被禁用(见 §7.3.1)时,ComM 通道状态机应切换至状态 COMM_FULL_COMMUNICATION。 ⌋()

[SWS_ComM_00878] ⌈ 在状态 COMM_SILENT_COMMUNICATION、配置参数 ComMNmVariant=FULL|LIGHT|NONEECUC_ComM_00568)且 DCM 指示 ComM_DCM_ActiveDiagnosticSWS_ComM_00873)时,ComM 通道状态机应切换至状态 COMM_FULL_COMMUNICATION。 ⌋()

[SWS_ComM_00295] ⌈ 在状态 COMM_SILENT_COMMUNICATION 下,NM 模块指示 ComM_Nm_BusSleepMode()SWS_ComM_00392),ComM 通道状态机应切换至状态 COMM_NO_COMMUNICATION。 ⌋()

[SWS_ComM_00296] ⌈ 在状态 COMM_SILENT_COMMUNICATION 下,NM 模块指示 ComM_Nm_NetworkMode()SWS_ComM_00390),ComM 通道状态机应切换至状态 COMM_FULL_COMMUNICATION 并进入子状态 COMM_FULL_COM_READY_SLEEP。 ⌋()

7.2.4 COMM_FULL_COMMUNICATION 状态行为

[SWS_ComM_00899] ⌈ 进入状态 COMM_FULL_COMMUNICATION 时,ComM 通道状态机应进入子状态 COMM_FULL_COM_NETWORK_REQUESTED,除非转换中明确指定了其他子状态。 ⌋()

[SWS_ComM_00069] ⌈ 进入状态 COMM_FULL_COMMUNICATION 时,ComM 通道状态机应打开发送与接收能力。这通过 ComM 通道状态机向总线状态管理器模块请求相应通信模式(XXSM_RequestComMode(network:=<channel state machine's network>, mode:= COMM_FULL_COMMUNICATION, SWS_ComM_00829))实现。 ⌋()

[SWS_ComM_00637] ⌈ 在状态 COMM_FULL_COMMUNICATION 下,NM 模块指示 ComM_Nm_BusSleepMode()SWS_ComM_00392),ComM 通道状态机应切换至状态 COMM_NO_COMMUNICATION。 ⌋()

[SWS_ComM_01018] ⌈ 在状态 COMM_FULL_COMMUNICATION 且配置参数 ComMNmVariant=LINSLAVE 下,总线状态管理器模块指示 ComM_BusSm_BusSleepMode()(见 SWS_ComM_91000),ComM 通道状态机应切换至状态 COMM_NO_COMMUNICATION。 ⌋()

[SWS_ComM_00826] ⌈ 在 COMM_FULL_COMMUNICATION 下,配置参数 ComMNmVariant=FULL|PASSIVEECUC_ComM_00568)且 NM 模块指示 ComM_Nm_PrepareBusSleepMode()SWS_ComM_00391),ComM 状态机应切换至状态 COMM_SILENT_COMMUNICATION。 ⌋()

7.2.4.1 COMM_FULL_COM_NETWORK_REQUESTED 子状态

[SWS_ComM_00886] ⌈ 进入子状态 COMM_FULL_COM_NETWORK_REQUESTED 且配置参数 ComMNmVariant=LIGHT|NONEECUC_ComM_00568)时,ComMTMinFullComModeDurationECUC_ComM_00557)的定时器应启动。 ⌋()

[SWS_ComM_00665] ⌈ 从 COMM_NO_COM_REQUEST_PENDING 进入子状态 COMM_FULL_COM_NETWORK_REQUESTED,且 EcuM 模块已通过 ComM_EcuM_WakeUpIndication(<channel>)SWS_ComM_00275)或 ComM_EcuM_PNCWakeUpIndication(<PNC>)SWS_ComM_91001)指示唤醒时,ComM 模块应向 NM 请求 Nm_PassiveStartup(<channel>)。若指示的 ComM 通道是被管理通道,则 ComM 模块应向 NM 请求 Nm_PassiveStartup(<referencing managing channel>)ECUC_ComM_00893)。 ⌋()

[SWS_ComM_01016] ⌈ 若指示的 ComM 通道是被管理通道,ComM 模块应向 NM 请求 Nm_PassiveStartup(<referencing managing channel>)ECUC_ComM_00893)。 ⌋()

[SWS_ComM_00902] ⌈ 进入子状态 COMM_FULL_COM_NETWORK_REQUESTED 且 NM 模块指示重启 ComM_Nm_RestartIndication(<channel>)SWS_ComM_00792)时,ComM 模块应向 NM 请求 Nm_PassiveStartup(<channel>)。 ⌋()

[SWS_ComM_00903] ⌈ 进入子状态 COMM_FULL_COM_NETWORK_REQUESTED 且 NM 模块指示网络启动 ComM_Nm_NetworkStartIndication(<channel>)SWS_ComM_00383)时,ComM 模块应向 NM 请求 Nm_PassiveStartup(<channel>)。 ⌋()

注释:这不是向 COMM_FULL_COMMUNICATION 的"正常"转换,ComM 将 ComM_Nm_NetworkStartIndication() 视为"竞态条件"错误(见 §7.6.1)。

[SWS_ComM_00869] ⌈ 从其他状态或子状态进入子状态 COMM_FULL_COM_NETWORK_REQUESTED 时,若配置参数 ComMNmVariant=FULLECUC_ComM_00568)且有用户请求 ComM_RequestComMode(<user>, COMM_FULL_COMMUNICATION)SWS_ComM_00110),ComM 模块应为相应的 NM 通道向 NM 请求 Nm_NetworkRequest(<channel>)。 ⌋(SRS_ModeMgm_00049)

:此外,由于 SWS_ComM_00980,可能还会调用 Nm_NetworkRequest

[SWS_ComM_00870] ⌈ 进入子状态 COMM_FULL_COM_NETWORK_REQUESTED,若配置参数 ComMNmVariant=FULLECUC_ComM_00568)且 DCM 已指示 ComM_DCM_ActiveDiagnostic(<channel>)SWS_ComM_00873),ComM 模块应为相应的 NM 通道向 NM 请求 Nm_NetworkRequest(<channel>)。 ⌋(SRS_ModeMgm_00049)

[SWS_ComM_00889] ⌈ 在子状态 COMM_FULL_COM_NETWORK_REQUESTED 且配置参数 ComMNmVariant=LIGHT|NONEECUC_ComM_00568)下,若定时器 ComMTMinFullComModeDurationECUC_ComM_00557)已到期,且无用户请求 ComM_RequestComMode(<user>, COMM_FULL_COMMUNICATION),DCM 也未指示 ComM_DCM_ActiveDiagnostic(<channel>)SWS_ComM_00873),则 ComM 通道状态机应切换至子状态 COMM_FULL_COM_READY_SLEEP。若该通道是管理通道,则仅在其所有未被 ComMPnc 引用的被管理通道也无 ComM_RequestComMode(<user>, COMM_FULL_COMMUNICATION) 请求时才可切换。 ⌋()

理由:使用 AUTOSAR NM 时无需定时器,以避免冗余功能,因为 AUTOSAR NM 已确保此功能。

[SWS_ComM_01017] ⌈ 在子状态 COMM_FULL_COM_NETWORK_REQUESTED 且配置参数 ComMNmVariant=LINSLAVEECUC_ComM_00568)下,且无用户请求 ComM_RequestComMode(<user>, COMM_FULL_COMMUNICATION),则 ComM 通道状态机应切换至子状态 COMM_FULL_COM_READY_SLEEP。 ⌋()

[SWS_ComM_00915] ⌈ 在子状态 COMM_FULL_COM_NETWORK_REQUESTED 且配置参数 ComMNmVariant=PASSIVEECUC_ComM_00568)下,ComM 通道状态机应切换至子状态 COMM_FULL_COM_READY_SLEEP。 ⌋()

[SWS_ComM_00890] ⌈ 在子状态 COMM_FULL_COM_NETWORK_REQUESTED,且 DCM 未指示 ComM_DCM_ActiveDiagnostic(<channel>)SWS_ComM_00873),并请求了通信限制(见 §7.3.1)时,ComM 通道状态机应立即切换至子状态 COMM_FULL_COM_READY_SLEEP,并取消 ComMTMinFullComModeDuration 定时器。 ⌋()

7.2.4.2 COMM_FULL_COM_READY_SLEEP 子状态

[SWS_ComM_00133] ⌈ 进入子状态 COMM_FULL_COM_READY_SLEEP 且配置参数 ComMNmVariant=FULLECUC_ComM_00568)时,ComM 模块应为相应 NM 通道向 NM 请求 Nm_NetworkRelease()。 ⌋()

[SWS_ComM_00891] ⌈ 进入子状态 COMM_FULL_COM_READY_SLEEP 且配置参数 ComMNmVariant=LIGHTECUC_ComM_00568)时,应启动 ComMNmLightTimeoutECUC_ComM_00606)的定时器。 ⌋()

[SWS_ComM_00610] ⌈ 在子状态 COMM_FULL_COM_READY_SLEEP 且配置参数 ComMNmVariant=LIGHTECUC_ComM_00568)下,若定时器 ComMNmLightTimeoutECUC_ComM_00606)已到期,则 ComM 通道状态机应切换至状态 COMM_NO_COMMUNICATION。 ⌋()

[SWS_ComM_00671] ⌈ 在子状态 COMM_FULL_COM_READY_SLEEP 且配置参数 ComMBusType=COMM_BUS_TYPE_INTERNALECUC_ComM_00567)下,ComM 通道状态机应立即切换至状态 COMM_NO_COMMUNICATION。 ⌋()

[SWS_ComM_00882] ⌈ 在子状态 COMM_FULL_COM_READY_SLEEP 下,用户请求 COMM_FULL_COMMUNICATION 且通信限制被禁用(见 §7.3.1)时,ComM 通道状态机应立即切换至子状态 COMM_FULL_COM_NETWORK_REQUESTED。若受影响的 ComM 通道是被管理通道,则引用它的管理通道(见 ECUC_ComM_00893)的 ComM 通道状态机也应立即切换至子状态 COMM_FULL_COM_NETWORK_REQUESTED。 ⌋()

[SWS_ComM_00883] ⌈ 在子状态 COMM_FULL_COM_READY_SLEEP、配置参数 ComMNmVariant=FULL|LIGHT|NONEECUC_ComM_00568)下,且 DCM 指示 ComM_DCM_ActiveDiagnosticSWS_ComM_00873),则 ComM 通道状态机应切换至子状态 COMM_FULL_COM_NETWORK_REQUESTED。 ⌋()

理由:活动诊断会话期间,潜在的通信限制(见 §7.3.1)应暂时失效,见 SWS_ComM_00182

[SWS_ComM_00892] ⌈ 在子状态 COMM_FULL_COM_READY_SLEEP 且配置参数 ComMNmVariant=LIGHTECUC_ComM_00568)下,由于 SWS_ComM_00882SWS_ComM_00883 的要求切换到子状态 COMM_FULL_COM_NETWORK_REQUESTED 时,ComMNmLightTimeoutECUC_ComM_00606)的定时器应取消。 ⌋()

7.3 扩展功能

[SWS_ComM_00470] ⌈ 本章描述的扩展功能应在运行时按功能逐个可配置(例如:启用唤醒抑制但禁用限制为无通信)。 ⌋()

用例:通过诊断更改唤醒抑制。

注释:可通过参数 ComMEcuGroupClassification(见 ECUC_ComM_00563)配置。

7.3.1 通信抑制

  1. 模式抑制的目的是限制通信能力。详见 §7.3.1.1 与 §7.3.1.2。
  2. 以下参数与通信抑制相关,并与下述 API 相关联:
    - ComMNoCom:模式抑制的"请求位"(限制为 NoCom),可通过 ComM_LimitChannelToNoComMode()ComM_LimitECUToNoComMode() 控制,仅当 ComMEcuGroupClassification 启用此功能时(见 ECUC_ComM_00563SWS_ComM_00163SWS_ComM_00124)。
    - ComMNoWakeup:模式抑制的"请求位"(唤醒抑制),可通过 ComM_PreventWakeUp() 控制,仅当 ComMEcuGroupClassification 启用此功能时(见 ECUC_ComM_00563SWS_ComM_00156)。
    - ComMEcuGroupClassification:模式抑制行为的"掩码位",可通过 ComM_SetECUGroupClassification() 控制,与 ComMNoComComMNoWakeup 的值无关。

[SWS_ComM_00301] ⌈ ComM 模块应提供接口以请求和释放相应的模式抑制。 ⌋()

注释:ComM 模块不关心谁请求模式抑制,但请求者并非"普通"SW-C,而是特权 SW-C 或 OEM 特定的 BSW。

[SWS_ComM_00488] ⌈ 应能为每个通道(通道状态机)独立启用和禁用模式抑制。此功能不应由 ComM 模块自身使用。 ⌋()

[SWS_ComM_00839] ⌈ ComM 模块应存储用户请求的状态。 ⌋()

[SWS_ComM_00840] ⌈ ComM 模块应在活动模式抑制期间用户释放请求时,存储用户请求的更新状态。 ⌋()

理由:当抑制被禁用时,用户请求应被授予。

[SWS_ComM_00182] ⌈ 通信抑制应在活动诊断会话期间暂时失效。 ⌋()

理由:在活动诊断会话期间,ECU 不能进入休眠。

注释:DCM 通过 ComM_DCM_ActiveDiagnostic(<channel>)SWS_ComM_00873)指示诊断会话开始,通过 ComM_DCM_InactiveDiagnostic(<channel>)SWS_ComM_00874)指示结束。

7.3.1.1 总线唤醒抑制

在 ComM 模块上下文中,总线唤醒抑制意味着 ComM 模块应采取预防措施,避免通过启动通信唤醒其他 ECU。

理由:应避免通过通信唤醒其他 ECU,因为通常认为 ECU 唤醒总线是由错误引起的(如传感器损坏)。

用例:在主动唤醒线路的信号路径上检测到错误,该不可靠的唤醒源应不再能唤醒整个系统。控制错误响应的 SW-C 可设置相关通信通道的唤醒抑制状态,作为该事件的后果。从而在系统范围内避免基于不可靠唤醒事件的通信转发。或在应用特定的系统控制中,存在应在如运输模式等条件下通过通信关闭系统范围的唤醒转发的 SW-C。

[SWS_ComM_00302] ⌈ 总线唤醒抑制应通过忽略用户请求来执行。 ⌋(SRS_ModeMgm_09089)

注释:忽略用户请求意味着接受请求但不执行(由于模式抑制)。一旦模式抑制被关闭,"最高胜出"策略立即生效(见 SWS_ComM_00839SWS_ComM_00840)。

[SWS_ComM_00218] ⌈ 若 ComM 抑制状态 ComMNoWakeup=TRUEECUC_ComM_00569)对相应通道生效,且通道当前状态为 COMM_NO_COMMUNICATIONCOMM_SILENT_COMMUNICATION,则用户的通信请求(COMM_FULL_COMMUNICATION)应被抑制。 ⌋()

理由:若抑制状态被设置但通信通道已处于活动状态,则抑制不应激活。

[SWS_ComM_00219] ⌈ 若当前通信状态为 COMM_FULL_COMMUNICATION,则抑制不应激活。 ⌋()

理由:若当前通信状态为 COMM_FULL_COMMUNICATION,总线已处于唤醒状态。

[SWS_ComM_00066] ⌈ ComM 模块永远不应抑制"被动唤醒"能力。 ⌋()

理由:必须始终能够响应 EcuM 模块指示的总线唤醒。

注释:在 COMM_NO_COMMUNICATION 模式下接收被关闭,但唤醒能力是开启的。

[SWS_ComM_00157]ComMNoWakeup 状态必须以非易失方式存储。 ⌋()

理由:信息在启动期间、通信活动之前必须可用(在进入"完全通信"模式之前)。改变或查询只能在启动后且通信活动时进行(通常决定抑制是否激活的"主机"不在同一 ECU 上)。

[SWS_ComM_00625] ⌈ 当用户释放请求时,用户请求的状态也应被更新。 ⌋()

7.3.1.2 限制为 COMM_NO_COMMUNICATION 模式

[SWS_ComM_00303] ⌈ ComM 模块应通过切换至 COMM_FULL_COM_READY_SLEEP 状态以启动关机(即使存在对 COMM_FULL_COMMUNICATION 模式的用户请求,并忽略新的 COMM_FULL_COMMUNICATION 模式请求),以执行限制为 COMM_NO_COMMUNICATION 模式。 ⌋(SRS_ModeMgm_09071)

理由:强制进入 COMM_NO_COMMUNICATION 模式是关闭使总线保持唤醒的软件组件所必需的。

[SWS_ComM_00355] ⌈ 在进入"无通信"模式后,若已配置(ComMResetAfterForcingNoComm=TRUE),ComM 应通过调用 BswM_ComM_InitiateReset() 强制 ECU 复位。 ⌋()

理由:假定有故障的用户在不重新初始化的情况下不会释放其"完全通信"请求。保持"完全通信"请求激活会导致网络关机与启动之间的反复切换。

用例:假定有故障的 ECU 保持总线唤醒。作为后果,"网络主控"决定强制所有 ECU 进入休眠。

[SWS_ComM_00841] ⌈ ComM 模块仅应在当前状态为 COMM_FULL_COM_NETWORK_REQUESTED 时执行限制为 COMM_NO_COMMUNICATION 模式。 ⌋()

SWS_COMM_00841 仅指状态机转换。这意味着其他动作(如由于限制为 COMM_NO_COMMUNICATION 而更新抑制状态)应始终执行,与当前状态无关。

[SWS_ComM_00842] ⌈ ComM 模块应忽略除 COMM_FULL_COM_NETWORK_REQUESTED 之外的其他状态下的限制为 COMM_NO_COMMUNICATION 请求。 ⌋()

SWS_COMM_00841SWS_COMM_00842 描述了本地 ComM 用户为特定 ComM 通道请求 FULL_COM(主动请求)时的行为。这意味着仅当通道被主动请求时才执行限制为 COMM_NO_COMMUNICATION。若 ComM 通道因被动唤醒而远程保持唤醒,则不应执行限制为无通信。

[SWS_ComM_00215] ⌈ 若 ComM 抑制 ComMNoCom=TRUEECUC_ComM_00571)对相应通道生效,则应忽略通道 X 的所有活动用户请求,以保证通道 X 进入 COMM_NO_COMMUNICATION 状态。 ⌋()

[SWS_ComM_00582] ⌈ 在属于相应用户的所有通道进入 COMM_NO_COMMUNICATION 模式后,ComM 模块应清除用户请求。 ⌋()

理由:必须清除假定使总线保持唤醒的存储(有故障的)用户请求。

[SWS_ComM_00583] ⌈ ComM 模块应在初始化期间从 ComMNoComECUC_ComM_00571)重载 ComM 抑制状态的默认值。 ⌋()

注释:每通道的当前 ComMNoCom 状态不应持久存储。SWS_ComM_00582 描述了已执行模式限制后的期望行为。

7.4 总线通信管理

[SWS_ComM_00402] ⌈ ComM 模块应使用总线状态管理器模块的相应接口来控制通信能力。 ⌋()

[SWS_ComM_00664] ⌈ 若配置参数 ComMBusType=COMM_BUS_TYPE_INTERNALECUC_ComM_00567),ComM 模块应省略控制通信能力的调用。 ⌋(SRS_ModeMgm_09168)

理由:内部通信没有相应的总线接口。

7.5 网络管理依赖

[SWS_ComM_00599] ⌈ ComM 模块应支持通过 ComMNmVariantECUC_ComM_00568)配置的关机同步变体:LIGHTLINSLAVEPASSIVEFULL,详见表 3。 ⌋()

注释:仅 FULLPASSIVE 变体可保证网络上所有节点间的同步关机。需注意,由于 NmIf 在所有网络都准备好休眠前不能启动协调网络的同步关机,因此 ComM 在这些协调总线上向 NmIf 请求释放网络通信时,NmIf 将予以考虑但不会总是直接响应。NmIf 仍会以 E_OK 应答,但网络要等到所有协调网络都准备好休眠后才会释放。

NM 变体保持总线唤醒能力关机同步
NONE无(通过切断 ECU 电源实现关机)无 ComM 同步关机
LINSLAVE无(但 LIN 状态管理器重启唤醒重复)由 LIN 主节点同步
LIGHT通过定时器(ComMNmLightTimeoutECUC_ComM_00606)实现 ComM 同步关机通过定时器
PASSIVEECU 不允许保持总线唤醒通过 AUTOSAR NM 实现 ComM 同步关机
FULLECU 允许保持总线唤醒通过 AUTOSAR NM 实现 ComM 同步关机

表 3 — 通信管理器模块支持的网络管理变体

注释:使用 LIGHT 变体时无法实现同步关机,因此 ECU 可能由于来自稍后关机的节点的消息而不断重启("反复切换")。

[SWS_ComM_00602] ⌈ 若配置参数 ComMNmVariant=LIGHT|LINSLAVE|NONEECUC_ComM_00568),ComM 模块应省略 NM 服务的调用。 ⌋()

理由:若无可用的 NM,NM 服务不可用。

[SWS_ComM_00667] ⌈ 若配置参数 ComMNmVariant=PASSIVEECUC_ComM_00568),ComM 模块应省略调用 NM 的 Nm_NetworkRequest()。 ⌋()

理由:服务 Nm_NetworkRequest() 不可用。

7.6 总线错误管理

7.6.1 网络启动指示

[SWS_ComM_00583] ⌈ 若 NM 指示 ComM_Nm_NetworkStartIndication(<channel X>)CommunicationAllowed 标志设为 TRUE,则 ComM 模块应将通道 X 切换至 COMM_FULL_COMMUNICATION。 ⌋()

用例:一节点在"准备总线休眠"状态下发送 NM 消息,但其他节点因"竞态条件"已处于"总线休眠"状态。

7.7 测试支持需求

7.7.1 抑制完全通信请求计数器

[SWS_ComM_00138] ⌈ ComM 模块应为所有被拒绝的 COMM_FULL_COMMUNICATION 模式请求提供一个抑制计数器。它应计数因系统抑制通信模式而无法满足的用户请求。 ⌋(SRS_ModeMgm_09155)

理由:该计数器用于检测与无故唤醒通信总线相关的潜在软件问题。

[SWS_ComM_00140] ⌈ 所有被拒绝的 COMM_FULL_COMMUNICATION 模式请求的抑制计数器(SWS_ComM_00138)应存储于非易失存储器中。 ⌋()

[SWS_ComM_00141] ⌈ 所有被拒绝的 COMM_FULL_COMMUNICATION 模式请求的抑制计数器(SWS_ComM_00138)的范围应为 0 至 65535。 ⌋()

[SWS_ComM_00142] ⌈ 所有被拒绝的 COMM_FULL_COMMUNICATION 模式请求的抑制计数器(SWS_ComM_00138)应在达到最大值时停止递增。 ⌋()

[SWS_ComM_00143] ⌈ 应能通过 ComM 模块的 API 调用读出和复位所有被拒绝的 COMM_FULL_COMMUNICATION 模式请求的抑制计数器(SWS_ComM_00138)值。 ⌋()

用例:应能通过诊断服务读出和复位计数器的当前状态。

7.8 错误分类

7.8.1 开发错误

[SWS_ComM_00234] ⌈ ComM 模块应使用表 4 中的错误码报告错误:

错误类型相关性相关错误码十六进制值
API 服务在模块未初始化时被使用开发COMM_E_UNINIT0x1
API 服务在参数错误时被使用开发COMM_E_WRONG_PARAMETERS0x2
API 服务在 null 指针时被使用开发COMM_E_PARAM_POINTER0x3
初始化失败开发COMM_E_INIT_FAILED0x4

⌋(SRS_BSW_00323, SRS_BSW_00327, SRS_BSW_00337, SRS_BSW_00385, SRS_BSW_00386)

[SWS_ComM_00612] ⌈ 若 ComM 未初始化,除 ComM_Init()(见 SWS_ComM_00146)、ComM_GetVersionInfo()(见 SWS_COMM_00370)和 ComM_GetStatus()(见 SWS_COMM_00242)外的所有 ComM 模块及 API 服务:
- 不应执行其正常操作,
- 若具有标准返回类型,则应返回 E_NOT_OK。 ⌋(SRS_BSW_00406)

[SWS_ComM_00858] ⌈ 若由 ComMDevErrorDetectECUC_ComM_00555)启用开发错误检测:函数应检查此前是否已调用 ComM_Init 服务。若检查失败,函数应抛出开发错误 COMM_E_UNINIT,否则(在 DET 禁用时)返回 E_NOT_OK。 ⌋(SRS_BSW_00406)

7.8.2 运行时错误

无运行时错误。

7.8.3 瞬态故障

无瞬态故障。

7.9 非功能需求

[SWS_ComM_00459] ⌈ 应能将 ComM 模块作为源代码或目标代码集成到 AUTOSAR 栈中。

理由

⌋(SRS_BSW_00342)

7.10 通信管理器模块服务

本章定义通信管理器模块服务(ComM)的 AUTOSAR 接口。

7.10.1 架构

图 5 — 通信管理器模块的 ARPackage:ComM 服务包包含 Communication Manager(向 SW-C 提供 ComM_UserRequest、ComM_CurrentMode、ComM_ChannelWakeup、ComM_ChannelLimitation、ComM_ECUModeLimitation、ComM_CurrentChannelRequest 等端口)。

7.10.2 使用场景

7.10.2.1 SW-C 完全不关心 ComM 模块

不关心通信管理器模块的 SW-C 不需要 ComM 模块 ARPackage 中定义的任何接口。

7.10.2.2 SW-C 仅关心其通信系统的状态

在此用例中,SW-C 想知道它具有什么通信能力(以"无"、"静默"或"完全"通信模式表示,见 ComM_ModeType)。SW-C 通过定义一个需要 ComM_ GetCurrentComMode 接口的端口来获取这些信息。ComM 必须正确配置(例如该 SW-C 用于其逻辑通信的物理通道),使其拥有一个将当前通信模式信息提供给 SW-C 的端口。

图 6 — SW-C 向 ComM 请求状态变化:ComM 提供 ComM_CurrentMode,SW-C require 同一接口。

7.10.2.3 SW-C 明确希望影响其通信状态

图 7 — SW-C 触发 ComM 内状态变化并读取当前通信状态:ComM 提供 ComM_RequestModeComM_CurrentMode,SW-C require 这两个接口。

SW-C 通过特定端口显式影响其所需物理通道的通信状态。通过该端口,SW-C 可向 ComM 请求"无通信"或"完全通信"模式。ComM 将使用这些调用向相应总线状态管理器模块请求相应通信模式。

[SWS_ComM_00848] ⌈ 通信管理器模块应提供一个 AUTOSAR 端口,以允许通过调用 ComM_RequestComMode(见 SWS_ComM_00110)来请求通信模式。 ⌋()

对于使用 RTE "direct API" 的 SW-C,示例代码展示了典型的请求序列:

MySW-C_Runnable_Init(self)
{
  // SW-C wants to send and receive data
  e = Rte_Call_comRequest_RequestComMode(COMM_FULL_COMMUNICATION);
  if (e == RTE_E_OK)
  {
    // 成功请求 ComM 进入完全通信模式
  }
  else
  {
    if (e == E_MODE_LIMITATION)
    {
      // 当前 ComMMode 限制禁止进入该模式
      Rte_Call_comRequest_GetMaxComMode(&max);
      if (max == COMM_NO_COMMUNICATION) { ... };
    }
    ...
  }
}

MySW-C_Runnable_Loop(self)
{
  if (status == ready_to_sleep)
  {
    Rte_Call_comRequest_RequestComMode(COMM_NO_COMMUNICATION);
  }
}

注释:这些 API 不要求 SW-C 了解其所需的通道。

7.10.2.4 SW-C 想要直接与物理通道交互以激活 ECU 模式限制

SW-C 应向 BswM 请求模式。BswM 将处理与 ComM 的直接通信。

图 8 — BswM 与 ComM 模块的交互:ComM 提供 ComM_ChannelWakeupComM_ChannelLimitationComM_ECUModeLimitation,BswM require 这三个接口。

7.10.3 端口与端口接口规范

本章规定通过 RTE 操作 ComM 模块功能所需的端口接口。

7.10.3.1 接口使用的类型见 §8.7.4 实现数据类型。

7.10.3.2 用户请求的端口与端口接口

7.10.3.2.1 一般方法:希望显式将本地 ComM 模块引导至某状态的 SW-C 需要客户端-服务器接口 ComM_UserRequest。通过此接口,SW-C 可将所有相关通信通道的期望状态设为"无通信"或"完全通信"。为保持 SW-C 代码独立于用户对 ComM 的句柄值,这些句柄不作为参数从 SW-C 传递给 ComM,而是被建模为 ComM 模块"Provide Port"侧的"port defined argument values"。

7.10.3.2.2 数据类型:无。

7.10.3.2.3 端口接口 ComM_UserRequest:见 §8.7.2.4 ComM_UserRequest

7.10.3.3 ComM 当前模式的端口与端口接口

[SWS_ComM_00847] ⌈ 通信管理器模块应有一个提供 ComM_CurrentMode ModeSwitchInterface 接口的 AUTOSAR 端口。 ⌋()

[SWS_ComM_00733] ⌈ 通信管理器模块应为每个已配置用户(SW-C 连接到该用户)提供一个提供 ComM_CurrentMode ModeSwitchInterface 接口的端口。 ⌋()

7.10.3.4 ComM 用户当前请求 COMM_FULL_COMMUNICATION 的端口与端口接口

[SWS_ComM_00734] ⌈ 通信管理器模块应为每个已配置 ComM 通道提供一个可选的(见 ECUC_ComM_00787)提供发送-接收接口 ComM_CurrentChannelRequest 的端口。 ⌋()

[SWS_ComM_00736] ⌈ 每当通道当前正在请求 COMM_FULL_COMMUNICATION 的 ComM 用户集合发生变化时,通信管理器模块应更新数据元素 fullComRequestors。仅当 ComM 接受 ComM 用户的通信请求时,才应更新该数据元素。 ⌋()

理由:因活动模式限制而被拒绝的请求不会导致数据元素更新。

7.10.3.5 ECU 模式限制的端口与端口接口

[SWS_ComM_00740] ⌈ 通信管理器模块可配置为具有一个提供客户端-服务器接口 ComM_ECUModeLimitation 的 AUTOSAR 端口。 ⌋()

扮演"模式管理器"角色的 SW-C 可使用此接口更改整个 ECU 的行为。

7.10.3.6 通道唤醒的端口与端口接口

[SWS_ComM_00747] ⌈ 通信管理器模块可配置为具有一个提供 ComM_ChannelWakeup 客户端-服务器接口的 AUTOSAR 端口。 ⌋()

7.10.3.7 通道限制的端口与端口接口

[SWS_ComM_00752] ⌈ 通信管理器模块可配置为具有一个提供 ComM_ChannelLimitation 客户端-服务器接口的 AUTOSAR 端口。 ⌋()

7.10.3.8 ComM 模块服务的定义

[SWS_ComM_00744] ⌈ ComM 服务定义示例:每个通道可存在 ProvidePort ComM_ChannelLimitation CL000..CL<NC-1>ProvidePort ComM_ChannelWakeup CW000..CW<NC-1>、每个用户存在 ProvidePort ComM_UserRequest URnnnProvidePort ComM_CurrentMode UMnnn、每个通道可存在 ProvidePort ComM_CurrentChannelRequest CR000..CR<NC-1>。 ⌋()

7.10.4 可运行实体与入口点

7.10.4.1 内部行为:ComM 模块的内部行为定义了可运行实体及其与端口操作的关联。示例代码(节选)展示了 LimitECUToNoComModeReadInhibitCounterResetInhibitCounterSetECUGroupClassificationLimitChannelToNoComModeGetInhibitionStatusPreventWakeupRequestComModeGetMaxComModeGetRequestedComModeGetCurrentComMode 等可运行实体的定义及其 canbeInvokedConcurrently 标志。通道相关行为(如 CLnnn.LimitChannelToNoComModeCWnnn.preventWakeUp)通过 PortArgument 绑定到特定通道。

7.10.4.2 ComM 模块应包含的头文件:RTE 将根据 ComM 的内部行为描述生成一个头文件(例如 Rte_Ports_CurrentMode_P)。这意味着 ComM 实现必须包含此生成的头文件。

8 API 规范

8.1 导入类型

8.1.1 标准类型

本章列出从以下模块导入的所有类型:

[SWS_ComM_00820]

模块头文件导入类型
ComCom.hCom_SignalIdType
ComStack_TypesComStackTypes.hNetworkHandleType
ComStackTypes.hPNCHandleType
NvMRte_NvM_Type.hNvM_BlockIdType
Rte_NvM_Type.hNvM_RequestResultType
UNDEFINED TYPES(未指定)EcuM_StateType
Std_TypesStandardTypes.hStd_ReturnType
StandardTypes.hStd_VersionInfoType

⌋(SRS_BSW_00348, SRS_BSW_00357)

ComM API 使用以下对 Std_ReturnType 的扩展:

[SWS_ComM_00649]

Range(范围):COMM_E_MODE_LIMITATION2函数调用已成功,但因模式抑制无法授予该模式。
Description:--
Available viaComM.h

⌋(SRS_BSW_00331, SRS_BSW_00369, SRS_BSW_00377, SRS_BSW_00441)

8.2 类型定义

[SWS_ComM_00863] ⌈ 本规范中定义的函数应使用以下数据类型。 ⌋(SRS_BSW_00441)

8.2.1 ComM_InitStatusType

[SWS_ComM_00668]

NameComM_InitStatusType
Type:Enumeration(枚举)
RangeCOMM_UNINIT = 0x00ComM 未初始化或不可用。这应是复位后的默认值。此状态的值应为 0。
COMM_INIT = 0x01:ComM 已初始化并可用。
Description:ComM 的初始化状态。
Available viaComM.h

⌋()

8.2.2 ComM_PncModeType

[SWS_ComM_00673]

NameComM_PncModeType
Type:Enumeration
RangeCOMM_PNC_REQUESTED = 0x00PNC 由本地 ComM 用户请求
COMM_PNC_READY_SLEEP = 0x01:PNC 由远程 ComM 用户请求
COMM_PNC_PREPARE_SLEEP = 0x02:PNC 活动但无期限监控
COMM_PNC_NO_COMMUNICATION = 0x03:PNC 不通信
Description:PNC 的当前模式
Available viaComM.h

⌋()

8.2.3 ComM_StateType

[SWS_ComM_00674]

NameComM_StateType
Typeuint8
RangeCOMM_NO_COM_NO_PENDING_REQUEST = 0--
COMM_NO_COM_REQUEST_PENDING = 1 --
COMM_FULL_COM_NETWORK_REQUESTED = 2 --
COMM_FULL_COM_READY_SLEEP = 3 --
COMM_SILENT_COM = 4 --
Description:ComM 状态机的状态与子状态。
ComM 状态 vs. 通信模式:
- COMM_NO_COM*:通信模式 = "无通信"
- COMM_FULL_COM*:通信模式 = "完全通信"
- COMM_SILENT_COM:通信模式 = "静默通信"
Available viaComM.h

⌋()

8.2.4 ComM_ConfigType

[SWS_ComM_00162]

NameComM_ConfigType
Type:Structure
Range:implementation specific(实现特定)。初始化数据结构的内容是实现特定的。
Description:此类型包含实现特定的构建后配置结构。
Available viaComM.h

⌋()

8.3 函数定义

这是为上层模块提供的函数列表。

:本章中所有函数都需要先前已初始化(ComM_Init),但以下函数除外:ComM_InitComM_GetVersionInfo

8.3.1 ComM_Init

[SWS_ComM_00146]

Service nameComM_Init
Syntaxvoid ComM_Init(const ComM_ConfigType* ConfigPtr)
Service ID [hex]0x01
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in)ConfigPtr — 指向构建后配置数据的指针
Parameters (inout):None
Parameters (out):None
Return value:None
Description:初始化 AUTOSAR 通信管理器并重启内部状态机。
Available viaComM.h

⌋(SRS_BSW_00101, SRS_BSW_00358, SRS_BSW_00414)

[SWS_ComM_00793]ComM_Init() 的注意事项:NVRAM 管理器模块必须已初始化,才能"直接"访问 ComM 模块的参数。 ⌋()

[SWS_ComM_00864] ⌈ 在 ComM_Init() 中,ComM 应从 NVRAM 读取 SWS_ComM_00103 中指定的非易失性参数。若无可用参数,ComM 应使用 ComM 配置中的默认值。 ⌋()

8.3.2 ComM_DeInit

[SWS_ComM_00147]

Service nameComM_DeInit
Syntaxvoid ComM_DeInit(void)
Service ID [hex]0x02
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in):None
Parameters (inout):None
Parameters (out):None
Return value:None
Description:此 API 对 AUTOSAR 通信管理器进行去初始化。
Available viaComM.h

⌋(SRS_BSW_00336)

[SWS_ComM_00794]ComM_DeInit() 中的去初始化仅应在 ComM 模块控制的所有通道均处于 COMM_NO_COMMUNICATION 模式时执行。 ⌋()

理由:由于 ComM_DeInit() API 无法返回错误消息,因此必须确保所有通道在调用 ComM_DeInit() 之前处于 COMM_NO_COMMUNICATION 模式和 COMM_NO_COM_NO_PENDING_REQUEST 子状态。

[SWS_ComM_00865] ⌈ 在 ComM_DeInit() 中,ComM 应将 SWS_ComM_00103 中指定的非易失性参数存储到 NVRAM。 ⌋()

8.3.3 ComM_GetStatus

[SWS_ComM_00242]

Service nameComM_GetStatus
SyntaxStd_ReturnType ComM_GetStatus(ComM_InitStatusType* Status)
Service ID [hex]0x03
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in):None
Parameters (inout):None
Parameters (out)StatusCOMM_UNINIT:ComM 未初始化或不可用。启动后或调用 ComM_DeInit() 后的默认值。COMM_INIT:ComM 已初始化并可用。
Return valueStd_ReturnTypeE_OK:成功返回初始化状态;E_NOT_OK:返回初始化状态失败
Description:返回 AUTOSAR 通信管理器的初始化状态。调用 ComM_DeInit() 后,ComM 状态应为 COMM_UNINIT,需要再次调用 ComM_Init 以确保 ComM 重新启动内部状态机到默认值。
Available viaComM.h

⌋(SRS_BSW_00406)

8.3.4 ComM_GetInhibitionStatus

[SWS_ComM_00619]

Service nameComM_GetInhibitionStatus
SyntaxStd_ReturnType ComM_GetInhibitionStatus(NetworkHandleType Channel, ComM_InhibitionStatusType* Status)
Service ID [hex]0x04
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in)Channel — 见 NetworkHandleType
Parameters (inout):None
Parameters (out)Status — 见 ComM_InhibitionStatusType
Return valueStd_ReturnTypeE_OK:成功返回抑制状态;E_NOT_OK:返回抑制状态失败
Description:返回 ComM 通道的抑制状态。
Available viaComM.h

⌋()

8.3.5 ComM_RequestComMode

[SWS_ComM_00110]

Service nameComM_RequestComMode
SyntaxStd_ReturnType ComM_RequestComMode(ComM_UserHandleType User, ComM_ModeType ComMode)
Service ID [hex]0x05
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)User — 请求模式的用户的句柄
ComModeCOMM_FULL_COMMUNICATION / COMM_NO_COMMUNICATION
Parameters (inout):None
Parameters (out):None
Return valueStd_ReturnTypeE_OK:成功切换到新模式;E_NOT_OK:切换到新模式失败;COMM_E_MODE_LIMITATION:因模式抑制而无法授予该模式
Description:由用户请求通信模式。
:内部模式 COMM_SILENT_COMMUNICATION 对用户不是有效请求,该模式仅用于关机时的同步。有效模式为 COMM_NO_COMMUNICATIONCOMM_FULL_COMMUNICATION。通信请求也可能因 ComM 通信抑制而被释放。
Available viaComM.h

⌋(SRS_ModeMgm_09081)

[SWS_ComM_00795]ComM_RequestComMode 的配置:用户与通道的关系。一个用户被静态映射到一个或多个通道。 ⌋()

8.3.6 ComM_GetMaxComMode

[SWS_ComM_00085]

Service nameComM_GetMaxComMode
SyntaxStd_ReturnType ComM_GetMaxComMode(ComM_UserHandleType User, ComM_ModeType* ComMode)
Service ID [hex]0x06
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)User — 请求模式的用户的句柄
Parameters (inout):None
Parameters (out)ComMode — 见 ComM_ModeType
Return valueStd_ReturnTypeE_OK:成功返回最大允许通信模式;E_NOT_OK:返回最大允许通信模式失败
Description:查询相应用户的最大允许通信模式。
用例:此函数提供请求最大可能模式的能力(如用户希望检查是否能获得"完全通信"模式,或是否存在活动的限制/抑制)。这对于诊断/调试是必需的。
Available viaComM.h

⌋()

[SWS_ComM_00374] ⌈ 若一个用户请求链接到多个通道且通道的最大允许模式不同,则 ComM_GetMaxComMode 应返回最低模式(见 SWS_ComM_00867SWS_ComM_00868)。 ⌋()

[SWS_ComM_00796]ComM_GetMaxComMode 的配置:用户与通道的关系。一个用户被静态映射到一个或多个通道。 ⌋()

8.3.7 ComM_GetRequestedComMode

[SWS_ComM_00079]

Service nameComM_GetRequestedComMode
SyntaxStd_ReturnType ComM_GetRequestedComMode(ComM_UserHandleType User, ComM_ModeType* ComMode)
Service ID [hex]0x07
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)User — 请求模式的用户的句柄
Parameters (inout):None
Parameters (out)ComMode — 请求模式的名称
Return valueStd_ReturnTypeE_OK:成功返回请求的通信模式;E_NOT_OK:返回请求的通信模式失败
Description:查询相应用户当前请求的通信模式。
Available viaComM.h

⌋(SRS_ModeMgm_09149)

理由:请求的用户"通信模式"必须以易失方式存储在 ComM 内部,以避免由用户冗余存储状态信息。

注释:若 ComM 不提供此服务,则每个用户必须自行存储状态 → 同一数据存在冗余及可能不一致的存储。

:用户被静态映射到一个或多个通道。用户与通道的关系由配置反映(见 ECUC_ComM_00658)。

8.3.8 ComM_GetCurrentComMode

[SWS_ComM_00083]

Service nameComM_GetCurrentComMode
SyntaxStd_ReturnType ComM_GetCurrentComMode(ComM_UserHandleType User, ComM_ModeType* ComMode)
Service ID [hex]0x08
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)User — 请求模式的用户的句柄
Parameters (inout):None
Parameters (out)ComMode — 见 ComM_ModeType
Return valueStd_ReturnTypeE_OK:成功从总线状态管理器返回通信模式;E_NOT_OK:从总线状态管理器返回通信模式失败
Description:查询当前通信模式。ComM 应使用相应总线状态管理器的接口来获取网络的当前通信模式。(调用总线状态管理器 API:XXXSM_GetCurrentComMode(...)
Available viaComM.h

⌋(SRS_ModeMgm_09084)

[SWS_ComM_00176] ⌈ 若一个用户请求链接到多个通道且通道的模式不同,则 ComM_GetCurrentComMode 应返回最低模式(见 SWS_ComM_00867SWS_ComM_00868)。 ⌋(SRS_ModeMgm_09172)

[SWS_ComM_00798]ComM_GetCurrentComMode 的配置:用户与通道的关系。一个用户被静态映射到一个或多个通道。 ⌋()

8.3.9 ComM_PreventWakeUp

[SWS_ComM_00156]

Service nameComM_PreventWakeUp
SyntaxStd_ReturnType ComM_PreventWakeUp(NetworkHandleType Channel, boolean Status)
Service ID [hex]0x09
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in)Channel — 见 NetworkHandleType
StatusFALSE:唤醒抑制被关闭
TRUE:唤醒抑制被打开
Parameters (inout):None
Parameters (out):None
Return valueStd_ReturnTypeE_OK:成功更改通道的唤醒状态;E_NOT_OK:更改通道的唤醒状态失败(例如 ComMEcuGroupClassification 禁用了该功能,见 ECUC_ComM_00563
Description:更改相应通道的抑制状态 COMM_NO_WAKEUP
Available viaComM.h

⌋(SRS_ModeMgm_09157)

[SWS_ComM_00799]ComM_PreventWakeUp 的配置:可通过 COMM_WAKEUP_INHIBITION_ENABLEDECUC_ComM_00559)配置。 ⌋()

8.3.10 ComM_LimitChannelToNoComMode

[SWS_ComM_00163]

Service nameComM_LimitChannelToNoComMode
SyntaxStd_ReturnType ComM_LimitChannelToNoComMode(NetworkHandleType Channel, boolean Status)
Service ID [hex]0x0b
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in)Channel — 见 NetworkHandleType
StatusFALSE:禁用通道限制为 COMM_NO_COMMUNICATION
TRUE:启用通道限制为 COMM_NO_COMMUNICATION
Parameters (inout):None
Parameters (out):None
Return valueStd_ReturnTypeE_OK:成功更改通道的抑制状态;E_NOT_OK:更改通道的抑制状态失败(例如 ComMEcuGroupClassification 禁用了该功能,见 ECUC_ComM_00563
Description:更改通道的抑制状态,以禁止从 COMM_NO_COMMUNICATION 切换到更高的通信模式。(另见 ComM_LimitECUToNoComMode,功能相同但适用于所有通道)
Available viaComM.h

⌋(SRS_ModeMgm_09157)

[SWS_ComM_00800]ComM_LimitChannelToNoComMode 的配置:可通过 ComMModeLimitationEnabledECUC_ComM_00560)与 COMM_RESET_AFTER_FORCING_NO_COMMECUC_ComM_00558)配置。 ⌋()

8.3.11 ComM_LimitECUToNoComMode

[SWS_ComM_00124]

Service nameComM_LimitECUToNoComMode
SyntaxStd_ReturnType ComM_LimitECUToNoComMode(boolean Status)
Service ID [hex]0x0c
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in)StatusFALSE:禁用 ECU 限制为 COMM_NO_COMMUNICATIONTRUE:启用 ECU 限制为 COMM_NO_COMMUNICATION
Parameters (inout):None
Parameters (out):None
Return valueStd_ReturnTypeE_OK:成功更改 ECU 的抑制状态;E_NOT_OK:更改 ECU 的抑制状态失败(例如 ComMEcuGroupClassification 禁用了该功能,见 ECUC_ComM_00563
Description:更改 ECU(即所有通道)的抑制状态,以禁止从 COMM_NO_COMMUNICATION 切换到更高的通信模式。(另见 ComM_LimitChannelToNoComMode,功能相同但适用于特定通道)
Available viaComM.h

⌋(SRS_ModeMgm_09157)

[SWS_ComM_00801]ComM_LimitECUToNoComMode 的配置:可通过 ComMModeLimitationEnabledECUC_ComM_00560)与 COMM_RESET_AFTER_FORCING_NO_COMMECUC_ComM_00558)配置。 ⌋()

8.3.12 ComM_ReadInhibitCounter

[SWS_ComM_00224]

Service nameComM_ReadInhibitCounter
SyntaxStd_ReturnType ComM_ReadInhibitCounter(uint16* CounterValue)
Service ID [hex]0x0d
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in):None
Parameters (inout):None
Parameters (out)CounterValue — 被拒绝的 COMM_FULL_COMMUNICATION 用户请求数量
Return valueStd_ReturnTypeE_OK:成功返回抑制计数器;E_NOT_OK:返回抑制计数器失败
Description:此函数返回被拒绝的 COMM_FULL_COMMUNICATION 用户请求数量。
Available viaComM.h

⌋(SRS_ModeMgm_09156)

[SWS_ComM_00802]ComM_ReadInhibitCounter 的配置:可通过 ComMModeLimitationEnabledECUC_ComM_00560)配置。该函数仅在启用 ComMModeLimitationEnabledECUC_ComM_00560)且已配置 ComMGlobalNvMBlockDescriptor 时可用。 ⌋()

8.3.13 ComM_ResetInhibitCounter

[SWS_ComM_00108]

Service nameComM_ResetInhibitCounter
SyntaxStd_ReturnType ComM_ResetInhibitCounter(void)
Service ID [hex]0x0e
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in):None
Parameters (inout):None
Parameters (out):None
Return valueStd_ReturnTypeE_OK:成功复位抑制 COMM_FULL_COMMUNICATION 计数器;E_NOT_OK:复位抑制 COMM_FULL_COMMUNICATION 计数器失败
Description:此函数复位抑制的 COMM_FULL_COMMUNICATION 请求计数器。
Available viaComM.h

⌋(SRS_ModeMgm_09156)

[SWS_ComM_00803]ComM_ResetInhibitCounter 的配置:可通过 ComMModeLimitationEnabledECUC_ComM_00560)配置。该函数仅在启用 ComMModeLimitationEnabledECUC_ComM_00560)且已配置 ComMGlobalNvMBlockDescriptor 时可用。 ⌋()

8.3.14 ComM_SetECUGroupClassification

[SWS_ComM_00552]

Service nameComM_SetECUGroupClassification
SyntaxStd_ReturnType ComM_SetECUGroupClassification(ComM_InhibitionStatusType Status)
Service ID [hex]0x0f
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in)Status — 见 ComM_InhibitionStatusType
Parameters (inout):None
Parameters (out):None
Return valueStd_ReturnTypeE_OK:成功更改 ECU 组分类状态;E_NOT_OK:更改 ECU 组分类状态失败
Description:更改 ECU 组分类状态(见第 10.2.2 章)。
Available viaComM.h

⌋()

8.3.15 ComM_GetVersionInfo

[SWS_ComM_00370]

Service nameComM_GetVersionInfo
Syntaxvoid ComM_GetVersionInfo(Std_VersionInfoType* Versioninfo)
Service ID [hex]0x10
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in):None
Parameters (inout):None
Parameters (out)Versioninfo — 见 Std_VersionInfoType
Return value:None
Description:此函数返回本模块的发布信息(详见表 10.3)。
Available viaComM.h

⌋(SRS_BSW_00407)

8.4 回调通知

[SWS_ComM_00620] ⌈ 所有提供的指示函数应在编译时实现。 ⌋()

:本章中的所有函数均要求 ComM 模块已正确初始化。

8.4.1 AUTOSAR 网络管理接口

8.4.1.1 ComM_Nm_NetworkStartIndication

[SWS_ComM_00383]

Service nameComM_Nm_NetworkStartIndication
Syntaxvoid ComM_Nm_NetworkStartIndication(NetworkHandleType Channel)
Service ID [hex]0x15
Sync/Async:Asynchronous
Reentrancy:Reentrant
Parameters (in)Channel — 见 NetworkHandleType
Description:指示在总线休眠模式下接收到 NM 消息,这表明网络中的某些节点已进入网络模式。
Available viaComM_Nm.h

⌋()

8.4.1.2 ComM_Nm_NetworkMode

[SWS_ComM_00390]

Service nameComM_Nm_NetworkMode
Syntaxvoid ComM_Nm_NetworkMode(NetworkHandleType Channel)
Service ID [hex]0x18
Sync/Async:Asynchronous
Reentrancy:Reentrant
Parameters (in)Channel — 通道
Description:网络管理已进入网络模式的通知。
Available viaComM_Nm.h

⌋()

8.4.1.3 ComM_Nm_PrepareBusSleepMode

[SWS_ComM_00391]

Service nameComM_Nm_PrepareBusSleepMode
Syntaxvoid ComM_Nm_PrepareBusSleepMode(NetworkHandleType Channel)
Service ID [hex]0x19
Sync/Async:Asynchronous
Reentrancy:Reentrant(但对同一 NM 通道不可)
Parameters (in)Channel — 通道
Description:网络管理已进入准备总线休眠模式的通知。
Available viaComM_Nm.h

⌋()

8.4.1.4 ComM_Nm_BusSleepMode

[SWS_ComM_00392]

Service nameComM_Nm_BusSleepMode
Syntaxvoid ComM_Nm_BusSleepMode(NetworkHandleType Channel)
Service ID [hex]0x1a
Sync/Async:Asynchronous
Reentrancy:Reentrant
Parameters (in)Channel — 通道
Description:网络管理已进入总线休眠模式的通知。此回调函数应执行硬件和收发器到总线休眠模式的转换。
Available viaComM_Nm.h

⌋()

8.4.1.5 ComM_Nm_RestartIndication

[SWS_ComM_00792]

Service nameComM_Nm_RestartIndication
Syntaxvoid ComM_Nm_RestartIndication(NetworkHandleType Channel)
Service ID [hex]0x1b
Sync/Async:Asynchronous
Reentrancy:Reentrant
Parameters (in)Channel — 通道
Description:若 NmIf 已开始关闭协调总线,但并非所有协调总线都已指示总线休眠状态,且至少有一条协调总线上的 NM 已重启,则 NM 接口应调用回调 ComM_Nm_RestartIndication,传入已指示总线休眠状态的通道的 nmNetworkHandle
Available viaComM_Nm.h

⌋()

8.4.2 AUTOSAR 诊断通信管理器接口

8.4.2.1 ComM_DCM_ActiveDiagnostic

[SWS_ComM_00873]

Service nameComM_DCM_ActiveDiagnostic
Syntaxvoid ComM_DCM_ActiveDiagnostic(NetworkHandleType Channel)
Service ID [hex]0x1f
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)Channel — 诊断通信所需的通道
Description:DCM 的活动诊断指示。
Available viaComM_Dcm.h

⌋()

8.4.2.2 ComM_DCM_InactiveDiagnostic

[SWS_ComM_00874]

Service nameComM_DCM_InactiveDiagnostic
Syntaxvoid ComM_DCM_InactiveDiagnostic(NetworkHandleType Channel)
Service ID [hex]0x20
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)Channel — 不再需要诊断通信的通道
Description:DCM 的非活动诊断指示。
Available viaComM_Dcm.h

⌋()

8.4.3 AUTOSAR ECU 状态管理器接口

8.4.3.1 ComM_EcuM_WakeUpIndication

[SWS_ComM_00275]

Service nameComM_EcuM_WakeUpIndication
Syntaxvoid ComM_EcuM_WakeUpIndication(NetworkHandleType Channel)
Service ID [hex]0x2a
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)Channel — 通道
Description:相应通道上唤醒的通知。
Available viaComM_EcuM.h

⌋()

8.4.3.2 ComM_EcuM_PNCWakeUpIndication

[SWS_ComM_91001]

Service nameComM_EcuM_PNCWakeUpIndication
Syntaxvoid ComM_EcuM_PNCWakeUpIndication(PNCHandleType PNCid)
Service ID [hex]0x37
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)PNCid — 部分网络集群的标识符
Description:相应部分网络集群上唤醒的通知。
Available viaComM_EcuM.h

⌋()

8.4.4 AUTOSAR ECU 状态管理器与基本软件模式管理器接口

8.4.4.1 ComM_CommunicationAllowed

[SWS_ComM_00871]

Service nameComM_CommunicationAllowed
Syntaxvoid ComM_CommunicationAllowed(NetworkHandleType Channel, boolean Allowed)
Service ID [hex]0x35
Sync/Async:Asynchronous
Reentrancy:Non Reentrant
Parameters (in)Channel — 通道;AllowedTRUE:通信被允许;FALSE:通信不被允许
Description:EcuM 或 BswM 应在通信被允许时指示 ComM。若使用 EcuM/Flex:由 BswM 指示。
Available viaComM_BswM.h

⌋()

8.4.5 总线状态管理器接口

8.4.5.1 ComM_BusSM_ModeIndication

[SWS_ComM_00675]

Service nameComM_BusSM_ModeIndication
Syntaxvoid ComM_BusSM_ModeIndication(NetworkHandleType Channel, ComM_ModeType ComMode)
Service ID [hex]0x33
Sync/Async:Asynchronous
Reentrancy:Reentrant
Parameters (in)Channel — 见 NetworkHandleTypeComMode — 见 ComM_ModeType
Description:相应总线状态管理器对实际总线模式的指示。ComM 应使用 RTE 与 BswM 将所指示的状态传播给用户。
Available viaComM.h

⌋()

8.4.5.2 ComM_BusSM_BusSleepMode

[SWS_ComM_91000]

Service nameComM_BusSM_BusSleepMode
Syntaxvoid ComM_BusSM_BusSleepMode(NetworkHandleType Channel)
Service ID [hex]0x34
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in)Channel — 通道标识
Description:相应总线状态管理器对实际总线模式为总线休眠的通知。仅适用于 LIN 从节点。
Available viaComM.h

⌋()

8.4.6 COM 接口

[SWS_ComM_00819]

Service nameComM_COMCbk_<sn>
Syntaxvoid ComM_COMCbk_<sn>(void)
Service ID [hex]0x36
Sync/Async:Synchronous
Reentrancy:Non Reentrant
Parameters (in):None
Description:当 COM 中的 EIRA 或 ERA 被更新时调用此回调。该调用仅通知 ComM 关于 ERA 和 EIRA 的变化。实际处理在下次调用 ComM_MainFunction_<ComMChannel.ShortName> 时完成,对应的 PNC 状态机将发生变化。
Available viaComM_Com.h

⌋()

8.5 调度函数

这些函数由基本软件调度器直接调用。以下函数应无返回值且无参数。所有函数应不可重入。

8.5.1 ComM_MainFunction

[SWS_ComM_00429]

Service nameComM_MainFunction_<ComMChannel.ShortName>
Syntaxvoid ComM_MainFunction_<ComMChannel.ShortName>(void)
Service ID [hex]0x60
Description:此函数应执行不由 RTE 等调用直接发起的 AUTOSAR ComM 活动处理。ComM 的每个通道应有一个专用的主函数。
Precondition(前置条件):ComM 应已初始化。
Available viaSchM_ComM.h

⌋(SRS_BSW_00373)

[SWS_ComM_00818]ComM_MainFunction_<ComMChannel.ShortName> 应使用 Channel.ShortName 进行配置(见第 10.2.2 章)。 ⌋()

ComMChannel.ShortName 是 ComMChannel 容器的短名称,将由 ComM_MainFunction_<ComMChannel.ShortName> 函数管理。

8.6 期望接口

本章列出从其他模块请求的所有接口。所需接口的概述如图 1 所示。

8.6.1 强制接口

本章定义实现本模块核心功能所需的所有接口。

[SWS_ComM_00828]

API 函数头文件描述
Nm_PassiveStartUpNm.h此函数调用 <BusNm>_PassiveStartUp 函数(例如,若通道配置为 CAN,则调用 CanNm_PassiveStartUp)。
Nm_NetworkRequestNm.h此函数调用 <BusNm>_NetworkRequest(例如,若通道配置为 CAN,则调用 CanNm_NetworkRequest)。
Nm_NetworkReleaseNm.h此函数调用 <BusNm>_NetworkRelease 总线特定函数(例如,若通道配置为 CAN,则调用 CanNm_NetworkRelease)。
Dcm_ComM_NoComModeEnteredDcm.h此调用通知 Dcm 模块 ComM 模式变化为 COMM_NO_COMMUNICATION
Dcm_ComM_SilentComModeEnteredDcm.h此调用通知 Dcm 模块 ComM 模式变化为 COMM_SILENT_COMMUNICATION
Dcm_ComM_FullComModeEnteredDcm.h此调用通知 Dcm 模块 ComM 模式变化为 COMM_FULL_COMMUNICATION
Rte_Ports_UserMode_P()[n].Switch_currentMode(RTE_MODE_ComMMode_COMM_NO_COMMUNICATION)Rte向 RTE 指示 COMM_NO_COMMUNICATION 模式
Rte_Ports_UserMode_P()[n].Switch_currentMode(RTE_MODE_ComMMode_COMM_SILENT_COMMUNICATION)Rte向 RTE 指示 COMM_SILENT_COMMUNICATION 模式
Rte_Ports_UserMode_P()[n].Switch_currentMode(RTE_MODE_ComMMode_COMM_FULL_COMMUNICATION)Rte向 RTE 指示 COMM_FULL_COMMUNICATION 模式
BswM_ComM_CurrentModeBswM向 BswM 指示通信模式
NvM_ReadBlockNvMNVRAM 管理器 API 用于读块
NvM_WriteBlockNvMNVRAM 管理器 API 用于写块
NvM_GetErrorStatusNvMNVRAM 管理器 API 用于获取状态
<BusSM>_GetCurrentComMode<BusSM>查询 <Bus> 状态管理器的实际通信模式的函数
<BusSM>_RequestComMode<BusSM>向 <Bus> 状态管理器请求通信模式的函数

⌋()

8.6.1.1 AUTOSAR NVRAM 管理器模块

[SWS_ComM_00103] ⌈ ComM 模块应使用 NVRAM 管理器模块的相应标准化服务(见 SWS_ComM_00828)来存储和读取非易失性配置数据 ComMNoWakeupECUC_ComM_00569)、ComMEcuGroupClassificationECUC_ComM_00563)、抑制状态(SWS_ComM_00157)以及抑制计数器(SWS_ComM_00140)。 ⌋()

注释:关于何时读取和存储配置数据,见 SWS_ComM_00864SWS_ComM_00865。详见 AUTOSAR NVRAM 管理器模块规范 [7]。

8.6.1.2 AUTOSAR 总线状态管理器

[SWS_ComM_00962] ⌈ 状态管理器 API 的前缀("<BusSm>")应为 CanSMLinSMFrSMEthSM,分别对应参数 ComMBusTypeCOMM_BUS_TYPE_CANCOMM_BUS_TYPE_LINCOMM_BUS_TYPE_FRCOMM_BUS_TYPE_ETH。 ⌋()

[SWS_ComM_00957] ⌈ 若 ComMBusType = "COMM_BUS_TYPE_CDD",则 API 前缀("<BusSm>")应在参数 "ComMCDDBusPrefix" 中配置。 ⌋()

[SWS_ComM_00963] ⌈ 通信管理器模块应在必要时使用状态管理器的 <BusSm>_GetCurrentComMode() 查询当前通信模式。 ⌋()

[SWS_ComM_00958] ⌈ 通信管理器模块应使用状态管理器的 <BusSm>_RequestComMode() 请求专用通信模式。 ⌋()

何时需要请求专用通信模式取决于通道状态机各实例的当前状态(见上文)。

关于总线状态管理器模块的功能详情,请参阅其规范 [23]、[24]、[25]、[28]。

注释:只要使用不同的通道和控制器编号,这些 API 可以被可重入地调用。

8.6.1.3 AUTOSAR 网络管理接口

[SWS_ComM_00261] ⌈ ComM 模块应使用相应函数同步网络管理的总线启动与关闭(见 SWS_ComM_00828)。详见 AUTOSAR NM 接口规范 [9]。 ⌋()

8.6.1.4 AUTOSAR 诊断通信管理器模块

[SWS_ComM_00266] ⌈ ComM 模块应使用 DCM 提供的相应函数(见 SWS_ComM_00828)来控制 DCM 模块的通信能力。 ⌋()

注释:DCM 不提供启动/停止发送和接收的函数。DCM 确保根据所指示的通信管理器模块状态控制通信。

详见 AUTOSAR DCM 规范 [11]。

8.6.1.5 RTE 提供给 ComM 的 AUTOSAR 接口(用于 SW-C)

[SWS_ComM_00091] ⌈ ComM 模块应使用 RTE 提供的相应函数向用户指示模式。每个用户应有一个指示。当模式指示涉及多于一个用户时,由通信管理器模块执行扇出(Fan-out)。 ⌋(SRS_ModeMgm_09085)

[SWS_ComM_00663] ⌈ 若链接到一个用户请求的多个通道的模式不同,则 ComM 模块应向该用户指示最低模式。 ⌋()

[SWS_ComM_00662] ⌈ 用户的序列应从 user 0 开始到 user N,并且模式端口的名称应为 UM000, UM001, ... UM<N>。 ⌋()

理由:应能使用基于端口的 API 直接寻址特定用户。

注释:在端口数组内,端口按字母顺序命名。

[SWS_ComM_00778] ⌈ 通信管理器模块应显式地向每个单独的 SW-C 连接的用户指示模式变化。ComM 模块应通过端口"UMnnn"在 RTE 上调用正确的 API 来完成此操作。 ⌋()

注释:每个配置的、SW-C 连接的用户都有一个这样的端口。对于未被 SW-C 使用的用户(例如由 ECUC_ComM_00840 创建的用户),将不会创建模式端口。

实现提示:ComM 模块的实现可以使用任何常规的 RTE 机制来向用户发出模式变化信号。鉴于 ComM 模块的具体可配置性,使用 RTE "Indirect API" 似乎最为合适。其工作方式如下(详情请参阅 RTE 规范)。

通信管理器模块的实现可以在运行时使用 "Rte_Ports" API 获得 "UMnnn" 端口的数组。

/* 返回所有提供接口 ComM_CurrentMode 的端口的数组。
   由于所选的特定命名约定,该数组中的元素 n 将引用端口 UM<nnn>。
   例如 userModePorts[1] 将是端口 UM001 的句柄 */
userModePorts = Rte_Ports_ComM_CurrentMode_P();

此类 userModePorts 的数量可通过调用 Rte_NPorts_ComM_CurrentMode_P 获得。此值对应 COMM_USER_LIST 数组的大小。

要向用户 n 发出新模式信号,通信管理器模块应执行:userModePorts[n].Switch_currentMode(newMode)

有关详情,请参阅 AUTOSAR RTE 规范 [8] 与 AUTOSAR Services Mode Management 规范 [21]。

8.6.1.6 基本软件模式管理器(BswM)

[SWS_ComM_00861] ⌈ ComM 模块应使用 BswM 提供的相应函数报告通信管理器模块通道的状态(见 SWS_ComM_00828)。 ⌋()

详情请参阅 AUTOSAR 基本软件模式管理器模块 [29]。

8.6.2 可选接口

本章定义实现本模块可选功能所需的所有接口。

[SWS_ComM_00829]

API 函数头文件描述
BswM_ComM_CurrentPNCModeBswM_ComM.h由 ComM 调用的函数,用于指示 PNC 的当前模式。
BswM_ComM_InitiateResetBswM_ComM.h由 ComM 调用的函数,用于发出关机信号。
Com_ReceiveSignalCom.hCom_ReceiveSignal 将由 SignalId 标识的信号数据复制到由 SignalDataPtr 指定的位置。
Com_SendSignalCom.h服务 Com_SendSignal 用 SignalDataPtr 参数所引用的信号更新由 SignalId 标识的信号对象。

⌋()

8.6.2.1 AUTOSAR DET

通信管理器模块应使用默认错误追踪器模块的 Det_ReportError 来报告开发错误。

8.6.3 可配置接口

无。

8.7 服务接口

8.7.1 发送-接收接口

8.7.1.1 ComM_CurrentChannelRequest

[SWS_ComM_00904]

NameComM_CurrentChannelRequest_{channel_name}
Comment:当前正持有此通道 FULL_COM 请求的 ComMUserIdentifier 数组。属性 fullComRequestors.handleArray 的大小为 NUM_COMM_USER_PER_CHANNEL
IsServicetrue
Variation{ecuc(ComM/ComMConfigSet/ComMChannel/ComMFullCommRequestNotificationEnabled)} == truechannel_name = {ecuc(ComM/ComMConfigSet/ComMChannel.SHORT-NAME)}
Data Elements(数据元素):
- fullComRequestors:类型 ComM_UserHandleArrayType_{channel_name},变化 channel_name = {ecuc(ComM/ComMConfigSet/ComMChannel.SHORT-NAME)}

⌋()

8.7.2 客户端-服务器接口

8.7.2.1 ComM_ChannelLimitation

[SWS_ComM_00743]

NameComM_ChannelLimitation
Comment:扮演"模式管理器"角色的 SW-C 可使用此接口配置 ComM 模块以禁止给定通道的通信模式。
IsServicetrue
Variation{ecuc(ComM/ComMGeneral.ComMModeLimitationEnabled)} == true
Operations
- GetInhibitionStatus:返回通道的抑制状态;Status (OUT) 类型 ComM_InhibitionStatusType
- LimitChannelToNoComMode:更改通道的抑制状态,以禁止从 COMM_NO_COMMUNICATION 切换到更高通信模式;Status (IN) 类型 booleanFALSE 禁用、TRUE 启用
可能的错误:E_OKE_NOT_OK

⌋()

8.7.2.2 ComM_ChannelWakeup

[SWS_ComM_00742]

NameComM_ChannelWakeup
Comment:扮演"模式管理器"角色的 SW-C 可使用此接口配置 ComM 模块以采取预防措施,避免通过启动通信唤醒其他 ECU。
IsServicetrue
Variation{ecuc(ComM/ComMGeneral.ComMWakeupInhibitionEnabled)} == true
Operations
- GetInhibitionStatus:返回通道的抑制状态
- PreventWakeUp:更改相应通道的抑制状态 COMM_NO_WAKEUPStatus (IN) 类型 boolean
可能的错误:E_OKE_NOT_OK

⌋()

8.7.2.3 ComM_ECUModeLimitation

[SWS_ComM_00741]

NameComM_ECUModeLimitation
Comment:扮演"模式管理器"角色的 SW-C 可使用此接口更改整个 ECU 的行为。
IsServicetrue
Variation{ecuc(ComM/ComMGeneral.ComMModeLimitationEnabled)} == true
Operations
- LimitECUToNoComMode:更改 ECU(所有通道)的抑制状态;Status (IN) 类型 boolean
- ReadInhibitCounter:返回"抑制完全通信请求计数器"的值;CounterValue (OUT) 类型 uint16,变化 {ecuc(ComM/ComMGeneral.ComMGlobalNvMBlockDescriptor)} != NULL
- ResetInhibitCounter:复位"抑制完全通信请求计数器",变化 {ecuc(ComM/ComMGeneral.ComMGlobalNvMBlockDescriptor)} != NULL
- SetECUGroupClassification:更改 ECU 组分类状态;Status (IN) 类型 ComM_InhibitionStatusType
可能的错误:E_OKE_NOT_OK

⌋()

8.7.2.4 ComM_UserRequest

[SWS_ComM_01000]

NameComM_UserRequest
Comment:希望显式将本地通信管理器模块引导至某状态的 SW-C 需要客户端-服务器接口 ComM_UserRequest。通过此接口,SW-C 可将其相关的所有通信通道的期望状态设为"无通信"或"完全通信"。
IsServicetrue
Possible Errors0 = E_OK1 = E_NOT_OK2 = E_MODE_LIMITATION
Operations
- GetCurrentComMode:为 SW-C 返回 ComM 的当前模式;ComMode (OUT) 类型 ComM_ModeType
- GetMaxComMode:为 SW-C 返回 ComM 的当前模式;ComMode (OUT) 类型 ComM_ModeType
- GetRequestedComMode:返回 SW-C 最后请求的 ComM 模式;ComMode (OUT) 类型 ComM_ModeType
- RequestComMode:SW-C 请求其所需的所有通信通道都处于所提供的 ComM 模式;ComMode (IN) 类型 ComM_ModeType
可能的错误:E_OKE_NOT_OKE_MODE_LIMITATION(ComMMode 因 ComMMode 抑制而无法授予)

⌋()

8.7.3 模式切换接口

8.7.3.1 ComM_CurrentMode

[SWS_ComM_01001]

NameComM_CurrentMode
Comment:希望被告知其当前 ComM 模式的 SW-C 需要 ModeSwitchInterface ComM_CurrentMode
IsServicetrue
Variation:--
ModeGroupcurrentMode 类型 ComMMode

⌋()

8.7.4 实现数据类型

8.7.4.1 ComM_InhibitionStatusType

[SWS_ComM_00669]

NameComM_InhibitionStatusType
Kind:Bitfield
Derived fromuint8
Elements
- bit WakeupInhibitionActive 0x01:Bit 0 (LSB) — 唤醒抑制激活
- bit LimitedToNoCom 0x02:Bit 1 — 限制为 COMM_NO_COMMUNICATION 模式
Description:定义模式抑制是否激活。
例如:status=00000011 → 唤醒抑制和限制为 COMM_NO_COMMUNICATION 模式均激活。
Available viaRte_ComM_Type.h

⌋()

8.7.4.2 ComM_ModeType

[SWS_ComM_00672]

NameComM_ModeType
Kind:Type
Derived fromuint8
RangeCOMM_NO_COMMUNICATION = 0ComM 状态机处于"无通信"模式。已配置通道应无发送或接收能力。
COMM_SILENT_COMMUNICATION = 1:ComM 状态机处于"静默通信"模式。已配置通道应仅有接收能力,无发送能力。
COMM_FULL_COMMUNICATION = 2:ComM 状态机处于"完全通信"模式。已配置通道应同时具有发送和接收能力。
Available viaRte_ComM_Type.h

⌋()

8.7.4.3 ComM_UserHandleType

[SWS_ComM_00670]

NameComM_UserHandleType
Kind:Type
Derived fromuint8
Description:用于标识用户的句柄。系统生成时必须为每个用户定义唯一值。用户最大数量为 255。合法的用户 ID 范围为 0..254;用户 ID 255 被保留,应具有符号表示 COMM_NOT_USED_USER_ID
Available viaRte_ComM_Type.h

⌋()

8.7.4.4 ComM_UserHandleArrayType

[SWS_ComM_00906]

NameComM_UserHandleArrayType_{channel_name}
Kind:Structure
Elements
- numberOfRequesters uint8handleArray 中有效用户句柄条目的数量。若无用户保持通道请求,则为零,{LOWER-LIMIT=0, UPPER-LIMIT=MAX_CHANNEL_REQUESTER}
- handleArray 类型 ComM_UserHandleSubArrayType_{channel_name}
DescriptionnumberOfRequesters 包含 handleArray 成员中有效用户句柄条目的数量。若无用户保持通道请求,则为零。
Available viaRte_ComM_Type.h

⌋()

8.7.4.5 ComM_UserHandleSubArrayType

[SWS_ComM_01005]

NameComM_UserHandleSubArrayType_{channel_name}
Kind:Array
Element typeComM_UserHandleType
SizeCOUNT{ecuc(ComM/ComMConfigSet/ComMChannel/ComMUserPerChannel)}
Description:此元素包含保持通道请求的用户的句柄(如果有),从其第一个条目开始。数组 MAX_CHANNEL_REQUESTERS 的大小是请求通道的用户数量的最大值。
Available viaRte_ComM_Type.h

⌋()

8.7.5 端口

端口名KindProvidedPort InterfacePort Defined Argument 值Variation
CL_{channel_name}ProvidedPortComM_ChannelLimitationNetworkHandleType = {ecuc(ComM/ComMConfigSet/ComMChannel/ComMChannelId.value)}{ecuc(ComM/ComMGeneral.ComMModeLimitationEnabled)} == true
CR_{channel_name}ProvidedPortComM_CurrentChannelRequest_{channel_name}--{ecuc(ComM/ComMConfigSet/ComMChannel/ComMFullCommRequestNotificationEnabled)} == true
CW_{channel_name}ProvidedPortComM_ChannelWakeupNetworkHandleType = {ecuc(ComM/ComMConfigSet/ComMChannel/ComMChannelId.value)}{ecuc(ComM/ComMGeneral.ComMWakeupInhibitionEnabled)} == true
modeLimitationProvidedPortComM_ECUModeLimitation--{ecuc(ComM/ComMGeneral.ComMModeLimitationEnabled)} == true
UM_{user_name}ProvidedPortComM_CurrentMode--user_name = {ecuc(ComM/ComMConfigSet/ComMUser.SHORT-NAME)}
UR_{user_name}ProvidedPortComM_UserRequestComM_UserHandleType = {ecuc(ComM/ComMConfigSet/ComMUser/ComMUserIdentifier.value)}user_name = {ecuc(ComM/ComMConfigSet/ComMUser.SHORT-NAME)}

8.7.6 模式声明组

8.7.6.1 ComMMode

[SWS_ComM_01012]

NameComMMode
Kind:ModeDeclarationGroup
CategoryALPHABETIC_ORDER
Initial modeCOMM_NO_COMMUNICATION
On transition value:--
Modes
- COMM_FULL_COMMUNICATION --
- COMM_NO_COMMUNICATION --
- COMM_SILENT_COMMUNICATION --
Description:--

⌋()

9 序列图

9.1 发送与接收启动(CAN)

图 9 显示在 CAN 上启动发送与接收的序列。LIN、FlexRay 和以太网上的行为相同,仅 API 名称不同。

图 9 — 在 CAN 上启动发送与接收

交互对象:ComM、Nm、CanSM。

alt NM 变体

9.2 被动唤醒(CAN)

图 10 显示由 ECU 状态管理器或 Nm 模块为 CAN 通道指示唤醒后的行为。LIN、FlexRay 和以太网上的行为相同,仅 API 名称不同。

图 10 — 对由 EcuM 模块指示的唤醒的响应

交互对象:EcuM、Dcm、Rte、ComM、Nm、CanSM。

alt NM 变体:[Full/Passive] 或 [None/Light]

状态:COMM_NO_COM_NO_PENDING_REQUESTCOMM_NO_COM_REQUEST_PENDINGCOMM_FULL_COM_NETWORK_REQUESTED

alt 被动启动

响应:Nm_PassiveStartUp(NetworkHandleType) → 启动 ComMTMinFullComModeDuration 定时器 → 等待 CommunicationAllowed = TrueCanSM_RequestComMode(NetworkHandle, COMM_FULL_COMMUNICATION)ComM_BusSM_ModeIndication(Channel, COMM_FULL_COMMUNICATION)ComM_Nm_NetworkMode(Channel)

9.3 网络关闭(CAN)

图 11 显示关闭 CAN 网络的可能性。可由最后一个用户释放其 COMM_FULL_COMMUNICATION 请求,或调用 ComM_LimitChannelToNoComMode(...)(见 SWS_ComM_00163)发起。LIN、FlexRay 和以太网上的行为相同,仅 API 名称不同。

图 11 — 网络关闭(CAN)

交互对象:EcuM、Dcm、ComM、Rte、VehicleModeManager、Nm、CanSM、BswM。

alt 关闭发起

:若使用 EcuM-Flex,BswM 应使用 BswM_ComM_RequestMode() 指示以知晓 ECU 何时可关机。

9.4 通信请求

图 12 显示在 CAN 上启动 COMM_FULL_COMMUNICATION 的可能性。可由用户请求 COMM_FULL_COMMUNICATION,或 DCM 指示 ComM_DCM_ActiveDiagnostic(见 SWS_ComM_00873)发起。LIN、FlexRay 和以太网上的行为相同,仅 API 名称不同。

图 12 — 通信请求

交互对象:EcuM、Dcm、Rte、ComM、Nm、CanSM。

alt 主动启动:[User request](用户请求)或 [Active diagnostic](活动诊断)

alt NM 变体:[Full]、[Passive]、[None/Light]

状态:COMM_NO_COM_NO_PENDING_REQUESTCOMM_NO_COM_REQUEST_PENDINGCOMM_FULL_COM_NETWORK_REQUESTED

流程:ComM_DCM_ActiveDiagnostic(NetworkHandleType) / ComM_RequestComMode(User, COMM_FULL_COMMUNICATION) → 等待 Communication Allowed = true → 启动 ComMTMinFullComModeDuration 定时器 → Nm_NetworkRequest(NetworkHandle)CanSM_RequestComMode(NetworkHandle, COMM_FULL_COMMUNICATION)ComM_BusSM_ModeIndication(Channel, COMM_FULL_COMMUNICATION)ComM_Nm_NetworkMode(...)

10 配置规范

本章定义配置参数及其到容器的分组。10.1 节描述基础规范,10.2 节规定 ComM 模块的结构(容器)和参数,10.3 节规定 ComM 模块的发布信息。

10.1 如何阅读本章

详情参阅 SWS_BSWGeneral 中"10.1 Introduction to configuration specification"章节。

10.2 容器与配置参数

[SWS_ComM_00419] ⌈ ComM 模块的预编译时与链接时配置参数应静态检查其正确性(最迟在链接时)。 ⌋(SRS_BSW_00167)

[SWS_ComM_00327] ⌈ ComM 模块的配置应支持通过静态配置将通信通道分配给用户。 ⌋(SRS_ModeMgm_09133)

[SWS_ComM_00159] ⌈ ComM 模块的配置应支持为用户配置多个通信通道。 ⌋(SRS_ModeMgm_09090)

理由:在多通道系统中,每个用户可被分配到一个或多个通道。若用户请求某模式,则所有分配给该用户的通道都应切换到相应模式,其他通道不受影响。

[SWS_ComM_00160] ⌈ 除 ComMNmVariant=PASSIVE 外,ComMUsers 应可与所有 ComMNmVariants 组合分配到 ComMChannels。 ⌋()

[SWS_ComM_00161] ⌈ 除 ComMNmVariant=PASSIVE 外,ComMUsers 应可与所有 ComMNmVariants 组合分配到引用 ComMChannelsPNCs。 ⌋()

[SWS_ComM_00322] ⌈ ComM 模块的配置应支持为每个通道配置总线类型。 ⌋()

理由:控制通信栈的接口取决于总线类型。

[SWS_ComM_00464] ⌈ ComM 模块应严格分离配置与实现。 ⌋(SRS_BSW_00158)

理由:简单清晰的配置。

10.2.1 ComM

SWS Item: ECUC_ComM_00890

Module Name:ComM
Module Description:ComM(通信管理器)模块的配置
Post-Build Variant Supporttrue
Supported Config VariantsVARIANT-POST-BUILD, VARIANT-PRE-COMPILE

包含的容器:ComMConfigSet (1)、ComMGeneral (1)、ComMChannel (1..256)、ComMNetworkManagement (1)、ComMUser (0..255)、ComMUserPerChannel (0..255)。

图 13 — Configuration ComM:容器层级 ComM → ComMGeneral + ComMConfigSet → (ComMChannel, ComMUser, ComMUserPerChannel) + ComMGeneral (含 ComMPncEnabled 参数)。

10.2.2 ComMGeneral

SWS Item: ECUC_ComM_00554

Container NameComMGeneral
Description:通信管理器的通用配置参数
配置参数

ECUC_ComM_00892 — ComM0PncVectorAvoidance:若启用 ComMPncGatewayEnabled,该参数避免发送 0-PNC 向量。范围:boolean,默认 false,scope: local。

ECUC_ComM_00555 — ComMDevErrorDetect:启用/关闭开发错误检测。范围:boolean,默认 false,scope: local。

ECUC_ComM_00840 — ComMDirectUserMapping:若设为 true,配置工具应自动为每个 ComMPnc 和 ComMChannel 创建一个 ComMUser。生成的 ComMUser 短名称遵循:PNCUser_ComMPncId(如 PNCUser_13)、ChannelUser_ComMChannelId(如 ChannelUser_25)。限制:由该参数创建的 ComMUser 不得被 SWC 使用(仅对 BswM 可用)。

ECUC_ComM_00563 — ComMEcuGroupClassification:定义模式抑制是否影响 ECU。示例:000:无可激活的模式抑制;001:可启用唤醒抑制。范围:0..255,默认 3,scope: local,依赖:应非易失存储(值必须在复位期间保留),可通过 ComM_SetECUGroupClassification() 在运行时更改。

ECUC_ComM_00560 — ComMModeLimitationEnabled:模式限制功能启用。范围:boolean,默认 false,scope: local。

ECUC_ComM_00887 — ComMPncGatewayEnabled:启用/禁用部分网络网关支持。范围:boolean,默认 false,scope: local。

ECUC_ComM_00841 — ComMPncPrepareSleepTimer:PNC 状态机在 COMM_PNC_PREPARE_SLEEP 中应等待的时间(秒)。范围:[0..63],默认无,scope: local。依赖:#CanNm: (CanNmPnResetTime + ComMPncPrepareSleepTimer) < CanNmTimeoutTime#FrNm: (FrNmPnResetTime + ComMPncPrepareSleepTimer) < ((FrNmReadySleepCnt +1) * FrNmRepetitionCycle * "Duration of one FlexRay Cycle")#UdpNm: (UdpNmPnResetTime + ComMPncPrepareSleepTimer) < UdpNmTimeoutTime

ECUC_ComM_00839 — ComMPncSupport:启用/禁用部分网络支持。范围:boolean,默认 false,scope: local。

ECUC_ComM_00558 — ComMResetAfterForcingNoComm:ComM 是否在因活动模式限制进入"无通信"模式后执行复位。范围:boolean,默认 false,scope: local。

ECUC_ComM_00695 — ComMSynchronousWakeUp:若为真,一个通道的唤醒将导致所有通道的唤醒。范围:boolean,默认 true,scope: local。

ECUC_ComM_00557 — ComMTMinFullComModeDuration:在 COMM_FULL_COM_NETWORK_REQUESTED 子状态中度过的最短时间(秒)。范围:[0.001..65],默认 5,scope: local。

ECUC_ComM_00622 — ComMVersionInfoApi:切换通过服务 ComM_GetPublishedInformation() 读取发布信息的可能性。范围:boolean,默认 false,scope: local。

ECUC_ComM_00559 — ComMWakeupInhibitionEnabled:唤醒抑制功能启用。范围:boolean,默认 false,scope: local。

ECUC_ComM_00783 — ComMGlobalNvMBlockDescriptor:指向包含非易失数据的 NVRAM 块的引用。若未配置,意味着完全不使用 NVRAM。范围:0..1,引用 [NvMBlockDescriptor],scope: ECU,依赖:源自 NvM 配置。

包含的容器:无。

10.2.3 ComMConfigSet

SWS Item: ECUC_ComM_00879

Container NameComMConfigSet
Description:此容器包含 AUTOSAR ComM 模块的配置参数和子容器。

ECUC_ComM_00878 — ComMPncEnabled:定义此配置集中部分网络是否启用。范围:0..1,boolean,默认 false,Post-Build Variant Multiplicity 为 true,scope: ECU,依赖:ComMPncSupport

包含的容器:ComMChannel (1..256)、ComMPnc (0..56)、ComMUser (0..255)。

10.2.4 ComMUser

SWS Item: ECUC_ComM_00653

Container NameComMUser
Description:此容器包含在系统中被指定请求通信模式的用户的标识符列表。

ECUC_ComM_00654 — ComMUserIdentifier:用于引用系统中被指定请求通信模式的用户的标识符。实现类型:ComM_UserHandleType。范围:0..254,默认无,scope: local,依赖:EcuMUser:用户概念与 EcuM 规范中的请求者概念非常相似。这两个参数应在配置过程中保持一致。

ECUC_ComM_00786 — ComMUserEcucPartitionRef:表示请求者所执行的"EcucPartition"。当分区停止时,通信请求应在 ComM 中取消,以避免由于停止的分区而导致的总线保持唤醒状况。范围:0..1,引用 [EcucPartition],scope: ECU。

10.2.5 ComMChannel

SWS Item: ECUC_ComM_00565

Container NameComMChannel
Description:此容器包含总线通道的配置(参数)。通道参数应在整个通信栈中协调一致。

ECUC_ComM_00567 — ComMBusType:标识通道的总线类型。范围:枚举 COMM_BUS_TYPE_CAN, COMM_BUS_TYPE_CDD, COMM_BUS_TYPE_ETH, COMM_BUS_TYPE_FR, COMM_BUS_TYPE_INTERNAL, COMM_BUS_TYPE_LIN,scope: ECU。

ECUC_ComM_00888 — ComMCDDBusPrefix:用于 CDD API 调用调用的前缀。范围:0..1,string,scope: local,依赖:仅当 ComMBusType = COMM_BUS_TYPE_CDD 时适用。

ECUC_ComM_00635 — ComMChannelId:相应通道的通道标识号。范围:0..255(符号名生成),scope: ECU,依赖:应与 networkmanagement 和总线接口的通道 ID 协调一致。

ECUC_ComM_00787 — ComMFullCommRequestNotificationEnabled:定义是否为本通道提供接口 ComM_CurrentChannelRequest 的可选 SenderReceiver 端口。范围:boolean,默认 false,scope: local,依赖:应非易失存储(值必须在复位期间保留)。

ECUC_ComM_00556 — ComMMainFunctionPeriod:主函数应被触发的周期(秒)。范围:]0..INF[,默认 0.02,scope: ECU,依赖:ComM 调度应至少与通信栈一样快,且长于 100ms 的调度对通信无意义。

ECUC_ComM_00571 — ComMNoCom:不允许将 ComM 通道状态切换到 COMM_SILENT_COMMUNICATIONCOMM_FULL_COMMUNICATION。范围:boolean,默认 false,scope: local,依赖:ComMModeLimitationEnabled,应可在运行时通过 ComM API 更改:ECU/所有通道:ComM_LimitECUToNoComMode();单独通道:ComM_LimitChannelToNoComMode()

ECUC_ComM_00569 — ComMNoWakeup:定义 ECU 是否不允许唤醒通道。范围:boolean,默认 false,scope: local,依赖:应非易失存储(值必须在复位期间保留)。

ECUC_ComM_00789 — ComMNoWakeUpInhibitionNvmStorage:若该参数设为 "true",通道的 NoWakeUp 抑制状态应以(实现特定方式)存储在由 ComMGlobalNvmBlockDescriptor 指向的块中。范围:boolean,scope: local,依赖:若设为 true,必须在 (现有的,即重数 1) ComMGlobalNvmBlockDescriptor 中给出有效的 Nvm 块引用,指向足够大的 Nvm 块。

ECUC_ComM_00842 — ComMPncGatewayType:标识 ComMChannel 的部分网络网关行为。范围:0..1,枚举 COMM_GATEWAY_TYPE_ACTIVE, COMM_GATEWAY_TYPE_PASSIVE,scope: ECU,依赖:参数不得用于被管理通道(既不可设为 COMM_GATEWAY_TYPE_ACTIVE,也不可设为 COMM_GATEWAY_TYPE_PASSIVE)。

ECUC_ComM_00893 — ComMManageReference:表示作为管理通道的 ComMChannel 与作为被管理通道的 ComMChannel 之间的引用。范围:0..1,引用 [ComMChannel],scope: local。

包含的容器:ComMNetworkManagement (1)、ComMUserPerChannel (0..255)。

[SWS_ComM_00690] ⌈ 配置参数 ComMNoComECUC_ComM_00571)在 ComMModeLimitationEnabled = FALSE = DisabledECUC_ComM_00560)的情况下无需评估,因此可在该情况下移除以减少/优化配置。 ⌋()

10.2.6 ComMNetworkManagement

SWS Item: ECUC_ComM_00607

Container NameComMNetworkManagement
Description:此容器包含网络管理的配置参数。

ECUC_ComM_00606 — ComMNmLightTimeout:定义离开 COMM_FULL_COM_READY_SLEEP 子状态后的超时(秒)。范围应大于 0.0 且小于等于 255.0。范围:[0..255],默认 10,scope: local,依赖:仅当 ComMNmVariant 配置为 ComMLight 时使用。

ECUC_ComM_00568 — ComMNmVariant:定义网络管理的功能。应与 NM 配置协调。范围:枚举 FULL, LIGHT, LINSLAVE, NONE, PASSIVE,默认 FULL,scope: local,依赖:

ECUC_ComM_00886 — ComMPncNmRequest:若该参数等于 true,则每当因 PNC 状态机变化为 COMM_PNC_REQUESTED 而请求 FULL Communication 时,Nm 应使用 API Nm_NetworkRequest 被调用。范围:boolean,默认 false,scope: local,依赖:仅当 ComMNmVariantFULL 时,才可将其设为 TRUE

10.2.7 ComMUserPerChannel

SWS Item: ECUC_ComM_00657

Container NameComMUserPerChannel
Description:此容器包含在系统中链接到通道的用户的标识符列表。

ECUC_ComM_00658 — ComMUserChannel:指向与此通道用户对应的 ComMUser 的引用。实现类型:COMM_UserHandleType。范围:1,引用 [ComMUser],scope: local。

10.2.8 ComMPnc

SWS Item: ECUC_ComM_00843

Container NameComMPnc
Description:此容器包含部分网络集群(PNC)的配置。

ECUC_ComM_00874 — ComMPncId:部分网络集群标识号。范围:8..63,scope: ECU。

ECUC_ComM_00880 — ComMChannelPerPnc:指向此 PNC 所需的 ComMChannel 的引用。实现类型:NetworkHandleType。范围:1..256,引用 [ComMChannel],Post-Build Variant Multiplicity 为 true,scope: local。

ECUC_ComM_00891 — ComMPncEthIfSwitchPortGroupRef:指向与此 PNC 对应的 PortGroups 的引用。:此参数仅用于文档目的。范围:0..255,符号名引用 [EthIfSwitchPortGroup],scope: ECU。

ECUC_ComM_00876 — ComMUserPerPnc:指向与此 PNC 对应的 ComMUsers 的引用。实现类型:COMM_UserHandleType。范围:0..255,引用 [ComMUser],Post-Build Variant Multiplicity 为 true,scope: local。

包含的容器:ComMPncComSignal (0..*)。

10.2.9 ComMPncComSignal

SWS Item: ECUC_ComM_00881

Container NameComMPncComSignal
Description:表示用于传递此 PNC 的 EIRA 和 ERA 状态的 PncComSignals。

ECUC_ComM_00885 — ComMPncComSignalDirection:指示此 PncComSignal 的通信方向。范围:枚举 RX, TX,scope: local。

ECUC_ComM_00883 — ComMPncComSignalKind:指示此 PncComSignal 表示 EIRA 还是 ERA PNC 信息。当 ComMPncComSignalDirection = TX 时,该参数 ComMPncComSignalKind 是可选的并应被忽略。范围:0..1,枚举 EIRA, ERA,scope: local,依赖:ComMPncGatewayEnabled

ECUC_ComM_00884 — ComMPncComSignalChannelRef:指向 ComMChannel 的引用,用于确定此 PncComSignal 应在主动还是被动角色中参与(通过 ComMChannel 的参数 ComMPncGatewayType)。范围:0..1,引用 [ComMChannel],scope: local。

ECUC_ComM_00882 — ComMPncComSignalRef:指向用于传输部分网络通道请求信息的 ComSignal 的引用。范围:1,符号名引用 [ComSignal],scope: ECU。

10.3 发布信息

[SWS_ComM_00418] ⌈ 模块头文件和源文件中的版本信息应被验证且一致(例如,通过将模块头文件和源文件中的版本信息与预处理器宏进行比较)。 ⌋(SRS_BSW_00004)

11 不适用的需求

[SWS_ComM_00499] ⌈ 这些需求不适用于本规范。 ⌋(SRS_BSW_00005, _00009, _00010, _00161, _00162, _00164, _00168, _00170, _00314, _00325, _00341, _00343, _00344, _00353, _00361, _00375, _00378, _00398, _00404, _00405, _00413, _00416, _00417, _00422, _00423, _00424, _00425, _00426, _00427, _00428, _00429, _00432, _00433, _00437, _00438, _00439