一、项目概述
J1939协议在世界范围内已经在广泛的使用,各种大型发动机、大型汽车、客车、轮船都有使用,是一款优秀的基于CAN总线的高层协议。本项目是油田中上千个卡特柴油机与康明斯发动机的控制与监测。将J1939协议转换为MODBUS TCP和MODBUS RTU协议,方便与其它控制系统对接,充分的体现了TG900的灵活与可靠。
二、实现原理
抓取的J1939报文
2011年10月26日10时00分38秒
29 0C F0 03 00 FF 00 00 FF FF FF FF FF
PGN61443-电子的发动机控制器#2 EEC2
传输循环率: 50ms
数据长度: 8 字节
数据页面: 0
PDU 格式: 240
PDU 特定: 3
默认优先值: 3
参数组数编号: 61443(00F00316)
29 0C F0 04 00 FF BD 7D 00 00 FF FF FF
PGN61444-电子的发动机控制器#1 EEC1
传输循环率: 依赖发动机转速
数据长度: 8 字节
数据页面: 0
PDU 格式: 240
PDU 特定: 4
默认优先值: 3
参数组数编号: 61444(00F00416)
具体SPN含义请参考相关协议说明,在此就不一一列举
三、编程实现
以标准的J1930协议250KB速率打开CAN通迅口,新建两个CAN_READ功能块分别读取PGN61443与PGN61444。
当接收到PGN61443报文时,梯形图中PGN61443(8字节数组)中的数据分别为:
FF 00 00 FF FF FF FF FF
Spn558—加速踏板低怠速开关 1.1位置 第二个字节的0与1位 当前值为00
Spn559—加速踏板换低档开关 1.3位置 第二个字节的2与3位 当前值为00
根据SPN参数定义我们就很容易知道发动机中的各种参数与状态及实时测量值了。
四、SPN参数介绍
Spn558—加速踏板低怠速开关
表示加速踏板低怠速开关是否打开的开关信号。低怠速开关的定义在 SAE J1843。
00-加速踏板不在低速怠速位置
01-加速踏板在低速怠速位置
位长:2 位
类型:测量值
可疑参数号码:558
参数组编号:[61443]
Spn559—加速踏板换低档开关
表示加速踏板换低档开关是否打开的开关信号。换低档开关的定义在 SAE J1843。
00-被动式换低档
01-主动式换低档
位长:2 位
类型:测量值
可疑参数号码:559
参数组编号:[61443]
五、J1939协议介绍
SAE J1939协议是由汽车工程协会(SAE)定义的,主要用于商用车辆,但也用于舰船、轨道机车、农业机械和大型发动机。另外,SAE J1939用作国际标准NMEA 2000(海事) 和 ISO 11783(农业机械)的基础,因而此协议栈也能用于这些应用。
在商用车辆方面,由SAE制定的标准化串行协议长期以来一直用于单个电子控制单元和传动装置上元件之间的通信。基于通常可从单片机串行端获得的J1708/ J1587协议可以被视作前驱。
由于需要与J1708/1587协议兼容,对于J1939来说,必须要求CAN报文标识符从11-bits扩展到29-bits(扩展格式),并且CAN模块的开发或协议实现应支持这种报文格式。
因为有扩展的CAN标识符,这就能够象用于J1708那样,将通信关系的定义规则映射到CAN。部分标识符被用于指定一个8-bit源和一个8-bit目标地址(节点数)。
所以通过SAE J1939能够传输测量值和控制数据并配置元件。另外,还能够读或删除单个元件诊断数据,并对单个控制进行校准。
为了使这些成为可能,对于商用车方面的所有相关变量都要在SAE J1939中定义值域、分辨率、识别数等等。这些对基于J1587技术规格的大都实现。
因此,在J1939协议中,不仅仅指定了传输类型、报文结构及其分段、流量检查等,而且报文内容本身也做了精确的定义。SAE J1939在ISO/OSI层模型中的分布根据OSI层模型,
SAE J1939被分成几个层,每一层都分别有相应的文档说明。类似于所有实际上的现场总线协议,在SAE J1939上第5和6层是不需要的,因此没有定义。
SAE J1939的功能被分为如下几层:
第一层(物理层)描述在其它事物中与物理媒介的电子接口;
第二层(数据链路层)描述通过基于CAN 2.0B技术规格的CAN的数据通信;
第三层(网络层)主要描述两个网络部分间针对报文传输的网桥的功能,并且只与 J1939网桥实现相关;
第四层(传输层)基本上描述的是针对报文申请模式、确认传输和大数据块的分段传输的各种网络服务;
第七层(应用层)描述实际的数据(参数或带有值域的网络变量、分辨率、物理单元和传输类型)。每个报文无歧义地对应一个数(参数组数);
由于网络管理可以被当作一个分离的单元,能直达硬件(第一层),因此在这个层模型中,该模块是作为右手边的一个独立的功能块。网络管理基本上包括自动分配或决定节点地址(即插即用原则)。在SAE J1939中没有定义节点监视,因而必须在应用时通过循环报文实现。