APP下载

基于STC8A8K+MS5837的高精度船舶吃水监测系统的设计

2021-08-23陆金金朱金善

计算机测量与控制 2021年8期
关键词:下位水深上位

裴 谕,陆金金,朱金善,田 园

(1.大连海事大学 船舶电气工程学院,辽宁 大连 116026;2.大连海事大学 航海学院,辽宁 大连 116026)

0 引言

散货是指不加包装的货物,如煤炭、谷物、矿砂、盐、水泥、河沙等大宗货物。国际海上货物运输中,由于散货船货运量大,货源充足,航线固定,装卸效率高等因素,散货船已成为运输船舶中的主力军。2017年全球1万载重吨以上的船舶,共计25 714艘,其中干散货船9 992艘、占38.85%[1];2019年初,全球干散货船舶总计运力8.4亿载重吨,占货船总计运力的42.6%[2]。可见散货船运输在经济发展中的作用日益重要。

随着船舶大型化的发展,很多散货船在锚地进行驳卸,有些港口泊位前沿水域流速也较大,例如,阿根廷拉普拉塔河、巴拉那河沿岸港口,孟加拉吉大港等港口的最大流速可达 7~8 kn;我国部分港口流速也较大,如宁波港、舟山港、曹妃甸港等港口的流速可达 4~5 kn[3]。因此,流速引起的船体下沉,致使水尺计重过程中六面吃水的读数大于静水中船体的实际吃水,从而影响到水尺计重的精度[4]。

散货船装卸货量需要通过检测船舶吃水变化来计算,其测量精度是一个重要问题。以7万吨级的满载散货船、存在2 cm的吃水误差为例,由船舶吃水值带来的误差就可达250吨[5],仅这一项误差就达3.5‰,占许用误差总量(5‰)的70%。目前检测船舶吃水通常采用六面水尺观测法、超声波或激光测量距仪得到船舶吃水数据,但精度都不够高,如:水下超声波检测船舶吃水,测量精度为2.8 cm[6];基于单波束仰扫回波信号强度处理的船舶吃水检测,测量精度为1 cm[7],需要将单波束声纳安装在在船舶底部;利用激光测距检测船舶吃水,测量精度为1.5 mm[8];六面水尺观测法是目前比较常用的方法,通过测量人员乘坐小船或攀爬软梯进行读数,这种方法有3个主要的局限性:1)受风浪的影响较大,读数准确度较低;2)目测吃水较为不便,观测人员要从软梯爬到吃水处读取,既有一定的危险又不准确;3)速度慢、效率低,不便于持续掌握船舶吃水(下沉量)的动态变化。观测吃水的精度为1 cm或0.6英寸。并且安装方式过于复杂,需要增加操作,实时性差。

在此背景下,本文提出一种基于高精度压力传感器MS5837的船舶吃水监测系统的设计,通过测量压力变化间接检测船舶吃水变化,测量精度可达0.1 mm。本系统可安装在龙骨板下缘,也可以安装在船舷水尺附近。因后者安装实施较为简单、灵活,故本文也将围绕后者进行说明。

1 系统结构及原理

监测系统原理如图1所示,上位机位于甲板上,以Cortex-A9处理器为核心,搭载了Linux操作系统,并且带有LCD触摸屏用于人机交互,同时可以进行数据存储,带有USB接口可将数据取出以供后续研究。上位机内置大功率12 V锂电池,可供整个系统连续工作24小时以上。下位机可安装在龙骨板下缘或船舷水尺附近,包含主板和多种传感器以及固定装置,封装在不同的防水壳体内,通过防水电缆相连。其中,压力传感器是本系统核心;电磁铁和永磁铁将压力传感器固定在船舷上以消除波浪和流对传感器的扰动。

图1 监测系统原理图

若将下位机压力传感器安装在龙骨板下缘,则水深测量值h即为船舶吃水深度;若将其安装在船舷水尺附近,则需结合下位机压力传感器相对于船体龙骨板下缘的垂直距离hOFF,得到船舶吃水深度为“hDRAFT=h+hOFF”。一般情况下,把下位机压力传感器固定在船舶空载吃水hLIGHT(hLIGHT为船舶空载时水线面与船体龙骨板下缘的垂直距离)处,则船舶吃水为“hDRAFT=h+hLIGHT”。

针对本系统的应用场景,可忽略hOFF,在装卸货开始前,将压力传感器固定在水面以下h1处,装卸货完成时测得水深为h2,则吃水变化为“Δh=h2-h1”。为了方便比较数据,可以将h1设置成固定值,即深度h的参考点。此处引入海平面传感器,该传感器到主板之间的电缆长度是L1,压力传感器到主板之间的电缆长度是L2,满足L2>L1,确保压力传感器位于水面以下。首次测量时,将电缆一端的下位机紧贴着船舷往下放,当海平面传感器的探头接触到海水时,其输出的电压信号会产生突变,此时压力传感器所处深度为L2-L1,数值上等于参考点深度h1。由于电缆长度在出厂时已经确定,所以h1的值也确定。

2 吃水监测系统下位机设计

2.1 下位机硬件设计

下位机中的主板是以STC8A8K单片机为核心的一块电路板,STC8A8K其机器周期约是传统8051单片机的1/12,运行速度比后者快约12倍,内置5个定时器,并且提供了丰富的数字外设,如多路UART接口、 IIC和ADC接口等。设计的下位机主板通过I2C接口来读取MS5837的数据,I2C是一种多向控制总线,多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源,这种方式简化了信号传输总线接口。此外,通过ADC接口来读取海平面传感器输出的电压值;通过RS485接口来和和上位机通信;通过STC8A8K单片机的2路数字量IO口,经2路继电器来控制电磁铁的通断电。下位机经电缆由上位机的12 V锂电池供电。STC8A8K的UART接口为TTL电平,这里采用两片MAX485来进行TTL和RS485之间的电平转换,从而上下位机之间可以进行较长距离的全双工通信。

下位机主板的功能模块如图2所示。

图2 下位机功能模块图

本监测系统下位机采用两片MAX485来进行TTL和RS485之间的电平转换,一路接单片机的RXD引脚,另一路接单片机的TXD引脚。此外,单片机使用两路IO口来分别使能传输,当/RE为逻辑0时,芯片工作在接收状态,当DE为逻辑1时,器件处于发送状态,从而启停数据的传输。

图3 RS485工作原理图

根据不同船舶的吃水深度范围的要求,可选择MS5837的不同型号,例如本系统选用的MS5837-02ba,工作范围可达水下20 m,精度为0.01 mbar,这种基于 MEMS 的传感器包含一个高线性压力传感器,该传感器具有超低功率 24 位数字输出 (I2C),可用于高分辨率测量。本系统中,将MS5837焊接在一个直径2 cm的圆形电路板上,用胶密封在一个316不锈钢圆柱腔体内,MS5837的4各引脚通过电缆从腔体的另一端引出。海平面传感器是自制的传感器,图4所示,防水壳的一端固定两根316不锈钢钢针,两根钢针各自连接两根导线,接到单片机的一路ADC口,该接口另接一个分压电阻至Vcc,基于空气和海水的不同导电率,当钢针从空气进入海水中后,ADC引脚和GND引脚之间的阻抗会产生突变,从而ADC引脚的电压突变STC8A8K检测到这个电平的突变立刻通知上位机,压力传感器MS5837已经到达指定的初始位置。

图4 海平面传感器工作原理图

STC8A8K的两路IO口各接一个MOS管M3400,将电流放大从而驱动继电器,这也是为了保护单片机避免大电流冲击导致运行不稳定或者损坏,因为电磁铁的工作电流达5 A,通电瞬间会对系统有较大的冲击。

主板上的STC8A8K、MS5837等芯片需要3.3 V电源供电,而其它元器件需要5 V电源供电,这里采用金升阳公司的DC/DC降压模块7805L将12 V电平转换成5 V,该降压模块效率高达75%以上,体积小,所需外围器件少,非常适合移动设备。此外,采用AMS1117将5 V转成3.3 V,该芯片采用SOT-23封装,输出电压浮动范围在1%以内,其最大可提供800 mA的带负载能力,完全满足主板上STC8A8K、MS5837等芯片的供电需求。

2.2 上位机和下位机软件设计

上位机采用QT进行应用软件开发,软件设计主要包括人机交互和后台程序设计。Qt是一个跨平台C++图形用户界面应用程序开发框架,提供了丰富的类库,此外,不同于Visual Studio,Qt提供了一种称为 signals/slots 的安全类型来替代回调,这使得各个对象之间的协同工作变得十分简单。Qt对应的集成开发环境为Qt Creator,两者共同构成的Qt SDK,包含了开发跨平台应用程序所需的全部功能。

从人机交互的角度,用户可以在UI界面上设置采样时间,点击“start”,上位机开始读取下位机发送过来的压力、深度、温度信息,将这些信息显示在LCD屏上,同时也存在上位机本地的数据文件中。点击“stop”后停止通信,用户可以将U盘插入上位机的USB接口,点击操作界面中的“copy”,即可将数据文件复制到U盘中,以便后续研究。

上位机的UI界面功能由Qt提供的QWidget类来实现,在Qt Creator的开发环境中可以在QWidget中方便地添加按钮、文本框等控件类的成员,设计者可以用少量代码即可实现交互功能。后台程序主要实现串口通信,放在QObject类中实现,在QObject的成员函数run()中不断地读取下位机的下位机的信息,成功读取一帧数据后,发送signal给QWidget的slot函数,该函数将读到的数据显示和存储。

下位机的程序流程如图5所示,首先进行串口、定时器和传感器的初始化,然后读取大气压强,接着判断采样时间是否已到,若否,就等待,若是,则根据接收到的用户设置信息来修改继电器状态和采样时间,然后读取压强和温度并计算海水深度,最后将压强、温度和水深等数据发送至上位机。

图5 软件流程图

MS5837-02ba内部含有压力和温度检测模块,下位机程序读取压强和温度并结合本系统相关参数计算压力传感器所处位置的水深,后文简称水深,以及海水密度等物理量,然后将所得数据发送给上位机,并且可以借助大气压强进行水深测量的调零。

下位机给上位机发送数据的时间间隔可由上位机来设置,后文将此发送间隔称为采样时间,本系统采样时间最小可以设置为100 ms。

其中,读取压强、温度和计算水深是本系统软件设计的重点。本文所提水深以海平面为零,向下为正方向。

2.2.1 读取数据并计算压强和温度

首先从压力传感器中读取标定数据C1~C6,该数据为工厂在基准温度为20 ℃时预设的参数,分别代表压力灵敏度、压力偏移、压力灵敏度温度系数、压力补偿温度系数、基准温度和温度系数。

然后读取当前MS5837的压强和温度原始数据D1和D2,该数据为24位二进制数,是不可直接使用的压强和温度数值,需要处理,由:

dT=D2-C5*28

(1)

得到当前温度与基准温度的差值,由:

TEMP=2000+dT*C6/22

(2)

得到实际温度TEMP(℃)。MS5837输出的压强数据受温度的影响,需要修正,由:

OFF=C2*217+(C4*dT)/26

(3)

得到温度偏移量,然后结合:

SENS=C1*216+(C3*dT)/27

(4)

计算温度灵敏度系数,最后由:

P1=(D1*SENS/221-OFF)/21

(5)

得到实际压强P1(mbar)。

当压力传感器所处环境温度高于20 ℃时,P1即为压强真实值;当返回温度低于20 ℃时,需要修正测量结果,由:

Ti=11*dT2/235

(6)

OFFi=31*(TEMP-2000)2/23

(7)

SENSi=63*(TEMP-2000)2/25

(8)

TEMP2=(TEMP-Ti)/100

(9)

得到实际温度TEMP2( ℃),由:

P2=(D1*SENS2/221-OFF2)/215/100

(10)

得到实际压强P2(mbar)。

2.2.2 算法优化

式(1)~(10)中的变量都是32位,而STC8A8K的开发环境对变量的支持最大为32位。为了避免乘法或加法运算可能导致的数据溢出,现以温度高于20 ℃的情况为例,可将计算公式(1)、(3)~(5)合为一式,得到式(11):

P1=(D1/28)*(C1/28)/23-(C2*23)+(D1/28)*

(C3/28)*(dT/28)/218-(C4/28)*(dT/28)/24

(11)

上式同时节省了运行时间,理论上,依次计算式(1)、(3)~(5)需要95个机器周期,而式(11)仅需63个机器周期。为作进一步优化,可用移位运算替换乘除运算,将式(11)改写为(12):

P1=(D1>>8)*(C1>>8)>>3-(C2<<3)+

(D1>>8)*(C3>>8)*(dT>>8)>>

18-(C4>>8)*(dT>>8)>>4

(12)

由式(12)计算得到压强P1仅需40个机器周期,这大大节省了运行时间。

2.2.3 计算船舶吃水变化

将下位机安装在船舷水尺附近,测得装货前压力传感器所处位置水深为h1,装货后所处水深为h2,由:

h=h2-h1

(13)

得到吃水变化。

3 上位机与下位机通信

配置下位机串口3使其工作在模式0,此模式一帧信息为10位:1位起始位,8位数据位,1位停止位,波特率可变,不使用流控制,无奇偶校验位。使用定时器3作为波特率发生器,波特率设置为115 200。上位机和下位机之间的数据都是ASCII码。数据传输格式如表1、2所示。

表1 下位机发送信息的数据格式

表2 上位机发送信息的数据格式

4 应用实例

为了检验本文设计的吃水监测系统的效果,我们在停靠于大连港的系泊船“育鲲”轮上进行了实测。工作人员将下位机和传感器沿着船舷放到海平面,当传感器接触到海平面时,会返回给上位机信号,此时点击上位机触摸屏上的开始按钮,则监测系统开始正常运行。之后将传感器继续向下,放到海平面以下几十厘米处,将电磁铁贴在船体,系统正常工作,上位机实时显示此时的水深信息。

图6(a)为“育鲲”轮外舷船中吃水实测数据曲线。在0 s时,将本系统的下位机沿着船舷缓慢向下移动9 s左右下位机的压力传感器到达海平面临界点并继续向下移动,12 s左右到达指定位置,13 s时,下位机压力传感器稳定。将图6(a)中0~13 s的曲线细节放大,如图6(b),是下位机压力传感器从开始工作到达到指定位置时的水深变化曲线。

图6 水深测量数据曲线

观察图6(a),可以发现下位机固定后,受波浪和流的影响,波形存在小范围的变化,这种微小的变化主要是由于船体周围流速的变化导致船体下沉的细微变化,这说明该系统不仅能够满足散货船水尺计重时对船舶吃水精确测量的要求,而且还可以广泛应用于船舶航行时(尤其在受限水域航行时)对船体下沉量的监控,从而为保障船舶在受限水域航行时的通航安全提供技术支持。

5 结束语

本文利用高精度压力传感器,结合液体压强与深度的关系解决了船舶吃水测量精度低、观测不便、安装费力等问题,并将水深信号转换为便于存储与分析的数字信号,建立采集时刻的数据库,可以供后续研究使用。对比其它船舶吃水检测系统可知,本系统可得到更精确的测量数据,测量精度为0.1 mm,且数据存储功能也为后续开展散货船水尺计重及船舶通航安全等方面的研究提供了方便。设计的吃水监测系统不仅可以测量水深,同时可以实时测量水温、压力、海水密度等参数值。整个监测系统软硬件结合,安装方便,功能强大,测量精度高,实时性更强,并通过实验室测试以及实船测试都得到了很好的效果。

猜你喜欢

下位水深上位
基于UDS协议的CAN BootLoader的开发与验证
某MT车型无法启动和怠速启停失效问题分析
发射机房监控系统之下位机
特斯拉 风云之老阿姨上位
趣图
基于ZigBee和VC上位机的教室智能监测管理系统
围观党“下位”,吐槽帝“登基”
国内首套l0米水深海管外防腐检测装置研发成功
基于VC的PLC数据采集管理系统
航道水深计算程序的探讨