吴映铮, 朱鹄骏, 孙亮清
(上海船舶运输科学研究所 舰船自动化系统事业部, 上海 200135)
目前,我国船舶电力监控系统中的各类软硬件设备主要依赖于进口,且相关产品存在代码不开放、植入后门等不可控风险[1]。因此,为从根本上消除船舶电力监控系统过分依赖国外产品存在的安全隐患,提升我国船舶领域关键系统的自主可控能力,有必要对船舶电力监控系统软件进行国产化设计。
基于中标麒麟操作系统的船舶电力监控系统软件设计是为适应我国信息产业“自主可控、安全可靠”的要求,推进我国船舶领域信息系统的国产化进程提出的。国产化计算平台是一个包含国产硬件、操作系统及其他基础软件的集合体[2]。为满足船舶电力监控系统软件的安全性和可靠性要求,可通过国产化计算平台对船舶电力监控系统进行软件开发、测试和运行,切实了解国产化计算平台的兼容性、可行性和鲁棒性,发现和解决船舶电力监控系统软件国产化过程中存在的技术难点,掌握国产化计算平台的研制和应用技术。
本文基于中标麒麟操作系统设计开发一套自主可控的船舶电力监控系统软件,利用Qt5开发工具进行软件设计,采用SQlite开源数据库对测试数据进行存储和处理,并对系统软件的可靠性和实时性进行试验,验证该系统软件设计方案的可行性。
本文设计的船舶电力监控系统主要用来对船舶电力系统在各种工况下的运行过程进行实时监控和管理,自动对相关数据进行甄别、分析、处理、存储、记录和打印,对历史数据进行统计、分析和回放,并以图形、曲线和表格等形式显示相关信息,同时对参数越限情况进行自动报警。此外,该系统能实现对船舶电力系统的运行工况、控制方式、操作部位和机组优先级的选择或设置,实现对船舶电力系统的综合控制,包括对每个电站进行半自动控制、全自动控制和越控控制等,并对配电系统进行监控。
本文设计的船舶电力监控系统是基于网络的电力监测与控制系统[3],该系统由上、下2层网络组成,其中:上层网络采用以太网作为传输监控网络;下层网络采用CAN(Controller Area Network)总线,连接电力监控系统设备和数据采集器作为数据采集、控制和传输网络。上层网络与下层网络之间通过网关连接,电力监控系统设备和数据采集器采集的实时数据通过CAN总线传输给网关;网关对接收到的数据进行处理之后,通过以太网传送给多功能工作站和数据服务器;多功能工作站接收到数据之后,将控制指令传送给下层网络,实现对下层网络电力监控设备的远程控制。图1为船舶电力监控系统网络拓扑图。
图1 船舶电力监控系统网络拓扑图
本文设计的船舶电力监控系统软件具有电网状态信息监控、电站状态信息监控、发电机组状态信息监控与远程控制、配电板状态信息监控、报警应答、权限切换、参数和报警信息查询、故障定位等功能。图2为船舶电力监控系统软件结构图。
图2 船舶电力监控系统软件结构图
2.2.1 中标麒麟操作系统
该操作系统基于Linux内核开发,与主流Linux系统兼容,其性能指标能达到国内外同类Linux系统的水平,部分指标甚至高于国外成熟Linux系统的水平。该操作系统对国产软件的兼容性较强,目前支持的国产数据库有达梦数据库和人大金仓数据库等,支持的国产中间件有中创中间件和东方通中间件等。
本文采用中标麒麟桌面操作系统软件(兆芯版)V7.0进行软件开发,该系统是国内首款支持兆芯64位中央处理器(Central Processing Unit,CPU)平台的自主可控操作系统,其采用的Linux内核版本为kernel-3.10.0,C库版本为2.20,C编译器版本为GCC 4.9.2,采用“中标麒麟操作系统+兆芯CPU”的国产化软硬件模式,对国产软硬件自主可控生态环境研究具有重要的参考价值。
2.2.2 兆芯CPU平台
与本文所述中标麒麟操作系统适配的兆芯CPU平台采用兆芯KX-6640A处理器.该处理器是兆芯旗下开先系列的4核处理器,采用16 nm工艺制造,主频2.6 GHz,支持双通道DDR4内存,内存容量为16 GB,最高可扩展至64 GB,兼容X86指令集,支持CPU硬件和IO虚拟化技术。图3为国产兆芯计算平台。
图3 国产兆芯计算平台
2.2.3 Qt开发工具
Qt是一个跨平台的C++图形用户界面应用程序框架[4],具有“一次编写,多处编译”的特点,在开发应用程序过程中,只需一次性编写就可跨不同平台成功部署运行应用程序。Qt也是面向对象的编程框架,封装编程使得程序模块化程度较高,程序的可重复利用性较好。Qt本质上是一个拥有大量类的C++类库,Qt类库的核心模块是Qt Core。Qt类库具有丰富的应用程序接口(Application Programming Interface,API),除了提供Qt在所有平台上的基本功能以外,还可提供Qt在特定平台或操作系统上的特殊功能。
信号与槽(Signal & Slot)机制是Qt编程的核心特点,通过该机制可完成页面操作响应,即实现Qt中2个对象之间的通信。信号是在特定情况或动作下触发的事件,而槽是对信号响应并处理的函数。信号与槽之间的连接通过QObject::connect()函数实现,信号与槽之间的连接方式有3种,即2个信号之间相连、1个信号与多个槽相连和多个信号与1个槽相连。信号与槽机制具有类型安全和松散耦合的优点,与回调函数(callback)相比,信号与槽机制以牺牲可忽略不计的执行速度为代价,增强了对象之间通信的简便性和灵活性,使程序各部件之间的协同工作变得更为简单[5]。
本文使用的Qt框架版本为Qt 5.7.1,集成开发环境为Qt QCreator4.2.0(社区版),编译套件为GCC 4.9.1。使用Qt C++编写应用程序,既可使自己的应用程序具有跨平台移植的功能,又可利用各种开源的类库资源[6]。
2.2.4 数据库
Qt支持多种主流的数据库,包括MySQL、MS SQL Server、Oracle、SQLite等网络型数据库和单机型数据库。Qt中的Qt SQL模块提供对数据库的访问支持,该模块中包含丰富的数据库操作类,便于不同层次的用户使用。Qt SQL模块中的类可分为3层,具体见表1。
表1 Qt SQL模块层次划分
Qt SQL模块使用驱动插件与不同的数据库接口通信[2]。Qt中支持的驱动插件类型有QODBC、QSQLITE和QMYSQL等。图4为Qt中数据库连接流程,其中:QSqlDatabase的作用是建立数据库的连接;静态函数addDatabase()的作用是添加数据库驱动,其第1个参数指定数据库驱动类型,第2个参数指定数据库连接名;数据库的连接使用的是数据库连接名而不是数据库名称。一般来说:对于网络型数据库而言,需设置数据库主机名、数据库名称、数据库用户名和数据库登录密码;对于单机型数据库而言,只需设置数据库文件即可。
本文使用SQLite作为本地数据库。SQLite是一种跨平台、开源免费、进程内的轻量级数据库,是一种无需数据服务端、无需配置的嵌入式SQL数据库引擎,支持大部分ANSI SQL92标准,支持嵌套SQL功能,内存占用量极少,数据库处理速度比MySQL快。在实际的船舶电力监控系统中,其所包含的信息除了电力监控系统各测点的实时状态信息以外,还包括电力监控系统各测点的基本信息,如测点号、测点名称、单位、量程和阈值等。电力监控系统各测点的实时状态信息可由以太网传送至服务器端,而电力监控系统各测点的基本信息都保存在本地数据库中,这些基本信息的使用频率较高,且变动较少,可减轻网络负担,提高监控系统的使用效率,因此SQLite数据库正好符合本文的数据库设计需求。
本文所述船舶电力监控系统页面采用C++语言设计,仪表盘和机组等控件均是自主设计的,便于程序调用和调整。该船舶电力监控系统页面主要包含值班员登录页面、供电系统单线图页面、电站运行页面、1#发电机组运行页面、2#发电机组运行页面和参数及报警查询页面等。
1) 值班员登录页面。系统数据库保存值班员信息,所有注册过该系统的值班员都通过该页面登录,可将工作站切换成值班机。
2) 供电系统单线图页面。该页面主要显示由电站、机组和断路器等组成的主干网的运行状态。当供电系统发生故障时,该页面会显示故障定位提示信息,提醒操作人员处理故障。
3) 电站运行页面。该页面对当前电站内机组的运行状态进行显示,可直观地显示电站的输出功率、负荷、电压和频率等参数,并判断当前电站的控制方式和操作部位等信息,同时可在具有控制权的值班机情况下对机组进行遥控操作。
4) 1#发电机组运行页面。该页面主要显示1#发电机组的热工参数,包括发电机、发电机轴承和其他热工参数,以及“启动联锁”和“故障停机”的状态信息。操作人员可根据这些热工参数和状态信息判断机组的工作状态,并切换至不同发电机组查看状态信息。
5) 2#发电机组运行页面。该页面主要显示2#发电机组的热工参数,包括发电机、发电机辅助设备和其他热工参数,以及“启动联锁”和“故障停机”的状态信息。操作人员可根据这些热工参数和状态信息判断机组的工作状态,并切换至不同发电机组查看状态信息。
6) 参数及报警查询页面。该页面主要实现对测点参数和报警信息的实时显示,以及历史报警查询功能。测点参数包括测点号、测点状态、测点名称、单位、测量值、量程和阈值;实时报警信息包括测点号、测点名称、单位、测量值、报警条件、报警状态、报警时间和应答时间;历史报警信息包括测点号、测点名称、单位、测量值、报警条件、报警状态、报警时间、应答时间和消警时间。当有报警发生时,报警信号闪烁,可在实时报警页面查看具体报警信号;当报警应答之后,记录应答时间,存入数据库,并平光报警信号。
1) 实时数据监控模块。该模块的功能是对数据信息采集装置上传的信息进行加工并将其存储到数据库中,同时在监控台软件页面显示,供用户实时查看。当数据库存储新数据之后,实时数据监控模块会对数据库测点信息与当前页面显示测点信息进行实时判读和历次对比,若信息不一致,则更新当前页面显示的测点信息。图5为页面信息更新流程。
图4 Qt中数据库连接流程
图5 页面信息更新流程
2) 数据库存储查询模块。该模块通过unixODBC接口技术访问数据库,可查询多种类型的信息,包括实时测点值、历史测点值和故障报警信息等,可根据查询需求设置检索条件,如时间、电站类型等,并生成自定义SQL语句和存储过程,返回查询结果,同时具有打印和导出功能。对于一些重要信息,能以曲线、柱形图等图形化方式显示,便于用户进行数据分析比对。
3) 值班登录模块。值班登录模块将值班人员分为管理员级别、普通值班人员级别和默认值班人员级别等3个级别。不同级别的值班人员具有不同的操作权限,同级别或高级别的值班人员可强行切换值班人员,只有管理员级别的值班人员可添加和删除其他级别的值班人员。
1) 开发系统环境搭建。传统Windows系统软件的安装和环境变量的配置一般全程可视化,而在中标麒麟操作系统下需使用命令行的方式安装配置软件环境;同时,为确保数据安全,全程在离线状态下安装开发工具Qt,易出现开发库找不到的问题。因此,在安装各工具rpm包时,需考虑安装的先后顺序和依赖性问题。
2) 数据库存储和压缩。由于船舶电力监控系统通信的数据量巨大,相比在Windows操作系统上使用的Wonderware工业实时历史数据库Historian,本文使用的数据库在数据通信量较大时易出现数据处理不及时和数据丢失的问题,且存储的数据并未作压缩处理,对系统磁盘存储资源的要求比较高。
系统测试包括系统功能测试和系统性能测试2部分。本文在进行系统测试过程中使用自主研发的模拟软件发送实时测点报文信息,模拟电力监控系统设备真实的运行环境,以测试船舶电力监控系统的功能和性能。图6为模拟软件页面截图。
图6 模拟软件页面截图
系统功能测试主要包括通信测试、页面信息显示测试和数据存储测试等,可通过模拟软件发送测点报警信息和指令信息等,模拟真实电力监控系统的设备运行状况信息。系统性能测试主要是指对系统的实时性进行测试,通过在程序中添加相应的函数测试响应时间。经测试,本文设计的船舶电力监控系统软件能实现可靠通信,各页面信息显示正常,数据存储功能正常,实时响应满足正常需求,且能连续不间断运行100 h以上时间。图7和图8分别为系统功能和性能测试过程中电站和测点参数显示页面截图。
图7 电站显示页面截图
图8 测点参数显示页面截图
本文详细介绍了以兆芯CPU平台搭载中标麒麟操作系统的国产软硬件模式设计开发的船舶电力监控系统,对该系统软件的主要功能和实现过程进行了详细介绍。系统测试结果表明,该船舶电力监控系统设计方案是可行的,有助于解决我国船舶监控领域关键系统的数据安全问题,提升系统的自主可控能力,为未来在国产化软硬件平台上部署和规模化应用类似系统提供参考。