SFC順序功能圖,英文Squence Function Chart,是IEC 61131-3標准PLC語言中的一種,主要應用於流程性很強的復雜邏輯控制,用標准中的話說就是針對順序控制過程的控制條件和過程提出的一套表示邏輯控制功能的方法。比如一連串加工步組成的加工、組裝、線體等工藝邏輯序列。最早是法國的國家自動化促進會提出。這種方法既可以使用文字進行描述,也可以用圖形化語言描述,不過,標准中一般將該語言划分到圖形語言中。
該語言有簡單的幾個要素:步,轉換,有向箭頭。
步:該語言將過程循環分解開的清晰並且連續的階段。
轉換:步與步之間遷移的條件,由有向連線將步與轉換進行連接。
步分為初始步,活動步,非活動步。在圖形語言中,初始步與其他步區別明顯。活動步與非活動步之間的區別一般在編譯器中被以顏色進行區分。在文本語言描述中,初始步的描述為:
INITIAL_STEP XXX:
(Body)
END_STEP
普通步則為:
STEP XXX:
(Body)
END_STEP
步有兩個參數,一個是步狀態,另一個是步消逝時間。步狀態可以使用***.X來訪問,類型為布爾類型,消逝時間是Time類型的變量,可以用***.T來訪問。
每個SFC網絡中必須有至少一個初始步。對於某些過程,可能存在多個不同的進入序列的位置,此時就需要設置多個初始步。
與步相連,位於步右側的圖塊是動作,動作時一個或一組執行邏輯的組合,這里或是置位,或是賦值,或是調用函數或功能塊。使用語言也不定,ST,FBD,LD都可以。但是西門子的默認設置為SCL語言,三菱則默認梯形圖。
動作分為存儲型動作和非存儲型動作。存儲型動作就是將輸出位置位,待到下一個某步動作再將輸出位復位。動作類型的選擇依據限定符的選擇而定,有空限定符,N非存儲型動作,S存儲型動作,R復位動作,L時限動作,D延時動作以及這些限定符的組合例如:LS,DS,DR等等。如果使用N和空限定符以外的限定符,那動作程序中就不能使用某些指令,比如,如果使用存儲型S限定符,在西門子中,就只能用SCL語言輸入置位位,不能有其他輸入。如果有多個置位,那就得新建多個動作分別存儲執行。奇怪的是,西門子的編輯界面中有各類限定符可選,而三菱的GWORKS3中只能選擇N:非存儲型動作限定符。不過與此對應的在三菱的動作中,可以輸入若干條梯形圖指令,類似於子程序。
動作與步直接相連,步轉變為活動步時,動作就根據自己的限定符做響應執行。沒有動作或空動作的步是空步,運行時,直接跳到下一個轉換做判斷。
在動作中,可以執行輸入輸出操作,也可以執行程序塊和函數的調用。輸入輸出操作使用簡單的梯形圖或ST語言描述,如果使用文本型語言描述程序塊的調用,則使用CALL語句來調用。動作和轉換以及步都有對應的名稱,動作默認名為Action_*,步默認名為STEP*,轉換名默認為Transition_*。這些名稱可以自定義,但是不能重復。對於轉換,還有一個優先級的屬性,是整數數值。選擇分支時,優先執行高優先級的轉換判斷,如果沒有設優先級或優先級相同,則在SFC網絡視圖中按從左到右的順序執行轉換判斷。
轉換
轉換是一個步與步交接令牌的條件,是一個布爾量。針對不同的狀態,轉換又分為兩種,一種是【使能轉換】一種是【非使能轉換】。使能轉換是指,當通過有向連線連接的所有前級步都處於活動步狀態時,該轉換就稱為使能轉換。而與之對應的則稱為非使能轉換。如果一個使能轉換自身的條件判斷結果為真,就是說轉換條件達成,則稱為實現轉換或觸發。實現轉換后與該轉換連接的后級步將立刻轉變為活動步,這一操作稱為【轉換的清除】,前級步均變為非活動步,這稱為【轉換的進展】。
轉換的核心是一個布爾條件,在網絡中以處於前后級步中間的有向連線畫橫表示。橫線右側顯示轉換名和優先級。左側一般顯示轉換條件,這里即可以直接使用視圖結構將梯形圖邏輯引到轉換做為輸出(西門子),也可以將轉換作為子程序,並在子程序中將轉換名作為線圈輸出,還可以使用專有線圈比如三菱中的虛擬線圈【TRAN】。標准中,使用ST語言可以用2種句式來表述:
第一種,不適用轉換名,直接寫到步與步之間
STEP STEP1: END_STEP
TRANSITION FROM STEP1 TO STEP2
(*/*)
END_TRANSITION
STEP STEP2: END_STEP
第二種,使用轉換名,同時需要在轉換附近定義轉換名
TRANSITION TRAN**
(*/*)這個布爾值的求解,將賦值到由轉換名標記的位置。
END_TRANSITION
在轉換處,可以將網絡拓展為分支或並行結構,也可以將分支合並。SFC網絡按照步與步的順序結構分為5種:
1、單序列
2、選擇序列-開始...分支
3、選擇序列-結束...合並
4、並行序列-開始...分支
5、並行序列-結束...合並
這里選擇序列和並行序列看起來相似,但因為轉換的位置不同而區分,具體如下(截標准圖):
注意上圖所示的轉換D/E/F/G和H/M的位置區別。
單序列結構是自上而下的走向,單一路徑。選擇序列中,開始分支結構的轉換變為使能轉換時,所有使能轉換按優先級或從左到右的順序依次判定,哪個先為真就執行向哪一個分支進展。同時,此處的轉換應當是互斥的,或有優先級的。在結束合並結構中,后級步的前級轉換任意一個從使能轉換變為實現轉換后,后級步就進展變為活動步,序列開始向下。並行序列中,開始分支結構的轉換的后級步有若干個,只要實現轉換達成,則后級步同步激活並使序列向下執行。而結束合並結構相反,必須是該轉換的所有前級步都成為活動步,才使能並去判斷實現轉換,序列才向下進展。
除了分支結構,實際編程時還有跳轉,標准中是一個有向連線去指向某一轉換下方來表示。比如西門子博圖和三菱GWORK3中的編寫。跳轉是包含轉換的。類似於選擇序列的結束合並分支。
通過以上幾種序列的組合可以實現多種控制邏輯,但是實際編寫時,需要注意防止出現不可達序列或不安全序列。不可達步就是存在某種狀態,序列停止無法繼續向下進展,這容易發生在並行序列的結束合並分支中。不安全序列則是出現了序列無限循環。序列的進展在程序內部不斷循環不能正常進行。