基于实时操作系统的故障诊断高可靠测控系统设计
2023-03-04解梦迪姜姗姗郭照峰
解梦迪,姜姗姗,郭照峰,贾 凡
(北京航天测控技术有限公司,北京 100041)
0 引言
目前在地面装备中为提高系统长期加电工作可靠性,双机冗余系统已经广泛应用,但在系统软件容错方面存在着一些不足,会因为系统测控软件的问题导致双机冗余失效,进而导致双机系统没有起到作用。为解决因系统测控软件异常导致的冗余失效问题,提出一种任务状态、CPU温度、CPU占用率[1]、磁盘剩余空间以及IO状态监测的故障诊断与容错方法,该方法进一步提高系统稳定性和可靠性,保障测控设备长期连续加电的需求。
1 系统结构及原理
系统采用基于龙芯CPU、CPCI总线以及实时操作系统的组合架构,主要实现测控流程、数字量IO的输入输出控制、AD/DA模拟量采集与输出、网络通讯、串口通讯以及热备冗余等功能。如图1所示,为实现双机冗余[2]功能开发的冗余控制模块,它是嵌入式测控系统双机冗余控制和切换的核心模块,该模块产生双机通信信息,并通过对机的信息判断是否需要本机切换成主机或从机状态,从而给CPU主从机切换指令,实现主从机的热备冗余切换,保障双机系统整体可靠性。
图1 系统结构图
如图1所示,双机采用冗余控制板构建双机冗余架构,其中1号机的sd1和sd2是冗余控制板发送的两路心跳信号,rc1和rc2是冗余控制板接收的对机两路心跳信号;同样,2号机也有两路心跳信号发送和两路心跳信号接收,如图2所示。
图2 双机心跳检测结构图
而系统故障如任务异常、CPU温度过高、CPU占用率过大、磁盘剩余空间不足以及IO状态异常等因素没有被考虑到容错机制中,文章将基于上述双机系统开展对系统故障因素的影响研究并提出一种监测与容错方案设计与实现。
2 系统硬件设计
系统主要包括龙芯微处理器(MCU,micro controller unit)模块、多种外设功能模块(冗余控制模块、数字量IO模块、AD/DA模拟量模块、RS422串口模块以及供电模块等)。
2.1 龙芯MCU模块
图3 龙芯控制器原理图
2J1500+1A500_3U_CPCI板卡是3U计算机模块,采用龙芯2J1500处理器,实现符合Compact PCI 2.0R3.0规范的3U Compact PCI接口计算机模块,控制器原理如图3所示。该计算机模块具有完整的计算机功能,集成网络、显示、PCI-PCI桥、SATA接口、声卡、串口、VGA、USB接口等功能。同时,为避免因静电造成的板卡IC器件损坏,故针对各个接口如USB、SATA、PS/2、VGA做了特定的ESD防护设计,将ESD器件放在连接器侧放置,同时滤波器件紧挨ESD器件,最大程度地保护因静电引起的瞬态电流而对板卡器件造成的损坏,延长板卡器件使用周期。
2.2 冗余控制模块
冗余控制模块是基于CPCI总线和FPGA的高速逻辑控制模块,如图4所示。该模块用于完成包括本机切换控制、报警控制、隔离控制等功能。硬件功能组成包括RS422隔离通信、继电器驱动、LED驱动、电源管理、电平转换、电源监控、CPCI总线及FPGA等电路。
图4 冗余控制模块原理图
2.3 数字量IO模块
数字IO模块输出TTL电平信号,用于测控组合设备前面板信号指示灯控制,同时采集来自串口通信切换模块的状态回采信号用于控制器模块对设备隔离状态自检回采。控制器模块通过数字IO模块驱动程序控制指示灯驱动电路实现面板指示灯状态控制,原理如图5所示。
图5 数字量IO模块原理图
2.4 AD/DA模拟量模块
AD/DA模块为基于CPCI总线和FPGA的高速逻辑控制模块,用于完成包括模拟量电压采集、模拟电压输出和开关量IO等功能。硬件功能组成包括AD、DA、IO、电源管理、CPCI总线、FPGA等电路,原理如图6所示。
图6 AD/DA模拟量模块原理图
2.5 RS422串口模块
RS422串口模块是基于CPCI总线的4路隔离串行通信接口模块,如图7所示。422串口模块主要基于UART模块来实现串行通信。主要由UART模块、电平转换模块、422隔离收发模块、电源管理、CPCI总线、FPGA等电路组成。
图7 RS422串口模块原理图
2.6 电源模块
电源模块主要功能将输入直流DC28V通过内部极性保护组件、滤波器组件、输入滤波电路、DC/DC变换器组件及输出滤波组件变换一组稳定的直流输出,给系统供电,原理如图8所示。
图8 电源模块原理图
3 系统测控软件设计
系统测控软件运行在测控设备中,实现自检、网络接收指令、控制指令执行、数据采集与控制、组播数据回传、灾备恢复、应用故障诊断等。文章详细对故障信息采集以及故障诊断设计进行阐述。
文章主要分析任务监测[3]状态、CPU温度、CPU占用率、磁盘剩余空间状态以及IO状态故障诊断分析,根据故障分类形成一组结果存储在一维数组中,从数组中查找找到并定位故障,而顺序查找和二分查找的实践复杂度分别是O(n)和O(logn),对于实时系统选择用复杂度O(1)的查找算法更加合适。而哈希算法是一种复杂度O(1)的查找算法,其中位图是其中一种应用,本文将采用位图查找故障元素。
故障因素按照数组设计为element_array[]={“任务状态”,“CPU温度”, “CPU占用率”,“磁盘剩余空间”,“IO状态”}={4,3,2,1,0},根据element_array和切换结果保存数组Listswitch生成位图映射表BitMap,如表1所示。
表1 位图映射表BitMap
其中:normal表示无异常;IOabnormal表示IO异常;VHDCabnormal表示硬盘剩余异常;RCPUabnormal表示CPU占用率异常;TCPUabnormal表示CPU温度异常;TASKabnormal表示任务异常。
图9Listswitch中各状态位置排列,D4表示任务状态、D3表示CPU温度状态、D2表示CPU占用率状态、D1表示磁盘状态、D0表示IO操作状态,同理可以处理警告保存数组Listwarn。
图9 数组示意
通过维护记录位图映射表BitMap和故障因素的数组Listswitch,通过计算数组Listswitch所表示的值,然后索引映射表BitMap就可以找到当前哪些因素触发切换条件。这个数组的值表示的位置和映射表BitMap中的位置是一一对应的,可以快速定位当前系统故障因素。
3.1 任务状态采集监测程序设计
任务状态表示实时系统中任务运行状态,有多种状态如“STOP”、“DELAY”、“SUSPEND”以及“READY”等。
测控软件启动时,测控软件建立并启动任务时,有两类获取到任务ID的途径。一类是将其返回的任务ID实时的保存在任务ID列表中。另一类是系统任务,通过系统函数接口使用名称查找其任务ID,并将其存到任务ID列表中,程序动态维护任务ID列表。
设计注册所需要监测的任务详细见表2,任务状态监测逻辑如图10所示。
表2 监测任务列表
任务状态采集与监测设计概述如下:
1)启动任务时记录任务返回值为任务的ID值并依次存入到固定数组idarray[n]。
2)动态任务启动和退出主要包含删除任务前更新数组idarray[n]的ID和正常退出前更新数组idarray[n]的ID。
3)针对数组idarray[n]进行扫描,判断其任务状态,识别到任务“STOP”异常后,完成异常任务切换标志设置;识别到任务“SUSPEND”,设置报警设置,表明系统出现任务SUSPEND的状态,记录日志。
动态任务的个数有限,可以设计固定任务在数组前N位,动态任务的ID存入固定的后半段N-1~M,系统任务存入M+1~N,逻辑设计如图10所示。
图10 任务状态获取与监测逻辑设计图
在任务状态采集与监测模块中,完成任务ID维护、任务状态实时监测以及监测结果标记等工作,为故障诊断模块提供处理依据。
表3 系统运行任务状态监测判据详细表
3.2 CPU温度、CPU占用率以及磁盘剩余空间监测采集程序设计
软件设计独立监测模块[4],周期性的采集CPU温度(TCPU)、CPU占用率(RCPU)以及磁盘剩余空间(VHDC)信息,CPU温度/占用率以及磁盘空间状态判据如表4所示,传递给信息处理模块使用,如图11所示。
表4 CPU温度/占用率以及磁盘监测判据详细表
图11 CPU温度/占用率/磁盘剩余空间监测逻辑
软件对于系统的运行状态(CPU温度、CPU占用率以及磁盘剩余空间)故障进行“故障趋势分析”,即当表4中的检测项目的采集值超过“报警门限”或“切换门限”后,软件会对之后5个检测周期内该参数的变化趋势进行预测与判断,根据其曲线走向执行相应的报警动作或切换动作,防止指标出现极短时间超过阈值后回落到正常范围情况时出现虚报,从而降低虚警概率。
系统监测过程中,被监测信息(CPU温度、CPU占用率以及磁盘剩余空间的变化规律随时间是不断变化的,为了从监测数据中提取出有效信息,需要对监测数据的走势做出假设。
本文采用最小二乘法[5]实现对严重故障的预测与分析,最小二乘法是一种数据优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便的预测未来的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
具体过程如下:“报警门限”和“切换门限”可以通过用户配置文件设置。当采样值超过“报警门限”或者“切换门限”时,采样过去5个周期的实测值采用线性拟合的方法拟合出曲线,f(t)=a+b*t+…+c*tn,t表示时刻,f(t)表示t时刻的拟合值,根据此公式预测未来趋势,进而来预测超过“报警门限”或“切换门限”是否有效发生,完成“报警”或“切换”标志设置,逻辑设计如图12所示。
图12 CPU温度/占用率以及磁盘空间判断逻辑图
3.3 IO模块状态
系统监测IO输出与采集的结果IOout和IOin比对,设计当结果IOout≅IOin,判定IO控制异常,设置切换状态。
图13 IO操作监测逻辑
4 故障诊断设计
综合任务状态、CPU温度、CPU占用率、磁盘剩余空间以及IO状态,采用位图[6-7]查找算法,快速检测出当前系统中需要切换的因素。
故障诊断[8-22]实时监测任务监测状态、CPU温度、CPU占用率以、磁盘剩余空间状态以及IO状态等,并根据各项因素保存的“警告”列表Listwarn和“切换”列表Listswitch中状态,实时识别并做出操作。
识别是normal状态不做处理;识别是warn状态记录日志提示;识别是switch状态执行停止喂狗并记录日志。
综合判断系统报警与切换条件如表5所示。
表5 综合判断表
任务状态、CPU温度、CPU占用率以及磁盘剩余空间状态独立判断,形成报警和异常切换结果,依据表逻辑,综合判断,设计如图14所示。
图14 综合判断逻辑设计
5 实验结果与分析
5.1 本系统实现触发设备切换的技术参数
1)任务状态出现“STOP”;
2)CPU温度TCPU≥85 ℃;
3)CPU占用率RCPU≥80%;
4)磁盘剩余空间VHDC≤1 GB;
5)IO操作异常IOout≅IOin。
5.2 实验步骤和方法
测控软件停止给RC模块发喂狗操作,设备即故障隔离,触发停止喂狗操作的输入有任务异常、CPU温度异常、CPU占用率异常、磁盘剩余空间不足、IO操作异常等。
5.2.1 任务异常识别仿真
任务异常是指所监测任务状态在运行过程中出现“STOP”状态(任务异常无法工作)。所监测的具有代表性的任务主要包含任务如表1所示,仿真过程中,通过故障注入软件[23]向前端测控软件中注入触发任务STOP指令,当前端测控软件响应这一条指令时,任务在t1时刻状态切换为“STOP”状态,故障诊断模块识别到异常状态执行停止喂狗操作,当前设备故障隔离,对机切换为单主机工作。
5.2.2 CPU温度异常识别仿真
CPU温度表示当前主控制器CPU实时温度,仿真时,通过故障注入软件向前端测控软件中注入修改CPU温度全局变量指令:
1)设置值低于预警值(TCPU<70 ℃),无处理;
2)设置值高于预警值小于切换阈值(70 ℃≤TCPU<85 ℃),设置报警标志并写日志记录CPU温度预警;
3)设置值在预警阈值上下波动,模拟虚警的工况,根据设计通过曲线拟合可以判别出此种虚警情况,记录虚预警记录即可;
4)设置值达到切换阈值(TCPU≥85 ℃),执行停止喂狗操作,当前设备故障隔离,对机切换为单主机工作。
5.2.3 CPU占用率异常识别仿真验证
CPU占用率表示当前系统CPU内存使用情况,仿真时,通过故障注入软件向前端测控软件中注入修改CPU占用率指令,指令执行通过CPU设置接口控制当前系统CPU占用率:
1)设置值低于预警值(RCPU<50%),无处理;
2)设置值高于预警值小于切换值(50%≤RCPU<80%),设置报警标志并写日志记录CPU占用率预警记录;
3)设置值在报警阈值上下波动,模拟虚警的工况,根据设计通过曲线拟合可以判别出此种虚警情况,记录虚预警记录即可;
4)如果预测值达到阈值(RCPU≥80%),按照切换处理;设置值达到切换阈值(RCPU≥80%),执行停止喂狗操作,当前设备故障隔离,对机切换为单主机工作。
5.2.4 磁盘剩余空间异常识别仿真验证
嵌入系统中磁盘空间有限,磁盘资源宝贵,剩余空间必须监测。仿真时,通过ftp工具向设备硬盘写入文件,消耗硬盘空间:
1)剩余空间值高于预警值(VHDC>3 GB),无处理;
2)剩余空间值高于预警值小于切换值(1 GB 3)剩余空间值在预警阈值上下波动,模拟虚警的工况,根据设计通过曲线拟合可以判别出此种虚警情况,记录虚预警记录即可; 4)如果预测值低于阈值(VHDC≤1 GB),按照切换处理,执行喂狗操作,当前设备故障隔离,对机切换为单主机工作。 5.2.5 IO操作异常识别仿真验证 IO操作(IOcontrol)异常表示IO输出结果IOout与回采结果IOin不一致,表示IO功能失效,直接影响系统的执行结果。仿真时,通过故障注入软件向测控软件中注入修改IO回采结果IOin,IOout==IOin表示正常状态无需处理;IOout≅IOin表示异常,执行停止喂狗操作,当前设备故障隔离,对机切换为单主机工作。 5.2.6 故障诊断综合判断仿真验证 综合设计测试用例组合如表6所示。 表6 实验组合列表 依据表设计,每种条件开展20次测试,测试结果如表7所示。 表7 实验结果列表 通过实验结果表明,文章所设计的系统故障诊断与容错方法能够100%识别所监测任务状态、CPU温度、CPU占用率、磁盘剩余空间以及IO操作异常的“报警门限”和“切换门限”,并且能够有效地处理虚报警和虚切换的工况,有效地增强了冗余测控系统的运行可靠性,文章目前只采考虑了任务状态、CPU温度、CPU占用率、磁盘剩余空间以及IO状态等5项异常信息输入且故障信息分析处理算法比较单一,与实际工况存在着一些差异,实际场景中工作参数会更多,如各个功能板卡工作情况、系统数据来源是否存在严重异常,并且在数据分析方面可以引入智能化算法分析研究等。 文章提出一种故障诊断与容错方法,能够识别系统中任务异常、CPU温度过高、CPU占用率过大、磁盘剩余空间不足以及IO操作异常等故障状态,并对各项结果进行综合分析判断以及结果等级分类与处理,有效提高了冗余测控系统工作的可靠性和系统稳定性,但文章也存在输入参数不足以及数据处理不够智能的问题,还需要对数据预测和学习进行研究,将来可以延伸应用到小型化多冗余分布式的测控系统。5.3 实验数据
5.4 实验结果分析
6 结束语