jltde
銀牌會(huì)員
發(fā)短消息
關(guān)注Ta
積分 3267
帖子 178
威望 2958 個(gè)
禮品券 5 個(gè)
專家指數(shù) 1
注冊(cè) 2007-11-21 專業(yè)方向
回答問(wèn)題數(shù) 0
回答被采納數(shù) 0
回答采納率 0%
|
大
中
小
發(fā)表于 2011-05-29 19:20:09
只看樓主
|
【資料名稱】:MACRO編寫方法之入門篇
【資料作者】:jltde
【資料日期】:20110529
【資料語(yǔ)言】:中文
【資料格式】:DOC
【資料目錄和簡(jiǎn)介】:
一直以來(lái),我們的維護(hù)工作存在很多重復(fù)勞動(dòng),當(dāng)設(shè)備集中管理時(shí)這種重復(fù)尤為明顯,在如此多的網(wǎng)元上,即使是修改一下用戶密碼這個(gè)簡(jiǎn)單操作,手工執(zhí)行就要花費(fèi)很長(zhǎng)的時(shí)間,更不要說(shuō)其他復(fù)雜的操作了。而如果我們利用NOKIAHIT工具編寫一個(gè)MACRO程序的話,那么,半天甚至一天的工作量在一個(gè)小時(shí)就有可能完成,同時(shí),大大減少甚至完全避免手工操作時(shí)的一些人為錯(cuò)誤。
MACRO編寫方法之入門篇一直以來(lái),我們的維護(hù)工作存在很多重復(fù)勞動(dòng),當(dāng)設(shè)備集中管理時(shí)這種重復(fù)尤為明顯,在如此多的網(wǎng)元上,即使是修改一下用戶密碼這個(gè)簡(jiǎn)單操作,手工執(zhí)行就要花費(fèi)很長(zhǎng)的時(shí)間,更不要說(shuō)其他復(fù)雜的操作了。而如果我們利用NOKIA
HIT工具編寫一個(gè)MACRO程序的話,那么,半天甚至一天的工作量在一個(gè)小時(shí)就有可能完成,同時(shí),大大減少甚至完全避免手工操作時(shí)的一些人為錯(cuò)誤。
在我初接觸NOKIA設(shè)備時(shí),看到別人在做有些例行的工作時(shí)總是運(yùn)行MACRO,又快又準(zhǔn)確。于是我也萌發(fā)了編寫MACRO使自己盡量從一些簡(jiǎn)單重復(fù)的勞動(dòng)中解脫出來(lái)的想法,但是由于缺乏MACRO編寫的入門級(jí)資料,所以都是通過(guò)看別人寫的MACRO和HIT幫助來(lái)試著編寫。在我編寫了一些MACRO之后,發(fā)現(xiàn)其實(shí)MACRO的框架結(jié)構(gòu)很固定,而且常用的系統(tǒng)函數(shù)并不多,只要掌握了這些知識(shí),編寫一個(gè)小MACRO并非一件難事。所以我想把有關(guān)編寫MACRO方面的一些知識(shí)總結(jié)出來(lái),和大家分享,希望可以給初學(xué)者提供幫助,以便大家能很快地了解并且掌握HIT這個(gè)工具,提高我們的工作效率。
基于我的學(xué)習(xí)過(guò)程,我想以分析常見(jiàn)問(wèn)題的形式來(lái)介紹一些編寫MACRO的基本方法和常用的系統(tǒng)函數(shù)。
一.如何運(yùn)用MACRO在一個(gè)網(wǎng)元上執(zhí)行一系列的操作。
NOKIA MACRO的語(yǔ)法類似于C語(yǔ)言。程序是由函數(shù)構(gòu)成的。下面以在網(wǎng)元上新建用戶為例進(jìn)行說(shuō)明。登陸到要建用戶的網(wǎng)元后,運(yùn)行下面的MACRO,就可以新建PROFILE:HWWH ,新建用戶:JWFJWF。 修改MACRO中粗體的地方就可以建其他用戶了。
function main() //function是關(guān)鍵字,表示一個(gè)函數(shù)的開(kāi)始,main是這個(gè)函數(shù)的函數(shù)名
device("NE_SCAN"); //使用的連接,與我們?cè)?/font>HIT上登陸網(wǎng)元用的設(shè)備一致
ZIAA:HWWH:ALL=150ARAPW=NO,VTIME=FOREVER,ACCESS=COM,:; //新建PROFILE
ZIAH:JWFJWF:HWWH:; //新建用戶
Z; //網(wǎng)絡(luò)資源有限,所以執(zhí)行完最好就退出網(wǎng)元
Z;
endfunction //以endfunction標(biāo)志函數(shù)的結(jié)束
|
二.通過(guò)上面的例子我們認(rèn)識(shí)了MACRO,那么如何在多個(gè)網(wǎng)元上執(zhí)行相同的操作呢?
HIT工具給我們提供了一組用于連接外部excel文件的函數(shù)集DDEFUNCT。利用這些函數(shù)我們可以對(duì)EXCEL文件進(jìn)行操作,通常我們將要執(zhí)行操作的網(wǎng)元列表在EXCEL文件中。具體介紹如下:
1.打開(kāi)一個(gè)EXCEL文件:
語(yǔ)法:
integer ddeconnect(string Service, string Topic);
返回值為整型變量,如果為0則表示并沒(méi)有和excel文件連接上,利用這個(gè)返回值我們可以判別EXCEL文件是否打開(kāi)。
例如:我們要打開(kāi)的EXCEL文件為 網(wǎng)元信息列表.xls 的sheet1,則可以這樣寫
file_excel=ddeconnect("Excel","[網(wǎng)元信息列表.xls]sheet1");
file_excel 是我們定義的一個(gè)整型變量,用于在程序中代表這個(gè)excel文件,如果它的值不為0則表示成功。
|
2.從打開(kāi)的EXCEL文件中讀取信息
語(yǔ)法:
string dderequest(integer Num,string Item [, integer Timeout])
返回值如果是空字符說(shuō)明沒(méi)有讀到否則成功。利用這個(gè)返回值我們可以判別讀操作成功與否。注:語(yǔ)法中用[ ]括起來(lái)的參數(shù)是可以不給出的。
例如:一般我們都將要訪問(wèn)的網(wǎng)元寫在excel表的第一列,那么這個(gè)列值是不變的,而行數(shù)是在變化的,我們用字符型變量name_ne來(lái)記錄從EXCEL中讀取的網(wǎng)元名,用row_ne來(lái)記錄當(dāng)前程序執(zhí)行了幾個(gè)網(wǎng)元了,R,表示是行數(shù),%d代表一個(gè)整型變量,程序執(zhí)行時(shí)將把當(dāng)前row_ne的值賦值給它,C1表示第一列,如果row_ne =3,則("R%dC1",row_ne)就表示R3C1。執(zhí)行完這條語(yǔ)句,name_ne的值就是excel表中第三行第一列的值。
name_ne=dderequest(file_excel,strprint("R%dC1",row_ne));
|
3.向已經(jīng)打開(kāi)的EXCEL文件寫信息
語(yǔ)法:
integer ddedata(integer Num,string Item,string Data [,integer Timeout])
返回值如果是0說(shuō)明沒(méi)有執(zhí)行成功否則成功,利用這個(gè)返回值我們可以判別寫操作成功與否。
例:如果我們?cè)?/font>EXCEL文件中寫上“OK”作為操作執(zhí)行成功的標(biāo)識(shí),可以執(zhí)行語(yǔ)句:ddedata(file_excel,strprint("R%dC2",row_ne),”O(jiān)K”);
此處的row_ne和2中作用類似,因?yàn)?/font>OK是一個(gè)常量所以要用引號(hào)引起來(lái),如果是變量就不要用引號(hào)了。假設(shè)row_ne=3,則這個(gè)語(yǔ)句執(zhí)行完就會(huì)在EXCEL表的第三行第二列寫上OK,表示執(zhí)行成功;
同樣如果執(zhí)行失敗了用“FAIL”作為標(biāo)識(shí),可以使用語(yǔ)句:ddedata(file_excel,strprint("R%dC2",row_ne),”FAIL”);
|
三.如何判定指令執(zhí)行成功與否以及執(zhí)行結(jié)果怎樣?
我們知道,在NOKIA設(shè)備上執(zhí)行完一項(xiàng)操作后,系統(tǒng)會(huì)給出執(zhí)行的結(jié)果,同時(shí),對(duì)于每一項(xiàng)修改操作,都會(huì)有相應(yīng)的檢查指令。不同的執(zhí)行結(jié)果,其輸出的字符串也存在差異,在程序中通過(guò)提取差異的字符串對(duì)運(yùn)行結(jié)果進(jìn)行判斷,從而執(zhí)行相應(yīng)后續(xù)處理,這樣便增強(qiáng)了程序的完整性和健壯性。如果將操作執(zhí)行結(jié)果輸出到EXCEL文件的話,使得使用它的用戶可以知道程序執(zhí)行的狀況,這樣更增加了程序的友好性,以便用戶在程序執(zhí)行失敗的網(wǎng)元上手工進(jìn)行處理。
HIT提供了getline這個(gè)系統(tǒng)函數(shù)幫助我們提取字符串,然后通過(guò)判斷語(yǔ)句或者分支語(yǔ)句可以對(duì)操作執(zhí)行后的各種情況進(jìn)行分類處理。
語(yǔ)法:
integer getline( string line, ["search criteria"], [variable..])
結(jié)果為0則說(shuō)明沒(méi)有找到,否則表示找到了符合查找規(guī)則的輸出行,這個(gè)值記錄在變量line中。
|
1.
結(jié)合我們前面介紹的對(duì)EXCEL文件的操作,就可以實(shí)現(xiàn):針對(duì)不同的執(zhí)行結(jié)果,在表格中給出不同的標(biāo)識(shí)。例如,當(dāng)輸出結(jié)果包含被判斷的字符串‘variable’時(shí),在表格中標(biāo)識(shí)為“OK”,否則標(biāo)識(shí)為“FAIL”。舉例:在執(zhí)行對(duì)交換機(jī)更改數(shù)據(jù)的指令時(shí),如果更改成功,通常會(huì)輸出字符串“COMMAND EXECUTED”,此時(shí)可以以此判斷。例子如下,其中l(wèi)inerecord是我們定義的一個(gè)字符串變量,用于存放讀取的那一行的值:
if (getline(linerecord,"'COMMAND EXECUTED'"))
ddedata(file_excel, strprint("R%dC2",row_ne),"OK");
else
ddedata(file_excel, strprint("R%dC2",row_ne),"FAIL");
endif
2.
上面的例子比較簡(jiǎn)單,只需要判斷操作執(zhí)行成功與否。假如我們需要知道設(shè)備中具體單元的狀態(tài),例如MB單元是否處于正常狀態(tài),這時(shí)就需要對(duì)多行結(jié)果逐行分析,同時(shí)將結(jié)果寫回EXCEL文檔,怎樣能夠?qū)崿F(xiàn)呢?
我們可以利用getline和logseek這兩個(gè)函數(shù)來(lái)配合執(zhí)行。在一條指令執(zhí)行之后,系統(tǒng)自動(dòng)將閱讀指針設(shè)置在執(zhí)行結(jié)果開(kāi)始的位置,使用logseek可以控制這個(gè)指針的位置,然后可以用getline取得指針?biāo)谛械闹担M(jìn)行分析比較。
語(yǔ)法:
logseek(integer SeekStart,[integer LineOffset]);
這條指令執(zhí)行后沒(méi)有返回值。
SeekStart
TOP
beginning of
the log file.
BOTTOM
end
of
the log file.
LAST
start
of
last
command's
output.
CURRENT
current
position.
LineOffset
設(shè)置偏移量,正數(shù)為從當(dāng)前位置向下移動(dòng)的行數(shù),負(fù)數(shù)為從當(dāng)前位置向上移動(dòng)的行數(shù)。
用法舉例一:只讀取最后一行的內(nèi)容
logseek(LAST); //將指針移到最后
getline(line); //取得最后一行的內(nèi)容
用法舉例二:讀取N行以后的內(nèi)容
logseek(CURRENT,3); //將指針向下移3行
getline(Line); //取得當(dāng)前行的內(nèi)容
用法舉例三: 逐行讀取執(zhí)行結(jié)果
getline(line);//取第一行的結(jié)果
while (getline(line)<>0) // 循環(huán)執(zhí)行直到讀取不到內(nèi)容
對(duì)變量line值進(jìn)行分析判斷是否是需要的信息;
logseek(CURRENT,1); //指針下移一行
endwhile
|
四.有些指令在執(zhí)行過(guò)程中需要用戶再次確認(rèn)才可以繼續(xù)執(zhí)行的,這時(shí)我們可以利用question和answer這對(duì)函數(shù)來(lái)實(shí)現(xiàn),需要強(qiáng)調(diào)的是question和answer必須成對(duì)使用。
語(yǔ)法:
string question(integer index, string question);//其中index是一個(gè)整型常量,用于唯一標(biāo)識(shí)這個(gè)問(wèn)題,并且通過(guò)index使得question和answer匹配。
string answer(integer index, string answer);
例如:
question(1,"[HBT]--Username: ");
answer(1,strprint("%s\r","JWFJWF"));
//“/r”相當(dāng)于我們敲一下“ENTER”鍵
question(2,"[HBT]-Password: ");
answer(2,"111111\r");
question(3, "CONFIRM COMMAND EXECUTION: Y/N ?");
answer(3, "Y\r");
|
五.在程序出現(xiàn)編譯錯(cuò)誤或者執(zhí)行結(jié)果不正確時(shí),如何利用系統(tǒng)工具來(lái)調(diào)試程序?
1.程序編譯沒(méi)有通過(guò)時(shí):可以根據(jù)系統(tǒng)提示,找到不正確的行,一般可能是變量沒(méi)有定義便使用的,在hit程序中所有使用的變量都是要先定義后使用的;有些時(shí)候,可能系統(tǒng)指出錯(cuò)誤的行并沒(méi)有語(yǔ)法錯(cuò)誤,而是因?yàn)榍懊嬉恍械恼Z(yǔ)句沒(méi)有加分號(hào)而導(dǎo)致的錯(cuò)誤。在hit程序中每條語(yǔ)句都要以分號(hào)來(lái)結(jié)束。只要正確使用語(yǔ)法都是可以編譯通過(guò)的。
2.程序編譯通過(guò)但執(zhí)行結(jié)果不正確時(shí):HIT程序執(zhí)行有兩種方式,快速執(zhí)行和交互式執(zhí)行。在交互式這個(gè)執(zhí)行方式下,我們可以設(shè)置斷點(diǎn)(在要設(shè)斷點(diǎn)的行按F5進(jìn)行設(shè)置,去掉斷點(diǎn)也是按F5),然后單步執(zhí)行進(jìn)行調(diào)試。為了更清楚知道程序執(zhí)行情況,可以增加watch(dubug菜單中add watch),看程序執(zhí)行中變量的值是否正確,從而發(fā)現(xiàn)錯(cuò)誤之處進(jìn)行修改。調(diào)試程序是件費(fèi)時(shí)的工作,有時(shí)一個(gè)小問(wèn)題可能要花費(fèi)很長(zhǎng)時(shí)間才可以查出來(lái),但是只要大家細(xì)心檢查程序中核心語(yǔ)句的執(zhí)行結(jié)果,定能發(fā)現(xiàn)錯(cuò)誤之處。
下面我以一個(gè)簡(jiǎn)單的例子給出一個(gè)完整的MACRO,這個(gè)例子實(shí)現(xiàn)了在多個(gè)網(wǎng)元上修改某一用戶密碼的功能。以后寫其他功能的MACRO時(shí)也可以套用這個(gè)MACRO,直接在這個(gè)MACRO的基礎(chǔ)上修改就可以了。
function main()
integer row_ne,file_excel; //定義需要用到的整型變量
string
name_ne, name_excel, linerecord; //定義需要用到的字符串變量
device("NE_SCAN"); //利用NE_SCAN這個(gè)設(shè)備來(lái)登陸網(wǎng)元
row_ne=2; //從第二行起讀取excel文件中的值,每執(zhí)行一個(gè)網(wǎng)元row_ne的值加一;
file_excel=ddeconnect("EXCEL","[修改密碼網(wǎng)元列表.xls]sheet1");// 用file_excel代表excel文件
name_excel=dderequest(file_excel,strprint("R%dC1",row_ne)); /讀/取excel文件中的網(wǎng)元名
strscan(name_excel,"%s",name_ne); //將name_excel的值賦給name_ne,用來(lái)記錄當(dāng)前執(zhí)行的網(wǎng)元
question(2,"ENTER USERNAME <");//以下是程序執(zhí)行中會(huì)遇到的需要用戶輸入的地方
answer(2,"JWFJWF\r");
question(3,"ENTER PASSWORD <");
answer(3,"123456\r");
question(4,"OLD PASSWORD:");
answer(4,"123456\r");
question(5,"NEW PASSWORD:");
answer(5,"654321\r");
question(6,"VERIFICATION:");
answer(6,"654321\r");
while (name_ne<>"END") // 在EXCEL中我們以END來(lái)表示沒(méi)有要執(zhí)行的網(wǎng)元了
question(1,"[HBT]--Device
:"); //由于登陸的網(wǎng)元是變化的所以要放在while循環(huán)中才可
answer(1,strprint("%s\r",name_ne));
Z;
//兩條Z;語(yǔ)句完成退出網(wǎng)元,但是這條語(yǔ)句的位置必須在question&answer語(yǔ)句之后,否則對(duì)應(yīng)"[HBT]--Device
:"這個(gè)問(wèn)題的回答還是剛才執(zhí)行過(guò)的網(wǎng)元名,而不是我們新獲取的下一個(gè)要執(zhí)行的網(wǎng)元名,大家可以試一下把這條語(yǔ)句放在question&answer語(yǔ)句之前,看看執(zhí)行結(jié)果就明白了
ZIAG:NEWPWT:; //要執(zhí)行的操作,修改此處執(zhí)行的指令就可以實(shí)現(xiàn)其他功能
if (getline(linerecord,"'COMMAND EXECUTED'")) //判斷操作成功與否
ddedata(file_excel,strprint("R%dC2",row_ne),"OK");//操作成功以OK標(biāo)識(shí)
endif;
row_ne=row_ne+1;
name_excel=dderequest(file_excel,strprint("R%dC1",row_ne));//讀取下一個(gè)要執(zhí)行的網(wǎng)元
strscan(name_excel,"%s",name_ne);
Z;
endwhile
endfunction
|
本文簡(jiǎn)單介紹了在HIT上編寫MACRO程序的常用函數(shù)和一些小技巧,希望能給大家提供一些幫助,達(dá)到提高我們維護(hù)質(zhì)量的目的。同時(shí)NOKIA的幫助文檔資源豐富,大家可以參考并相互交流,希望本文可以起到拋磚引玉的作用。
[ 本帖最后由 sayyou 于 2012-4-16 21:01 編輯 ]
2011-5-29 19:20:09 下載次數(shù): 370
MACRO.doc (62 KB)
掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書(shū)》
2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書(shū)-2022_03-21》
3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書(shū)》
4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書(shū)》》
5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5G NTN技術(shù)白皮書(shū)》
6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解》
7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書(shū)》
8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1》
| |