王金璐,刘 杰,李 强,陈新华,韩博志
(1.武汉理工大学 能源与动力工程学院,湖北 武汉 430063;2.中船黄埔文冲船舶有限公司,广东 广州 510715)
在船舶轴系试验台架的试验过程中,需要长时间地接收传感器发送的数据信息。数据采集软件在长时间的连续运行中,可能出现一些异常情况,例如程序运行缓慢卡顿、程序运行崩溃或操作系统运行卡顿崩溃等,需要进行相应的异常处理,保证监测数据的完整性,并向监控人员发出警报。同时,由于数据采集软件需要长时间进行数据接收和处理,需要使用较多的计算机资源,采用传统的网络通讯方式已经无法满足任务需求[1],本文设计使用Netty网络编程框架来提高数据采集效率,从而降低计算机资源使用率。
在船舶轴系试验台架的试验过程中,可能会发生某一部分的硬件连接异常而导致监测数据丢失的情况。为了解决此问题,此设计的数据采集方法需要保证主机和备用机都可以接收到监测数据信息,在主机无法接收到数据信息时,备用机可以立即接替主机继续执行监测数据接收任务,保证监测数据完整。船舶轴系试验台架监测数据采集的硬件连接方式主要有使用采集卡、串口和可编程逻辑控制器(PLC)3种。
1)使用采集卡接收数据。由于采集卡需要内嵌到计算机内部,则需要多个采集卡,每一台计算机配一个采集卡。传感器发送数据时,需要同时向所有的采集卡发送数据,以此来保证主机和备用机都能接收到监测数据信息。
2)使用串口接收数据。可以使用一拖二的串口数据线,输入端为单一接口,连接传感器发送数据。输出端为2个接口,分别连接2台计算机,以此来保证数据完整性。
3)使用PLC接收数据。PLC可以使用网线连接多台计算机,通过网络通讯协议传输数据信息。只需要一个PLC就可连接多台计算机。
在3种连接方案中,采集卡和串口连接的优化主要靠提高设备硬件本身能力,PLC由于其使用网络通讯协议传输数据信息,可以在软件层面对接收程序进行优化设计。本文设计一种新的船舶轴系试验台架监测数据采集软件,在接收监测数据信息时,使用Netty网络编程框架优化网络通讯,来减少计算机资源消耗率;在进行软件异常情况处理和报警时,采用主机和备用机相互监视的方法,获取异常信息并处理,可以保证接收数据信息的完整性,并降低人工监视难度。
为了解决船舶轴系试验台架监测数据采集效率低、消耗高的问题,设计了一种船舶轴系试验台架监测数据优化采集方法。该方法主要是使用PLC接收数据,以网络通讯传输控制协议/网际协议(TCP/IP)为基础,利用Netty网络编程框架中的非阻塞输入/输出(NIO)编程原理,优化数据采集软件。其中包括监测数据采集部分和异常报警处理部分。监测数据采集部分主要是将数据采集程序设计为Netty网络编程框架的服务端,减少每一个网络响应的时间,提高计算机处理效率。异常报警处理部分需要使用Netty网络编程框架的服务端和客户端,能够使用极少的计算机资源,就可以把采集软件的运行状态传输到备用机上,进而判断采集软件运行状态,有异常时会立刻使用备用机来进行监测数据采集并报警,保证监测数据的完整性。数据优化采集的整体设计流程图见图1。
图1 数据优化采集的整体设计流程图
网络通信是本文进行监测数据信息传输的基本方法,其利用相关接口和协议通过网络线路传输数据信息到网络计算机上,从而实现不同计算机的远程信息交互。本文使用最广泛的就是TCP/IP协议,以其来完成数据交互[2]。TCP/IP协议通常可以概括为4层:运用层、传输层、网络层和网络接口层。TCP/IP协议按照层次由上到下,层层包装。最上面的是应用层,是直接为应用进程提供服务的,包括邮件传输应用使用的简单邮件传输协议(SMTP)、万维网应用使用的超文本传输协议(HTTP)、远程登录服务应用使用的远程终端协议(TELNET)。应用层还能加密、解密、格式化数据。第二层是传输层,其中的传输控制协议(TCP)和用户数据报协议(UDP)就在这个层次,在整个协议中起到中流砥柱的作用。第三层是网络层,网际互连协议(IP)就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是网络接口层,兼并了物理层和数据链路层,所以网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路[3]。
由于监测数据采集软件需要进行长时间的运行,会使用较多的计算机资源。在使用传统的网络通讯时,有2种使用方式。
1)一直建立客户端与服务端的网络连接,进行数据信息传输。优点是不需要频繁地进行资源的创建和销毁,缺点是程序大部分时间处在阻塞状态中,增加系统负担。
2)在需要数据传输时,再进行网络连接。优点是无信息发送时可节省计算机资源,缺点是需要进行频繁的网络连接创建和销毁。
在传统的网络通讯中,每一个网络连接都需要一个单独的线程进行处理,因此会消耗较多的计算资源。传统的网络通讯方式的流程为套接字→读/写→线程。
服务端监听时接收(Accept)函数阻塞,有新连接时Accept函数会有返回,主线程才能继续运行。读写套接字(Socket)时读是阻塞的,只有接收到请求消息后,读才能返回,子线程才能继续处理;读写Socket时写是阻塞的,只有客户端接收消息后,写才能返回,子线程才能继续读取下一个请求[4]。
无论使用以上哪种方式,都有一个严重的问题,从头到尾都有线程处于阻塞状态,会浪费计算资源,原因是由其输入/输出(I/O)模型决定的。传统通讯方式的阻塞I/O模型示意图见图2。
图2 传统通讯方式的阻塞I/O模型示意图
当用户线程发出I/O请求后,会进行系统调用,内核就会去查看数据是否就绪,如果没有,会等待数据就绪,从而使用户线程处于阻塞状态,用户线程交出中央处理器(Central Processing Unit,CPU)。当数据就绪后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除阻塞状态。在内核准备数据和数据从内核拷贝到进程内存地址的这2个过程中,都是阻塞的。
此种网络通讯设计会占用较多计算资源,已经不能满足任务需求,需要对传统的网络通讯方式进行优化,以适应接收软件对于快速低消耗的需求。
Netty是一款基于NIO的网络应用程序框架。Netty框架基于Reactor模型,根据自身的 I/O 模型和线程处理模式实现高性能的开发,其中 I/O 模型负责数据的输入和输出[5]。较传统的通讯方式有了很大的提升。Netty框架的NIO模型见图3。
图3 Netty框架的NIO模型
Netty框架的NIO 模型由 I/O 复用模型改进而来,可并发进行多个连接的读写操作,提升了I/O线程的运行效率。使用Reactor单线程模型进行连接处理。Reactor线程是个多面手,负责多路分离套接字,运用“接收”函数新连接,并分配请求到处理器链中,Reactor线程模型图如图4所示。该模型适用于处理器链中业务处理组件能快速完成的场景。
图4 Reactor线程模型图
使用Netty网络编程框架中的NIO模型,对客户端和服务端进行优化设计[6]。其优点为:①使用NIO的零拷贝特性,在Netty接收和发送数据时,会使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝,提高了传输速度;②使用内存池,为了减少堆外直接内存的分配和回收产生的资源损耗问题,可以在计算机资源较少的情况下仍能完成状态信息传输的任务。
监测数据采集软件主要是使用Netty网络编程框架,提高对网络连接的响应速度[7]。使用Netty的服务端作为监测数据采集接收端,与PLC进行网络通信,接收监测数据信息。主机和备用机的设计方法一样。区别在于主机在任务开始时就进行数据接收操作,而备用机会在主机发生异常时,自动开始代替主机来进行数据接收操作。主机和备用机的接收程序实现流程如图5所示。
图5 主机和备用机的接收程序实现流程
使用Netty网络编程框架可以在极短的时间内完成主机和备用机的切换,所以主机和备用机的采集程序不需要同时运行,防止产生重复的监测数据信息,且可以节省内存资源,降低计算机负荷。
监测数据采集软件异常处理程序的设计方法主要分3步来实现。
1)数据采集软件的运行状态获取。设置一定的时间间隔,获取到软件的运行状态信息。时间间隔可以以配置信息存在,方便操作人员修改。运行状态信息设计为2种,运行正常和运行异常。正常情况下,运行状态信息为正常,表示接收软件运行正常。当出现接收软件运行缓慢或者软件异常退出或崩溃时,运行状态信息则为异常。此外,还有一种特殊情况,就是操作系统因某些未知原因运行崩溃时,所有程序都会崩溃,也不会有运行状态信息通过下一步的网络通讯发送到备用机中。运行状态信息获取流程图如图6所示。获取监测数据采集软件的运行状态,发送到备用机中进行判断。
图6 运行状态信息获取流程图
2)运行状态信息的发送和获取。使用2台计算机进行网络通讯,备用机可以通过网络通讯来监视主机采集软件的运行状态,以便备用机可以随时接替主机继续执行采集任务。主机端设计为客户端,备用机端设计为服务端,并采用Netty网络编程框架,提高客户端和服务的信息发送和接收能力,降低计算机资源使用率[8]。
3)状态信息判断及报警模块。解析传输过来的数据信息,判断出程序的运行状态信息。运行状态信息有2种,运行正常和运行异常。当运行状态信息为运行异常时,程序会立即启动备用机并发出报警,提示操作人员进行人工操作。还有在设置一定的时间间隔内,没有接收到客户端发送过来的运行状态信息时,则判断为操作系统异常,也需要发出报警,提示操作人员进行人工操作。运行状态信息判断流程图如图7所示。接收到软件的运行状态信息,进行运行状态判断,正常则继续接收,异常就立刻启用备用机的监测数据软件接收程序,并进行报警,提醒操作人员。
图7 运行状态信息判断流程图
为了在船舶轴系试验台架的试验过程中,保证长时间采集传感器发送的数据信息,并且降低对计算资源的使用率,设计了以网络通讯TCP/IP协议为基础,基于Netty网络编程框架的监测数据采集软件优化方法,并在实际的项目中成功运用。该方法只需要启动软件就可以自动采集监测数据信息。出现异常情况后,可以快速自动地完成主机和备用机的切换,极大地提高了监测数据接收的完整性,降低了人工操作的难度。经过实际工程试验台架系统中的应用验证,完全符合实际要求,可以推广应用到类似的应用场景,具有一定的工程实用价值。