賀敏,陳宏君
(1.國(guó)網(wǎng)電力科學(xué)研究院,南京 211106;2.南京南瑞繼保電氣有限公司)
圖形化程序特征碼的算法設(shè)計(jì)與應(yīng)用
賀敏1,陳宏君2
(1.國(guó)網(wǎng)電力科學(xué)研究院,南京 211106;2.南京南瑞繼保電氣有限公司)
提出一種圖形化頁(yè)面程序特征碼的提取算法。該算法根據(jù)圖形化頁(yè)面內(nèi)符號(hào)間輸入-輸出數(shù)據(jù)流關(guān)系和數(shù)據(jù)類型信息,形成頁(yè)面的中間信息文本。中間信息文本由該頁(yè)面對(duì)外輸入的輸出變量名、變量類型,相關(guān)符號(hào)的輸入、輸出形參類型和參數(shù)設(shè)置值,輸出變量的數(shù)據(jù)流調(diào)用表達(dá)式等關(guān)鍵內(nèi)容拼接組成,基于中間信息文本計(jì)算形成CRC,作為頁(yè)面的特征碼。通過(guò)計(jì)算比較廠家內(nèi)部修改頁(yè)面、現(xiàn)場(chǎng)工程修改頁(yè)面之間的特征碼,給出頁(yè)面程序修改是否一致的結(jié)果,該算法可準(zhǔn)確甄別由于符號(hào)位置偏差、中間變量命名不同等原因?qū)е碌捻?yè)面存儲(chǔ)文件不同,但實(shí)際功能一致的情況。
圖形化頁(yè)面;特征碼;中間信息文本;調(diào)用表達(dá)式
[5]利用載體字符計(jì)算出一系列偽隨機(jī)代碼,形成可及時(shí)糾正錯(cuò)誤的可適應(yīng)的文本數(shù)字水印。參考文獻(xiàn)[6]針對(duì)短文本分類任務(wù)中文本表示存在的高維稀疏問(wèn)題,提出基于自編碼網(wǎng)絡(luò)的短文本流形表示方法,可較好地描述短文本特征信息。尚未有參考文獻(xiàn)闡述圖形化頁(yè)面特征碼提取方案,常規(guī)的方法是比較圖形化頁(yè)面文件或產(chǎn)物文件。由于圖形化繪制時(shí),只要有一點(diǎn)點(diǎn)位置偏差,頁(yè)面存儲(chǔ)的文件必然不同,故沒(méi)有可行性。而比較產(chǎn)物的方法,是將圖形化頁(yè)面形成代碼,將代碼編譯形成HEX文件,比較HEX文件是否一致。然而,在繪制修改頁(yè)面時(shí),不能確保廠家內(nèi)、現(xiàn)場(chǎng)新建、刪除連接線的順序前后一致。當(dāng)中間連接線變量名是根據(jù)一定規(guī)則在繪制階段自動(dòng)命名時(shí),連接線的命名由于繪制順序不一致產(chǎn)生不同,故形成的連接變量名可能不同,導(dǎo)致形成的C代碼產(chǎn)物或編譯后的目標(biāo)文件可能是不同的。而現(xiàn)場(chǎng)用戶希望在編譯前就能校驗(yàn)兩者頁(yè)面的一致性,并能排除中間變量命名、無(wú)關(guān)聯(lián)關(guān)系的符號(hào)位置變化的無(wú)效差異,故通過(guò)比較產(chǎn)物的方式是行不通的。
本文設(shè)計(jì)了一種圖形化頁(yè)面程序特征碼提取算法,通過(guò)比較兩個(gè)頁(yè)面的特征碼,可快速得出頁(yè)面修改是否一致的結(jié)論。
根據(jù)圖形化頁(yè)面的拓?fù)潢P(guān)系和數(shù)據(jù)類型信息,形成頁(yè)面的中間信息文本。中間信息文本包括該頁(yè)面對(duì)外輸入的輸出變量名、變量類型,相關(guān)符號(hào)的輸入、輸出變量類型和參數(shù)設(shè)置值,符號(hào)的數(shù)據(jù)流依賴調(diào)用關(guān)系等關(guān)鍵內(nèi)容,基于中間信息文本計(jì)算形成CRC,作為頁(yè)面的特征碼,通過(guò)比較修改前后CRC1和CRC2是否相等,可判斷頁(yè)面是否一致,其中形成頁(yè)面的中間信息文本是關(guān)鍵步驟。
1.1 中間信息文本形成方案
圖1 圖形化頁(yè)面黑盒模型
如圖1所示,將圖形化頁(yè)面視為1個(gè)黑盒子,對(duì)外可見(jiàn)部分為頁(yè)面輸入和頁(yè)面輸出,內(nèi)部為符號(hào)塊和連接線。
輸入變量通過(guò)內(nèi)部功能函數(shù)符號(hào)的數(shù)據(jù)流傳遞,最終連接到輸出變量,其近似關(guān)系模型可用下述矩陣表示:
根據(jù)輸出變量的數(shù)據(jù)流依賴關(guān)系,可形成若干輸出變量的調(diào)用表達(dá)式,并且可以回溯到輸入變量,順次拼接表達(dá)式中的符號(hào)狀態(tài)信息,就能記錄該頁(yè)面的斷面數(shù)據(jù),即經(jīng)過(guò)拓?fù)溥B接處理后的中間信息文本。如圖2所示,中間信息文本形成步驟如下:
① 讀取圖形化頁(yè)面文件,包括輸入符號(hào)、輸出符號(hào)、功能函數(shù)符號(hào)、連接線等符號(hào)數(shù)據(jù)。
② 通過(guò)連接線記錄的連接起始端符號(hào)ID、連接終止符號(hào)ID、連接起始變量名、連接終止變量名,形成輸入輸出的網(wǎng)狀關(guān)系,每條連接線記錄起始符號(hào)、終止符號(hào)、起始連接點(diǎn)、終止連接點(diǎn)的數(shù)據(jù)指針,每個(gè)符號(hào)的連接點(diǎn)記錄與之相連接的連接線指針。
③ 根據(jù)連接線連接關(guān)系和指針雙向記錄結(jié)構(gòu),形成符號(hào)的輸入-輸出數(shù)據(jù)流依賴關(guān)系,根據(jù)數(shù)據(jù)流關(guān)系,形成有向無(wú)環(huán)的AOV等價(jià)網(wǎng)絡(luò),即頁(yè)面可視為M個(gè)輸入、N個(gè)輸出的黑盒子,內(nèi)部的功能函數(shù)網(wǎng)狀連接形成。通過(guò)匯總輸出變量的計(jì)算表達(dá)式和輔助信息,可得到等價(jià)中間信息文本。
④ 提取匯總頁(yè)面對(duì)外的輸入、輸出符號(hào),對(duì)輸出變量按照名字進(jìn)行降序排列(依次比較每位ASCII字符的數(shù)值,相同條件下短名字優(yōu)先,例如ABC>ABCD)。
⑤ 設(shè)置循環(huán)變量i=1, 并置N=輸出變量個(gè)數(shù)。
⑥ 依次取出排序后的輸出變量,以輸出變量Outi為終止點(diǎn),前向回溯前驅(qū)符號(hào)的各個(gè)分支路徑,按照廣度優(yōu)先算法完成前向回溯,直至回溯到輸入變量或輸入為0的變量。
⑦ 匯總各分支回溯路徑中的符號(hào)名、符號(hào)的輸入-輸出名,逐級(jí)替換,得到輸出變量的調(diào)用計(jì)算表達(dá)式和輔助設(shè)置信息。輔助設(shè)置信息包括分支路徑中各符號(hào)的輸入和輸出變量類型、變量初始值、參數(shù)設(shè)置名和設(shè)置值,拼接形成字符文本段Si。
⑧i=i+1,i≤N,則重復(fù)步驟⑥到步驟⑧。
⑨ 將排序后的各個(gè)輸出變量的文本段匯總形成頁(yè)面的中間信息文本S=S1+S2+…+SN。
圖2 中間信息文本形成方案
圖3 圖形化頁(yè)面數(shù)據(jù)流示意圖
以圖3為例,介紹中間信息文本的具體內(nèi)容。輸出變量Out1前驅(qū)是XOR2, 則遍歷L1時(shí),可得到式(1):
(1)
之后遍歷XOR2的2個(gè)輸入連接線L2,L3,可得到式(2):
(2)
代入式(1)可得到式(3):
Out1=XOR2(AND3.b1, OR3.b1)
(3)
再遍歷 AND3的輸入連接線L4、L5、L6,OR3的輸入連接線L7、L8、L9,可得式(4)、式(5):
(4)
(5)
代入到式(3),可得到Out1的計(jì)算表達(dá)式為:
Out1=XOR2(AND3(In1,In2,In3),OR3(In4, In5,In6))
假設(shè)各個(gè)符號(hào)的變量類型為char、初始值為0,則輔助信息為:
In1.type=char,In2.type=char,In3.type=char Out1.type=char
AND3.a1.type=char,…XOR2.b1.type=char;
AND3.b1.init=0; OR3.b1.init=0;XOR2.b1.init=0;
最終輸出變量的中間信息文本不包括中間連接線變量名,可排除內(nèi)部連接線命名不同時(shí)誤報(bào)不一致的情況。中間信息文本記錄該變量名從輸入變量到輸出變量整個(gè)分支路徑的關(guān)鍵信息,能有效檢測(cè)出連接關(guān)系變化、調(diào)用順序變化、功能函數(shù)變化、變量初始值變化、變量類型變化等差異。同時(shí)在拼接輸出變量的信息文本時(shí),對(duì)變量名進(jìn)行排序處理,對(duì)于獨(dú)立子網(wǎng)絡(luò)的符號(hào)調(diào)整位置,不影響最終的中間信息文本。
1.2 AOV網(wǎng)廣度優(yōu)先遍歷
在圖2中,基于AOV網(wǎng)廣度優(yōu)先的遍歷是個(gè)關(guān)鍵步驟。基于AOV網(wǎng)的處理方法,是把圖形符號(hào)之間拓?fù)溥B接關(guān)系用有向圖表示,在圖中用頂點(diǎn)表示活動(dòng),用弧表示活動(dòng)間的優(yōu)先關(guān)系[7-8]。在AOV網(wǎng)中,不應(yīng)該出現(xiàn)有向環(huán),這意味著某項(xiàng)活動(dòng)以自己為先決條件,程序的數(shù)據(jù)流存在閉環(huán)依賴,在遍歷時(shí)會(huì)導(dǎo)致無(wú)限循環(huán)。而實(shí)際應(yīng)用中圖形化程序往往存在反饋閉環(huán),即上個(gè)點(diǎn)的狀態(tài)作為下個(gè)點(diǎn)的輸入,這需要在遍歷時(shí)進(jìn)行檢測(cè),如果某個(gè)輸出點(diǎn)最終遍歷回溯到自身,則終止該輸出點(diǎn)的前向遍歷。
編程符號(hào)包括若干輸入輸出連接點(diǎn),可以從輸出點(diǎn)引出連接線到輸入點(diǎn),也可以從連接線中間引出連接線到輸入點(diǎn),從中間引出的連接線,在頁(yè)面連接預(yù)處理階段,將從邏輯上等價(jià)從源輸出點(diǎn)連接。定義連接點(diǎn)類為CNode、符號(hào)基類為CShape、連接線類為CLine, 則三者關(guān)鍵數(shù)據(jù)結(jié)構(gòu)定義如下:
class CNode { public:
CNode(CShape* parent); ~CNode();
QString name; //連接點(diǎn)名
QList
};
class CShape { public:
CShape(CPage* page); virtual ~CShape();
QString id; //uuid唯一標(biāo)識(shí)
QString type; //符號(hào)類型名
QList
};
class Cline { public:{
Cline(CPage* page); ~Cline();
QString id; //uuid唯一標(biāo)識(shí)
QStringstartID, endID; //連接的起始、終點(diǎn)符號(hào)ID
QStringstartName, endName;//連接的輸入輸出點(diǎn)名字
CShape* pstartObj,pendObj; //連接對(duì)象指針
CNode* pstartNode, pendNode;//連接點(diǎn)指針
};
在讀取頁(yè)面數(shù)據(jù)后,建立符號(hào)ID和符號(hào)指針的hash表,并根據(jù)連接線記錄的連接符號(hào)ID和連接點(diǎn)名字信息,查找相關(guān)符號(hào)和輸入輸出點(diǎn),形成AOV網(wǎng)狀的數(shù)據(jù)結(jié)構(gòu)。基于輸出連接點(diǎn)的前向回溯廣度優(yōu)先遍歷的算法思想如下:
輸入:
CNode* nd: 當(dāng)前符號(hào)的輸入點(diǎn)
QList
QList
str: 中間信息文本
輸出: 無(wú)
函數(shù) makeNodeInfo(nd, P, V,str){
If(當(dāng)前輸入點(diǎn)nd已經(jīng)存在于V) then 返回;
定義:
pline 為nd相連接的連接線
pstartnd 為 pline的起始連接點(diǎn)
pstartobj 為 pline的起始連接符號(hào)
If(pstartnd不為空) then str拼接pstartnd的信息;
If(psartobj不為空,并且不存在于P) then{
str拼接pstartobj的狀態(tài)信息,包括輸入、輸出,參數(shù)等信息
pstartobj 添加到已經(jīng)處理列表P
}
nd添加到V;
If(pstartobj不為空) then{
foreach(nd1, pstartobj->inList)
遞歸調(diào)用makeNodeInfo(nd1, P, V, str)
}
}
2.1 驗(yàn)證修改前后特征碼不一致
對(duì)表1中的內(nèi)容進(jìn)行修改能通過(guò)特征碼判斷出不一致。
表1 特征碼不一致的修改
例如圖4中,將邏輯運(yùn)算輸入AI_CLOSE_IND、CI_CLOSE_IND順序調(diào)換,可驗(yàn)證出修改前后的特征碼不一致。
圖4 調(diào)換連接關(guān)系后判斷修改不一致
2.2 驗(yàn)證修改前后特征碼一致
對(duì)表2中的內(nèi)容進(jìn)行修改能通過(guò)特征碼判斷出一致。例如圖5中,將獨(dú)立網(wǎng)絡(luò)PERMIT_CLOSE、INGATERING_235整體位置移動(dòng),驗(yàn)證出修改前后的特征碼一致。
表2 特征碼一致的修改
圖5 獨(dú)立網(wǎng)絡(luò)調(diào)整位置判斷修改一致
參考文獻(xiàn)
[1] 鄧秋娥,杜奇壯,盧娟.圖形化編程在微機(jī)保護(hù)中的實(shí)現(xiàn)[J].繼電器,2008,36(3):1-4.
[2] 韋恒,胡月.圖形化編程技術(shù)在微機(jī)保護(hù)研發(fā)中的應(yīng)用.電力科學(xué)與工程,2010,26(5):26-29.
[3] 陳宏君,劉克金,馮亞?wèn)|,等.新一代保護(hù)測(cè)控裝置配套工具軟件設(shè)計(jì)與應(yīng)用[J].電力系統(tǒng)自動(dòng)化,2013,37(20):92-96.
[4] 劉克金,陳宏君,馮亞?wèn)|,等.新一代控制保護(hù)系統(tǒng)圖形化編程軟件設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2014,27(10):82-87.
[5] 陳翔.基于文本特征的水印算法設(shè)計(jì)及關(guān)鍵技術(shù)研究[J].微型電腦應(yīng)用,2013,29(8):1591-1599.
[6] 魏超,羅森林,張競(jìng),等.自編碼網(wǎng)絡(luò)短文本流形表示方法[J].浙江大學(xué)學(xué)報(bào),2015,49(9):62-64.
[7] 陳宏君,劉克金.嵌入式裝置圖形化程序代碼生成技術(shù)[J].電腦編程技巧與維護(hù),2015,8(4):95-97.
[8] Thomas H Cormen,Charles E Leiserson.Introduction to Algorithms[M].北京:機(jī)械工業(yè)出版社,2009.
賀敏(高級(jí)工程師),研究方向?yàn)殡娏ο到y(tǒng)及其自動(dòng)化軟件;陳宏君(高級(jí)工程師),研究方向?yàn)榍度胧杰浖脚_(tái)開(kāi)發(fā)。
Design and Application of Visual Graphical Program Feature Code
He Min1,Chen Hongjun2
(1.State Grid Electric Power Research Institute,Nanjing 211106,China;2.NR Electric Co.,Ltd.)
In the paper,a visualization page application signature extraction algorithm is proposed.The algorithm forms the middle information text of the page according to the inter symbol input and output data stream relation and data type information in the graph.The middle information text is composed of the key contents such as the page text among foreign input output variable name,variable type,the symbolic type of input and output parameters and parameter setting,the data flow call expression of output variables.The CRC calculation is formed based on the middle information text,which is used as the signature of the page.By comparing the calculation factory internal change page and the field engineering changes between the characteristics of the code,the result of whether the page program changes are consistent is given.The algorithm can accurately identify the symbol position deviation,the intermediate variable naming different causes such as the storage file,but the same function.
visual programming page;QR code;middle information text;call sentence
TP393
A
引 言
?士然
2016-08-24)
圖形化編程已經(jīng)在電力系統(tǒng)、工業(yè)控制等領(lǐng)域進(jìn)行了大量的應(yīng)用[1-4]。即將投運(yùn)的直流輸入控制保護(hù)、柔性輸電保護(hù)工程,當(dāng)遇到新的需求時(shí),需要修改部分圖形化頁(yè)面程序。在這種情況下,首先是研發(fā)人員在廠家內(nèi)修改相關(guān)程序,做完相關(guān)試驗(yàn)并經(jīng)過(guò)審核確認(rèn)后,將修改過(guò)的頁(yè)面、修改步驟文檔發(fā)給現(xiàn)場(chǎng)。技術(shù)支持人員從現(xiàn)場(chǎng)程序服務(wù)器簽出需要修改的頁(yè)面,根據(jù)修改說(shuō)明步驟進(jìn)行修改和編譯,下載到裝置?,F(xiàn)場(chǎng)服務(wù)器是網(wǎng)絡(luò)隔離的,不允許USB等端口操作,不允許直接用廠家修改的文件覆蓋相關(guān)內(nèi)容,這就存在研發(fā)修改的頁(yè)面和現(xiàn)場(chǎng)修改的頁(yè)面是否修改一致的問(wèn)題,需要有校驗(yàn)的手段。