專利名稱:一種順序功能圖的可視化實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于可視化編程領(lǐng)域,具體涉及順序功能圖的可視化實(shí)現(xiàn)方法。
背景技術(shù):
順序功能圖(SFC)是指用于設(shè)計實(shí)現(xiàn)某個順序控制功能或者狀態(tài)轉(zhuǎn)換功能的圖形程序,他將整個控制流程分割為一系列的控制步,并描述出成效的執(zhí)行順序和控制條件。 順序功能圖的核心組成部分為I) 一個狀態(tài)轉(zhuǎn)換變量,根據(jù)狀態(tài)變量的值運(yùn)行相應(yīng)執(zhí)行步頁面功能;2)狀態(tài)轉(zhuǎn)換控制的規(guī)則,通過設(shè)計順序執(zhí)行控制頁面來實(shí)現(xiàn)。順序功能圖的原理如圖I所示,相關(guān)的術(shù)語有狀態(tài)、事件、轉(zhuǎn)換、動作,下面分別介紹。狀態(tài)(State):對象在其生命周期中的一種狀況,處于某個特定狀態(tài)中的對象會滿足某些條件,執(zhí)行某些動作或者等待某些事件。事件(Event):在時間和空間上占有一定的位置,并且對于狀態(tài)而言是有意義的事情,事件通常會引起狀態(tài)的變遷,促使?fàn)顟B(tài)機(jī)從一種狀態(tài)切換到另一種狀態(tài),對于順序功能圖元件而言,事件通常指其它元件的輸出變量值發(fā)生變位。轉(zhuǎn)換(Transition):是兩個狀態(tài)之間的一種關(guān)系,表明對象將在第一個狀態(tài)中執(zhí)行一定的動作,并將在滿足某個特定條件下進(jìn)入第二個狀態(tài)。動作(Action):指狀態(tài)機(jī)可以執(zhí)行一些原子操作,在順序功能圖中是運(yùn)行一個執(zhí)行步函數(shù)。順序功能圖在工業(yè)控制、電力系統(tǒng)領(lǐng)域都有應(yīng)用,然而已有的順序功能圖實(shí)現(xiàn)方法采用I個switch-case的代碼生成模式,需要在兩個運(yùn)行周期內(nèi)完成狀態(tài)切換和執(zhí)行功能,無法滿足對響應(yīng)速度要求很高的實(shí)時控制應(yīng)用。因此,本發(fā)明人針對現(xiàn)有的順序功能圖實(shí)現(xiàn)方法進(jìn)行研究改進(jìn),本案由此產(chǎn)生。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種順序功能圖的可視化實(shí)現(xiàn)方法,通過頁面類型分類和概念規(guī)則定義,清晰地組織可視化程序;通過雙switch-case的代碼生成模式,實(shí)現(xiàn)一個周期內(nèi)完成狀態(tài)切換和執(zhí)行,提高順序功能圖的運(yùn)行效率。為了達(dá)成上述目的,本發(fā)明的解決方案是一種順序功能圖的可視化實(shí)現(xiàn)方法,包括如下兩部分第一部分,設(shè)計雙switch-case順序功能圖的代碼生成模式,第一個switch結(jié)構(gòu)更新狀態(tài)變量的值,第二個switch結(jié)構(gòu)根據(jù)新的狀態(tài)變量,運(yùn)行相應(yīng)的控制執(zhí)行函數(shù),在同一個運(yùn)行周期內(nèi)完成狀態(tài)切換和動作執(zhí)行;第二部分,調(diào)用順序功能圖代碼生成工具,進(jìn)行規(guī)則檢查,輸出代碼。在上述第一部分前,還包括對順序功能圖的可視化頁面類型進(jìn)行定義,將頁面類
3型分為三類順序執(zhí)行控制頁面、執(zhí)行步頁面和功能圖子頁面,順序執(zhí)行控制頁面是用于設(shè)計順序控制或狀態(tài)轉(zhuǎn)換的頁面,它通過符號塊的前后連接關(guān)系實(shí)現(xiàn)狀態(tài)規(guī)則轉(zhuǎn)換;執(zhí)行步頁面由各種功能塊組成計算或邏輯功能,代碼生成時將該頁面的功能封裝成一個函數(shù),供順序執(zhí)行控制函數(shù)調(diào)用;當(dāng)執(zhí)行步的頁面功能比較復(fù)雜時,通過若干功能圖子頁面進(jìn)行分解,然后在執(zhí)行步頁面連接子頁面的輸入輸出,實(shí)現(xiàn)復(fù)雜程序的層次化分解。上述順序執(zhí)行控制頁面中用于順序執(zhí)行控制的編程符號塊包括起始符號塊、執(zhí)行步塊、無條件轉(zhuǎn)移塊、IF轉(zhuǎn)移條件塊、單IF_ELSE塊、雙IF_ELSE塊和SWITCH_CASE塊;其中,起始符號塊用于自動形成一個狀態(tài)機(jī)變量,該變量作為功能圖中的成員變量,初始化為O ;執(zhí)行步塊代表一個執(zhí)行步頁面,對應(yīng)一個狀態(tài),點(diǎn)擊后進(jìn)入相應(yīng)的功能圖設(shè)計頁面;無條件轉(zhuǎn)移塊表示根據(jù)上一狀態(tài),直接跳轉(zhuǎn)到另外一個狀態(tài);IF轉(zhuǎn)移條件塊根據(jù)某個變量值來決定是否轉(zhuǎn)移或轉(zhuǎn)移到哪一個狀態(tài);單IF_ELSE塊根據(jù)判斷變量的值決定執(zhí)行哪條分支 ’雙IF_ELSE塊有三個輸出點(diǎn),需要指定兩個條件判斷變量;SWITCH_CASE塊需要用戶設(shè)定case的分支數(shù)和每個分支的CASE值。本發(fā)明實(shí)現(xiàn)了一種順序功能圖的可視化建模方法,將頁面分為順序功能頁面、執(zhí)行步頁面、功能圖子頁面,通過層次模型管理可視化程序,并以雙switch-case的代碼模式提聞了順序功能圖的運(yùn)行效率。
下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)的說明。
圖I是順序功能圖的原理圖2是順序功能圖的頁面例圖3是對應(yīng)的等效狀態(tài)機(jī)轉(zhuǎn)換圖4是執(zhí)行步頁面對應(yīng)的可視化程序示例圖5是順序執(zhí)行控制頁面的可視化程序示例圖6是各符號塊的圖形原型圖。
具體實(shí)施方式
本發(fā)明提供一種順序功能圖的可視化實(shí)現(xiàn)方法,包括如下三個部分
第一部分,對順序功能圖的可視化頁面類型進(jìn)行定義,具體是將頁面類型分為三類順序執(zhí)行控制頁面、執(zhí)行步頁面和功能圖子頁面,配合圖2所示,下面分別介紹。
首先,在圖2中總共有3個if條件跳轉(zhuǎn)塊,則狀態(tài)機(jī)有3個狀態(tài)(O、I、2)。初始化
時狀態(tài)值為O。當(dāng)varO為true時,跳轉(zhuǎn)到第I個狀態(tài),當(dāng)varO為false時,跳轉(zhuǎn)到第2個狀態(tài)。當(dāng)varl為true時跳轉(zhuǎn)到第2個狀態(tài)。當(dāng)var2為true時跳轉(zhuǎn)到第I個狀態(tài)。當(dāng)狀態(tài)值為I時,運(yùn)行runPagel,當(dāng)狀態(tài)值為2時,運(yùn)行runPage2。圖3表示了圖2中順序執(zhí)行功能的狀態(tài)機(jī)轉(zhuǎn)換過程。順序執(zhí)行控制頁面的規(guī)則定義如下I)將順序執(zhí)行控制頁面的功能封裝成的一個任務(wù)函數(shù),在每個任務(wù)周期里執(zhí)行此任務(wù)函數(shù),該函數(shù)決定狀態(tài)跳轉(zhuǎn)的規(guī)則;2)該頁面允許存在的符號有起始符號塊、執(zhí)行步塊、轉(zhuǎn)移條件塊、連接線、輸入塊、輸出塊、和跨頁面連接符號(指存在多頁的情形);3)該頁面的連接線表示執(zhí)行順序和狀態(tài)切換跳轉(zhuǎn)規(guī)則;4)該頁面符號的輸出連接點(diǎn)只能連接一條連接線,表示只跳轉(zhuǎn)到一個狀態(tài),輸入連接點(diǎn)可以連接多條連接線,表示可以由不同的其它狀態(tài)轉(zhuǎn)移到本狀態(tài);5)執(zhí)行步的后繼符號一般為轉(zhuǎn)移塊(條件轉(zhuǎn)移和無條件轉(zhuǎn)移),若存在多個執(zhí)行步順序串聯(lián)在一起,則這些執(zhí)行步視為一個狀態(tài);6)只能有一個起始符號塊,并且至少有一個執(zhí)行步和條件轉(zhuǎn)移塊;7)轉(zhuǎn)移塊的后繼必須是執(zhí)行步,IF塊和無條件轉(zhuǎn)移塊必須有后繼符號塊。用于順序執(zhí)行控制的編程符號塊包括起始符號塊、執(zhí)行步塊、無條件轉(zhuǎn)移塊、IF 轉(zhuǎn)移條件塊、單IF_ELSE塊、雙IF_ELSE塊和SWITCH_CASE塊,分別介紹如下I)起始符號塊在順序執(zhí)行控制頁面中,起始符號塊用于自動形成一個狀態(tài)機(jī)變量,該變量作為功能圖中的成員變量,初始化為O。其圖形原型如圖6(a)所示。2)執(zhí)行步塊代表一個執(zhí)行步頁面,對應(yīng)一個狀態(tài),點(diǎn)擊可以進(jìn)入相應(yīng)的功能圖設(shè)計頁面。執(zhí)行步塊表示運(yùn)行該執(zhí)行步頁面的功能函數(shù)。其圖形原型如圖6(b)所示。3)無條件轉(zhuǎn)移塊表示根據(jù)上一狀態(tài),直接跳轉(zhuǎn)到另外一個狀態(tài)。其代碼原型為dp- > state = new—state ;其圖形原型如圖6(c)所示。4) IF轉(zhuǎn)移條件塊根據(jù)某個變量值來決定是否轉(zhuǎn)移或轉(zhuǎn)移到哪一個狀態(tài)。判斷變量可以是程序設(shè)計頁面中的輸入變量、輸出變量、成員變量。IF塊需要指定判斷變量名。其代碼原型為if (dp- > var){dp- > state = statex ;}其圖形原型如圖6(d)所示。5)單IF_ELSE塊根據(jù)判斷變量的值決定執(zhí)行哪條分支。單IF_ELSE對應(yīng)的代碼
原型為
if ( dp->var )
dp->state = statel;
else
dp->state = state2;
其圖型原型如圖6(e)所示。6)雙IF_ELSE塊有三個輸出點(diǎn),需要指定兩個條件判斷變量。其代碼原型為
if ( dp->varI )
dp->state = statel;
else
{
if ( dp->var2 )
dp->state = state2;
else
dp->state = state3;其圖形原型如圖6(f)所示。7) SWITCH_CASE塊需要用戶設(shè)定case的分支數(shù),和每個分支的CASE值。對應(yīng)的
代碼原型為switch ( dp->var)
case value—O:
dp->state = statex; break; case value—I:
dp->state = statey; break; default: break;
}其圖形根據(jù)分支數(shù)動態(tài)生成如圖6(g)所示。一個執(zhí)行步頁面內(nèi)的計算邏輯符號組成一個執(zhí)行函數(shù),供順序執(zhí)行控制頁面調(diào)用。當(dāng)一個執(zhí)行步頁面功能復(fù)雜時,可以通過功能圖子頁面進(jìn)行分解,在功能圖子頁面設(shè)計子模塊,在父頁面進(jìn)行輸入輸出連線。其規(guī)則如下I)可以包含輸入塊、輸出塊、參數(shù)塊、常量塊、功能圖子塊、頁面鏈接符號、連接線、 功能函數(shù)塊等符號;2)該頁面設(shè)計的功能相對獨(dú)立、清晰,允許各功能圖頁面之間通過頁面連接符號進(jìn)行數(shù)據(jù)流交換;3)功能圖子頁面內(nèi)不再包含功能圖子塊符號,只支持一層嵌套關(guān)系;第二部分,設(shè)計雙switch-case順序功能圖的代碼生成模式。定義狀態(tài)機(jī)變量state,在第I個switch_case語句中,執(zhí)行各個分支對應(yīng)條件轉(zhuǎn)移塊,在條件轉(zhuǎn)移塊中根據(jù)跳轉(zhuǎn)判斷變量是否為true,設(shè)置狀態(tài)機(jī)的狀態(tài)值。在第2 個switch-case語句中,跳轉(zhuǎn)到當(dāng)前狀態(tài),執(zhí)行對應(yīng)的頁面任務(wù)函數(shù)。順序執(zhí)行頁面的雙 switch-case的代碼原型如下void sfcControlFunc(SFC* dp)
{
//狀態(tài)切換
switch ( dp->state )
{
case O:
//執(zhí)行O分支對應(yīng)的條件轉(zhuǎn)移塊,進(jìn)行狀態(tài)切換 break ; case η:
//執(zhí)行η分支對應(yīng)的條件轉(zhuǎn)移塊,進(jìn)行狀態(tài)切換 break ; default :
dp->state =0; //重新復(fù)位 break ;
}
//執(zhí)行動作
switch ( dp->state )
{
case O:
//運(yùn)行狀態(tài)O對應(yīng)的執(zhí)行步塊 break; case η:
//運(yùn)行狀態(tài)η對應(yīng)的執(zhí)行步塊 break; default: break;
}
}其中,第I個switch-case語句,根據(jù)當(dāng)前狀態(tài)機(jī)的值,決定運(yùn)行哪個條件轉(zhuǎn)移塊邏輯語句,如果某個條件成立,則進(jìn)入新的狀態(tài)。在第2個switch-case語句中,根據(jù)新狀態(tài)的值,決定運(yùn)行對應(yīng)的執(zhí)行步函數(shù),從而實(shí)現(xiàn)了在一個運(yùn)行周期內(nèi)實(shí)現(xiàn)狀態(tài)切換和動作響應(yīng)。在可視化編程工具中創(chuàng)建順序功能圖元件,并新建頁面,可新建順序執(zhí)行控制頁面和若干執(zhí)行步頁面、功能圖子頁面。在執(zhí)行步頁面中進(jìn)行計算和邏輯組態(tài),形成若干執(zhí)行步頁面的可視化程序,如圖5所示。然后在順序執(zhí)行控制頁面選擇條件跳轉(zhuǎn)符號和執(zhí)行步, 搭建順序功能狀態(tài)跳轉(zhuǎn)和執(zhí)行邏輯,如圖6所示。第三部分,調(diào)用順序功能圖代碼生成工具,進(jìn)行規(guī)則檢查,輸出代碼。
權(quán)利要求
1.一種順序功能圖的可視化實(shí)現(xiàn)方法,其特征在于包括如下兩部分第一部分,設(shè)計雙switch-case順序功能圖的代碼生成模式,第一個switch結(jié)構(gòu)更新狀態(tài)變量的值,第二個switch結(jié)構(gòu)根據(jù)新的狀態(tài)變量,運(yùn)行相應(yīng)的控制執(zhí)行函數(shù),在同一個運(yùn)行周期內(nèi)完成狀態(tài)切換和動作執(zhí)行;第二部分,調(diào)用順序功能圖代碼生成工具,進(jìn)行規(guī)則檢查,輸出代碼。
2.如權(quán)利要求I所述的一種順序功能圖的可視化實(shí)現(xiàn)方法,其特征在于在所述第一部分前,還包括對順序功能圖的可視化頁面類型進(jìn)行定義,將頁面類型分為三類順序執(zhí)行控制頁面、執(zhí)行步頁面和功能圖子頁面,順序執(zhí)行控制頁面是用于設(shè)計順序控制或狀態(tài)轉(zhuǎn)換的頁面,它通過符號塊的前后連接關(guān)系實(shí)現(xiàn)狀態(tài)規(guī)則轉(zhuǎn)換;執(zhí)行步頁面由各種功能塊組成計算或邏輯功能,代碼生成時將該頁面的功能封裝成一個函數(shù),供順序執(zhí)行控制函數(shù)調(diào)用;當(dāng)執(zhí)行步的頁面功能比較復(fù)雜時,通過若干功能圖子頁面進(jìn)行分解,然后在執(zhí)行步頁面連接子頁面的輸入輸出,實(shí)現(xiàn)復(fù)雜程序的層次化分解。
3.如權(quán)利要求2所述的一種順序功能圖的可視化實(shí)現(xiàn)方法,其特征在于所述順序執(zhí)行控制頁面中用于順序執(zhí)行控制的編程符號塊包括起始符號塊、執(zhí)行步塊、無條件轉(zhuǎn)移塊、 IF轉(zhuǎn)移條件塊、單IF_ELSE塊、雙IF_ELSE塊和SWITCH_CASE塊;其中,起始符號塊用于自動形成一個狀態(tài)機(jī)變量,該變量作為功能圖中的成員變量,初始化為O ;執(zhí)行步塊代表一個執(zhí)行步頁面,對應(yīng)一個狀態(tài),點(diǎn)擊后進(jìn)入相應(yīng)的功能圖設(shè)計頁面;無條件轉(zhuǎn)移塊表示根據(jù)上一狀態(tài),直接跳轉(zhuǎn)到另外一個狀態(tài);IF轉(zhuǎn)移條件塊根據(jù)某個變量值來決定是否轉(zhuǎn)移或轉(zhuǎn)移到哪一個狀態(tài);單IF_ELSE塊根據(jù)判斷變量的值決定執(zhí)行哪條分支;雙IF_ELSE塊有三個輸出點(diǎn),需要指定兩個條件判斷變量;SWITCH_CASE塊需要用戶設(shè)定case的分支數(shù)和每個分支的CASE值。
全文摘要
本發(fā)明公開一種順序功能圖的可視化實(shí)現(xiàn)方法,包括如下兩部分第一部分,設(shè)計雙switch-case順序功能圖的代碼生成模式,第一個switch結(jié)構(gòu)更新狀態(tài)變量的值,第二個switch結(jié)構(gòu)根據(jù)新的狀態(tài)變量,運(yùn)行相應(yīng)的控制執(zhí)行函數(shù),在同一個運(yùn)行周期內(nèi)完成狀態(tài)切換和動作執(zhí)行;第二部分,調(diào)用順序功能圖代碼生成工具,進(jìn)行規(guī)則檢查,輸出代碼。此種方法通過頁面類型分類和概念規(guī)則定義,清晰地組織可視化程序;通過雙switch-case的代碼生成模式,實(shí)現(xiàn)一個周期內(nèi)完成狀態(tài)切換和執(zhí)行,提高順序功能圖的運(yùn)行效率。
文檔編號G06F9/44GK102609269SQ20121003691
公開日2012年7月25日 申請日期2012年2月17日 優(yōu)先權(quán)日2012年2月17日
發(fā)明者馮亞東, 劉克金, 周強(qiáng), 周磊, 李秋華, 熊蕙, 趙天恩, 陳宏君 申請人:南京南瑞繼保工程技術(shù)有限公司, 南京南瑞繼保電氣有限公司