基于图莫斯的CAN UDS升级上位机-LabVIEW版本(十六):从刷写到诊断的功能扩展

1. 引言

在前面的系列文章中,我们完成了基于图莫斯CAN工具的LabVIEW UDS升级上位机开发,实现了ECU固件刷写的完整流程。然而,UDS协议的能力远不止于刷写------它涵盖了六大功能单元、共26种诊断服务,是汽车电子领域最全面的诊断通信协议。

刷写功能只是UDS应用的一个子集。在实际的ECU开发、产线测试和售后诊断场景中,我们还需要:

  • 读取DTC(故障码):快速定位ECU故障

  • 读取DID(数据标识符):获取软件版本、硬件版本、VIN码等信息

  • 清除DTC:故障修复后清除历史故障码

  • 安全访问:解锁受保护的诊断服务

  • 例程控制:执行ECU内部预定义操作(如传感器自学习、标定等)

好消息是,我们已经封装好的通信基座和UDS服务子VI可以直接复用,只需在此基础上扩展新的诊断服务即可。本文将展示如何利用现有架构,快速构建一个功能完整的UDS诊断上位机。


2. 已封装子VI的复用价值

在刷写上位机中,我们已经完成了以下核心基础设施:

2.1 通信基座:TOOMOSS_SendAndWaitResp.vi

这是所有UDS服务的"发动机"。它封装了:

  • CAN_UDS_Request(发送UDS请求)

  • CAN_UDS_Response(接收UDS响应)

  • 超时处理与错误返回

任何新的UDS服务,只需构造对应的请求数据,调用此基座即可完成收发,无需重复编写CAN通信逻辑。

2.2 设备管理层:TOOMOSS_OpenDev(CAN).vi

提供设备句柄管理,所有诊断服务共用同一个设备句柄,无需重复打开设备。

2.3 已有的UDS服务子VI

子VI 服务 用途
TOOMOSS_SID10_RequestSession.vi 0x10 会话切换
TOOMOSS_SID27_SecurityAccess.vi 0x27 安全访问
TOOMOSS_SID2E_WriteDataByID.vi 0x2E 写入数据
TOOMOSS_SID31_RoutineControl.vi 0x31 例程控制
TOOMOSS_SID11_EcuReset.vi 0x11 ECU复位
TOOMOSS_SID28_CommunicationControl.vi 0x28 通信控制
TOOMOSS_SID85_ControlDTCSetting.vi 0x85 DTC控制

这些子VI可以直接在诊断上位机中复用,无需任何修改。


3. 需要新增的诊断服务

要构建完整的诊断上位机,还需要补充以下UDS服务:

3.1 0x22 ReadDataByIdentifier(按标识符读数据)

功能:根据DID(Data Identifier)读取ECU中存储的数据。DID是2字节的标识符,每个DID对应ECU中的特定数据。

典型应用

  • 0xF190:读取VIN码

  • 0xF188:读取软件版本号

  • 0xF187:读取硬件版本号

请求格式

复制代码
Byte 0: SID = 0x22
Byte 1: DID_High
Byte 2: DID_Low

肯定响应格式

复制代码
Byte 0: SID = 0x62 (0x22 + 0x40)
Byte 1: DID_High
Byte 2: DID_Low
Byte 3~N: dataRecord(读取到的数据)

示例:请求读取DID=0xF187

  • 发送:22 F1 87

  • 响应:62 F1 87 48 32 30 31(数据为"H201"等ASCII字符)

3.2 0x19 ReadDTCInformation(读取DTC信息)

功能 :读取ECU中存储的诊断故障码(DTC)。这是UDS中最复杂但最重要的诊断服务之一,包含28个子功能。

常用子功能

子功能 名称 用途
0x01 reportNumberOfDTCByStatusMask 读取符合特定条件的DTC数量
0x02 reportDTCByStatusMask 读取符合特定条件的DTC列表
0x06 reportDTCExtDataRecordByDTCNumber 读取指定DTC的快照/环境数据

DTC状态掩码(1字节):

  • bit 0:testFailed(当前是否失败)

  • bit 4:confirmedDTC(是否已被确认/存储)

  • bit 6:warningIndicatorRequested(是否触发警告灯)

示例

  • 读取所有已确认的DTC数量:19 01 08

  • 读取所有激活状态的DTC列表:19 02 01

  • 读取指定DTC的完整环境数据:19 06 XX XX XX FF

具体的设计在下一篇**"基于图莫斯的CAN UDS诊断上位机-LabVIEW版本(十七):TOOMOSS_SID19_ReadDTCInformation.vi-读取DTC信息"文**章介绍。

3.3 0x14 ClearDiagnosticInformation(清除DTC)

功能:清除ECU中存储的DTC。

请求格式

复制代码
Byte 0: SID = 0x14
Byte 1: groupOfDTC_High
Byte 2: groupOfDTC_Mid
Byte 3: groupOfDTC_Low

特殊值FF FF FF表示清除所有DTC

肯定响应0x54

示例:清除所有DTC

  • 发送:14 FF FF FF

  • 响应:54

3.4 0x3E TesterPresent(待机握手)

功能:维持非默认会话状态,防止ECU因超时而自动退回默认会话。

请求格式

复制代码
Byte 0: SID = 0x3E
Byte 1: subFunction (0x00 = 需要响应, 0x80 = 不需要响应)

典型用法 :进入扩展会话或编程会话后,周期性发送3E 80(无需响应)保持会话活跃。


4. 诊断功能上位机界面设计

4.1 主界面布局

复制代码
┌─────────────────────────────────────────────────────────────────────┐
│  CAN UDS 诊断上位机                                               │
├─────────────────────────────────────────────────────────────────────┤
│  ┌─ 通信配置 ────────────────────────────────────────────────────┐ │
│  │  通道: [CAN1▼]  波特率: [500] Kbps                          │ │
│  │  物理ID: [0x700]  响应ID: [0x708]  设备: [已打开 ●]        │ │
│  └─────────────────────────────────────────────────────────────┘ │
│  ┌─ 诊断服务 ────────────────────────────────────────────────────┐ │
│  │  [读取DTC] [清除DTC] [读取DID] [写入DID] [安全访问] [复位] │ │
│  └─────────────────────────────────────────────────────────────┘ │
│  ┌─ 服务参数 ────────────────────────────────────────────────────┐ │
│  │  DID: [0xF190]  数据: [                  ]                   │ │
│  │  子功能: [0x02▼]  掩码: [0xFF]                              │ │
│  └─────────────────────────────────────────────────────────────┘ │
│  ┌─ 响应显示 ────────────────────────────────────────────────────┐ │
│  │  ┌─────────────────────────────────────────────────────────┐ │ │
│  │  │ [14:30:25.123] TX: 22 F1 90                            │ │ │
│  │  │ [14:30:25.456] RX: 62 F1 90 4C 56 4E 39 30 30 30 30  │ │ │
│  │  │ VIN: LVN90000                                          │ │ │
│  │  └─────────────────────────────────────────────────────────┘ │ │
│  └─────────────────────────────────────────────────────────────┘ │
│  状态栏: [就绪]                                                  │
└─────────────────────────────────────────────────────────────────────┘

4.2 功能区域说明

区域 内容 说明
通信配置 通道、波特率、物理ID、响应ID、设备状态 与刷写上位机共用
诊断服务 功能按钮 点击触发对应的UDS服务
服务参数 DID、子功能、掩码、数据等 根据所选服务动态显示
响应显示 收发日志 + 解析结果 显示原始报文和解析后的数据
状态栏 当前状态、错误信息 实时反馈

5. 诊断服务子VI实现

5.1 TOOMOSS_SID22_ReadDataByID.vi

输入参数

控件 类型 说明
设备句柄 U32 由OpenDev返回
通道号 枚举 CAN1/CAN2
物理地址 U32 请求ID
响应地址 U32 响应ID
DID U16 数据标识符

输出参数

控件 类型 说明
响应数据 U8数组 读取到的数据
数据长度 I32 数据字节数
返回值 I32 0成功,-1失败
错误信息 字符串 错误描述

程序框图

典型调用:读取VIN码

  • DID = 0xF190

  • 发送:22 F1 90

  • 响应:62 F1 90 4C 56 4E ...(17字节VIN码)

5.2 TOOMOSS_SID19_ReadDTC.vi

下篇文章详解

5.3 TOOMOSS_SID14_ClearDTC.vi

输入参数

控件 类型 说明
设备句柄 U32 由OpenDev返回
通道号 枚举 CAN1/CAN2
物理地址 U32 请求ID
响应地址 U32 响应ID
DTC组 U32 3字节组标识(FF FF FF表示全部)

输出参数

控件 类型 说明
返回值 I32 0成功,-1失败
错误信息 字符串 错误描述

程序框图

5.4 TOOMOSS_SID3E_TesterPresent.vi

输入参数

控件 类型 说明
设备句柄 U32 由OpenDev返回
通道号 枚举 CAN1/CAN2
物理地址 U32 请求ID
响应地址 U32 响应ID
需要响应 布尔 True=需要响应(0x00),False=无需响应(0x80)

程序框图


6. 诊断功能主VI流程编排

6.1 状态机设计

复制代码
IDLE → 选择诊断服务 → 检查设备状态 → 执行服务 → 显示结果 → IDLE

6.2 诊断服务调用示例

读取VIN码流程

  1. 用户选择DID=0xF190

  2. 调用TOOMOSS_SID22_ReadDataByID.vi

  3. 将响应数据(17字节)显示为ASCII字符串

  4. 显示VIN码解析结果

读取DTC流程

  1. 用户选择子功能=0x02(按状态掩码读取DTC列表)

  2. 调用TOOMOSS_SID19_ReadDTC.vi

  3. 解析响应,提取DTC列表

  4. 将3字节DTC转换为标准5字符格式

  5. 在表格中显示DTC及其状态

6.3 与刷写功能的集成

诊断功能与刷写功能可以共享:

  • 通信层 :同一个TOOMOSS_SendAndWaitResp.vi

  • 设备管理:同一个设备句柄

  • 日志系统 :同一个LogManager.vi

  • 主界面:通过标签页切换"诊断模式"和"刷写模式"


7. 总结

通过本系列文章搭建的UDS通信框架,我们已经具备了快速扩展诊断功能的基础:

已实现(刷写系列) 可扩展(诊断系列)
0x10 会话切换 0x22 读数据
0x27 安全访问 0x19 读DTC
0x2E 写数据 0x14 清除DTC
0x31 例程控制 0x3E 待机握手
0x34/36/37 下载 0x23 读内存
0x11 ECU复位 ...更多

核心要点

  1. 通信基座复用 :所有新服务只需构造请求数据,调用TOOMOSS_SendAndWaitResp.vi即可

  2. 设备管理复用 :设备句柄由TOOMOSS_OpenDev(CAN).vi统一管理

  3. 日志系统复用:所有通信自动记录到日志文件

  4. UI框架复用:主VI的While循环+事件结构可直接扩展新的事件分支

这种架构设计的最大价值在于------投入一次基础设施建设,即可持续扩展新的诊断功能,而无需重复编写底层的CAN通信、设备管理和日志记录代码。

相关推荐
fanchenxinok3 小时前
基于图莫斯的CAN UDS诊断上位机-LabVIEW版本(十七):TOOMOSS_SID19_ReadDTCInformation.vi — 读取DTC信息
labview·dtc·sid19
神电测控8 小时前
新品发布:32通道50MS/s同步并行14位采集模块PG-FMC9249(支持任意FPGA/ZYNQ,兼容LabVIEW FPGA软件开发)
fpga开发·labview·ni·神电测控·王电令·ad9249·32通道
电气_空空1 天前
基于 LABVIEW 的虚拟仪器温度检测系统的设计
labview
fanchenxinok1 天前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(十五):总结篇
labview·uds升级·uds刷写
fanchenxinok2 天前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(十四):打包与安装应用程序
labview·安装·升级上位机·uds刷写
fanchenxinok3 天前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(十):TOOMOSS_SID31_RoutineControl.vi — 例程控制
can·labview·uds升级·升级上位机·uds刷写
kingwebo'sZone3 天前
我写的第一个labview 展示页面程序
labview
电气_空空4 天前
基于 LabVIEW的数据采集与信号处理系统的设计
嵌入式硬件·毕业设计·信号处理·labview
无垠的广袤4 天前
【RA-Eco-RA4M2开发板】步进电机的串口控制和 LabVIEW 数据采集
单片机·嵌入式硬件·labview