在AutoSar中,要完成一个诊断模块需要的依赖为:
- 1.基础的应用管理:包括初始化以及进程状态管理
2.中间层通讯:ara::com 需要应用程序提供故障记忆、寿命数据、例行控制等所需信息,通常这些是由模块Socal、SomeIpBinding和IpcBinding组成
3.ara::per : 用来存储数据保存,比如开机的参数、永久存储的数据等
4.ara::em : 进程管理模块的管理
5.ara::log : 日志管理
6.Libjason: 解析jason的文件格式
7.Libvector : vector容器用来存储和处理消息的内容等
8.Thread : 线程创建等
9.iostream: 输入输出模块
Diagnostic Manager 模块在Autosar的架构设计:
- UDS 服务 诊断服务提供
- ara::diag autosar诊断模块的库
- UDSTransportProtocolApi UDS传输协议的c++ 接口
- DoIp 实现数据的传输
架构图如下所示:
autosar软件设计:
解释下上边的架构:
Autosar应用程序的诊断模块分为许多的软件端。每个软件端代表具有自己诊断地址的独立诊断实体。
DM为每个安装的软件端提供一个专用的诊断服务器实例。所有诊断
服务器实例共享一个传输层实例(例如TCP/IP端口13400上的DoIP)。这个
DM根据接收到的目标向软件集群发送传入的UDS请求地址,并将请求转发给负责的诊断服务器实例。
介绍下DoIP
DoIP传输协议是通过以太网从诊断服务器传输诊断数据的协议客户端连接到ECU.
DoIP子组件:
- Socket Handling: UDP 或者 TCP socket构建通讯
- Message Validation: 消息验证,一系列的接口可以校验消息的确认
- Vehicle Identification: ECU端的识别和认证
- Node Information: 当前端点的状态
- Routing Activation: DoIP客户端管理
- Diagnostic Messages: 诊断消息的实体
诊断客户端和DoIP子组件之间的通信通过UDP和TCP套接字
AUTOSAR定义的接口API:
GetConversation(meta_info) 得到一个诊断会话
GetAllConversations() 得到所有的诊断会话
GetCurrentActiveConversations() 得到当前的会话
SetActivityNotifier(activity_status_notifier) 设置对话通知状态
GetActivityStatus() 得到当前的状态