999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

順序控制圖源代碼形成方案設計與實現

2016-02-23 04:52:55王國棟陳宏君劉克金
計算機技術與發展 2016年3期
關鍵詞:頁面符號功能

王國棟,陳宏君,劉克金

(南京南瑞繼保電氣有限公司,江蘇 南京 211102)

順序控制圖源代碼形成方案設計與實現

王國棟,陳宏君,劉克金

(南京南瑞繼保電氣有限公司,江蘇 南京 211102)

為實現順序控制功能和狀態轉換功能圖形程序轉換成可執行的C語言程序,文中設計了順序控制圖的圖形化編程符號、定義符號的C代碼范式并實現C代碼生成方法。首先,將順序控制圖形化頁面分為任務頁面、執行步頁面和功能圖子頁面,可清晰地組織可視化程序;其次,設計多種符號塊實現程序步順序執行和轉移控制;最后,根據圖形化編程符號的拓撲順序和控制邏輯生成對應的C語言代碼。進一步提出基于雙switch-case順序控制圖的任務函數代碼生成模式,在第一個switch結構中更新狀態變量的值,在第二個switch結構中根據新的狀態變量值運行相應的控制函數,可在同一個運行周期內完成狀態切換和動作執行。提高了嵌入式順序功能程序的運行效率,適用于高實時嵌入式系統的順序控制。

順序控制;雙switch-case;代碼生成;狀態切換

0 引 言

順序控制圖是指用于設計實現某個順序控制功能或者狀態轉換功能的圖形程序,它將整個控制流程分割為一系列的控制步,并描述出生效的執行順序和控制條件。圖形化的順序控制圖已經在工業控制等領域中得到了應用[1-5]。文獻[1]介紹了基于SIMENS公司生產的S7-200系列機型,利用指令和內部寄存器實現順序編程的方法。文獻[2]介紹了PLC的SFC在送料小車的應用實例。文獻[3]提出了數組式編程方法,通過指針尋址功能對數組進行邏輯運算實現控制功能。文獻[4]通過在上位機運用全組態配置和后臺程序搭配的設計方法,實現了混合流程的順序控制。文獻[5]基于IEC 61850標準對順序控制的過程狀態和操作配置進行建模,設計了順序控制功能標準化的狀態和控制模型,適用于智能變電站順序控制。文獻[6-9]介紹了控制保護系統的可視化編程軟件設計理念,采用圖形化符號搭建裝置功能。

上述文獻并未闡述圖形化順序控制圖到嵌入式裝置運行所需的源代碼生成技術。文中設計了一套基于C語言流程控制結構的圖形化符號塊,并提出了雙switch-case架構的順序控制圖代碼生成方案,可在一個周期內完成狀態切換和動作執行,適用于實時控制系統。

1 順序控制圖原理和相關概念

順序控制圖的原理如圖1所示。相關的基本概念有事件、狀態、轉換、動作,外部事件觸發狀態轉換,之后執行相關動作,并且將輸出或指令傳遞給其他模塊[10-14]。

圖1 順序控制圖的原理

(1)事件(Event):在時間和空間上占有一定的位置,事件通常會引起狀態的變遷,促使狀態機從一種狀態切換到另一種狀態,通常指其他輸出變量值發生變化。

(2)狀態(State):是對象在其生命周期中的一種狀況,處于某個特定狀態中的對象會滿足相關條件,執行某些動作或者等待某些事件。

(3)轉換(Transition):是兩種狀態之間的一種關系,對象將在狀態1中執行一定的動作,并將在滿足某個特定條件下進入狀態2。

(4)動作(Action):指狀態機可以執行一些原子操作,在順序控制圖中是運行一個執行步函數。

2 順序控制圖元件

文中,順序控制圖對應的代碼用元件進行封裝。元件是基于面向對象的設計思想,它包括一組數據定義和對數據進行處理的若干函數,處理完后輸出傳遞給其他元件作為輸入源[6]。其源代碼包括h/c文件,在h文件中定義數據結構體,包括輸入變量、輸出變量和參數等對外接口,在c文件中定義相關函數,包括構造函數、初始化函數、功能塊函數、頁面函數、任務函數等。

順序控制圖元件:用于設計實現某個順序控制功能或者狀態轉換功能的元件,外部事件觸發其狀態的轉換,并執行相應的動作。順序控制元件的輸入、輸出和參數變量來自于順序執行控制頁面和執行步頁面。順序控制圖元件的核心組成部分為:

(1)一個狀態轉換變量,根據狀態變量的當前值運行相應執行步頁面功能;

(2)狀態轉換控制的規則,通過設計順序執行控制頁面來實現。

3 順序控制圖頁面設計

順序控制圖頁面類型有順序執行控制頁面、執行步頁面、功能圖子頁面。其頁面功能設計如下:

(1)順序執行控制頁面:用于設計順序控制或狀態轉換的頁面(可支持多頁)。順序執行控制頁面通過執行步和轉移塊的前后連接關系實現狀態轉換的規則。

(2)執行步頁面:執行步頁面代表執行步塊所對應的功能,代碼生成時將該頁面的功能封裝成一個函數,供順序控制任務函數調用。執行步頁面通常由各種功能塊組成計算或邏輯功能,原則上不包含子元件塊。

(3)功能圖子頁面:在一個層次化的設計中用于代表一個子功能圖頁面的圖塊,將子功能圖頁面中的輸入輸出作為該圖塊的輸入輸出顯示在執行步頁面上。當執行步的頁面功能比較復雜時,可以通過若干功能圖子頁面進行分解,然后在執行步頁面連接子頁面的輸入輸出,在代碼生成時,將子頁面對應的符號復制到執行步頁面。

4 順序控制符號塊設計

用于順序控制的圖形符號有:起始符號塊、執行步塊、無條件轉移塊、IF塊、單IF_ELSE塊、雙IF_ELSE塊、雙IF_ELSE塊、SWITCH_CASE塊。圖2是各種符號的圖形化形態,其中SWITCH_CASE塊根據分支數目動態調整顯示。

圖2 順序控制符號塊

各個符號功能設計如下:

(1)起始符號塊:在順序執行控制頁面中,起始符號塊用于自動形成一個狀態機變量,該變量作為元件中的成員變量,初始化為0。

(2)執行步塊:代表一個執行步頁面,對應一個狀態,點擊可以進入相應的功能圖設計頁面。執行步塊表示運行該執行步頁面的功能函數。元件的結構定義為SFCComp,則執行步塊對應的函數形式為:

void runPageIndex(SFCComp* pcp)

(3)無條件轉移塊:表示根據上一狀態,直接跳轉到另外一個狀態值。其代碼原型為:

pcp->sta=new_stat;

(4)IF塊:根據某個變量值來決定是否轉移或轉移到哪一個狀態。判斷變量可以是程序設計頁面中的輸入變量、輸出變量、成員變量,為二值(0、1)類型。IF塊需要指定判斷變量名。其代碼原型為:

if(pcp->var){pcp->state=stax;}

(5)單IF_ELSE塊:根據判斷變量的值決定執行哪條分支。單IF_ELSE對應的代碼原型為:

if(pcp->var){pcp->state=stax;}

else{pcp->state=stay;}

(6)雙IF_ELSE塊:有三個輸出點,需要指定兩個條件判斷變量,支持在ELSE分支中有子IF_ELSE條件。其代碼原型為:

if(pcp->var1)

{pcp->state=stax;}

else{

if(pcp->var2)

{pcp->state=stay1;}

else

{pcp->state=stay2;}

}

(7)SWITCH_CASE塊:需要用戶設定case的分支數,和每個分支的設置值,其圖形需要根據分支數動態生成。對應的代碼原型為:

switch(pcp->var)

{

case value_0:pcp->state=stax; break;

case value_1:p->state=stay;break;

default:break;

}

5 順序控制圖代碼生成規則設計

5.1 頁面規則設計

順序執行控制頁面的規則如下:

(1)順序執行控制頁面的功能封裝成元件的一個任務函數(默認為任務等級1的函數),在每個任務周期里執行此任務函數,該函數決定狀態跳轉的規則;

(2)該頁面允許存在的符號有起始符號塊、執行步塊、轉移條件塊、連接線、輸入塊、輸出塊和頁面鏈接符號(指存在多頁的情形);

(3)該頁面的連接線不表示數據流的關系,只表示執行順序和狀態切換的規則;

(4)該頁面符號的輸出連接點只能連接一條連接線,表示只跳轉到一個狀態,輸入連接點可以連接多條連接線,表示可以由不同的其他狀態轉移到本狀態;

(5)一個執行步塊的后繼一般為轉移塊(條件轉移和無條件轉移),若存在多個執行步塊順序串聯在一起,則這些執行步塊等同為一個狀態;

(6)只能有一個起始符號塊,至少有一個執行步塊和條件轉移塊;

(7)轉移塊的后繼必須是執行步塊,IF塊和無條件轉移塊必須有后繼,IF_ELSE、SWITCH_CASE必須至少有一個分支為執行步塊的后繼;

(8)執行步塊的后繼一般為轉移塊,如果是轉移塊,轉移條件需設定為一個狀態值。如果存在多個轉移塊串聯,則這些轉移塊的狀態值相同,必須是一個整體,不能有分支。

執行步頁面的規則如下:

(1)該頁面可以包含輸入塊、輸出塊、參數塊、常量塊、功能圖子塊、頁面鏈接符號、連接線、功能塊等符號;

(2)該頁面設計的功能相對獨立、清晰,允許各功能圖頁面之間通過頁面鏈接符號進行數據流交換(定義為元件中的私有變量);

(3)所有功能圖頁面功能塊的任務等級都相同,功能塊之間的連接線變量定義為函數中的局部變量。

功能圖子頁面的規則為:子頁面內不再包含功能圖子塊符號,只支持一層嵌套關系。

5.2 雙switch-case控制函數結構設計

順序控制頁面任務函數的代碼,采用兩個switch結構,第一個switch結構更新狀態變量的值,第二個switch結構根據新的狀態變量,運行相應的控制執行函數,控制執行函數運行在同一個周期。以圖3的順序控制頁面為例,有3個狀態,2個執行步頁面,3個條件判斷跳轉符號。

圖3 順序執行控制頁面示例

其C函數代碼原型定義為:

void sfcControlFunc(SfcComp* pcp)

{

switch(pcp->state) //transfer the state

{

case 0:

if(pcp->var0)

{pcp->state=1;}

else

{pcp->state=2;}

break;

case 1:

if(pcp->var1)

{pcp->state=2;}

break;

case 2:

if pcp->var2)

{pcp->state=1;}

break;

default:

pcp->state=0;

break;

}

switch(pcp->state) //action

{

case 0:break;

case 1:runPage1(pcp); break;

case 2:runPage2(pcp); break;

default:break;

}

}

6 代碼形成設計

6.1 模塊劃分

順序控制圖程序代碼形成工具,劃分為5個部分:

(1)符號數據模塊:對程序設計頁面中的各種符號進行建模。

(2)數據組織模塊:負責對頁面、元件文件數據進行管理。

(3)數據處理模塊:形成元件內符號的連接關系并對符號進行拓撲排序;形成層次化元件關系;檢查圖形化程序設計規則;對預編譯語句進行解析處理。

(4)代碼生成模塊:形成元件的h/c源代碼和配置文件。

(5)編譯鏈接模塊:形成每個處理器的MakeFile,并調用交叉編譯器,形成可執行程序。

基于常規FBD模式的功能圖代碼形成,已有文獻闡述[6],下節闡述順序控制圖任務函數代碼形成算法。

6.2 順序控制任務函數代碼形成算法

順序控制任務函數是元件中最關鍵的周期運行函數,該算法步驟如圖4所示。

如圖4所示,讀取控制頁面的數據,解析相關符號和連接線信息,形成各符號的數據類實例。之后從起始符號開始,按照深度優先遍歷的排序算法,填充與符號輸入點關聯的前驅符號鏈表、填充與符號輸出點關聯的后繼符號鏈表。之后匯總執行步個數,并設置各個執行步對應的狀態編碼。然后形成第1、2個switch-case語句結構代碼,最后輸出C代碼文本。

圖4 順序控制任務函數形成步驟

第1個switch_case結構的關鍵算法代碼為:

for(int i=1;i<=stateNum;i++){

m_txt+="case"+QString::number(i);

CSFCRunBlock*prb=searchStepRunBlock(i);

bool bHasSameNextSybl=false;

for(int j=i+1;j<=stateNum;j++){

CSFCRunBlock*ptmp=searchStepRunBlock(j);

if(prb && ptmp){

if(prb->m_nextSybl==ptmp->m_nextSybl){

bHasSameNextSybl=true;

break;

}}}

if(bHasSameNextSybl){m_txt+=": ";}

else

{

m_txt+=": { ";

QString str;

if(prb) makeSfcBlockCode(str,rb->m_nextSybl);

m_txt+=str+"} break; " ;

}}

第二個switch_case結構的關鍵算法代碼為:

for(i=1;i<=stateNum;i++){

QList list;

m_txt+="case"+QString::number(i);

m_txt+=": ";

searchStepRunBlockList(list,i);

foreach(CSFCRunBlock*prb,list)

{

QString fname; getPageDocFuncName(fname,prb);

QString refName=prb->getRefPageName();

CPage*pdoc=pcp->searchPage(refName);

if(pdoc) m_txt+=fname;

}

m_txt+="break; " ;

}

7 結束語

文中提出一種基于C語言流程結構符號的方案實現順序控制圖的可視化建模方法,將頁面分為順序功能頁面、執行步頁面、功能圖子頁面,通過層次模型管理可視化程序,設計了順序控制代碼轉換規則,并以雙switch-case的代碼模式提高了順序控制圖的運行效率。基于文中設計的順序控制圖已經在直流輸電保護控制裝置中進行了應用,滿足了高實時性要求的順序控制需求。

[1] 王丁磊,郭 濤.PLC順序控制的編程方法及應用[J].機電一體化,2011(4):102-104.

[2] 齊傳剛,熊永超,邵 娜.PLC的SFC圖在編寫順序控制梯形圖中的應用[J].遼寧工程技術大學學報:自然科學版,2006,25:234-236.

[3] 時文飛.數組式編程方法在PLC編程中的應用[J].電氣傳動,2014,44(1):85-87.

[4] 翁 元.基于上位機的混合流程順序控制系統[J].計算機系統應用,2014,23(6):42-47.

[5] 樊 陳,倪益民,竇仁暉,等.智能變電站順序控制功能模塊化設計[J].電力系統自動化,2012,36(17):67-71.

[6] 劉克金,陳宏君,馮亞東,等.新一代控制保護系統可視化編程軟件設計與實現[J].工業控制計算機,2014,27(10):82-84.

[7] 盧 娟,李兆成,陳鋼杰,等.保護與測控領域通用可視化平臺的設計與實現[J].電力系統自動化,2005,29(4):58-61.

[8] 鄧秋娥,杜奇壯,盧 娟.可視化編程在微機保護中的實現[J].繼電器,2008,36(3):1-4.

[9] 姚 成,黃國方,周邵亮,等.軟PLC技術應用于智能保護測控裝置的實現方案[J].電力系統自動化,2010,34(23):115-118.

[10] 馮亞東,陳宏君,劉克金,等.一種順序功能圖的可視化實現方法:CN,201210036915.9[P].2012-07-25.

[11] Kernighan B K,Ritchie D M.The C programming language[M].Beijing:China Machine Press,2006.

[12] Aho A V,Lam M S,Sethi R,et al.Compilers:principles,techniques,and tools[M].2nd ed.Beijing:China Machine Press,1986.

[13] Lewis R W.Programming industrial control systems using IEC 1131-3[D].London:The Institution of Electrical Engineers,1995.

[14] Hoppe G.Software motion control with IEC61131-3 motion profile interface the system independent set of function blocks[C]//Proc of TECH/EXPO technology update conference.[s.l.]:[s.n.],2001:463-472.

Design and Implementation of Source Code Generation for SFC Graphical Program

WANG Guo-dong,CHEN Hong-jun,LIU Ke-jin

(NR Electric Co.,Ltd.,Nanjing 211102,China)

To generate source code for SFC graphical program,it presents a source code generation scheme which designs graphical programming symbols for Sequential Function Chart (SFC) and defines C code normal form for the symbols and generates real C code finally in this paper.Firstly,the scheme divides sequential function chart pages into three types including task page,execution step page and functional graph page,and manages all pages hierarchically.Then it designs various graphical symbols to achieve sequential execution and transfer control of SFC graph.Finally,it generates C code according to the topological structure and control logic of these graphical symbols.This scheme further promotes source code generation approach for dual switch-case SFC graph page by updating the value of status variables in the first switch structure and executing corresponding control functions in the second switch structure according to the updated status variables,thus completing status switching and function execution in exactly one operation cycle.It increases execution efficiency of embedded sequential function programs,which is suitable for sequence control of high real-time embedded systems.

SFC;dual switch-case;code generating;state switching

2015-06-08

2015-09-14

時間:2016-02-18

國家“863”高技術發展計劃項目(2015AA050101)

王國棟(1988-),男,碩士,工程師,研究方向為可視化編程軟件。

http://www.cnki.net/kcms/detail/61.1450.TP.20160218.1630.030.html

TP31

A

1673-629X(2016)03-0149-05

10.3969/j.issn.1673-629X.2016.03.035

猜你喜歡
頁面符號功能
大狗熊在睡覺
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
學符號,比多少
幼兒園(2021年6期)2021-07-28 07:42:14
“+”“-”符號的由來
關于非首都功能疏解的幾點思考
變符號
圖的有效符號邊控制數
中西醫結合治療甲狀腺功能亢進癥31例
辨證施護在輕度認知功能損害中的應用
主站蜘蛛池模板: 无遮挡一级毛片呦女视频| 国产福利在线观看精品| 好紧太爽了视频免费无码| 92精品国产自产在线观看| 国产人成乱码视频免费观看| 亚洲欧美自拍中文| 综1合AV在线播放| 国产女人在线| av一区二区人妻无码| 国产一级精品毛片基地| 国产午夜看片| 日本一区中文字幕最新在线| 国产精品30p| 一级香蕉人体视频| 国产毛片基地| 久青草网站| 久久免费看片| 国产毛片网站| 91在线激情在线观看| 久久国产精品国产自线拍| 在线无码九区| 福利小视频在线播放| 亚洲欧洲免费视频| 国产精品手机视频| 人人91人人澡人人妻人人爽| 国产欧美日韩视频怡春院| 国产欧美日韩另类精彩视频| 国产精品永久在线| 成人av专区精品无码国产 | 国产亚洲精品97AA片在线播放| 亚洲va在线∨a天堂va欧美va| 青青草91视频| 高潮毛片免费观看| 456亚洲人成高清在线| 2021国产精品自产拍在线观看| 亚洲天堂2014| 国产91视频观看| 国产自无码视频在线观看| 亚洲AV人人澡人人双人| 中文字幕久久波多野结衣| 国产办公室秘书无码精品| 40岁成熟女人牲交片免费| 国产专区综合另类日韩一区| 亚洲AV无码久久精品色欲| 欧美成人二区| 日本精品中文字幕在线不卡| 国产乱子伦手机在线| 亚洲国产看片基地久久1024| 国产精女同一区二区三区久| 国产一级裸网站| 亚洲美女一区二区三区| 91久久夜色精品国产网站 | 亚洲综合中文字幕国产精品欧美| 黄色网页在线播放| 久久亚洲美女精品国产精品| 最新日本中文字幕| 亚洲成人网在线播放| 国产成人一级| 中日韩一区二区三区中文免费视频| 国产剧情无码视频在线观看| 日韩天堂网| 91黄视频在线观看| 亚洲bt欧美bt精品| 国产伦精品一区二区三区视频优播| 女人18毛片久久| 毛片大全免费观看| 国产成人久久综合一区| 日本欧美视频在线观看| 国产成人成人一区二区| 超级碰免费视频91| 99re视频在线| 国产成人一二三| 国产一区三区二区中文在线| 影音先锋丝袜制服| 亚洲黄色成人| 国内嫩模私拍精品视频| 国产成人在线小视频| 久久综合丝袜长腿丝袜| 国产精品黄色片| 欧美精品1区2区| 久久免费视频播放| 国产最爽的乱婬视频国语对白|