UDS详解(十)——28、85、3E服务

本文详细介绍了UDS中的28服务用于通信控制,3E服务用于维持诊断会话,以及85服务用于控制DTC设置。28服务通过不同SF值实现接收与发送的开关,用于优化数据传输;3E服务保持ECU在特定会话状态;85服务则允许在必要时关闭DTC存储,避免不必要的记录。

1)28服务:Communication Control

该服务用于打开/关闭某些类别的报文的发送/接收。它通常在刷写软件或大量数据的时候使用,因为在刷软件或参数的时候并不需要ECU进行与通信相关的功能,将通信关闭之后可以把所有通信资源都留给软件或参数的下载,当下载过程完成之后再利用该服务将通信恢复。

请求格式:

SID+SF+communicationType+nodeIdentifierNumber

第一部分:SID=28

第二部分:SF,表明要对ECU的通信进行哪种控制,具体包括:

0x00:enableRxAndTx(激活发送和接收)

0x01:enableRxAndDisableTx(激活接收和关闭发送)

0x02:disableRxAndEnableTx(关闭接收和激活发送)

<
### UDS 28 服务详解 UDS(统一诊断服务)中的 28 服务,也称为 `CommunicationControl` 服务,主要用于控制车辆中不同通信通道的状态。该服务允许客户端(例如诊断工具)通过发送请求来启用或禁用特定的通信接口或网络通道,从而管理车辆内部的通信流量[^3]。 #### 功能介绍 1. **通信控制模式** 28 服务支持多种通信控制模式,通常有 12 种不同的模式(3x4 的组合),包括: - **通道控制**:指定需要控制的通信通道(例如 CAN、LIN 或以太网)。 - **通信状态**:定义通道的状态(启用或禁用)。 - **子功能**:提供额外的控制选项,例如仅启用特定的接收或发送功能。 2. **诊断请求流程** 在通信控制过程中,诊断工具(Tester)向 ECU 发送 28 服务的诊断请求。ECU 接收到请求后,会将该请求传递至 DCM(诊断通信管理)模块。DCM 模块负责校验输入参数,并将控制请求传递至 BswM(基础软件管理)模块。BswM 根据静态配置的规则执行通信控制操作。 3. **应用场景** - **启用/禁用特定通信通道**:例如,在诊断过程中,可能需要禁用某些非必要的通信通道以减少干扰。 - **节能管理**:通过关闭不必要的通信接口,降低车辆的功耗。 - **安全控制**:在某些安全相关的诊断操作中,确保只有必要的通信通道保持活跃。 #### 技术细节 1. **请求格式** 28 服务的请求报文通常包含以下字段: - **SID(服务标识符)**:0x28,表示这是 CommunicationControl 服务。 - **控制模式**:指定启用或禁用通信通道的模式。 - **通信通道**:指定需要控制的通信通道(例如 CAN 通道 1)。 - **子功能**:可选参数,用于进一步细化控制行为。 2. **响应格式** 28 服务的响应报文通常包含以下字段: - **SID(服务标识符)**:0x7F,表示这是否定响应(如果请求失败)。 - **NRC(否定响应代码)**:在请求失败时提供错误代码。 - **肯定响应**:如果请求成功,ECU 会返回请求对应的肯定响应。 3. **通信控制模块** - **DCM 模块**:负责接收诊断请求并校验输入参数。 - **BswM 模块**:根据静态配置的规则执行通信控制操作,例如启用或禁用特定的通信通道[^3]。 #### 示例代码 以下是一个简单的 Python 代码示例,模拟 28 服务通信控制请求和响应: ```python def send_communication_control_request(control_mode, channel, sub_function=None): """ 模拟发送 28 服务通信控制请求 :param control_mode: 控制模式 (0x00 - 禁用接收, 0x01 - 禁用发送, 0x02 - 启用接收, 0x03 - 启用发送) :param channel: 通信通道 (例如 0x01 表示 CAN 通道 1) :param sub_function: 子功能 (可选) """ request = [0x28, control_mode, channel] if sub_function is not None: request.append(sub_function) print("发送请求:", [hex(byte) for byte in request]) return handle_communication_control_request(request) def handle_communication_control_request(request): """ 模拟处理 28 服务通信控制请求 :param request: 请求报文 :return: 响应报文 """ sid = request[0] if sid != 0x28: return [0x7F, 0x28, 0x11] # 否定响应: 服务不支持 control_mode = request[1] channel = request[2] sub_function = request[3] if len(request) > 3 else None # 校验参数 if control_mode not in [0x00, 0x01, 0x02, 0x03]: return [0x7F, 0x28, 0x31] # 否定响应: 参数无效 # 执行通信控制 print(f"控制模式: {control_mode}, 通信通道: {channel}, 子功能: {sub_function}") return [0x68] # 肯定响应 # 示例: 启用 CAN 通道 1 的发送功能 response = send_communication_control_request(0x03, 0x01) print("响应:", [hex(byte) for byte in response]) ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

manjixingkong1234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值