AutoSAR实战:DCM配置之Response On Event (0x86)事件响应配置指导
AutoSAR实战:DCM配置之Response On Event (0x86)事件响应配置指导
UDS 0x86 Response On Event (RoE) 服务在 ISO 14229-1 (UDS 协议) 中是一个比较特殊的诊断服务,它和常见的读/写/诊断会话控制类服务不同,它主要用于 事件驱动的响应机制。我来从功能、应用场景和在 AUTOSAR DCM 中的实现角度详细介绍:
ResponseOnEvent (0x86) 的核心作用是:
让诊断工具 (Tester) 不必频繁轮询 ECU,而是由 ECU 在某些特定事件发生时,主动通知 Tester。
也就是说,它为诊断提供了 订阅-通知 的模式。
RoE 典型的应用场景包括:
- 定期报告:例如 ECU 定时上报某个 DID 的值。
- 条件触发报告:当某个内部信号达到阈值时,ECU 主动上报。
- 错误触发报告:当 DEM 检测到某个 DTC 状态变化(比如由未测试 → 测试失败)时,ECU 上报给 Tester。
- 物理连接丢失/恢复的通知。
这样 Tester 不需要不停地发 0x22(ReadDataByIdentifier),而是通过 0x86 配置 ECU 上报策略。
在 AUTOSAR 架构下:
- DCM (Diagnostic Communication Manager) 实现了 0x86 服务的处理逻辑。
- DEM (Diagnostic Event Manager) 提供 DTC 状态变化的事件源,DCM 通过 DEM API 来获取事件触发条件。
- RTE / COM 可能提供 DID/信号的监控接口,用于数据变化触发。
- DCM 内部会维护一个 RoE 会话表,存储 Tester 配置的触发条件、事件源和通信参数。
一个关键点是:RoE 可能跨会话存在,例如 Tester 在默认会话配置了 RoE,上电后 ECU 仍可能保留配置,这由具体实现和标准定义决定。
👉 总结一下:
UDS 0x86 ResponseOnEvent 提供了一个 “事件驱动” 的诊断通知机制,常用于 DTC 状态变化上报、定时上报、数据变化触发等。它在 AUTOSAR 中由 DCM 统一管理,DEM/DCM/应用层配合触发。
“事件响应”服务能够在服务端中发生指定事件时自动执行诊断服务。客户端指定事件(包括可选的事件参数)以及事件发生时要执行的服务(包括服务参数)。
根据 AUTOSAR 4.2.2 标准,对于与故障诊断码(DTC)相关的事件,支持的响应服务是带有子服务 0xE(MostRecentConfirmedDTC)的 0x19(ReadDTC);对于DID事件,支持的响应服务是 0x22(ReadDataByIdentifier通过标识符读取数据)。
此外,根据 AUTOSAR 4.2.2 标准,“事件响应”仅支持以下子服务(加粗的不支持):
0x00 | StopResponseOnEvent |
0x01 | OnDTCStatusChange |
0x02 | OnTimerInterrupt |
0x03 | OnChangeOfDataIdentifier |
0x04 | ReportActivatedEvents |
0x05 | StartResponseOnEvent |
0x06 | ClearResponseOnEvent |
0x07 | OnComparisonOfValues |
本教程将指导你配置支持上述每个子服务的“事件响应(ResponseOnEvent)”。我们还将把“事件响应(ResponseOnEvent)”的协议传输类型配置为TYPE1。这意味着事件响应将与常规UDS协议共享相同的发送协议数据单元(TX PDU)。有关TYPE1和TYPE2协议传输类型之间的差异的更多信息,请参阅AUTOSAR DCM规范。
注意:目前,RTA-BSW 3.1在“事件响应(ResponseOnEvent)”配置方面似乎存在一个漏洞。下面将提供解决方法。
Assumptions
你必须安装以下ETAS软件:
- ISOLAR-AB 4.0.2
- RTA-BSW 3.1
- RTA-RTE 6.3.0
- RTA-OS 5.5.11
- RTA-OS (Port) x.x.x
- 你已经为基本服务配置了诊断通信管理(DCM),并且常规通信协议也已配置完成。
- 你熟悉统一诊断服务(UDS)中事件响应服务。
Dcm Configuration
-
首先,我们必须在 DcmDsdServices 表中配置该服务。进入“Dcm > DcmConfigSet > DcmDsd > DcmDsdServiceTable”,右键单击 DcmDsdServices。选择“创建 DcmDsdService”。以下截图突出显示了所需的配置。在大多数配置中,使用 RTA-BSW 3.1 时,以下配置通常都是相同的:
-
既然我们已经配置好了服务,就必须为“事件响应(ResponseOnEvent)”配置所需的每个子服务。展开“DcmDsdService”,右键单击“DcmDsdSubServices”。选择“创建DcmDsd子服务”。添加以下子服务,并输入以下子服务ID。
-
在分别配置OnDTCStatusChange和OnChangeOfDataIdentifier子服务时,ResponseOnEvent 服务依赖于 ReadDTC 和 ReadDataByIdentifier 服务。因此,我们还必须配置一个新的
DcmDsdServiceTable
,稍后它将与我们的ResponseOnEvent协议相关联(后续配置)。转到
Dcm > DcmConfigSet > DcmDsd
。右键单击DcmDsdServiceTables
,然后选择 “创建DcmDsdServiceTable”。为该表指定一个 “ShortName” 为 “DcmDsdServiceTable_ROE”。接下来,展开新的DcmDsdServiceTable,右键单击
DcmDsdServices
并选择 “创建DcmDsdService”。执行此操作两次,一次用于ReadDTC服务,另一次用于ReadDataByIdentifier服务。注意:根据项目要求,安全和会话引用可能会有所不同。
接下来,完成这两项服务的服务配置:按标识符读取数据(ReadDataByIdentifier):
ReadDTC:
ReadDTC服务还需要子服务0xE (ReportLastConfirmedDTC)。添加一个DcmDsdSubService,并输入如下配置:
-
至此,我们的服务配置已完成。现在我们必须为“响应事件”(ResponseOnEvent)服务完成
DcmDslProtocol
的设置。导航至
Dcm > DcmConfigSet > DcmDsl > DcmDslProtocol > DcmDslProtocolRows
。右键单击DcmDslProtocolRows
并选择“创建 DcmDsl 协议行”(“Create DcmDslProtocolRow”)。在“简称”(ShortName)中输入“DcmDslProtocolRow_ROE”,并按照以下截图完成其余的配置。确保选择我们上面创建的DcmDslProtocolSIDTable
。注意:根据您的需求,其中一些配置可能会有所不同。
-
接下来,我们需要配置
DslConnection
。不过,由于我们选择使用 TYPE1 协议传输,因此只需要配置DcmDslResponseOnEvent
容器,而无需配置实际的发送协议数据单元(TX PDU)引用。请参考以下截图来配置DslConnection
。 -
接下来,我们必须将上述“事件响应连接ResponseOnEvent connection”与我们的“常规统一诊断服务(UDS)”连接相链接。 进入现有的“UDS 协议”,选择“DcmDslMainConnection”。点击“DcmDslROEConnectionRef”,并选择“DcmDslResponseOnEvent”容器。
-
现在,我们的服务和连接已全部完成。接下来我们必须配置的是我们的“事件响应”(ResponseOnEvent)服务应响应的具体事件。由于我们在子服务中配置了DTC和DID事件,因此我们还必须在“DcmDspRoe”容器中配置这些事件。 导航至“DcmConfigSet > DcmDsp > DcmDspRoe”,并按以下要求填写属性。同样,根据您的配置不同,这些属性可能会有所差异 。
展开
DcmDspRoe
,右键点击DcmDspRoeEvents
并选择 “创建 DcmDspRoe 事件”。第一个事件将是一个诊断信息标识符(DID)事件。ShortName
: “YOUR_OWN_NAME”DcmDspRoeEventId
: 0DcmDspRoeInitialEventStatus
: DCM_ROE_CLEARED
然后展开
DcmDspRoeEvent > DcmDspRoeEventProperties > DcmDspRoeOnChangeOfDataIdentifier
。在DcmDspRoeOnChangeOfDataIdentifier
中选择你的诊断信息标识符(DID)。 -
Next we want to create our DTC event. Expand out
DcmDspRoe
, right-click onDcmDspRoeEvents
and select"Create DcmDspRoeEvent"
. The second event will be a DTC event.ShortName
: “YOUR_OWN_NAME”ShortName
: “YOUR_OWN_NAME”DcmDspRoeInitialEventStatus
: DCM_ROE_CLEARED
then expand out
DcmDspRoeEvent > DcmDspRoeEventProperties > DcmDspRoeOnDTCStatusChange
. Only the container needs to be configured by entering a ShortName.接下来我们要创建我们的诊断故障码(DTC)事件。展开 “DcmDspRoe”,右键单击 “DcmDspRoeEvents” 并选择 “创建 DcmDspRoe 事件”。第二个事件将是一个 DTC 事件。
ShortName
: “YOUR_OWN_NAME”ShortName
: “YOUR_OWN_NAME”DcmDspRoeInitialEventStatus
: DCM_ROE_CLEARED
然后展开 “DcmDspRoeEvent > DcmDspRoeEventProperties > DcmDspRoeOnDTCStatusChange”。只需输入简称来配置该容器即可。
-
现在我们已经定义了DID和DTC事件,我们必须通过设置允许的窗口时间来完成配置。窗口时间将根据需求而变化,但是对于本教程,我们将只添加单个窗口时间。导航到“DcmDspRoeEventWindowTimes”,右键单击“DcmDspRoeEventWindowsTime”,创建一个新的窗口时间。我们的配置是这样的:
Dem Configuration
-
我们现已完成针对“事件响应(ResponseOnEvent)”的诊断通信管理器(DCM)配置。由于我们已启用“事件响应(ResponseOnEvent)”的“诊断故障代码(DTC)状态变化时(OnChangeOfDTC)”服务,因此还必须告知诊断事件管理器将DTC状态变化事件转发给DCM。这可通过诊断事件管理器(DEM)模块配置来完成。导航至“Dem > DemGeneral > DemTriggerDcmReports”,并将配置值设置为“TRUE” 。
-
这样我们就完成了在DCM(诊断通信管理)和DEM(诊断事件管理)中的事件响应配置。接下来的步骤是生成基础软件(BSW),将新生成的软件组件描述(SWCD)包含到我们的运行时环境(RTE)项目中,然后生成RTE。本教程不会涵盖这一步骤。
注意:为了触发数据标识符(DID)事件,用户必须将其软件组件(SWC)连接到生成的Dcm_Cfg_SWCD.arxml
文件中配置的事件端口。在每次对该DID进行写更改时,用户必须针对该特定事件ID调用事件触发操作。这可以通过一个软件组件来完成。
RTA-BSW Code Modification
-
最后,RTA-BSW 3.1生成器似乎存在一个小错误,该错误导致某些头文件未被包含在生成的
Dcm_Lcfg_DspUds.c
文件中。BSW生成完成后,进入/BSW/Gen/Dcm/Dcm_Lcfg_DspUds.c
目录,并在该文件中添加以下包含语句:
/*** Dcm_Lcfg_DspUds.c ***/#include "SchM_Dcm.h" #include "DcmCore_DslDsd_Prot.h"
这提供了配置“事件响应”(ResponseOnEvent)服务所需的最基本步骤。当然,“事件响应”服务本身会根据项目需求而有所不同。这突出展示了配置该服务的一种方式。除了必须从软件组件(SWC)调用的“变更触发”(TriggerOnChange)事件外,在“事件响应”方面,软件组件(SWC)与数据通信管理器(DCM)服务之间没有其他必要的交互。数据通信管理器(DCM)会提供一些模式通知,但这些对于软件组件(SWC)而言只是可选配置。
结论
本公告所提供的样本和建议旨在提供信息和指导,不应被认为具有普遍适用性。解读内容并将其应用于具体用例需要用户自己决定。
全文引自:https://rtahotline.etas.com/confluence/pages/viewpage.action?pageId=53903541
侵权必删
往期文章:
汽车基础软件AutoSAR自学攻略(一)-低成本AutoSAR环境搭建
汽车基础软件AutoSAR自学攻略(二)-AutoSAR CP分层架构(1)
汽车基础软件AutoSAR自学攻略(三)-AutoSAR CP分层架构(2)
汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)
系统学习AutoSAR ETAS RTA-OS嵌入式操作系统(一)
系统学习AutoSAR ETAS RTA-OS嵌入式操作系统(二)开发过程 Development Process
AutoSAR 内存管理 NVM 规范 (1)(R24-11翻译)
AutoSAR 内存管理 NVM 规范 (2)(R24-11翻译)
AutoSAR实战:如何在BSW配置看门狗Wdg Stack的监控功能 (万字长文,50张图片)
AutoSAR实战:MemStack之NVM和FEE原理介绍
AutoSAR实战:EcuM 启动时序实战
AutoSAR实战:一步步从零开始配置XCP
AutoSAR实战:Crypto Stack 信息安全加密栈集成方法