恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

[AUTOSAR][诊断管理][ECU][$28] 通信控制

  • 首页
  • 资讯中心
  • /
  • [AUTOSAR][诊断管理][ECU][$28] 通信控制

相关资讯

复盘方法论:六步法把经验真正变成行动 2026/9/24 13:33:31
【Python机器学习】零基础掌握单模型预测不稳定时的集成决策思路 2026/9/24 13:33:31
【Dv2Admin】字典管理枚举项配置 2026/9/24 13:33:31

最新资讯

FunClip 视频剪辑:零门槛 3 分钟切出 2 小时录像里的精华
Hive Aden 工具集 Razorpay 支付集成实战:6 个 MCP 工具完成收款、开票与退款管理
FunClip使用指南:本地部署AI视频剪辑,3步把2小时会议录像变成精华片段
Kornia 颜色空间转换指南:RGB 与 HSV 双向转换的 API 详解与实现原理
Agent Substrate 路线图深度解读:从核心架构决策到高密度 Agent 运行时演进方向
2026低代码平台选型指南:织信、宜搭、奥哲、CodeWave等10款热门工具对比

今日推荐

JavaWeb购物车系统实现:基于Session存储的完整工程示例
面向对象综合训练:从图书管理系统掌握封装、继承与多态
Lombok与JDK版本冲突引发NoSuchFieldError:根因排查与修复指南

本周热门

BrewUI:给Homebrew套上图形界面,让macOS软件包管理更简单
BrewUI:让Homebrew包管理变得可视化与高效
公式与文本对齐全攻略:从Word到LaTeX的实用技巧

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

[AUTOSAR][诊断管理][ECU][$28] 通信控制

发布时间:2026/9/24 13:33:31
[AUTOSAR][诊断管理][ECU][$28] 通信控制 文章目录一、简介二、 应用场景三、通信控制基本原理四、服务请求请求格式请求实例服务响应正响应格式负响应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

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号