巧用RBF解决S1240交换机用户割接中的相关问题一.docx
《巧用RBF解决S1240交换机用户割接中的相关问题一.docx》由会员分享,可在线阅读,更多相关《巧用RBF解决S1240交换机用户割接中的相关问题一.docx(33页珍藏版)》请在冰豆网上搜索。
巧用RBF解决S1240交换机用户割接中的相关问题一
<>
一、前言
在日常的维护作业中,我们经常会碰到要调整某个号码的EN的情况,对S1240EC74机型而言,平常的人机命令需要依次执行“删号->创号->补录新业务”几个步骤,在需要对多个用户进行操作时,虽可使用MACRO进行批处理,但仍需要人工检查并手工补录号码的程控新功能,若批处理的号码中存在BCG用户,则还需要人工检查该号码的BCGID及PN等值,这大大降低了工作效率并增加了出错的风险,容易引起用户投诉,特别是近两年进行的交换机减容工作,使这一问题变得更加突出。
有鉴于此,我通过查询相关资料,使用MPTMON编程的方法成功地解决了这一问题,并在我县分公司2003年河西模块局的割接及2006年的交换机减容工作中使用这一工具,有效地减少了机房操作人员的工作量,降低了差错率,极大地减少了用户的投诉。
二、程序设计的原理
(一)、相关理论基础
对贝尔S1240交换机而言,要修改号码的EN,可通过直接更改相关RELATION的方式来实现,但其操作起来较为复杂,要求对系统的数据结构有较为深入的了解,而且容易因误操作造成系统的数据混乱,而通过人机命令的方式来进行则较为安全。
因此,我采取了对交换机的人机命令报告进行分析的方法来实现EN的自动调整。
S1240在输出人机命令报告时,会先以ASCII码的形式将报告存在内存的报告缓存区中,通过报告缓存区指针RBF,我们便可直接读取报告的相关信息。
而在MPTMON中,使用SCAN指令可按关键字对内存进行扫描(扫描成功则RCX不为零)。
因此,通过对不同程控功能所对应的关键字进行扫描判断,便能很方便地确认出用户具有何种新业务,再通过MPTMON编程用人机命令将相关业务恢复,我们便能够在确保数据安全前提下实现号码割接及程控功能的自动添加。
(二)、对交换系统运行影响的评估
因该程序是通过人机命令的方式来实现设备号的调整及业务的添加,这与正常情况下的手工操作是一致的;而在程序设计中,对内存的访问仅限于RBF区域,且仅使用SCAN、WOR、BYT等指令进行读操作,不会造成控制单元的内存数据更改;为了暂存错误号码清单,另申请了一个UWA空间ERR_LIST,并限制了ERR_LIST最多储存40个错误号码,这是远低于UWA区域的大小的(2KBytes),不会造成溢出错误。
因此,使用这一工具不会对交换机系统的正常运行造成任何影响。
需要注意的是,因该MACRO的编写是基于S1240交换机EC74L204版本的,未对其他版本进行分析及测试,尚无法确定其他版本的人机命令报告所需扫描的关键字及相关偏移量信息等是否一致。
因此,若将该MACRO使用于其他版本时,请先按本文中介绍的方法对相关报告进行分析并自行调整关键字及偏移量。
否则,有可能造成用户程控功能的添加错误(但不会对交换系统运行造成影响)!
三、程序的使用
使用该程序可方便地对批量号码进行割接处理,该程序具备如下功能:
自动对交换机号码(包括BCG用户)进行删除-创建-新业务恢复等批处理。
自动获取待割接号码的EN信息,并能获取BCG用户的BCGID、PN等值,在批量割接中无须再将BCG用户划出进行单独处理。
在批处理结束时,能自动列出操作不成功的号码供人工分析使用。
该程序分为几个模块,使用时,请自行编辑DN_LISTMACRO中的待割接号码列表,按如下格式编写:
:
ADN1,NEWEN1
:
ADN2,NEWEN2
..
:
ADNx,NEWENx
更多文章mxdwk
其中,A为文档中定义的割接MACRO名,DN为需要进行割接的号码,NEWEN即为新位置的设备号。
需要注意的是,因交换机对单个MACRO的大小有限制,请将DN_LIST的号码清单限制在200个以下或采取增加子MACRO定义的方法来解决。
因在实际使用中,需要改变的仅为DN列表,故可采取将DN_LIST与其他部分分不同文件的方法来导入PTCE内存,以避免重复导入其他MACRO。
使用时,在MPTMON环境下执行:
MAIN即可。
若全部执行成功,则会出现“CONGRATULATION”等信息提示,若有部分号码不成功,则在执行结束时会给出相关号码清单。
另外,出于减少无用的交换机指令的考虑,本程序设计时假定新创建用户的SUBGRP=1,OCB=PERM&NAT,若待割接号码的程控功能仅为该两项缺省值时,将省略掉一条修改用户程控功能的指令。
若新创建用户为其他缺省值的,请参考说明自行修改程序源码。
四、程序设计方案
(一)、程序流程图
(二)程序功能模块及相关说明
该程序包括主MACRO“MAIN”及以下几个功能模块(MACRO)
普通用户割接MACRO“A”,负责普通用户的EN调整及新业务的恢复。
BCG用户割接MACRO“BCGUSER”,负责BCG用户的EN调整及新业务的恢复。
出错判断及处理MACRO“ERRDEAL”,负责对相关步骤进行检验,并将不成功号码暂存入ERR_LIST列表。
执行结果汇总MACRO“RESULT”,对DN_LIST的割接情况进行分析,将不成功号码作清单列出。
下面对主要的功能模块作简要说明:
(1)、普通用户割接MACRO“A”
该MACRO先用<4296:
指令显示号码的相关信息,并分析报告内容,根据报告中的“BCGID”关键字,判断该号码是否为BCG用户,若是则调用“BCGUSER”MACRO进行相应的处理。
若为普通用户且显示成功,则收集用户的NA、TN及程控功能等信息,并采用<4295:
及<4291:
指令进行用户的删创,最后再用<4294:
指令进行用户程控功能的恢复。
号码的NA、TN、BCGID、PN及程控功能的判断,则采取扫描不同的关键字,并根据关键字读取指定偏移量信息的方法来实现。
下表列出了本MACRO中需要进行判断及恢复的相关信息。
表一、各程控功能扫描关键字及偏移量信息
程控功能扫描关键字偏移量(RBF+RDX)获取信息说明
BCGIDBCGID8-9BCGID值需转换为字符
内部号PNPN5-11PN值需转换为字符
设备号ENH'2-5,18-21/23-26NA、TN值需转换为字符
用户组SUBGRP9-10用户组需转换为字符
密码PASSWORD11-14密码需转换为字符
截接INTCPINTCP8MOVE或BADP仅根据首字节为“M”或“O”判断
立即计费(BCG)BLNGLEV17判断立即计费判断首字节是否为“I”
呼出权限OCBPERM6用户OCB值仅根据首字判断
来电显示CGLIP 仅判断使用23=1&1恢复业务
反极PAYPHONE 仅判断仅使用10=2&3参数恢复业务
呼叫转移CFWDU 仅判断
遇忙转移CFWDBSUB9,11补充判断首字补充判断是否为电话助理业务
无应答转移CFWDNOR9,11补充判断首字补充判断是否为电话助理业务
电话助理1 仅判断
电话助理2 仅判断
因为不同号码的具体程控功能数目会有所区别,本MACRO定义了数组“.F0”-“.F9”、“.SUBCTRL0”-“.SUBCTRL2、“.OCB_0”-“.OCB_1”等来进行具体的功能恢复,指令参数全部采用数字形式。
(2)、BCG用户割接MACRO“BCGUSER”
该MACRO先用<4381:
指令显示号码的相关信息,并分析报告内容,收集用户的BCGID、PN、程控功能等信息(参见表一),并依次进行删除-创建-恢复的操作,与MACRO“A”功能相似,只是具体的操作指令有所不同。
(3)、出错判断及处理MACRO“ERRDEAL”
该MACRO通过扫描不同的关键字,对常见的执行不成功的情况进行判断,并通过ERR_LIST列表将不成功号码进行暂存,供MACRO执行完毕后进行汇总分析,为防止缓冲区溢出,限制最大记录数为40,即最多只记录40个不成功的号码。
共2页:
上一页12下一页
五、程序源代码及相关注释
REMMACMAIN
DEFMACMAIN
;
;-------------------------------------------------
;DESIGNEDBYLIAOZHICAI,RONGANTELECOM,2006-12-8
;REDESIGNEDAT2007-11-25
;-------------------------------------------------
;
SETERR
RETUWA.ERR_LIST
REM.ERR,.ERRCOUNT,.DN_COUNT
RESERR
DEF.ERR=0,.ERRCOUNT=0,.DN_COUNT=0==》定义全局变量,ERR用于进行出
GETUWA.ERR_LIST错判断,ERRCOUNT进行错误计数,
DN_COUNT则对执行成功号码计数
:
DN_LISTERR_LIST用于暂存不成功号码
:
RESULT
RETUWA.ERR_LIST
REMMACDN_LIST
REM.ERR,.ERRCOUNT,.DN_COUNT
EM
REMMACERRDEAL
DEFMACERRDEAL==》出错判断及处理模块
.ERR=0
BAS=A
IF.ERRCOUNT>=40T==》超过40个错误则中断执行
:
RESULT
RETUWA.ERR_LIST
REM.ERR,.ERRCOUNT,.DN_COUNT
EXIT
END
SCARBF,1,1K,'NOTSUCCESSFUL'
IFRCX<>0
.ERR=1
BYT.ERR_LIST+.ERRCOUNT*8T='%0'
.ERRCOUNT=.ERRCOUNT+1
RETMAC
END
SCARBF,1,1K,'CHGNBR'==》有改号音用户不执行,视为出错
IFRCX<>0
.ERR=1
BYT.ERR_LIST+.ERRCOUNT*8T='%0'
.ERRCOUNT=.ERRCOUNT+1
RETMAC
END
EM
REMMACRESULT
DEFMACRESULT==》执行结果汇总显示模块
BAS=T
ADD.C=0
ADD.DN0,.DN1,.DN2,.DN3,.DN4,.DN5,.DN6,.DN7
CLR
LOC2,15
TIME
WRI''
WRI'SUCCESSFULDNNUMBERIS:
',.DN_COUNT
WRI''
IF.ERRCOUNT=0
WRI'CONGRATULATION,NOERROROCCURS!
(-_-)(-_-)(-_-)(-_-)'
WRI''
RETMAC
ENDIF
IF.ERRCOUNT>=40T
WRI'ALERT:
OVERFLOW!
!
!
(
WRI''
ENDIF
WRI'NOTSUCCESSFULDNNUMBERIS:
',.ERRCOUNT
WRI''
WRI'LISTASFOLLOWS,YOUMUSTCHECKIT:
'
WRI''
BAS=A
COU.ERRCOUNT==》读取ERR_LIST列表,将不成功号码按3个一行显示
IF.C<.ERRCOUNT
.DN0=BYT.ERR_LIST+.C*8T
.DN1=BYT.ERR_LIST+.C*8T+1T
.DN2=BYT.ERR_LIST+.C*8T+2T
.DN3=BYT.ERR_LIST+.C*8T+3T
.DN4=BYT.ERR_LIST+.C*8T+4T
.DN5=BYT.ERR_LIST+.C*8T+5T
.DN6=BYT.ERR_LIST+.C*8T+6T
.DN7=BYT.ERR_LIST+.C*8T+7T
WRI'',&
WRI'%(.DN0)%(.DN1)%(.DN2)%(.DN3)%(.DN4)%(.DN5)%(.DN6)%(.DN7)',&\.C=.C+1
END
IF.C-.C/3*3=0
WRI''
ENDIF
IF.C>40T
EXIT
ENDIF
ENDC
WRI''
WRI''
EM
REMMACA
DEFMACA==》普通用户割接模块
;
;--------------------------------------------------
;DESIGNEDBYLIAOZHICAI,RONGANTELECOM,2006-12-8
;P0=MOVEDN,P1=NEWEN
;USEDFORS1240E74L204
;--------------------------------------------------
;
ADD.NA1,.NA2,.NA3,.NA4
ADD.TN1,.TN2,.TN3,.TN4
ADD.BCGID_1,.BCGID_2,.BCGID
ADD.SUBGRP_1,.SUBGRP_2,.SUBGRP
ADD.OCB_0,.OCB_1,.OCB=0
ADD.SUBCTRL=0,.PASSWORD=0
ADD.DHZL_1=0,.DHZL_2=0
ADD.TOTALBAR=0
ADD.COU=0,.COU_CTRL=0
ADD.SUBCTRL0='',.SUBCTRL1='',.SUBCTRL2=''
BAS=T
SUF=T
COU8T
ADD.F%(.COU)=''
.COU=.COU+1
ENDC
.COU=0
<4296:
DN=K'%0.\:
LAST==》显示号码,并获取相关信息
SCARBF,1,1K,'BCGID'
IFRCX<>0
BAS=T
.BCGID_1=BYTRBF+RCX+7T
.BCGID_2=BYTRBF+RCX+8T
BAS=A
.BCGID='%(.BCGID_1)%(.BCGID_2)'
BAS=T
:
BCGUSER%(.BCGID),%0,%1
RETMAC
ENDBCG
:
ERRDEAL%0==》对指令执行结果进行分析,出错则中断
IF.ERR=1
RETMAC
ENDERR
SCARBF,1,1K,'H'''==》读取号码的原设备号值
BAS=T
IFRCX<>0
.NA1=BYTRBF+RDX+2T
.NA2=BYTRBF+RDX+3T
.NA3=BYTRBF+RDX+4T
.NA4=BYTRBF+RDX+5T
.TN1=BYTRBF+RDX+18T
.TN2=BYTRBF+RDX+19T
.TN3=BYTRBF+RDX+20T
.TN4=BYTRBF+RDX+21T
BAS=A
ADD.NA_ORIG='%(.NA1)%(.NA2)%(.NA3)%(.NA4)'
ADD.TN_ORIG='%(.TN1)%(.TN2)%(.TN3)%(.TN4)'
BAS=T
ELS
BAS=A
BYT.ERR_LIST+.ERRCOUNT*8T='%0'
.ERRCOUNT=.ERRCOUNT+1==》空号退出
RETMAC
ENDEN
SCARBF,1,1K,'SUBGRP'
IFRCX<>0ANDWORRBF+RDX+9T<>2031H==》为用户组1则不添加
BAS=T
.SUBGRP_1=BYTRBF+RDX+9T
.SUBGRP_2=BYTRBF+RDX+10T
BAS=A
.SUBGRP='%(.SUBGRP_1)%(.SUBGRP_2)'
BAS=T
.F%(.COU)=',7=',.F%(.COU+1)='%(.SUBGRP)'
.COU=.COU+2
ENDIF
SCARBF,1,1K,'CGLIP'==》各项程控功能判断
IFRCX<>0
.F%(.COU)=',23=',.F%(.COU+1)='1&1'
.COU=.COU+2
END
SCARBF,1,1K,'INTCP'
IFRCX<>0
IFBYTRBF+RDX+8T='M'
.F%(.COU)=',13=',.F%(.COU+1)='6'
.COU=.COU+2
ORIFBYTRBF+RDX+8T='O'
.F%(.COU)=',13=',.F%(.COU+1)='8'
.COU=.COU+2
END
ENDIF
SCARBF,1,1K,'PAYPHONE'
IFRCX<>0
.F%(.COU)=',10=',.F%(.COU+1)='2&3'
.COU=.COU+2
END
SCARBF,1,1K,'TOTALBAR'
IFRCX<>0
.TOTALBAR=1
END
SCARBF,1,1K,''
IFRCX<>0
.DHZL_1=1
ENDIF
SCARBF,1,1K,''
IFRCX<>0
.DHZL_2=1
ENDIF
SCARBF,1,1K,'PERM'==》OCB值仅判断首字
IFRCX<>0
IFWORRBF+RDX+6T=4D45H
.OCB_0='EMER',.OCB_1='G',.OCB=1
ORIFWORRBF+RDX+6T=4F4CH
.OCB_0='LOCA',.OCB_1='L',.OCB=1
ORIFWORRBF+RDX+6T=5553H
.OCB_0='SUBU',.OCB_1='RBAN',.OCB=1
ORIFWORRBF+RDX+6T=414EH
.OCB_0='NAT',.OCB_1='',.OCB=0
ORIFWORRBF+RDX+6T=4E49H
.OCB_0='INT',.OCB_1='',.OCB=1
ENDIF
ENDIF
SCARBF,1,1K,'CFWDU'
IFRCX<>0
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&8'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCARBF,1,1K,'CFWDBSUB'
IFRCX<>0ANDWORRBF+RDX+9T<>3131HANDWORRBF+RDX+11T<>3338H
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&4'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCARBF,1,1K,'CFWDNOR'
IFRCX<>0ANDWORRBF+RDX+9T<>3131HANDWORRBF+RDX+11T<>3338H
.SUBCTRL=1
.SUBCTRL%(.COU_CTRL)='&6'
.COU_CTRL=.COU_CTRL+1
ENDIF
SCARBF,1,1K,'PASSWORD'
IFRCX<>0
.PASSWORD=1
ADD.PASS1=BYTRBF+RDX+11T
ADD.PASS2=BYTRBF+RDX+12T
ADD.PASS3=BYTRBF+RDX+13T
ADD.PASS4=BYTRBF+RDX+14T
.OCB=0
.SUBCTRL=0
ENDIF
<4295:
DN=K'%0,EN=H'%(.NA_ORIG)&%(.TN_ORIG),48.\:
LAST
:
ERRDEAL%0
IF.ERR=1
RETMAC
ENDERR
<4291:
DN=K'%0,EN=H'%1.\:
LAST
:
ERRDEAL%0
IF.ERR=1
RETMAC
ENDERR
BAS=A
IF.DHZL_1=1
<4294:
DN=K'%0,CFWD=ACTIVATE&CFWDBSUB&K'.\:
LAST
END
IF.DHZL_2=1
<4294:
DN=K'%0,CFWD=ACTIVATE&CFWDNOR&K'.\:
LAST
END
IF.PASSWORD=1==》INTCP与PASSWORD必须分开执行
<4294:
DN=K'%0,28=3&2&%(.OCB_0)%(.OCB_1)
<,40=1&27%(.SUBCTRL0)%(.SUBCTRL1)%(.SUBCTRL2)
<,19=1&"%(.PASS1)%(.PASS2)%(.PASS3)%(.PASS4)".
:
LAST
ORIF.SUBCTRL=1
<4294:
DN=K'%0%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7),28=3&2&%(.OCB_0)%(.OCB_1)
<,40=1%(.SUBCTRL0)%(.SUBCTRL1)%(.SUBCTRL2).
:
LAST
ORIF.OCB=1
<4294:
DN=K'%0%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7),28=3&2&%(.OCB_0)%(.OCB_1).
:
LAST
ENDPASS
IF.COU<>0AND.SUBCTRL=0AND.OCB=0
<4294:
DN=K'%0%(.F0)%(.F1)%(.F2)%(.F3)%(.F4)
<%(.F5)%(.F6)%(.F7).
:
LAST
ENDIF
:
ERRDEAL%0
IF.ERR=1
RETMAC
ENDERR
IF.TOTALBAR=1
<4294:
DN=K'%0,OCB=ADD&TOTALBAR.\:
LAST
END
.DN_COUNT=.DN_COUNT+1
EM
REMMACBCGUSER
DEFMACBCGUSER==》与MACROA类似,改为BCG相关指令
ADD.NA1,.NA2,.NA3,.NA4
ADD.TN1,.TN2,.TN3,.TN4
ADD.BCGID_1,.BCGID_2,.BCGID
ADD.PN_1ST,.PN_2ND,.PN1,.PN2,.PN3,.PN4,.PN5,.PN6,.PN7
ADD.SUBGRP_1,.SUBGRP_2,.SUBGRP
ADD.OCB_0,.OCB_1,.OCB=0
ADD.SUBCTRL=0,.PASSWORD=0
ADD.DHZL_1=0,.DHZL_2=0
ADD.TOTALBAR=0
ADD.COU=0,.COU_CTRL=0
ADD.SUBCTRL0='',.SUBCTRL1='',.SUBCTRL2=''
BAS=T
SUF=T
COU10T
ADD.F%(.COU)=''
.COU=.COU+1
ENDC
.COU=0
<4381:
DN=K'%1.\:
LAST
:
ERRDEAL%1
IF.ERR=1
RETMAC
ENDERR
SCARBF,1,1K,'H'''
IFRCX<>0
.NA1=BYTRBF+RDX+2T
.NA2=BYTRBF+RDX+3T
.NA3=BYTRBF+RDX+4T
.NA4=BYTRBF+RDX