1702 lines
95 KiB
Markdown
1702 lines
95 KiB
Markdown
# SAE J1939 诊断通信管理器规范
|
||
|
||
| 属性 | 值 |
|
||
|---|---|
|
||
| 文档标题 | SAE J1939 诊断通信管理器规范 (Specification of a Diagnostic Communication Manager for SAE J1939) |
|
||
| 文档所有者 | AUTOSAR |
|
||
| 文档责任方 | AUTOSAR |
|
||
| 文档标识号 | 610 |
|
||
| 文档状态 | Final |
|
||
| 所属 AUTOSAR 标准 | Classic Platform |
|
||
| 所属标准发布版本 | 4.4.0 |
|
||
| 原文 PDF | AUTOSAR_SWS_SAEJ1939DiagnosticCommunicationManager.pdf(共 84 页) |
|
||
|
||
---
|
||
|
||
## 文档变更历史
|
||
|
||
| 日期 | 发布版本 | 变更人 | 变更说明 |
|
||
|---|---|---|---|
|
||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 更改了头文件结构;为 DM35 分配独立缓冲区;修正 "SPN support type" 位值;修复了面向 DEM 的 API |
|
||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 修复了用于环境检查的应用数据元素的实例引用;增加了失败传输的重试机制;引入了运行时错误 |
|
||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 澄清、修正与优化;DM1 中可配置的最大 DTC 数量;支持 DM53、DM54 和 DM55;扩展 J1939DcmBusType 枚举值 |
|
||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 澄清;多网络上的 DM01 处理;DM19 更新了否定响应码 |
|
||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 优化;编辑性修订 |
|
||
| 2014-03-31 | 4.1.3 | AUTOSAR Release Management | 完善 J1939Dcm_DemTriggerOnDTCStatus;小修正;编辑性修订 |
|
||
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 引入服务接口的形式化描述;配置更多 DMx 消息;修订 DEM 接口;编辑性修订 |
|
||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始发布 |
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
- [1 介绍与功能概述](#1-介绍与功能概述)
|
||
- [1.1 基于 SAE J1939 的诊断](#11-基于-sae-j1939-的诊断)
|
||
- [2 缩略语和缩写](#2-缩略语和缩写)
|
||
- [3 相关文档](#3-相关文档)
|
||
- [3.1 输入文档](#31-输入文档)
|
||
- [3.2 相关标准和规范](#32-相关标准和规范)
|
||
- [3.3 相关规范](#33-相关规范)
|
||
- [4 约束与假设](#4-约束与假设)
|
||
- [4.1 限制](#41-限制)
|
||
- [4.2 对汽车域的适用性](#42-对汽车域的适用性)
|
||
- [5 与其他模块的依赖关系](#5-与其他模块的依赖关系)
|
||
- [5.1 文件结构](#51-文件结构)
|
||
- [6 需求可追溯性](#6-需求可追溯性)
|
||
- [7 功能规范](#7-功能规范)
|
||
- [7.1 概述](#71-概述)
|
||
- [7.2 模块处理](#72-模块处理)
|
||
- [7.3 消息处理](#73-消息处理)
|
||
- [7.4 通信状态处理](#74-通信状态处理)
|
||
- [7.5 模式相关请求执行](#75-模式相关请求执行)
|
||
- [7.6 J1939Dcm – DEM 交互](#76-j1939dcm--dem-交互)
|
||
- [7.7 诊断消息](#77-诊断消息)
|
||
- [7.8 错误分类](#78-错误分类)
|
||
- [8 API 规范](#8-api-规范)
|
||
- [8.1 导入类型](#81-导入类型)
|
||
- [8.2 类型定义](#82-类型定义)
|
||
- [8.3 函数定义](#83-函数定义)
|
||
- [8.4 回调通知](#84-回调通知)
|
||
- [8.5 调度函数](#85-调度函数)
|
||
- [8.6 期望接口](#86-期望接口)
|
||
- [8.7 服务接口](#87-服务接口)
|
||
- [9 时序图](#9-时序图)
|
||
- [10 配置规范](#10-配置规范)
|
||
- [10.2 容器与配置参数](#102-容器与配置参数)
|
||
|
||
---
|
||
|
||
## 1 介绍与功能概述
|
||
|
||
本规范规定了 AUTOSAR 基本软件模块 **J1939 诊断通信管理器 (J1939 Diagnostic Communication Manager)** 的功能、API 和配置。
|
||
|
||
### 1.1 基于 SAE J1939 的诊断
|
||
|
||
SAE J1939-73 定义了所谓 **诊断消息 (Diagnostic Messages, DMs)** 的消息结构和行为,这些消息用于 J1939 网络中的诊断通信。
|
||
|
||
除了车辆维修过程中的通信之外,它还在车辆运行期间用于将即时诊断信息上报到车辆中,例如周期性向仪表盘广播当前活动的 DTC(诊断故障码),以便通过不同的指示灯状态将车辆状态通知驾驶员。
|
||
|
||
---
|
||
|
||
## 2 缩略语和缩写
|
||
|
||
| 缩写 / 术语 | 描述 |
|
||
|---|---|
|
||
| ACKM | 应答消息 (Acknowledgement Message),J1939 PGN `0xE800`(参见 J1939-21 中 0E800₁₆) |
|
||
| DEM | 诊断事件管理器 (Diagnostic Event Manager) |
|
||
| DET | 默认错误跟踪器 (Default Error Tracer) |
|
||
| DM | 诊断消息 (Diagnostic messages) |
|
||
| PGN | 参数组编号 (Parameter Group Number) |
|
||
| SAE | 美国汽车工程师学会 (Society of Automotive Engineers,J1939 规范制定方) |
|
||
| SPN | 可疑参数编号 (Suspect Parameter Number) |
|
||
|
||
---
|
||
|
||
## 3 相关文档
|
||
|
||
### 3.1 输入文档
|
||
|
||
- [1] Basic Software Modules 列表 — `AUTOSAR_TR_BSWModuleList.pdf`
|
||
- [2] 分层软件架构 — `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf`
|
||
- [3] Basic Software Modules 通用需求 — `AUTOSAR_SRS_BSWGeneral.pdf`
|
||
- [4] Basic Software Modules 通用规范 — `AUTOSAR_SWS_BSWGeneral.pdf`
|
||
- [5] 诊断需求 — `AUTOSAR_SRS_Diagnostic.pdf`
|
||
- [6] 通信栈类型规范 — `AUTOSAR_SWS_CommunicationStackTypes.pdf`
|
||
- [7] 系统模板 — `AUTOSAR_TPS_SystemTemplate.pdf`
|
||
- [8] 诊断事件管理器规范 — `AUTOSAR_SWS_DiagnosticEventManager.pdf`
|
||
- [9] PDU 路由器规范 — `AUTOSAR_SWS_PDURouter.pdf`
|
||
- [10] 默认错误跟踪器规范 — `AUTOSAR_SWS_DefaultErrorTracer.pdf`
|
||
- [11] SAE J1939 请求管理器规范 — `AUTOSAR_SWS_SAEJ1939RequestManager.pdf`
|
||
- [12] SAE J1939 网络管理规范 — `AUTOSAR_SWS_SAEJ1939NetworkManagement.pdf`
|
||
- [13] BSW 调度器规范 — `AUTOSAR_SWS_BSWScheduler.pdf`
|
||
- [14] ECU 配置规范 — `AUTOSAR_TPS_ECUConfiguration.pdf`
|
||
- [15] 内存映射规范 — `AUTOSAR_SWS_MemoryMapping.pdf`
|
||
- [16] Basic Software Modules 通用规范 — `AUTOSAR_SWS_BSWGeneral.pdf`
|
||
|
||
### 3.2 相关标准和规范
|
||
|
||
- [17] **J1939-73 FEB2010**, Application Layer – Diagnostics
|
||
|
||
### 3.3 相关规范
|
||
|
||
AUTOSAR 提供了 Basic Software Modules 通用规范 [16](SWS BSW General),该规范同样适用于 SAE J1939 传输层。
|
||
|
||
因此,SWS BSW General 应被视为 SAE J1939 诊断通信管理器的一项附加且必需的规范。
|
||
|
||
---
|
||
|
||
## 4 约束与假设
|
||
|
||
### 4.1 限制
|
||
|
||
J1939 诊断通信管理器仅实现表 1 中所列诊断消息的一个子集。
|
||
|
||
- DM13 不支持 "Suspend Signal"(暂停信号)和 "Suspend Duration"(暂停时长)。
|
||
- 对于未支持或未配置的接收 DMx 消息不提供 NACK(否定应答)。此限制主要影响 DM07 和 DM13 的处理。
|
||
|
||
### 4.2 对汽车域的适用性
|
||
|
||
J1939 是 SAE 为重型公路车辆、农机和工程车辆制定的标准,不适用于乘用车或轻型卡车。J1939 诊断通信管理器将仅在重型公路车辆上使用,因为 AUTOSAR 目前排除了其他域。
|
||
|
||
---
|
||
|
||
## 5 与其他模块的依赖关系
|
||
|
||
J1939 诊断通信管理器 (J1939Dcm) 与以下模块存在接口:
|
||
|
||
- PDU Router (PduR, 上下层)
|
||
- J1939 Request Management 模块 (J1939Rm)
|
||
- Diagnostic Event Manager 模块 (DEM)
|
||
- Default Error Tracer (DET)
|
||
|
||
**图 1:J1939Dcm 模块的模块依赖关系(UML 组件图,详见原文 PDF 第 12-13 页)**
|
||
|
||
J1939 诊断通信管理器仅包含 PDU Router、J1939 Request Manager、DEM 和 Default Error Tracer 的头文件。其余接口由生成的头文件提供。
|
||
|
||
### 5.1 文件结构
|
||
|
||
#### 5.1.1 代码文件结构
|
||
|
||
有关详细信息,请参阅 SWS BSW General [4] 的第 5.1.6 节 "Code file structure"。
|
||
|
||
#### 5.1.2 头文件结构
|
||
|
||
有关详细信息,请参阅 SWS BSW General [4] 的第 5.1.7 节 "Header file structure"。
|
||
|
||
---
|
||
|
||
## 6 需求可追溯性
|
||
|
||
| 需求 ID | 描述 | 满足于 |
|
||
|---|---|---|
|
||
| `SRS_Diag_04112` | DEM 模块应支持符合 SAE J1939 的 DTC | `SWS_J1939Dcm_00048`, `SWS_J1939Dcm_00049`, `SWS_J1939Dcm_00177`, `SWS_J1939Dcm_00178`, `SWS_J1939Dcm_00179`, `SWS_J1939Dcm_00180`, `SWS_J1939Dcm_00181`, `SWS_J1939Dcm_00182`, `SWS_J1939Dcm_00183`, `SWS_J1939Dcm_00184` |
|
||
| `SRS_Diag_04113` | 支持一组 SAE J1939 DM 消息 | `SWS_J1939Dcm_00197` |
|
||
|
||
> 完整需求映射表见原文 PDF 第 15 页。
|
||
|
||
---
|
||
|
||
## 7 功能规范
|
||
|
||
本章定义 J1939 诊断通信管理器的行为。模块的 API 在第 8 章中定义,配置在第 10 章中定义。
|
||
|
||
### 7.1 概述
|
||
|
||
J1939 诊断通信管理器负责处理诊断请求消息并发送相应的应答 ACKM 参数组 (PG)。
|
||
|
||
#### 7.1.1 支持的诊断消息
|
||
|
||
下表定义了支持的 DMx 消息(PGN 用十六进制表示)。
|
||
|
||
| 名称 | PGN | 接收大小 | 发送 | 周期 | 描述 |
|
||
|---|---|---|---|---|---|
|
||
| DM01 | FECA | Var. | — | Cyclic 1s | 活动的诊断故障码 (Active Diagnostic Trouble Codes) |
|
||
| DM02 | FECB | Var. | — | On Request | 之前活动的诊断故障码 (Previously Active DTC) |
|
||
| DM03 | FECC | — | — | On Request | 清除/复位之前活动 DTC 的诊断数据 |
|
||
| DM04 | FECD | Var. | — | On Request | 冻结帧参数 (Freeze Frame Parameters) |
|
||
| DM05 | FECE | 8 | — | On Request | 诊断就绪状态 1 (Diagnostic Readiness 1) |
|
||
| DM06 | FECF | Var. | — | On Request | 与排放相关的待定 DTC (Emission Related Pending DTCs) |
|
||
| DM11 | FED3 | — | — | On Request | 清除/复位活动 DTC 的诊断数据 |
|
||
| DM12 | FED4 | Var. | — | On Request | 与排放相关的活动 DTC (Emissions Related Active DTCs) |
|
||
| DM13 | DF00 | 8 | X | — | 停止/启动广播 (Stop Start Broadcast) |
|
||
| DM19 | D300 | Var. | — | On Request | 标定信息 (Calibration Information) |
|
||
| DM20 | C200 | Var. | — | On Request | 监测器性能比率 (Monitor Performance Ratio) — SAE J1939-73 修订版 SEP2006 |
|
||
| DM21 | C100 | 8 | — | On Request | 诊断就绪状态 2 (Diagnostic Readiness 2) |
|
||
| DM23 | FDB5 | Var. | — | On Request | 之前活动的与排放相关故障 |
|
||
| DM24 | FDB6 | 8 | — | On Request | SPN 支持 (SPN Support) |
|
||
| DM25 | FDB7 | Var. | — | On Request | 扩展冻结帧 (Expanded Freeze Frame) |
|
||
| DM26 | FDB8 | Var. | — | On Request | 诊断就绪状态 3 (Diagnostic Readiness 3) |
|
||
| DM28 | FD80 | Var. | — | On Request | 永久 DTC (Permanent DTCs) |
|
||
| DM29 | 9E00 | 8 | — | On Request | 受监管的 DTC 计数 (Pending, Permanent, MIL-On, PMIL-On) |
|
||
| DM31 | A300 | Var. | — | On Request | DTC 到指示灯的关联 (DTC to Lamp Association) |
|
||
| DM35 | 9F00 | Var. | — | On Request | 即时故障状态 (Immediate Fault Status) |
|
||
| DM53 | FCD1 | Var. | — | On Request | 活动的仅维修 DTC (Active Service Only DTCs) |
|
||
| DM54 | FCD2 | Var. | — | On Request | 之前活动的仅维修 DTC (Previously Active Service Only DTCs) |
|
||
| DM55 | FCD3 | Var. | — | On Request | 清除/复位所有仅维修 DTC 的诊断数据 |
|
||
|
||
**表 1:支持的 DMx 消息**
|
||
|
||
`[SWS_J1939Dcm_00193]` ⌈ 变长 DMx 消息通过 J1939Tp 进行交换,使用 TP API:
|
||
- 发送:`PduR_J1939DcmTransmit`、`J1939Dcm_CopyTxData`、`J1939Dcm_TpTxConfirmation`
|
||
- 接收:`J1939Dcm_StartOfReception`、`J1939Dcm_CopyRxData`、`J1939Dcm_TpRxIndication`
|
||
|
||
固定大小为 8 字节的 DMx 消息通过 CanIf 进行交换,使用 IF API:
|
||
- 发送:`PduR_J1939DcmTransmit`、`J1939Dcm_TxConfirmation`
|
||
- 接收:`J1939Dcm_RxIndication` ⌋
|
||
|
||
### 7.2 模块处理
|
||
|
||
本节描述 J1939 诊断通信管理器的辅助功能描述。
|
||
|
||
#### 7.2.1 初始化
|
||
|
||
J1939 诊断通信管理器通过 `J1939Dcm_Init` 初始化,通过 `J1939Dcm_DeInit` 去初始化。除 `J1939Dcm_GetVersionInfo` 和 `J1939Dcm_Init` 之外,J1939 诊断通信管理器的 API 函数仅可在模块已正确初始化之后调用。
|
||
|
||
`[SWS_J1939Dcm_00002]` ⌈ 调用 `J1939Dcm_Init` 初始化所有内部变量,并将 J1939 诊断通信管理器设置为已初始化状态。⌋
|
||
|
||
`[SWS_J1939Dcm_00003]` ⌈ 调用 `J1939Dcm_DeInit` 将 J1939 诊断通信管理器设置回未初始化状态。⌋
|
||
|
||
`[SWS_J1939Dcm_00005]` ⌈ 在已初始化状态下调用 `J1939Dcm_Init` 时,J1939 诊断通信管理器不得重新初始化其内部变量,而应调用 `Det_ReportError` 并以错误码 `J1939DCM_E_REINIT` 报告错误(前提是已通过 `J1939DcmDevErrorDetect` 启用 DET 上报)。⌋
|
||
|
||
### 7.3 消息处理
|
||
|
||
#### 7.3.1 请求的接收
|
||
|
||
J1939 诊断通信管理器通过 `J1939Dcm_RequestIndication` 从 J1939 Request Manager 接收 DMx PG(DM01 至 DM52)的大多数请求。例外情况是命令消息(见表 1 中"接收"列中标记的)。
|
||
|
||
`[SWS_J1939Dcm_00091]` ⌈ J1939Dcm 中配置的 DMx 消息应与 J1939Rm 中为 `J1939RmUserType J1939RM_USER_J1939DCM` 配置的 `J1939RmUserPGN` 匹配。⌋
|
||
|
||
`[SWS_J1939Dcm_00006]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_RequestIndication` 应检查 `requestedPgn` 参数是否寻址已配置的 DMx 消息(`J1939DcmDiagnsoticMessageSupport` 中能找到对应的 PGN,见表 1 的 "PGN (Hexadecimal)" 列)。如果出错,函数 `J1939Dcm_RequestIndication` 应不产生任何效果并返回,同时以错误码 `J1939DCM_E_INVALID_PGN` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
`[SWS_J1939Dcm_00007]` ⌈ 当调用 `J1939Dcm_RequestIndication` 且请求的诊断消息受支持(通过容器 `J1939DcmDiagnsoticMessageSupport` 中的 DMx 特定配置开关配置)时,J1939 诊断通信管理器应(DM01 和 DM35 消息除外,见 7.7.1 中 DM01 和 7.7.20 中 DM35 的处理)锁定公共缓冲区([`SWS_J1939Dcm_00115`])并在 `J1939Dcm_MainFunction` 的下一次执行中开始处理。⌋
|
||
|
||
> 注:由于 `[SWS_J1939Dcm_00091]`,J1939Rm 会对不受支持的 DMx 消息发送 NACK,因此 `J1939Dcm_RequestIndication` 不会调用 NACK。
|
||
|
||
`[SWS_J1939DCM_00173]` ⌈ 如果新接收的诊断消息在当前模式条件(根据配置参数 `J1939DcmDiagnosticMessageModeRuleRef`)下不被允许,则 J1939Dcm 应忽略当前请求。⌋
|
||
|
||
`[SWS_J1939Dcm_00115]` ⌈ J1939Dcm 应提供一个大小为 `J1939DcmCommonBufferSize` 的缓冲区用于公共 DMx 消息处理,并提供一个信号量来锁定缓冲区以防止该缓冲区的多次使用。⌋
|
||
|
||
`[SWS_J1939Dcm_00008]` ⌈ 当调用 `J1939Dcm_RequestIndication` 且当前正在处理任何其他诊断消息(DM01 和 DM35 除外)时,J1939 诊断通信管理器应调用 `J1939Rm_SendAck` 并将参数 `ackCode` 设置为 `J1939RM_ACK_CANNOT_RESPOND` 以发送否定应答(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
J1939 诊断在向全局地址发出请求后不要求肯定或否定应答。
|
||
|
||
`[SWS_J1939Dcm_00113]` ⌈ 当 `J1939Dcm_RequestIndication` 在目标地址 (`destAddress`) 设置为全局地址 (`0xFF`) 的情况下被调用时,J1939Dcm 不应调用 `J1939Rm_SendAck` 发送应答。⌋
|
||
|
||
#### 7.3.2 失败的消息传输
|
||
|
||
`[SWS_J1939Dcm_00197]` ⌈ 当 `PduR_J1939DcmTransmit` 返回除 `E_OK` 之外的任何值,或当 `J1939Dcm_TpTxConfirmation` 或 `J1939Dcm_TxConfirmation` 上报 `E_NOT_OK` 时,J1939Dcm 应在下一个主函数中重试失败的传输。⌋ (`SRS_Diag_04113`)
|
||
|
||
#### 7.3.3 消息的终止
|
||
|
||
`[SWS_J1939Dcm_00009]` ⌈ 对于通过 TP 发送的消息(表 1 中 Size 为 Var.),当根据 `[SWS_J1939Dcm_00007]` 接受并处理了所请求的消息后,通过 `J1939Dcm_TpTxConfirmation` 调用来终止传输。J1939 诊断通信管理器随后应释放 [`SWS_J1939Dcm_00115`] 中的缓冲区。⌋
|
||
|
||
`[SWS_J1939Dcm_00164]` ⌈ 对于通过 IF 发送的消息(表 1 中 Size 为 8),当根据 `[SWS_J1939Dcm_00007]` 接受并处理了所请求的消息后,通过 `J1939Dcm_TxConfirmation` 调用来终止传输。J1939 诊断通信管理器随后应释放 [`SWS_J1939Dcm_00115`] 中的缓冲区。⌋
|
||
|
||
#### 7.3.4 元数据处理
|
||
|
||
`[SWS_J1939Dcm_00194]` ⌈ 类型为 `CAN_ID_32` 的元数据项在第四个(最低有效)字节中包含源地址。⌋
|
||
|
||
`[SWS_J1939Dcm_00195]` ⌈ 类型为 `CAN_ID_32` 的元数据项在第三个字节中包含目标地址。⌋
|
||
|
||
`[SWS_J1939Dcm_00196]` ⌈ 类型为 `CAN_ID_32` 的元数据项的优先级位于第一个(最高有效)字节的第 2-4 位,其中位 0 是一个字节的最低有效位。⌋
|
||
|
||
### 7.4 通信状态处理
|
||
|
||
通常,仅当 ECU 在线时诊断才处于活动状态并可用(详见 [12])。J1939 诊断通信管理器提供一个由 BSW Mode Manager (BswM) 调用的 API,用于通知 J1939 通信状态。
|
||
|
||
`[SWS_J1939Dcm_00125]` ⌈ 在通过 `J1939Dcm_Init` 进行初始化期间,J1939 诊断通信管理器假定为离线状态。⌋
|
||
|
||
`[SWS_J1939Dcm_00126]` ⌈ 调用 `J1939Dcm_SetState` 将 J1939 诊断通信管理器设置为在线或离线状态。⌋
|
||
|
||
`[SWS_J1939Dcm_00127]` ⌈ 在离线状态下,J1939 诊断通信管理器不应推进任何周期性消息。⌋
|
||
|
||
> 注:当 J1939Rm 假定为 `J1939RM_STATE_OFFLINE` 时,它不会将任何请求消息转发到 J1939Dcm。
|
||
|
||
### 7.5 模式相关请求执行
|
||
|
||
请求的执行可以根据模式条件进行限制。这使得 J1939Dcm 能够形式化环境检查。
|
||
|
||
`[SWS_J1939DCM_00168]` ⌈ `J1939DcmModeRule` 应按以下方式评估所有引用的 `J1939DcmModeConditions` 和/或嵌套的 `J1939DcmModeRules`:
|
||
- 当 `J1939DcmLogicalOperator` 设置为 `J1939DCM_AND` 时执行逻辑与
|
||
- 当 `J1939DcmLogicalOperator` 设置为 `J1939DCM_OR` 时执行逻辑或
|
||
|
||
如果仅引用了单个 `J1939DcmModeCondition` 或 `J1939DcmModeRule`,则 `J1939DcmLogicalOperator` 应不存在,因此不被使用。⌋
|
||
|
||
`[SWS_J1939Dcm_CONSTR_6201]` ⌈ `J1939DcmModeCondition` 应具有以下外部引用之一:`J1939DcmBswModeRef`、`J1939DcmSwcModeRef` 或 `J1939DcmSwcSRDataElementRef`。⌋
|
||
|
||
`[SWS_J1939DCM_00169]` ⌈ `J1939DcmModeCondition` 的 `J1939DcmSwcModeRef` 和 `J1939DcmBswModeRef` 应按以下方式评估:
|
||
- 当 `J1939DcmConditionType` 设置为 `J1939DCM_EQUALS` 时,所引用的 `Mode-Declaration` 应被设置
|
||
- 当 `J1939DcmConditionType` 设置为 `J1939DCM_EQUALS_NOT` 时,所引用的 `Mode-Declaration` 应未被设置
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939DCM_00170]` ⌈ `J1939DcmModeCondition` 的 `J1939DcmSwcSRDataElementRef` 应按以下方式评估所引用的数据元素(通过 `J1939DcmExternalSRDataElementClass`):
|
||
- 当 `J1939DcmConditionType` 为 `J1939DCM_EQUALS` 时,等于 `J1939DcmSwcSRDataElementValue` 所表示的值
|
||
- 当 `J1939DcmConditionType` 为 `J1939DCM_EQUALS_NOT` 时,不等于该值
|
||
- 当 `J1939DcmConditionType` 为 `J1939DCM_GREATER_THAN` 时,大于该值
|
||
- 当 `J1939DcmConditionType` 为 `J1939DCM_GREATER_OR_EQUAL` 时,大于或等于该值
|
||
- 当 `J1939DcmConditionType` 为 `J1939DCM_LESS_THAN` 时,小于该值
|
||
- 当 `J1939DcmConditionType` 为 `J1939DCM_LESS_OR_EQUAL` 时,小于或等于该值
|
||
- ⌋
|
||
|
||
`[SWS_J1939Dcm_CONSTR_6202]` ⌈ 值 `J1939DCM_GREATER_THAN`、`J1939DCM_GREATER_OR_EQUAL`、`J1939DCM_LESS_OR_EQUAL` 和 `J1939DCM_LESS_THAN` 不应与模式引用(`J1939DcmBswModeRef` 或 `J1939DcmSwcModeRef`)一起使用。⌋
|
||
|
||
> 注:所引用的 `ModeDeclarationGroupPrototypes` 的当前模式可以通过 API `SchM_Mode`(对于 `J1939DcmBswModeRef`)或 `Rte_Mode`(对于 `J1939DcmSwcModeRef`)读取。
|
||
|
||
`[SWS_J1939DCM_00171]` ⌈ 如果在 `J1939DcmModeRule` 中引用了多个 `J1939DcmModeConditions`,则应按 `J1939DcmArgumentRef` 的 `EcucReferenceValues` 的索引属性顺序对其进行评估。⌋
|
||
|
||
`[SWS_J1939DCM_00172]` ⌈ 对于 `J1939DcmModeConditions` 的每个 `J1939DcmSwcModeRef`,J1939Dcm 应为常用的 `ModeDeclarationGroupPrototype` 创建一个引用此 `ModeDeclarationGroupPrototype` 的必需模式切换端口。如果 `ModeDeclarationGroupPrototype` 短名称唯一,则此端口原型的命名模式为 `J1939DcmModeUser_<ModeDeclarationGroupPrototype>`。否则命名模式是实现特定的,但必需的前缀为 `"J1939DcmModeUser_"`。⌋
|
||
|
||
> 注:`ModeDeclarationGroupPrototypes` 不一定唯一,因此需要此例外以避免 J1939Dcm Service-SWC 中的名称冲突。
|
||
|
||
### 7.6 J1939Dcm – DEM 交互
|
||
|
||
许多诊断消息从诊断事件管理器 (DEM) 上报 DTC 信息。这些消息中的大多数结构相同,因此使用相同的 API 序列。
|
||
|
||
`[SWS_J1939Dcm_00133]` ⌈ J1939Dcm 应确保对 DEM 的访问严格序列化,即一次只能并行执行一个 DEM 序列。⌋
|
||
|
||
> 注:这是通过锁定全局缓冲区(见 `[SWS_J1939Dcm_00007]`)隐式实现的,适用于除 DM01、DM03、DM11 和 DM35 之外的所有诊断消息。因此,实现必须注意:DM01、DM03、DM11 和 DM35 的执行不能在全局缓冲区被锁定时启动,反之亦然。
|
||
|
||
#### 7.6.1 DTC 状态
|
||
|
||
| 诊断消息 | DTCStatusFilter 参数 | DTCKind | DTCOrigin |
|
||
|---|---|---|---|
|
||
| DM01 活动 DTC | `DEM_J1939DTC_ACTIVE` | `DEM_DTC_KIND_ALL_DTCS` | `DEM_DTC_ORIGIN_PRIMARY_MEMORY` |
|
||
| DM02 之前活动 DTC | `DEM_J1939DTC_PREVIOUSLY_ACTIVE` | `DEM_DTC_KIND_ALL_DTCS` | `DEM_DTC_ORIGIN_PRIMARY_MEMORY` |
|
||
| DM06 排放相关待定 DTC | `DEM_J1939DTC_PENDING` | `DEM_DTC_KIND_EMISSION_REL_DTCS` | `DEM_DTC_ORIGIN_PRIMARY_MEMORY` |
|
||
| DM12 排放相关活动 DTC | `DEM_J1939DTC_ACTIVE` | `DEM_DTC_KIND_EMISSION_REL_DTCS` | `DEM_DTC_ORIGIN_PRIMARY_MEMORY` |
|
||
| DM23 之前活动排放相关故障 | `DEM_J1939DTC_PREVIOUSLY_ACTIVE` | `DEM_DTC_KIND_EMISSION_REL_DTCS` | `DEM_DTC_ORIGIN_PRIMARY_MEMORY` |
|
||
| DM28 永久 DTC | `DEM_J1939DTC_PERMANENT` | `DEM_DTC_KIND_EMISSION_REL_DTCS` | `DEM_DTC_ORIGIN_PRIMARY_MEMORY` |
|
||
| DM35 即时故障状态 | `DEM_J1939DTC_CURRENTLY_ACTIVE` | `DEM_DTC_KIND_ALL_DTCS` | `DEM_DTC_ORIGIN_PRIMARY_MEMORY` |
|
||
| DM53 活动仅维修 DTC | `DEM_J1939DTC_ACTIVE` | `DEM_DTC_KIND_ALL_DTCS` | 来源自 `J1939DcmServiceOnlyDTCsMemoryDestinationRef` |
|
||
| DM54 之前活动仅维修 DTC | `DEM_J1939DTC_PREVIOUSLY_ACTIVE` | `DEM_DTC_KIND_ALL_DTCS` | 来源自 `J1939DcmServiceOnlyDTCsMemoryDestinationRef` |
|
||
|
||
**表 2:诊断消息的过滤条件**
|
||
|
||
`[SWS_J1939Dcm_00010]` ⌈ 在 DTC 状态序列开始时,J1939 诊断通信管理器应调用 `Dem_J1939DcmSetDTCFilter`,其参数 `DTCStatusFilter` 和 `DTCKind` 由触发该序列的 DMx 消息以及所请求节点的已分配 `DemClient` 定义。⌋
|
||
|
||
`[SWS_J1939Dcm_00011]` ⌈ 如果 `Dem_J1939DcmSetRatioFilter`、`Dem_J1939DcmSetDTCFilter` 或 `Dem_J1939DcmSetFreezeFrameFilter` 返回 `E_OK`,则参数 `LampStatus` 中的值应按照 SAE J1939-73 编码到响应消息布局中。高字节是响应消息中的字节 1,低字节是响应消息中的字节 2。⌋
|
||
|
||
> 注:参数 `LampStatus` 的位结构已由 DEM 模块按 SAE J1939-73 进行组织,因此 J1939Dcm 不需要重新排列。
|
||
|
||
`[SWS_J1939Dcm_00012]` ⌈ 如果 `Dem_J1939DcmSetRatioFilter`、`Dem_J1939DcmSetDTCFilter` 或 `Dem_J1939DcmSetFreezeFrameFilter` 返回 `E_NOT_OK`,则 J1939 诊断通信管理器应调用 `J1939Rm_SendAck`,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE` 以发送否定应答 (NACK)(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextFilteredDTC` 继续该序列,直到返回值为 `DEM_NO_SUCH_ELEMENT` 为止。这些调用可以分布在多次 `J1939Dcm_MainFunction` 调用中。
|
||
|
||
`[SWS_J1939Dcm_00014]` ⌈ 如果返回值为 `DEM_FILTERED_OK`,则参数 `J1939DTC` 和 `OccurenceCounter` 应被复制到由触发该序列的 DMx 消息定义的响应消息中。⌋
|
||
|
||
`[SWS_J1939Dcm_00015]` ⌈ J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextFilteredDTC` 继续该序列,除非达到每个主函数的最大序列计数阈值(见 `J1939DcmMaxDTCsPerMainFunction`)或返回值为 `DEM_PENDING`。在这种情况下,执行将推迟到下一次 `J1939Dcm_MainFunction` 调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00016]` ⌈ 如果返回值为 `DEM_NO_SUCH_ELEMENT`,则 J1939 诊断通信管理器应使用所请求消息的 `PduId` 调用 `PduR_J1939DcmTransmit`,并根据请求的源地址设置目标地址(通过 MetaData),或者当请求的目标为 `0xFF` 时设置为 `0xFF`,或对于自发的 DM1 消息设置为 `0xFF`(广播)。⌋
|
||
|
||
> 注:如果需要从不同节点上报相同的 DTC,则每个节点都需要自己的 EventId。
|
||
|
||
#### 7.6.2 冻结帧
|
||
|
||
`[SWS_J1939Dcm_00017]` ⌈ 在冻结帧序列开始时,J1939 诊断通信管理器应调用 `Dem_J1939DcmSetFreezeFrameFilter`,其参数 `FreezeFrameKind` 由触发该序列的 DMx 消息以及所请求"节点"的已分配 `DemClient` 定义。⌋
|
||
|
||
`[SWS_J1939Dcm_00018]` ⌈ 如果 `Dem_J1939DcmSetRatioFilter`、`Dem_J1939DcmSetDTCFilter` 或 `Dem_J1939DcmSetFreezeFrameFilter` 返回 `E_NOT_OK`,则 J1939 诊断通信管理器应调用 `J1939Rm_SendAck`,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE` 以发送否定应答 (NACK)(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
##### 7.6.2.1 `FreezeFrameKind` 设置为 `DEM_J1939DCM_FREEZEFRAME` 或 `DEM_J1939DCM_EXPANDED_FREEZEFRAME`
|
||
|
||
此 `FreezeFrameKind` 由 DM04 和 DM25 使用。
|
||
|
||
`[SWS_J1939Dcm_00201]` ⌈ 如果 `Dem_J1939DcmSetRatioFilter`、`Dem_J1939DcmSetDTCFilter` 或 `Dem_J1939DcmSetFreezeFrameFilter` 返回 `E_OK` 且 `FreezeFrameKind` 设置为 `DEM_J1939DCM_FREEZEFRAME` 或 `DEM_J1939DCM_EXPANDED_FREEZEFRAME`,则 J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextFreezeFrame` 继续该序列,直到返回值为 `DEM_NO_SUCH_ELEMENT` 为止。这些调用可以分布在多次 `J1939Dcm_MainFunction` 调用中。⌋
|
||
|
||
`[SWS_J1939Dcm_00020]` ⌈ 如果返回值为 `DEM_FILTERED_OK` 且 `FreezeFrameKind` 设置为 `DEM_J1939DCM_FREEZEFRAME` 或 `DEM_J1939DCM_EXPANDED_FREEZEFRAME`,则参数 `BufSize`、`DestBuffer`、`J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到响应消息布局中。⌋
|
||
|
||
`[SWS_J1939Dcm_00021]` ⌈ J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextFreezeFrame` 继续该序列,除非达到每个主函数的最大序列计数阈值(见 `J1939DcmMaxFreezeFramesPerMainFunction`)或返回值为 `DEM_PENDING`。⌋
|
||
|
||
`[SWS_J1939Dcm_00022]` ⌈ 如果返回值为 `DEM_NO_SUCH_ELEMENT` 且 `FreezeFrameKind` 设置为 `DEM_J1939DCM_FREEZEFRAME` 或 `DEM_J1939DCM_EXPANDED_FREEZEFRAME`,则 J1939 诊断通信管理器应使用所请求消息的 `PduId` 触发 `PduR_J1939DcmTransmit`,并根据请求的源地址(通过 MetaData)设置目标地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
##### 7.6.2.2 `FreezeFrameKind` 设置为 `DEM_J1939DCM_SPNS_IN_EXPANDED_FREEZEFRAME`
|
||
|
||
此 `FreezeFrameKind` 由 DM24 使用。
|
||
|
||
`[SWS_J1939Dcm_00202]` ⌈ 如果 `Dem_J1939DcmSetRatioFilter`、`Dem_J1939DcmSetDTCFilter` 或 `Dem_J1939DcmSetFreezeFrameFilter` 返回 `E_OK` 且 `FreezeFrameKind` 设置为 `DEM_J1939DCM_SPNS_IN_EXPANDED_FREEZEFRAME`,则 J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextSPNInFreezeFrame` 继续该序列,直到返回值为 `DEM_NO_SUCH_ELEMENT` 为止。这些调用可以分布在多次 `J1939Dcm_MainFunction` 调用中。⌋
|
||
|
||
`[SWS_J1939Dcm_00094]` ⌈ 如果返回值为 `DEM_FILTERED_OK` 且 `FreezeFrameKind` 设置为 `DEM_J1939DCM_SPNS_IN_EXPANDED_FREEZEFRAME`,则参数 `SPNSupported` 和 `SPNDataLength` 应按照 SAE J1939-73 编码到响应消息布局中,并且 `SPN support type` 中的位 1 "Supported in Expanded Freeze Frame" 应设置为 0。⌋
|
||
|
||
`[SWS_J1939Dcm_00095]` ⌈ 除了 `[SWS_J1939Dcm_00094]` 之外,如果 SPN 也包含在配置参数 `J1939DcmSPNsInDataStream` 列表中,则 `SPN support type` 中的位 2 "Supported in Data Stream" 应设置为 0。⌋
|
||
|
||
`[SWS_J1939Dcm_00096]` ⌈ 如果返回值为 `DEM_NO_SUCH_ELEMENT` 且 `FreezeFrameKind` 设置为 `DEM_J1939DCM_SPNS_IN_EXPANDED_FREEZEFRAME`,则 J1939 诊断通信管理器应将仅在 `J1939DcmSPNsInDataStream` 中受支持而不在 `ExpandedFreezFrame` 中受支持(由 `[SWS_J1939Dcm_00094]` 返回)的所有 SPN 添加到响应消息中。`SPN support type` 中的位 2 "Supported in Data Stream" 应设置为 0,`SPN Data Length` 应设置为 `0x00`。之后应使用所请求消息的 `PduId` 触发 `PduR_J1939DcmTransmit`,并根据请求的源地址(通过 MetaData)设置目标地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
`[SWS_J1939Dcm_00165]` ⌈ 如果返回值为 `DEM_BUFFER_TOO_SMALL`,则 J1939Dcm 应以错误码 `J1939DCM_E_BUFFER_TOO_SMALL` 向 Default Error Tracer 上报该错误,并调用 `J1939Rm_SendAck`,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE` 以发送否定应答 (NACK)(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
#### 7.6.3 比率 (Ratio)
|
||
|
||
`[SWS_J1939Dcm_00023]` ⌈ 在比率序列开始时,J1939 诊断通信管理器应使用所请求"节点"的已分配 `DemClient` 调用 `Dem_J1939DcmSetRatioFilter`。⌋
|
||
|
||
`[SWS_J1939Dcm_00024]` ⌈ 如果 `Dem_J1939DcmSetRatioFilter`、`Dem_J1939DcmSetDTCFilter` 或 `Dem_J1939DcmSetFreezeFrameFilter` 返回 `E_OK`,则参数 `Ignition_Cycle_Counter` 和 `OBD_Monitoring_Conditions_Encountered` 中的值应按照 SAE J1939-73 编码到响应消息布局中。⌋
|
||
|
||
`[SWS_J1939Dcm_00025]` ⌈ 如果 `Dem_J1939DcmSetRatioFilter`、`Dem_J1939DcmSetDTCFilter` 或 `Dem_J1939DcmSetFreezeFrameFilter` 返回 `E_NOT_OK`,则 J1939 诊断通信管理器应调用 `J1939Rm_SendAck`,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE` 以发送否定应答 (NACK)(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
`[SWS_J1939Dcm_00203]` ⌈ J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextFilteredRatio` 继续该序列,直到返回值为 `DEM_NO_SUCH_ELEMENT` 为止。这些调用可以分布在多次 `J1939Dcm_MainFunction` 调用中。⌋
|
||
|
||
`[SWS_J1939Dcm_00027]` ⌈ 如果返回值为 `DEM_FILTERED_OK`,则参数 `SPN`、`Numerator` 和 `Denumerator` 应被复制到由触发该序列的 DMx 消息定义的响应消息中。⌋
|
||
|
||
`[SWS_J1939Dcm_00028]` ⌈ J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextFilteredRatio` 继续该序列,除非达到每个主函数的最大序列计数阈值(见 `J1939DcmMaxRatiosPerMainFunction`)或返回值为 `DEM_PENDING`。⌋
|
||
|
||
`[SWS_J1939Dcm_00029]` ⌈ 如果返回值为 `DEM_NO_SUCH_ELEMENT`,则 J1939 诊断通信管理器应使用所请求消息的 `PduId` 调用 `PduR_J1939DcmTransmit`,并根据请求的源地址(通过 MetaData)设置目标地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
#### 7.6.4 仅维修 DTC (Service Only DTCs)
|
||
|
||
J1939 存在"仅维修 DTC"的概念。这些 DTC 被认为存储在 Dem 的任何用户定义故障存储器中(`Dem_DTCOriginType` 为 `DEM_DTC_ORIGIN_USERDEFINED_MEMORY_<Name>`)。所有其他 DTC 被认为存储在主故障存储器中(`Dem_DTCOriginType` 为 `DEM_DTC_ORIGIN_PRIMARY_MEMORY`)。
|
||
|
||
`[SWS_J1939Dcm_00177]` ⌈ 在处理 DM53、DM54 或 DM55 时,SAEJ1939Dcm 应使用与 `J1939DcmServiceOnlyDTCsMemoryDestinationRef` 引用的 `DemUserDefinedMemory` 相对应的 `Dem_DTCOriginType` 调用 Dem API `Dem_J1939DcmClearDTC` 和 `J1939DcmSetDTCFilter`。⌋ (`SRS_Diag_04112`)
|
||
|
||
J1939 Dcm/Dem 在 J1939Dcm 中的交互:
|
||
|
||
`[SWS_J1939Dcm_CONSTR_6203]` ⌈ `J1939DcmServiceOnlyDTCsMemoryDestinationRef` 应引用分配给当前 `J1939DcmDemClientRef` 的 `DemEventMemorySet` 的事件存储器。⌋
|
||
|
||
### 7.7 诊断消息
|
||
|
||
#### 7.7.1 诊断消息 1 (DM01)
|
||
|
||
DM01 用于周期性以及变化时广播本 ECU 的活动 DTC 和汇总的指示灯状态。
|
||
|
||
`[SWS_J1939Dcm_00030]` ⌈ 在收到 DM01 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应锁定专用 DM01 缓冲区并使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
##### 7.7.1.1 DM01 消息的周期性收集和发送
|
||
|
||
`[SWS_J1939Dcm_00031]` ⌈ J1939 诊断通信管理器应锁定专用 DM01 缓冲区,在该缓冲区中收集所有活动 DTC 和汇总的指示灯状态,并按 1 秒周期发送 DM01 消息(由 `[SWS_J1939Dcm_00033]`、`[SWS_J1939Dcm_00032]`、`[SWS_J1939Dcm_00114]` 和 `[SWS_J1939Dcm_00034]` 定义)。⌋
|
||
|
||
`[SWS_J1939Dcm_00114]` ⌈ J1939Dcm 应提供一个大小为 `J1939DcmDM01BufferSize` 的缓冲区用于并行 DM01 处理,以支持 `[SWS_J1939Dcm_00031]`。⌋
|
||
|
||
`[SWS_J1939Dcm_00032]` ⌈ 当 DEM 调用 `J1939Dcm_DemTriggerOnDTCStatus` 时,应发送 DM01 消息(除常规周期性发送之外),针对所上报 `DemClient` 的相应"节点"的所有已配置通道,但同一 DTC 的 `J1939Dcm_DemTriggerOnDTCStatus` 每秒触发不超过一次时除外。应使用单独的 DM01 缓冲区。⌋
|
||
|
||
> 注:该例外是为了防止过高的总线负载。
|
||
|
||
`[SWS_J1939Dcm_00033]` ⌈ DM01 应在所有节点 (`J1939DcmNode`) 的所有已配置 DM1 消息(`J1939DcmDmxSupport == J1939DCM_DM01_SUPPORT`)以及所有通道 (`J1939DcmDiagnosticMessageSupportChannelRef`) 上使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
> 注:周期性 DM1 消息在所有已配置网络上的所有已配置节点上广播。示例:Node_A 将周期性在 channel_1 和 channel_2 上发送 DTC_A 和 DTC_B,但 node_B 将仅在 channel_2 上发送 DTC_C。所请求的 DM1 消息仅在所请求通道上的所请求节点上发送。
|
||
|
||
`[SWS_J1939Dcm_00034]` ⌈ 返回值 `J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到 DM01 布局中。⌋
|
||
|
||
为了使 ECU 能够将 BAM 用于除循环 DM01 传输以外的其他用途,应限制最大 DTC 数量。20 个 DTC 约占 BAM 可用带宽的 2/3。
|
||
|
||
`[SWS_J1939Dcm_00116]` ⌈ 在传输了参数 `J1939DcmDM01MaxDTCs` [`ECUC_J1939Dcm_00050`] 中配置的 DTC 后,应停止传输。⌋
|
||
|
||
> 注:对 PduR 的发送请求由公共序列覆盖。
|
||
|
||
#### 7.7.2 诊断消息 2 (DM02)
|
||
|
||
DM02 消息上报之前活动的 DTC。
|
||
|
||
`[SWS_J1939Dcm_00035]` ⌈ 在收到 DM02 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
`[SWS_J1939Dcm_00036]` ⌈ 返回值 `J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到 DM02 布局中。⌋
|
||
|
||
#### 7.7.3 诊断消息 3 (DM03)
|
||
|
||
DM03 消息清除之前活动的 DTC。
|
||
|
||
`[SWS_J1939Dcm_00037]` ⌈ 在收到 DM03 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应以参数 `DTCTypeFilter` 设置为 `DEM_J1939DTC_CLEAR_PREVIOUSLY_ACTIVE` 触发 `Dem_J1939DcmClearDTC`。⌋
|
||
|
||
`[SWS_J1939Dcm_00038]` ⌈ 如果函数 `Dem_J1939DcmClearDTC` 的返回值为 `DEM_PENDING`,则 J1939 诊断通信管理器应在下一次 `J1939Dcm_MainFunction` 调用中重新触发 `Dem_J1939DcmClearDTC`(参数 `DTCTypeFilter` 设置为 `DEM_J1939DTC_CLEAR_PREVIOUSLY_ACTIVE`)。⌋
|
||
|
||
`[SWS_J1939Dcm_00039]` ⌈ 如果函数 `Dem_J1939DcmClearDTC` 的返回值为 `E_OK`,则 J1939 诊断通信管理器应通过 `J1939Rm_SendAck` 发送肯定应答 (PACK),将参数 `ackCode` 设置为 `J1939RM_ACK_POSITIVE`。⌋
|
||
|
||
`[SWS_J1939Dcm_00040]` ⌈ 如果 `Std_ReturnType` 返回值是 `E_OK` 或 `DEM_PENDING` 以外的其他值,则 J1939 诊断通信管理器应通过 `J1939Rm_SendAck` 发送否定应答 (NACK),将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE`。⌋
|
||
|
||
> 注:如果请求的目标地址是广播 (`0xFF`),则根据 SAE J1939-73 不应发送应答(参考 `[SWS_J1939Dcm_00113]`)。
|
||
|
||
#### 7.7.4 诊断消息 4 (DM04)
|
||
|
||
DM04 消息上报已存储的冻结帧。
|
||
|
||
`[SWS_J1939Dcm_00041]` ⌈ 在收到 DM04 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 "7.6.2 FreezeFrame" 节中的公共序列,参数 `FreezeFrameKind` 设置为 `DEM_J1939DCM_FREEZEFRAME`。⌋
|
||
|
||
#### 7.7.5 诊断消息 5 (DM05)
|
||
|
||
DM05 消息上报诊断就绪状态。
|
||
|
||
`[SWS_J1939Dcm_00042]` ⌈ 在收到 DM05 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应最迟在下一个 `J1939Dcm_MainFunction` 中调用 `Dem_J1939DcmReadDiagnosticReadiness1`,其参数为所请求"节点"的已分配 `DemClient`。⌋
|
||
|
||
`[SWS_J1939Dcm_00043]` ⌈ 如果 `Dem_J1939DcmReadDiagnosticReadiness1` 的返回值为 `E_OK`,则返回参数 `DataValue` 应按照 SAE J1939-73 编码到 DM05 布局中。之后应使用所请求消息的 `PduId` 调用 `PduR_J1939DcmTransmit`,并将目标地址(通过 MetaData)设置为请求的源地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
`[SWS_J1939Dcm_00045]` ⌈ 如果 `Dem_J1939DcmReadDiagnosticReadiness1` 的返回值不等于 `E_OK`,则 J1939 诊断通信管理器应调用 `J1939Rm_SendAck`,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE` 以发送否定应答 (NACK)(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
#### 7.7.6 诊断消息 6 (DM06)
|
||
|
||
DM06 消息上报 OBD 相关的待定 DTC。
|
||
|
||
`[SWS_J1939Dcm_00046]` ⌈ 在收到 DM06 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
`[SWS_J1939Dcm_00047]` ⌈ 返回值 `J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到 DM06 布局中。⌋
|
||
|
||
#### 7.7.7 诊断消息 11 (DM11)
|
||
|
||
DM11 消息应至少清除与活动 DTC 相关的所有适用诊断数据(更多受影响的诊断数据请参阅 SAE J1939-73)。
|
||
|
||
`[SWS_J1939Dcm_00048]` ⌈ 在收到 DM11 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应以参数 `DTCTypeFilter` 设置为 `DEM_J1939DTC_CLEAR_ACTIVE` 触发 `Dem_J1939DcmClearDTC`。⌋ (`SRS_Diag_04112`)
|
||
|
||
`[SWS_J1939Dcm_00049]` ⌈ 如果函数 `Dem_J1939DcmClearDTC` 的返回值为 `DEM_PENDING`,则 J1939 诊断通信管理器应在下一次 `J1939Dcm_MainFunction` 调用中重新触发 `Dem_J1939DcmClearDTC`(参数 `DTCTypeFilter` 设置为 `DEM_J1939DTC_CLEAR_ACTIVE`)。⌋ (`SRS_Diag_04112`)
|
||
|
||
`[SWS_J1939Dcm_00050]` ⌈ 如果函数 `Dem_J1939DcmClearDTC` 的返回值为 `E_OK`,则 J1939 诊断通信管理器应通过 `J1939Rm_SendAck` 发送肯定应答 (PACK),将参数 `ackCode` 设置为 `J1939RM_ACK_POSITIVE`。⌋
|
||
|
||
`[SWS_J1939Dcm_00051]` ⌈ 如果函数 `Dem_J1939DcmClearDTC` 的返回值是 `E_OK` 以外的其他值,则 J1939 诊断通信管理器应通过 `J1939Rm_SendAck` 发送否定应答 (NACK),将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE`。⌋
|
||
|
||
> 注:如果请求的目标地址是广播 (`0xFF`),则根据 SAE J1939-73 不应发送应答(参考 `[SWS_J1939Dcm_00113]`)。
|
||
|
||
#### 7.7.8 诊断消息 12 (DM12)
|
||
|
||
DM12 消息上报 OBD 相关的活动 DTC。
|
||
|
||
`[SWS_J1939Dcm_00052]` ⌈ 在收到 DM12 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
`[SWS_J1939Dcm_00053]` ⌈ 返回值 `J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到 DM12 布局中。⌋
|
||
|
||
#### 7.7.9 诊断消息 13 (DM13)
|
||
|
||
DM13 消息停止和启动对某些网络的消息广播。
|
||
|
||
以下网络可用(另见 `J1939DcmBusType`):
|
||
|
||
1. J1587
|
||
2. J1922
|
||
3. J1939 Network #1(主车辆网络)
|
||
4. J1939 Network #2
|
||
5. ISO 9141
|
||
6. J1850
|
||
7. Other(制造商指定端口)
|
||
8. SAE J1939 Network #3
|
||
9. Proprietary Network #1
|
||
10. Proprietary Network #2
|
||
11. J1939 Network #4
|
||
|
||
`[SWS_J1939Dcm_00129]` ⌈ J1939Dcm 应维护 DM13 命令消息的广播状态信息。广播状态信息的初始值是所有网络的正常广播模式。⌋
|
||
|
||
`[SWS_J1939Dcm_00054]` ⌈ 当通过调用 `J1939Dcm_RxIndication` 接收 DM13 命令消息时,其参数 `RxPduId` 设置为已配置的 `J1939DcmRxPduId` 且保持信号设置为 "not available",则 J1939 诊断通信管理器应启动超时监控并以更新后的广播状态信息调用 `BswM_J1939DcmBroadcastStatus`;另见 `[SWS_J1939Dcm_00055]`、`[SWS_J1939Dcm_00056]`、`[SWS_J1939Dcm_00057]` 和 `[SWS_J1939Dcm_00058]`。⌋
|
||
|
||
`[SWS_J1939Dcm_00055]` ⌈ 对于网络 "Current Data Link",所接收 DM13 命令消息的对应 `ComMChannelId` 决定了上报给 BswM 的网络位。⌋
|
||
|
||
`[SWS_J1939Dcm_00092]` ⌈ 对于 DM13 命令消息中的其他总线类型,如果有对应的 `J1939DcmBusType`,则 `J1939DcmComMChannelRef` 引用的对应 `ComMChannelId` 表示上报给 BswM 的 NetworkMask 中的网络位。否则忽略该请求。⌋
|
||
|
||
`[SWS_J1939Dcm_00056]` ⌈ "Stop Broadcast" 应导致向 BswM 提供的广播状态信息中与该网络相关联的位为 '0'。⌋
|
||
|
||
`[SWS_J1939Dcm_00057]` ⌈ "Start Broadcast" 应导致向 BswM 提供的广播状态信息中与该网络相关联的位为 '1'。⌋
|
||
|
||
`[SWS_J1939Dcm_00058]` ⌈ 在与该网络相关联的位上"Don't Care/take no action (leave as is)"不应更新 J1939Dcm 内部广播状态信息。⌋
|
||
|
||
`[SWS_J1939Dcm_00134]` ⌈ 当通过调用 `J1939Dcm_RxIndication` 接收 DM13 命令消息,其参数 `RxPduId` 设置为已配置的 `J1939DcmRxPduId` 且保持信号设置为 "all devices" 或 "devices whose broadcast state has been modified",则 J1939 诊断通信管理器应重新启动超时监控。⌋
|
||
|
||
> 注:仅当节点已由 `[SWS_J1939Dcm_00054]` 所述寻址时,才启动超时监控。当未由无保持信号的 DM13 消息寻址该节点时,因此不会受到保持信号"devices whose broadcast state has been modified"的影响。
|
||
|
||
`[SWS_J1939Dcm_00135]` ⌈ 当 6 秒内未收到其他 DM13 消息而超时时,应通过以所有总线设置为 '1' 的广播状态信息调用 `BswM_J1939DcmBroadcastStatus`,将所有总线设置回广播模式。⌋
|
||
|
||
> 注:由应用程序决定是否使用上报给 BswM 的广播状态以避免因某些信号未及时接收而设置诊断故障码。
|
||
|
||
#### 7.7.10 诊断消息 19 (DM19)
|
||
|
||
DM19 消息上报标定验证编号 (CVN)。
|
||
|
||
`[SWS_J1939Dcm_00059]` ⌈ 在收到 DM19 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应触发端口原型 `J1939Dcm_CalibrationInformation` 的 `GetCalibrationVerificationNumber` 操作以收集 CVN(另见第 8.7.3.1 节)。⌋
|
||
|
||
`[SWS_J1939Dcm_00060]` ⌈ 如果返回值是 `E_OK` 或 `E_NEXT` 以外的任何值,则 J1939 诊断通信管理器应通过 `J1939Rm_SendAck` 发送应答,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE`(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
> 注:某些法规要求存储并上报最后计算的值,同时进行当前周期计算。对于这种情况,应用程序需要存储最后计算的 CVN。
|
||
|
||
`[SWS_J1939Dcm_00061]` ⌈ 如果返回值为 `E_NEXT`,则 J1939 诊断通信管理器应将返回参数 `CalibrationVerificationNumber` 和 `CalibrationID` 编码到 DM19 布局中(符合 SAE J1939-73)。之后应重新触发端口原型 `J1939Dcm_CalibrationInformation` 的 `GetCalibrationVerificationNumber` 操作以收集 CVN 的下一部分。⌋
|
||
|
||
`[SWS_J1939Dcm_00062]` ⌈ 如果返回值为 `E_OK`,则 J1939 诊断通信管理器应将返回参数 `CalibrationVerificationNumber` 和 `CalibrationID` 编码到 DM19 布局中(符合 SAE J1939-73)。之后应使用所请求消息的 `PduId` 触发 `PduR_J1939DcmTransmit`,并根据请求的源地址(通过 MetaData)设置目标地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
#### 7.7.11 诊断消息 20 (DM20)
|
||
|
||
DM20 消息上报在线监测器性能比率 (IUMPR)。
|
||
|
||
`[SWS_J1939Dcm_00063]` ⌈ 在收到 DM20 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 "7.6.3 Ratio" 节中的公共序列。⌋
|
||
|
||
#### 7.7.12 诊断消息 21 (DM21)
|
||
|
||
DM21 消息上报诊断就绪状态。
|
||
|
||
`[SWS_J1939Dcm_00064]` ⌈ 在收到 DM21 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应最迟在下一个 `J1939Dcm_MainFunction` 周期中调用 `Dem_J1939DcmReadDiagnosticReadiness2`,其参数为所请求"节点"的已分配 `DemClient`。⌋
|
||
|
||
`[SWS_J1939Dcm_00065]` ⌈ 如果 `Dem_J1939DcmReadDiagnosticReadiness2` 的返回值为 `E_OK`,则返回参数 `DataValue` 应按照 SAE J1939-73 编码到 DM21 布局中。之后应触发 DM21 的 `PduId` 对应的 `PduR_J1939DcmTransmit`,并将目标地址(通过 MetaData)设置为请求的源地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
`[SWS_J1939Dcm_00067]` ⌈ 如果 `Dem_J1939DcmReadDiagnosticReadiness2` 的返回值不等于 `E_OK`,则 J1939 诊断通信管理器应调用 `J1939Rm_SendAck`,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE` 以发送否定应答 (NACK)(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
#### 7.7.13 诊断消息 23 (DM23)
|
||
|
||
DM23 消息上报 OBD 相关的之前活动的 DTC。
|
||
|
||
`[SWS_J1939Dcm_00068]` ⌈ 在收到 DM23 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
`[SWS_J1939Dcm_00069]` ⌈ 返回值 `J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到 DM23 布局中。⌋
|
||
|
||
#### 7.7.14 诊断消息 24 (DM24)
|
||
|
||
DM24 消息上报 DM25 和 DataStream 所支持的 SPN。
|
||
|
||
`[SWS_J1939Dcm_00118]` ⌈ 在收到 DM24 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 "7.6.2 FreezeFrame" 节中的公共序列,参数 `FreezeFrameKind` 设置为 `DEM_J1939DCM_SPNS_IN_EXPANDED_FREEZEFRAME`。⌋
|
||
|
||
#### 7.7.15 诊断消息 25 (DM25)
|
||
|
||
DM25 上报扩展冻结帧的数据。
|
||
|
||
`[SWS_J1939Dcm_00117]` ⌈ 在收到 DM25 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 "7.6.2 FreezeFrame" 节中的公共序列,参数 `FreezeFrameKind` 设置为 `DEM_J1939DCM_EXPANDED_FREEZEFRAME`。⌋
|
||
|
||
#### 7.7.16 诊断消息 26 (DM26)
|
||
|
||
DM26 消息上报诊断就绪状态。
|
||
|
||
`[SWS_J1939Dcm_00070]` ⌈ 在收到 DM26 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应最迟在下一个 `J1939Dcm_MainFunction` 周期中调用 `Dem_J1939DcmReadDiagnosticReadiness3`,其参数为所请求"节点"的已分配 `DemClient`。⌋
|
||
|
||
`[SWS_J1939Dcm_00071]` ⌈ 如果 `Dem_J1939DcmReadDiagnosticReadiness3` 的返回值为 `E_OK`,则返回参数 `DataValue` 应按照 SAE J1939-73 编码到 DM26 布局中。之后应触发 DM26 的 `PduId` 对应的 `PduR_J1939DcmTransmit`,并将目标地址(通过 MetaData)设置为请求的源地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
`[SWS_J1939Dcm_00073]` ⌈ 如果 `Dem_J1939DcmReadDiagnosticReadiness3` 的返回值不等于 `E_OK`,则 J1939 诊断通信管理器应调用 `J1939Rm_SendAck`,将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE` 以发送否定应答 (NACK)(考虑 `[SWS_J1939Dcm_00113]`)。⌋
|
||
|
||
#### 7.7.17 诊断消息 28 (DM28)
|
||
|
||
DM28 消息上报 OBD 相关的永久 DTC。
|
||
|
||
`[SWS_J1939Dcm_00074]` ⌈ 在收到 DM28 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
`[SWS_J1939Dcm_00075]` ⌈ 返回值 `J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到 DM28 布局中。⌋
|
||
|
||
#### 7.7.18 诊断消息 29 (DM29)
|
||
|
||
DM29 消息上报各类别中的 DTC 数量。
|
||
|
||
`[SWS_J1939Dcm_00076]` ⌈ 在收到 DM29 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应针对响应消息中的每个字节调用 `Dem_J1939DcmSetDTCFilter`,其参数 `DTCStatusFilter` 和 `DTCKind` 由表 3 定义。⌋
|
||
|
||
| 字节位置 | 计数项 | Dem_J1939DcmSetDTCFilter 参数 | |
|
||
|---|---|---|---|
|
||
| | | DTCStatusFilter | DTCKind |
|
||
| 字节 1 | Pending DTCs | `DEM_J1939DTC_PENDING` | `DEM_DTC_KIND_EMISSION_REL_DTCS` |
|
||
| 字节 2 | All Pending DTCs | `DEM_J1939DTC_PENDING` | `DEM_DTC_KIND_ALL_DTCS` |
|
||
| 字节 3 | MIL-On DTCs | `DEM_J1939DTC_ACTIVE` | `DEM_DTC_KIND_EMISSION_REL_DTCS` |
|
||
| 字节 4 | Previously MIL-On DTCs | `DEM_J1939DTC_PREVIOUSLY_ACTIVE` | `DEM_DTC_KIND_EMISSION_REL_DTCS` |
|
||
| 字节 5 | Permanent DTCs | `DEM_J1939DTC_PERMANENT` | `DEM_DTC_KIND_EMISSION_REL_DTCS` |
|
||
| 字节 6 | 0xFF | | |
|
||
| 字节 7 | 0xFF | | |
|
||
| 字节 8 | 0xFF | | |
|
||
|
||
**表 3:DM29 的响应消息结构**
|
||
|
||
`[SWS_J1939Dcm_00077]` ⌈ 在每次调用 `Dem_J1939DcmSetDTCFilter` 之后,J1939 诊断通信管理器应调用 `Dem_J1939DcmGetNumberOfFilteredDTC` 以获取匹配 DTC 的当前数量。⌋
|
||
|
||
`[SWS_J1939Dcm_00078]` ⌈ 如果返回值为 `DEM_NUMBER_OK`,则 J1939 诊断通信管理器应将返回参数 `NumberOfFilteredDTC` 的值复制到 DM29 响应消息中的对应字节。⌋
|
||
|
||
`[SWS_J1939Dcm_00079]` ⌈ 如果返回值为 `DEM_NUMBER_PENDING`,则 J1939 诊断通信管理器应在下一次 `J1939Dcm_MainFunction` 调用中重新触发 `Dem_J1939DcmGetNumberOfFilteredDTC`。未使用的字节 6 至 8 应设置为 `0xFF`。⌋
|
||
|
||
#### 7.7.19 诊断消息 31 (DM31)
|
||
|
||
DM31 消息上报 DTC 到指示灯的关联。
|
||
|
||
`[SWS_J1939Dcm_00080]` ⌈ 在收到 DM31 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应调用 `Dem_J1939DcmFirstDTCwithLampStatus` 函数以开始数据流。⌋
|
||
|
||
`[SWS_J1939Dcm_00120]` ⌈ J1939 诊断通信管理器应通过随后调用 `Dem_J1939DcmGetNextDTCwithLampStatus` 继续该序列,除非达到每个主函数的最大序列计数阈值(见 `J1939DcmMaxDTCsPerMainFunction`)或返回值为 `DEM_PENDING`。在这种情况下,执行将推迟到下一次 `J1939Dcm_MainFunction` 调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00081]` ⌈ 每次 `Dem_J1939DcmGetNextDTCwithLampStatus` 函数调用的返回值 `J1939DTC`、`OccurenceCounter` 和 `LampStatus` 应按照 SAE J1939-73 依次编码到 DM31 布局中。⌋
|
||
|
||
`[SWS_J1939Dcm_00121]` ⌈ 如果返回值为 `DEM_NO_SUCH_ELEMENT`,则 J1939 诊断通信管理器应使用所请求消息的 `PduId` 调用 `PduR_J1939DcmTransmit`,并根据请求的源地址(通过 MetaData)设置目标地址,或者当请求的目标为 `0xFF` 时设置为 `0xFF`。⌋
|
||
|
||
#### 7.7.20 诊断消息 35 (DM35)
|
||
|
||
DM35 消息上报即时故障状态。
|
||
|
||
`[SWS_J1939Dcm_00082]` ⌈ 在收到 DM35 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应开始使用单独的 DM35 缓冲区收集所有即时 DTC 和汇总的指示灯状态,并以 1 秒周期发送 DM35 消息直到模块关闭。⌋
|
||
|
||
> 注:AUTOSAR 选择每秒仅发送一次该消息的选项。
|
||
|
||
`[SWS_J1939Dcm_00200]` ⌈ J1939Dcm 应提供一个大小为 `J1939DcmDM35BufferSize` 的缓冲区用于并行 DM35 处理,以支持 `[SWS_J1939Dcm_00082]`。⌋
|
||
|
||
`[SWS_J1939Dcm_00083]` ⌈ DM35 应使用第 7.6.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter` 和 `DTCKind` 按表 2 设置。⌋
|
||
|
||
`[SWS_J1939Dcm_00084]` ⌈ 返回值 `J1939DTC` 和 `OccurenceCounter` 应按照 SAE J1939-73 编码到 DM35 布局中。⌋
|
||
|
||
#### 7.7.21 活动仅维修 DTC (DM53)
|
||
|
||
DM53 消息上报活动的仅维修 DTC。
|
||
|
||
`[SWS_J1939Dcm_00178]` ⌈ 在收到 DM53 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 7.5.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter`、`DTCOrigin` 和 `DTCKind` 按表 2 设置。⌋ (`SRS_Diag_04112`)
|
||
|
||
`[SWS_J1939Dcm_00179]` ⌈ 返回值 `J1939DTC` 和 `OccurrenceCounter` 应按照 SAE J1939-73 编码到 DM53 布局中。⌋ (`SRS_Diag_04112`)
|
||
|
||
#### 7.7.22 之前活动仅维修 DTC (DM54)
|
||
|
||
DM54 消息上报之前活动的仅维修 DTC。
|
||
|
||
`[SWS_J1939Dcm_00180]` ⌈ 在收到 DM54 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应使用第 7.5.1 节 "DTC status" 中的公共序列,参数 `DTCStatusFilter`、`DTCOrigin` 和 `DTCKind` 按表 2 设置。⌋ (`SRS_Diag_04112`)
|
||
|
||
`[SWS_J1939Dcm_00181]` ⌈ 返回值 `J1939DTC` 和 `OccurrenceCounter` 应按照 SAE J1939-73 编码到 DM54 布局中。⌋ (`SRS_Diag_04112`)
|
||
|
||
#### 7.7.23 所有仅维修 DTC 的诊断数据清除/复位 (DM55)
|
||
|
||
DM55 消息清除所有仅维修 DTC。
|
||
|
||
`[SWS_J1939Dcm_00182]` ⌈ 在收到 DM55 的请求时(调用 `J1939Dcm_RequestIndication`,其参数 `requestedPgn` 按表 1 中 "PGN (Hexadecimal)" 列设置),J1939 诊断通信管理器应以参数 `DTCTypeFilter` 设置为 `DEM_J1939DTC_CLEAR_ACTIVE_AND_PREVIOUSLY_ACTIVE` 且 `DTCOrigin` 设置为来自 `J1939DcmServiceOnlyDTCsMemoryDestinationRef` 的定义来触发 `Dem_J1939DcmClearDTC`。⌋ (`SRS_Diag_04112`)
|
||
|
||
`[SWS_J1939Dcm_00183]` ⌈ 如果函数 `Dem_J1939DcmClearDTC` 的返回值为 `DEM_PENDING`,则 J1939 诊断通信管理器应在下一次 `J1939Dcm_MainFunction` 调用中重新触发 `Dem_J1939DcmClearDTC`(参数 `DTCTypeFilter` 设置为 `DEM_J1939DTC_CLEAR_ACTIVE_AND_PREVIOUSLY_ACTIVE`)。⌋ (`SRS_Diag_04112`)
|
||
|
||
`[SWS_J1939Dcm_00184]` ⌈ 如果函数 `Dem_J1939DcmClearDTC` 的返回值为 `E_OK` 或 `DEM_PENDING`,则 J1939 诊断通信管理器应通过 `J1939Rm_SendAck` 发送肯定应答 (PACK),将参数 `ackCode` 设置为 `J1939RM_ACK_POSITIVE`。⌋ (`SRS_Diag_04112`)
|
||
|
||
`[SWS_J1939Dcm_00185]` ⌈ 如果返回值是 `E_OK` 或 `DEM_PENDING` 以外的其他值,则 J1939 诊断通信管理器应通过 `J1939Rm_SendAck` 发送否定应答 (NACK),将参数 `ackCode` 设置为 `J1939RM_ACK_NEGATIVE`。⌋
|
||
|
||
> 注:如果请求的目标地址是广播 (`0xFF`),则根据 SAE J1939-73 不应发送应答(参考 `[SWS_J1939Dcm_00113]`)。
|
||
|
||
### 7.8 错误分类
|
||
|
||
J1939Dcm 模块支持报告开发错误和运行时错误。
|
||
|
||
`[SWS_J1939Dcm_00089]` ⌈ 在错误和异常情况下,J1939Dcm 模块不应修改其当前模块状态,而应仅报告错误事件。⌋
|
||
|
||
#### 7.8.1 开发错误
|
||
|
||
`[SWS_J1939Dcm_00090]` ⌈ J1939Dcm 应使用以下开发错误:
|
||
|
||
| 错误类型 | 相关错误码 | 十六进制值 |
|
||
|---|---|---|
|
||
| 使用错误的 PDU 或 SDU 调用 API 服务 | `J1939DCM_E_INVALID_PDU_SDU_ID` | `0x01` |
|
||
| 使用 NULL 指针调用 API 函数(参考 `[SWS_BSW_00212]`) | `J1939DCM_E_PARAM_POINTER` | `0x11` |
|
||
| DEM 初始化失败(参考 `[SWS_BSW_00050]`) | `J1939DCM_E_INIT_FAILED` | `0x14` |
|
||
| 在未初始化状态下使用 API 服务 | `J1939DCM_E_UNINIT` | `0x20` |
|
||
| 在已初始化状态下使用 `Dem_Init` | `J1939DCM_E_REINIT` | `0x21` |
|
||
| 在错误状态下调用 API 服务 | `J1939DCM_E_INVALID_STATE` | `0x06` |
|
||
| 使用错误的节点参数调用 API 服务 | `J1939DCM_E_INVALID_NODE` | `0x08` |
|
||
| 使用错误的通道参数调用 API 服务 | `J1939DCM_E_INVALID_CHANNEL` | `0x0B` |
|
||
| 使用错误的 PGN 参数调用 API 服务 | `J1939DCM_E_INVALID_PGN` | `0x0D` |
|
||
|
||
⌋
|
||
|
||
#### 7.8.2 运行时错误
|
||
|
||
`[SWS_J1939Dcm_00198]` ⌈ J1939Dcm 模块使用的运行时错误表:
|
||
|
||
| 错误类型 | 相关错误码 | 十六进制值 |
|
||
|---|---|---|
|
||
| 缓冲区过小 | `J1939DCM_E_BUFFER_TOO_SMALL` | `0x0E` |
|
||
|
||
⌋
|
||
|
||
#### 7.8.3 瞬态故障
|
||
|
||
无瞬态故障。
|
||
|
||
#### 7.8.4 生产错误
|
||
|
||
无生产错误。
|
||
|
||
#### 7.8.5 扩展生产错误
|
||
|
||
无扩展生产错误。
|
||
|
||
---
|
||
|
||
## 8 API 规范
|
||
|
||
### 8.1 导入类型
|
||
|
||
本章列出了从以下模块导入的所有类型:
|
||
|
||
`[SWS_J1939Dcm_00085]` ⌈
|
||
|
||
| 模块 | 头文件 | 导入类型 |
|
||
|---|---|---|
|
||
| `ComStack_Types` | `ComStackTypes.h` | `BufReq_ReturnType`、`NetworkHandleType`、`PduIdType`、`PduInfoType`、`PduLengthType`、`RetryInfoType` |
|
||
| `Dem` | `Dem.h` | `Dem_J1939DcmDTCStatusFilterType`、`Dem_J1939DcmDiagnosticReadiness1Type`、`Dem_J1939DcmDiagnosticReadiness2Type`、`Dem_J1939DcmDiagnosticReadiness3Type`、`Dem_J1939DcmLampStatusType`、`Dem_J1939DcmSetClearFilterType`、`Dem_J1939DcmSetFreezeFrameFilterType` |
|
||
| | `Dem_J1939Dcm.h` | `Dem_DTCKindType` |
|
||
| | `Rte_Dem_Type.h` | `Dem_DTCOriginType` |
|
||
| `J1939Rm` | `Rte_J1939Rm_Type.h` | `J1939Rm_AckCode`、`J1939Rm_ExtIdInfoType` |
|
||
| `Std_Types` | `StandardTypes.h` | `Std_ReturnType`、`Std_VersionInfoType` |
|
||
|
||
⌋
|
||
|
||
### 8.2 类型定义
|
||
|
||
**图 2:类型定义概览**(详见原文 PDF 第 40 页)
|
||
|
||
#### 8.2.1 J1939Dcm_ConfigType
|
||
|
||
`[SWS_J1939Dcm_00111]` ⌈
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 名称 | `J1939Dcm_ConfigType` |
|
||
| 类型 | 结构体 |
|
||
| 元素 | `void` — 实现特定 (implementation specific) |
|
||
| 描述 | 这是 J1939 诊断通信管理器配置的基本类型。在 J1939 诊断通信管理器初始化中,将使用指向此结构实例的指针。该结构的内容在第 10 章"配置规范"中定义。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
#### 8.2.2 J1939Dcm_StateType
|
||
|
||
`[SWS_J1939Dcm_00123]` ⌈
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 名称 | `J1939Dcm_StateType` |
|
||
| 类型 | 枚举 |
|
||
| 范围 | `J1939DCM_STATE_ONLINE` `0x00` 正常通信;`J1939DCM_STATE_OFFLINE` `0x01` 无诊断通信 |
|
||
| 描述 | 此类型表示 J1939 诊断通信管理器的通信状态。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
### 8.3 函数定义
|
||
|
||
本节列出为上层模块提供的函数。
|
||
|
||
#### 8.3.1 J1939Dcm_Init
|
||
|
||
`[SWS_J1939Dcm_00098]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_Init(
|
||
const J1939Dcm_ConfigType* configPtr
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_Init` |
|
||
| 语法 | `void J1939Dcm_Init(const J1939Dcm_ConfigType* configPtr)` |
|
||
| 服务 ID [hex] | `0x01` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 不可重入 |
|
||
| 参数 (in) | `configPtr`:指向所选配置结构的指针 |
|
||
| 参数 (inout) | 无 |
|
||
| 参数 (out) | 无 |
|
||
| 返回值 | 无 |
|
||
| 描述 | 此函数初始化 J1939 诊断通信管理器。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
详见 7.2.1 节。
|
||
|
||
#### 8.3.2 J1939Dcm_DeInit
|
||
|
||
`[SWS_J1939Dcm_00099]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_DeInit(void)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_DeInit` |
|
||
| 语法 | `void J1939Dcm_DeInit(void)` |
|
||
| 服务 ID [hex] | `0x02` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 不可重入 |
|
||
| 描述 | 此函数将 J1939 诊断通信管理器重置为未初始化状态。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
详见 7.2.1 节。
|
||
|
||
#### 8.3.3 J1939Dcm_GetVersionInfo
|
||
|
||
`[SWS_J1939Dcm_00100]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_GetVersionInfo(Std_VersionInfoType * versioninfo)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_GetVersionInfo` |
|
||
| 语法 | `void J1939Dcm_GetVersionInfo(Std_VersionInfoType * versioninfo)` |
|
||
| 服务 ID [hex] | `0x03` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 不可重入 |
|
||
| 参数 (out) | `versioninfo`:指向存储此模块版本信息的位置的指针 |
|
||
| 返回值 | 无 |
|
||
| 描述 | 返回此模块的版本信息。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
#### 8.3.4 J1939Dcm_SetState
|
||
|
||
`[SWS_J1939Dcm_00124]` ⌈
|
||
|
||
```c
|
||
Std_ReturnType J1939Dcm_SetState(
|
||
NetworkHandleType channel,
|
||
uint8 node,
|
||
J1939Dcm_StateType newState
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_SetState` |
|
||
| 语法 | `Std_ReturnType J1939Dcm_SetState(NetworkHandleType channel, uint8 node, J1939Dcm_StateType newState)` |
|
||
| 服务 ID [hex] | `0x0b` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 可重入 |
|
||
| 参数 (in) | `channel`:应更改状态的通道;`node`:应更改状态的节点;`newState`:J1939Dcm 应进入的新状态(见 `J1939Dcm_StateType` 定义中可用的状态) |
|
||
| 参数 (inout) | 无 |
|
||
| 参数 (out) | 无 |
|
||
| 返回值 | `E_OK`:已设置新通信状态;`E_NOT_OK`:由于 `newState` 中的值错误或模块初始化状态错误,通信状态未更改 |
|
||
| 描述 | 将 J1939Dcm 的通信状态更改为离线或在线。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00130]` ⌈ 当 `newState` 不在有效范围内时,J1939 诊断管理器应通过返回 `E_NOT_OK` 拒绝状态更改。如果通过 `J1939DcmDevErrorDetect` 启用了 DET,则应报告 DET 错误 `J1939DCM_E_INVALID_STATE`。⌋
|
||
|
||
`[SWS_J1939Dcm_00147]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_SetState` 应检查节点参数是否已配置(`J1939DcmNmNodeRef` [`ECUC_J1939Dcm_00013`])。如果出错,函数 `J1939Dcm_SetState` 应不产生任何效果并返回,同时以错误码 `J1939DCM_E_INVALID_NODE` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
`[SWS_J1939Dcm_00148]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_SetState` 应检查通道参数是否已针对所请求的节点参数配置(`J1939DcmNodeChannelRef`)。如果出错,函数 `J1939Dcm_SetState` 应不产生任何效果并返回,同时以错误码 `J1939DCM_E_INVALID_CHANNEL` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
### 8.4 回调通知
|
||
|
||
本节列出为其他模块提供的函数。
|
||
|
||
#### 8.4.1 J1939Dcm_RequestIndication
|
||
|
||
`[SWS_J1939Dcm_00101]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_RequestIndication(
|
||
uint8 node,
|
||
NetworkHandleType channel,
|
||
uint32 requestedPgn,
|
||
const J1939Rm_ExtIdInfoType* extIdInfo,
|
||
uint8 sourceAddress,
|
||
uint8 destAddress,
|
||
uint8 priority
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_RequestIndication` |
|
||
| 语法 | (见上) |
|
||
| 服务 ID [hex] | `0x47` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 可重入 |
|
||
| 参数 (in) | `node`:收到请求的节点;`channel`:收到请求的通道;`requestedPgn`:所请求 PG 的 PGN;`extIdInfo`:扩展标识符字节;`sourceAddress`:发送 Request PG 的节点地址;`destAddress`:此节点的地址或 `0xFF`(广播);`priority`:Request PG 的优先级 |
|
||
| 描述 | 指示接收到 Request 或 Request2 PG。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00138]` ⌈ 当 J1939Dcm 处于离线状态(参考 API `J1939Dcm_SetState`)时调用接口 `J1939Dcm_RequestIndication`,则 J1939 诊断通信管理器应忽略该请求消息。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00149]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_RequestIndication` 应检查节点参数是否已配置(`J1939DcmNmNodeRef` [`ECUC_J1939Dcm_00013`])。如果出错,函数 `J1939Dcm_RequestIndication` 应不产生任何效果并返回,同时以错误码 `J1939DCM_E_INVALID_NODE` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
`[SWS_J1939Dcm_00150]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_RequestIndication` 应检查通道参数是否已针对所请求的节点参数配置(`J1939DcmNodeChannelRef`)。如果出错,函数 `J1939Dcm_RequestIndication` 应不产生任何效果并返回,同时以错误码 `J1939DCM_E_INVALID_CHANNEL` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
参数 `requestedPgn` 在 `SWS_J1939Dcm_00006` 中验证。参数 `destAddress` 仅用于确定广播地址,因此不需要特殊验证。参数 `sourceAddress` 用于设置传输的 `destAddress`,但已在 J1939Rm 中验证。参数 `priority` 不需要验证,因为根本未考虑。
|
||
|
||
#### 8.4.2 J1939Dcm_RxIndication
|
||
|
||
`[SWS_J1939Dcm_00128]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_RxIndication(
|
||
PduIdType RxPduId,
|
||
const PduInfoType* PduInfoPtr
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_RxIndication` |
|
||
| 服务 ID [hex] | `0x42` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 对不同 PduId 可重入;对同一 PduId 不可重入 |
|
||
| 参数 (in) | `RxPduId`:所接收 PDU 的 ID;`PduInfoPtr`:包含所接收 PDU 的长度 (`SduLength`)、指向包含 PDU 的缓冲区的指针 (`SduDataPtr`),以及与此 PDU 相关的元数据 |
|
||
| 描述 | 指示从下层通信接口模块接收到 PDU。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00139]` ⌈ 当 J1939Dcm 处于离线状态(参考 API `J1939Dcm_SetState`)时调用接口 `J1939Dcm_RxIndication`,则 J1939 诊断通信管理器应忽略该命令消息。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00151]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_RxIndication` 应检查 `RxPduId` 参数是否未在任何 DMx 消息(`J1939DcmDiagnosticMessageSupport`)上配置(`J1939DcmRxPduId`)。如果出错,函数 `J1939Dcm_RxIndication` 应不产生任何效果并返回,同时以错误码 `J1939DCM_E_INVALID_PDU_SDU_ID` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
#### 8.4.3 J1939Dcm_TxConfirmation
|
||
|
||
`[SWS_J1939Dcm_00145]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_TxConfirmation(
|
||
PduIdType TxPduId,
|
||
Std_ReturnType result
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_TxConfirmation` |
|
||
| 服务 ID [hex] | `0x40` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 对不同 PduId 可重入;对同一 PduId 不可重入 |
|
||
| 参数 (in) | `TxPduId`:已传输 PDU 的 ID;`result`:`E_OK`:PDU 已传输;`E_NOT_OK`:PDU 传输失败 |
|
||
| 描述 | 下层通信接口模块确认 PDU 的传输或传输失败。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00146]` ⌈ 当 J1939Dcm 处于离线状态(参考 API `J1939Dcm_SetState`)时调用接口 `J1939Dcm_TxConfirmation`,则 J1939 诊断通信管理器应释放缓冲区([`SWS_J1939Dcm_00115`])。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00162]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_TxConfirmation` 应检查 `id` 参数是否未在任何 DMx 消息(`J1939DcmDiagnosticMessageSupport`)上配置(`J1939DcmTxPduId`)。如果出错,函数 `J1939Dcm_TxConfirmation` 应不产生任何效果并返回,同时以错误码 `J1939DCM_E_INVALID_PDU_SDU_ID` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
`[SWS_J1939Dcm_00163]` ⌈ 函数 `J1939Dcm_TxConfirmation` 应检查它是否在上下文之外被调用,即 J1939Dcm 当前是否正在通过 TP 协议传输响应消息。如果出错,函数 `J1939Dcm_TxConfirmation` 应不产生任何效果并返回。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
#### 8.4.4 J1939Dcm_StartOfReception
|
||
|
||
`[SWS_J1939Dcm_00102]` ⌈
|
||
|
||
```c
|
||
BufReq_ReturnType J1939Dcm_StartOfReception(
|
||
PduIdType id,
|
||
const PduInfoType* info,
|
||
PduLengthType TpSduLength,
|
||
PduLengthType* bufferSizePtr
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_StartOfReception` |
|
||
| 服务 ID [hex] | `0x46` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 可重入 |
|
||
| 参数 (in) | `id`:I-PDU 的标识;`info`:指向 `PduInfoType` 结构的指针,包含有效载荷数据(不含协议信息)和第一个帧或单帧传输协议 I-PDU 接收的有效载荷长度,以及与此 PDU 相关的元数据;`TpSduLength`:要接收的 N-SDU 的总长度 |
|
||
| 参数 (out) | `bufferSizePtr`:接收模块中可用的接收缓冲区。此参数将用于计算传输协议模块中的块大小 (BS) |
|
||
| 返回值 | `BUFREQ_OK`:连接已被接受;`BUFREQ_E_NOT_OK`:连接已被拒绝;`BUFREQ_E_OVFL`:无法提供所需长度的缓冲区 |
|
||
| 描述 | 此函数在开始接收 N-SDU 时被调用。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00140]` ⌈ 当 J1939Dcm 处于离线状态(参考 API `J1939Dcm_SetState`)时调用接口 `J1939Dcm_StartOfReception`,则 J1939 诊断通信管理器应通过返回 `BUFREQ_E_NOT_OK` 拒绝该命令消息。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00152]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_StartOfReception` 应检查 `id` 参数是否未在任何 DMx 消息(`J1939DcmDiagnosticMessageSupport`)上配置(`J1939DcmRxPduId`)。如果出错,函数 `J1939Dcm_StartOfReception` 应返回 `BUFREQ_E_NOT_OK` 且不产生任何效果,同时以错误码 `J1939DCM_E_INVALID_PDU_SDU_ID` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
`[SWS_J1939Dcm_00153]` ⌈ 函数 `J1939Dcm_StartOfReception` 应检查 `TpSduLength` 参数是否小于或等于已配置的缓冲区大小(`J1939DcmCommonBufferSize`)。如果出错,函数 `J1939Dcm_StartOfReception` 应返回 `BUFREQ_E_OVFL`。⌋
|
||
|
||
`[SWS_J1939Dcm_00155]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_StartOfReception` 应检查 J1939Dcm 是否处于正确状态以通过 TP 协议接收命令消息。如果出错,函数 `J1939Dcm_StartOfReception` 应返回 `BUFREQ_E_NOT_OK` 且不产生任何效果,同时以错误码 `J1939DCM_E_INVALID_STATE` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
`[SWS_J1939Dcm_00186]` ⌈ 当 API `J1939Dcm_StartOfReception` 在 `TpSduLength` 等于 0 的情况下被调用时,应返回值 `BUFREQ_E_NOT_OK` 且不采取进一步操作。⌋
|
||
|
||
#### 8.4.5 J1939Dcm_CopyRxData
|
||
|
||
`[SWS_J1939Dcm_00103]` ⌈
|
||
|
||
```c
|
||
BufReq_ReturnType J1939Dcm_CopyRxData(
|
||
PduIdType id,
|
||
const PduInfoType* info,
|
||
PduLengthType* bufferSizePtr
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_CopyRxData` |
|
||
| 服务 ID [hex] | `0x44` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 可重入 |
|
||
| 参数 (in) | `id`:所接收 I-PDU 的标识;`info`:提供源缓冲区 (`SduDataPtr`) 和要复制的字节数 (`SduLength`)。`SduLength` 为 0 可用于查询上层模块中当前可用的缓冲区数量 |
|
||
| 参数 (out) | `bufferSizePtr`:复制数据后可用的接收缓冲区 |
|
||
| 返回值 | `BUFREQ_OK`:数据已成功复制;`BUFREQ_E_NOT_OK`:由于发生错误而未复制数据 |
|
||
| 描述 | 调用此函数以将 I-PDU 段 (N-PDU) 的接收数据提供给上层。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00141]` ⌈ 函数 `J1939Dcm_CopyRxData` 应检查它是否在上下文之外被调用,即 J1939Dcm 当前是否正在通过 TP 协议接收命令消息。如果出错,函数 `J1939Dcm_CopyRxData` 应返回 `BUFREQ_E_NOT_OK`。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00154]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_CopyRxData` 应检查 `id` 参数是否未在任何 DMx 消息(`J1939DcmDiagnosticMessageSupport`)上配置(`J1939DcmRxPduId`)。如果出错,函数 `J1939Dcm_CopyRxData` 应返回 `BUFREQ_E_NOT_OK` 且不产生任何效果,同时以错误码 `J1939DCM_E_INVALID_PDU_SDU_ID` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
#### 8.4.6 J1939Dcm_TpRxIndication
|
||
|
||
`[SWS_J1939Dcm_00104]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_TpRxIndication(
|
||
PduIdType id,
|
||
Std_ReturnType result
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_TpRxIndication` |
|
||
| 服务 ID [hex] | `0x45` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 可重入 |
|
||
| 参数 (in) | `id`:所接收 I-PDU 的标识;`result`:接收结果 |
|
||
| 描述 | 在通过 TP API 接收到 I-PDU 后被调用,`result` 指示传输是否成功。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00142]` ⌈ 函数 `J1939Dcm_TpRxIndication` 应检查它是否在上下文之外被调用,即 J1939Dcm 当前是否正在通过 TP 协议接收响应消息。如果出错,函数 `J1939Dcm_TpRxIndication` 应不产生任何效果并返回。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00156]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_TpRxIndication` 应检查 `id` 参数是否未在任何 DMx 消息(`J1939DcmDiagnosticMessageSupport`)上配置(`J1939DcmRxPduId`)。如果出错,函数 `J1939Dcm_TpRxIndication` 应返回且不产生任何效果,同时以错误码 `J1939DCM_E_INVALID_PDU_SDU_ID` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
#### 8.4.7 J1939Dcm_CopyTxData
|
||
|
||
`[SWS_J1939Dcm_00105]` ⌈
|
||
|
||
```c
|
||
BufReq_ReturnType J1939Dcm_CopyTxData(
|
||
PduIdType id,
|
||
const PduInfoType* info,
|
||
const RetryInfoType* retry,
|
||
PduLengthType* availableDataPtr
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_CopyTxData` |
|
||
| 服务 ID [hex] | `0x43` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 可重入 |
|
||
| 参数 (in) | `id`:所传输 I-PDU 的标识;`info`:提供目标缓冲区 (`SduDataPtr`) 和要复制的字节数 (`SduLength`);`retry`:用于确认已传输的数据或在传输问题后重新传输数据 |
|
||
| 参数 (out) | `availableDataPtr`:指示上层模块 Tx 缓冲区中剩余的可用字节数 |
|
||
| 返回值 | `BUFREQ_OK`:数据已完全按请求复制到发送缓冲区;`BUFREQ_E_BUSY`:由于所需的 Tx 数据量不可用而无法满足请求;`BUFREQ_E_NOT_OK`:数据未复制,请求失败 |
|
||
| 描述 | 调用此函数以获取 I-PDU 段 (N-PDU) 的发送数据。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00143]` ⌈ 函数 `J1939Dcm_CopyTxData` 应检查它是否在上下文之外被调用,即 J1939Dcm 当前是否正在通过 TP 协议传输响应消息。如果出错,函数 `J1939Dcm_CopyTxData` 应返回 `BUFREQ_E_NOT_OK`。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
`[SWS_J1939Dcm_00158]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_CopyTxData` 应检查 `id` 参数是否未在任何 DMx 消息(`J1939DcmDiagnosticMessageSupport`)上配置(`J1939DcmTxPduId`)。如果出错,函数 `J1939Dcm_CopyTxData` 应返回 `BUFREQ_E_NOT_OK` 且不产生任何效果,同时以错误码 `J1939DCM_E_INVALID_PDU_SDU_ID` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
#### 8.4.8 J1939Dcm_TpTxConfirmation
|
||
|
||
`[SWS_J1939Dcm_00106]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_TpTxConfirmation(
|
||
PduIdType id,
|
||
Std_ReturnType result
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_TpTxConfirmation` |
|
||
| 服务 ID [hex] | `0x48` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 可重入 |
|
||
| 参数 (in) | `id`:所传输 I-PDU 的标识;`result`:I-PDU 传输的结果 |
|
||
| 描述 | 在 I-PDU 已在网络上传输后被调用,`result` 指示传输是否成功。 |
|
||
| 可通过 | `J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00160]` ⌈ 如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,函数 `J1939Dcm_TpTxConfirmation` 应检查 `id` 参数是否未在任何 DMx 消息(`J1939DcmDiagnosticMessageSupport`)上配置(`J1939DcmTxPduId`)。如果出错,函数 `J1939Dcm_TpTxConfirmation` 应返回且不产生任何效果,同时以错误码 `J1939DCM_E_INVALID_PDU_SDU_ID` 向 Default Error Tracer 上报错误。⌋
|
||
|
||
`[SWS_J1939Dcm_00161]` ⌈ 函数 `J1939Dcm_TpTxConfirmation` 应检查它是否在上下文之外被调用,即 J1939Dcm 当前是否正在通过 TP 协议传输响应消息。如果出错,函数 `J1939Dcm_TpTxConfirmation` 应返回且不产生任何效果。此外,如果配置参数 `J1939DcmDevErrorDetect` [`ECUC_J1939Dcm_00003`] 已启用,应使用参数 `J1939DCM_E_INVALID_STATE` 触发对 DET 的调用。⌋
|
||
|
||
#### 8.4.9 来自 DEM 的回调通知
|
||
|
||
##### 8.4.9.1 J1939Dcm_DemTriggerOnDTCStatus
|
||
|
||
`[SWS_J1939Dcm_00122]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_DemTriggerOnDTCStatus(
|
||
uint32 DTC,
|
||
uint8 ClientId
|
||
)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_DemTriggerOnDTCStatus` |
|
||
| 服务 ID [hex] | `0x0a` |
|
||
| 同步/异步 | 同步 |
|
||
| 可重入性 | 对不同 `ClientId` 可重入;对同一 `ClientId` 不可重入 |
|
||
| 参数 (in) | `DTC`:UDS 格式的诊断故障码;`ClientId`:引用 DTC 分配给故障存储器的 `DemClientId` 值 |
|
||
| 描述 | DM01 消息的触发器,指示 UDS 状态已发生更改。 |
|
||
| 可通过 | `J1939Dcm_Dem.h` |
|
||
|
||
⌋
|
||
|
||
### 8.5 调度函数
|
||
|
||
这些函数由 Basic Software Scheduler 直接调用。以下函数应没有返回值和参数,所有函数应不可重入。
|
||
|
||
#### 8.5.1 J1939Dcm_MainFunction
|
||
|
||
`[SWS_J1939Dcm_00107]` ⌈
|
||
|
||
```c
|
||
void J1939Dcm_MainFunction(void)
|
||
```
|
||
|
||
| 项 | 内容 |
|
||
|---|---|
|
||
| 服务名称 | `J1939Dcm_MainFunction` |
|
||
| 服务 ID [hex] | `0x04` |
|
||
| 描述 | J1939 诊断通信管理器的主函数。用于调度目的和超时监控。 |
|
||
| 可通过 | `SchM_J1939Dcm.h` |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00108]` ⌈ `J1939Dcm_MainFunction` 的调用频率由配置参数 `J1939DcmMainFunctionPeriod` 决定。⌋
|
||
|
||
### 8.6 期望接口
|
||
|
||
本章列出了从其他模块请求的所有外部接口。
|
||
|
||
#### 8.6.1 强制接口
|
||
|
||
本章定义了完成模块强制功能所需的所有外部接口。
|
||
|
||
`[SWS_J1939Dcm_00199]` ⌈
|
||
|
||
| API 函数 | 头文件 | 描述 |
|
||
|---|---|---|
|
||
| `Det_ReportRuntimeError` | `Det.h` | 用于报告运行时错误的服务。如果已配置 callout,则应调用此 callout。 |
|
||
|
||
⌋
|
||
|
||
#### 8.6.2 可选接口
|
||
|
||
本章定义了完成模块可选功能所需的所有外部接口。
|
||
|
||
`[SWS_J1939Dcm_00132]` ⌈
|
||
|
||
| API 函数 | 头文件 | 描述 |
|
||
|---|---|---|
|
||
| `BswM_J1939DcmBroadcastStatus` | `BswM_J1939Dcm.h` | 此 API 将所需可用网络的通信状态通知 BswM。该状态通常通过 COM I-PDU 组开关激活 |
|
||
| `Dem_J1939DcmClearDTC` | `Dem_J1939Dcm.h` | 清除与指定 DTC 相关的所有事件的状态,以及这些事件的所有关联事件存储器条目 |
|
||
| `Dem_J1939DcmFirstDTCwithLampStatus` | `Dem_J1939Dcm.h` | 此函数将过滤器设置为特定节点 DM31 响应的第一个适用 DTC |
|
||
| `Dem_J1939DcmGetNextDTCwithLampStatus` | `Dem_J1939Dcm.h` | 获取 DM31 的下一个过滤的 J1939 DTC,包括当前 `LampStatus` |
|
||
| `Dem_J1939DcmGetNextFilteredDTC` | `Dem_J1939Dcm.h` | 获取下一个过滤的 J1939 DTC |
|
||
| `Dem_J1939DcmGetNextFilteredRatio` | `Dem_J1939Dcm.h` | 获取下一个过滤的 Ratio |
|
||
| `Dem_J1939DcmGetNextFreezeFrame` | `Dem_J1939Dcm.h` | 获取下一个冻结帧数据。该函数将数据存储在提供的 `DestBuffer` 中 |
|
||
| `Dem_J1939DcmGetNextSPNInFreezeFrame` | `Dem_J1939Dcm.h` | 获取下一个 SPN |
|
||
| `Dem_J1939DcmGetNumberOfFilteredDTC` | `Dem_J1939Dcm.h` | 获取由函数 `Dem_J1939DcmSetDTCFilter` 设置的当前过滤 DTC 的数量 |
|
||
| `Dem_J1939DcmReadDiagnosticReadiness1` | `Dem_J1939Dcm.h` | 用于报告由 Dem 计算的诊断就绪状态 1 (DM05) 值的服务 |
|
||
| `Dem_J1939DcmReadDiagnosticReadiness2` | `Dem_J1939Dcm.h` | 用于报告由 Dem 计算的诊断就绪状态 2 (DM21) 值的服务 |
|
||
| `Dem_J1939DcmReadDiagnosticReadiness3` | `Dem_J1939Dcm.h` | 用于报告由 Dem 计算的诊断就绪状态 3 (DM26) 值的服务 |
|
||
| `Dem_J1939DcmSetDTCFilter` | `Dem_J1939Dcm.h` | 此函数为特定节点设置 DTC 过滤器,并返回过滤 DTC 的复合指示灯状态 |
|
||
| `Dem_J1939DcmSetFreezeFrameFilter` | `Dem_J1939Dcm.h` | 此函数为特定节点设置 FreezeFrame 过滤器 |
|
||
| `Dem_J1939DcmSetRatioFilter` | `Dem_J1939Dcm.h` | 此函数为特定节点设置 Ratio 过滤器,并返回相应的点火循环计数器和总分母 |
|
||
| `Det_ReportError` | `Det.h` | 用于报告开发错误的服务 |
|
||
| `J1939Rm_SendAck` | `J1939Rm.h` | 请求发送 Acknowledge PG |
|
||
| `PduR_J1939DcmCancelReceive` | `PduR_J1939Dcm.h` | 请求取消在下层传输协议模块中正在进行的 PDU 接收 |
|
||
| `PduR_J1939DcmCancelTransmit` | `PduR_J1939Dcm.h` | 请求取消在下层通信模块中正在进行的 PDU 传输 |
|
||
| `PduR_J1939DcmTransmit` | `PduR_J1939Dcm.h` | 请求发送 PDU |
|
||
|
||
⌋
|
||
|
||
`[SWS_J1939Dcm_00167]` ⌈ `J1939Rm_SendAck` 的参数 "broadcast" 应始终设置为 FALSE。⌋
|
||
|
||
`[SWS_J1939Dcm_00187]` ⌈ `J1939Rm_SendAck` 的参数 "extIdInfo" 应始终设置为 NULL_PTR。⌋
|
||
|
||
> 背景:ACKM 消息从不作为对广播请求的响应发送。这由 SAE J1939-21(针对否定应答)和 SAE J1939-73(针对 DM3、DM11 和 DM55 的肯定应答)预先排除。
|
||
|
||
#### 8.6.3 可配置接口
|
||
|
||
J1939Dcm 没有任何可配置接口。
|
||
|
||
### 8.7 服务接口
|
||
|
||
#### 8.7.1 客户端-服务器接口
|
||
|
||
##### 8.7.1.1 J1939Dcm_CalibrationInformation
|
||
|
||
如果配置了 DM19(参考 `ECUC_J1939Dcm_00042`:`J1939DcmDmxSupport == J1939DcmDm19Support`),J1939Dcm Service Component 应提供端口接口 `J1939Dcm_CalibrationInformation`。
|
||
|
||
`[SWS_J1939Dcm_00097]` ⌈
|
||
|
||
| 名称 | `J1939Dcm_CalibrationInformation` |
|
||
|---|---|
|
||
| 注释 | -- |
|
||
| IsService | true |
|
||
| Variation | `{ecuc(J1939Dcm/J1939DcmConfigSet/J1939DcmNode/J1939DcmDiagnosticMessageSupport.J1939DcmDmxSupport)} == J1939DcmDm19Support` |
|
||
| Possible Errors | `0` `E_OK`;`1` `E_NOT_READY`;`2` `E_NEXT` |
|
||
| Operations | `GetCalibrationVerificationNumber` |
|
||
|
||
**Operations: `GetCalibrationVerificationNumber`**
|
||
|
||
- Variation: `--`
|
||
- Parameters:
|
||
- `CalibrationVerificationNumber`
|
||
- Comment: --
|
||
- Type: `uint32`
|
||
- Variation: --
|
||
- Direction: OUT
|
||
- `CalibrationID`
|
||
- Comment: --
|
||
- Type: `CalibrationIDArrayType`
|
||
- Variation: --
|
||
- Direction: OUT
|
||
- Possible Errors:
|
||
- `E_OK`:当 CVN 计算已完成并结束时使用
|
||
- `E_NOT_READY`:当 CVN 计算尚未完成时使用。工具需要再次发送请求
|
||
- `E_NEXT`:当 CVN 计算已完成,但尚未返回所有 CVN 时使用
|
||
|
||
⌋
|
||
|
||
#### 8.7.2 实现数据类型
|
||
|
||
##### 8.7.2.1 CalibrationIDArrayType
|
||
|
||
如果配置了 DM19(参考 `ECUC_J1939Dcm_00042`:`J1939DcmDmxSupport == J1939DcmDm19Support`),J1939Dcm Service Component 应提供实现数据类型 `CalibrationIDArrayType`。
|
||
|
||
`[SWS_J1939Dcm_00136]` ⌈
|
||
|
||
| 名称 | `CalibrationIDArrayType` |
|
||
|---|---|
|
||
| Kind | 数组,元素类型 `uint8` |
|
||
| Size | 16 元素 |
|
||
| 描述 | -- |
|
||
| Variation | -- |
|
||
| 可通过 | `Rte_J1939Dcm_Type.h` |
|
||
|
||
⌋
|
||
|
||
#### 8.7.3 端口
|
||
|
||
##### 8.7.3.1 J1939Dcm_CalibrationInformation
|
||
|
||
如果配置了 DM19(参考 `ECUC_J1939Dcm_00042`:`J1939DcmDmxSupport == J1939DcmDm19Support`),J1939Dcm Service Component 应提供端口原型 `J1939Dcm_CalibrationInformation`。
|
||
|
||
`[SWS_J1939Dcm_00137]` ⌈
|
||
|
||
| 名称 | `J1939Dcm_CalibrationInformation` |
|
||
|---|---|
|
||
| Kind | `RequiredPort` |
|
||
| Interface | `J1939Dcm_CalibrationInformation` |
|
||
| 描述 | 用于从应用程序检索标定验证编号 (CVN) 的端口 |
|
||
| Variation | `{ecuc(J1939Dcm/J1939DcmConfigSet/J1939DcmNode/J1939DcmDiagnosticMessageSupport.J1939DcmDmxSupport)} == J1939DcmDm19Support` |
|
||
|
||
⌋
|
||
|
||
---
|
||
|
||
## 9 时序图
|
||
|
||
本版本的 J1939 SWS 不包括时序图。
|
||
|
||
---
|
||
|
||
## 10 配置规范
|
||
|
||
通常,本章定义配置参数及其到容器的聚类。为了支持规范,第 10.1 节描述了基础内容。它还指定了您应用于参数规范的模板(表)。我们打算在规范中保留第 10.1 节以保证可理解性。
|
||
|
||
第 10.2 节指定 J1939 诊断通信管理器的结构(容器)和参数。
|
||
|
||
第 10.3 节指定 J1939 诊断通信管理器的发布信息。
|
||
|
||
### 10.1 如何阅读本章
|
||
|
||
有关详细信息,请参阅 SWS_BSWGeneral 中第 10.1 节 "Introduction to configuration specification"。
|
||
|
||
### 10.2 容器和配置参数
|
||
|
||
以下部分总结了 J1939 诊断通信管理器的所有配置参数。参数的详细含义在第 7 章中描述。
|
||
|
||
> **图(容器结构)**:J1939Dcm 模块的 UML 容器图详见原文 PDF 第 59 页。
|
||
> 完整容器结构包括:`J1939Dcm` → `J1939DcmGeneral`(包含 `J1939DcmVersionInfoApi`、`J1939DcmDevErrorDetect`、`J1939DcmMainFunctionPeriod`、`J1939DcmMaxDTCsPerMainFunction`、`J1939DcmMaxFreezeFramesPerMainFunction`、`J1939DcmMaxRatiosPerMainFunction`、`J1939DcmCommonBufferSize`、`J1939DcmDM01BufferSize`、`J1939DcmDM01MaxDTCs`、`J1939DcmDM35BufferSize`)以及 `J1939DcmConfigSet`(包含 `J1939DcmNode`、`J1939DcmChannel`、`J1939DcmProcessingConditions`、`J1939DcmDspExternalSRDataElementClass` 等子容器)。
|
||
|
||
#### 10.2.1 J1939Dcm
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00005` |
|
||
|---|---|
|
||
| 模块名称 | `J1939Dcm` |
|
||
| 模块描述 | SAE J1939 Dcm 模块 |
|
||
| Post-Build 变体支持 | true |
|
||
| 支持的配置变体 | `VARIANT-LINK-TIME`、`VARIANT-POST-BUILD`、`VARIANT-PRE-COMPILE` |
|
||
|
||
**包含的容器**
|
||
|
||
| 容器名称 | 数量 | 范围/依赖 |
|
||
|---|---|---|
|
||
| `J1939DcmConfigSet` | 1 | 包含 AUTOSAR J1939Dcm 模块的配置参数和子容器 |
|
||
| `J1939DcmGeneral` | 1 | 包含模块的通用配置参数 |
|
||
|
||
#### 10.2.2 J1939DcmConfigSet
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00009` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmConfigSet` |
|
||
| 描述 | 包含 AUTOSAR J1939Dcm 模块的配置参数和子容器 |
|
||
|
||
**包含的容器**
|
||
|
||
| 容器名称 | 数量 | 范围/依赖 |
|
||
|---|---|---|
|
||
| `J1939DcmChannel` | 1..* | 包含 J1939DcmChannel 参数 |
|
||
| `J1939DcmDspExternalSRDataElementClass` | 0..1 | 此容器定义所提供端口中应读取的数据的来源或所请求端口中应写入的数据的目标 |
|
||
| `J1939DcmNode` | 1..* | 包含逻辑 J1939 节点支持的参数 |
|
||
| `J1939DcmProcessingConditions` | 0..1 | 包含 J1939Dcm 模式仲裁功能的配置 |
|
||
|
||
#### 10.2.3 J1939DcmGeneral
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00001` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmGeneral` |
|
||
| 描述 | 包含模块的通用配置参数 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmCommonBufferSize` (`ECUC_J1939Dcm_00040`):公共缓冲区的大小(字节)。缓冲区大小应与最长命令或响应消息一样大。范围 1..65535。
|
||
|
||
`J1939DcmDevErrorDetect` (`ECUC_J1939Dcm_00003`):开启或关闭开发错误检测和通知。
|
||
- true:检测和通知已启用
|
||
- false:检测和通知已禁用
|
||
|
||
`J1939DcmDM01BufferSize` (`ECUC_J1939Dcm_00041`):DM01 缓冲区的大小(字节)。缓冲区大小应与最长 DM01 响应消息一样大。范围 1..65535。
|
||
|
||
`J1939DcmDM01MaxDTCs` (`ECUC_J1939Dcm_00050`):DM01 消息中要上报的最大 DTC 数量的配置值限制。范围 1..255,默认值 20。
|
||
|
||
`J1939DcmDM35BufferSize` (`ECUC_J1939Dcm_00073`):DM35 缓冲区的大小(字节)。缓冲区大小应与最长 DM35 响应消息一样大。范围 1..65535。
|
||
|
||
`J1939DcmMainFunctionPeriod` (`ECUC_J1939Dcm_00004`):`J1939Dcm_MainFunction` 的调用周期(秒)。范围 `]0 .. INF[`。
|
||
|
||
`J1939DcmMaxDTCsPerMainFunction` (`ECUC_J1939Dcm_00006`):单个 MainFunction 周期中过滤的 DTC 的最大阈值。范围 1..255。
|
||
|
||
`J1939DcmMaxFreezeFramesPerMainFunction` (`ECUC_J1939Dcm_00007`):单个 MainFunction 周期中过滤的 FreezeFrame 的最大阈值。范围 1..255。
|
||
|
||
`J1939DcmMaxRatiosPerMainFunction` (`ECUC_J1939Dcm_00008`):单个 MainFunction 周期中过滤的 Ratios 的最大阈值。范围 1..255。
|
||
|
||
`J1939DcmVersionInfoApi` (`ECUC_J1939Dcm_00002`):用于启用版本信息 API 支持的预处理器开关。
|
||
|
||
#### 10.2.4 J1939DcmChannel
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00011` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmChannel` |
|
||
| 描述 | 包含 J1939DcmChannel 参数 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmBusType` (`ECUC_J1939Dcm_00039`):标识通信端口。可选值:
|
||
- `J1939DCM_ISO9141`:标识 ISO 9141 通信端口
|
||
- `J1939DCM_J1587`:标识 J1587 通信端口
|
||
- `J1939DCM_J1850`:标识 J1850 通信端口
|
||
- `J1939DCM_J1922`:标识 J1922 通信端口
|
||
- `J1939DCM_J1939_NETWORK_1`:标识 J1939 Network #1(主车辆网络)通信端口
|
||
- `J1939DCM_J1939_NETWORK_2`:标识 J1939 Network #2 通信端口
|
||
- `J1939DCM_J1939_NETWORK_3`:标识 J1939 Network #3 通信端口
|
||
- `J1939DCM_J1939_NETWORK_4`:标识 J1939 Network #4 通信端口
|
||
- `J1939DCM_OTHER`:标识 "Other, Manufacture Specified Port" 通信端口
|
||
- `J1939DCM_PROPRIETARY_NETWORK_1`:标识 Proprietary Network #1 通信端口
|
||
- `J1939DCM_PROPRIETARY_NETWORK_2`:标识 Proprietary Network #2 通信端口
|
||
|
||
`J1939DcmComMChannelRef` (`ECUC_J1939Dcm_00038`):对 ComMChannel 的引用。
|
||
|
||
#### 10.2.5 J1939DcmNode
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00010` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmNode` |
|
||
| 描述 | 包含逻辑 J1939 节点支持的参数 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmSPNsInDataStream` (`ECUC_J1939Dcm_00047`):定义 DM24 使用的数据流中可用的 SPN。范围 0..524287。
|
||
|
||
`J1939DcmDemClientRef` (`ECUC_J1939Dcm_00072`):对相应 Dem Client 的引用。
|
||
|
||
`J1939DcmNmNodeRef` (`ECUC_J1939Dcm_00013`):对相应 J1939Nm 节点的引用。
|
||
|
||
`J1939DcmNodeRmUserRef` (`ECUC_J1939Dcm_00049`):对 J1939Dcm 使用的 J1939RmUser 的引用。
|
||
|
||
`J1939DcmServiceOnlyDTCsMemoryDestinationRef` (`ECUC_J1939Dcm_00051`):对 DM53、DM54 和 DM55 处理的仅维修 DTC 所使用的用户定义存储器的引用。
|
||
> 依赖:所引用的事件存储器应分配给 `J1939DcmDemClientRef` 引用的 DemClient 的 `DemEventMemorySet`。
|
||
|
||
**包含的容器**
|
||
|
||
| 容器名称 | 数量 | 范围/依赖 |
|
||
|---|---|---|
|
||
| `J1939DcmDiagnosticMessageSupport` | 1..* | 包含诊断消息支持的配置参数 |
|
||
|
||
> 实现备注:根据 RFC#72884,对 `DemUserDefinedMemory` 的引用更改为 `DemEventMemory`。如果实现了 RFC#72884,则应将其重命名。
|
||
|
||
#### 10.2.6 J1939DcmDiagnosticMessageSupport
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00014` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmDiagnosticMessageSupport` |
|
||
| 描述 | 包含诊断消息支持的配置参数 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmDmxSupport` (`ECUC_J1939Dcm_00042`):此参数用于标识实际的 DMx 消息。可选值包括 `J1939DCM_DM01_SUPPORT` 至 `J1939DCM_DM57_SUPPORT`(完整 57 个枚举值见原文 PDF 第 71-72 页的表)。每个枚举值的描述如 DM01: Active Diagnostic Trouble Codes、DM02: Previously Active DTC 等。
|
||
|
||
`J1939DcmDiagnosticMessageModeRuleRef` (`ECUC_J1939Dcm_00070`):对 `J1939DcmModeRule` 的引用,控制 DiagnosticMessage 的执行。
|
||
|
||
`J1939DcmDiagnosticMessageSupportChannelRef` (`ECUC_J1939Dcm_00048`):对 `J1939DcmChannel` 的引用,表示该诊断消息受支持的通道。
|
||
|
||
**包含的容器**
|
||
|
||
| 容器名称 | 数量 | 范围/依赖 |
|
||
|---|---|---|
|
||
| `J1939DcmRxPdu` | 0..1 | 包含 J1939DcmRxPdu 的配置参数 |
|
||
| `J1939DcmTxPdu` | 0..1 | 包含 J1939DcmTxPdu 的配置参数 |
|
||
|
||
> 完整 DMx 枚举值列表(DM01-DM57)见原文 PDF 第 71-72 页。
|
||
|
||
#### 10.2.7 J1939DcmRxPdu
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00046` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmRxPdu` |
|
||
| 描述 | 包含 J1939DcmRxPdu 的配置参数 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmRxPduId` (`ECUC_J1939Dcm_00016`):用于与 PduR 通信的 I-PDU 标识符。范围 0..65535。
|
||
|
||
`J1939DcmRxPduRef` (`ECUC_J1939Dcm_00017`):对 Ecuc 模块中全局 Pdu 元素的引用。
|
||
|
||
#### 10.2.8 J1939DcmTxPdu
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00045` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmTxPdu` |
|
||
| 描述 | 包含 J1939DcmTxPdu 的配置参数 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmTxPduId` (`ECUC_J1939Dcm_00044`):用于标识 Tx 消息的 I-PDU 标识符。范围 0..65535。
|
||
|
||
`J1939DcmTxPduRef` (`ECUC_J1939Dcm_00043`):对 Ecuc 模块中全局 Pdu 元素的引用。
|
||
|
||
#### 10.2.9 J1939DcmProcessingConditions
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00052` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmProcessingConditions` |
|
||
| 描述 | 包含 J1939Dcm 模式仲裁功能的配置 |
|
||
|
||
**包含的容器**
|
||
|
||
| 容器名称 | 数量 | 范围/依赖 |
|
||
|---|---|---|
|
||
| `J1939DcmModeCondition` | 1..* | 此容器包含模式条件或环境条件的配置,可用作 J1939DcmModeRules 中的参数 |
|
||
|
||
#### 10.2.10 J1939DcmModeCondition
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00053` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmModeCondition` |
|
||
| 描述 | 包含模式条件或环境条件的配置 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmConditionType` (`ECUC_J1939Dcm_00055`):比较的类型。可选值:`J1939DCM_EQUALS`、`J1939DCM_EQUALS_NOT`、`J1939DCM_GREATER_THAN`、`J1939DCM_GREATER_OR_EQUAL`、`J1939DCM_LESS_THAN`、`J1939DCM_LESS_OR_EQUAL`。
|
||
|
||
`J1939DcmBswModeRef` (`ECUC_J1939Dcm_00054`):对 BSW Mode 的引用。
|
||
|
||
`J1939DcmSwcModeRef` (`ECUC_J1939Dcm_00056`):对 SW-C Mode 的引用。
|
||
|
||
`J1939DcmSwcSRDataElementRef` (`ECUC_J1939Dcm_00071`):对 SW-C sender-receiver 数据元素的引用。
|
||
|
||
#### 10.2.11 J1939DcmSwcSRDataElementValue
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00060` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmSwcSRDataElementValue` |
|
||
| 描述 | 包含用于模式条件比较的 SR 数据元素的值 |
|
||
|
||
**选择容器**
|
||
|
||
| 容器名称 | 范围/依赖 |
|
||
|---|---|
|
||
| `J1939DcmSwcSRDataElementPrimitive` | 单个数据元素值 |
|
||
| `J1939DcmSwcSRDataElementArray` | 数组数据元素值 |
|
||
|
||
#### 10.2.12 J1939DcmSwcSRDataElementArray
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00062` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmSwcSRDataElementArray` |
|
||
| 描述 | 表示数组 SR 数据元素 |
|
||
|
||
**包含的容器**
|
||
|
||
| 容器名称 | 数量 | 范围/依赖 |
|
||
|---|---|---|
|
||
| `J1939DcmSwcSRDataElementArrayElement` | 0..* | 单个数组元素值 |
|
||
|
||
#### 10.2.13 J1939DcmSwcSRDataElementArrayElement
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00063` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmSwcSRDataElementArrayElement` |
|
||
| 描述 | 表示数组数据元素中的单个元素 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmSwcSRDataElementArrayElementIndex` (`ECUC_J1939Dcm_00065`):数组中的索引。
|
||
|
||
`J1939DcmSwcSRDataElementArrayElementValue` (`ECUC_J1939Dcm_00064`):索引位置处的值。
|
||
|
||
#### 10.2.14 J1939DcmSwcSRDataElementPrimitive
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00061` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmSwcSRDataElementPrimitive` |
|
||
| 描述 | 表示单个 SR 数据元素 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmSwcSRDataElementPrimitiveValue` (`ECUC_J1939Dcm_00066`):原始数据元素值。
|
||
|
||
#### 10.2.15 J1939DcmModeRule
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00067` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmModeRule` |
|
||
| 描述 | 包含单个模式规则配置 |
|
||
|
||
**配置参数**
|
||
|
||
`J1939DcmLogicalOperator` (`ECUC_J1939Dcm_00068`):模式条件的逻辑组合方式。可选值:`J1939DCM_AND`、`J1939DCM_OR`。
|
||
|
||
`J1939DcmModeRuleNrcValue` (`ECUC_J1939Dcm_00069`):当模式规则评估为 false 时将发送的否定响应码 (NRC)。范围 1..255。
|
||
|
||
**引用**
|
||
|
||
| 引用 | 范围/依赖 |
|
||
|---|---|
|
||
| `J1939DcmArgumentRef` | 对 `J1939DcmModeCondition` 或嵌套 `J1939DcmModeRule` 的引用 |
|
||
|
||
#### 10.2.16 J1939DcmDspExternalSRDataElementClass
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00074` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmDspExternalSRDataElementClass` |
|
||
| 描述 | 此容器定义所提供端口中应读取的数据的来源或所请求端口中应写入的数据的目标 |
|
||
|
||
**选择容器**
|
||
|
||
| 容器名称 | 范围/依赖 |
|
||
|---|---|
|
||
| `J1939DcmSubElementInDataElementInstance` | 对复合数据元素实例的子元素的引用 |
|
||
| `J1939DcmDataElementInstance` | 对完整数据元素实例的引用 |
|
||
| `J1939DcmSubElementInImplDataElementInstance` | 对实现数据类型中子元素的引用 |
|
||
|
||
#### 10.2.17 J1939DcmDataElementInstance
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00075` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmDataElementInstance` |
|
||
| 描述 | 对一个数据元素实例的引用 |
|
||
|
||
**配置参数**
|
||
|
||
(详见原文 PDF 第 82 页)
|
||
|
||
#### 10.2.18 J1939DcmSubElementInDataElementInstance
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00076` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmSubElementInDataElementInstance` |
|
||
| 描述 | 对复合数据元素实例的子元素的引用 |
|
||
|
||
#### 10.2.19 J1939DcmSubElementInImplDataElementInstance
|
||
|
||
| SWS Item | `ECUC_J1939Dcm_00077` |
|
||
|---|---|
|
||
| 容器名称 | `J1939DcmSubElementInImplDataElementInstance` |
|
||
| 描述 | 对实现数据类型中子元素的引用 |
|
||
|
||
### 10.3 发布信息
|
||
|
||
J1939Dcm 模块不发布任何额外信息。
|
||
|
||
---
|
||
|
||
## 翻译说明
|
||
|
||
- 本文档为 AUTOSAR Classic Platform 4.4.0 中 SWS_SAEJ1939DiagnosticCommunicationManager(文档 ID 610)的中文翻译。
|
||
- 所有模块缩写(J1939Dcm、DEM、Det、PduR、J1939Rm、BswM)、API 名称(`J1939Dcm_Init`、`Dem_J1939DcmClearDTC` 等)、类型定义(`J1939Dcm_StateType`)、配置参数(`J1939DcmDevErrorDetect`)、需求 ID(`SWS_J1939Dcm_xxxxx`、`ECUC_J1939Dcm_xxxxx`、`SRS_Diag_xxxxx`)、DTC 标识、PGN 标识(如 `FECA`、`0xFF`)保持英文不变。
|
||
- 完整 DMx 枚举值列表(DM01-DM57)见原文 PDF 第 71-72 页,本翻译仅列出关键值。
|
||
- 完整 UDS/DEM 详细描述、状态机转换细节见原文 PDF。
|
||
- 章节末尾已使用 `<!-- 完整内容见原文 PDF 第 X-Y 页 -->` 标记摘要位置。
|