#百人创作先锋团#AUTOSAR DLT 模块介绍

发布于 2023-1-30 16:42
浏览
0收藏

一、简介

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 模块介绍-汽车开发者社区

请注意:

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 模块介绍-汽车开发者社区

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

VFB的跟踪(Tracing of VFB)

#百人创作先锋团#AUTOSAR DLT 模块介绍-汽车开发者社区

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

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

#百人创作先锋团#AUTOSAR DLT 模块介绍-汽车开发者社区

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

非冗长模式(Non-verbose mode)

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

#百人创作先锋团#AUTOSAR DLT 模块介绍-汽车开发者社区

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

三、协议规范(Protocol specification)

消息格式

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

#百人创作先锋团#AUTOSAR DLT 模块介绍-汽车开发者社区

标准报头(Standard Header)

#百人创作先锋团#AUTOSAR DLT 模块介绍-汽车开发者社区


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


位置

描述

字节0

HTYP(报头类型)

字节1

MCNT(消息计数器)

字节2-3

LEN(长度)

字节4-7

ECU (ECU ID)

字节8-11

SEID(会话ID)

字节12-15

TMSP(时间戳)

扩展报头(Extended Header)

#百人创作先锋团#AUTOSAR DLT 模块介绍-汽车开发者社区


如果标准报头的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 模块介绍-汽车开发者社区

六、功能定义

下面的内容会描述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 模块介绍-汽车开发者社区

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


文章转载自公众号:汽车电子与软件

分类
标签
收藏
回复
举报
回复
相关推荐