当前位置: 首页 > news >正文

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 标准,“事件响应”仅支持以下子服务(加粗的不支持):

0x00StopResponseOnEvent
0x01OnDTCStatusChange
0x02OnTimerInterrupt
0x03OnChangeOfDataIdentifier
0x04ReportActivatedEvents
0x05StartResponseOnEvent
0x06ClearResponseOnEvent
0x07OnComparisonOfValues

本教程将指导你配置支持上述每个子服务的“事件响应(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

  1. 首先,我们必须在 DcmDsdServices 表中配置该服务。进入“Dcm > DcmConfigSet > DcmDsd > DcmDsdServiceTable”,右键单击 DcmDsdServices。选择“创建 DcmDsdService”。以下截图突出显示了所需的配置。在大多数配置中,使用 RTA-BSW 3.1 时,以下配置通常都是相同的:

    image-20250819073758622

  2. 既然我们已经配置好了服务,就必须为“事件响应(ResponseOnEvent)”配置所需的每个子服务。展开“DcmDsdService”,右键单击“DcmDsdSubServices”。选择“创建DcmDsd子服务”。添加以下子服务,并输入以下子服务ID。

    image-20250819073810428

  3. 在分别配置OnDTCStatusChange和OnChangeOfDataIdentifier子服务时,ResponseOnEvent 服务依赖于 ReadDTCReadDataByIdentifier 服务。因此,我们还必须配置一个新的 DcmDsdServiceTable,稍后它将与我们的ResponseOnEvent协议相关联(后续配置)。

    转到 Dcm > DcmConfigSet > DcmDsd。右键单击 DcmDsdServiceTables,然后选择 “创建DcmDsdServiceTable”。为该表指定一个 “ShortName” 为 “DcmDsdServiceTable_ROE”。

    接下来,展开新的DcmDsdServiceTable,右键单击 DcmDsdServices 并选择 “创建DcmDsdService”。执行此操作两次,一次用于ReadDTC服务,另一次用于ReadDataByIdentifier服务。

    注意:根据项目要求,安全和会话引用可能会有所不同。

    image-20250819073818986

    接下来,完成这两项服务的服务配置:按标识符读取数据(ReadDataByIdentifier)

    image-20250819073827965

    ReadDTC:

    image-20250819073835429

    ReadDTC服务还需要子服务0xE (ReportLastConfirmedDTC)。添加一个DcmDsdSubService,并输入如下配置:

    image-20250819073843700

  4. 至此,我们的服务配置已完成。现在我们必须为“响应事件”(ResponseOnEvent)服务完成 DcmDslProtocol 的设置。

    导航至 Dcm > DcmConfigSet > DcmDsl > DcmDslProtocol > DcmDslProtocolRows。右键单击 DcmDslProtocolRows 并选择“创建 DcmDsl 协议行”(“Create DcmDslProtocolRow”)。在“简称”(ShortName)中输入“DcmDslProtocolRow_ROE”,并按照以下截图完成其余的配置。确保选择我们上面创建的 DcmDslProtocolSIDTable

    注意:根据您的需求,其中一些配置可能会有所不同。

    image-20250819073852032

  5. 接下来,我们需要配置 DslConnection。不过,由于我们选择使用 TYPE1 协议传输,因此只需要配置 DcmDslResponseOnEvent 容器,而无需配置实际的发送协议数据单元(TX PDU)引用。请参考以下截图来配置 DslConnection

    image-20250819073859315

  6. 接下来,我们必须将上述“事件响应连接ResponseOnEvent connection”与我们的“常规统一诊断服务(UDS)”连接相链接。 进入现有的“UDS 协议”,选择“DcmDslMainConnection”。点击“DcmDslROEConnectionRef”,并选择“DcmDslResponseOnEvent”容器。

    image-20250819073906602

  7. 现在,我们的服务和连接已全部完成。接下来我们必须配置的是我们的“事件响应”(ResponseOnEvent)服务应响应的具体事件。由于我们在子服务中配置了DTC和DID事件,因此我们还必须在“DcmDspRoe”容器中配置这些事件。 导航至“DcmConfigSet > DcmDsp > DcmDspRoe”,并按以下要求填写属性。同样,根据您的配置不同,这些属性可能会有所差异 。

    image-20250819073914886

    展开 DcmDspRoe,右键点击 DcmDspRoeEvents 并选择 “创建 DcmDspRoe 事件”。第一个事件将是一个诊断信息标识符(DID)事件。

    • ShortName: “YOUR_OWN_NAME”
    • DcmDspRoeEventId: 0
    • DcmDspRoeInitialEventStatus: DCM_ROE_CLEARED

    然后展开 DcmDspRoeEvent > DcmDspRoeEventProperties > DcmDspRoeOnChangeOfDataIdentifier。在 DcmDspRoeOnChangeOfDataIdentifier 中选择你的诊断信息标识符(DID)。

    image-20250819073923349

  8. Next we want to create our DTC event. Expand out DcmDspRoe, right-click on DcmDspRoeEvents 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”。只需输入简称来配置该容器即可。

    image-20250819073930889

  9. 现在我们已经定义了DID和DTC事件,我们必须通过设置允许的窗口时间来完成配置。窗口时间将根据需求而变化,但是对于本教程,我们将只添加单个窗口时间。导航到“DcmDspRoeEventWindowTimes”,右键单击“DcmDspRoeEventWindowsTime”,创建一个新的窗口时间。我们的配置是这样的:

    image-20250819073937578

Dem Configuration

  1. 我们现已完成针对“事件响应(ResponseOnEvent)”的诊断通信管理器(DCM)配置。由于我们已启用“事件响应(ResponseOnEvent)”的“诊断故障代码(DTC)状态变化时(OnChangeOfDTC)”服务,因此还必须告知诊断事件管理器将DTC状态变化事件转发给DCM。这可通过诊断事件管理器(DEM)模块配置来完成。导航至“Dem > DemGeneral > DemTriggerDcmReports”,并将配置值设置为“TRUE” 。

    image-20250819074005508

  2. 这样我们就完成了在DCM(诊断通信管理)和DEM(诊断事件管理)中的事件响应配置。接下来的步骤是生成基础软件(BSW),将新生成的软件组件描述(SWCD)包含到我们的运行时环境(RTE)项目中,然后生成RTE。本教程不会涵盖这一步骤。
    注意:为了触发数据标识符(DID)事件,用户必须将其软件组件(SWC)连接到生成的 Dcm_Cfg_SWCD.arxml 文件中配置的事件端口。在每次对该DID进行写更改时,用户必须针对该特定事件ID调用事件触发操作。这可以通过一个软件组件来完成。

RTA-BSW Code Modification

  1. 最后,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 信息安全加密栈集成方法

http://www.dtcms.com/a/338806.html

相关文章:

  • 【深度学习计算性能】06:多GPU的简洁实现
  • 守护通行安全,“AI+虚拟仿真”领航交通设施人才培育
  • ROS点云可视化工具——Foxglove工具使用
  • Spring Cloud 微服务架构:Eureka 与 ZooKeeper 服务发现原理与实战指南 NO.1
  • 前端如何处理首屏优化问题
  • 微信小程序实现蓝牙开启自动播放BGM
  • 八大排序简介
  • 【集合框架LinkedList底层添加元素机制】
  • el-table 动态列表渲染和动态表格背景设置
  • JavaWeb前端03(Vue用法及具体案例)
  • UniApp 微信小程序之间跳转指南
  • Ubuntu 18.04上安装GCC 9
  • 关于Linux内核中头文件问题相关总结
  • 《Dual Prompt Personalized Federated Learning in Foundation Models》——论文阅读
  • 【使用三化学习早期融合的非标记化架构】
  • ZooKeeper 一致性模型解析:线性一致性与顺序一致性的平衡
  • ReLens「Focus DSLR 大光圈虚化相机」v4.1.2 f 解锁付款版 —一款专业大光圈和单反级背景虚化编辑软件
  • 知微传感3D相机上位机DkamViewer使用:给相机升级固件
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码1
  • 【Ansible】Ansible架构及Ansible工作流程
  • 基于Java(SSM框架)+MySQL实现(Web)的超市管理系统
  • 私有化部署全攻略:开源模型本地化改造的性能与安全评测
  • 【大模型本地运行与部署框架】Ollama的使用记录
  • 选项式api和组合式api
  • 【冒泡排序】
  • Java 检查给定的四个点是否形成正方形(Check if given four points form a square)
  • Springboot 3 上传图片,并返回路径让前端显示图片
  • 《UE5_C++多人TPS完整教程》学习笔记43 ——《P44 奔跑混合空间(Running Blending Space)》
  • 监督分类——最小距离分类、最大似然分类、支持向量机
  • Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换