文章目录一、简介二、 应用场景三、通信控制基本原理四、服务请求请求格式请求实例服务响应正响应格式负响应NRC支持五、常见Bug大揭秘六、示例代码28_comm_ctl.c一、简介根据ISO14119-1标准中所述诊断服务28服务主要用于网络中的报文发送与接受比如控制应用报文的发送与接收又或是控制网络管理报文的发送与接收以便满足一定场景下的应用需求。下列文中使用到的Client可直接理解为上位机TesterServer可直接理解为接受Tester诊断请求的ECU。二、 应用场景一般而言对于28诊断服务主要应用场景为以下场合存在某些特殊的测试场景比如只希望接收或者发送对应的网络管理与应用报文绝大多数情况下应用在刷写ECU的过程中即在预编程条件下执行28服务功能寻址便可以抑制总线应用报文与网络管理报文的发送与接收以便减少网络总线负载提高ECU下载效率同时刷写结束后也要执行28服务使能对应控制报文的发送与接收在此过程中一般会配合85服务一起使用。三、通信控制基本原理如下图1所示针对28服务的通信控制过程会经过如下几个AUTOSAR BSW模块进行处理然后完成最终的通信控制具体步骤如下Tester发送28通信控制服务请求给到ServerServer会将该诊断报文请求传递至DCM模块DCM模块调用28服务对应的上层应用函数首先进行输入参数的基本校验校验无误之后然后传递相关控制模式请求至BswM模块BswM模块根据静态配置的规则来实现对应请求中的通道通信状态控制(常见的模式控制为3X4 12种)如下表1所示列举出了常见的12种的通信控制模式如下图1所示为28通信控制的原理图可以看到28诊断服务经过DCMBswMComNM完成整个上述12种通信模式的控制。其中蓝色表示的部分为最终完成通信控制的函数体。四、服务请求服务请求是Client发送给到Server的诊断服务指令。请求格式按照ISO14229-1标准所述如下图2所示为28服务诊断请求格式即上述通信控制原理中诊断服务请求格式值得注意的是28服务诊断请求中的nodeIdentificationNumber仅在subFunction等于4或者5才有效否则#4#5参数可以不存在。下图3中各参数解释如下如下图4所示为上述subfunction(control Type)中的各项取值的具体含义如下图5所示为communicationType的各项取值具体含义请求实例以抑制网络管理报文发送为例28服务诊断请求实例如下图6所示以控制远程特定地址节点进入仅诊断模式为例节点地址为0x00 0A, 28服务诊断请求示例如下关于控制控制远程特定地址节点进入正常工作模式这里就不一一列举具体message Flow可参考ISO14229-1规范。服务响应服务响应是针对Client对Server诊断请求的响应。正响应格式如下图8所示为28诊断服务的正响应格式从上图中可以看出28诊断服务的正响应由以下三个部分组成Response ID该参数固定为SID0x40 0x68SubFunction该参数为上述诊断请求格式中controlType;正响应实例抑制网络管理报文发送如下图9所示为上述28 01 02请求示例所对应的正响应其中0x01就是跟诊断请求中的controlType保持一致即可。控制远程特定地址节点进入仅诊断模式如下图10所示则为上述28 04 01 00 0A的所对应的正响应。负响应NRC支持绝大多数情况下Server针对Client的请求都会给到正响应比如发生重启前需确保整车处于安全状态如引擎熄火车速不能超过3km/h等或者为了防止不按照诊断请求格式进行请求那么Server需要通过某种方式来告诉Client执行不成功的原因在哪里以便于调查问题直至得到正响应。因此ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的诊断格式7F SID NRC。其中NRC全称为Negetive Responce Code每个NRC具有唯一的含义来代表当前诊断请求错误的原因所在。当然每个诊断服务支持的NRC不尽相同具体支持的NRC需要参考ISO14229-1标准文档对于27服务而言支持的NRC如下表2当诊断请求的subfuntion不在Server支持的范围内时则Server会回复”7F 28 12“当发送报文长度或者格式不对时则Server会回复7F 28 13例如当尝试请求复位时且当前车速条件不满足此时Client发送诊断指请求时Server将会回复“7F 28 22”来告诉请求者当前进入编程会话的条件不满足请再次检查进入编程会话的条件。当communicationType与nodeIdentificationNumber均超出规定的范围时则Server会回复“7F 28 31”五、常见Bug大揭秘对于从事过UDS开发的小伙伴可能会发现其实针对每个服务的Bug都是有迹可循的万变不离其宗绝大多数问题都是由于针对需求理解不清晰或者其他人为因素导致的问题。因此为了方便大家能够在工作过程中能够快速找到问题症结所在特将了解到的常见28服务Bug分享给到大家当然具体问题还是要具体分析这里所列出的只是比较典型且出现错误次数较多的Bug仅供参考。六、示例代码28_comm_ctl.c/******************************************************************************** * file 28_comm_ctl.c * author jianqiang.xue * version V1.0.0 * date 2023-05-30 * brief 通信控制 ********************************************************************************//* Includes ------------------------------------------------------------------*/#includestdint.h#includestdbool.h#includestring.h#includestdlib.h#includemodules.h#includeos_api.h#includeedebug.h#includekv_sys.h#includeecu_ble_uart.h/* Private includes ----------------------------------------------------------*/#includestd_math.h#includeapp_can.h#includecan_nm.h#includeapp_nm.h#includediag_main.h/* Private define ------------------------------------------------------------*/#defineUDS_ID0x28/* Private typedef -----------------------------------------------------------*//* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*//***************软定时器创建***************//* Private func --------------------------------------------------------------*/voiduds28_main(nwl_msg_t*p){uint8_treq_type0;// 0-使能接收和发送 1-使能接收和禁止发送 2-禁止接收和使能发送 3-禁止接收和禁止发送uint8_tdata[10];if(p-len!3){LOGE(len err ! 3);send_nrc_data(UDS_ID,NRC_INCORRECT_MESSAGE_LENTH);gotoend;}req_typep-data[1]0x7F;if(req_type3){LOGE(Unsupported,sub:%02x,p-data[1]);send_nrc_data(UDS_ID,NRC_SUBFUNCTION_NOT_SUPPORTED);gotoend;}if((g_car_ste.IPB.bit.VehicleSpeedVld1)(get_car_speed()3)){send_nrc_data(UDS_ID,NRC_CONDITION_NOT_CORRECT);gotoend;}if(p-data[2]3){LOGE(Unsupported,sub2:%02x,p-data[2]);send_nrc_data(UDS_ID,NRC_REQUEST_OUT_OF_RANGE);gotoend;}LOGI(%x,%x,get_nm_msg_tx_ste(),get_nm_msg_rx_ste());switch(p-data[2]){// 应用报文case0x01:switch(req_type){case0x00:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);break;case0x01:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);break;case0x02:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;case0x03:app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;}break;// 网管报文case0x02:switch(req_type){case0x00:can_nm_msg_tx_en();can_nm_msg_rx_en();break;case0x01:can_nm_msg_tx_disa();can_nm_msg_rx_en();break;case0x02:can_nm_msg_tx_en();can_nm_msg_rx_disa();break;case0x03:can_nm_msg_tx_disa();can_nm_msg_rx_disa();break;}break;// 网管报文和应用报文case0x03:switch(req_type){case0x00:can_nm_msg_tx_en();can_nm_msg_rx_en();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);break;case0x01:can_nm_msg_tx_disa();can_nm_msg_rx_en();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,0);LOGI(%x,%x,get_nm_msg_tx_ste(),get_nm_msg_rx_ste());break;case0x02:can_nm_msg_tx_en();can_nm_msg_rx_disa();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,0);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;case0x03:can_nm_msg_tx_disa();can_nm_msg_rx_disa();app_can_tx_msg_ctrl(CTL_BY_DIAG_SRV,1);app_can_rx_msg_ctrl(CTL_BY_DIAG_SRV,1);break;}break;default:break;}if(p-data[1]0x80){// 子功能bit7为应答位。 1则不允许应答// 应用无需应答}else{// 回复正响应码 单帧格式: len, 服务ID|0x40, 子功能ID,data[0]2;// 数据总长度数据长度服务号data[1]UDS_ID|0x40;// 服务号回复上位机需要 |0x40data[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_remaining0;// 如果发送诊断报文则清除倒计时。P2_SERVER_MAXend:return;}#ifAUTOSAR_DIAG_SWITCHUSE_UDS_28DIAG_SERVICE_REG(UDS_ID,DIAG_NO_SECURITY_LEVEL,(EXTENDED_SESSION),(DIAG_PHYS_REQ|DIAG_FUNC_REQ),NULL,NULL,uds28_main);#endif
企业数字化 ERP 产品动态
相关推荐
Linux实战|Swap交换空间 + CentOS7系统启动流程 + 故障修复完整笔记 Linux实战|Swap交换空间 CentOS7系统启动流程 故障修复完整笔记
引言
本篇适合CentOS7运维入门同学。读完本篇博客你将掌握:
计算机存储器层级原理,理解虚拟内存、Swap交换空间是什么,学会创建、激活、持久化配置swap࿱… · 2026/9/24 13:33:09
【Dify】Fine-tune自动化文本数据处理与标准语料集生成 自动化文本数据处理与微调语料构建是当前NLP实战中的高频需求,优质数据决定模型成效。Fine-tune语料构造器应运而生,致力于简化繁琐的数据收集、清洗与格式化流程。
本文介绍该工具的核心节点设计、典型工作流程及实际应用场景,助力快速搭建高质量标准训练语料,无需外部深… · 2026/9/24 13:33:03
【Coze】【视频】假如书籍会说话工作流 今天给大家演示一个 《假如书籍会说话》Coze 工作流。这个工作流通过大模型生成书籍拟人化对话文案,并结合语音合成、画板背景与代码逻辑,将书籍转化为可交互的“会说话的视频书籍”。最终效果是观众可以直观感受到主持人与书籍的跨时空对话,让阅读体验升级为沉浸式视听内容… · 2026/9/24 13:33:03
【Dify】自动化抓取36氪热榜新闻应用 自动化抓取和整理新闻数据已成为信息聚合和内容创作中的高频需求。围绕36氪热榜新闻的自动采集与处理,可以高效实现科技资讯的结构化输出和多场景复用。
本文介绍一套以Dify工作流为核心,结合大语言模型和Python代码节点,自动完成36氪热榜新闻从抓取、解析到格式化输出的全… · 2026/9/24 14:01:41
【Dify】科研论文英文翻译应用 科研论文的国际化传播对高质量英文翻译提出了严格要求。中文科研内容准确转化为英文,既要保证信息完整,也要符合学术论文的表达规范。
本文介绍了一个基于深度学习语言模型的科研论文中文翻译英文工作流。该流程采用三阶段策略,分别实现直译、语言问题诊断与意译,确保翻译… · 2026/9/24 14:01:41
【Dify】多平台实时热点新闻聚合引擎应用 聚合新闻资讯已成为多平台信息服务的核心需求。智能自动化流程推动新闻采集、整理与分发效率不断提升,相关技术应用正广泛落地。
本文围绕Dify驱动的实时热点新闻聚合引擎展开,聚焦主流模型组件与自动化工作流实现,梳理新闻高效获取与多源信息融合的实用方法。 文章目录 实… · 2026/9/24 14:01:41
【Dify】GPT模型的中英文自动翻译应用 本项目聚焦于构建一个中英文互译助手,利用GPT-3.5-turbo模型实现文本语言的自动识别与精准翻译。翻译过程不仅确保准确传达原文信息,还保留语气和风格,满足多样化的翻译需求。设计的流程简洁高效,适合入门级开发者理解和应用,帮助快速搭建智能翻译系统。
本文将全面介绍该… · 2026/9/24 14:01:41
【Dify】专家音频与多媒体结合的历史播客应用 中国历史专家播客制作涉及多种音频和多媒体处理技术,目的是实现高质量内容的自动化生成。通过深度学习模型,能够有效提升录音的清晰度,实现精准的语音转写和文本校正,最终将音频与相关视觉素材结合,输出丰富且专业的历史播客作品。
本文将介绍一套面向中国历史专家播客的… · 2026/9/24 14:01:41
Linux命令与Hadoop伪分布式搭建:从实验报告到实战通关 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 14:01:35
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44