李 辉,樊梁辉,卞寿超
(上海市质量监督检验技术研究院,上海 201114)
J1939 通信协议是由美国汽车工程协会制定发布,主要应用在CAN 接口为基础的硬件仪表和产品。CAN 作为一种先进可靠,功能完善,成本低廉的网络控制方式,CAN 总线广泛地应用在汽车工业、工业控制、安防监控、工程机械、电梯楼宇和医疗自动化等领域。标准的J1939 协议可达到250kbps 的通信速度[1]。J1939 协议是目前在商用车辆、舰船、轨道机车、农业机械,大型发动机和BMS 系统中应用最广泛的应用层设备通信协议。在工程机械及汽车应用中需要对大量的压力仪表进行计量和校准,不同于传统本地显示压力仪表和工业变送器,压力仪表本身并不具备本地显示和环路电流输出的功能,并且压力仪表与温度仪表、流速仪表、液位仪表及其它工况仪表紧密的安装在设备内部,只能通过ECU 专用设备(J1939 协议)进行诊断和读取数据[2]。
J1939 报文中详细定义了报文传输管理参数组中编号的定义,协议的通信层次结构为:协议基于CAN 总线物理介质,CAN 底层协议属于数据链路层和物理层,J1939 协议属于应用层协议。J1939 协议规程中对参数组、参数组编号、报文、协议数据单元、数据页、协议数据单元格式和特定协议数据单元都做了详细的定义和介绍[3,4]。J1939 的报文地址包括源地址和目标地址,其中目标地址包括特定目标地址和全局目标地址,在整个系统中可分配的地址数目最大不能超过256 个。在CAN 总线上,CAN 帧信息,由一个节点发送,其他节点同时接收。每当总线上有帧信息时,节点都会把滤波器的设置和接收到的帧信息的标识码进行比较,节点只接收符合一定条件的信息,对不符合条件的CAN 帧不予接收而只给出应答信号。CAN 控制器的工作原理包括:接口管理逻辑、CAN 核心模块、发送缓冲器、验收滤波器、接收FIFO 和工作模式几个部分。J1939 协议在应用的过程中,CAN 硬件接口电路的保护器件也起到至关重要的作用,一般包括:工模扼流圈,ESD 保护元件和CAN 总线网络保护器。以保证在J1939 协议应用的过程中不受到干扰的同时,也不干扰其它的电子元件[5]。
在工程机械及汽车压力仪表数据采集的过程中,需要将前端仪表J1939 协议的数据解析为串口数据,通过modbus RTU 协议由单片机、PLC、组态屏等主控读取,了解具体 SPN 解析方法,就可以方便地完成项目开发。模块、仪表参数使用保持寄存器区,并细分为4 个功能区,包括:常用参数区、当前故障码区、历史故障码区和参数配置及操作区。常用参数区包括如下内容:modbus 寄存器地址、SPN 码、数据长度、精度bit、偏移、范围、默认数据和标签备注信息[6]。由于需要计量的参数主要包括压力和温度,读取数据具体信息为:
modbus 地址-SPN 码-标签备注
40015 110 发动机冷却液温度
40016 174 燃油温度
40017 175 发动机油温
40018 52 发动机中间冷却器温度
40019 94 燃料输送压力
40020 98 机油油位
40021 100 机油压力
40022 109 冷却液压力
40023 111 冷却液液位
40028 108 大气压力
40029 172 进气口温度
图1 一体化OCS控制器界面Fig.1 Integrated OCS controller interface
40030 81 柴油微粒过滤器进气压力
40031 105 进气歧管1 号温度
40032 107 空气过滤器1 压差
40033 173 排气温度
40037 127 变速器油压力
40038 177 变速器油温度
40039 157 喷油器计量导轨1 压力
40040 1349 喷油器计量导轨2 压力
40042 441 辅助温度
40043 1387 辅助压力
除了上述只读信息之外,还需要对设备进行参数配置和保存,具体的数据信息为:
modbus 地址-说明-范围-默认-标签
43001 地址 1-254 1 用户设置的地址
43002 波特率4800bps ~57600bps 9600
43003 油压、水温、发动机总时间显示方式 动态
43004 动态显示间隔 100-500
43011 请求历史故障代码 写入1 则请求
对于上述modbus 转J1939 协议扩展模块可以有效地接入工程机械及汽车设备,但是如果需要收发的数据字节数大于256 个字节,模块自身性能的限制,无法实现快捷的数据采集,并且在运行过程中无法修改J1939 的PGN 参数组对象,并且扩展模块不支持J1939 的多包传输协议。对于常规PLC 而言,PLC 外围只具有串口、网口和USB 接口并没有支持J1939 的CAN 接口。此外,扩展模块与PLC 是通过modbus RTU 协议进行连接,此时开发人员还需要对modbus 寄存器地址进行二次对接,又增加了压力仪表数据采集的集成难度,系统的复杂程度也随之增加,也加大了系统的整体故障率。在此种应用场合下,本身集成多种总线接口(CAN J1939)的OCS 一体化控制器在这种情形下就非常适合使用[7,8]。
图2 J1939的通信参数配置Fig.2 J1939 communication parameter configuration
图3 J1939的设备增加配置Fig.3 J1939 equipment increase configuration
以上述J1939 转modbus 的协议扩展模块为例,介绍一下在OCS 控制器上如何实现J1939 协议的参数配置。如需要采集40021 SPN 为100 的机油压力值,在OCS 控制器上启用CAN 接口的J1939 功能,然后打开上位机CSCAPE 编程软件进入Program 菜单的Network Configuration 选项中,可以对控制器的J1939 通信进行配置。配置J1399 总线控制的起始控制器地址为%R1000,其会占用连续的一系列寄存器用于J1939 协议的控制,具体设置如图2、图3 所示。
压力仪表参数组的定义如下:该参数组为发动机控制器1 参数组。J1939 协议对该参数组的定义为数据长度为8 字节,数据页码为0,PDU 格式为240,J1939 协议默认优先级为3,参数组编号为61444。根据上述资料,在编程软件中新建的PGN 中配置如下:PGN 参数组编号:61444,Priority 优先级为默认的3,Source Address 源地址为10,Destination Address 目的地址为0,Number of Data 为8(接收8 个字节长度的数据),Mapping Resister 为1,即将接收到的数据放置在OCS 控制器从%R1 开始的连续寄存器中,再点击“OK”完成配置[9-11]。
图4 压力仪表数据的格式转换Fig.4 Format conversion of pressure meter data
通过上述的操作,已经把前端压力仪表的数据放置在%R1 开始的连续8 个字节的寄存器中,首次上电时把1赋值给%R1000,启动J1939 协议,把第4 ~5 个字节的数据传送到%R11 寄存器中,然后再进行int 转real 的整数转浮点数操作,并将结果放置在%R15 寄存器中。
本文阐述了应用modbus 转J1939 协议转换扩展模块和OCS 控制器实现机械设备及汽车设备的压力仪表计量研发过程。应用一体化OSC 控制器的CAN 扩展功能,实现灵活高效的采集设备的压力仪表参数。经测试比较,此计量应用方式成本低廉,功能稳定高效,可以稳定实现机械汽车设备的压力仪表计量,达到了预期的设计效果。