黄新星
基于电动船锂电池组的远程监控系统设计
黄新星
(武汉长海高新技术有限公司,武汉 430074)
针对新能源电动船载动力、机电设备在船舶位置不定的情况下,售后维护成本高以及供应商难以及时分析现场设备运行状况等现实问题,研制了一种船载锂电池设备远程监控系统,实现远程电池组状态监测、电池组数据云端存储及分析、电池组相关设备控制。该系统为电池组相关应用人员提供远程实时获取锂电池组运行状态信息和远程管理锂电池组的接口,有效降低设备售后成本和提高设备运维效率,同时有效解决现场BMS硬件计算资源有限、数据存储能力有限、无法应用更高精度更加复杂的SOC估算等算法的问题。
电动船锂电池组;TDengine;WebService;MQTT
随着新能源在船舶领域的应用,电池动力船作为新的船型大力发展起来。电池及其配套的电池管理系统成为电池动力船的核心部件。随着4G、WiFi等无线技术的兴起,各种智能传感器、控制器、嵌入式设备等通过移动通信技术接入互联网,方便人员远程实时监控设备的运行情况,对业务进行预测和预警,帮助企业进行科学决策、节约成本并创造新的价值[1]。本项目设计一套针对电动船锂电池组的远程监控系统,实时监测船用锂电池组状态数据并通过4G网络上传服务器,便于人员远程对电池组运行状况进行实时查看分析,同时人员通过电脑或手机可以下发控制指令给远程电池组管理系统,实现远程电池组数据监测管理、电池组数据云端存储及分析、电池组相关设备控制。该系统实际使用所积累的动力锂电池组的大数据,将为船载电池管理系统研发改进、电芯优化设计提供很大便利。
船用锂电池组远程监控系统组成如图1所示。
图1 系统组成
船用锂电池组远程监控系统包含船载控制器及软件、服务器端软件和客户端软件。船载控制器基于Linux系列ARM核心板,包含CAN、RS485、以太网等通讯接口,支持4G、wifi等无线通信,支持位置定位和外接存储设备。该系统中控制器通过CAN总线与船载电池组设备连接,实时监测电池运行状态数据帧并压缩后上传至ECS服务器;同时订阅MQTT控制指令消息并通过CAN总线下发。
服务器选用阿里云的ECS服务器,部署FTP服务器、MQTT服务器和时序数据库,运行数据分析服务和WebService服务。服务端接收到数据后,通过数据分析服务对报文进行解析分类解包、组包将数据高并发写入TDengine时序库。客户端发送请求内容,WebService服务收到客户端请求后查询TDengine时序库,遵循SOAP协议通过XML封装数据,然后由Http协议来传输数据给客户端显示。客户端通过MQTT协议发送控制指令到MQTT服务器,设备端从MQTT服务器订阅相应的控制指令消息,实现对相关设备的控制。
客户端通过电脑以及手机移动端可以远程查看电动船锂电池组状态及下发控制指令。
系统架构如图2所示。
图2 系统架构
WebService技术向外界提供一个可以通过web进行调用的API,是分布式的服务组件,可通过互联网上的标准协议(如HTTP、XML和SOAP)为不同企业提供数据和业务逻辑服务,是一种跨编程语言和跨操作系统平台的远程调用技术[2]。WebService采用可扩展的标记语言XML表示数据的基本格式,保证无论何种数据都可以被自动转换成XSD类型而与平台无关;数据传输采用HTTP POST方式;数据传输格式采用简单对象访问协议(SOAP)调用远程服务,SOAP协议定义了其消息格式以及通过HTTP协议的使用方法;使用WebService描述语言WSDL描述WebService及其函数、参数和返回值。通过WSDL说明书,就可以描述WebService服务端对外发布的服务名称、接口方法名称、接口参数、方法返回值等[3]。
gSOAP通过C/C++实现基于soap协议的WebService服务。在Linux系统下通过configure、make、make install的简易安装过程得到soapcpp2工具。主要开发步骤如下:
1)编写服务接口API头文件mysoap.h
#include
intns__selectData(std::string devname,std::string startts,std::string endts, int curpage, int pagesize, std::string& result);
2)使用soapcpp2工具和服务接口头文件生成API源代码和wsdl文件
WSDL文件中包含WebService对外地址、提供的方法接口、方法参数和方法返回值信息。客户端通过url地址(如http://192.168.1.120: 23410/ns? wsdl)访问Web服务器上的WSDL文件。
3)服务端的实现
除上述生成的依赖文件外,服务端的实现与服务接口头文件中声明的函数相同,仅多了一个当前的soap连接的参数。
/// ns__selectData 接口函数名称
/// param soap 当前的soap连接
/// param devname 接口参数
/// param startts接口参数
/// param endts接口参数
/// param curpage接口参数
/// param pagesize接口参数
/// param result接口返回值
int ns__selectData(struct soap *soap,std::string devname,std::string startts,std::string endts, int curpage, int pagesize, std::string& result);
4)客户端访问
服务端将wsdl文件的地址提供给客户端,客户端的XML请求格式如下:
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种根据发布/订阅(publish/subscribe)模式的轻量级通讯协议,该协议工作在 TCP/IP 协议族上。MQTT 协议是为硬件性能低下的远程设备以及网络状况不好的情况下而设计的发布/订阅型消息协议,最大特点是能够以很少的代码和有限的带宽,为远程设备供给实时可靠的消息传输。MQTT使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合[4]。MQTT提供三种消息发布服务质量:“至多一次”,会发生消息丢失或者重复;“至少一次”,确保消息到达,但消息重复可能发生;“只有一次”,确保消息到达一次。
本系统选择开源MQTT服务器emqx。在ECS服务器端采取二进制包安装方式安装部署emqx服务,简要步骤如下:
1) unzip emqx-ubuntu16.04-4.3.11-amd64
2) cd emqx
3) ./bin/emqx start
基于系统控制指令数据传输、MQTT 协议的特点,设计了系统控制指令传输流程:用户通过客户端界面将控制指令发布到 MQTT服务器,MQTT服务器根据设备端订阅的情况将控制指令推送给设备端进行处理。MQTT传输架构如图3所示。
图3 MQTT传输架构
在不同的地点分布着多个监控设备,系统需对各种监控的数据汇总,进行计算和分析。每个监控设备监测的数据都很规则,每一条记录都有设备ID、时间戳、监测的物理量,还有与每个设备相关的静态标签(如设备ID)。每个设备监测的数据点是时序的,是一个数据流。该监测系统所产生的数据数据具有明显的特征:1)数据是时序的,一定带有时间戳;2)数据是结构化的;3)数据极少有更新或删除操作;4)无需传统数据库的事务处理;5)相对互联网应用,写多读少;6)用户关注的是一段时间的趋势;7)数据是有保留期限的;8)数据的查询分析是基于时间段和设备的;9)数据量巨大,一天监测的数据就可以超过5亿条。由于数据记录条数巨大,数据的实时写入无法达到要求,查询分析无法实时响应,导致用户体验度降低。
TDengine 是一款专门解决物联网大数据市场需求和技术难题而推出的高性能时序数据库,融合集成了数据库、消息队列、缓存、流式计算等,不用再集成第三方应用软件,使得应用开发和数据库维护变得更加容易,降低了成本[5]。为提高压缩和查询效率,TDengine 采用列式存储。基于时序数据特点,TDengine 将每一个监测点的数据作为数据库中的一张独立的表来存储。由于不同数据监测设备产生数据的过程完全独立,每个设备只产生属于自己的数据,一张表只有一个写入者,就可以采用无锁方式来写入一张表的数据,就能大幅提升写入速度。分析本项目特点和数据使用方式,进行了以下优化设计方法:
1)包含模拟量,数字量,报警,系统日志等类型数据,同类型使用一个超级表集合;
2)单个设备数据点对应单个表存储;
3)批量数据写入,最大化SQL字符串拼接,提高数据写入效率;
4)采用多线程并发写入数据表方式,进一步提高数据写入速度。
TDengine数据库建模大致方法如下:
(1)数据库的创建
create database testdb keep 365 update 1;
keep:数据保持最长天数,超过期限数据库会自动删除数据。update:是否更新相同时间戳数据。若为0,若需插入的数据的时间戳已存在,则该条需插入的数据被废弃。保留update功能,方便后期对坏数据做二次处理。
数据库参数配置如图4所示。
图4 数据库参数
(2)超级表结构的设计
为了更好的管理一个设备一张表,设计了超级表。TDengine是结构化的数据库,需要提前设计表结构。设备很多或动态接入的时候,无法提前为每个设备创建表结构。因此同种设备创建一个超级表模板。
use testdb;
CREATE TABLE if not exists stest(ts timestamp, param1 double,param2 double,param3 double) TAGS(devID binary(20));
(3)子表插入语句
INSERT INTO dev01 USING stest TAGS ('dev01') VALUES ('2021-10-10 22:37:36.100',240,5,1000);
采用超级表模板的方式不需要提前创建设备子表,当有数据产生时,TDengine会自动创建设备子表。
该系统成功部署后,电池组应用相关人员通过电脑即可远程查看电动船电池组运行状态。通过对电池组工况、温度及SOC等的分析统计,得到电动船的电池电流工况;掌握电池温度信息,提高船舶运行的安全性;掌握电池SOC跳变的数据,有助于电池算法的完善和优化。
图5 电池组温度分析
图6 电池组电流工况分析
图7 电池组SOC工况分析
图8 SOC跳变
[1] 荣雪琴, 刘勇, 刘昊, 等. 基于时序数据库的电力运维系统关键技术研究[J]. 电测与仪表, 2018, 55(9): 15-51, 83.
[2] 闵建. 基于WebService的智能电测仪器HMI实现信[J]. 息化研究, 2020, 46(6): 68-74.
[3] 卫祥, 罗发政, 杨浩, 等. 基于WebService的企业采购业务架构的设计与实现[J]. 自动化技术与应用, 2020, 39(2): 33-40, 44.
[4]叶康林, 钟瑾瑞, 焦冠文, 等. 基于MQTT协议的生产实时数据传输技术应用研究[J]. 信息系统工程, 2021(11): 65-68.
[5] 董雪, 高远, 敖炳. 基于TDengine的智能电网监控系统数据存储方法研究[J]. 电气应用, 2021, 40(8): 68-74.
Design of remote monitoring system based on lithium battery pack of electric ship
Huang Xinxing
(Wuhan Great Sea Hi-Tech Co.,LTD., Wuhan 430074, China)
U674.92
A
1003-4862(2024)03-0032-04
2023-06-18
黄新星(1984-),女,硕士。研究方向:计算机应用。E-mail: 24450133@qq.com