AUTOSAR DLT (Diagnostic Log and Trace)

简介

AUTOSAR Dlt (Diagnostic Log and Trace) 模块主要用来接收来自DET、DEM、SW-Cs的日志信息(log information)或者来自RTE的跟踪信息(trace information)。Dlt模块通过通信总线传输这些数据,使这些日志和trace信息在ECU外部可见。

为此,Dlt模块会定义了用于在如何在通信总线上发送和接收这些专用的日志/跟踪信息的API。

此外也可以通过NvM模块来永久保存Dlt模块的更新过滤器设置。这使得ECU能够以期望的级别传输日志/跟踪信息,而不需要在每次ECU启动时从通信总线(通过日志工具)发出明确的设置请求。

Dlt模块位于PduR模块和RTE模块之间。

AUTOSAR DLT (Diagnostic Log and Trace)_第1张图片

请注意:

Dlt消息格式、可用的Dlt命令和Dlt协议(用于与外部日志和跟踪工具通信)会定义在另一个单独的文档中 [1]。更多信息请参考 Dlt协议规范

术语和定义

术语 描述
Log and trace message (日志和跟踪消息) 日志和跟踪消息包含描述软件中日志和跟踪事件的所有数据和选项。日志和跟踪消息由头部(header)和有效报文内容(payload)组成。
Dlt User (Dlt用户) 一个Dlt用户表示生成的Dlt消息的来源。可能的用户是SW-Cs、RTE(用于VFB跟踪)、DEM或DET。
Log Message (日志信息) 日志信息(Log Message)包含调试信息,如状态变化或值变化。
Trace Message(跟踪消息) 跟踪消息包含通过VFB传递的信息。
ECU ID ECU id是ECU的名称,由4个8位ASCII字符(如ab0或COMB)组成。
Session (会话) 会话是日志或跟踪消息源的逻辑实体。如果多次实例化一个应用程序/SW-C,那么每个实例将获得一个相对于应用程序/上下文ID的全局惟一的会话ID。如果一个应用程序/ SWC有几个向Dlt开放的端口,那么它可能有几个同时的日志或跟踪会话。由于AUTOSAR中没有特别为SW-C指定会话ID,所以可以通过端口定义参数值实现。
Session ID 会话ID是日志或跟踪会话的标识号。
应用程序ID是Application/SW-C的缩写。它标识日志和跟踪消息的来源。Application ID由4个8位ASCII字符组成。
Context ID (上下文ID) Context ID是用户定义的标识符,用于Application/SW-C生成的日志和跟踪消息进行分组。Context ID由4个8位ASCII字符组成。
必须符合以下的规则:1. 每个Application ID可以拥有多个Context ID。2. Context ID 按照Application Id分组。3. Context ID在Application ID中应该是唯一的。4. 日志和跟踪消息的源通过元信息的“ApplicationID”和“ContextId”来标识。
Message ID (消息ID) 消息ID是描述信息特征的标识符,通过消息本身进行传输。消息ID用来唯一地标识一种日志或跟踪消息。它可用于标识消息的源(在源代码中),并可用于描述消息的有效负载。Message ID在开发或配置时是静态固定的。
Log level (日志级别) 日志级别定义了日志消息的级别分类。
Trace status (跟踪状态) 如果应该发送跟踪消息,则跟踪状态提供信息。
Log Channel 一种物理通信总线,用于传输Dlt消息。
External client (外部客户端) 外部客户端是使用Dlt模块控制、监视和存储ecu提供的日志/跟踪消息的工具。

使用场景

下面内容会对ECU如何使用Dlt的场景进行分类的描述

虽然Dlt协议与总线无关,但建议使用通信具有更高带宽的总线,如以太网。尽管如此,Dlt的协议并不局限于以太网的使用。

使用Dlt进行常规日志记录(General logging with Dlt)

AUTOSAR DLT (Diagnostic Log and Trace)_第2张图片

  1. 应用程序 / SW-C生成一条日志消息。
  2. Log Message发送给Dlt模块。
  3. Dlt模块将日志消息发送到通信总线
  4. 外部Dlt客户端记录日志消息

VFB的跟踪(Tracing of VFB)

AUTOSAR DLT (Diagnostic Log and Trace)_第3张图片

  1. RTE调用Dlt提供的宏,Dlt调用Dlt API接口生成跟踪的消息。
  2. Dlt模块将生成的跟踪消息发送到实现了Dlt通信模块接口。
  3. Dlt通信模块将跟踪消息转发到网络。
  4. 外部客户端接收并存储跟踪消息。

运行时配置Dlt(Runtime configuration of Dlt)

AUTOSAR DLT (Diagnostic Log and Trace)_第4张图片

  1. 外部Dlt客户端设置日志和跟踪级别,并将更改发送给Dlt模块。
  2. Dlt模块相应地调整其过滤器设置的配置。
  3. Dlt模块通知应用程序新的日志级别。

非冗长模式(Non-verbose mode)

可以通过不发送通信总线上的变量的元数据减少总线上的流量。此时可以使用外部FIBEX文件保存如何解析有效负载(payload)内容的信息。外部Dlt客户端将这些FIBEX文件中定义的元数据与接收到的数据合并并保存。

AUTOSAR DLT (Diagnostic Log and Trace)_第5张图片

  1. 调用Dlt模块以非冗长模式进行传输Dlt消息。
  2. Dlt模块过滤并生成Dlt消息。
  3. Dlt模块将Dlt消息发送到通信总线。
  4. 外部Dlt客户端从外部FIBEX文件中获取元信息。
  5. 合并后的信息由外部Dlt客户端存储。

协议规范(Protocol specification)

消息格式

对于调试数据和控制信息,只需使用相同的Dlt消息格式。它由一个标准报头、一个可选的扩展报头和一个有效复杂段组成。

AUTOSAR DLT (Diagnostic Log and Trace)_第6张图片

标准报头(Standard Header)

AUTOSAR DLT (Diagnostic Log and Trace)_第7张图片

Dlt标准报头应由以下字段组成,顺序如下:

位置 描述
字节0 HTYP(报头类型)
字节1 MCNT(消息计数器)
字节2-3 LEN(长度)
字节4-7 ECU (ECU ID)
字节8-11 SEID(会话ID)
字节12-15 TMSP(时间戳)

扩展报头(Extended Header)

AUTOSAR DLT (Diagnostic Log and Trace)_第8张图片

如果标准报头的UEH位设置为' 1 ',则传输在Dlt扩展报头格式中定义的附加信息。Dlt扩展报头直接附加在Dlt标准报头字段之后。

Dlt扩展报头格式应由以下字段按以下顺序组成:

位置 描述
字节0 MSIN(消息信息)
字节1 NOAR(参数的数量)
字节2-5 APID(应用程序ID)
字节6-9 CTID(上下文ID)

正文格式(Body/Payload format)

Dlt正文数据紧跟着Dlt头或者Dlt扩展头(如果使用的话)。Dlt正文数据包含被Log或Trace的参数,或者包含控制信息。

依赖的模块

RTE

RTE(包括VFB和BSW调度器),主要用于与SW-Cs交互,生成日志和跟踪消息,并循环调用Dlt模块的Tx函数。

PDU Router

为了在通信总线上传输Dlt消息,Dlt模块会与PDU Router进行交互。

NvM

为了加载和存储相关的配置,如过滤器设置和日志通道分配。NvM模块并不是必须,可以选用。

GPT

为了获得一个时间戳,GPT模块可以用于此目的。

StbM

为了以标准/扩展格式获取同步时间值。本地时间基数(Local Time Base)派生于全局时间基数(Global Time Base),StbM模块可用于此目的。

DET

为了能够报告默认错误并将DET错误转发给通信总线,Dlt模块必须与DET模块进行交互。然而,与DET的交互并不是必须,可以选用。

DEM

为了能够报告开发错误并在通信总线上传输DEM事件,Dlt模块必须与DEM模块进行交互。然而,与DEM的交互并不是必须,可以选用。

文件结构

AUTOSAR DLT (Diagnostic Log and Trace)_第9张图片

功能定义

下面的内容会描述Dlt模块在与SW-Cs、PduR和外部日志设备(External client)交互时,需要的AUTOSAR特定数据和控制路径。

Dlt命令 (Dlt commands)

Dlt协议指定由唯一的Service id标识的各种Dlt命令。Dlt命令用于在运行时修改Dlt模块的行为,例如,获取关于当前Dlt配置的信息或更改过滤器设置。(PRS_Dlt_00635)

Service ID Dlt Command Description
0x01 SetLogLevel 设置日志级别
0x02 SetTraceStatus 启用/禁用跟踪消息
0x03 GetLogInfo 返回已注册SW-C的LogLevel
0x04 GetDefaultLogLevel 返回通配符的日志级别
0x05 StoreConfiguration 存储当前配置非易失性
0x06 ResetToFactoryDefault 将配置设置回默认值
0x0A SetMessageFiltering 启用/禁用Dlt过滤器
0x11 SetDefaultLogLevel 设置通配符的日志级别
0x12 SetDefaultTraceStatus 启用/禁用通配符的跟踪消息
0x15 GetDefaultTraceStatus 获取通配符的当前TraceLevel
0x17 GetLogChannelNames 返回LogChannel的名称
0x1F GetTraceStatus 获取当前跟踪状态(开启/关闭)
0x20 SetLogChannelAssignment 添加/删除给定的LogChannel作为输出路径
0x21 SetLogChannelThreshold 为给定的LogChannel设置过滤阈值
0x22 GetLogChannelThreshold 获取给定LogChannel的筛选器阈值
0x23 BufferOverflowNotification DLT模块内缓冲区溢出的指示

Dlt与软件组件的交互

Dlt模块为SW-C提供了可用于发送日志和跟踪消息的接口。

可选地,SW-C可以为日志级别阈值(log level threshold)和跟踪状态变更通知提供一个Port口。这些端口由Dlt模块提供,分别为了不同ApplicationId / ContextId的每个元组而定义。这些通知可以用来避免影响SW-C已经生成的日志和跟踪消息,而不是让它们稍后被Dlt模块过滤掉。

由于Dlt模块支持SW-C的多个实例,它们使用相同的ApplicationId/ContextId元组,一个额外的SessionId参数允许区分来自相同SW-C的不同实例的日志/跟踪消息。

分离那些互相SW-Cs技术,避免SW-Cs必须使用独特的SessionId调用SendLogMessage / SendTraceMessage(细节,见下一章节),Dlt模块提供了一个专用P-Port每SW-C配置(参见配置参数DltSwc) SessionId作为port-defined-argument管理。

如果已配置的SW-C被标记为对日志级别的通知和跟踪状态更改感兴趣,Dlt模块还提供相应的R-Port来通知相应的SW-C。

由SW-C负责ApplicationId/ContextId元组的信息,在运行时分别通过调用RegisterContext和UnregisterContext为SW-C配置和/或更新。

AUTOSAR DLT (Diagnostic Log and Trace)_第10张图片

Dlt模块会为每个配置的SW-C提供一个接口DltService类型的P-Port。P-Port接口包含SessionId作为端口定义的参数。Dlt模块也会为每个配置的SW-C提供一个R-Port类型的接口LogTraceSessionControl(见第8章),其中配置参数DltSwcSupportLogLevelChangeNotification会被设置为TRUE。SW-C需要负责的ApplicationId / ContextId元组,因此在日志级别或跟踪状态更改时需要通知该元组,可以从配置参数DltSwcContext取得。

参考

  1. ^DLT Protocol Specification (PRS_DLTProtocol.pdf) https://www.autosar.org/fileadmin/user_upload/standards/foundation/1-0/AUTOSAR_PRS_DiagnosticLogAndTraceProtocol.pdf

你可能感兴趣的:(AP,AUTOSAR,汽车,autosar,网络协议)