AUTOSAR进阶图解==>AUTOSAR_SWS_DiagnosticLogAndTrace
AUTOSAR Diagnostic Log and Trace 模块说明
本文档是对AUTOSAR SWS Diagnostic Log and Trace的增强版本,加入了相关架构图解和详细的组件说明。
1. 简介和功能概述
Diagnostic Log and Trace (DLT) 是AUTOSAR基础软件模块之一,用于诊断、日志记录和跟踪。DLT模块位于PduR之上和RTE之下,接收来自DET、DEM、软件组件的日志信息或RTE的跟踪信息。
DLT模块通过通信总线传输这些数据,使这些信息在ECU外部可见。此外,NvM模块可以选择性地用于持久存储DLT模块的更新过滤器设置,从而使ECU能够以所需级别传输日志/跟踪信息,而无需来自通信总线(通过记录工具)的显式设置请求。
1.1 DLT架构图详细说明
上图展示了DLT模块在AUTOSAR架构中的位置和与其他模块的关系。DLT模块作为服务层的一部分,与多个模块进行交互:
-
应用层交互
- 软件组件(SWC)通过RTE向DLT模块发送日志和跟踪消息
- RTE/VFB负责将这些消息转发给DLT模块处理
-
服务层交互
- DLT与DET(Default Error Tracer)交互,接收错误消息
- DLT与DEM(Diagnostic Event Manager)交互,接收诊断事件
- DLT与NvM(NVRAM Manager)交互,用于存储和加载配置信息
- DLT与GPT(General Purpose Timer)交互,用于获取时间戳
- DLT与StbM(Synchronized Time Base)交互,获取同步时间
-
通信层交互
- DLT通过PDU Router发送和接收消息
- 通过通信堆栈将消息传输到外部客户端(日志工具)
DLT模块提供了记录和跟踪功能,使开发人员能够监控ECU内部的运行状态,对问题进行诊断和调试。
2. DLT模块内部结构
DLT模块内部由多个子组件组成,它们协同工作以处理日志和跟踪消息。
2.1 DLT内部结构详细说明
DLT内部结构图展示了模块的核心组件及其交互方式:
-
DLT核心管理器
- 初始化管理:负责模块的初始化流程
- 消息处理器:处理接收到的日志和跟踪消息
- 配置管理:管理模块的配置参数和设置
-
日志和跟踪处理
- 日志消息处理器:处理来自软件组件和基础软件的日志消息
- 跟踪消息处理器:处理RTE/VFB的跟踪消息
- 消息过滤:根据配置的规则过滤消息
-
通信接口
- 接收处理:处理来自PDU Router的接收数据
- 发送处理:将日志/跟踪消息发送到PDU Router
- 消息缓冲区:临时存储待发送的消息
-
会话管理
- 应用程序ID管理:管理软件组件的应用ID
- 上下文ID管理:管理日志/跟踪消息的上下文ID
- 会话处理:处理多个会话实例
-
时间戳管理:负责为消息添加时间戳
-
存储管理:管理配置的持久化存储
DLT模块的内部组件通过明确定义的接口进行交互,确保消息处理的流畅性和可靠性。配置管理负责处理日志级别、跟踪状态等设置,而过滤机制确保只有符合条件的消息才会被处理和传输。
3. DLT消息结构
DLT消息有统一的结构,包含标准头部、可选的扩展头部和有效载荷。
3.1 DLT消息结构详细说明
DLT消息结构图展示了消息的组成和相关数据类型:
-
DLT消息数据类型
Dlt_MessageType
: 定义消息类型(日志、应用跟踪、网络跟踪、控制)Dlt_MessageLogLevelType
: 定义日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、VERBOSE)Dlt_MessageNetworkTraceInfoType
: 定义网络跟踪类型(IPC、CAN、FLEXRAY、MOST、ETHERNET、SOMEIP)Dlt_MessageIDType
: 消息唯一标识符
-
DLT消息信息结构
Dlt_MessageOptionsType
: 消息选项(如verbose模式、消息类型)Dlt_MessageLogInfoType
: 日志消息相关信息(参数计数、选项、日志级别、消息ID)Dlt_MessageTraceInfoType
: 跟踪消息相关信息(参数计数、选项、跟踪状态、网络跟踪类型)
-
DLT消息标识结构
Dlt_ApplicationIDType
: 应用ID,由四个8位ASCII字符组成Dlt_ContextIDType
: 上下文ID,由四个8位ASCII字符组成Dlt_SessionIDType
: 会话ID,用于区分同一软件组件的不同实例Dlt_ContextIdInfoType
: 上下文ID相关信息(上下文ID、日志级别、跟踪状态、描述)Dlt_ApplicationIdInfoType
: 应用ID相关信息(应用ID、上下文ID计数、上下文信息列表、描述)
-
DLT消息结构
Dlt_HeaderType
: 标准头部,包含头部类型、是否使用扩展头部、ECU ID、会话ID、时间戳等Dlt_ExtendedHeaderType
: 扩展头部,包含消息类型、verbose标志、应用ID、上下文IDDlt_MessagePayloadType
: 消息负载,包含实际的数据内容Dlt_MessageType
: 完整的DLT消息,包含标准头部、扩展头部和负载
DLT消息通过应用ID和上下文ID唯一标识其来源,允许针对特定消息源的过滤。消息级别定义了消息的严重程度,而消息类型区分了不同类型的信息(如日志、跟踪)。
4. DLT消息流程
DLT消息的处理涉及多个步骤和组件之间的交互。
4.1 DLT消息流程详细说明
DLT消息流程图展示了消息从软件组件到外部客户端的完整处理流程:
-
初始化阶段
- RTE调用
Dlt_Init()
初始化DLT模块 - DLT模块初始化过滤器和缓冲区
- 外部客户端(日志工具)可以发送控制消息获取日志信息
- DLT模块处理控制命令并返回响应
- RTE调用
-
日志消息流程
- 软件组件通过RTE发送日志消息
- RTE调用
Dlt_SendLogMessage()
传递消息到DLT模块 - DLT模块根据过滤规则检查消息
- 消息通过过滤后,DLT模块构建DLT消息并存储在缓冲区中
- 消息未通过过滤时,直接返回过滤状态
-
跟踪消息流程
- 软件组件通过RTE发送跟踪消息
- RTE调用
Dlt_SendTraceMessage()
传递消息到DLT模块 - DLT模块检查跟踪状态是否激活
- 跟踪激活时,DLT模块构建DLT消息并存储在缓冲区
- 跟踪未激活时,消息被过滤掉
-
消息传输流程
- PDU Router调用
Dlt_TriggerTransmit()
触发消息传输 - DLT模块从缓冲区获取待发送消息
- DLT模块将消息数据提供给PDU Router
- PDU Router通过通信栈发送数据到外部客户端
- PDU Router调用
-
控制命令处理
- 外部客户端发送控制命令(如设置日志级别)
- 命令通过通信栈和PDU Router转发到DLT模块
- DLT模块通过
Dlt_RxIndication()
接收并处理命令 - DLT模块更新相关设置(如过滤规则)
- DLT模块通知RTE相关变更,RTE再通知相关软件组件
通过这一流程,DLT模块实现了软件组件与外部诊断工具之间的有效通信,使开发人员能够监控、调试和分析ECU内部的运行状态。
5. DLT配置结构
DLT模块的配置决定了其行为和功能,采用容器和参数的层次结构。
5.1 DLT配置结构详细说明
DLT配置结构图展示了模块配置的层次结构和相关参数:
-
Dlt:顶级配置容器
DltConfigSet
:包含应用程序、上下文和日志通道配置DltGeneral
:全局设置
-
DltGeneral:全局DLT配置
DltGeneralDevErrorDetect
:是否使用默认错误跟踪器DltGeneralInjectionSupport
:是否启用注入功能DltGeneralRxDataPathControl
:是否启用接收数据路径控制DltGeneralRegisterContextNotification
:是否启用上下文注册通知DltGeneralHeaderType
:头部类型设置DltGeneralVersionInfoApi
:版本信息API支持DltGeneralBufferSize
:缓冲区大小DltGeneralMaxLogChannels
:最大日志通道数DltGeneralUseLocalTimestamps
:是否使用本地时间戳DltGeneralUseExtendedHeaderFeatures
:是否使用扩展头部特性
-
DltConfigSet:配置集合
DltLogChannel
:日志通道配置DltApplication
:应用程序配置DltSwc
:软件组件配置
-
DltLogChannel:日志通道配置
DltLogChannelName
:通道名称DltLogChannelId
:通道IDDltLogChannelThreshold
:通道阈值DltLogChannelEnabled
:通道状态
-
DltApplication:应用程序配置
DltApplicationId
:应用IDDltApplicationDescription
:应用描述DltContext
:上下文配置列表
-
DltContext:上下文配置
DltContextId
:上下文IDDltContextDescription
:上下文描述DltContextLogLevel
:上下文日志级别DltContextTraceStatus
:上下文跟踪状态
-
DltSwc:软件组件配置
DltSwcName
:组件名称DltSwcEcuInstance
:ECU实例DltSwcComMChannel
:通信通道DltSwcNotificationApi
:通知API支持DltSwcDefaultLogLevel
:默认日志级别DltSwcDefaultTraceStatus
:默认跟踪状态DltSwcProcessId
:进程IDDltContextMapping
:上下文映射
-
DltContextMapping:上下文映射配置
DltContextMappingAppId
:映射的应用IDDltContextMappingContextId
:映射的上下文ID
通过这些配置参数,可以精细控制DLT模块的行为,包括日志级别、跟踪状态、缓冲区大小、以及软件组件与日志/跟踪功能的关联。
6. DLT与其他模块的交互
DLT模块与多个AUTOSAR模块进行交互,实现其功能:
-
RTE/VFB:
- 用于与软件组件交互,接收日志和跟踪消息
- VFB跟踪当前仅支持非verbose模式
-
PDU Router:
- 用于在通信总线上传输DLT消息
- 处理接收到的控制消息
-
NvM:
- 可选使用,用于加载和存储修改的配置
- 如过滤器设置和日志通道分配
-
GPT:
- 用于获取时间戳
- 为日志和跟踪消息添加时间信息
-
StbM:
- 用于获取同步时间值(从全局时间基准导出的本地时间基准)
- 支持标准/扩展格式
-
DET:
- 可选交互,用于报告默认错误
- 将DET错误转发到通信总线
-
DEM:
- 通过CDD和/或软件组件与DEM交互
- 用于报告开发错误并在通信总线上传输DEM事件
- 注意:DEM和DLT之间没有标准化的交互
7. 术语和定义
DLT模块使用的关键术语:
- 日志和跟踪消息:包含描述软件中日志和跟踪事件的所有数据和选项,由头部和负载组成
- 应用ID (APID):标识应用程序/软件组件的四个8位ASCII字符
- 上下文ID (CTID):用于分组来自应用程序/软件组件的日志和跟踪消息的四个8位ASCII字符
- 会话ID:日志或跟踪会话的标识号
- 会话:日志或跟踪消息源的逻辑实体
- 日志消息:包含调试信息,如状态变化或值变化
- 跟踪消息:包含通过VFB传递的信息
- 消息ID:用于标识消息源和特征化消息负载的标识符
- 日志级别:定义日志消息严重性级别的分类
- 跟踪状态:提供跟踪消息是否应该发送的信息
- 日志通道:用于传输DLT消息的物理通信总线
- 外部客户端:用于控制、监控和存储ECU使用DLT模块提供的日志/跟踪消息的工具
8. 总结
AUTOSAR Diagnostic Log and Trace模块是一个强大的工具,用于监控、诊断和调试AUTOSAR系统。通过提供统一的接口和协议,它使开发人员能够获取关于软件组件和基础软件模块内部状态的详细信息。
DLT模块支持灵活的配置,允许根据需要过滤和格式化消息,并提供与外部诊断工具的标准化通信。其架构确保了消息处理的效率和可靠性,同时最小化对系统性能的影响。
传输DLT消息的物理通信总线
- 外部客户端:用于控制、监控和存储ECU使用DLT模块提供的日志/跟踪消息的工具
8. 总结
AUTOSAR Diagnostic Log and Trace模块是一个强大的工具,用于监控、诊断和调试AUTOSAR系统。通过提供统一的接口和协议,它使开发人员能够获取关于软件组件和基础软件模块内部状态的详细信息。
DLT模块支持灵活的配置,允许根据需要过滤和格式化消息,并提供与外部诊断工具的标准化通信。其架构确保了消息处理的效率和可靠性,同时最小化对系统性能的影响。
在开发和调试AUTOSAR系统时,DLT模块是不可或缺的组件,使系统行为的可见性和可调试性大大提高。