通讯系统故障诊断方法和系统 【技术领域】
本发明属通信领域,尤其涉及一种通讯系统故障诊断方法和系统。
背景技术
随着通信技术的高速发展及用户要求的不断提高,通讯系统的集成度也越来越高,作为一种复杂的软硬件系统,如果出现故障,将影响整个系统的正常、稳定运行,所以如何快速、准确地诊断故障,保证通信系统故障的可测性和可维护性便成为业界一个急需解决的问题。
在现有的通讯设备中,大部分都不具有故障诊断定位功能,当需要对故障诊断时,一般都使用额外的专用诊断设备,但由于这些专用的设备在结构上往往有很大的局限性,所以故障定位能力及可宽展性都较差,且不具有通用性,成本较高。如:西门子的故障诊断系统,其诊断过程就只能通过获取各种警告信息来完成,要求被测系统提供大量标准化的警告信息,否则软件无法处理。很显然,这种故障诊断系统仅局限于提供警告功能,故障定位能力有限,且警告信息的标准化要求也限制了其通用性。
【发明内容】
本发明目的在于提供一种性能良好且通用性强的通信系统故障诊断定位方法和系统。
其中,本发明通讯系统故障诊断方法包括如下步骤:
A.建立故障诊断模型及其内部的判断逻辑;
B.故障诊断模型的内部判断逻辑经故障定位后,进行诊断操作;
C.将诊断结果输出至外部设备;
步骤A中的故障诊断模型为树型结构,是利用可解释的脚本语言来建立,其中,所述地脚本语言有二种语句:申明语句和赋值语句。申明语句用来申明一个参数或节点,其参数和节点标识符是自定义的;赋值语句用来表示节点的关联,每个脚本描述一个故障定位树,由3个段组成,分别以<PARAM>,<NODE>,<TREE>起头,其中,
a.<PARAM>段是对动作参数的申明;
b.<NODE>段是对各个节点,包括动作节点和处理节点的申明;
c.<TREE>段定义节点之间的父子关系,形成树型结构;
d.某些动作需要参数,该参数可通过用户界面从用户获取或为已执行过的动作的返回值;
步骤B中的诊断操作是利用系统命令和网管数据库中的数据,采用通用的脚本语言定义操作命令来完成的;
步骤B中的通用的脚本语言为工具命令语言;
步骤C中的诊断结果还可输出至数据库。
本发明的通讯系统故障诊断系统,包括诊断结果显示设备,其特征在于:还具有一故障诊断引擎,该故障诊断引擎包括一个针对故障诊断模型描述脚本的脚本解释器和相应的故障定位模块,经过TCL解释器,采用工具命令语言TCL执行诊断操作后,故障定位模块将诊断结果输至诊断结果显示设备以及诊断结果记录数据库;
所述的通讯系统故障诊断系统的故障诊断模型为树型结构;
所述的通讯系统故障诊断系统的树型结构是一个二叉树结构,在该结构中,每个非叶子节点为一个动作,其中,叶子为诊断的结论。
由于采用了上述的技术方案,所以本发明具有以下优点:
1、由于故障定位流程与诊断操作独立,各自用独立的脚本来描述,所以扩展不会相互影响;
2、由于采用可解释的脚本语言来描述故障诊断模型,所以无须编译,适应渐进的故障诊断流程导出过程;
3、由于利用系统命令和网管数据库中的数据来进行诊断,所以通用性强,能广泛应用于不同的通信系统,且系统命令和网管数据库对诊断的覆盖面广,故障定位能力;
4、本发明中的故障诊断方法在产品的生命周期中是一个逐步总结和优化的过程,采用解释型的故障诊断语言便于动态改进故障诊断流程,而不会影响产品本身。
【附图说明】
图1为本发明通讯系统故障诊断系统结构示意图;
图2为本发明通讯系统故障诊断方法的流程示意图;
图3为故障定位树示意图。
【具体实施方式】
下面根据附图和实施例对本发明作进一步详细说明:
根据图1、图2和图3,本发明包括诊断结果显示设备,还具有一故障诊断引擎,该故障诊断引擎包括一个针对故障诊断模型描述脚本的脚本解释器和相应的故障定位模块,经过TCL解释器,采用工具命令语言TCL执行诊断操作后,故障定位模块将诊断结果输至诊断结果显示设备以及诊断结果记录数据库;通讯系统故障诊断系统的故障诊断模型为树型结构的故障定位树;故障定位树是一种通用的良好的故障定位模型,它通过一系列YES/NO的判断过程实现故障定位,模拟人工故障判断的逻辑,每一个判断过程称为一个动作,经过一系列的动作判断后,最终给出诊断的结论,故障定位树的结构其实就是一个二叉树结构,每个非叶子节点为一个动作,叶子为诊断的结论。
如图2所示,本发明采用这种可解释的脚本语言描述故障诊断模型,故障诊断模型的内部判断逻辑经故障定位后,进行诊断操作,该诊断操作利用系统命令和网管数据库中的数据,采用通用的脚本语言,如工具命令语言TCL,来定义操作命令,诊断操作后,将操作结果输至外部设备或数据库。
如图3所示是一个针对某产品“PPE端口业务故障”的一个故障定位树,图中菱形框称为决定框,代表一个动作,也就是用来决定下一步走向的诊断操作;矩形框代表诊断的一个结论或处理建议,称之为处理框,就是最终的一个诊断结果。
一个故障定位树可以由多个子树组成,每个子树都是如图3所示的二叉树结构,各个子树之间的关系是并行的,也就是说对一个故障的诊断过程中各个子树都要遍历,即使前面的子树已经得到了一个诊断结果,这样在使用中具有更强的灵活性。
故障诊断结构如图1所示,以上描述的故障定位树结构用一种可解释的故障诊断描述语言的脚本来描述;每个诊断操作,也就是决定框中的动作用工具命令语言TCL脚本来描述。
下面介绍故障诊断描述语言的语法:
每个脚本描述一个故障定位树,由3个段组成,分别以<PARAM>,<NODE>,<TREE>起头。<PARAM>段是对动作参数的申明;<NODE>段是对各个动作节点Dec和处理节点Proc的申明;<TREE>段则定义了节点之间的父子关系,形成树型结构。有些动作还需要从外部输入一些命令参数才能完成命令的执行,因此脚本中需要参数信息,这些参数值的获取可能直接通过用户界面从最终用户那里获取,也可能是前面执行过的动作的返回值。
下面是某产品RLOS告警的脚本示例:
<PARAM>
opt_num(″对端光板号″);
cros_num(″对端交叉板号″);
clk_num(″对端时钟板号″);
<NODE>
TOP_FAULT(″RLOS告警″);
Dec1(″对端光板TF告警″,″check warn tf %%″,opt_num);
Dec2(″对端光板OPM_FAIL告警″,″check warn opmfail%%″,opt_num);
Proc1(″正常″);
Proc2(″对端光板故障″);
Dec3(″对端发光正常″,″check light %%″,opt_num);
Dec4(″本站无光″,″check receive″);
Dec5(″本站光功率太小″,″check recv-low″);
Proc3(″光纤断″);
Proc4(″本站光模块或光纤损耗大″);
Dec6(″对端交叉板不在位″,″check board%%″,cros_num);
Dec7(″对端时钟板BD_STATUS告警″,″check warn bd_status%%″,clk_num);
Dec8(″本端环回无LOS告警″,″check warn los locallp″);
Proc5(″对端交叉板或时钟板故障″);
Proc6(″对端交叉板不在位″);
Proc7(″对端时钟板不在位″);
Proc8(″其他原因″);
<TREE>
TOP_FAULT=Dec1+Dec3+Dec6;
Dec1=Dec2+Proc2;
Dec2=Proc1+Proc2;
Dec3=Proc2+Dec4;
Dec4=Dec5+Proc3;
Dec5=Proc1+Proc4;
Dec6=Dec7+Proc6;
Dec7=Dec8+Proc7;
Dec8=Proc5+Proc8;
上述脚本有2种语句:申明语句和赋值语句,申明语句用来申明一个参数或树节点,参数和树节点标识符是自定义的,如参数opt_num和节点Dec1,Dec2等,标识符的命名规则是以字母开头,后跟字母、数字或下划线。
对参数申明来说采用上述脚本中圆括号括起来的字符串对参数进行描述,作用只是为了在让终端用户提供参数值时能将这个参数的描述信息告诉用户作为提示,当然也可以不对参数做申明,从而该参数没有提示信息,这种做法主要用在由动作返回而不是用户提供参数值的情况。
树节点的申明语句也类似,在圆括号中的首先是对该节点的描述字符串,对动作节点Dec后面还有动作命令字符串和可能的参数,对处理节点Proc就只有节点描述字符串。命令字符串中的连续2个百分号“%%”是格式化字符,表示该位置用一个输入参数代替;同样,一个动作命令可以返回若干个输出参数,只要在输入参数序列的后面跟上输出参数序列即可,并且每个输出参数的标识符前要加″&″号。如:DecisionA(″Serdes环回发包测试正常″,″test channel serdeslp%%″,port_num,&packet_num)中port_num就是输入参数,实际发送命令时将命令字符串中的%%替换为port_num的值,而且该动作返回一个参数给packet_num,该参数在以后的动作中可能会用到,这样就不需要提示终端用户来提供packet_num参数的值。节点申明中的″TOP_FAULT″是语言的关键字,表示本故障定位树是用于定位哪个故障现象的。
<TREE>段内的赋值语句表示了节点的关联,TOP_FAULT的赋值语句表示了各个子树的根节点,其他的赋值语句″=″号左边是父节点,该父节点只能是动作节点,不能是处理节点;″=″号右边是NO节点+YES节点,因此<TREE>段说明了树节点的逻辑关联。另外赋值语句右侧也可以只有一个子节点,也就是说不论父节点的判断结果是YES还是NO,都走到该子节点,这是为了适应某些动作只是为了获取其他动作所需的参数而没有判断,如通过一个动作获取系统的一些状态,供其他动作命令作为输入参数,而不需要人工来获取这些状态。
脚本是可以带注释的,注释以#号开始到本行结束。
在启动诊断后,诊断引擎的每个动作其实就是执行一个动作的TCL脚本,首先检查该动作是否需要参数,如果参数已经赋过值,则直接使用该值,否则就提示用户输入,然后执行相应的操作并接收返回结果,对结果进行判断,如果动作中指定有输出参数则还要提取出来保存;经过一系列的动作和逻辑判断,最终得到诊断结果。各个子树之间的关系是并行的,也就是说诊断过程中各个子树都要遍历,即使前面的子树已经得到了一个诊断结果。