目 录
1 产品概述
2 系统整体架构
3 硬件配置与通讯接口
4 J1939协议与CAN数据解析
5 故障诊断逻辑设计
6 Modbus RTU数据上报协议
7 诊断阈值与报警体系
8 核心技术优势
9 典型应用场景
10 软件功能规划
11 产品资质与认证
12 技术服务与联系方式
13 版权声明
1 产品概述
1.1 产品简介
本产品是山东华全动力股份有限公司自主研发的发动机CAN总线故障诊断系统,专为柴油发电机组、燃气发电机组配套设计。系统通过STM32F103微控制器实时解析发动机ECU发出的SAE J1939 CAN总线数据,将发动机运行参数与故障状态通过RS485接口以Modbus RTU协议上报至上位监控系统,实现发电机组运行状态的实时在线监测与故障预警诊断。
1.2 研发背景
传统发电机组监控系统普遍依赖人工巡检或简单的模拟信号采集,存在数据维度少、故障发现滞后、诊断精度低等痛点。随着国六/欧六发动机全面普及,ECU已全面支持J1939 CAN总线通讯,实时获取发动机运行参数与故障码已成为可能。本项目依托公司成熟的发电机组技术平台,完成整套CAN总线诊断系统软硬件自主开发,实现从被动故障处理向主动预防性维护的升级。
1.3 整体技术特点
- 采用STM32F103 CAN转RS485双接口设计,一端连接发动机ECU CAN总线,一端连接上位监控系统,协议转换透明可靠;
- 支持SAE J1939标准协议栈,完整解析EEC1/EEC2/ET1/CCVS/DM1/AMB/LFE1/IC1等8类核心PGN数据帧;
- 内置Modbus RTU从站,标准寄存器地址映射,上位机可直接轮询读取发动机实时参数;
- 支持DM1实时故障码解析,将SAE标准SPN/FMI故障码解码为可读中文诊断结果;
- CAN连接状态实时监测,超时自动标记通讯中断,避免数据假性有效;
- 采用双看门狗保护,系统运行稳定可靠,满足工业现场7×24小时连续运行要求;
- 支持J1939原厂诊断报文透明转发,便于主机厂与发动机厂家联合分析问题。
2 系统整体架构
本系统采用分布式双接口设计,CAN侧接收发动机ECU数据,经本地解析处理后,通过RS485侧以Modbus RTU协议向上位系统上报,两侧接口独立工作,互不干扰。
系统拓扑:
发动机ECU(J1939 CAN)→ STM32 CAN转RS485模块(本地解析+故障诊断)→ 上位监控系统/PLC(Modbus RTU轮询)
下位机(STM32 CAN转RS485模块)
- CAN总线接收(250kbps,J1939扩展帧)
- J1939协议解析(PGN识别+数据解码)
- DM1故障码实时解析
- Modbus RTU从站响应
- CAN连接状态监控
- 看门狗保护
上位机(监控系统)
- Modbus RTU主站轮询
- 发动机参数实时显示
- 故障告警管理
- 历史数据存储与分析
- 诊断报告生成
- 远程推送告警通知
3 硬件配置与通讯接口
3.1 核心硬件清单
| 序号 | 器件名称 | 规格型号 | 说明 |
|---|---|---|---|
| 1 | 主控MCU | STM32F103RBT6 | 72MHz ARM Cortex-M3,20KB SRAM,128KB Flash |
| 2 | CAN收发器 | TJA1050/ISO1050 | 最高1Mbps,支持120Ω终端电阻拨码选择 |
| 3 | RS485收发器 | SP3485/MAX485 | 9600bps,支持半双工自动收发切换 |
| 4 | 电源 | DC 9~36V宽压输入 | 带防反接保护,TVS浪涌抑制 |
| 5 | 通讯接口 | CAN_H/CAN_L,RS485 A/B | 凤凰端子3.81mm间距 |
| 6 | 指示灯 | 电源/运行/CAN通讯/故障 | 4个LED状态指示 |
| 7 | 看门狗 | 内置独立看门狗 | 超时自动复位 |
3.2 通讯接口说明
- CAN接口:配置为250kbps(J1939标准速率),使用扩展帧(29位ID),终端电阻拨码可调,连接发动机ECU或整车CAN网络;
- RS485接口:采用Modbus RTU协议,从站地址拨码可设(1~247),9600bps,8位数据,1位停止位,无校验,连接上位监控系统或PLC;
- 调试接口:USART1作为调试串口,波特率921600,用于固件烧录与日志输出。
4 J1939协议与CAN数据解析
4.1 CAN总线参数
| 参数 | 配置值 | 说明 |
|---|---|---|
| 通讯速率 | 250 kbit/s | J1939标准速率 |
| 帧类型 | 扩展帧(29位ID) | J1939全部使用扩展帧 |
| 终端电阻 | 120Ω(拨码选择) | 总线两端需加终端电阻 |
| 采样点 | 87.5% | 满足J1939规范要求 |
| 波特率 | 36MHz时钟 / (9+1+1) / 16 = 250k | APB1=36MHz |
4.2 支持的J1939 PGN数据帧
| PGN | 名称 | CAN ID(HEX) | 主要参数 | 周期 |
|---|---|---|---|---|
| 0xF003 | EEC2 | 0C F0 03 00 | 发动机转速/油门位置/负载百分比 | 50ms |
| 0xF004 | EEC1 | 0C F0 04 00 | 需求扭矩/实际扭矩/发动机转速 | 50ms |
| 0xFEEE | ET1 | 18 FE EE 00 | 冷却液温度/燃油温度/机油温度 | 1000ms |
| 0xFEF1 | CCVS | 18 FE F1 00 | 车速/巡航状态/制动/离合状态 | 100ms |
| 0xFECA | DM1 | 18 FE CA 00 | 实时故障码(SPN+ FMI) | 1000ms |
| 0xFEF5 | AMB | 18 FE F5 00 | 大气压力/环境温度/进气温度 | 1000ms |
| 0xFEF2 | LFE1 | 18 FE F2 00 | 燃油消耗率/瞬时油耗/平均油耗 | 1000ms |
| 0xFEF6 | IC1 | 18 FE F6 00 | 进气压力/进气温度/涡轮增压器压力 | 500ms |
| 0xFEDF | EEC3 | 18 FE DF 00 | 发动机冷却剂液位/需求扭矩来源 | 1000ms |
4.3 关键SPN参数解析规则
注意:以下解析规则符合SAE J1939-71标准,实际以发动机厂家数据手册为准。
| SPN | 名称 | PGN | 字节位置 | 分辨率 | 偏移量 | 单位 |
|---|---|---|---|---|---|---|
| 190 | 发动机转速 | EEC2 (0xF003) | Byte 0-1 | 0.125 rpm/bit | 0 | rpm |
| 110 | 冷却液温度 | ET1 (0xFEEE) | Byte 0 | 1℃/bit | -40 | ℃ |
| 84 | 车速 | CCVS (0xFEF1) | Byte 1-2 | 1/256 km/h | 0 | km/h |
| 92 | 发动机负载百分比 | EEC2 (0xF003) | Byte 3 | 0.4%/bit | 0 | % |
| 183 | 燃油消耗率 | LFE1 (0xFEF2) | Byte 0-1 | 0.05 L/h | 0 | L/h |
| 174 | 燃油温度 | ET1 (0xFEEE) | Byte 1 | 1℃/bit | -40 | ℃ |
| 175 | 机油温度 | ET1 (0xFEEE) | Byte 2 | 1℃/bit | 0 | ℃ |
| 102 | 进气歧管压力 | IC1 (0xFEF6) | Byte 0 | 2 kPa/bit | 0 | kPa |
| 105 | 进气温度 | IC1 (0xFEF6) | Byte 1 | 1℃/bit | -40 | ℃ |
| 171 | 环境温度 | AMB (0xFEF5) | Byte 1-2 | 0.5℃/bit | 0 | ℃ |
| 108 | 大气压力 | AMB (0xFEF5) | Byte 0 | 0.5 kPa/bit | 0 | kPa |
5 故障诊断逻辑设计
5.1 DM1故障码解析
DM1(Active Diagnostic Trouble Codes,当前激活故障码)是J1939标准中最核心的故障诊断报文。当发动机ECU检测到故障时,通过DM1帧(PGN 0xFECA)实时发送故障信息,每帧最多承载7个故障码。
DM1帧数据结构:Byte 0低4位表示故障数量(0~15),每个故障占4字节:
- Byte 1-2(SPN):故障参数编号,表示故障关联的参数(如SPN 110=冷却液温度过高);
- Byte 3低5位(FMI):故障模式标识符,表示故障类型(如FMI 3=电压高于正常值);
- Byte 4:故障发生次数(Occurrence Counter)。
5.2 故障码合成规则
系统将SPN(16位)与FMI(5位)合成为一个16位故障码,格式如下:
combined_fault_code = (SPN << 5) | (FMI & 0x1F)
例如:SPN=100,FMI=3 → combined_fault_code = (100 << 5) | 3 = 0x0C83
5.3 典型故障码对照表
| 故障码(16进制) | SPN | FMI | 故障名称 | 可能原因 | 建议措施 |
|---|---|---|---|---|---|
| 0x0C83 | 100 | 3 | 机油压力传感器电压高于正常值 | 传感器短路/线束破损 | 检查传感器线束 |
| 0x12C3 | 300 | 2 | 冷却液温度传感器数据不稳定 | 传感器接触不良 | 检查传感器连接 |
| 0x2323 | 110 | 3 | 冷却液温度传感器电压高 | 开路/短路 | 检查温度传感器 |
| 0x2324 | 110 | 4 | 冷却液温度传感器电压低 | 短路接地 | 检查温度传感器 |
| 0xBE03 | 190 | 3 | 发动机转速信号异常 | 曲轴/凸轮轴传感器故障 | 检查发动机转速传感器 |
6 Modbus RTU数据上报协议
6.1 寄存器地址映射
系统作为Modbus RTU从站,支持功能码0x04(读输入寄存器),寄存器地址映射如下:
| 寄存器地址 | 参数名称 | 数据类型 | 分辨率 | 单位 | 说明 |
|---|---|---|---|---|---|
| 0x0000 | 发动机转速 | uint16 | ×0.1 | rpm | 实际值=寄存器值÷10 |
| 0x0001 | 冷却液温度 | uint16 | ×1 | ℃ | 直接读取 |
| 0x0002 | 车速 | uint16 | ×0.1 | km/h | 实际值=寄存器值÷10 |
| 0x0003 | 发动机负载百分比 | uint16 | ×0.1 | % | 实际值=寄存器值÷10 |
| 0x0004 | 燃油消耗率 | uint16 | ×0.1 | L/h | 实际值=寄存器值÷10 |
| 0x0005 | 环境温度 | uint16 | ×0.1 | ℃ | 实际值=寄存器值÷10 |
| 0x0006 | 进气温度 | uint16 | ×1 | ℃ | 直接读取 |
| 0x0007 | 机油温度 | uint16 | ×0.1 | ℃ | 实际值=寄存器值÷10 |
| 0x0008 | 当前故障码 | uint16 | — | — | SPN<<5 | FMI,无故障=0 |
| 0x0009 | CAN帧计数器 | uint16 | — | 帧 | CAN帧接收总数(低16位) |
| 0x000A | Modbus请求计数器 | uint16 | — | 次 | Modbus查询总次数 |
6.2 典型Modbus轮询示例
读取全部11个寄存器(从站地址=0x01):
请求帧:01 04 00 00 00 0B B1 CD
响应帧:01 04 16 07 D0 00 41 01 2C 00 C8 00 32 00 96 00 19 03 E8 00 00 00 0A 00 05 xx xx
寄存器0x0000=0x07D0=200.0 rpm,0x0001=0x0041=65℃,0x0002=0x012C=30.0 km/h……
6.3 CAN状态寄存器(地址0x0008)
寄存器0x0008用于查询CAN通讯状态,特殊处理逻辑如下:
- CAN_flag = 0x01:CAN通讯正常(3秒内有CAN帧接收);
- CAN_flag = 0x00:CAN通讯中断(超过3秒无CAN帧接收)。
7 诊断阈值与报警体系
7.1 报警分级标准
| 级别 | 颜色 | 触发条件 | 系统响应 |
|---|---|---|---|
| 信息 | ● 绿色 | 参数正常范围内 | 正常记录,不告警 |
| 预警 | ● 黄色 | 参数接近阈值(>80%限值) | 弹窗提示,持续监测 |
| 警告 | ● 橙色 | 参数超出正常范围 | 声光告警,建议停机检查 |
| 严重 | ● 红色 | 参数超限严重/收到ECU故障码 | 紧急告警,触发保护停机 |
7.2 关键参数诊断阈值
| 参数 | 正常范围 | 预警阈值 | 告警阈值 | 严重阈值 |
|---|---|---|---|---|
| 发动机转速 | 800~3000 rpm | <700 或 >3200 rpm | <600 或 >3400 rpm | <500 或 >3600 rpm |
| 冷却液温度 | 75~105℃ | >108℃ | >115℃ | >120℃(高温停机) |
| 机油温度 | 80~130℃ | >135℃ | >140℃ | >150℃ |
| 机油压力 | 200~500 kPa | <180 kPa | <150 kPa | <100 kPa(低压停机) |
| 燃油温度 | 0~80℃ | >85℃ | >90℃ | >95℃ |
| 进气温度 | -20~65℃ | >70℃ | >75℃ | >80℃ |
| CAN通讯状态 | 通讯正常 | — | CAN_flag=0 超时 | 持续中断>10秒 |
8 核心技术优势
- 全自主研发:硬件架构、J1939协议栈、故障诊断算法均为华全自主设计,支持客户个性化定制开发;
- 协议完整性:完整支持SAE J1939标准,兼容国内外主流发动机品牌(康明斯、潍柴、玉柴、上柴、珀金斯、颜巴赫等)ECU通讯协议;
- 实时性强:J1939关键帧(EEC2/CCVS)50ms级别更新,满足发动机实时监控需求;
- 诊断精准:基于DM1帧实时故障码解析,支持SPN/FMI双维度故障定位,结合阈值报警实现预防性维护;
- 无缝集成:Modbus RTU标准化接口,可直接对接PLC、SCADA、智慧电站云平台,无需额外驱动开发;
- 稳定可靠:独立看门狗+CAN超时检测,双重保障系统在工业现场的长期稳定运行。
9 典型应用场景
- 柴油发电机组/燃气发电机组远程监控系统;
- 智慧电站云平台数据采集网关;
- 工厂备用电源集中监控管理;
- 通信基站/数据中心应急电源监控;
- 发动机厂家/售后服务故障诊断工具;
- 发电机组出厂测试与老化试验台数据采集。
10 软件功能规划
Phase 1 — 实时数据看板(2024 Q3)
- 发动机转速/水温/油压/油耗等关键参数实时可视化;
- CAN连接状态监控与断线告警;
- 历史曲线记录(支持导出Excel)。
Phase 2 — 故障码解析系统(2024 Q3)
- DM1故障帧SAE J1939 SPN/FMI解码成中文诊断结果;
- 故障历史记录存储与查询;
- 故障次数统计与趋势分析。
Phase 3 — 阈值报警引擎(2024 Q4)
- 可配置参数阈值规则管理;
- 分级声光报警与弹窗通知;
- 报警事件短信/邮件/飞书推送。
Phase 4 — 诊断报告生成(2025 Q1)
- 基于历史数据自动生成诊断报告(Word/PDF格式);
- 设备健康度评分模型;
- 维保建议自动生成。
Phase 5 — AI辅助诊断(2025 Q2)
- 接入Qwen大模型分析故障根因;
- 自然语言查询故障知识库;
- 智能维保方案推荐。
11 产品资质与认证
- 电磁兼容性能满足 GB/T 17626 系列国家标准;
- 电源输入端满足 GB/T 17626.11 浪涌抗扰度要求;
- 支持颜巴赫(Jenbacher)发动机J1939原厂通讯协议;
- 支持康明斯( Cummins)、潍柴、上柴、玉柴、卡特彼勒等发动机ECU协议适配;
- 符合工业级宽温工作要求(-25℃~+70℃)。
