Copyright: ISaGRAF V3.4


案件架構

ISaGRAF案件分成數個可以撰寫的單位 - 稱為程式。案件中的程式是以樹狀結構的方式連結在一起。程式可以用任何SFC、FC (流程圖)、FBD、LD、ST或IL等以繪圖或文字形態的語言來撰寫。

程式

循序的與週期的運作

SFC及FC子程式

函數與副程式

功能方塊

描述語言

執行的規則


程式

程式就是一個具邏輯性的可程式單位，敘述處理變數的流程。程式也能敘述成流程性或週期性的運作。週期性的程式是在每一次目標系統的循環時間執行一次，流程性的程式則是依SFC或FC語言的動態規則來執行。

程式就像樹狀架構般的被連結在一起。被擺在樹狀架構上層的程式是由系統來啟動，而下層的程式 (樹狀架構中較下層的程式) 則是由其自身所屬的父程式來啟動的。程式可以用下列任何以繪圖或文字形態的語言來撰寫：

循序式功能圖 (SFC) 用於高階的程式撰寫

流程圖 (FC) 用於高階的程式撰寫

功能方塊 (FBD) 用於複雜的週期性的運作

階梯圖 (LD) 只用於布林變數的運作

結構化文字 (ST) 用於任何週期性的運作

指令集 (IL) 用於低階的運作

除了FBD 和LD 的符號可以混合運用在同一個圖表中以外，相同的程式只能以一種語言撰寫。


循序的與週期的運作

程式的樹狀結構被劃分為四個主要區域或群組：

開始	每次目標硬體的循環時間起始時，此區程式會被執行

循序	程式依SFC或FC語言的動態規則來執行

結束	每次目標硬體的循環時間結束時，此區程式會被執行

函數	給所有程式呼叫的副程式集

在 "開始" 區域或 "結束" 區域中的程式是被敘述成週期式的處理，且不受時間的影響。在 "循序" 區的程式則被敘述成順序式的處理，其中計時器變數是明確地同步出現於各基本動作中。"開始" 區中的主程式在每一次程式執行循環的開始都會被有系統的執行。"結束" 區中的主程式在每一次程式執行循環的結尾都會被有系統的執行。"循序" 區的程式則依據SFC或FC的規則執行。

"函數" 區的程式是一種副程式，且在案件中的任何程式都可以呼叫使用它。"函數" 區的程式可以呼叫此區內的其它程式。

循序區的主程式和子程式必須以SFC或FC語言撰寫，週期區域 (開始和結束) 的程式則不能以SFC或FC語言撰寫。任何區域中的任何程式都可以有一個或多個副程式，循序區的任何程式都可以有一個或多個的SFC或FC子程式 (根據它所使用的程式語言)，副程式不能以SFC或FC語言撰寫。

開始區的程式通常用來預先處理一些運作於輸入設備的輸入變數，這類變數會經常的被循序區的程式使用。結束區的程式通常用於把循序區處理過的變數，在其將值輸出到設備前，先做確認的處理。


SFC及FC子程式

任何循序區的SFC程式皆可以控制其它的SFC程式，此種階層較低的SFC程式我們稱為SFC子程式。SFC子程式是種可以被其父程式啟動、刪除、冰凍或反冰凍的並行處理程式，而父程式與子程式必須以SFC語言來撰寫。SFC子程式可以使用區域變數及定義字。

當父程式啟動SFC子程式時，它將會放置SFC的權杖記號 (token) (動作) 到SFC子程式的每個初使步驟中。啟動子程式的指令是用GSTART。當父程式停止SFC子程式時，它將會清除所有位於SFC子程式步驟中的權杖記號。停止子程式的指令是用GKILL。

當父程式冰凍SFC子程式時，它會暫停它的執行。然後可以用GRST指令讓被暫停的程式重新執行。

循序區中的任何FC程式可以控制其他的FC副程式。FC副程式執行期間FC父程式會被凍結住 (變成等待狀態)。同時讓FC父程式及它的FC副程式執行是不可能的。


函數與副程式

副程式或函數的執行與否，是由其父程式決定。父程式的運作會因執行副程式或函數而暫停，直到副程式或函數執行結束為止：

主程式	副程式

任何區域中的任何程式都可以有一個或多個副程式。副程式只被一個父程式擁有，副程式可以使用區域變數及定義字。除了SFC或FC語言之外的其它語言都能用來撰寫副程式。"函數" 區內的程式是可以被案件中的其它程式呼叫使用的一種副程式，與其它副程式不同的是 "函數" 區內的程式不需選擇父程式。"函數" 區的程式可以呼叫此區內的其它程式，也可以被放置在程式庫中。

注意：ISaGRAF系統在執行不支援遞迴呼叫函數，如果 "函數" 區的程式被自己或是被它自己呼叫的副程式呼叫的話，則在執行時會產生錯誤。

注意：函數或副程式並不會儲存屬於自身的區域變數值。函數或副程式並不是種樣例，因此不能呼叫功能方塊。

副程式的界面必須清楚的定義，副程式的每個呼叫或是返回的參數都要有一種形態和唯一的名稱。為了要支援ST語法的規則，因此返回參數和副程式的名稱必須相同。

下面的例子顯示出，如何以不同語法，在副程式的本體中設定返回參數的值：

ST:	指定返回參數使用自己的名稱

(與副程式相同的名稱)：

   副程式名稱 := <expression>;

IL:	在整個程序的最後，所得到目前的值 (IL暫存器)，會被儲存到返回的參數中：

   LD	10

   ADD	20   (* 返回的參數值 = 30 *)

FBD:	使用自己的名稱來設定返回參數：

副程式名稱

LD:	使用一名稱為返回參數的線圈符號：

副程式名稱


功能方塊

功能方塊能使用的語法有：LD、FBD、ST或IL。功能方塊是可以做成樣例的，也就是說一個功能方塊的區域變數可以被其它樣例複製。當呼叫程式的一個方塊時，事實上你是在呼叫方塊的樣例：雖然相同的執行碼被呼叫，但會對不同的樣例配置不同的資料區間。樣例的變數值是從一個週期到另一週期時被儲存起來。

注意：

-	以IEC語言所撰寫的功能方塊，無法去呼叫另一個功能方塊：樣例的架構只能用來管理方塊本身的區域變數。下面是一些標準功能方塊表列，你無法在其內部使用一個IEC標準的功能方塊：

SR、RS、R_trig、F_trig、SEMA、CTU、CTUD、TON、TOF、TP、CMP、Stacklnt、AVERAGE、HYSTER、LIM_ALRM、INTEGRAL、DERIVATE、BLINK、SIG_GEN

-	基於同樣的原因，你不能使用Positive或Negative的接點或線圈，或Set與Reset線圈。

-	對3.0x版本的目標硬體來說，用TSTART與TSTOP來啟動或停止計時器的功能，不能使用於功能方塊中，但在3.20板的硬體上就能工作。

-	當你的功能方塊中需要作一個迴圈，迴圈之前你必須使用區域變數，如下例子所示：

這個將無法工作：	這個將正常工作：


描述語言

程式可以用下列任何以繪圖或文字形態的語言來撰寫：

循序式功能圖 (SFC) 用於高階的程式撰寫

流程圖 (FC) 用於高階的程式撰寫

功能方塊 (FBD) 用於複雜的週期性的運作

階梯圖 (LD) 只用於布林變數的運作

結構式文字 (ST) 用於任何週期性的運作

指令集 (IL) 用於低階的運作

相同的程式不能混合多種語言來撰寫。每當程式被創造時，必須選擇一種語言來描述這個程式，並且往後都不能更改，但是，FBD 和LD則可以混合運用在同一個程式中。


執行的規則

ISaGRAF是一種同步的系統，所有的運作皆是由一計時器來觸發。基本的時間單位稱為週期時間：

在一個硬體循環時間內的標準運作處理為：

此系統就可以：

-	保證輸入變數在一個週期中能保持相同的值，

-	保證輸出變數在一個週期中不會被重複更新，

-	相同的變數可以很安心的使用於不同的程式中，

-	估計與控制完整應用程式的回應時間。