孙映璇,王海涛,李佳欣,吕佳慧,陈 苗
(广州新华学院信息与智能工程学院,东莞 523133)
随着制造技术的发展,产品的质量和性能也在不断提高,有些电池类产品对自身的气密性提出了很高的要求[1]。人们对电池气密性的要求越来越高,为了方便用户查询电池气密性的相关数据,通过设备之间的连接实现用户和仪器的交互。设备和仪器检测电池包的气密性后通过无线网络连接在移动端查询。在检漏仪运行过程中产生的数据和信息的存储可以通过软件实现。电池包气密检漏仪是测试电池包气密性的设备,是基于差压原理的空气泄露测试仪,是利用压缩空气来检测产品的精密检测设备。除了能进行电池包的气密性检测之外,还能进行水冷系统气密性检测,工作过程中能进行一些简单的参数设置。检漏仪按下仪器开关之后会有四个按钮,包括:电池包气密检测、水冷系统气密检测、通道设置和系统设置,点击测试开始后会有测试界面,测试完成之后会显示测试压力和是否合格,以及测试的压力在合格压力的哪一部分。
Android 是一款基于Linux 开发的开源操作系统,一般被用于移动设备,由Google 公司和开放手机联盟进行开发。
JetPack是一套由谷歌公司开发的用于Android开发的组件库,用于处理由设备不同或Android版本不一致所导致的兼容性和差异性问题[2]。JetPack 的组件按类别主要可以分为四个大类:基础组件、架构组件、行为组件和UI 组件,每个类别主要包含的组件如图1所示。在这里主要介绍架构组件中的Room 组件和View Model 组件。Room 是基于SQLite 的抽象层,它可以方便地访问数据库,同时也可以充分发挥SQLite 的强大功能。ViewModel 是一个以生命周期方式存储和管理页面数据的视图模型,它能让数据在发生配置改变后继续留存。
图1 JetPack包含的组件
系统整体架构如图2 所示。架构中view 模块对应着系统开发的视图。Controller 模块为业务逻辑模块,它会直接与JetPack 工具库中的架构组件中的View Model 模块进行通信,由View Model模块更新数据,进而去更新视图使用通信的方式共享内存,这样避免了在控制器中保存按钮与文本框等大多数视图对象数据不一致问题,极大地优化了程序的逻辑,降低了编码出错概率[3]。持久模块对应着系统开发的数据库,由Controller 模块进行对数据库的管理。LT_Link为进行通信时所使用的协议,当在系统中输入电池包气密检漏仪的IP 地址和端口号时,系统将作为客户端与电池包气密性检漏仪上位机进行连接;当在电池包气密性检漏仪上位机中输入系统所在的IP 地址和端口号时,此时的系统将作为服务端为电池包气密性检漏仪提供服务。
图2 系统整体架构
大部分上位机的总体功能可以分为接收数据和处理数据两个模块,包含的功能有发送指令、进行通信、数据接收、展示数据、存储数据和对数据进行处理[4]。电池包气密性检漏仪上位机查询系统的实现主要有四个部分:界面部分、通信模块部分、保存数据模块部分和数据库部分。系统整体的功能模块如图3所示。
图3 系统整体功能模块
SQLite 是一个不需要配置、不需要安装也不需要管理员的轻量级事务性的SQL 数据库引擎。占用资源低,支持大部分主流操作系统,同时能适应各种编程语言,且SQLite 文件格式稳定,可跨平台向后兼容,速度极快。因此本设计采用SQLite数据库。
测试开始时,仪器每隔一段时间传回一段数据到数据库中,根据不同的设备,储存在不同的Test 表中。Test 表包括id(编号)、time(时间)、date(日期)、Test_Type(测试模式)、Test_Result(测试结果)、Test_pressure(测试压力)、Voltage_Drop(压降)、Leak(泄露)等字段。id 字段是自动生成的,仪器每传回一段数据,编号便会累加,我们将id 设置为主键。Time 字段用于储存测试的时间。Date 字段用于储存测试当天的日期。Test_Type 字段记录当前测试的模式是否正确。Test_Result 字段记录当前测试结果是合格,不合格或异常。Test_Pressure 字段储存测试电池此时的压力值。Voltage_Drop 字段记录测试过程中的压降值。而Leak 字段则记录了当前电池泄露水平。
整体界面主要为实时显示检漏仪的测试数据,为测试人员提供方便。该部分的主要研究内容为,如何更好地将数据展示出来,以及在多台检漏仪连接的情况下,如何能分别显示仪器的实时数据或结果数据,能同时启动所有在连设备或者单独启动某台设备。此外,每个页面都采用了统一的设计规范使得产品视觉风格保持一致,同时可以保障良好的用户体验。整个界面主要分为四部分。这四部分的页面跳转的实现我们采用了Android Jetpack 程序库的Navigation 组件。先设计Fragment 布局以及存放NavHostFragment 的布局,然后设置Navigation 的XML 配置文件以及Activity 的ID,最后在逻辑代码中实现页面跳转的逻辑。由于部分页面包含内容过多,无法一屏展示完全。所以我们使用了ScrollView 来实现上下滚动的效果。第一部分如图4(a)是设置查询,由于客户端主界面功能比较繁杂,不利于查看。所以配置了view-Pager2 实现分页展示。主界面包含了8分页,分别是首页、时间/单位、压力参数、测试参数、通讯设置、综合设置、仪器信息、S20C 配置。可根据不同的分页使用不同的功能。第二部分如图4(b)是单机测试,对单台仪器进行测试得出实时数据。第三部分如图4(c)是联机测试,目前支持最多8 台仪器组成,每个区域构成与“单机测试”界面的主体部分类似。第四部分如图4(d)是数据查询,主要是数据的展示,保存数据时支持.CSV格式和excel文档。
图4 系统页面展示
3.3.1 连接方式
连接方式在需求分析中确定本软件需要作为TCP 的Server 端与Client 端两种方式连接仪器。
当软件中点击开始监听时,软件作为TCP协议的Server端,将监听输入的端口。在仪器端输入软件所在IP及设定的端口建立连接。
当在仪器中开启监听,并且软件中输入仪器IP 及端口,点击连接时,软件将作为TCP 的Client端连接到仪器。
3.3.2 设计
(1)TCPLinkFactory 连接工厂模块:使用设计模式中的工厂模式,在软件中由TCPLink-Factory 负责与设备TCP 连接的创建、保管、维护、销毁。
(2)TCPLink 接口:对TCP 连接的抽象,仿照epoll 模型。向上层的LTLink 协议服务,隐藏了作为Server 端与Client 端连接的细节。降低了上层模块的复杂度,提高了系统开发效率。
3.3.3 实现
(1)TCPLinkS:TCPLink 接口的实现类之一。在CPLinkFactory 监听指定端口,仪器连接成功后会创建本对象。对象创建成功后,将被加入TCPLinkFactory内的数组保存。在对象监听到连接断开后自动销毁,从数组中移除。
(2)TCPLinkC:TCPLink 接口的实现类之一。在软件中输入仪器IP 及端口连接成功时创建,自动加入TCPLinkFactory内的数组保存。在对象监听到连接断开后自动销毁,从数组中移除。
3.4.1 设计
(1)数据接收模块:在接收数据之前,软件会发送一个开始测试的信号给仪器,这样在仪器测试之后,会每隔一段时间通过相应接口传给主机,主机会对应接口增加到相应数据库的表中。
(2)数据保存模块:在收到数据之时,通过调用相应代码,将该数据存到相应数据库的表中,同时管理人员还有相应权限,比如增删查改,但用户只有查看功能。为了避免占用过多空间,当数据到达一定存储量时,软件会删除陈旧数据,以达到节省空间的目的。
(3)数据显示模块:软件接收到数据,并将该数据处理好之后,以图表形式完成数据的可视化,将其显示在屏幕中。
3.4.2 实现
(1)后端:通过软件与数据库的连接,软件可以控制数据的存取。在软件接收到数据信号时,执行存储功能,将数据通过接口编号辨别,准确存储到相应数据库。并且在查看接收信号时,通过数据的查看功能,将数据传到前端,供用户查看。
(2)前端:前端用户可通过点击软件的查看功能,通过软件将数据从数据库中传至前端,以供查看数据。
本文设计和实现了电池包气密检漏仪上位机查询系统,首先介绍了电池包气密检漏仪;其次介绍了在系统开发阶段使用到的一些技术;然后对于系统的整体架构进行了设计;最后对于系统的各个功能进行了分析,实现了界面部分、通信模块部分、保存数据模块部分和数据库部分等功能。本系统具有良好的人机交互能力,页面布局简洁,操作方便;利用数据库进行数据存储,不仅能储存大量的数据,而且还能方便地进行数据的查询与分析。符合了使用该系统的工作人员的基本需要,它能使工作人员在测试时更轻松,且能有效地提高工作效率。