(1.北京星网船电科技有限公司,北京 102300;2.中船重工703研究所无锡分部,江苏 无锡 214151)
国产化计算机行业发展与发达国家相比还存在不小的差距,电子产品中很多核心芯片和软件依赖国外进口,当前面临复杂的国际局势,存在核心产品和关键器件被禁运的风险。坚持走自主可控的道路,从关键硬件和操作系统上实现国产化替代[1],对电子装备研制水平的提高,对国产计算机产业链的发展,对信息安全可控具有重要意义。
SCADA(Supervisory Control and Data Acquisition)即数据采集与监视控制系统。SCADA系统以计算机为基础的生成过程控制与调度自动化系统。可以对现场的运行设备进行监视和控制,以实现数据采集、设备控制、测量、参数调节以及各类信号报警等功能[2]。智能化监控是现代船用监控系统的设计趋势,国内的船用图形化组态软件大多基于X86架构工业计算机,普遍采用Windows操作系统,应用软件开发采用包括Microsoft系列开发工具、NI公司的LabView平台[3]和Wonderware公司InTouch等工控组态软件,对自主可控软硬件平台运用较少。目前上位机监控组态软件具有强大的画面显示组态功能、良好的开发性、功能模块丰富、强大的数据库的优点,但是存在授权使用限制,无法跨平台运行,不开放源码,无自主知识产权的缺点,关键核心技术和基础软硬件对国外的技术依赖很高,存在信息安全的隐患。
对于机旁监控嵌入式设备集成化、小型化、高可靠、自主可控的要求,自主研发船用机旁监控系统平台和软件,提高系统灵活性,优化系统监控功能,最大程度减少系统的建设和运营成本。
目前国产CPU及国产操作系统发展迅速,龙芯中科研发龙芯3A3000 MIPS架构CPU,主要面向桌面、高端嵌入式和终端及服务器应用领域。2018年研发了内置GPU的7A1000专用桥片,核心元器件国产化率达到100%。中标麒麟桌面(龙芯版)是支持龙芯64位平台的自主Linux操作系统,支持主流的集成开发环境QtCreator4.3版本,官方支持Qt5.6版本的图形应用开发。中标软件和龙芯中科合作实现系统内核及核心参数等优化适配,共同推进国产软硬件生态链的发展和产业升级。
船用燃气轮机机旁设备主要包括排气系统、通风系统、润滑油系统、启动系统、清洗系统、冷却与密封系统、点火系统和控制系统。机旁监控系统通过冗余CAN总线和冗余以太网总线与各分系统进行数据交互。机旁监控系统软件采集现场大量的传感器以及IO继电器数据,包括发动机的工况、液位、设备启停、运行状况、阀门状态、涡轮转速和状态告警参数等的开关量信号,以及螺距、燃气温度、燃气压力、导叶角度、滑油温度、滑油压力等的模拟量的信号等。
1)两条CAN总线完成与两个机旁控制柜的冗余数据通信,通信波特率为500 kbps/s,单条CAN总线上通信量峰值约为900帧/秒。
2)通过两条以太网链路实现与电力控制计算机进行冗余数据通信,通信协议采用UDP协议,单包数据最大长度不超过1 450字节,通信点数约为200点。
3)通过两条以太网链路实现与PLC现场总线控制柜进行冗余数据通信,通信协议采用Modbus TCP/IP协议,通信点数约为500点。
1)数据采集、显示功能:
数据的采集和实现图形化的控制,数据常以表格、曲线图等方式显示。
2)用户鉴权管理功能:
系统启动后,运行用户鉴权模块,设定管理员和操作员的权限,输入有效的用户名和密码,取得监控系统的控制权,才能进行权限内的用户相关操作。
3)数据库实时记录和査询功能:
运行数据实时和报警记录到数据库中,指定起始、终止时间,从而实现查询指定时间段内设备运行的参数,并以表格或曲线图的方式显示。
4)报警和报警解除功能:
机旁监控报警采用三级报警,第三级报警为普通报警,该级别报警的触发不影响机组的正常运行。第二级报警为限制保护报警,该级别的报警需要操作员进行相应的处理,确保机组的正常运行。第一级报警组为紧急停机报警,报警优先级最高。三级报警组在实时报警表格中以不同的颜色区分[4]。报警通过网关延伸报警装置来实现声光的报警。当系统发生信号越限报警时,本系统软件根据燃机准备联锁条件进行报警处理,控制设备开启或关闭的输出,保证系统安全运行。
5)故障诊断功能:
为保证系统安全稳定的运行,计算机以1 s的周期检测自身CAN接口和以太网接口的工作状况,同时接收下位机上报的健康信息,并送界面显示。
6)打印记录功能:
根据需要随时打印即时工况参数,并支持对报警记录、报警时间的打印功能,以备进行故障分析和参数越限分析。
7)夜航模式功能:
触摸屏显示器具有亮度调节功能,调光模块通过以太网接口满足调光总控模块和分控模块对白天、傍晚、黑夜3种环境下统一调光要求,并支持不同光环境下辨识显示信息的要求。
机旁监控系统主要包括2台监控计算机、2台网络交换机、2台加固显示器、冗余电源模块、网络打印机和声光报警器等组成,如图1所示。其中网络交换机、加固显示器和冗余电源模块均采用国产化设计,重点论述计算机的系统方案设计。
图1 机旁监控系统结构图
监控计算机采用CPEX总线加固计算机、双机的设计方案,两台监控主机互为备份关系,双机安装于同一监控台体内,机箱设计为6U机箱。机箱内部由1块单板计算机模块、1块CPEX CAN扩展卡模块、1块CPEX冗余网卡模块、1个电源和1块背板组成。
图2 监控系统软件框架
综合考虑处理器的成熟度、应用领域、配套软件等情况,CPU板选择基于龙芯3A3000高性能4核通用处理器[5],搭配龙芯7A1000桥片进行设计,国产元器件数量、种类比≥95%。CPU板实现计算机的基本功能括运算处理、总线管理、外设控制以及存储等,具备BMC功能,实现核电电压,主板温度采集。主板配置CPU主频为1.2 GHz,HyperTransport总线频率800 MHz,DDR3内存频率600 MHz。表贴8 GB DDR3西安紫光国芯内存,主板工作温度范围-40 ℃至+80 ℃。
冗余CAN卡采用南京沁恒微电子的PCIE总线接口芯片CH368,通过CPLD扩展4通道隔离SJA1000控制器,CH368桥片实现PCIe总线到本地总线的协议转换[6],再通过FPGA芯片EP3C25F324I7N完成本地总线读写时序到SJA1000的读写时序的转换。
双冗余以太网模块采用 4路Intel I210单端口千兆位网络控制器,I210内部集成PHY,支持PCIe v2.1规范。考虑到主板桥片只集成两路以太网MAC控制器,其中一路做调试口,因此通过桥片PCIE-F0的4个Lane扩展4路以太网接口。
显示器具备亮度调节功能,显示器内部背光控制板采用兆易GD32F407ZGT6单片机控制液晶屏背光模块驱动和调节电路,通过以太网接收调光控制模块发出的控制指令,实现显示器背光与指示灯亮度快速同步调节。
机旁监控系统使用国产中标麒麟V5.0桌面操作系统,应用软件采用Qt5.9作为开发设计工具。Qt是一种跨平台的图形用户界面程序框架,自带IDE的开发工具Qt Creator[7]。Qt拥有元对象(Meta-Object)系统机制动态获取类型信息,保证了程序不依赖编译器和平台。Qt信号与槽机制让处理对象间通信高效、灵活。
机旁监控系统软件的主要分为6个功能模块:数据采集处理模块、外部通信控制模块、通信故障诊断模块、数据库访问模块、界面显示及人机交互模块和内部数据通信模块,如图2所示。
应用软件框架按需求分解9个子模块:CAN通信模块、数据库模块、TCP/UDP网络通信模块、自定义UI控件模块、UI设计师界面模块、权限管理模块、QModbus通信模块、QChart可视化数据模块和CSS样式表资源模块。
Qt5.9下配置Qt时裁剪掉Qtdeclarative、 Qtmultimedia子模块,并添加Network、Sql、Serialbus、Charts、Printsupport应用模块支持。采用mips64el-neokylin-linux 4.9.3版本gcc源码编译和安装Qt。操作系统下还需要对显卡、网卡冗余绑定、打印机服务、登录和启动脚本、系统数据备份和恢复等进行配置。
计算机龙芯CPU上电后从NAND FLASH加载PMON程序,PMON最小系统工作流程:处理器初始化,调试串口初始化,关中断,配置异常向量,初始化Cache、IO地址映射、对7A1000桥片做初步配置,内存初始化、拷贝代码到内存、设置堆栈、设置传参TLB、清缓存寄存器,初始化显示,以及PCI设备中断初始化,最后交权给内核引导操作系统。
驱动是操作系统内核和硬件之间的接口,通信接口驱动设计主要包括CAN驱动和网卡驱动。系统下通信接口软件的设计目标是实现通道的冗余功能和链路故障监测功能,并对上层应用软件进行支撑和适配,提供功能完善并且适合应用场景的访问机制和策略。
4.2.1 网络冗余及BIT设计
网卡冗余功能通过内核bonding机制实现,bonding机制是在网卡驱动和数据链路层中间插入1 个虚拟网卡设备bond0,通过内部状态机完成两条链路的主备状态监测和切换,两个冗余网卡通过虚拟的bond0与软件上层协议和应用传输数据[8],因此冗余内部的组成和传输数据的细节对上层服务是透明的。中标麒麟系统下不自动加载bonding冗余驱动,通过NetworkManager包提供nmcli命令创建冗余配置,具体方法如下:
1)nmcli connection add con-name bond0 type bond ifname bond0 mode 1 miimon 50 ip4 192.0.0.100/24 gw4 192.0.0.1。即在/etc/sysconfig/network-scripts/目录下创建了一个ifcfg-bond0配置文件,设置链路状态轮询时间50ms,冗余主备工作模式。并将IP地址和网关等参数写入配置文件中。
2)设置加入bond0组绑定的网口,命令:nmcli connection add con-name enp1s0 type bond-slave ifname enp1s0 master bond0。设置加入绑定的网口连接名为enp1s0 ,类型为bond-slave,接口名为enp1s0,加入的主接口为bond0。同样方法将enp2s0也通过命令加入绑定组。
3)设置加入绑定的网口的属性。nmcli con mod enp1s0 connection.autoconnect yes。
检测冗余以太网链路状态是在用户空间下调ethtool下的Ioctl方法实现,实现核心代码如下:
struct ethtool_cmd ecmd;
struct ethtool_value edata;
fd = socket(AF_INET, SOCK_DGRAM, 0);
ecmd.cmd = ETHTOOL_GSET;
ifr.ifr_data = (caddr_t)&ecmd;
err = ioctl(fd, SIOCETHTOOL, &ifr);
edata.cmd = ETHTOOL_GLINK;
ifr.ifr_data = (caddr_t)&edata;
err = ioctl(fd, SIOCETHTOOL, &ifr);
通过ETHTOOL_GSET和ETHTOOL_GLINK两个控制命令查询获取网卡链接速度、双工、自协商状态和物理连接状态并反馈到界面显示,这样实现网卡链路故障监测功能。
4.2.2 改进的CAN软件接口设计
CAN驱动设计分两个模块:PCIe桥片驱动和CAN控制器驱动。驱动加载时依赖can、can_dev、can-raw三个内核模块,驱动通过insmod内核模块的方式加载。驱动实现PCI总线到本地总线读写和访问,初始化CAN和读写每路SJA1000控制器。其中PCIe桥片的驱动依据FPGA逻辑地址偏移,完成PCI本地内存映射,挂接中断服务程序并使能中断。驱动加载后执行总线注册,遍历设备和驱动链表,对CH368设备与CAN驱动程序进行匹配,并在系统下注册为net设备。CAN控制器驱动实现对SJA1000寄存器读写和中断处理功能[9]。
默认CAN原始socket接口工作在阻塞模式,面临Qt应用层和CAN socket层之间缓冲区同步和互斥的问题。原始通信情况下即使加大缓冲区到10 kBytes,依然出现丢帧的情况。
直接基于CAN raw socket开发应用,应用线程与CAN读取线程之间直接同步数据效率很低,当四路CAN通道数据量达到500帧/秒,CPU负载超过60%情况时很容易出现丢帧现象。研究使用合适的异步处理机制,最终使用SerialBus模块QCanBusDevice类中重新封装了QVector
系统中标准帧的ID0-ID9作为设备寻址位。ID0到ID11每个位对应总线上的一个节点,本计算机节点要往1号监控节点发送一个报文,就把ID11置1,其他位全部置0;如果要同时往1号和2号监控节点发送同一个报文,就把ID10和ID11两位同时置1,其他位全部置0。在这样的寻址方式下,通过QCanBusDevice对象中setConfigurationParameter方法设置好验收寄存器和屏蔽寄存器,能够有效减轻CAN总线控制器的负载,提高计算机通信处理能力。
两路CAN会接收和发送相同的数据帧,通过改进的算法实现CAN冗余通信可靠性和实时性:创建两个CAN通道的应用缓冲区,当某一路CAN通道接收到CAN帧时,通过搜索另外一路CAN接收缓冲区,如果没有相同报文编号的数据,则判定接收到的CAN数据有效;如果有说明已经从另一路总线接收到了同一个数据,则不使用该重复数据。缓冲区的存储采用哈希表算法,即采用QHash散列存储的键值对容器类,表的大小和数据项是自适应,QHash最差情况下的时间复杂度O(n),迭代遍历时更加高效,满足了CAN冗余通信的实时性要求。
Qt5.9上QCanBusDevice不具备监测CAN总线状态的方法,为实现CAN链路故障监测功能,需要获取驱动层的SJA1000控制器总线状态,通过重载QCanBusDevice类的busStatus方法,并在驱动中注册回调函数,在中断服务程序中获取SJA1000控制器状态寄存器的值,获取的状态包括总线状态、发送状态、接收状态、数据溢出状态和发送接收缓冲区状态,最终反馈传递到应用层。
监控软件界面设计主要包括UI界面设计与美化、自定义窗口和通信控件设计、信号与槽设计、界面昼夜风格样式设计等内容。实际设计中Qt 提供的基础类不满足设计要求,需要进行重载和封装,项目中开发的自定义类见表1所示。
表1 项目Qt自定义类
表2 试验样机试验结果汇总表
前端设计框架设计采用了MVC模型,即把界面设计分为3个部分:模型(Model)、视图(View)、控制器(Controller)。模型用于组织数据源,不关心数据的显示方式;视图用于定义数据的显示方式,不关心数据的组织方式;控制器用于处理用户在用户界面的输入,Qt采用委托Delegate方式把用户输入的数据委托给Qt的某个部件处理。模型、视图、委托之间的通信使用Qt的信号和槽机制来完成。统一使用Qt5信号与槽语法:connect(sender, &Sender::valueChanged,receiver, &Receiver::updateValue ),不采用Lambda表达式语法,信号与槽实现统一在主界面中。
根据机旁监控系统的硬件配置和实时性要求,结合SQLite数据库数据的需求,在Qt下使用开源嵌入式SQLITE3数据库,实时存储重要运行参数到数据库,并从运行的监控软件中检索历史数据并在Qt中显示。 监控按周期性读取缓冲区数据并记录到数据库中。采用线程执行查询符合条件的记录行数,考虑查询数据库时间跨度大符合条件的数据量大,为避免查询时间过长,导致显示数据的表格的响应慢的问题,采用分页查询并显示记录,如图3所示,按显示页面表格行数分页查询数据库表记录并显示。
图3 监控数据库历史数据界面图
经过一系列研制工作后,基于自主可控国产化机旁监控系统样机在调试和试验阶段与控制柜进行联调,机旁监控系统通过了可靠性试验评测,符合《CB/T 3153-2019 船舶机舱监视报警装置技术条件》标准要求,软件设计满足应用需要,实现了监控系统软硬件自主可控设计闭环,国产化监控系统样机研制成功。
为验证系统的组网运行的准确性和可靠性,按照《GJB150-2009军用装备实验室环境试验》要求,包括温度、湿度、压力、噪声、振动、冲击环境条件下机械和电气使用功能和性能试验以及电磁兼容性,汇总试验结果如表2所示。
从总体实验结果看,系统外部接口以及内部模块之间接口无故障,数据显示、记录,报警,界面操作满足现场运行的要求。监控系统达到了国产化预期性能,功能上满足了项目自主可控的需求。
国产化机旁监控系统已完成现场调试并投入试运行,满足了项目的设计使用要求。机旁监控系统软件运行稳定。该研究对国产化软硬件平台下数据采集与监视控制系统应用具有指导意义,并对自主可控系统方案应用和可靠运行提供了坚实的技术积累。