APP下载

基于Android的LTWin软件的移植

2022-11-25张日旺邝美琪李幸梓崔港仔

现代计算机 2022年17期
关键词:服务端网关页面

张日旺,邝美琪,李幸梓,崔港仔

(广州新华学院信息科学学院,东莞 523133)

0 引言

Android是一个专门为移动终端设备设计的操作系统平台,凭借自身良好的稳定性、可移植性和开放性,迅速占据了大部分的移动电子设备市场[1]。合作企业方给出的LTWin软件是为指定仪器(本文中的应用主要适配电池包气密测试设备S30)提供丰富功能的工具,在移植前LTWin软件已可运行在Windows XP、Windows 7、Windows 10操作系统的电脑上,而将该LTWin软件从Windows端移植到Android端,不但让测试者在不携带较重的电脑的情况下可以使用该软件对产品进行参数测试,且可实时观察到产品在仪器中的情况和检测返回的数据变化情况。

将LTWin软件移植至Android端,系统采用C/S架构,服务端与客户端基于Android开发,通信主要在TCP/IP网络通信协议的基础上进行,使用socket进行实现。根据已有的PC端的LTWin软件功能进行需求分析,逐步地将功能移植至Android端。

1 系统总体架构设计

1.1 需求分析

对已给出的PC端LTWin软件测试功能后,得知移植到Android端的应用软件具有以下功能需求:

(1)实现客户端到服务端的连接,从客户端发送包含指令的数据包到服务端,服务端可以正常接收。同时客户端也能接收到服务端返回来的数据,以实现设置仪器参数的功能,以及能控制仪器进行测试并查看测试结果的功能;

(2)软件在接收到结果数据时,能在本地存储数据的存储需求,当数据达到一定量时删除旧数据,确保不会占用大量的存储空间。此外,能查看、查询本地数据,能实现根据条件搜索数据的查询需求;

(3)能选定某些数据,而后生成折线图,实现数据可视化需求。

对于非功能需求而言,界面设计应简洁友好。

1.2 系统总体结构设计

根据1.1中对软件功能的需求分析,可以得到该应用系统需要完成的功能子模块主要有三个:通信模块、数据库模块和数据可视化模块。系统功能模块图如图1所示。

本系统的整体架构是以服务器作为桥梁,硬件设备由支持TCP/IP通信协议的通信模块组成;S30仪器通过Socket与服务器连接。Android端与气密性检测设备同时连接服务器,从而实现远程通信和数据传输。系统总体架构如图2所示。

S30仪器的远程控制系统主要包括三个部分,分别是手机终端、公司网关服务器和S30仪器。用户使用智能手机通过网络连接到公司网关服务器,然后公司网关服务器连接到S30仪器,用户发送带有指令的数据包给公司网关服务器,然后公司网关服务器将数据包发送给S30仪器,S30仪器执行相关的操作,将执行结果返回到公司网关服务器,公司网关服务器再将结果通过网络返回到手机终端,以此实现对S30仪器的控制与管理[2]。本文主要实现手机终端的设计。

2 软件设计与实现

2.1 客户端UI设计与实现

由于已有PC端的软件,因此本项目的UI界面设计主要仿照PC端的软件操作界面进行类似功能的分类设计,即将类似的功能放在一个页面中进行管理,这样测试者可以依据需要的功能来寻找相应的页面即可找到相应的功能,方便用户进行操作,提高工作效率。这就涉及到页面间的跳转以及各页面的控件布局设计。

2.1.1 页面跳转的设计与实现

本app主要有四大主页面,分别是设置查询、单机测试、联机测试以及数据查询。要实现在这四个页面中进行跳转,本项目采用了Android Jetpack程序库中的Navigation组件进行实现,在完成Navigation的基本配置之后,由于在Navigation里页面跳转是交给NavController处理的,因此需要获取NavController,获取到之后通过navigate方法传入Action的id,实现跳转。四大页面依次如图3的(a)、(b)、(c)、(d)所示。

2.1.2用户主控界面的设计与实现

用户的主控界面含有大量的操作,其中在设置查询中包含了八分页,分别是首页、时间/单位、压力参数、测试参数、通讯设置、综合设置、仪器信息和S20C配置,另外三个页面无分页。本研究使用ViewPager来设置查询页面的分页,利用Android Jetpack程序库中的Animation组件实现分页间切换的页面滑动动画效果,页面中的布局文件均采用LinerLayout作为整体布局,采用RelativeLayout作为内部各组件的布局,利用ScrollView实现页面的上下滚动,利用EditText实现测试参数的输入,利用Text显示测试的结果,采用Button来触发各功能的具体操作。部分分页界面如图4的(a)、(b)、(c)、(d)所示。

2.2 通信模块设计与实现

2.2.1 控制功能设计

当用户打开功能界面时,设置好参数,点击相应的功能进行测试,然后系统会查询是否连接到了公司网关服务器,若已连接,则将带有指令和数据的数据包发送给服务器端,服务端接收到数据包,解析之后发送给S30仪器进行检测;如果系统检测未连接公司网关服务器,则会提示用户需要连接公司网关服务器,要求用户输入网关的IP地址和要控制的仪器的端口号,然后进行连接,连接成功,再进行已连接公司网关服务器时的相应操作。

2.2.2 手机终端与公司网关服务器建立连接

实现手机终端和公司网关服务器之间连接涉及到了Socket通信[3]。Socket又被称为“套接字”,是一种抽象层,被用来实现网络上两个设备之间的收发数据,每一个Socket由一个IP地址和一个端口号唯一确定,通常被用来实现服务端和客户端的连接[3]。

服务端实现步骤如下:

(1)服务端创建服务端的Socket服务,即ServerSocket,开始监听来自客户端的连接请求;

(2)当接收到连接请求时,调用accept方法进行连接,客户端Socket连接到服务端的ServerSocket;

(3)创建OutputStream和InputStream的对象实例,利用write方法和read方法与客户端进行通信[4];

(4)当结束通信时,调用Socket的close方法关闭连接。

客户端实现步骤如下:

(1)建立客户端的Socket服务;

(2)客户端调用connect方法与服务端进行Socket连接;

(3)创建OutputStream和InputStream的对象实例,利用write方法和read方法与服务端端进行通信;

(4)当结束通信时,调用Socket中的close方法关闭连接。

客户端(或服务端)获取Socket中的输出流,将数据写入到输出流,通过网络发送到服务端(或客户端)。获取Socket中的输入流,读取里面的数据,即完成一次通信。

服务端和客户端的连接通信过程如图5所示。

客户端与服务器连接效果展示如图6、图7和图8所示。

2.3 数据库模块设计与实现

针对测试过程中存在数据查询麻烦、接收的数据难以存储等问题,该本地存储数据模块以Android为基础,利用SQLite数据库技术设计,实现测试结果信息的快速获取和显示,提高查询效率,并实现当数据达到一定量时删除旧数据,来确保不会占用大量存储空间。

该模块采用数据层、逻辑层和应用层三层体系结构,其中数据层是此部分的基础,主要负责测试结构数据的存储检索;逻辑层负责链接数据层和应用层;应用层是应用界面,将逻辑层获取的请求信息展示给用户。

在此我们需要使用到基本的操作——增删改查,因此需要重写这些操作,将其封装到继承了SQLiteOpenHelper的dbHelper类里。

操作步骤如下:

(1)创建一个数据库:先创建一个DatabaseHelper对象,使用这个对象调用getWritableDatabase方法创建一个可读写的数据库;

(2)创建表格:自定义一个数据库子类db-Helper继承SQLiteOpenHelper,重写里面的onCreate和onUprade方法,在onCreate方法中写好sql语句,并且采用execSQL(sql)方法运行sql语句,实现创建表格的操作;

(3)插入数据库:创建ContentValues对象,取名叫values,使用put方法向该对象中插入键值对,最后调用sqliteDatabase的insert方法插入数据库;

(4)修改数据库:创建ContentValues对象,取名叫values,使用put方法向该对象中插入键值对,最后调用sqliteDatabase的update方法插入数据库;

(5)删除数据:调用sqliteDatabase的delete方法删除数据;

(6)查询数据:调用sqliteDatabase的query方法遍历查询数据。

实现了基本操作之后,还要根据本系统的需求再定义一些操作。

当数据达到2000条时,我们需要删除旧数据,然后才能继续添加新数据,SQL语句如下所示:

//删除testinfo表里的数据

DELETE FROM testinfo

//当数据条数大于2000行时

WHERE id>=2000 IN

//选择其中的前100条进行删除

(SELECT id FROM testinfo ORDER BY id LIMIT 100);

处理流程如图9所示。

表1为检测结果表,Id字段为主键,用其存储检测结果数据信息。

表1 检测结果表

2.4 数据可视化模块设计与实现

该模块将根据得到的数据进行可视化,数据可视化是将数据用图形化的方式来表示,可以帮助企业迅速明白某些数据的重要性,理解数据的背后含义。数据可视化通常是理解和交流分析的第一步,因为当数据以图形方式而非数字方式呈现时,更利于人们理解数据,而且还可以实现多维度的数据比较。

本研究中使用折线图来进行数据可视化。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下的数据变化趋势。在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布,可以使用户更直观地看到随时间推移的检测情况,能直接知道在多长时间、什么条件下气密性达到了一个阈值,以便进行改进。

接收到输入的数据之后,首先调用JFreeChart类的createLineChar(t)和setBackgroud-Pain(t)以及getTitle()方法,来设置折线图的名称、字体和颜色;其次则是CategoryPlot类的setDomainGridlinesVisible()、setRangeGridlines-Visible()、setDomainGridlinePaint()、setRange GridlinePain(t)方法实现x轴、y轴是否可见,以及网格横竖线的颜色,setNoDataMessage()方法则表示当没有数据显示时的文字说明。

随后即是NumberAxis类的setStandardTick-Units()、setUpperMargin()、setAutoRangeIncludesZero()、setLabelAngle()方法来设置数据轴显示的格式,数据范围,是否包含0。然后到CategoryAxis类的setTickLabelFont()、setLabel-Font()、setCategoryLabelPositions()、setLower-Margin()、setUpperMargin()方法设置x轴坐标和标题的文字,左右边距和横轴倾斜角度;最后由LineAndShapeRenderer类的setBaseShapes-Visible()、setBaseLinesVisible()来决定最终折线图是否显示折点和折线。

主要的类及类与类之间的关系如图10所示,选择数据库中的泄露率作为纵轴、压强作为横轴进行数据可视化的效果如图11所示。

3 结语

本文将主要运行于Windows版本的操作系统下的LTWin软件功能移植至Android端。界面简洁友好,布局符合逻辑,操作简便,可以满足针对测试电池包气密性的工作人员的基本需求,使测试过程更加轻便,提高测试效率。但目前软件可适配的气密性检测设备只有仪器S30,即可检测气密性的产品种类不多,故未来将会进一步适配其它仪器,以完善移植后的软件。

猜你喜欢

服务端网关页面
刷新生活的页面
基于FPGA的工业TSN融合网关设计
一种主从冗余网关的故障模式分析与处理
答案
让Word同时拥有横向页和纵向页
天地一体化网络地面软网关技术及其应用
多人联机对战游戏的设计与实现
车联网网关架构的设计
基于三层结构下机房管理系统的实现分析
基于三层结构下机房管理系统的实现分析