内河船机在线监测系统数据缓存与恢复方法
2021-08-04徐小凯金华标
徐小凯,金华标
(武汉理工大学 能源与动力工程学院,湖北 武汉 430063)
随着国内船舶运输业的迅速发展,船舶大气污染物排放量显著增加。在当前日益严格的大气污染防治形势下,大幅减排船舶污染物、进行有效的排放监测监管的需求极为迫切。[1]针对这一问题,武汉理工大学开展排放物在线监测系统研究,并完成了内河船机在线监测系统硬件搭建及网络后台平台的开发。[2]然而,内河船机监测系统数据的无线传输是通过移动通信网络进行的,对于非远洋类船舶[3],由于在中国的近海范围和大多数内河航区上移动通信网络已较为发达,因而可以通过移动通信[4]进行无线传输。但是船舶在偏远的内河航区行驶时会有信号较差或没有信号的情况,这将会造成数据的丢失和不连续。[5-6]针对这种情况,本文介绍了一种基于利用外置SD卡进行数据缓存和恢复的方法,并通过合理的软硬件设计实现数据传输的完整性。
1 内河船机在线监测系统
1.1 系统原理
内河船机监测系统整体原理框图如图1所示,其由数据采集模块和无线传输模块组成。数据采集模块用于获取主机ECU和传感器的数据,可采集的信号包括:模拟信号(4~20 mA)、数字信号(控制局域网(CAN)总线/串行总线),并重定义协议后以CAN扩展帧形式汇总在CAN总线上。
图1 内河船机监测系统整体原理框图
无线数据传输模块用于解析数据和数据的无线发送,此处选用EC20-CER2.0模块(以下简称EC20),EC20为嵌入式的4G通信模块,与主控芯片(MCU)通过串口进行通信。与数据采集模块通过CAN总线进行通信后,MCU解析打包并通过控制EC20经由无线网络传输至岸基软件管理平台。[7-8]系统运行过程中,若船舶行驶至信号较弱的航区,MCU判断信号差而无法传输时,数据将储存至外置SD卡中,当判断信号强度恢复后,数据恢复发送。
1.2 系统电气连接
系统通过24 V开关电源进行供电,数据采集模块安装在机舱内和船机诊断接口(OBD)或传感器相连,其中采集模块采集的数据包括机舱温湿度、排气管温度和排气管烟气参数(模拟量采集);通过OBD接口获得主机机旁控制单元(ECU)的相关参数、排气管NOx浓度。[9]无线数据传输模块由于需要向室外引出天线,故安装在驾驶室,并通过CAN总线和数据采集模块进行通讯,嵌入在无线数据传输模块上的EC20通过串口和MCU通信,其有2个作用,一个是通过其内置接收机获取实时的定位数据,一个则是通过指令以TCP/IP协议将数据打包发送至岸基。系统硬件连接示意图见图2。
图2 系统硬件连接示意图
2 SD卡储存模块
2.1 硬件设计
标准SD卡有9个引脚,工作电压约为3.3 V,支持2种串行通信模式:SD模式(使用SDIO接口,一种外设接口)、SPI模式(使用SPI接口,一种串行接口)。系统可以选择以上任一模式:SPI模式使用SPI通道且电路相对简单,但速度较慢(kb级);SD卡模式允许4线的高速数据传输,用于数据量大且速度要求较快的场合(Mb级),为满足传输速率要求,使用SDIO接口。
MCU自带标准的SDIO接口,SD卡连接原理图见图3。图3中,SDIO_均为引脚代号,左半部分为SD卡及管脚,右半部分为主芯片及扩展管脚,SDIO_D0、SDIO_D1、SDIO_D2和SDIO_D3为SD数据传输线引脚,SDIO_CK为同步时钟线,SDIO_CMD为命令引脚线。使用自带的SDIO接口驱动,在4位模式下最高通信速度可达48 MHz(分频器旁路时),最高每秒可传输24 M字节数据(分频系数为2)。
图3 SD卡连接原理图
SDIO支持3种总线模式,复位后,默认情况下,仅一位用于数据传输。初始化后,主机可以改变数据总线的宽度,包括4位传输或8位传输用于数据传输。
2.2 软件设计
SDIO模式下,SD卡和MCU的通信采用应答机制,单片机每发送一个命令,SD卡都会返回一个应答,以告知主机该命令的执行情况,或者返回主机需要获取的数据。
1)初始化设计。为实现SDIO驱动SD卡,利用相关指令对SD卡进行初始化,也为数据的读写做准备。
SD卡初始化流程原理图如图4所示,MCU上电后发送CMD0命令(对SD卡进行软复位)。之后发送CMD8命令(用于区分SD卡的版本,不同版本卡容量不同),且只有V2.0及以后版本的SD卡才支持CMD8命令。在发送CMD8命令的时候,其可以设置VHS位,该位值确定主机供电范围,当主机提供了SD卡不支持的电压范围时,SD卡处于非活动状态,将忽略所有的总线传输。之后发送ACMD41命令(确认卡的操作电压范围),并通过HCS位来告诉SD卡,该位值表示主机是否支持高容量SDHC卡(储存容量在2G以上的SD卡),当收到HCS=1时,初始化即完成。
图4 SD卡初始化流程原理图
2)SD卡读写操作。在SD存储器中,数据是以数据块的形式进行传输的。图5为SDIO多数据块读写,其主要流程为:从机在收到主机相关命令后,开始发送数据块给主机,所有数据块都带有CRC校验值(CRC由SDIO硬件自动处理),单个数据块读的时候,在收到1个数据块以后即停止,不需要发送停止命令(CMD12)。但多数据块读写时,SD卡将一直发送数据给主机,直到接收到主机发送的停止命令(CMD12)。数据块写操作同数据块读操作基本类似,只是数据块写的时候,多了一个繁忙判断,新的数据块必须在SD卡非繁忙的时候发送。
图5 SDIO多数据块读写
3)程序流程。参考《EC20通用AT指令手册》,MCU与EC20的通信主要通过MCU向串口发送AT指令。网络信号强度的获取则通过向EC20发送问询指令“AT+CSQ”,用来获取信号响度,获得返回值rssi。rssi表示信号强度指示,用来判定信号链接质量,rssi使用无量纲单位dBm,rssi与信号功率P(mW)的公式如下:
rssi=(10log10P+113)/2。
(1)
通过查阅《EC20通用AT指令手册》。可得到rssi值与信号功率P对应关系,并进行信号强度分级。需注意的是当rssi=99 dBm时,表示检测无信号,需要检查SIM卡或天线是否正确安装。
系统运行过程中,MCU周期性发送指令查询网络强度,若船舶行驶至信号较弱的航区,MCU判断信号较差至无法传输时,数据将携带时间戳储存至SD卡中,当判断信号强度恢复后,本地缓存数据将根据时间顺序和当前数据同时进行无线发送。数据缓存流程图如图6所示。
图6 数据缓存流程图
按上述流程,SD卡初始化过程及读写过程均封装在函数内,并在主函数内调用。通过发送CSQ指令,返回信号强度信息存入缓存数组中,同时将信号强度进行分级以作为判断条件。通过持续判定信号强度,当需要本地缓存时,数据动态写入SD卡扇区中;恢复发送时,若SD卡存在本地缓存数据时,将和当前数据一起无线发送出去,同时刷新扇区。
3 功能测试
为了测试设计的系统性能,通过搭建功能测试平台,在实验室环境下进行功能测试,为了验证信号较差情况下数据的缓存和信号恢复后数据的重新发送,模拟数据可以设置为有规律的固定数据帧,同时模拟无线信号中断时,当前数据和历史数据应该可以被区分。
3.1 测试过程
在实验室内搭建的测试环境中,硬件包括1台PC机、1块无线传输板、1个24 V电源和1个USB/CAN转换器,软件包括Keil5,CANTest、网络调试助手及“花生壳”。给发送板上电使其在正常状态下工作,利用CANTest向CAN总线输入CAN信号以模拟采集的数据,MCU无线发送数据包,通过“花生壳”将本地PC端口映射至公网IP以模拟岸基的远程数据显示,设置对应的内网IP和端口,使数据在网络调试助手上显示。模拟数据发送中断状态(将卡拔出,或者拆掉4G天线),待20 s后恢复数据发送,利用网络调试助手验证缓存数据与发送数据的一致性。
正常工作情况下,MCU发送长度为72字节的数据包。且第2、3个字节数据由CAN总线上ID为0x1811273d的第5、6字节获取。通过控制在CANTest的发送功能中设置不同数据位来改变数据帧头两位字节数据,以区别当前和历史数据,在线状态时数据为0xAAAA,掉线状态时数据为0xBBBB。
3.2 测试结果
系统正常工作后,数据包的发送频率为1s,数据帧的第2、3个字节为标志位。正常工作状态发送0x1811273d(00 00 00 00 AA AA 00 00),使数据帧标志位为AA AA(模拟当前数据),并拆去4G天线,同时改变CAN数据,发送0x1811273d(00 00 00 00 BB BB 00 00),使数据帧标志位为BB BB(模拟历史数据),待20 s后恢复天线连接,发现数据以当前时间和历史时间交替发送出来。
4 结束语
本文内河船机排放监测系统使用外置SD卡储存电路来实现数据的缓存,并根据实时问询信号强度来实现恢复发送机制。通过验证,模拟信号丢失的情况下,数据可以缓存至储存模块中,且在信号恢复后,历史数据和当前数据可交替发出。