[AUTOSAR][诊断管理][$11] 复位服务

news2024/11/15 21:48:53

文章目录

  • 一、简介
    • (1) 应用场景
    • (2) 请求格式
    • (3) 重启类型
  • 二、示例代码
    • (1) 11_ecu_reset.c

在这里插入图片描述

一、简介

ECU复位服务就是可以此诊断指令来命令ECU执行自复位,复位有多种形式,依据子功能参数来区分(即客户端使用ECU复位服务来请求服务端重置,重置成功后,将直接进入默认会话)。

通常来说,ECU在收到一条诊断指令后,要先进行相应的处理,执行某些诊断操作,完毕后再发送肯定响应。但是ECU复位服务是个特例,因为它的诊断操作是复位,这时候这个ECU就会重新开始运行,此时ECU也不会记得你前面发过诊断指令,所以复位后没办法ECU就没办法再去发送诊断响应,所以要先发送肯定响应,再执行复位。

注意:从发送完肯定响应到执行复位的这段时间内,ECU是否还可以响应其它诊断请求,标准中没有规定。建议此期间ECU不接受任何请求消息,也不发送任何响应消息。

(1) 应用场景

一般而言,对于11诊断服务,主要应用场景为以下场合:

  1. ECU被刷写新的软件后,此时需通过11诊断服务重启该ECU使其回复到初始状态,保证一个十分干净的运行环境;
  2. 在产线下线标定的过程中,对于KL30供电的ECU存在一些仅在下电存储的数据,此时需要通过11诊断服务使ECU走下电流程进而完成相应数据的保存;
  3. 为满足特定功能的需要,输入相关标定参数给到ECU后,只有通过发送诊断服务11才能使得标定参数生效的场景;
  4. 对于KL30供电的ECU节点,可以使用诊断服务11使ECU快速进入休眠的场景;
    上述这些应用场景较为常见,除此以外,当然还有很多面向ECU内部测试的应用场合,这里就不一一列举。

注意事项:

根据ISO14229-1标准所述,当Client向Server发送11诊断服务请求时,Server可在重置行为完成之后或者开始重启行为之前给到Client

诊断响应,但14229-1强烈推荐的一种做法是:”当Server接受到来自Client的11诊断服务请求时,Server应当先给出诊断响应然后开始重启行为“。

至于为什么如此,我想到一个场景:如果功能寻址请求11诊断服务时(未抑制正响应),在复位未完成之前,一般都会先回复NRC78让Client进行等待,那么对于Client需要根据不同的ECU节点的回复做超时监控,这无疑增加了Client负担,对于Client而言,最为简单的方法就发送完请求,各ECU节点回复正响应,然后各自完成复位操作即可。

(2) 请求格式

在这里插入图片描述
在这里插入图片描述

(3) 重启类型

由上图2所提到复位类型,复位类型作为subfunction参数来传递给到Server发生相应的重启行为,具体由以下几种类型:

  • HardReset:硬复位;
  • keyOffOnReset:点火开关复位;
  • SoftReset: 软复位;
  • enableRapidPowerShutDown:使能快速休眠流程;
  • disableRapidPowerShutDown:抑制快速休眠流程;
  • vehicleManufacturerSpecific:供整车制造商使用的自定义复位类型;
  • systemSupplierSpecific:供系统供应商使用的自定义复位类型;

在这里插入图片描述

二、示例代码

(1) 11_ecu_reset.c

/********************************************************************************
* @file    11_ecu_reset.c
* @author  jianqiang.xue
* @version V1.0.0
* @date    2023-05-30
* @brief   ECU 复位功能
********************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include "modules.h"
#include "os_api.h"
#include "edebug.h"
#include "kv_sys.h"
#include "ecu_ble_uart.h"

/* Private includes ----------------------------------------------------------*/
#include "std_math.h"
#include "app_can.h"
#include "can_nm.h"
#include "app_nm.h"
#include "diag_main.h"
/* Private define ------------------------------------------------------------*/
#define UDS_ID    0x11

/* Private typedef -----------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static uint8_t ecu_reset_req = 0;
/***************软定时器创建***************/
/* Private func --------------------------------------------------------------*/
void post_func(uint8_t val) {
    (void)val;
    if (ecu_reset_req) {
        diag_main_send_signal(SIGNAL_DIAG_RESET);
    }
}

void uds11_main(nwl_msg_t* p) {
    uint8_t data[10];
    ecu_reset_req = 0;
    if (p->len != 2) {
        send_nrc_data(UDS_ID, NRC_INCORRECT_MESSAGE_LENTH);
        goto end;
    }
    switch (p->data[1] & 0x7F) { // 子功能,bit7为应答位。  =1则不允许应答
        case 0x01: // 硬件复位
            if ((g_car_ste.IPB.bit.VehicleSpeedVld == 1) && (get_car_speed() > 3)) {
                send_nrc_data(UDS_ID, NRC_CONDITION_NOT_CORRECT);
                goto end;
            }
            if (p->data[1] & 0x80) {
                // 应用无需应答
            } else {
                // 回复正响应码  单帧格式: len, 服务ID|0x40, 子功能ID,
                data[0] = 2;  // 数据总长度=数据长度+服务号
                data[1] = UDS_ID | 0x40;   // 服务号,回复上位机需要 |0x40
                data[2] = p->data[1];
                memset(&data[3], 0xAA, 5);
                app_can_enqueue_msg(CAN_MSG_EVENT_SEND, NWL_RES_ADDR, data, 8);
                g_p2_service_time_remaining = 0; // 如果发送诊断报文,则清除倒计时。P2_SERVER_MAX
                os_delay(1);
            }
            ecu_reset_req = 1;
            break;

        default:
            send_nrc_data(UDS_ID, NRC_SUBFUNCTION_NOT_SUPPORTED);
            break;
    }
end:
    return;
}

#if AUTOSAR_DIAG_SWITCH && USE_UDS_11
DIAG_SERVICE_REG(UDS_ID, DIAG_NO_SECURITY_LEVEL, (DEFAULT_SESSION|PROGRAMMING_SESSION|EXTENDED_SESSION),
                 (DIAG_PHYS_REQ|DIAG_FUNC_REQ), NULL, post_func, uds11_main);
#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Javascript】构造函数之new的作用

目录 new的作用 把对象返回了回来 无new 有new 把构造函数的this指向了要返回的对象 无new​编辑 有new new的执行流程 new的作用 创建了新空对象将构造函数的作用域赋值给新对象(this指向新对象)执行构造函数代码 &#xff08;为这个新对象添加属性&#xff09;返回新对…

网络协议--Ping程序

7.1 引言 “ping”这个名字源于声纳定位操作。Ping程序由Mike Muuss编写&#xff0c;目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机&#xff0c;并等待返回ICMP回显应答&#xff08;图6-3列出了所有的ICMP报文类型&#xff09;。 一般来说&#x…

HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器

&#x1f9ee;前后端分离计算器 &#x1f4da;git仓库链接和代码规范链接&#x1f4bc;PSP表格&#x1f387;成品展示&#x1f3c6;&#x1f3c6;科学计算器&#xff1a;1. 默认界面与页面切换2. 四则运算、取余、括号3. 清零Clear 回退Back4. 错误提示 Error5. 读取历史记录Hi…

​CUDA学习笔记(三)CUDA简介

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/&#xff0c;仅用于学习。 前言 线程的组织形式对程序的性能影响是至关重要的&#xff0c;本篇博文主要以下面一种情况来介绍线程组织形式&#xff1a; 2D grid 2D block 线程索引 矩阵在memory中是row-major线性…

Cannot load from short array because “sun.awt.FontConfiguration.head“ is null

错误描述 在使用Easyexcel时发生了报错&#xff0c;请求返回空白 但是只在Linux上出现了该报错&#xff0c;在本地windows环境没有出现 JDK都使用的是17版本 错误原因 由于在linux上缺失Easyexcel使用的字体导致 解决办法 下载一个jdk1.8 在其jre/lib目录里复制fontconfi…

聊聊昨日ChatGPT全球宕机事件,带给我们的警示

作者 | 卖萌酱&#xff0c;王二狗 昨日&#xff0c;ChatGPT崩了&#xff01; 大模型研究测试传送门 GPT-4传送门&#xff08;免墙&#xff0c;可直接测试&#xff0c;遇浏览器警告点高级/继续访问即可&#xff09;&#xff1a;https://gpt4test.com 许多人发现无论是 ChatGPT…

腾讯云创建了jenkins容器,但无法访问

1、首先&#xff0c;查看本机能不能ping通你的腾讯云服务器 如果ping的通那就下一步 2、查看腾讯云服务器的防火墙关了没&#xff0c;没关关掉、 firewall-cmd --state not running 3、那就在云服务器的控制台开放端口

自然语言处理---注意力机制

注意力概念 观察事物时&#xff0c;之所以能够快速判断一种事物(当然允许判断是错误的)&#xff0c;是因为大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断&#xff0c;而并非是从头到尾的观察一遍事物后&#xff0c;才能有判断结果。正是基于这样的理论&#xf…

【数据结构】线性表(九)队列:链式队列及其基本操作(初始化、判空、入队、出队、存取队首元素)

文章目录 一、队列1. 定义2. 基本操作 二、顺序队列三、链式队列0. 链表1. 头文件2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 入队6. 出队7. 存取队首元素8. 主函数9. 代码整合 堆栈Stack 和 队列Queue是两种非常重要的数据结构&#xff0c;两者都是特殊的线性表&…

面试二总结

bean的生命周期&#xff1a; 数据库采用行级锁索引&#xff08;使用排他锁&#xff09;&#xff1a; mysql事务隔离级别 未提交读(Read uncommitted)是最低的隔离级别。通过名字我们就可以知道&#xff0c;在这种事务隔离级别下&#xff0c;一个事务可以读到另外一个事务未提交…

微信小程序自定义组件及会议管理与个人中心界面搭建

一、自定义tabs组件 1.1 创建自定义组件 新建一个components文件夹 --> tabs文件夹 --> tabs文件 创建好之后win7 以上的系统会报个错误&#xff1a;提示代码分析错误&#xff0c;已经被其他模块引用&#xff0c;只需要在 在project.config.json文件里添加两行配置 &…

gltf和glb格式模型用什么软件处理

.gltf格式本质上是一个JSON文件。它能描述一整个3D场景&#xff0c;比如一个模型使用多少个网格&#xff0c;网格的旋转、位移等信息。 .glb 文件是gltf 资源格式的二进制格式&#xff0c;一般情况它将所有依赖的资源打包在一起形成一个 xxx.glb 的资源文件&#xff0c;但是如…

Leetcode刷题解析——串联所有单词的子串

1. 题目链接&#xff1a;30. 串联所有单词的子串 2. 题目描述&#xff1a; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["…

【软考】11.4 处理流程设计/系统设计/人机界面设计

《处理流程设计&#xff1a;物理模型》 业务流程建模 流程表示工具 N-S图&#xff08;盒图&#xff09;&#xff1a;表示嵌套和层次关系&#xff1b;不适合于复杂程序的设计问题分析图&#xff08;PAD&#xff09;&#xff1a;结构化程序设计 业务流程重组&#xff08;BPR&am…

字节码进阶之JSR269详解

字节码进阶之JSR269详解 文章目录 前言JSR269概览深入理解JSR269JSR269的应用注意事项和最佳实践总结参考文档 前言 在Java的世界中&#xff0c;我们经常会听到JSR(Java Specification Requests)的名字。JSR是Java社区的一种提案&#xff0c;它定义了Java平台的各种标准和规范…

蓝桥杯(修建灌木 C++)

思路&#xff1a;到两边的距离&#xff0c;取大的一端&#xff1b;因为会来回循环&#xff0c;所以需要乘2。 #include <iostream> using namespace std; int main() {int n;cin>>n;for(int i1;i<n;i){cout<<max(i - 1,n - i) * 2<<endl;}return 0;…

JAVA实现Jfilechooser搜索功能

JAVA实现Jfilechooser搜索功能 背景介绍需求描述思路和方法Java代码实现和注释相关知识点介绍视频演示结语 背景介绍 Java是一种面向对象的编程语言&#xff0c;广泛应用于各种应用程序开发中。文件搜索是我们在日常工作或者学习中经常会遇到的需求&#xff0c;比如查找某个文…

推特爆火!超越ChatGPT和Llama2,新一代检索增强方法Self-RAG来了原创

作者 | ZenMoore 前言 大型语言模型&#xff08;LLMs&#xff09;具有出色的能力&#xff0c;但由于完全依赖其内部的参数化知识&#xff0c;它们经常产生包含事实错误的回答&#xff0c;尤其在长尾知识中。为了解决这一问题&#xff0c;之前的研究人员提出了检索增强生成&…

062:mapboxGL通过jumpTo方式跳转到某位置

第062个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中通过jumpTo方式跳转到某位置。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共122行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置…

基于nodejs+vue语言的酒店管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…